:root{
  --pink-700:#A8475C;--pink-800:#933E51;--pink-500:#E79394;--pink-100:#FCE4E6;--pink-50:#FDF4F4;
  --purple-800:#5B3F7D;--purple-600:#7A5A9E;--purple-400:#AB8BC8;--purple-100:#D8CBE4;--purple-50:#F5F0FA;--purple-hover:#E4D6F1;--purple-soft:#8A74AD;
  --ink:#2A2433;--ink-2:#6B6475;--paper:#FBF7F4;--surface:#FFFFFF;--cream:#FFF3D6;--line:#DEDADD;
  --dis-bg:#F0EDF3;--dis-text:#6F687A;--dis-border:#B9B2C4;
  --u-fill:#CFE5D2;--u-line:#3F7A55;--r-fill:#DCCFE8;--r-line:#6A4A92;--m-fill:#F5DFBC;--m-line:#9A5A12;--c-fill:#CCDEF1;--c-line:#3A6597;
  --duo2:#E8C7D0;--map-line:#B6A2CC;
  --sh-1:0 2px 8px rgba(91,62,84,.08);--sh-2:0 8px 24px rgba(91,62,84,.10);--sh-3:0 18px 45px rgba(91,62,84,.10);
  --ease:cubic-bezier(.2,.8,.2,1);--expo:cubic-bezier(.22,1,.36,1);--spring:cubic-bezier(.34,1.36,.64,1);--sheet:cubic-bezier(.32,.72,0,1);
  --f:"Noto Sans TC","PingFang TC","Microsoft JhengHei",system-ui,sans-serif;
  --fn:"Plus Jakarta Sans","Noto Sans TC",system-ui,sans-serif;
  --header:64px;--tabbar:64px;--gutter:clamp(16px,4vw,64px);--measure:40em;
  color-scheme:light;
}
:root[data-fs="1"]{font-size:112.5%}
:root[data-fs="2"]{font-size:125%}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-padding-top:calc(var(--header) + 8px)}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--f);font-size:1.0625rem;line-height:1.7;font-weight:400;overflow-x:hidden}
@media(min-width:1024px){body{font-size:1.125rem}}
h1,h2,h3,h4,p{margin:0}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;-webkit-tap-highlight-color:transparent}
a{color:var(--purple-600)}
img{max-width:100%;display:block}
.sr{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
:focus-visible{outline:3px solid var(--purple-600);outline-offset:3px}
.num{font-family:var(--fn);font-variant-numeric:tabular-nums}
.ico{width:24px;height:24px;flex:none;fill:currentColor;display:inline-block;vertical-align:middle}
.ico.s20{width:20px;height:20px}.ico.s32{width:32px;height:32px}
.duo .d2{fill:var(--duo2);opacity:1}
.duo{color:var(--r-line)}
.wrap{padding:0 var(--gutter)}

/* ---------- buttons & chips ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 20px;border-radius:999px;border:1.5px solid transparent;font-weight:700;font-size:1rem;line-height:1.3;text-decoration:none;transition:background-color .2s var(--ease),border-color .2s var(--ease),transform .15s var(--ease);white-space:nowrap}
.btn:active{transform:scale(.98)}
.btn-primary{background:var(--pink-700);color:#fff}
.btn-primary:hover{background:var(--pink-800)}
.btn-secondary{background:var(--purple-50);color:var(--purple-800);border-color:var(--purple-600)}
.btn-secondary:hover{background:var(--purple-hover);border-color:var(--purple-800)}
.btn-ghost{background:transparent;color:var(--purple-800)}
.btn-ghost:hover{background:var(--purple-50)}
.btn-onmap{background:#fff;background:rgba(255,255,255,.78);color:var(--purple-800);border-color:var(--purple-600);min-height:40px}
.btn-onmap:hover{background:#fff}
.btn[disabled],.btn.is-disabled{background:var(--dis-bg);color:var(--dis-text);border:1.5px dashed var(--dis-border);cursor:not-allowed;transform:none}
.btn.sm{min-height:44px;padding:0 16px;font-size:.9375rem}
.icon-btn{width:44px;height:44px;min-height:44px;padding:0;border-radius:999px}
.btn.loading{pointer-events:none}
.spin{width:20px;height:20px;border-radius:50%;border:2.5px solid rgba(255,255,255,.45);border-top-color:#fff;animation:spin .9s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.link{background:none;border:0;padding:8px 4px;min-height:44px;color:var(--purple-600);font-weight:700;text-decoration:underline;text-underline-offset:4px}

.chip{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 14px;border-radius:999px;background:var(--purple-50);color:var(--purple-800);border:1.5px solid var(--purple-600);font-size:.9375rem;font-weight:700;line-height:1.2;white-space:nowrap;transition:background-color .2s var(--ease),border-color .2s var(--ease),transform .15s var(--ease)}
.chip:hover{background:var(--purple-hover);border-color:var(--purple-800)}
.chip:active{transform:scale(.98)}
.chip[aria-pressed="true"],.chip[aria-checked="true"],.chip[aria-selected="true"]{background:var(--purple-800);border-color:var(--purple-800);color:#fff}
.chip .cnt{font-family:var(--fn);font-size:.8125rem;font-weight:800;min-width:24px;height:24px;padding:0 7px;border-radius:999px;background:#fff;color:var(--purple-800);border:1px solid var(--purple-600);display:inline-flex;align-items:center;justify-content:center}
.chip[aria-pressed="true"] .cnt,.chip[aria-selected="true"] .cnt,.chip[aria-checked="true"] .cnt{background:#fff;color:var(--ink);border-color:#fff}
.chip[disabled]{background:var(--dis-bg);color:var(--dis-text);border:1.5px dashed var(--dis-border);cursor:not-allowed}
.chip .ico.duo{width:22px;height:22px}
.chip[aria-pressed="true"] .ico.duo,.chip[aria-selected="true"] .ico.duo,.chip[aria-checked="true"] .ico.duo{color:#fff}
.chip[aria-pressed="true"] .ico.duo .d2,.chip[aria-selected="true"] .ico.duo .d2,.chip[aria-checked="true"] .ico.duo .d2{fill:#fff;opacity:.35}
.dot{width:10px;height:10px;border-radius:50%;flex:none;display:inline-block;box-shadow:0 0 0 1.5px #fff}
.dot.u{background:var(--u-line)}.dot.r{background:var(--r-line)}.dot.m{background:var(--m-line)}.dot.c{background:var(--c-line)}
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chips.scroll{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding:4px 2px 6px;scroll-padding:0 24px;-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 18px,#000 calc(100% - 28px),transparent 100%);mask-image:linear-gradient(90deg,transparent 0,#000 18px,#000 calc(100% - 28px),transparent 100%)}
.chips.scroll::-webkit-scrollbar{display:none}
.chips.scroll>:first-child{margin-left:12px}.chips.scroll>:last-child{margin-right:20px}

.card{background:var(--surface);border-radius:16px;box-shadow:var(--sh-1);padding:24px;transition:box-shadow .2s var(--ease)}
.card.tinted{background:var(--purple-50);border:1.5px solid var(--purple-soft);box-shadow:none}
.notice{background:var(--pink-50);border-radius:12px;padding:12px 14px;display:flex;gap:10px;align-items:flex-start;font-size:.9375rem;line-height:1.6}
.notice .ico{color:var(--pink-700);margin-top:1px}
.badge-num{align-self:flex-start;display:inline-flex;align-items:baseline;gap:4px;background:var(--pink-100);color:var(--pink-700);border-radius:999px;padding:6px 20px 6px 18px;font-family:var(--fn);font-weight:800;font-size:2.25rem;line-height:1.1;transform:skewX(-8deg)}
.badge-num small{font-family:var(--f);font-size:1rem;font-weight:700}
.slant{display:inline-block;transform:skewX(-8deg);transform-origin:left bottom}
.h-display{font-weight:900;font-size:2.75rem;line-height:1.05;letter-spacing:-.02em}
.h1{font-weight:900;font-size:2.125rem;line-height:1.12;color:var(--ink)}
.h2{font-weight:700;font-size:1.5rem;line-height:1.3;color:var(--purple-800)}
.h3{font-weight:700;font-size:1.25rem;line-height:1.4}
.small{font-size:.875rem;line-height:1.6}
.cap{font-size:.8125rem;font-weight:500;line-height:1.5;color:var(--ink-2)}
.muted{color:var(--ink-2)}
@media(min-width:1024px){.h1{font-size:3.5rem}.h2{font-size:2rem}.h3{font-size:1.5rem}}
.wavemark{width:24px;height:12px;flex:none;stroke:var(--purple-400);fill:none;stroke-width:2.5;stroke-linecap:round}
.wave-div{display:block;width:120px;height:16px;margin:32px auto;stroke:var(--purple-400);stroke-opacity:.55;stroke-width:2;fill:none;stroke-linecap:round}

/* ---------- header ---------- */
.hdr{position:sticky;top:0;z-index:40;height:var(--header);background:var(--paper);border-bottom:1px solid var(--line);transition:box-shadow .2s var(--ease)}
.hdr.scrolled{box-shadow:var(--sh-1)}
.hdr-in{height:100%;display:flex;align-items:center;gap:8px;padding:0 8px 0 var(--gutter)}
.brand-link{display:flex;align-items:center;text-decoration:none;color:var(--ink);min-height:44px;position:relative}
.wm{display:inline-flex;flex-direction:column;align-items:flex-start;transform:skewX(-8deg);transform-origin:left bottom;color:var(--ink);font-weight:900;letter-spacing:-.02em;line-height:1}
.wm .wm-name{font-size:var(--wm,1.3rem);white-space:nowrap}
.wm .wm-sub{display:flex;align-items:center;gap:.18em;font-size:max(12px,calc(var(--wm,1.3rem)*.5));margin-top:.18em;white-space:nowrap}
.wm .wm-1{width:1.35em;height:1.35em;border-radius:50%;background:var(--pink-700);color:#fff;display:inline-flex;align-items:center;justify-content:center;transform:skewX(8deg);font-family:var(--fn);font-weight:800}
.wm .wm-1 b{display:inline-block;transform:skewX(-8deg);font-weight:800}
.hdr .wm{--wm:1.3rem}
@media(min-width:1024px){.hdr .wm{--wm:1.5rem}}
.brand-link .wm{transition:opacity .12s linear}
body.hero-visible .brand-link .wm{opacity:0;visibility:hidden}
.hdr-nav{display:none;gap:4px;margin-left:24px}
.hdr-nav a{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 14px;border-radius:999px;text-decoration:none;color:var(--purple-800);font-weight:700;font-size:1rem}
.hdr-nav a:hover{background:var(--purple-50)}
.hdr-nav a[aria-current="page"]{background:var(--purple-50);color:var(--purple-600);box-shadow:inset 0 0 0 1.5px var(--purple-600)}
.hdr-right{margin-left:auto;display:flex;align-items:center;gap:2px}
.seg{display:inline-flex;border:1.5px solid var(--purple-600);border-radius:999px;padding:2px;background:#fff;margin-right:4px}
.seg button{min-height:38px;min-width:48px;padding:0 10px;border:0;border-radius:999px;background:transparent;color:var(--purple-800);font-weight:700;font-size:.9375rem;position:relative}
.seg button::after{content:"";position:absolute;inset:-3px -1px}
.seg button[aria-pressed="true"]{background:var(--purple-800);color:#fff}
@media(min-width:1024px){.hdr-nav{display:flex}}
@media(max-width:359px){.seg button{min-width:40px;padding:0 6px}}

.menu{position:fixed;z-index:60;top:calc(var(--header) - 4px);right:8px;width:min(320px,calc(100vw - 16px));background:#fff;border-radius:16px;box-shadow:var(--sh-2);padding:12px;display:none}
.menu.open{display:block}
.menu h3{font-size:.875rem;color:var(--ink-2);font-weight:700;margin:4px 8px 8px}
.menu .row{display:flex;gap:8px;padding:0 4px 12px;border-bottom:1px solid var(--line);margin-bottom:8px}
.menu .row .chip{flex:1;justify-content:center}
.menu-item{display:flex;width:100%;align-items:center;gap:12px;min-height:48px;padding:0 12px;border:0;background:transparent;border-radius:12px;color:var(--purple-800);font-weight:700;text-align:left;text-decoration:none;font-size:1rem}
.menu-item:hover{background:var(--purple-50)}
.menu-item .state{margin-left:auto;font-size:.8125rem;font-weight:700;color:var(--ink-2)}
.menu-item[aria-pressed="true"] .state{color:var(--pink-700)}

/* ---------- tab bar ---------- */
.tabbar{position:fixed;z-index:45;left:0;right:0;bottom:0;height:calc(var(--tabbar) + env(safe-area-inset-bottom,0px));padding-bottom:env(safe-area-inset-bottom,0px);background:var(--paper);border-top:1px solid var(--line);display:flex}
.tabbar a{flex:1;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;text-decoration:none;color:var(--ink-2);font-size:.8125rem;font-weight:700;min-height:44px;-webkit-tap-highlight-color:transparent}
.tabbar a .pill{display:flex;align-items:center;justify-content:center;width:56px;height:30px;border-radius:999px;transition:background-color .2s var(--ease),transform .15s var(--ease)}
.tabbar a:active .pill{transform:scale(.94);background:var(--purple-50)}
.tabbar a .ico-f{display:none}
.tabbar a[aria-current="page"]{color:var(--purple-600)}
.tabbar a[aria-current="page"] .pill{background:var(--purple-50)}
.tabbar a[aria-current="page"] .ico-r{display:none}
.tabbar a[aria-current="page"] .ico-f{display:inline-block}
.tabbar a[aria-current="page"]::before{content:"";position:absolute;top:0;left:50%;width:32px;height:3px;margin-left:-16px;border-radius:0 0 3px 3px;background:var(--purple-600)}
.tabbar a:focus-visible{outline-offset:-4px;border-radius:12px}
@media(min-width:1024px){.tabbar{display:none}:root{--tabbar:0px}}
main{min-height:calc(100vh - var(--header));padding-bottom:calc(var(--tabbar) + env(safe-area-inset-bottom,0px))}

/* ---------- footer ---------- */
.ftr{background:var(--purple-800);color:#fff;padding:32px 0 calc(32px + var(--tabbar) + env(safe-area-inset-bottom,0px))}
.ftr p{font-size:.9375rem;line-height:1.7;max-width:46em}
.ftr p+p{margin-top:10px}
.ftr .sm{font-size:.8125rem;opacity:.92}
.ftr a{color:#fff}
body.has-footer main{padding-bottom:0}

/* ---------- hero ---------- */
.hero{position:relative;padding:20px 0 16px;background:var(--paper)}
.hero .wm{--wm:2.5rem}
.hero-wm{display:inline-block;transform-origin:left bottom}
.hero .lead{margin-top:14px;font-size:1.125rem;font-weight:700;line-height:1.6;color:var(--ink);max-width:22em}
@media(min-width:1024px){.hero{padding:40px 0 24px}.hero .wm{--wm:3.25rem}.hero-wm{transform:rotate(-3deg)}.hero .lead{font-size:1.25rem}}
.wm-fly{position:fixed;z-index:70;pointer-events:none;margin:0;transform-origin:left bottom}

/* ---------- map ---------- */
.map-sec{position:relative}
.mapbox{position:relative;height:clamp(320px,96vw,68vh);border-radius:24px;overflow:hidden;background:var(--paper);box-shadow:var(--sh-1);touch-action:none;isolation:isolate}
@media(min-width:1024px){.mapbox{height:640px}}
.mapbox.compact{height:340px;min-height:300px;border-radius:16px}
.map-bg{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none}
.map-bg .band{position:absolute;top:-10%;left:-100%;width:300%;height:120%;opacity:.26;background:linear-gradient(118deg,#F6C5B8 0%,#E79394 18%,#D5A8C5 36%,#AB8BC8 50%,#D5A8C5 64%,#E79394 82%,#F6C5B8 100%);animation:flow 17s ease-in-out infinite alternate}
.map-bg .blob{position:absolute;width:300px;height:300px;border-radius:50%;filter:blur(60px);opacity:.32}
.map-bg .b1{background:#F6C5B8;left:-60px;top:-60px;animation:drift1 21s ease-in-out infinite alternate}
.map-bg .b2{background:#C9ACD1;right:-80px;top:20%;animation:drift2 24s ease-in-out infinite alternate}
.map-bg .b3{background:#EABFC6;left:30%;bottom:-120px;animation:drift1 18s ease-in-out infinite alternate-reverse}
@keyframes flow{from{transform:translateX(0)}to{transform:translateX(33.333%)}}
@keyframes drift1{from{transform:translate(0,0)}to{transform:translate(60px,40px)}}
@keyframes drift2{from{transform:translate(0,0)}to{transform:translate(-50px,50px)}}
.waves{position:absolute;left:0;right:0;bottom:0;height:86%;z-index:1;pointer-events:none;overflow:hidden}
.waves svg{position:absolute;bottom:0;left:0;width:200%;height:100%}
.waves .w1{fill:#F6C5B8;opacity:.32;animation:wv 48s ease-in-out infinite alternate}
.waves .w2{fill:#D9B6D1;opacity:.32;animation:wv 36s ease-in-out infinite alternate-reverse}
.waves .w3{fill:#AB8BC8;opacity:.22;animation:wv 28s ease-in-out infinite alternate}
@keyframes wv{from{transform:translateX(0)}to{transform:translateX(-25%)}}
.mapsvg{position:absolute;inset:0;width:100%;height:100%;z-index:2;display:block;cursor:grab}
.mapsvg.dragging{cursor:grabbing}
.mapsvg .shadow{fill:#FBF7F4;filter:drop-shadow(0 2px 4px rgba(91,62,84,.10)) drop-shadow(0 16px 36px rgba(91,62,84,.14));transition:opacity .36s var(--ease)}
.mapsvg.dragging .shadow{opacity:0;transition:none}
.mapsvg .dfill{transition:opacity .4s var(--ease),filter .4s var(--ease);outline:none}
.mapsvg .zone-ov{pointer-events:none;opacity:.42;transition:opacity .4s var(--ease)}
.mapsvg .ov{pointer-events:none;opacity:0;transition:opacity .32s var(--expo)}
.mapsvg .ov.hov{opacity:.18;transition:opacity .22s var(--expo)}
.mapsvg .ov.sel{opacity:.38;transition:opacity .28s var(--spring)}
.mapsvg .ov.press{opacity:.26}.mapsvg .ov.sel.press{opacity:.42}
.mapsvg .ov.lit-pale{opacity:1;fill:var(--pink-100)!important}
.mapsvg .ov.lit{opacity:1;fill:var(--pink-500)!important}
.mapsvg .ov.lit-cur{opacity:1;fill:var(--pink-700)!important;fill-opacity:.55}
.mapsvg .lines path{fill:none;stroke:var(--map-line);stroke-width:1.2;vector-effect:non-scaling-stroke;stroke-linejoin:round;pointer-events:none}
.mapsvg .ol{fill:none;stroke-width:0;vector-effect:non-scaling-stroke;stroke-linejoin:round;pointer-events:none;transition:stroke-width .32s var(--expo)}
.mapsvg .ol.hov{stroke-width:2;transition:stroke-width .22s var(--expo)}
.mapsvg .ol.sel{stroke-width:3;transition:stroke-width .28s var(--spring)}
.mapsvg .ol.foc{stroke:var(--purple-600)!important;stroke-width:2.5}
.mapsvg .ol.sel.foc{stroke-width:3.5}
.mapsvg .seatl path{fill:none;stroke:var(--purple-soft);stroke-width:2.2;vector-effect:non-scaling-stroke;stroke-linejoin:round;pointer-events:none}
.mapsvg .seat-ol{fill:none;stroke-width:0;vector-effect:non-scaling-stroke;pointer-events:none;stroke-linejoin:round}
.mapsvg .seat-ol.sel{stroke-width:3}
.mapsvg.filtering .dfill.out{opacity:.35;filter:saturate(.3)}
.mapsvg.filtering .zone-ov.out{opacity:.12}
.mapsvg .scan{pointer-events:none;fill:#F4C9CB}
.map-labels{position:absolute;inset:0;z-index:3;pointer-events:none}
.mlabel{position:absolute;transform:translate(-50%,-50%);font-size:13px;font-weight:700;line-height:1.2;color:var(--ink);white-space:nowrap;text-shadow:0 0 4px #fff,0 0 4px #fff,0 0 3px #fff,0 0 2px #fff;transition:opacity .2s linear}
.mlabel.is-sel{font-weight:900}
.mlabel.dim{color:var(--ink-2)}
.mlabel.seatno{font-family:var(--fn);font-weight:800;font-size:13px;background:#fff;border:1.5px solid var(--purple-600);color:var(--purple-800);width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;text-shadow:none}
.mlabel.seatno.is-sel{background:var(--purple-800);color:#fff}
.marker{position:absolute;z-index:4;transform:translate(-50%,-100%);pointer-events:none;display:flex;flex-direction:column;align-items:center;transition:left .6s var(--ease),top .6s var(--ease)}
.marker .tag{background:var(--pink-700);color:#fff;font-weight:700;font-size:.8125rem;padding:4px 10px;border-radius:999px;box-shadow:var(--sh-2);white-space:nowrap}
.marker .pin{width:14px;height:14px;border-radius:50%;background:var(--pink-700);border:3px solid #fff;margin-top:4px;box-shadow:var(--sh-1)}
.hint-ring{position:absolute;z-index:4;width:56px;height:56px;margin:-28px 0 0 -28px;border-radius:50%;border:3px solid var(--pink-700);pointer-events:none;animation:hint 8s var(--ease) infinite}
@keyframes hint{0%{transform:scale(.6);opacity:0}15%{opacity:.9}45%{transform:scale(1.25);opacity:0}100%{transform:scale(1.25);opacity:0}}
.hint-tip{position:absolute;z-index:5;transform:translate(-50%,calc(-100% - 34px));background:#fff;border-radius:12px;padding:6px 12px;box-shadow:var(--sh-2);font-size:.875rem;font-weight:700;white-space:nowrap;pointer-events:none}
.map-ctrl{position:absolute;z-index:6;right:12px;bottom:12px;display:flex;flex-direction:column;align-items:flex-end;gap:8px;transition:bottom .36s var(--sheet)}
.map-ctrl .zoom{display:flex;flex-direction:column;gap:8px}
.map-ctrl .icon-btn{width:44px;height:44px;border-radius:50%}
.map-ctrl .home{min-height:40px;padding:0 14px;font-size:.9375rem}
@media(max-width:359px){.map-ctrl .home span{display:none}.map-ctrl .home{width:44px;padding:0}}
.map-state{position:absolute;inset:0;z-index:8;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px;background:var(--paper);text-align:center;padding:24px}
.skel{width:70%;max-width:420px;aspect-ratio:1/0.76;border-radius:40% 55% 45% 60%;background:linear-gradient(90deg,var(--purple-50) 0%,var(--purple-100) 50%,var(--purple-50) 100%);background-size:200% 100%;animation:skel 12s linear infinite}
@keyframes skel{to{background-position:-200% 0}}
.map-legend{position:absolute;z-index:6;left:12px;top:12px;display:flex;gap:6px;flex-wrap:wrap;max-width:calc(100% - 24px)}
.map-legend span{display:inline-flex;align-items:center;gap:6px;font-size:.8125rem;font-weight:700;background:#fff;border-radius:999px;padding:3px 10px 3px 8px;box-shadow:var(--sh-1)}
.mode-tag{position:absolute;z-index:6;left:12px;top:12px;background:#fff;border:1.5px solid var(--purple-600);color:var(--purple-800);font-weight:700;border-radius:999px;padding:4px 12px;font-size:.875rem}

/* filters under map */
.filters{margin-top:16px;display:grid;gap:12px}
.filters .row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.locate-note{font-size:.875rem;color:var(--ink-2);display:flex;gap:6px;align-items:flex-start}
.dgrid-wrap{margin-top:24px}
.dgroup{margin-top:16px}
.dgroup h3{display:flex;align-items:center;gap:8px;font-size:1rem;font-weight:700;margin-bottom:8px}
.dgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
@media(min-width:1024px){.dgrid{grid-template-columns:repeat(4,1fr)}}
@media(max-width:359px){.dgrid{grid-template-columns:repeat(2,1fr)}}
.dgrid .chip{justify-content:center;width:100%}

/* ---------- entry prompt ---------- */
.entry{position:fixed;z-index:44;left:12px;right:12px;bottom:calc(var(--tabbar) + env(safe-area-inset-bottom,0px) + 12px);background:#fff;border-radius:24px;box-shadow:var(--sh-3);padding:20px 16px 14px;max-width:440px;margin:0 auto}
@media(min-width:1024px){.entry{left:auto;right:32px;bottom:32px;width:380px;margin:0}}
.entry h2{font-size:1.375rem;font-weight:900;color:var(--ink);padding-right:44px}
.entry .x{position:absolute;right:8px;top:8px}
.entry-opts{display:grid;gap:8px;margin-top:12px}
.entry-opt{display:flex;align-items:center;gap:12px;min-height:60px;padding:8px 14px;border-radius:16px;background:var(--purple-50);border:1.5px solid var(--purple-600);color:var(--purple-800);text-align:left;transition:background-color .2s var(--ease)}
.entry-opt:hover{background:var(--purple-hover)}
.entry-opt:active{transform:scale(.98)}
.entry-opt b{display:block;font-size:1.0625rem;line-height:1.3}
.entry-opt span.h{display:block;font-size:.875rem;color:var(--ink-2);font-weight:400;line-height:1.4}
.entry-opt .ico:last-child{margin-left:auto}
.entry .foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:6px;flex-wrap:wrap}
.entry .unoff{font-size:.8125rem;color:var(--ink-2)}
@media(max-height:640px) and (max-width:1023px){.entry-opt span.h{display:none}.entry-opt{min-height:52px}}

/* ---------- district sheet ---------- */
.sheet{position:fixed;z-index:50;left:0;right:0;bottom:0;height:92vh;height:92dvh;background:#fff;border-radius:24px 24px 0 0;box-shadow:0 -8px 24px rgba(91,62,84,.10);display:flex;flex-direction:column;transform:translateY(100%);transition:transform .36s var(--sheet);will-change:transform;visibility:hidden}
.sheet.open{visibility:visible}
.sheet .grab{height:28px;flex:none;display:flex;align-items:center;justify-content:center;cursor:grab;touch-action:none;border:0;background:transparent;width:100%}
.sheet .grab span{width:40px;height:5px;border-radius:3px;background:var(--dis-border)}
.sheet-hd{padding:0 16px 12px;flex:none;border-bottom:1px solid transparent}
.sheet.snap-full .sheet-hd,.sheet.snap-half .sheet-hd{border-bottom-color:var(--line)}
.sheet-top{display:flex;align-items:flex-start;gap:8px}
.sheet-top .zn{display:flex;align-items:center;gap:6px;font-size:.9375rem;font-weight:700;color:var(--ink-2)}
.sheet-top .dn{font-size:1.75rem;font-weight:900;line-height:1.2;color:var(--ink)}
.sheet-top .acts{margin-left:auto;display:flex;gap:6px;align-items:center}
.sheet .summary{font-size:.9375rem;color:var(--ink-2);margin-top:2px}
.rel{margin-top:10px}
.rel-btn{min-height:40px}
.rel-body{margin-top:8px;font-size:1rem;background:var(--purple-50);border-radius:12px;padding:12px 14px}
.sheet-body{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:12px 16px 32px;-webkit-overflow-scrolling:touch}
.sheet.snap-peek .sheet-body{overflow:hidden}
.sheet .topics{margin:0 -16px}
.plist{list-style:none;margin:12px 0 0;padding:0;display:grid;gap:8px}
.pitem{border:1px solid var(--line);border-radius:16px;background:#fff}
.pitem button{display:flex;width:100%;gap:12px;align-items:flex-start;text-align:left;padding:14px;background:transparent;border:0;border-radius:16px;min-height:56px}
.pitem button:hover{background:var(--purple-50)}
.pnum{flex:none;width:32px;height:32px;border-radius:50%;border:1.5px solid var(--purple-600);background:#fff;color:var(--purple-800);font-family:var(--fn);font-weight:800;font-size:.9375rem;display:flex;align-items:center;justify-content:center;margin-top:1px}
.ptitle{flex:1;font-weight:700;font-size:1.0625rem;line-height:1.5}
.ptag{display:block;font-size:.8125rem;font-weight:700;color:var(--ink-2);margin-top:2px}
.pitem .caret{color:var(--purple-800);transition:transform .2s var(--ease);margin-top:4px}
.pitem button[aria-expanded="true"] .caret{transform:rotate(180deg)}
.pbody{padding:0 16px 16px 58px;font-size:1.0625rem;line-height:1.7}
@media(min-width:1024px){.pbody{font-size:1.125rem}}
.pbody[hidden]{display:none}
.sample-note{margin-top:16px;font-size:.8125rem;color:var(--ink-2)}
@media(min-width:1024px){
  .sheet{left:auto;right:32px;top:calc(var(--header) + 24px);bottom:24px;width:432px;height:auto;border-radius:24px;box-shadow:var(--sh-2);transform:translateX(calc(100% + 40px));transition:transform .36s var(--sheet)}
  .sheet.open{transform:none}
  .sheet .grab{display:none}
  .sheet-hd{padding-top:20px}
  .sheet.collapsed{bottom:auto}
  .sheet.collapsed .sheet-body{display:none}
}

/* ---------- pages ---------- */
.page{padding-top:24px;padding-bottom:48px}
.page-hd{position:relative;padding:28px 0 32px;margin-bottom:8px;background:linear-gradient(180deg,var(--paper) 0%,#F5D9D7 60%,#EABFC6 100%);overflow:hidden}
.page-hd .h1{display:inline-block;transform:skewX(-8deg);transform-origin:left bottom}
.page-hd p{margin-top:8px;font-weight:700;color:var(--ink);max-width:30em}
.page-hd .edge{position:absolute;left:0;right:0;bottom:-1px;width:100%;height:40px;fill:var(--paper)}
.sec{margin-top:40px}
.sec>.h2{margin-bottom:16px}

.tgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
@media(min-width:768px){.tgrid{grid-template-columns:repeat(3,1fr)}}
@media(min-width:1024px){.tgrid{grid-template-columns:repeat(4,1fr);gap:16px}}
@media(max-width:359px){.tgrid{grid-template-columns:1fr}}
.tcard{display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:18px 16px;border-radius:16px;background:var(--purple-50);border:1.5px solid var(--purple-soft);text-align:left;min-height:132px;transition:box-shadow .2s var(--ease),background-color .2s var(--ease),border-color .2s var(--ease)}
.tcard:hover{box-shadow:var(--sh-2);background:#fff}
.tcard:active{transform:scale(.98)}
.tcard[aria-pressed="true"]{border:2px solid var(--purple-600);background:#fff}
.tcard .tn{font-size:1.25rem;font-weight:900;color:var(--ink)}
.tcard .tc{font-size:.875rem;color:var(--ink-2);font-weight:700}
.tcard .tc b{font-family:var(--fn);color:var(--pink-700);font-size:1.125rem}
.tcard.city{background:#fff;border-color:var(--purple-600)}
.city-list{display:grid;gap:12px}
@media(min-width:768px){.city-list{grid-template-columns:1fr 1fr}}
.city-item{display:flex;flex-direction:column;gap:10px}
.city-item .h3{color:var(--ink)}
.city-item .tagline{display:flex;gap:8px;align-items:center;font-size:.875rem;font-weight:700;color:var(--purple-800)}
.tdetail-group{margin-top:20px}
.tdetail-group h3{display:flex;align-items:center;gap:8px;font-size:1.125rem;margin-bottom:8px}

/* her */
.portrait{position:relative;aspect-ratio:4/5;max-width:320px;border-radius:24px;overflow:hidden;background:linear-gradient(180deg,#F4D7D5 0%,#EAD2E0 55%,#C9ACD1 100%)}
.portrait svg{position:absolute;left:50%;bottom:0;width:78%;transform:translateX(-50%);fill:#fff;opacity:.85}
.portrait .cap{position:absolute;left:12px;bottom:10px;background:#fff;border-radius:999px;padding:2px 10px;color:var(--ink-2)}
.her-top{display:grid;gap:24px;align-items:end}
@media(min-width:768px){.her-top{grid-template-columns:320px 1fr}}
.stepper{list-style:none;margin:0;padding:0;position:relative}
.step{position:relative;display:grid;grid-template-columns:40px 1fr;gap:12px;padding-bottom:20px}
.step::before{content:"";position:absolute;left:19px;top:40px;bottom:0;width:2px;background:var(--line)}
.step:last-child::before{display:none}
.step.done::before{background:var(--purple-400)}
.step .sn{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:1.5px solid var(--purple-600);background:#fff;color:var(--purple-800);font-family:var(--fn);font-weight:800}
.step.done .sn{background:var(--purple-800);color:#fff;border-color:var(--purple-800)}
.step.active .sn{background:var(--pink-700);border-color:var(--pink-700);color:#fff;box-shadow:0 0 0 4px var(--pink-100)}
.step .st{font-weight:700;font-size:1.0625rem;line-height:1.5}
.step .sy{font-family:var(--fn);font-weight:700;font-size:.875rem;color:var(--ink-2)}
.step .sd{font-size:1rem;color:var(--ink);margin-top:2px}
.step.active .st{color:var(--pink-700)}
.step .state-t{font-size:.75rem;font-weight:700;margin-left:6px;color:var(--ink-2)}
.chapter-title{display:inline-block;transform:skewX(-8deg);transform-origin:left bottom;font-weight:900}
.bars{display:grid;gap:16px}
.bar-row .lbl{display:flex;justify-content:space-between;gap:8px;font-weight:700;font-size:.9375rem;margin-bottom:6px}
.bar-row .lbl .num{color:var(--pink-700);font-size:1.25rem;font-weight:800}
.bar{height:20px;border-radius:999px;background:var(--purple-50);border:1px solid var(--purple-100);overflow:hidden}
.bar i{display:block;height:100%;border-radius:999px;background:var(--pink-700);min-width:6px}
.ach{list-style:none;margin:0;padding:0;display:grid;gap:12px}
.ach li{display:flex;gap:12px;align-items:flex-start}
.ach .wavemark{margin-top:10px}
.sweep-wrap{display:grid;gap:16px}
@media(min-width:1024px){.sweep-wrap{grid-template-columns:1fr 1fr;gap:32px;align-items:start}}
.sweep-map{position:sticky;top:calc(var(--header) + 8px);z-index:5}
@media(max-width:1023px){.sweep-map .mapbox.compact{height:220px;min-height:200px}}
.sweep-legend{display:flex;gap:12px;flex-wrap:wrap;font-size:.8125rem;font-weight:700;margin-top:8px}
.sweep-legend i{display:inline-block;width:14px;height:14px;border-radius:4px;vertical-align:-2px;margin-right:4px}
.tl{list-style:none;margin:0;padding:0;display:grid;gap:12px}
.tl-item{background:#fff;border-radius:16px;padding:16px;border:1.5px solid var(--line);transition:border-color .2s var(--ease),box-shadow .2s var(--ease)}
.tl-item.active{border:2px solid var(--purple-600);box-shadow:var(--sh-2)}
.tl-item .date{font-family:var(--fn);font-weight:800;color:var(--pink-700)}
.tl-item .t{font-weight:700;font-size:1.0625rem;margin:4px 0 8px}
.tl-item .dchips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.dtag{display:inline-flex;align-items:center;gap:6px;font-size:.8125rem;font-weight:700;padding:3px 10px;border-radius:999px;background:var(--purple-50);border:1px solid var(--purple-soft);color:var(--purple-800)}
.tl-item .nodist{font-size:.875rem;color:var(--ink-2);margin-bottom:10px}
.tl-end{text-align:center;color:var(--ink-2);font-size:.9375rem;padding:16px}
.tl-load{display:flex;align-items:center;justify-content:center;gap:10px;padding:16px;color:var(--ink-2)}
.tl-load .spin{border-color:var(--purple-100);border-top-color:var(--purple-600)}

/* video facade */
.vf{position:relative;display:block;width:100%;aspect-ratio:16/9;border-radius:12px;overflow:hidden;border:0;padding:0;background:#2A2433}
.vf .th{position:absolute;inset:0}
.vf .play{position:absolute;left:50%;top:50%;width:64px;height:64px;margin:-32px 0 0 -32px;border-radius:50%;background:var(--pink-700);color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:var(--sh-2);transition:background-color .2s var(--ease)}
.vf:hover .play{background:var(--pink-800)}
.vf .dur{position:absolute;right:8px;bottom:8px;background:var(--ink);color:#fff;font-family:var(--fn);font-weight:700;font-size:.8125rem;border-radius:6px;padding:1px 6px}
.vf .ttl{position:absolute;left:12px;top:10px;right:12px;font-weight:900;color:var(--ink);font-size:1.125rem;line-height:1.3;text-align:left}
.player{aspect-ratio:16/9;border-radius:12px;background:#1d1824;color:#fff;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:8px;font-size:.9375rem}
.vgrid{display:grid;gap:16px;grid-template-columns:1fr}
@media(min-width:640px){.vgrid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.vgrid{grid-template-columns:repeat(3,1fr);gap:24px}}
.vcard{background:#fff;border-radius:16px;box-shadow:var(--sh-1);padding:10px 10px 14px;transition:box-shadow .2s var(--ease)}
.vcard:hover{box-shadow:var(--sh-2)}
.vcard .vt{font-weight:700;font-size:1.0625rem;line-height:1.5;margin:10px 4px 4px}
.vcard .vm{font-size:.875rem;color:var(--ink-2);margin:0 4px;display:flex;gap:10px;flex-wrap:wrap}
.vtools{display:flex;flex-direction:column;gap:12px;margin-bottom:20px}
.selbox{min-height:48px;border-radius:999px;border:1.5px solid var(--purple-600);background:#fff;color:var(--purple-800);font-weight:700;padding:0 40px 0 16px;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256'%3E%3Cpath fill='%235B3F7D' d='M213.66 101.66l-80 80a8 8 0 0 1-11.32 0l-80-80a8 8 0 0 1 11.32-11.32L128 164.69l74.34-74.35a8 8 0 0 1 11.32 11.32z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;background-size:18px}
.empty{text-align:center;padding:40px 16px;border-radius:16px;background:#fff;border:1.5px dashed var(--purple-soft)}
.empty p{color:var(--ink);font-weight:700}

/* follow */
.follow-hd{border-radius:24px;padding:20px;background:#fff;box-shadow:var(--sh-1)}
.status-pill{display:inline-flex;align-items:center;gap:8px;font-weight:900;font-size:1.25rem;padding:6px 16px;border-radius:999px}
.status-pill.before{background:var(--purple-50);color:var(--purple-800);border:1.5px solid var(--purple-600)}
.status-pill.live{background:var(--pink-700);color:#fff}
.status-pill.after{background:var(--dis-bg);color:var(--ink);border:1.5px dashed var(--dis-border)}
.stops-now{display:grid;gap:12px;margin-top:16px}
@media(min-width:768px){.stops-now{grid-template-columns:1fr 1fr}}
.stop-box{border-radius:16px;padding:14px 16px;border:1.5px solid var(--line)}
.stop-box.cur{border:2px solid var(--pink-700);background:var(--pink-50)}
.stop-box .k{font-size:.8125rem;font-weight:700;color:var(--ink-2)}
.stop-box .v{font-size:1.25rem;font-weight:900}
.prog{height:12px;border-radius:999px;background:var(--purple-50);border:1px solid var(--purple-100);overflow:hidden;margin-top:16px}
.prog i{display:block;height:100%;background:var(--pink-700);border-radius:999px}
.mini-steps{list-style:none;margin:16px 0 0;padding:0;display:grid;gap:0}
.mini-steps li{display:grid;grid-template-columns:28px 1fr auto;gap:10px;align-items:center;min-height:44px;position:relative}
.mini-steps li::before{content:"";position:absolute;left:13px;top:30px;bottom:-14px;width:2px;background:var(--line)}
.mini-steps li:last-child::before{display:none}
.mini-steps .c{width:28px;height:28px;border-radius:50%;border:1.5px solid var(--purple-600);background:#fff;display:flex;align-items:center;justify-content:center;color:#fff;z-index:1}
.mini-steps .done .c{background:var(--purple-800);border-color:var(--purple-800)}
.mini-steps .now .c{background:var(--pink-700);border-color:var(--pink-700);box-shadow:0 0 0 4px var(--pink-100)}
.mini-steps .now .n{font-weight:900;color:var(--pink-700)}
.mini-steps .t{font-family:var(--fn);font-size:.875rem;font-weight:700;color:var(--ink-2)}
.disc{display:grid;gap:6px;margin-top:16px}
.disc p{display:flex;gap:8px;align-items:center;font-size:.9375rem;font-weight:700}
details.all-stops{margin-top:16px;border:1.5px solid var(--purple-600);border-radius:16px;background:#fff}
details.all-stops summary{min-height:52px;display:flex;align-items:center;gap:8px;padding:0 16px;font-weight:700;color:var(--purple-800);cursor:pointer;list-style:none}
details.all-stops summary::-webkit-details-marker{display:none}
details.all-stops[open] summary .caret{transform:rotate(180deg)}
details.all-stops ol{margin:0;padding:0 16px 12px 48px}
details.all-stops li{padding:6px 0;border-top:1px solid var(--line);font-size:1rem}
details.all-stops li.done{color:var(--ink-2)}
details.all-stops li.now{font-weight:900;color:var(--pink-700)}

/* board */
.board-layout{display:grid;gap:24px}
@media(min-width:1024px){.board-layout{grid-template-columns:300px 1fr;align-items:start}}
.bfilters{display:grid;gap:14px}
@media(min-width:1024px){.bfilters{position:sticky;top:calc(var(--header) + 16px)}}
.bfilters .mapbox.compact{height:220px;min-height:200px}
.wall{columns:1;column-gap:20px}
@media(min-width:640px){.wall{columns:2}}
@media(min-width:1280px){.wall{columns:3}}
.note{break-inside:avoid;background:#fff;border:1px solid #ECE6EF;border-radius:16px;margin:0 0 20px;box-shadow:var(--sh-1);overflow:hidden;transition:box-shadow .2s var(--ease),border-color .2s var(--ease);display:block}
.note .nh{padding:16px 16px 14px;background:#F5F0FA;background:linear-gradient(118deg,#FCE4E6 0%,#F5E6F0 52%,#E9DEF5 100%)}
.note:hover{box-shadow:var(--sh-2);border-color:#D8CBE4}
@media(max-width:639px){.note{max-width:none}}
.note .who{display:flex;align-items:center;gap:12px}
.note .wi{min-width:0}
.avatar{width:44px;height:44px;border-radius:50%;padding:2px;background:#AB8BC8;background:linear-gradient(135deg,#E79394,#AB8BC8);flex:none}
.avatar>span{width:100%;height:100%;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#fff;overflow:hidden}
.avatar img{width:100%;height:100%;object-fit:cover}
.avatar svg{width:70%;height:70%}
.note .nick{font-weight:900;font-size:1.0625rem;line-height:1.4;color:var(--ink)}
.note .meta{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}
.note .tagc{display:inline-flex;align-items:center;gap:4px;background:#fff;border:0;box-shadow:0 0 0 1px rgba(122,90,158,.25);padding:2px 9px 2px 7px;font-size:.8125rem}
.note .tagc .ico{width:16px;height:16px}
.note .tagc .dot{width:8px;height:8px;box-shadow:none}
.note .txt{padding:14px 18px 4px;font-size:1.0625rem;line-height:1.75;word-break:break-word;color:var(--ink)}
.note .ft{display:flex;align-items:center;justify-content:space-between;margin:8px 8px 0 18px;padding:2px 0 4px;border-top:1px solid #F0ECF2}
.note .date{font-family:var(--fn);font-size:.8125rem;font-weight:700;color:var(--ink-2)}
.note .report{width:44px;height:44px;border-radius:50%;border:0;background:transparent;color:var(--ink-2);display:flex;align-items:center;justify-content:center}
.note .report:hover{background:rgba(91,63,125,.08);color:var(--purple-800)}
.note .report[aria-pressed="true"]{color:var(--pink-700)}
.note.pending{border:2px dashed var(--purple-600)}
.note.pending .nh{background:#F5F0FA}
.pend{display:inline-flex;align-items:center;gap:6px;font-size:.8125rem;font-weight:700;color:var(--purple-800);background:#fff;border-radius:999px;padding:2px 10px;margin-bottom:10px;border:1px solid var(--purple-soft)}
.tagc{font-size:.75rem;font-weight:700;padding:2px 8px;border-radius:999px;background:#fff;border:1px solid var(--purple-soft);color:var(--purple-800)}
.fab{position:fixed;z-index:46;left:50%;transform:translateX(-50%);bottom:calc(var(--tabbar) + env(safe-area-inset-bottom,0px) + 14px);min-height:56px;padding:0 26px;box-shadow:var(--sh-3);font-size:1.0625rem}
.fab:active{transform:translateX(-50%) scale(.98)}
@media(min-width:1024px){.fab{left:auto;right:32px;bottom:32px;transform:none}.fab:active{transform:scale(.98)}}
.fab .draft-dot{position:absolute;top:8px;right:14px;width:10px;height:10px;border-radius:50%;background:#fff;box-shadow:0 0 0 2px var(--pink-700)}
.fly{position:fixed;z-index:80;pointer-events:none;transition:transform .7s var(--expo),opacity .7s var(--ease)}

/* dialog / panel */
.scrim{position:fixed;inset:0;z-index:90;background:rgba(42,36,51,.42);display:none}
.scrim.open{display:block}
.dlg{position:fixed;z-index:91;left:0;right:0;bottom:0;top:0;background:#fff;display:none;flex-direction:column;overflow:hidden}
.dlg.open{display:flex}
@media(min-width:640px){.dlg{left:50%;top:50%;right:auto;bottom:auto;width:min(600px,calc(100vw - 48px));max-height:calc(100vh - 48px);transform:translate(-50%,-50%);border-radius:24px;box-shadow:var(--sh-3)}}
.dlg.wide{}
@media(min-width:640px){.dlg.wide{width:min(46rem,calc(100vw - 48px))}}
.dlg-hd{display:flex;align-items:center;gap:8px;padding:12px 8px 12px 20px;border-bottom:1px solid var(--line);flex:none}
.dlg-hd h2{font-size:1.25rem;font-weight:900;flex:1}
.dlg-bd{flex:1;overflow-y:auto;padding:16px 20px 24px;overscroll-behavior:contain}
.dlg-ft{flex:none;padding:12px 20px calc(12px + env(safe-area-inset-bottom,0px));border-top:1px solid var(--line);display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.field{margin-top:18px}
.field>label,.field>.lbl{display:block;font-weight:700;margin-bottom:6px}
.field .req{color:var(--pink-700);font-size:.8125rem;margin-left:4px}
.field .opt{color:var(--ink-2);font-size:.8125rem;font-weight:400;margin-left:4px}
.inp{width:100%;min-height:48px;border-radius:8px;border:1.5px solid var(--purple-soft);background:#fff;padding:10px 12px;font-size:1.0625rem}
.inp:focus{border-color:var(--purple-600)}
textarea.inp{min-height:140px;resize:vertical;line-height:1.7}
.field.err .inp{border:2px solid var(--pink-700)}
.ferr{display:none;align-items:center;gap:6px;color:var(--pink-700);font-weight:700;font-size:.9375rem;margin-top:6px}
.field.err .ferr{display:flex}
.counter{text-align:right;font-family:var(--fn);font-size:.875rem;font-weight:700;color:var(--ink-2);margin-top:4px}
.counter.over{color:var(--pink-700)}
.avs{display:grid;grid-template-columns:repeat(5,1fr);gap:10px 8px}
@media(max-width:340px){.avs{grid-template-columns:repeat(4,1fr)}}
.avopt{position:relative;width:56px;height:56px;border-radius:50%;border:1.5px solid var(--line);padding:2px;background:#fff;justify-self:center}
.avopt>span{width:100%;height:100%;border-radius:50%;display:flex;align-items:center;justify-content:center;overflow:hidden}
.avopt svg{width:70%;height:70%}
.avopt img{width:100%;height:100%;object-fit:cover;border-radius:50%}
.avopt[aria-checked="true"]{border:0;padding:3px;background:#AB8BC8;background:linear-gradient(135deg,#E79394,#AB8BC8)}
.avopt[aria-checked="true"]>span:first-child{background:#fff}
.avopt.up{border-style:dashed;border-color:var(--purple-600);color:var(--purple-800)}
.statusline{min-height:24px;font-weight:700;font-size:.9375rem}
.statusline.err{color:var(--pink-700)}
.statusline.ok{color:var(--u-line)}
.restored{display:flex;align-items:center;gap:8px;flex-wrap:wrap;background:var(--purple-50);border-radius:12px;padding:8px 12px;font-size:.9375rem;font-weight:700;color:var(--purple-800)}
.anon{display:flex;gap:8px;align-items:center;font-size:.9375rem;color:var(--ink-2);margin-top:4px}

/* councilor */
.seat-layout{display:grid;gap:20px}
@media(min-width:1024px){.seat-layout{grid-template-columns:1fr 340px;align-items:start}}
.seat-list{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
@media(min-width:1024px){.seat-list{grid-template-columns:repeat(4,1fr)}}
@media(max-width:359px){.seat-list{grid-template-columns:repeat(3,1fr)}}
.seatbtn{min-height:52px;border-radius:12px;background:var(--purple-50);border:1.5px solid var(--purple-600);color:var(--purple-800);font-weight:700;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1.15;padding:4px;transition:background-color .2s var(--ease)}
.seatbtn .no{font-family:var(--fn);font-weight:800;font-size:1.125rem}
.seatbtn small{font-size:.75rem}
.seatbtn:hover{background:var(--purple-hover);border-color:var(--purple-800)}
.seatbtn[aria-pressed="true"]{background:var(--purple-800);color:#fff;border-color:var(--purple-800)}
.seatbtn.empty{background:var(--dis-bg);color:var(--dis-text);border:1.5px dashed var(--dis-border)}
.indig{margin-top:16px}
.indig h3{font-size:1rem;font-weight:700;margin-bottom:8px}
.indig .row{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:52px;border:1.5px dashed var(--dis-border);border-radius:12px;padding:6px 12px;background:var(--dis-bg);margin-bottom:8px;color:var(--ink)}
.indig .row span.t{font-size:.8125rem;font-weight:700;color:var(--dis-text)}
.ccards{display:grid;gap:10px;margin-top:12px}
.ccard{display:flex;align-items:center;gap:12px;padding:12px;border-radius:16px;background:var(--purple-50);border:1.5px solid var(--purple-soft);text-align:left;width:100%;min-height:72px}
.ccard:hover{background:#fff;box-shadow:var(--sh-2)}
.ccard .cn{font-family:var(--fn);font-weight:800;color:var(--pink-700);font-size:1.25rem;width:36px;text-align:center}
.ccard .nm{font-weight:900;font-size:1.125rem}
.inc{font-size:.75rem;font-weight:700;padding:2px 8px;border-radius:999px;border:1px solid var(--purple-600);color:var(--purple-800);background:#fff}
.inc.new{border-color:var(--pink-700);color:var(--pink-700)}
.credit{font-size:.75rem;color:var(--ink-2);text-align:center;margin-top:6px}
.contacts{display:flex;flex-wrap:wrap;gap:8px}
.contacts a{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 14px;border-radius:999px;background:var(--purple-50);border:1.5px solid var(--purple-600);color:var(--purple-800);font-weight:700;text-decoration:none;font-size:.9375rem}
.contacts a svg{width:20px;height:20px;fill:currentColor}
.contacts .none{color:var(--ink-2);font-size:.9375rem}

/* share */
.share-fmt{display:flex;gap:8px;flex-wrap:wrap}
.share-prev{margin-top:16px;display:flex;justify-content:center;background:var(--purple-50);border-radius:16px;padding:16px;position:relative;min-height:240px;align-items:center}
.share-prev canvas{max-width:100%;max-height:52vh;height:auto;border-radius:12px;box-shadow:var(--sh-2);background:#fff}
.share-prev .drawing{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:8px;font-weight:700;color:var(--purple-800);background:rgba(245,240,250,.85);border-radius:16px}
.share-prev .drawing .spin{border-color:var(--purple-100);border-top-color:var(--purple-600)}
.line-hint{display:flex;gap:8px;align-items:center;background:var(--pink-50);border-radius:12px;padding:10px 12px;font-weight:700;font-size:.9375rem;margin-top:12px}
.toast{position:fixed;z-index:120;left:50%;bottom:calc(var(--tabbar) + 90px);transform:translateX(-50%);background:var(--ink);color:#fff;border-radius:999px;padding:10px 18px;font-weight:700;font-size:.9375rem;box-shadow:var(--sh-2);display:none;max-width:calc(100vw - 32px);text-align:center}
.toast.show{display:block}

/* paused / reduced motion */
body.paused *,body.paused *::before,body.paused *::after{animation-play-state:paused!important}
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
  .map-bg .band,.map-bg .blob,.waves path,.hint-ring,.skel{animation:none!important}
}
body.paused .hint-ring{animation:none;opacity:.8;transform:scale(1)}

/* ===== 有話說 v3 ===== */
.vc-hd .h1{font-size:2.25rem}
@media(min-width:1024px){.vc-hd .h1{font-size:3.5rem}}
.vc-pills{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.vc-pills span{display:inline-flex;align-items:center;gap:6px;background:var(--surface);border-radius:999px;padding:4px 14px 4px 10px;font-size:.9375rem;font-weight:700;box-shadow:var(--sh-1)}
.vc-pills span .ico{color:var(--pink-700)}
.vc-pills .vc-unoff{background:var(--purple-50);color:var(--purple-800);box-shadow:none;border:1px solid var(--purple-100);padding:4px 12px}
.vc-layout{display:grid;gap:24px}
@media(min-width:1024px){.vc-layout{grid-template-columns:360px minmax(0,1fr);gap:40px;align-items:start}.vc-side{position:sticky;top:calc(var(--header) + 16px)}}
.vc-side{display:grid;gap:16px;min-width:0}
.vc-main{min-width:0;padding-bottom:96px}
.vc-switch{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;background:var(--surface);border:1.5px solid var(--purple-600);border-radius:999px;padding:4px}
.vc-switch a{display:flex;align-items:center;justify-content:center;min-height:46px;border-radius:999px;text-decoration:none;color:var(--purple-800);font-weight:700;font-size:1.0625rem}
.vc-switch a:hover{background:var(--purple-50)}
.vc-switch a[aria-current="page"]{background:var(--purple-800);color:#fff}
.vc-count{padding:20px}
.vc-big{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.vc-big b{font-size:3rem;font-weight:800;line-height:1;color:var(--pink-700);transform:skewX(-8deg);display:inline-block}
.vc-big span{font-weight:900;font-size:1.25rem}
.vc-sub{font-size:.9375rem;color:var(--ink-2);margin-top:4px}
.vc-tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:16px}
@media(max-width:359px){.vc-tiles{grid-template-columns:repeat(2,1fr)}}
.vc-tile{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:10px 12px;border-radius:12px;background:var(--purple-50);border:1.5px solid var(--purple-soft);text-align:left;min-height:88px;transition:background-color .2s var(--ease),border-color .2s var(--ease)}
.vc-tile:hover{background:#fff;border-color:var(--purple-800)}
.vc-tile .tn{font-weight:900;font-size:1.0625rem;line-height:1.3;color:var(--ink)}
.vc-tile .tc{font-size:.8125rem;font-weight:700;color:var(--ink-2)}
.vc-tile .tc b{font-size:1rem;color:var(--purple-800)}
.vc-tile[aria-pressed="true"]{background:var(--purple-800);border-color:var(--purple-800)}
.vc-tile[aria-pressed="true"] .tn,.vc-tile[aria-pressed="true"] .tc,.vc-tile[aria-pressed="true"] .tc b{color:#fff}
.vc-tile[aria-pressed="true"] .ico.duo{color:#fff}.vc-tile[aria-pressed="true"] .ico.duo .d2{fill:#fff;opacity:.3}
.vc-note{display:flex;gap:8px;margin-top:16px;padding-top:12px;border-top:1px solid var(--line);font-size:.875rem;line-height:1.6;color:var(--ink-2)}
.vc-note .ico{color:var(--purple-600);margin-top:1px}
#boardMap{margin-top:12px}
.vc-zones{display:grid;gap:8px;margin-top:12px}
.vc-zone{border:1.5px solid var(--line);border-radius:16px;overflow:hidden}
.vc-zone>button{display:flex;align-items:center;gap:10px;width:100%;min-height:52px;padding:0 12px 0 14px;border:0;background:#fff;text-align:left}
.vc-zone>button:hover{background:var(--purple-50)}
.vc-zone>button[aria-pressed="true"]{background:var(--purple-50)}
.vc-zone .zn{font-weight:900;font-size:1.0625rem}
.vc-zone .zc{margin-left:auto;font-size:.875rem;font-weight:700;color:var(--ink-2)}
.vc-zone .zc b{color:var(--ink);font-size:1rem}
.vc-zone .vc-caret{color:var(--purple-800);transition:transform .2s var(--ease)}
.vc-zone.open .vc-caret{transform:rotate(180deg)}
.vc-dists{display:none;flex-wrap:wrap;gap:6px;padding:4px 12px 12px}
.vc-zone.open .vc-dists{display:flex}
.vc-none{display:inline-flex;align-items:center;min-height:44px;padding:0 12px;border-radius:999px;border:1.5px dashed var(--dis-border);color:var(--dis-text);font-size:.875rem;font-weight:700}
.vc-ai{position:relative;background:#fff;border:1.5px solid var(--purple-100);border-radius:20px;padding:22px 20px 18px;box-shadow:var(--sh-1);margin-bottom:28px;overflow:hidden}
.vc-ai::before{content:"";position:absolute;inset:0 0 auto;height:6px;background:linear-gradient(90deg,#E79394,#AB8BC8)}
.vc-ai-lbl{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:.875rem;font-weight:700;color:var(--purple-800)}
.vc-ai-tag{display:inline-flex;align-items:center;gap:4px;background:var(--purple-50);border-radius:999px;padding:2px 10px 2px 6px}
.vc-ai-tag .ico{color:var(--pink-700)}
.vc-ai .h3{margin-top:10px;color:var(--ink)}
.vc-ai ul{list-style:none;margin:8px 0 10px;padding:0;display:grid;gap:8px}
.vc-ai li{display:flex;gap:10px}
.vc-ai li::before{content:"";flex:none;width:8px;height:8px;border-radius:50%;background:var(--pink-700);margin-top:.72em}
.vc-fbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.vc-fbar .h2{color:var(--ink)}
.vc-cnt{font-size:.9375rem;font-weight:700;color:var(--ink-2)}
.vc-cnt b{color:var(--ink);font-size:1.0625rem}
.vc-fbar .btn{margin-left:auto}
.vc-wall{columns:1;column-gap:18px}
@media(min-width:700px){.vc-wall{columns:2}}
.vc-card{break-inside:avoid;margin:0 0 18px;background:#fff;border:1px solid #ECE6EF;border-radius:16px;box-shadow:var(--sh-1);overflow:hidden;transition:box-shadow .2s var(--ease)}
.vc-card:hover{box-shadow:var(--sh-2)}
.vc-card-hd{display:flex;align-items:center;gap:12px;padding:14px 16px 12px;background:#F5F0FA;background:linear-gradient(118deg,#FCE4E6 0%,#F5E6F0 52%,#E9DEF5 100%)}
.vc-card .avatar{flex:none}
.vc-card .who{min-width:0}
.vc-card .nick{font-weight:900;font-size:1.0625rem;line-height:1.4}
.vc-card .where{display:flex;align-items:center;gap:6px;font-size:.875rem;font-weight:700;color:var(--ink-2)}
.vc-card .where .dot{width:9px;height:9px;box-shadow:none}
.vc-card .date{margin-left:auto;align-self:flex-start;font-size:.8125rem;font-weight:700;color:var(--ink-2)}
.vc-items{padding:2px 16px 0}
.vc-item{padding:12px 0;border-bottom:1px solid #F0ECF2}
.vc-item:last-child{border-bottom:0}
.vc-item.hide{display:none}
.vc-tag{display:inline-flex;align-items:center;gap:4px;font-size:.875rem;font-weight:700;color:var(--purple-800);background:var(--purple-50);border-radius:999px;padding:2px 10px 2px 6px;margin-bottom:4px}
.vc-tag .ico{width:18px;height:18px}
.vc-item .txt{font-size:1.0625rem;line-height:1.75;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.vc-card.full .vc-item .txt{display:block;-webkit-line-clamp:unset}
.vc-card.full{box-shadow:none;margin:0}
.vc-more{margin:0 0 0 10px;font-size:.9375rem}
.vc-acts{display:flex;align-items:center;gap:8px;padding:6px 10px 14px 16px}
.vc-acts .icon-btn{margin-left:auto}
.vc-same{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 16px;border-radius:999px;border:1.5px solid var(--pink-700);background:#fff;color:var(--pink-700);font-weight:700;font-size:1rem;transition:background-color .2s var(--ease)}
.vc-same:hover{background:var(--pink-50)}
.vc-same .on{display:none}
.vc-same[aria-pressed="true"]{background:var(--pink-700);color:#fff}
.vc-same[aria-pressed="true"] .on{display:inline-block}.vc-same[aria-pressed="true"] .off{display:none}
.vc-card.pending{border:2px dashed var(--purple-600)}
.vc-card.pending .vc-card-hd{background:var(--purple-50)}
.vc-card.pending .pend{margin:12px 16px 0}
/* form */
.vc-topics{border:0;margin:18px 0 0;padding:0;min-width:0}
.vc-topics legend{font-weight:700;margin-bottom:6px;padding:0}
.vc-tf{border:1.5px solid var(--purple-100);border-radius:16px;margin-bottom:8px;background:#fff;transition:border-color .2s var(--ease)}
.vc-tf.open{border-color:var(--purple-600)}
.vc-tf.done{border-color:var(--purple-600);background:var(--purple-50)}
.vc-tf.done.open{background:#fff}
.vc-tf-hd{display:flex;align-items:center;gap:10px;width:100%;min-height:56px;padding:0 12px 0 14px;border:0;background:transparent;text-align:left;border-radius:16px}
.vc-tf-hd .tn{font-weight:900;font-size:1.0625rem}
.vc-tf-hd .st{margin-left:auto;display:inline-flex;align-items:center;gap:4px;font-size:.875rem;font-weight:700;color:var(--ink-2)}
.vc-tf.done .st{color:var(--purple-800)}
.vc-tf-hd .vc-caret{color:var(--purple-800);transition:transform .2s var(--ease)}
.vc-tf.open .vc-caret{transform:rotate(180deg)}
.vc-tf-bd{padding:0 12px 12px}
.vc-tf-bd textarea.inp{min-height:110px}
.vc-tf.err .inp{border:2px solid var(--pink-700)}
.vc-tf.err .ferr,.vc-topics.err .vc-terr{display:flex}
.vc-topics.err .vc-tf{border-color:var(--pink-700)}

[hidden]{display:none!important}
.vc-morewrap{column-span:all;display:flex;justify-content:center;padding:8px 0 16px}

/* ===== 有話說 v4：篩選列、收合摘要 ===== */
.vc-filters{position:sticky;top:var(--header);z-index:30;background:var(--paper);padding-block:6px 4px;transition:box-shadow .2s var(--ease)}
.vc-filters.stuck{box-shadow:0 6px 16px rgba(91,62,84,.08);border-bottom:1px solid var(--line)}
.vc-filters .wrap{display:grid;gap:2px}
.vc-row{display:flex;align-items:center;gap:6px;min-width:0}
.vc-rl{flex:none;width:2.6em;font-size:.875rem;font-weight:900;color:var(--purple-800)}
.vc-scroll{flex:1;min-width:0;margin-right:calc(-1 * var(--gutter))}
.vc-scroll .chip{min-height:44px}
.vc-sep{flex:none;width:1.5px;height:28px;background:var(--purple-100);margin:0 4px}
.vc-page{padding-top:14px;padding-bottom:140px}
.vc-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;margin-bottom:14px}
.vc-n{font-weight:700;font-size:1rem}
.vc-n b{font-size:1.375rem;font-weight:800;color:var(--pink-700);margin-right:4px}
.vc-what{margin-left:8px;font-size:.9375rem;color:var(--purple-800)}
.vc-np{display:inline-flex;align-items:center;gap:4px;font-size:.8125rem;color:var(--ink-2)}
.vc-np .ico{width:16px;height:16px;color:var(--purple-600)}
.vc-ai{margin-bottom:24px;padding:18px 18px 10px}
.vc-ai .h3{margin-top:8px}
.vc-ai-tog{display:none;align-items:center;gap:4px;padding:6px 0;min-height:44px;font-size:.9375rem}
.vc-ai-tog .ico{transition:transform .2s var(--ease)}
.vc-ai.open .vc-ai-tog .ico{transform:rotate(180deg)}
@media(max-width:1023px){.vc-ai:not(.open) .vc-ai-body{display:none}.vc-ai-tog{display:inline-flex}}
.vc-ai-few{margin:6px 0 10px;color:var(--ink-2)}
.vc-wall{columns:1}
@media(min-width:700px){.vc-wall{columns:2}}
@media(min-width:1100px){.vc-wall{columns:3}}
.vc-page .vc-fbar .btn{margin-left:auto}
.fab{transition:padding .25s var(--ease),min-width .25s var(--ease),transform .15s var(--ease)}
.fab.mini{padding:0;width:56px;min-height:56px;justify-content:center;gap:0;font-size:0}
.fab.mini .ico{width:24px;height:24px}
.fab.mini .draft-dot{top:6px;right:6px}
.vc-burst{position:fixed;z-index:200;pointer-events:none;color:var(--pink-700);width:22px;height:22px}
.vc-burst .ico{width:22px;height:22px}
.vc-same[aria-pressed="true"] .on{color:#fff}
@media(min-width:1024px){.chips.scroll.vc-scroll{flex-wrap:wrap;overflow:visible;-webkit-mask-image:none;mask-image:none;margin-right:0;padding:3px 0}.chips.scroll.vc-scroll>:first-child{margin-left:0}.chips.scroll.vc-scroll>:last-child{margin-right:0}.vc-scroll .chip{min-height:40px;padding:0 12px}.vc-filters{padding-block:8px}}
@media(min-width:1024px){.chips.scroll.vc-scroll{gap:6px}.chips.scroll.vc-scroll .chip{padding:0 10px;gap:6px;font-size:.875rem}.chips.scroll.vc-scroll .chip .cnt{min-width:22px;height:22px;padding:0 5px;font-size:.75rem}.chips.scroll.vc-scroll .chip .ico.duo{width:20px;height:20px}.vc-row{align-items:flex-start}.vc-rl{padding-top:12px}}
@media(min-width:1024px){.chips.scroll.vc-scroll .chip{padding:0 9px;gap:4px}.vc-rl{width:2.4em}}

/* ===== v5 sheet / map tweaks ===== */
#sheetTitle:focus{outline:none}
.map-ctrl{left:50%;right:auto!important;transform:translateX(-50%);flex-direction:row;align-items:center;gap:8px;bottom:14px}
.map-ctrl .zoom{flex-direction:row}
.zone-badge{position:absolute;z-index:6;left:12px;top:12px;display:inline-flex;align-items:center;gap:6px;background:#fff;border-radius:999px;padding:6px 14px 6px 10px;font-weight:900;font-size:1rem;box-shadow:var(--sh-1);border:1.5px solid var(--purple-100)}
.zone-badge .dot{width:12px;height:12px;box-shadow:none}
@media(min-width:1024px){.zone-badge{display:none}}
@media(max-width:1023px){.sheet-top .zn{display:none}}
.sheet-catch{position:fixed;inset:0;z-index:49;background:transparent}
.sheet-fab{position:fixed;z-index:56;right:max(16px,env(safe-area-inset-right,0px));bottom:calc(16px + env(safe-area-inset-bottom,0px));min-height:52px;padding:0 20px;box-shadow:var(--sh-3)}
@media(min-width:1024px){.sheet-fab{right:56px;bottom:44px}}
.sheet-body{padding-bottom:96px}
.sheet .sample-note{margin-top:20px;font-size:.8125rem;color:var(--ink-2)}
.sheet-top .acts .rel-btn{min-height:44px;padding:0 14px}
.sheet-top .acts .rel-btn[aria-expanded="true"]{background:var(--pink-50);border-color:var(--pink-700);color:var(--pink-700)}
.rel-body{margin-top:10px;background:var(--pink-50);border-radius:12px;padding:12px 14px;font-size:1rem;line-height:1.7}
.rel-body .rel-t{display:flex;align-items:center;gap:6px;font-weight:900;color:var(--pink-700);margin-bottom:4px}
.pitem{position:relative}
.padded{position:absolute;top:-10px;right:12px;font-size:.75rem;font-weight:700;color:var(--pink-700);background:#fff;border:1.5px solid var(--pink-700);border-radius:999px;padding:1px 9px;line-height:1.5}
.plist{padding-top:6px}

/* ===== v6 ===== */
/* header */
@media(min-width:1024px){.hdr-in{display:grid;grid-template-columns:1fr auto 1fr}.hdr-nav{margin-left:0;justify-self:center}.hdr-right{justify-self:end}}
.hdr-about{display:none;min-height:44px;padding:0 14px;font-size:1rem}
@media(min-width:1024px){.hdr-about{display:inline-flex}}
.hdr-about[aria-current="page"]{background:var(--purple-50)}
.seg{position:relative;display:inline-grid;grid-template-columns:1fr 1fr;isolation:isolate}
.seg .seg-pill{position:absolute;z-index:-1;top:2px;bottom:2px;left:2px;width:calc(50% - 2px);border-radius:999px;background:var(--purple-800);transition:transform .32s cubic-bezier(.34,1.36,.64,1)}
.seg[data-on="1"] .seg-pill{transform:translateX(100%)}
.seg button{padding:0 22px;transition:color .25s var(--ease)}
.seg button[aria-pressed="true"]{background:transparent;color:#fff}
@media(max-width:374px){.hdr .seg button{padding:0 12px}}
/* map controls */
.map-ctrl{flex-direction:row}
.map-ctrl .icon-btn{width:44px;height:44px}
/* sheet */
.zone-badge{display:none!important}
.sheet-top .zn{display:none}
.pbody{padding:0 16px 16px}
.ptitle .ptp{color:var(--purple-800);font-weight:900}
.ptitle .pbar{color:var(--purple-400);margin:0 2px}
/* 有話說 */
.vc-filters .wrap{display:grid;gap:8px}
.vc-mode{justify-self:start;margin:0}
.vc-mode button{min-height:40px;font-size:.9375rem}
.vc-filters.stuck .vc-mode{display:none}
.vc-scroll{margin-right:calc(-1 * var(--gutter))}
.vc-ai-tog{margin:4px auto 0;justify-content:center;text-decoration:none;width:100%}
.vc-ai-tog:hover{text-decoration:none;background:var(--purple-50);border-radius:999px}
@media(min-width:1024px){.chips.scroll.vc-scroll{margin-right:0}}
.seg button{white-space:nowrap}
.hdr .seg{min-width:max-content}
@media(min-width:1024px){.hdr-in{column-gap:16px}}
@media(min-width:1024px){.hdr-in{display:flex;position:relative}.hdr-nav{position:absolute;left:50%;transform:translateX(-50%);margin:0}.hdr-nav a{padding:0 10px}.hdr-nav{gap:2px}}
@media(min-width:1024px) and (max-width:1199px){.hdr-nav{position:static;transform:none;margin-left:12px}}
/* v7 */
.seg .seg-pill{transition:transform .3s ease}

@media(max-width:400px){.tabbar a .pill{width:48px}.tabbar a{font-size:.75rem}}
@media(min-width:1024px){.hdr-nav{position:static!important;transform:none!important;flex:1;justify-content:center;margin:0!important}.hdr-right{margin-left:0}}

/* v8 */
.waves .w4{fill:#C7A3CC;opacity:.26;animation:wv 40s ease-in-out infinite alternate-reverse}
@media(pointer:coarse){.mapbox{touch-action:pan-y}.mapsvg{touch-action:pan-y}}
.map-touch-hint{position:absolute;z-index:9;left:50%;top:50%;transform:translate(-50%,-50%);background:rgba(42,36,51,.82);color:#fff;font-weight:700;font-size:.9375rem;border-radius:999px;padding:8px 16px;pointer-events:none;white-space:nowrap}
@media(max-width:1023px){.sheet-hd{touch-action:none}}
.hdr-nav .nav-about{display:none}
@media(min-width:1024px){.hdr-nav .nav-about{display:inline-flex}.hdr-about{display:none!important}.menu #menuAbout{display:none}}
.sheet.anim{transition:transform .42s cubic-bezier(.32,.72,0,1)!important}

/* ===== 議員模式 v2 ===== */
.hero .lead.cn-lead{max-width:none;white-space:nowrap;font-size:clamp(13px,4.1vw,1.25rem)}
.cn-tools{display:grid;gap:32px;margin-top:20px}
@media(min-width:1024px){.cn-tools{grid-template-columns:1fr 1fr;gap:40px;align-items:start}}
.cn-find .muted{margin:4px 0 4px}
.cn-find .dgrid{grid-template-columns:repeat(4,1fr)}
@media(max-width:400px){.cn-find .dgrid{grid-template-columns:repeat(3,1fr)}}
.cn-find .chip{justify-content:center;width:100%}
.seat-list{grid-template-columns:repeat(2,1fr)!important;gap:8px;margin-top:12px}
.seatbtn{align-items:flex-start;justify-content:flex-start;text-align:left;padding:10px 12px;min-height:64px;gap:2px}
.seatbtn .sno{display:inline-flex;align-items:center;gap:4px;font-size:.8125rem;font-weight:700;color:var(--ink-2)}
.seatbtn .sno b{font-size:.9375rem;color:var(--purple-800)}
.seatbtn .sno .dot{width:9px;height:9px;box-shadow:none;margin-right:2px}
.seatbtn .sds{font-size:1rem;font-weight:900;line-height:1.4;color:var(--ink)}
.seatbtn[aria-pressed="true"] .sno,.seatbtn[aria-pressed="true"] .sno b,.seatbtn[aria-pressed="true"] .sds{color:#fff}
.cn-indig{display:flex;gap:6px;align-items:flex-start;margin-top:12px;font-size:.875rem;color:var(--ink-2)}
.cn-sum{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.cn-sum .dot{width:10px;height:10px;box-shadow:none}
.cn-count{font-size:.9375rem;font-weight:700;color:var(--ink-2);margin-bottom:10px}
.cn-count b{color:var(--ink)}
.ccard{flex-direction:column;align-items:stretch;gap:8px;padding:14px;min-height:0}
.cc-top{display:flex;align-items:center;gap:10px}
.cc-go{margin-left:auto;color:var(--purple-800)}
.cc-no{display:inline-flex;align-items:baseline;gap:1px;font-weight:900;color:var(--pink-700);font-size:1rem}
.cc-no b{font-size:1.625rem;line-height:1;transform:skewX(-8deg);display:inline-block}
.ccard .nm{font-size:1.25rem}
.cc-pre{font-size:1rem;line-height:1.6;color:var(--ink);padding-left:50px}
.cc-pre .ptp{color:var(--purple-800);font-weight:900}.cc-pre .pbar{color:var(--purple-400)}
.c-av{flex:none;border-radius:50%;background:var(--purple-50);border:1.5px solid var(--purple-100);color:var(--purple-400);display:inline-flex;align-items:center;justify-content:center}
.cn-dlgt{flex:1;font-weight:900;font-size:1.125rem;color:var(--ink-2)}
.cn-card{display:block}
.cn-id{display:flex;align-items:center;gap:14px}
.cn-name{display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;font-weight:900;font-size:1.625rem;line-height:1.3}
.cn-name .cc-no b{font-size:2.25rem}
.cn-area{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-weight:700;color:var(--ink-2);margin-top:2px}
.cn-area .dot{width:10px;height:10px;box-shadow:none}
.cn-bio{margin-top:14px}
.cn-sec{margin-top:24px;padding-top:18px;border-top:1px solid var(--line)}
.cn-sec .h3{margin-bottom:10px;color:var(--ink)}
.cn-g h4{display:flex;align-items:center;gap:8px;font-size:1.0625rem;font-weight:900;margin:14px 0 4px}
.cn-g:first-of-type h4{margin-top:0}
.cn-tel{margin-top:2px}
.cn-g .ptp,.cn-g .pbar{display:none}
/* lock page behind mobile sheet */
@media(max-width:1023px){
  html.sheet-lock,html.sheet-lock body{overflow:hidden;overscroll-behavior:none}
  html.sheet-lock .mapbox,html.sheet-lock .mapsvg{touch-action:none}
  .sheet{overscroll-behavior:contain;touch-action:none}
  .sheet .sheet-body{touch-action:pan-y;overscroll-behavior:contain}
  .sheet .chips.scroll{touch-action:pan-x}
}
/* v9 */
@media(max-width:1023px){
  .sheet .sheet-body{padding-bottom:calc(var(--off,0px) + 104px + env(safe-area-inset-bottom,0px))}
  .vc-ai:not(.open) .vc-ai-body{display:block}
  .vc-ai:not(.open) .vc-ai-body li:not(:first-child),.vc-ai:not(.open) .vc-ai-body .cap{display:none}
  .vc-ai:not(.open) .vc-ai-body ul{margin-bottom:0}
  .vc-ai:not(.open) .vc-ai-body li span,.vc-ai:not(.open) .vc-ai-body li{min-width:0}
  .vc-ai:not(.open) .vc-ai-body li{display:flex}
  .vc-ai:not(.open) .vc-ai-body li>.t{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
}
@media(max-width:1023px){
  .sheet .sheet-body{padding-bottom:calc(var(--off,0px) + 16px + env(safe-area-inset-bottom,0px))}
  .sheet .sample-note{text-align:center;margin-top:24px}
  .sheet .sheet-body>:last-child{margin-bottom:0}
  .sheet-fab{transition:opacity .2s var(--ease),transform .2s var(--ease)}
  .sheet-fab.atbottom{opacity:0;transform:translateY(12px);pointer-events:none}
}
@media(min-width:1024px){
  #mayorTools .filters{display:flex;align-items:center;flex-wrap:wrap;gap:8px}
  #mayorTools .filters .row{flex-wrap:nowrap}
  #mayorTools .filters .locate-note{white-space:nowrap;align-items:center;margin-left:4px}
}
.notice.citywide{background:var(--pink-50);border:1.5px solid var(--pink-700)}

/* ===== Layout width v1: full width, fluid gutter, measure-limited paragraphs ===== */
.wrap{max-width:none;padding-left:max(var(--gutter),env(safe-area-inset-left,0px));padding-right:max(var(--gutter),env(safe-area-inset-right,0px))}
.hdr-in,.hdr .hdr-in{max-width:none!important;padding-left:max(var(--gutter),env(safe-area-inset-left,0px));padding-right:max(calc(var(--gutter) - 8px),env(safe-area-inset-right,0px))}
/* 段落限寬 */
.page-hd p,.lead,.pbody,.city-item p,.cn-bio,.vc-ai ul,.vc-ai .cap,.vc-ai-few,.step .sd,.ach li,.rel-body,.notice,.page .card>p,.page .muted,.vmore-note,.vc-np,.cn-find .muted,.tl-item .t,.empty p{max-width:var(--measure)}
.vc-ai .h3{max-width:var(--measure)}
#p-topics .tdetail-group .plist{max-width:56rem}
/* 網格欄數隨寬度增加 */
@media(min-width:1440px){.tgrid{grid-template-columns:repeat(4,1fr)}.vgrid{grid-template-columns:repeat(4,1fr)}.vc-wall{columns:4}.city-list{grid-template-columns:repeat(3,1fr)}.wall{columns:4}}
@media(min-width:1800px){.tgrid{grid-template-columns:repeat(5,1fr)}.vgrid{grid-template-columns:repeat(5,1fr)}.vc-wall{columns:5}.city-list{grid-template-columns:repeat(4,1fr)}.wall{columns:5}}
@media(min-width:2300px){.tgrid{grid-template-columns:repeat(6,1fr)}.vgrid{grid-template-columns:repeat(6,1fr)}.vc-wall{columns:6}.city-list{grid-template-columns:repeat(5,1fr)}.wall{columns:6}}
@media(min-width:1440px){.sweep-wrap{grid-template-columns:minmax(0,1fr) minmax(0,1.2fr)}}
@media(min-width:1024px){.hdr-nav{gap:8px!important}}@media(min-width:1280px){.hdr-nav{gap:16px!important}}
@media(max-width:1023px){.chips.scroll.vc-scroll{margin-left:calc(-1 * var(--gutter));padding-left:var(--gutter);scroll-padding-left:var(--gutter)}.chips.scroll.vc-scroll>:first-child{margin-left:0}}
.vc-sub-lead{margin-top:12px;font-size:1.0625rem;font-weight:700;color:var(--ink)}
.locate-note{align-items:center}.locate-note .ico{margin-top:0;flex:none}
@media(min-width:1200px){.vgrid{grid-template-columns:repeat(4,1fr)}.vc-wall{columns:4}}
#vcats.chips.scroll{padding-left:var(--gutter);scroll-padding-left:var(--gutter)}
#vcats.chips.scroll>:first-child{margin-left:0}
@media(min-width:1024px){#vcats.chips.scroll{margin:0!important;padding:4px 0;flex-wrap:wrap;overflow:visible;-webkit-mask-image:none;mask-image:none}#vcats.chips.scroll>:last-child{margin-right:0}}
@media(min-width:1024px){#homeMap.mapbox{height:max(520px,min(calc((100vw - 2 * var(--gutter)) * .5),calc(100vh - 140px)))}}
.tcard{justify-content:space-between;min-height:120px}.tcard .tc-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px;width:100%}.tcard .tc{white-space:nowrap}
/* topics v2 */
.tcard .tc-row{align-items:flex-end}
.tc-big{display:inline-flex;align-items:baseline;gap:2px;color:var(--pink-700);white-space:nowrap}
.tc-big b{font-size:2.75rem;font-weight:800;line-height:.9;transform:skewX(-8deg);display:inline-block}
.tc-big small{font-size:.9375rem;font-weight:700;color:var(--ink-2)}
.tcard .tn{font-size:1.25rem}
.tp-stick{position:sticky;top:var(--header);z-index:30;background:var(--paper);border-bottom:1px solid var(--line);box-shadow:0 6px 16px rgba(91,62,84,.08);padding-block:6px;margin-bottom:-58px;transform:translateY(-8px);opacity:0;visibility:hidden;transition:opacity .2s var(--ease),transform .2s var(--ease),visibility 0s .2s}
.tp-stick.on{opacity:1;visibility:visible;transform:none;transition:opacity .2s var(--ease),transform .2s var(--ease)}
.tp-stick .chips.scroll{margin-left:calc(-1 * var(--gutter));margin-right:calc(-1 * var(--gutter));padding-left:var(--gutter)}
.tp-stick .chips.scroll>:first-child{margin-left:0}
.tp-stick .chip .ico.duo{width:20px;height:20px}
.tp-side{display:none}
@media(min-width:1024px){
  .tp-stick{display:none}
  .tp-layout.has-sel{display:grid;grid-template-columns:260px minmax(0,1fr);gap:40px;align-items:start}
  .tp-layout.has-sel .tgrid{display:none}
  .tp-side{display:flex;flex-direction:column;gap:4px;position:sticky;top:calc(var(--header) + 16px);padding-top:24px}
  .tp-link{display:flex;align-items:center;gap:10px;min-height:52px;padding:0 14px;border-radius:14px;text-decoration:none;color:var(--ink);font-weight:700;font-size:1.0625rem;border:1.5px solid transparent;transition:background-color .2s var(--ease)}
  .tp-link:hover{background:var(--purple-50)}
  .tp-link .tp-go{margin-left:auto;color:var(--purple-400)}
  .tp-link[aria-current="page"]{background:var(--purple-800);color:#fff}
  .tp-link[aria-current="page"] .tp-go{color:#fff}
  .tp-link[aria-current="page"] .ico.duo{color:#fff}.tp-link[aria-current="page"] .ico.duo .d2{fill:#fff;opacity:.3}
  .tp-main{min-width:0}
}
.wm .wm-sub{font-size:max(13px,calc(var(--wm,1.3rem)*.62))}
.wm .wm-sub{font-size:max(14px,calc(var(--wm,1.3rem)*.74))}.wm .wm-sub .wm-1{font-size:max(12px,calc(var(--wm,1.3rem)*.5))}

/* ============================================================
   v5：整合 Claude Design 版面後新增或改動的樣式（內容與資料換成我們的）
   ============================================================ */
/* footer：純文字 */
.ftr p{max-width:var(--measure)}
.ftr .ftr-contact{font-size:.9375rem}
.ftr a{text-underline-offset:3px}
/* 區域抽屜：政見適用範圍、她與這區的足跡清單 */
.sheet .scope-note{font-size:.875rem;font-weight:700;color:var(--purple-800);margin-top:2px}
.rel-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.rel-list li{display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:baseline;font-size:1rem}
.rel-list .ry{font-weight:800;color:var(--pink-700);white-space:nowrap}
.rel-list .rrole{display:block;font-size:.875rem;font-weight:700;color:var(--purple-800);margin-top:2px}
/* 政見清單：只有一句話的項目不做展開，樣式同一套 */
.pitem.flat{display:block}
.pflat{display:flex;gap:12px;align-items:flex-start;padding:14px;min-height:56px}
.pkind{display:inline-block;margin-right:6px;font-size:.75rem;font-weight:700;color:var(--pink-700);border:1.5px solid var(--pink-700);border-radius:999px;padding:0 8px;line-height:1.6;vertical-align:2px}
/* 議題頁 */
.tp-title{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:space-between;margin-top:8px}
.tp-title .h1{display:flex;align-items:center;gap:12px}
.tp-sub{display:flex;align-items:center;gap:8px;margin-top:28px;color:var(--purple-800)}
.tp-sub--areas{margin-top:36px}
.tp-zone{display:flex;align-items:center;gap:8px;margin-top:24px}
.tp-area{font-size:1.0625rem;font-weight:700;margin:14px 0 6px}
/* 欣純頁：時間軸三段、做過的事 */
.career{display:grid;gap:28px}
@media(min-width:1024px){.career{grid-template-columns:repeat(3,minmax(0,1fr));column-gap:48px}}
.career-sec--start{grid-column:1/-1}
.career-h{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}
.career-range{font-size:.9375rem;font-weight:800;color:var(--ink-2)}
.step{grid-template-columns:24px 1fr;padding-bottom:18px}
.step::before{left:11px;top:26px}
.step .sn{width:24px;height:24px;margin-top:2px;background:#fff}
.step.next .sn{border-color:var(--pink-700);box-shadow:0 0 0 4px var(--pink-100);background:#fff}
.step.next .st{color:var(--pink-700)}
.step .sy{font-size:1rem;color:var(--purple-800)}
.step .state-t{color:var(--pink-700)}
.ach-grid{display:grid;gap:12px}
@media(min-width:768px){.ach-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(min-width:1440px){.ach-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
.ach-item{display:flex;flex-direction:column;gap:6px}
.ach-tag{display:flex;gap:10px;align-items:center;font-size:.875rem;font-weight:700;color:var(--purple-800)}
.ach-tag span:first-child{background:var(--purple-50);border:1px solid var(--purple-soft);border-radius:999px;padding:1px 10px}
.ach-role{font-weight:700;color:var(--pink-700);font-size:.9375rem}
.portrait svg{opacity:.9}
/* 影片：真縮圖與播放器 */
.vf .vimg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.vf .th{background:linear-gradient(180deg,#F5D9D7 0%,#EABFC6 43%,#C9AAD1 100%)}
.player{padding:0;overflow:hidden}
.player iframe{width:100%;height:100%;border:0;display:block}
.vdate{display:flex;align-items:center;gap:8px;font-weight:700}
.vmore-note{margin-top:28px;max-width:var(--measure);color:var(--ink-2)}
.vmore-note a,.tl-end a{font-weight:700;display:inline-flex;align-items:center;gap:4px}
/* 議員卡：服務處 */
.office{margin-top:6px}
.office+.office{margin-top:14px}
.office-type{font-size:.875rem;font-weight:700;color:var(--purple-800)}
.cn-tel a{color:var(--purple-800);font-weight:700}
.cn-g .pkind{margin-right:8px}
/* 有話說：匿名小字放在送出處、honeypot、檢舉 */
.anon-note{flex:1 1 100%;order:9;font-size:.8125rem;color:var(--ink-2);text-align:center}
.vc-hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.vc-report{min-height:36px;padding:4px 0;font-size:.875rem;font-weight:700;color:var(--ink-2)}
.vc-report[disabled]{text-decoration:none;opacity:.7;cursor:default}
.vc-item .pend{margin:4px 0}
/* 關於本站（沿用 v4-gradient 內容，換成 v5 token） */
.site-about{display:grid;gap:16px;max-width:none}
.site-about>*{max-width:var(--measure)}
.site-about>.src-block,.site-about>.src-asof{max-width:56rem}
.site-about-lead{font-size:1.1875rem;font-weight:700;line-height:1.7}
.site-about h2{margin-top:20px}
.site-about-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.site-about-list li{padding:12px 16px;background:var(--purple-50);border-radius:14px}
.src-asof{color:var(--ink-2);font-size:.9375rem}
.src-block{display:grid;gap:12px;margin-top:8px}
.src-block h3{font-size:1.1875rem;font-weight:900}
.src-note{color:var(--ink-2);font-size:.9375rem}
.src-group{background:#fff;border:1px solid var(--line);border-radius:16px}
.src-summary{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:12px;min-height:56px;padding:8px 16px;cursor:pointer;list-style:none;font-weight:700}
.src-summary::-webkit-details-marker{display:none}
.src-summary-title{overflow-wrap:anywhere}
.src-count{font-size:.875rem;font-weight:500;color:var(--ink-2)}
.src-caret{transition:transform .2s var(--ease);color:var(--purple-800)}
.src-group[open]>.src-summary .src-caret{transform:rotate(180deg)}
.src-group>.src-note,.src-group>.src-list,.src-group>.src-people{margin:0 16px 16px}
.src-list{list-style:none;padding:0;margin:0;display:grid;gap:2px}
.src-item{display:grid;gap:2px;padding:8px 0;border-top:1px solid var(--purple-50)}
.src-item:first-child{border-top:0}
.src-title{overflow-wrap:anywhere;line-height:1.5}
.src-meta{display:flex;flex-wrap:wrap;align-items:center;column-gap:12px;font-size:.875rem;color:var(--ink-2)}
.src-link{display:inline-flex;align-items:center;gap:4px;min-height:44px;font-weight:700;text-underline-offset:3px}
.src-people{list-style:none;padding:0;display:grid;gap:12px}
.src-person{display:grid;gap:2px;padding:12px 16px;background:var(--paper);border-radius:14px}
.src-person-head{display:flex;align-items:baseline;gap:12px}
.src-no{font-size:.875rem;font-weight:700;color:var(--pink-700)}
.src-name{font-size:1.0625rem;font-weight:900;margin:0}
.src-label{margin-top:8px;font-size:.875rem;font-weight:700;color:var(--ink-2)}
.src-pending{color:var(--ink-2)}
.src-list--flat .src-item:first-child{padding-top:0}
.src-inline{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;column-gap:16px}
@media(min-width:768px){.src-item{grid-template-columns:1fr auto;align-items:center;column-gap:16px}.src-meta{justify-content:flex-end}}
@media(min-width:1440px){.src-block .src-people{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* 關於本站：桌機左右 25% 與 75%，左側說明固定（sticky），右側資料來源隨頁面捲動；手機上下排列（2026-11-13 使用者決定） */
.about-grid{display:grid;gap:24px;max-width:none}
.about-grid>*{max-width:none}
.about-side{display:grid;gap:14px;align-content:start}
.about-side>*{max-width:var(--measure)}
.about-side h2{margin-top:12px}
.about-main{display:grid;gap:16px;min-width:0}
.about-main>.src-block{max-width:none}
@media(min-width:1024px){
  .about-grid{grid-template-columns:minmax(240px,1fr) minmax(0,3fr);gap:48px;align-items:start}
  .about-side{position:sticky;top:calc(var(--header) + 16px);max-height:calc(100vh - var(--header) - 32px);overflow-y:auto;overscroll-behavior:contain;padding-right:8px}
}
.about-main>h2{margin-top:24px}
.about-main>.site-about-list,.about-main>p{max-width:var(--measure)}
.about-main>:first-child,.about-side>:first-child{margin-top:0}

/* 2026-11-13 使用者決定：chip 的數量只留數字，不要圈圈底框 */
.chip .cnt,.chip[aria-pressed="true"] .cnt,.chip[aria-selected="true"] .cnt,.chip[aria-checked="true"] .cnt,
.chips.scroll.vc-scroll .chip .cnt{min-width:0;height:auto;padding:0;border:0;border-radius:0;background:none;color:inherit;font-size:.875rem;font-weight:800;opacity:.85}
/* 議員號次：圓圈內一個數字（跟品牌字標的圈 1 同一種），不寫「號」 */
.cc-no{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;border-radius:50%;background:var(--pink-700);color:#fff;flex:none;font-size:1rem}
.cc-no b{font-size:1rem;line-height:1;transform:none;font-weight:800}
.cn-name .cc-no{width:2.25rem;height:2.25rem;margin-right:8px}
.cn-name .cc-no b{font-size:1.25rem}
/* 議員候選人卡的政見不加圈圈數字 */
.cn-g .pnum{display:none}

/* 欣純「一路走來」：一行一項，捲到哪點和線亮到哪（2026-11-14） */
.cv{list-style:none;margin:0;padding:0;max-width:var(--measure)}
.cv-i{position:relative;display:grid;grid-template-columns:20px minmax(0,1fr);gap:16px;padding-bottom:24px}
.cv-i:last-child{padding-bottom:0}
.cv-i::before,.cv-i::after{content:"";position:absolute;left:9px;top:14px;bottom:-14px;width:2px;background:var(--line)}
.cv-i::after{background:var(--pink-700);transform:scaleY(0);transform-origin:top;transition:transform .45s cubic-bezier(.22,1,.36,1)}
.cv-i.fill::after{transform:scaleY(1)}
.cv-i:last-child::before,.cv-i:last-child::after{display:none}
.cv-dot{position:relative;z-index:1;width:20px;height:20px;margin-top:4px;border-radius:50%;border:2px solid var(--purple-400);background:#fff;transition:background-color .3s,border-color .3s,box-shadow .3s}
.cv-i.on .cv-dot{background:var(--pink-700);border-color:var(--pink-700)}
.cv-i.cur .cv-dot{box-shadow:0 0 0 5px var(--pink-100)}
.cv-t{font-size:1.125rem;font-weight:700;line-height:1.6;color:var(--ink-2);transition:color .3s}
.cv-i.on .cv-t{color:var(--ink)}
.cv-i.cur .cv-t{color:var(--pink-700)}
.cv-y{font-family:var(--fn);font-weight:800;margin-right:8px}
.cv-d{font-size:.9375rem;color:var(--ink-2);margin-top:2px}
@media (prefers-reduced-motion:reduce){.cv-i::after,.cv-dot,.cv-t{transition:none}}

/* 欣純「做過的事」：照官網分類（2026-11-14） */
.achg{display:grid;gap:16px}
@media(min-width:768px){.achg{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}}
@media(min-width:1280px){.achg{grid-template-columns:repeat(3,minmax(0,1fr))}}
.achg-c{display:grid;gap:10px;align-content:start}
.achg-note{margin:-4px 0 0}
.achg-l{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.achg-l li{position:relative;padding-left:16px;line-height:1.6}
.achg-l li::before{content:"";position:absolute;left:0;top:.65em;width:6px;height:6px;border-radius:50%;background:var(--pink-700)}
.achg-y{display:block;font-family:var(--fn);font-weight:800;font-size:.875rem;color:var(--purple-800)}
.achg-src{margin-top:16px;font-size:.875rem}
@media(min-width:768px){.achg{display:block;columns:2;column-gap:16px}.achg-c{break-inside:avoid;margin-bottom:16px}}
@media(min-width:1280px){.achg{columns:3}}
.cv-live .cv-dot::after{content:"";position:absolute;inset:-2px;border-radius:50%;border:2px solid var(--pink-700);animation:cv-pulse 1.8s ease-out infinite}
@keyframes cv-pulse{0%{transform:scale(1);opacity:.8}100%{transform:scale(2.2);opacity:0}}
@media (prefers-reduced-motion:reduce){.cv-live .cv-dot::after{animation:none;opacity:0}}
.achg-y{font-size:1.0625rem;margin-bottom:2px}

/* 欣純頁：照片固定在左，右邊引言、得票、一路走來可捲（2026-11-14） */
.her-grid{display:grid;gap:24px}
.her-main{display:grid;gap:32px;min-width:0;align-content:start}
.her-main>.sec{margin-top:0;padding-top:0}
.her-quote{margin:0;max-width:var(--measure)}
.her-quote p{font-size:1.1875rem;line-height:1.85;font-weight:500;color:var(--ink)}
.her-quote cite{display:block;margin-top:10px;font-style:normal;font-size:.875rem;color:var(--ink-2)}
@media(max-width:767px){.her-side .portrait{max-width:220px}}
@media(min-width:1024px){
  .her-grid{grid-template-columns:minmax(240px,1fr) minmax(0,2.5fr);gap:48px;align-items:start}
  .her-side{position:sticky;top:calc(var(--header) + 24px)}
  .her-side .portrait{max-width:none}
}
.portrait img{position:absolute;left:0;bottom:0;width:100%;height:100%;object-fit:cover;object-position:center top}
.her-intro{display:grid;gap:12px}
.her-25{margin-top:48px;font-size:clamp(2rem,4.5vw,3.25rem);font-weight:900;line-height:1.3;letter-spacing:.01em;color:var(--purple-800)}
.her-25s{margin-top:10px;font-size:clamp(1.125rem,1.8vw,1.375rem);font-weight:700;line-height:1.6;color:var(--ink)}
/* 她走過的街、追欣族：地圖白底、各區有外框（2026-11-14） */
#herMap.mapbox,#followMap.mapbox{background:#fff;border:1.5px solid var(--line);box-shadow:none}
#herMap .dfill,#followMap .dfill{fill:#fff!important;stroke:#C9B8DA;stroke-width:1;vector-effect:non-scaling-stroke}
#herMap .zone-ov,#herMap .map-shadow,#followMap .zone-ov,#followMap .map-shadow{display:none}
#herMap .ov.lit,#herMap .ov.lit-pale,#herMap .ov.lit-cur,#followMap .ov.lit,#followMap .ov.lit-pale,#followMap .ov.lit-cur{stroke:#fff;stroke-width:1;vector-effect:non-scaling-stroke}
.vc-ts{flex:1 1 100%;display:flex;justify-content:center}

/* 欣純頁頂部 v2（照 03-ux/2026-11-14-心存台中.html）：拱形背景照片、候選人名、引言卡、追蹤欣純 */
.her-grid{gap:8px}
.her-photo{position:relative;margin:0 auto;max-width:440px;aspect-ratio:800/960;display:flex;align-items:flex-end;justify-content:center;overflow:hidden;border-radius:0 0 28px 28px}
.her-bg{position:absolute;left:4%;right:4%;bottom:0;top:18%;border-radius:999px 999px 0 0;background:linear-gradient(180deg,#F4D7D5 0%,#EAD2E0 55%,#C9ACD1 100%);overflow:hidden}
.her-bg svg{position:absolute;left:0;right:0;bottom:0;width:100%;height:22%;fill:#FBF7F4;opacity:.5}
.her-photo img{position:relative;width:100%;height:auto;display:block}
.her-intro{display:block}
.her-kicker{font-weight:700;color:var(--purple-800);font-size:1rem}
.her-name{display:flex;align-items:baseline;gap:12px;font-size:clamp(2.75rem,9vw,4.5rem);font-weight:900;line-height:1.05;letter-spacing:-.02em;margin-top:4px;color:var(--ink)}
.her-no{font-size:.5em;color:var(--pink-700);font-weight:900}
.her-no b{font-size:1.15em;font-weight:900}
.her-quote{margin:28px 0 0;padding:20px 22px;background:#fff;border-radius:20px;box-shadow:var(--sh-1);position:relative;max-width:var(--measure)}
.her-quote::before{content:"“";position:absolute;left:14px;top:-22px;font:900 64px/1 Georgia,serif;color:var(--pink-500)}
.her-quote p{font-size:1.0625rem;line-height:1.85;font-weight:400;color:var(--ink)}
.her-quote footer{margin-top:12px;font-size:.875rem;font-weight:700;color:var(--purple-800)}
.her-quote footer::before{content:"— "}
.her-social{margin-top:24px}
.her-social-t{font-size:.9375rem;font-weight:900;color:var(--purple-800);margin-bottom:8px}
@media(min-width:1024px){
  .her-grid{grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:clamp(32px,4vw,80px)}
  .her-side{top:calc(var(--header) + 16px)}
  .her-photo{max-width:min(100%,calc((100vh - var(--header) - 40px) * .8333))}
  .her-main{padding-top:48px}
}
/* 頁尾波浪（每一頁） */
.ftr{position:relative;margin-top:48px}
.ftr::before{content:"";position:absolute;left:0;right:0;top:-39px;height:40px;pointer-events:none;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 40' preserveAspectRatio='none'%3E%3Cpath fill='%235B3F7D' d='M0 22 C180 4 360 4 540 20 S900 38 1080 22 S1320 6 1440 16 V40 H0Z'/%3E%3C/svg%3E") no-repeat;background-size:100% 100%}
/* 手機：影音放在選單；桌機選單不重複 */
@media(min-width:1024px){.menu-mob{display:none}}
/* 一路走來：還沒到的投票日，圓點用虛線（到了當天亮起來後改實心） */
.cv-i[data-date] .cv-dot{border-style:dashed;border-color:var(--purple-600)}
.cv-i[data-date].on .cv-dot{border-style:solid;border-color:var(--pink-700)}
/* 純動態：近期活動 */
.ev-sec{margin-top:40px}
.ev-list{display:grid;gap:16px;margin-top:12px}
@media(min-width:768px){.ev-list{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(min-width:1280px){.ev-list{grid-template-columns:repeat(3,minmax(0,1fr))}}
.ev-card{display:grid;gap:10px;align-content:start}
.ev-card.live{box-shadow:0 0 0 2px var(--pink-700),var(--sh-1)}
.ev-when{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;font-weight:700;color:var(--purple-800)}
.ev-gift,.ev-place{display:flex;gap:8px;align-items:flex-start}
.ev-gift{color:var(--pink-700);font-weight:700}
.ev-place svg,.ev-gift svg{flex:none;margin-top:3px}
.ev-card .btn{justify-self:start}
.ev-past{margin-top:16px}
/* 近期活動：icon 與文字垂直置中對齊 */
.ev-gift,.ev-pt{display:flex;align-items:center;gap:8px}
.ev-gift svg,.ev-pt svg{flex:none;margin-top:0}
.ev-place{display:block}
.ev-addr{padding-left:28px}
/* 空狀態：圖示、標題、說明全部置中 */
.empty{display:flex;flex-direction:column;align-items:center;gap:6px}
.empty p{margin-inline:auto}
/* 她走過的街：圖例放進地圖框左下；手機地圖再矮一點 */
.sweep-map .sweep-legend{position:absolute;left:10px;bottom:10px;z-index:3;margin:0;padding:4px 10px;border-radius:999px;background:rgba(255,255,255,.92);box-shadow:0 1px 3px rgba(42,36,51,.08)}
@media(max-width:1023px){#herMap.mapbox.compact{height:170px;min-height:160px}.sweep-map .sweep-legend{left:8px;bottom:8px;font-size:.75rem;gap:10px}}
/* 桌機頁首導覽按鈕：右側多 4px（市長／議員切換不動） */
.hdr-nav a{padding:0 18px 0 14px}
/* 全站影片播放鈕：半透明，看得到後面的畫面；滑過時變實 */
.vf .play{background:rgba(168,71,92,.72);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}
.vf:hover .play,.vf:focus-visible .play{background:rgba(168,71,92,.95)}
/* 桌機選單只剩字體大小，拿掉下方分隔線與留白（手機選單不變） */
@media(min-width:1024px){.menu .row{border-bottom:0;margin-bottom:0;padding-bottom:4px}}
/* 區域抽屜：生活圈色點與文字留距離；「這些政見適用」整列寬、區名不拆開 */
.sheet .summary .dot{margin-right:6px}
.sheet .scope-note{margin-top:4px}
.nw{white-space:nowrap}
/* 關於本站「我們怎麼對待你的資料」：跟上方資料來源同一種白底細框 */
.site-about-list li{background:#fff;border:1px solid var(--line);border-radius:16px;padding:14px 18px}
.about-main>.site-about-list{max-width:none}
.c-av.mascot{background:var(--purple-50);overflow:hidden}
.c-av.mascot img{width:100%;height:100%;object-fit:contain;display:block;transform:scale(1.08)}
.c-av.mascot{background:#fff;border:1px solid var(--line)}
.c-av.mascot img{transform:scale(.92)}
/* 分享視窗：社群按鈕列 */
.sh-social{flex:1 1 100%;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-bottom:4px}
.sh-s{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;min-height:64px;padding:8px 4px;border-radius:14px;border:1.5px solid var(--purple-100);background:var(--purple-50);color:var(--purple-800);font-weight:700;font-size:.8125rem;cursor:pointer}
.sh-s svg{width:24px;height:24px;fill:currentColor}
.sh-s:hover{border-color:var(--purple-600)}
/* 頁尾：桌機置中 */
@media(min-width:1024px){.ftr .wrap{text-align:center}.ftr p{margin-inline:auto}}
/* 首頁海浪：速度調快約 2.5 倍，四層錯開，看得出在動（減少動態設定時仍會停止） */
.waves .w1{animation-duration:19s}.waves .w2{animation-duration:14s}.waves .w3{animation-duration:11s}.waves .w4{animation-duration:16s}
/* 海浪四層同速 */
.waves .w1,.waves .w2,.waves .w3,.waves .w4{animation-duration:15s}
.sh-lbl{flex:1 1 100%;font-size:.875rem;font-weight:700;color:var(--ink-2);margin:0 0 -2px}
.sh-social{grid-template-columns:repeat(3,minmax(0,1fr))}
.sh-one{flex:1 1 100%;gap:10px}
.sh-ic{display:inline-flex;gap:6px}
.sh-ic svg{width:20px;height:20px;fill:currentColor}
