:root {
  /* 主色 / 中性 */
  --p:#654994; --pd:#4a3570; --p-hero-light:#7b5cad; --p-hero-dark:#4e3879; --p-hero-deep:#2c1f47; --p-poster-hi:#5a4488; --p-poster-mid:#3d2c66; --p-hero-floor:#241839; --p10:#f2eef9; --p15:#e4daf1; --p20:#e8dff5; --p30:#d4c2eb; --y:#FFE600; --t:#3E3A39; --tm:#6b6766; --bg:#fafafa; --bd:#e5e1e0;
  /* 議題色（交通藍 / 兒少琥珀 / 揭露炭黑 / 其他灰紫） */
  --traffic:#2B6CB0; --traffic-light:#3f7cbf; --traffic-dark:#1c4a7d; --traffic-soft:#dcebfa; --traffic-facade:#2f6fb4; --traffic-border:#17385f; --youth:#D98E21; --youth-ink:#8a5a12; --youth-muted:#b98322; --youth-copy:#7a5f2c; --youth-line:#f0deb8; --youth-facade-hi:#f4d79a; --youth-facade-lo:#eec079; --youth-border:#cf9a3c; --expose:#2B2733; --expose-accent:#ff6a3d; --expose-bg:#1b1822; --expose-ink:#efe9f2; --expose-line:#3a3444; --expose-muted:#8f8a99; --expose-copy:#b7b1c2; --expose-link:#e7c3ca; --expose-facade-hi:#33303c; --expose-facade-lo:#211d29; --expose-border:#46414f; --other:#6d6480; --other-light:#7c7390; --other-dark:#544d64; --other-soft:#e4dfec; --other-facade-hi:#786f8c; --other-facade-lo:#605872; --other-border:#453f56;
  /* 語意色（金=CTA 專用 / 墨 / 深紫） */
  --on-dark:#fff; --gold:#e3ac2f; --gold-soft:#ffd97a; --ink:#2b2733; --pdd:#2b1f45; --map-lo:#a98fd6;
  /* 縣市 6 痛點指標色（避開黨色） */
  --m-traffic:#2B6CB0; --m-traffic-tint:#e3edf7; --m-abuse:#D98E21; --m-abuse-tint:#faf0dd; --m-sexual:#C2417B; --m-sexual-tint:#f8e6ef; --m-housing:#4E5FBB; --m-housing-tint:#e8ebf8; --m-dependency:#0F8A80; --m-dependency-tint:#e0f2f0; --m-elder:#CE5F3F; --m-elder-tint:#f9e8e2;
  /* 政黨色 */
  --npp:#FFE600; --npp-ink:#33302f; --npp-soft:#fff3a6; --npp-num:#f0e07a; --npp-hero:#FFE600; --npp-shade:#f2d400; --tsp:#A6192E; --tsp-ink:#fff; --tsp-soft:#f5dee2; --tsp-num:#e7c3ca; --tsp-hero:#ff96a5; --tsp-shade:#7d1020; --gp:#5DAA68; --gp-ink:#fff; --gp-soft:#ddefe1; --gp-num:#bfe0c7; --gp-hero:#8fd8a0; --gp-shade:#3f8850; --sdp:#F0907A; --obs:#F0907A; --obs-ink:#33302f; --obs-soft:#fce8e3; --obs-num:#f9d3ca; --obs-hero:#F0907A; --obs-shade:#df755d; --fwd:#654994; --fwd-ink:#fff; --fwd-soft:#e8dff5; --fwd-num:#d4c2eb; --fwd-hero:#cbb8ec; --dpp:#1B9431; --kmt:#000095; --tpp:#28C8C8;
  /* 縣市執政色（縣市長黨籍：藍/綠/灰） */
  --gov-blue:#1B3E94; --gov-green:#1B9431; --gov-gray:#8a857d; --gov-blue-tint:#e7ebf6; --gov-green-tint:#e3f3e7; --gov-gray-tint:#efedea;
  /* 字級四級制（0703 裁決）：XL 主標家族（≥34px 不 token 化）＋ l/m/base/xs；xs 只准註解；sm/md/lg/xl 為舊碼 alias 禁止新用 */
  --fs-l:30px; --fs-m:22px; --fs-base:18.5px; --fs-xs:14.5px; --fs-sm:var(--fs-base); --fs-md:var(--fs-m); --fs-lg:var(--fs-m); --fs-xl:var(--fs-l); --fs-2xl:34px;
  /* 圓角 scale */
  --r-xs:4px; --r-sm:8px; --r-md:12px; --r-lg:16px; --r-pill:999px;
  /* 卡片陰影（收斂：subtle / resting / hover） */
  --shadow-card-sm:0 1px 2px rgba(101,73,148,.05); --shadow-card:0 1px 2px rgba(101,73,148,.05), 0 14px 30px -14px rgba(101,73,148,.18); --shadow-card-hover:0 18px 34px -16px rgba(101,73,148,.32);
  /* 間距 scale */
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:20px; --sp-6:24px; --sp-8:32px; --sp-10:40px; --sp-12:48px; --sp-16:64px; --nav-h:68px;
}
*{box-sizing:border-box;margin:0;padding:0}
.nb{display:inline-block}/* 斷行不切句：子句成塊 */
body{font-family:'Noto Sans TC',sans-serif;color:var(--t);background:var(--bg);font-weight:500;-webkit-font-smoothing:antialiased;line-height:1.75;font-size:var(--fs-base)}
img{max-width:100%;display:block}

/* ===== nav ===== */
.topnav{position:sticky;top:0;z-index:100;background:#fff;border-bottom:1px solid var(--bd);padding:14px 24px;display:flex;align-items:center;justify-content:space-between}
.topnav .brand{display:flex;align-items:center;gap:var(--sp-3);color:var(--p);font-weight:900;font-size:var(--fs-m);text-decoration:none;letter-spacing:1px}
.topnav .brand img{height:40px;width:auto}
.topnav-links{display:flex;gap:var(--sp-6);align-items:center}
.topnav-links a{color:var(--t);text-decoration:none;font-size:var(--fs-base);font-weight:700;padding:6px 0;border-bottom:2px solid transparent;transition:border-color .15s,color .15s}
.topnav-links a:hover{color:var(--p);border-bottom-color:var(--gold)}
.topnav-links a.active{color:var(--p);border-bottom-color:var(--gold)}
.topnav-links a.pill{padding:9px 20px;border-radius:var(--r-pill);border-bottom:none;font-weight:900;transition:transform .15s,background .15s,box-shadow .15s}
.topnav-links a.pill.vol{background:var(--p);color:#fff;box-shadow:0 3px 10px -3px rgba(101,73,148,.5)}
.topnav-links a.pill.vol:hover{background:var(--pd);color:#fff;transform:translateY(-1px);box-shadow:0 6px 16px -4px rgba(101,73,148,.55)}
.topnav-links a.pill.donate{background:var(--gold);color:var(--pdd);box-shadow:0 3px 10px -2px rgba(227,172,47,.55)}
.topnav-links a.pill.donate:hover{background:var(--gold);color:var(--pdd);filter:brightness(.96);transform:translateY(-1px);box-shadow:0 6px 18px -4px rgba(227,172,47,.6)}
.nav-toggle{display:none;background:none;border:none;cursor:pointer;position:relative;width:36px;height:36px;padding:0}
.nav-toggle span{position:absolute;left:6px;width:24px;height:2px;background:var(--t);transition:top .25s,transform .25s,opacity .15s;transform-origin:center}
.nav-toggle span:nth-child(1){top:11px}
.nav-toggle span:nth-child(2){top:17px}
.nav-toggle span:nth-child(3){top:23px}
.nav-toggle.open span:nth-child(1){top:17px;transform:rotate(45deg)}
.nav-toggle.open span:nth-child(2){opacity:0}
.nav-toggle.open span:nth-child(3){top:17px;transform:rotate(-45deg)}
@media (max-width:768px){
  :root{--nav-h:68px}
  .nav-toggle{display:block}
  .topnav-links{position:fixed;top:68px;right:0;left:0;background:#fff;flex-direction:column;gap:0;padding:0;border-bottom:1px solid var(--bd);transform:translateY(-150%);transition:transform .25s;box-shadow:0 6px 24px rgba(0,0,0,.1);z-index:99;align-items:stretch}
  .topnav-links.open{transform:translateY(0)}
  .topnav-links a{padding:16px 24px;border-bottom:1px solid var(--bd);font-size:var(--fs-base)}
  .topnav-links a:last-child{border-bottom:none}
  .topnav-links a.pill{border-radius:0;text-align:center}
  .topnav-links a:hover{background:var(--p10);color:var(--p);border-bottom-color:var(--bd)}
}

/* ===== breadcrumb ===== */
.crumb{max-width:1080px;margin:0 auto;padding:20px 24px 0;font-size:var(--fs-base);color:var(--tm)}
.crumb a{color:var(--tm);text-decoration:none;border-bottom:1px dashed var(--bd)}
.crumb a:hover{color:var(--p);border-bottom-color:var(--p)}
.crumb .sep{margin:0 6px;opacity:.5}

/* ===== shared layout ===== */
.container{max-width:1080px;margin:0 auto;padding:32px 24px 64px}
.container-narrow{max-width:760px;margin:0 auto;padding:32px 24px 64px}
.section-head,.sec-head,.pg-shead,.ic-shead,.cy-shead{margin-bottom:var(--sp-6)}
.section-kick,.section-head .kick,.sec-kick,.cv-kick{font-size:var(--fs-xs);font-weight:900;letter-spacing:3px;color:var(--p);margin-bottom:var(--sp-2);line-height:1.25}
.section-head h2,.section-h2,.sec-h2,.pg-shead h2,.ic-shead h2,.cy-shead h2,.cv-h2{font-size:var(--fs-l);font-weight:900;color:var(--ink);line-height:1.25;margin:0;letter-spacing:0}
.section-head .u,.sec-h2 .u,.pg-shead h2 .u,.ic-shead h2 .u,.cy-shead h2 .u,.cv-h2 .u{background:linear-gradient(transparent 62%,var(--p20) 62%);padding:0 2px}
.section-sub,.section-head .sub,.sec-sub,.pg-shead .sub,.ic-shead .sub,.cy-shead .sub{font-size:var(--fs-base);color:var(--tm);font-weight:500;margin-top:var(--sp-2);line-height:1.75}
.section-h3{font-size:var(--fs-m);font-weight:900;color:var(--t);margin-bottom:var(--sp-3);display:flex;align-items:center;gap:var(--sp-2)}
.section-h3::before{content:"";display:inline-block;width:4px;height:18px;background:var(--p);border-radius:var(--r-xs)}

/* ===== card ===== */
.card{background:#fff;border:1px solid var(--bd);border-radius:var(--r-md);padding:var(--sp-5);transition:transform .15s,box-shadow .15s,border-color .15s}
.card.clickable{cursor:pointer;text-decoration:none;color:inherit;display:block}
.card.clickable:hover{transform:translateY(-3px);box-shadow:0 8px 20px rgba(101,73,148,.12);border-color:var(--p)}
.card-soft{background:var(--p10);border:1px solid var(--p20);border-radius:var(--r-md);padding:var(--sp-5)}
.card-accent{background:linear-gradient(135deg,var(--p10),var(--p20));border:2px solid var(--p);border-radius:var(--r-md);padding:var(--sp-6)}

/* ===== tag ===== */
.tag{display:inline-block;padding:3px 10px;border-radius:var(--r-pill);font-size:var(--fs-xs);font-weight:700;letter-spacing:1px;background:#fff;border:1px solid var(--bd);color:var(--t)}
.tag.traffic{background:var(--traffic);border-color:var(--traffic);color:#fff}
.tag.youth{background:var(--youth);border-color:var(--youth);color:#fff}
.tag.expose{background:var(--expose);border-color:var(--expose);color:#fff}
.tag.other{background:var(--other);border-color:var(--other);color:#fff}
.tag.npp{background:var(--npp);color:var(--t);border-color:var(--npp)}
.tag.tsp{background:var(--tsp);color:#fff;border-color:var(--tsp)}
.tag.gp{background:var(--gp);color:#fff;border-color:var(--gp)}
.tag.sdp{background:var(--sdp);color:#fff;border-color:var(--sdp)}
.tag.obs{background:var(--obs);color:var(--t);border-color:var(--obs)}
.tag.fwd{background:var(--fwd);color:#fff;border-color:var(--fwd)}
.tag-group{display:flex;gap:var(--sp-1);flex-wrap:wrap;margin-bottom:var(--sp-2)}

/* ===== hero-num ===== */
.hero-num{font-size:60px;font-weight:900;line-height:1;color:var(--p);letter-spacing:-1px}
.hero-num .unit{font-size:var(--fs-m);font-weight:700;margin-left:var(--sp-1);color:var(--p)}
.hero-num.big{font-size:96px}
.hero-num.s{font-size:36px}

/* ===== footer ===== */
footer{background:#fff;border-top:2px solid var(--bd);padding:48px 24px 24px;font-size:var(--fs-base);color:var(--tm);margin-top:var(--sp-16)}
footer .ftin{max-width:1080px;margin:0 auto;display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:var(--sp-8)}
footer .ftbrand{display:flex;flex-direction:column;gap:var(--sp-3)}
footer .ftbrand .logo-row{display:flex;align-items:center;gap:var(--sp-2)}
footer .ftbrand img{height:36px;width:auto}
footer .ftbrand .name{color:var(--p);font-weight:900;font-size:var(--fs-m);letter-spacing:1px}
footer .ftbrand .tagline{color:var(--t);font-weight:500;line-height:1.6}
footer .ftcol h4{font-size:var(--fs-base);font-weight:900;color:var(--t);margin-bottom:var(--sp-2);letter-spacing:1px}
footer .ftcol a{display:block;color:var(--tm);text-decoration:none;font-size:var(--fs-base);padding:4px 0}
footer .ftcol a:hover{color:var(--p)}
footer .ftbottom{max-width:1080px;margin:32px auto 0;padding-top:18px;border-top:1px solid var(--bd);font-size:var(--fs-xs);color:var(--tm);line-height:1.7;text-align:center}
footer .ftbottom .parties{display:flex;gap:var(--sp-3);flex-wrap:wrap;margin-bottom:var(--sp-2);font-weight:700;color:var(--t)}
@media (max-width:768px){
  footer .ftin{grid-template-columns:1fr 1fr;gap:var(--sp-6)}
  footer .ftbrand{grid-column:1/-1}
}

/* ===== utility ===== */
.muted{color:var(--tm)}
.center{text-align:center}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-5);border-radius:var(--r-pill);text-decoration:none;font-weight:900;font-size:var(--fs-base);line-height:1.25;border:2px solid transparent;cursor:pointer;font-family:inherit;transition:background .15s,border-color .15s,color .15s,transform .15s,box-shadow .15s,filter .15s;white-space:nowrap}
.btn:hover{transform:translateY(-1px)}
.btn:disabled,.btn[aria-disabled="true"]{opacity:.55;cursor:not-allowed;transform:none}
.btn--md{padding:var(--sp-2) var(--sp-5)}
.btn--lg{padding:var(--sp-4) var(--sp-8)}
.btn--primary{background:var(--p);color:#fff;border-color:var(--p)}
.btn--primary:hover{background:var(--pd);border-color:var(--pd);color:#fff}
.btn--gold{background:var(--gold);color:var(--pdd);border-color:var(--gold)}
.btn--gold:hover{color:var(--pdd);filter:brightness(.96);box-shadow:0 6px 18px -10px rgba(43,31,69,.5)}
.btn--ghost{background:transparent;color:var(--p);border-color:var(--p)}
.btn--ghost:hover{background:var(--p10);color:var(--p)}
.btn--on-dark{background:#fff;color:var(--p);border-color:#fff}
.btn--on-dark:hover{background:var(--p10);border-color:var(--p10);color:var(--p)}
.btn--on-dark.btn--ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.62)}
.btn--on-dark.btn--ghost:hover{background:rgba(255,255,255,.08);border-color:#fff;color:#fff}
.btn--on-dark.btn--gold{background:var(--gold);color:var(--pdd);border-color:var(--gold)}
.btn.primary{background:var(--p);color:#fff;border-color:var(--p)}
.btn.primary:hover{background:var(--pd);border-color:var(--pd)}
.btn.ghost{background:transparent;color:var(--p);border-color:var(--p)}
.btn.ghost:hover{background:var(--p10)}
.btn.yellow{background:var(--gold);color:var(--pdd);border-color:var(--gold)}
.topnav-links a.pill.btn{border:0}

/* ===== shared CTA band ===== */
.cta-band{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-4);background:var(--p);color:#fff;border-radius:var(--r-lg);padding:var(--sp-6) var(--sp-8);font-weight:900;font-size:var(--fs-base);line-height:1.5;text-decoration:none;transition:background .15s;flex-wrap:wrap}
a.cta-band:hover{background:var(--pd);color:#fff}
.cta-band>span:first-child,.cta-band__text{flex:1 1 260px;min-width:0}
.cta-band h2,.cta-band__title{font-size:var(--fs-l);font-weight:900;line-height:1.25;margin:0}
.cta-band p,.cta-band__desc{font-size:var(--fs-base);font-weight:700;line-height:1.7;margin:var(--sp-1) 0 0;color:rgba(255,255,255,.9)}
.cta-band__title,.cta-band__desc{display:block}
.cta-band .btns,.cta-band__actions{display:flex;gap:var(--sp-2);flex-wrap:wrap;align-items:center}
@media(max-width:640px){
  .cta-band{padding:var(--sp-5);align-items:flex-start}
  .cta-band .btns,.cta-band__actions{width:100%}
}

/* ===== grid ===== */
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-4)}
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-4)}
.grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--sp-4)}
@media (max-width:768px){
  .grid-3,.grid-4{grid-template-columns:1fr 1fr;gap:var(--sp-3)}
  .grid-2{grid-template-columns:1fr}
}
@media (max-width:480px){
  .grid-3,.grid-4{grid-template-columns:1fr}
}

/* ===== 候選人頁 v0.2 公版（共用，取代各頁 inline；產生器 _build_pages.py 用）===== */
/* hero */
.chero{background:linear-gradient(135deg,var(--p),var(--pd));color:#fff;padding:44px 24px}
.chero .in{max-width:880px;margin:0 auto;display:grid;grid-template-columns:200px 1fr;gap:var(--sp-8);align-items:center}
.chero .photo{width:200px;height:200px;border-radius:var(--r-lg);object-fit:cover;background:rgba(255,255,255,.15);box-shadow:0 12px 32px rgba(0,0,0,.25)}
.chero .photo.ph{display:flex;align-items:center;justify-content:center;font-size:84px;font-weight:900;border:4px solid rgba(255,255,255,.3)}
.chero .pos{display:inline-block;background:var(--y);color:var(--t);font-weight:700;font-size:var(--fs-base);padding:4px 12px;border-radius:var(--r-xs);margin-bottom:var(--sp-3);letter-spacing:1px}
.chero h1{font-size:52px;font-weight:900;letter-spacing:2px;line-height:1.1;margin-bottom:var(--sp-2)}
.chero .dist{font-size:var(--fs-base);opacity:.92;margin-bottom:var(--sp-3)}
.chero .slogan{font-size:var(--fs-m);font-weight:700;line-height:1.5;margin-bottom:var(--sp-4)}
.chero .creds{display:flex;flex-wrap:wrap;gap:var(--sp-2)}
.chero .cred{background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.35);color:#fff;font-size:var(--fs-base);font-weight:700;padding:5px 12px;border-radius:var(--r-pill)}
details.cbio{margin-top:var(--sp-3);color:#fff}
details.cbio summary{cursor:pointer;list-style:none;font-size:var(--fs-base);font-weight:700;color:rgba(255,255,255,.85);border-bottom:1px dashed rgba(255,255,255,.5);display:inline-block;padding-bottom:2px}
details.cbio summary::-webkit-details-marker{display:none}
details.cbio summary::after{content:" ↓"}
details.cbio[open] summary::after{content:" ↑"}
details.cbio .bio{margin-top:var(--sp-3);background:rgba(255,255,255,.08);border-radius:var(--r-md);padding:16px 18px;display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-6)}
details.cbio .bio h4{color:var(--y);font-size:var(--fs-base);margin-bottom:var(--sp-2);border-bottom:2px solid rgba(255,230,0,.3);padding-bottom:4px}
details.cbio .bio ul{list-style:none}
details.cbio .bio li{font-size:var(--fs-base);padding:3px 0;color:rgba(255,255,255,.9)}
@media(max-width:768px){.chero .in{grid-template-columns:1fr;gap:var(--sp-4);text-align:center}.chero .photo{margin:0 auto}.chero h1{font-size:40px}.chero .creds{justify-content:center}.chero .slogan{font-size:var(--fs-m)}}
@media(max-width:640px){details.cbio .bio{grid-template-columns:1fr;gap:var(--sp-3)}}
/* 政見 carousel */
.plat-hint{font-size:var(--fs-xs);color:var(--tm);font-weight:700;letter-spacing:1px;margin-bottom:var(--sp-3)}
.plat{display:flex;gap:var(--sp-4);overflow-x:auto;scroll-snap-type:x mandatory;padding:4px 0 16px;scrollbar-width:thin}
.plat::-webkit-scrollbar{height:6px}
.plat::-webkit-scrollbar-thumb{background:var(--p30);border-radius:var(--r-xs)}
.platc{flex:0 0 300px;scroll-snap-align:start;background:#fff;border:1px solid var(--bd);border-radius:var(--r-lg);padding:26px 22px 22px;position:relative;overflow:hidden}
.platc.stub{background:var(--p10);border-style:dashed;border-color:var(--p20)}
.platc .pn{position:absolute;top:-18px;right:-6px;font-size:120px;font-weight:900;color:var(--p);opacity:.08;line-height:1;font-family:'Helvetica Neue',sans-serif}
.platc h3{font-size:var(--fs-m);font-weight:900;color:var(--p);margin-bottom:var(--sp-2);position:relative;z-index:1;line-height:1.4}
.platc p{font-size:var(--fs-base);line-height:1.75;color:var(--t);position:relative;z-index:1}
.platc .meta{font-size:var(--fs-xs);color:var(--tm);margin-top:var(--sp-2);position:relative;z-index:1}
@media(max-width:640px){.platc{flex:0 0 260px}}
/* 我關心的議題 + 同議題夥伴 */
.ilist{display:flex;flex-direction:column;gap:var(--sp-2)}
details.irow{background:var(--p10);border:1px solid var(--p20);border-radius:var(--r-md)}
details.irow[open]{background:#fff;border-color:var(--p)}
details.irow summary{cursor:pointer;list-style:none;padding:14px 18px;display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap}
details.irow summary::-webkit-details-marker{display:none}
details.irow .it{font-size:var(--fs-base);font-weight:900;color:var(--p)}
details.irow .it::before{content:"＃";opacity:.7}
details.irow .ih{font-size:var(--fs-xs);color:var(--tm);font-weight:700}
details.irow[open] .ih{color:var(--p)}
details.irow[open] .ih::after{content:" ↑"}
details.irow .ih::after{content:" ↓"}
details.irow .ifellows{padding:2px 18px 18px;display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-2)}
details.irow .ifellows .none{grid-column:1/-1;color:var(--tm);font-size:var(--fs-base);padding:4px 0}
@media(max-width:768px){details.irow .ifellows{grid-template-columns:1fr}}
/* 夥伴卡（同議題 / 看看陣線夥伴） */
.pcard{display:flex;align-items:center;gap:var(--sp-3);padding:12px 14px;background:#fff;border:1px solid var(--bd);border-radius:var(--r-sm);text-decoration:none;color:var(--t);transition:all .15s}
.pcard:hover{border-color:var(--p);transform:translateY(-2px);box-shadow:0 6px 14px rgba(101,73,148,.12)}
.pcard .av{width:40px;height:40px;flex-shrink:0;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:900;font-size:var(--fs-base);overflow:hidden}
.pcard .pn{font-size:var(--fs-base);font-weight:900;line-height:1.2}
.pcard .pm{font-size:var(--fs-xs);color:var(--tm);margin-top:var(--sp-1)}
.pgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-3)}
@media(max-width:768px){.pgrid{grid-template-columns:repeat(2,1fr)}}
/* 候選人中段可組合區塊（_build_pages block 架構）*/
.cprose p{font-size:var(--fs-base);line-height:1.9;margin-bottom:14px;color:var(--t)}
.cprose strong{color:var(--p);background:linear-gradient(transparent 60%,rgba(255,230,0,.5) 60%);padding:0 2px}
.cprose .exp-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.trec{display:flex;flex-direction:column;gap:12px}
.trec-item{background:#fff;border:1px solid var(--bd);border-left:4px solid var(--p);border-radius:var(--r-md);padding:16px 18px}
.trec-tag{display:inline-block;font-size:var(--fs-xs);font-weight:900;letter-spacing:1px;color:#fff;background:var(--p);padding:2px 9px;border-radius:var(--r-xs);margin-bottom:7px}
.trec-t{font-size:var(--fs-md);font-weight:900;color:var(--t);line-height:1.4}
.trec-d{font-size:var(--fs-xs);color:var(--tm);margin-top:2px}
.trec-b{font-size:var(--fs-sm);color:var(--tm);line-height:1.7;margin-top:6px}
.endo{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
@media(max-width:640px){.endo{grid-template-columns:1fr}}
.endo-item{background:var(--p10);border-radius:var(--r-md);padding:16px 18px}
.endo-n{font-size:var(--fs-md);font-weight:900;color:var(--t)}
.endo-ti{font-size:var(--fs-xs);color:var(--tm);margin-top:2px}
.endo-q{font-size:var(--fs-sm);color:var(--t);line-height:1.7;margin-top:8px}

/* sticky bar（手機）*/
.cbar{position:fixed;bottom:0;left:0;right:0;background:#fff;border-top:1px solid var(--bd);box-shadow:0 -4px 16px rgba(0,0,0,.08);display:flex;z-index:90;padding:var(--sp-2);gap:var(--sp-1)}
.cbar a{flex:1;text-align:center;padding:12px 4px;text-decoration:none;color:var(--t);font-size:var(--fs-base);font-weight:700;border-radius:var(--r-sm);background:var(--p10)}
.cbar a.primary{background:var(--p);color:#fff}
@media(min-width:769px){.cbar{display:none}}
@media(max-width:768px){body.has-cbar{padding-bottom:68px}}

/* ===== 縣市問題數據儀表板（_build_counties.py 用）===== */
.tbd-badge{display:inline-block;background:var(--y);color:var(--t);font-size:var(--fs-xs);font-weight:900;padding:1px 7px;border-radius:var(--r-xs);margin-left:var(--sp-1);letter-spacing:1px;vertical-align:middle}
/* 預算亮點：大數字卡 */
.cdash-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-3)}
@media(max-width:640px){.cdash-stats{grid-template-columns:1fr}}
.bstat{background:#fff;border:1px solid var(--bd);border-radius:var(--r-md);padding:22px 18px;text-align:center;border-top:4px solid var(--p)}
.bstat .v{font-size:40px;font-weight:900;color:var(--p);line-height:1;letter-spacing:-1px}
.bstat .v .u{font-size:var(--fs-base);margin-left:var(--sp-1)}
.bstat .l{font-size:var(--fs-base);font-weight:700;color:var(--t);margin-top:var(--sp-2)}
.bstat .y{font-size:var(--fs-xs);color:var(--tm);margin-top:var(--sp-1)}
.bstat .src{font-size:var(--fs-xs);color:var(--tm);margin-top:var(--sp-1);opacity:.75}
/* 痛點＋凸顯數字 */
.pain-stat{background:#fff;border:1px solid var(--bd);border-radius:var(--r-md);margin-bottom:var(--sp-3);overflow:hidden;display:grid;grid-template-columns:160px 1fr;align-items:stretch}
.pain-stat.nostat{grid-template-columns:1fr}
@media(max-width:560px){.pain-stat{grid-template-columns:1fr}}
.pain-stat .big{background:var(--p10);padding:20px 18px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-right:1px solid var(--bd)}
@media(max-width:560px){.pain-stat .big{border-right:none;border-bottom:1px solid var(--bd)}}
.pain-stat .big .n{font-size:38px;font-weight:900;color:var(--p);line-height:1;letter-spacing:-1px}
.pain-stat .big .n .u{font-size:var(--fs-base);margin-left:var(--sp-1)}
.pain-stat .big .m{font-size:var(--fs-xs);color:var(--tm);margin-top:var(--sp-1);text-align:center;line-height:1.4}
.pain-stat .big .cmp{font-size:var(--fs-xs);font-weight:900;color:var(--traffic);margin-top:var(--sp-1)}
.pain-stat .body{padding:18px 20px}
.pain-stat .body .tg{display:inline-block;background:var(--p);color:#fff;font-size:var(--fs-xs);font-weight:900;letter-spacing:2px;padding:3px 8px;border-radius:var(--r-xs);margin-bottom:var(--sp-2)}
.pain-stat .body h3{font-size:var(--fs-m);font-weight:900;color:var(--t);margin-bottom:var(--sp-1)}
.pain-stat .body p{font-size:var(--fs-base);color:var(--tm);line-height:1.6}
.pain-stat .body .src{font-size:var(--fs-xs);color:var(--tm);margin-top:var(--sp-2);opacity:.75}
/* 縣市候選人 strip */
.cdash-cands{display:grid;grid-template-columns:repeat(5,1fr);gap:var(--sp-2)}
@media(max-width:768px){.cdash-cands{grid-template-columns:repeat(3,1fr)}}
@media(max-width:420px){.cdash-cands{grid-template-columns:repeat(2,1fr)}}
.cdash-cands .cc{background:#fff;border:1px solid var(--bd);border-radius:var(--r-sm);padding:12px 8px;text-decoration:none;color:var(--t);text-align:center;transition:all .15s}
.cdash-cands .cc:hover{border-color:var(--p);transform:translateY(-2px);box-shadow:0 6px 14px rgba(101,73,148,.12)}
.cdash-cands .cc .av{width:46px;height:46px;border-radius:50%;margin:0 auto 8px;display:flex;align-items:center;justify-content:center;font-weight:900;font-size:var(--fs-m);overflow:hidden}
.cdash-cands .cc .nm{font-size:var(--fs-base);font-weight:900;line-height:1.2}
.cdash-cands .cc .ar{font-size:var(--fs-xs);color:var(--tm);margin-top:var(--sp-1)}

/* ===== 內頁共用 hero 骨架 .tf-hero（第五階段抽出；紫漸層斜切底＋斜體 900 大字＋eyebrow）=====
   單一真源。共用者：about／finance／privacy（.pg-hero 薄 alias）、donate／volunteer／platform／news
   （產生器輸出 .tf-hero）、縣市 .tf-hero--metrics（左對齊＋metrics chips）、議題類別 .tf-hero--accent
   （per-議題 accent 色 eyebrow，色由 body inline --accent 決定）。
   刻意例外，不併入：首頁 .hero（飛魚品牌大 hero）／議題索引小鎮 hero（.ich/.tw/.stn）／
   候選人 poster（.cv-poster）／候選人總覽 .cl-hero（display 級徑向底＋直排浮水印，另成一套）。
   knobs（token 化便於 modifier/RWD 覆寫）：--tf-hero-max 容器寬、--tf-hero-slice 下緣斜切高、--tf-hero-h1 主標字級。 */
.tf-hero,.pg-hero{position:relative;overflow:hidden;color:#fff;
  --tf-hero-max:880px;--tf-hero-slice:56px;--tf-hero-h1:72px;
  background:linear-gradient(160deg,var(--p-hero-light) 0%,var(--p) 52%,var(--p-hero-dark) 100%)}
.tf-hero::after,.pg-hero::after{content:"";position:absolute;left:0;right:0;bottom:-1px;
  height:var(--tf-hero-slice);background:var(--bg);clip-path:polygon(0 100%,100% 100%,100% 0)}
.tf-hero .in,.pg-hero .in{position:relative;z-index:2;max-width:var(--tf-hero-max);margin:0 auto;
  padding:52px 22px 96px;text-align:center}
.tf-hero.left .in,.pg-hero.left .in{text-align:left}
.tf-eyebrow,.pg-eyebrow{display:inline-block;font-size:var(--fs-xs);font-weight:900;letter-spacing:3px;
  color:var(--p);background:#fff;padding:5px 15px;border-radius:var(--r-pill)}
.tf-hero h1,.pg-hero h1{font-size:var(--tf-hero-h1);font-weight:900;letter-spacing:2px;
  margin:20px 0 14px;line-height:1.1;color:#fff}
.tf-hero h1 .sl,.pg-hero h1 .sl{display:inline-block;transform:skewX(-10deg) rotate(-2deg);
  text-shadow:0 5px 0 var(--pdd),0 16px 30px rgba(0,0,0,.35)}
.tf-hero .lead,.pg-hero .lead{font-size:var(--fs-base);font-weight:700;color:rgba(255,255,255,.92);
  line-height:1.85;margin:0 auto;max-width:640px}
.tf-hero .lead strong,.pg-hero .lead strong{color:var(--gold-soft)}

/* 縣市 modifier：左對齊＋較寬容器＋右上光暈圓＋64px 斜切；metrics chips 樣式在 _county.css .cy-hero-metrics */
.tf-hero--metrics{--tf-hero-max:1080px;--tf-hero-slice:64px;--tf-hero-h1:64px}
.tf-hero--metrics::before{content:"";position:absolute;top:-30%;right:-10%;width:440px;height:440px;
  background:var(--pd);border-radius:50%;opacity:.5}
.tf-hero--bare::before{display:none}   /* 縣市索引 hero：拿掉紫色圈色塊，同其他內頁 */
.tf-hero--metrics .in{padding:58px 24px 96px;text-align:left}
.tf-hero--metrics h1{line-height:1.05;margin:20px 0 10px}
.tf-hero--metrics p{font-size:var(--fs-m);font-weight:700;color:rgba(255,255,255,.92);margin:0 0 26px;max-width:38ch}

/* 議題類別 modifier：左對齊＋較窄容器＋82px 大標；議題色 eyebrow（.ic-eyebrow bg:var(--accent)，樣式在 _issue.css）*/
.tf-hero--accent{--tf-hero-max:1000px;--tf-hero-h1:82px}
.tf-hero--accent .in{padding:48px 22px 92px;text-align:left}
.tf-hero--accent h1{line-height:1.08;margin:22px 0 14px}
.tf-hero--accent .lead{font-size:var(--fs-m);max-width:52ch;margin:0}

/* hero RWD（★源碼順序相依：base @560 先，modifier 各自較窄斷點的規則排其後，同特異度靠後者覆寫）*/
@media(max-width:560px){.tf-hero,.pg-hero{--tf-hero-h1:40px}}
@media(max-width:820px){.tf-hero--metrics{--tf-hero-h1:44px}
  .tf-hero--metrics .in{padding:44px 24px 82px}
  .tf-hero--metrics p{font-size:var(--fs-base)}}
@media(max-width:640px){.tf-hero--accent{--tf-hero-h1:44px}}

/* ===== 共用 page-hero（about/finance/縣市等品牌紫 hero；議題/個案頁用 inline 蓋成議題色）===== */
.page-hero{background:linear-gradient(135deg,var(--p) 0%,var(--pd) 100%);color:#fff;padding:48px 24px}
.page-hero .inner{max-width:880px;margin:0 auto}
.page-hero .eyebrow{font-size:var(--fs-xs);letter-spacing:4px;opacity:.7;margin-bottom:var(--sp-2)}
.page-hero h1{font-size:var(--fs-2xl);font-weight:900;letter-spacing:1px;margin-bottom:var(--sp-3);line-height:1.15}
.page-hero .lead{font-size:var(--fs-md);opacity:.95;line-height:1.55}
.page-hero p{font-size:var(--fs-sm);opacity:.92;line-height:1.7}

/* ===== 個案/篇頁（_build_cases.py）：數據 → 論述/現象 → 主張。--accent 由 body inline 設為議題色 ===== */
.case-hero{color:#fff;padding:40px 24px 44px}
.case-hero .inner{max-width:760px;margin:0 auto}
.case-hero h1{font-size:var(--fs-2xl);font-weight:900;line-height:1.3;letter-spacing:.5px}
@media(max-width:560px){.case-hero h1{font-size:var(--fs-xl)}}
.case-data{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:var(--sp-3);margin:-28px auto 12px;max-width:760px;padding:0 24px;position:relative;z-index:2}
.case-data .d{background:#fff;border:2px solid var(--accent,var(--p));border-radius:var(--r-lg);padding:24px 18px;text-align:center;box-shadow:0 8px 24px rgba(0,0,0,.07)}
.case-data .d .n{font-size:54px;font-weight:900;line-height:1;letter-spacing:-2px;color:var(--accent,var(--p))}
.case-data .d .n .u{font-size:var(--fs-m);margin-left:var(--sp-1)}
.case-data .d .l{font-size:var(--fs-sm);color:var(--t);margin-top:var(--sp-2);font-weight:700;line-height:1.5}
.case-data .d .s{font-size:var(--fs-xs);color:var(--tm);margin-top:var(--sp-1)}
.case-sec{margin-bottom:var(--sp-8)}
.case-sec .step{font-size:var(--fs-xs);font-weight:900;letter-spacing:4px;color:var(--accent,var(--p));margin-bottom:var(--sp-1)}
.case-sec h2{font-size:var(--fs-lg);font-weight:900;color:var(--t);margin-bottom:var(--sp-3)}
.narrative p{font-size:var(--fs-base);line-height:1.9;margin-bottom:var(--sp-4)}
.narrative strong{color:var(--p)}
.narrative blockquote{border-left:4px solid var(--accent,var(--p));padding:14px 20px;background:var(--p10);font-size:var(--fs-md);font-weight:700;color:var(--t);margin:18px 0;border-radius:0 8px 8px 0;line-height:1.7}
.narrative h3{font-size:var(--fs-lg);font-weight:900;color:var(--t);margin:28px 0 10px;padding-left:12px;border-left:5px solid var(--accent,var(--p));line-height:1.35}
.narrative h4{font-size:var(--fs-md);font-weight:900;color:var(--accent,var(--p));margin:18px 0 6px}
.narrative ul{margin:8px 0 16px;padding:0;list-style:none}
.narrative li{font-size:var(--fs-sm);line-height:1.8;padding-left:20px;position:relative;margin-bottom:var(--sp-1);color:var(--t)}
.narrative li::before{content:"";position:absolute;left:3px;top:12px;width:6px;height:6px;border-radius:50%;background:var(--accent,var(--p))}
.narrative hr{border:none;border-top:1px solid var(--bd);margin:22px 0}
.narrative .ctable{width:100%;border-collapse:collapse;margin:12px 0 18px;font-size:var(--fs-xs)}
.narrative .ctable th{background:var(--p10);text-align:left;padding:8px 10px;font-weight:900;border-bottom:2px solid var(--accent,var(--p));white-space:nowrap}
.narrative .ctable td{padding:7px 10px;border-bottom:1px solid var(--bd);vertical-align:top;line-height:1.6}

/* ===== 個案可組合區塊（_build_cases.py block 架構）===== */
.cblock{margin-bottom:var(--sp-8)}
.cblock .bh{font-size:var(--fs-lg);font-weight:900;color:var(--t);margin-bottom:var(--sp-3);padding-left:12px;border-left:5px solid var(--accent,var(--p));line-height:1.35}
/* 引言 */
.cblock .bq{border-left:4px solid var(--accent,var(--p));background:var(--p10);padding:18px 22px;font-size:var(--fs-md);font-weight:700;color:var(--t);border-radius:0 8px 8px 0;line-height:1.75}
.cblock .bq cite{display:block;font-size:var(--fs-xs);color:var(--tm);font-weight:500;font-style:normal;margin-top:var(--sp-2)}
/* 時間軸（shared；.ic-tl 為議題/個案頁薄 alias）*/
.timeline,.ic-tl{position:relative;padding-left:26px;margin-top:var(--sp-1)}
.timeline::before,.ic-tl::before{content:"";position:absolute;left:7px;top:6px;bottom:6px;width:2px;background:var(--bd)}
.tl-item,.ic-tl-item{position:relative;padding:0 0 16px}
.tl-item::before,.ic-tl-item::before{content:"";position:absolute;left:-23px;top:5px;width:12px;height:12px;border-radius:50%;background:var(--accent,var(--p));border:3px solid #fff;box-shadow:0 0 0 2px var(--accent,var(--p))}
.tl-date,.ic-tl-date{font-size:var(--fs-xs);font-weight:900;color:var(--accent,var(--p));margin-bottom:var(--sp-1)}
.tl-text,.ic-tl-text{font-size:var(--fs-sm);line-height:1.65;color:var(--t)}
/* 步驟/機制（shared；.ic-step 為個案頁薄 alias）*/
.steps,.ic-steps{display:flex;flex-direction:column;gap:var(--sp-2)}
.step-item,.ic-step{display:flex;gap:var(--sp-3);background:#fff;border:1px solid var(--bd);border-left:4px solid var(--accent,var(--p));border-radius:var(--r-md);padding:16px 18px}
.step-n,.ic-step>.no{flex-shrink:0;width:32px;height:32px;border-radius:50%;background:var(--accent,var(--p));color:#fff;display:flex;align-items:center;justify-content:center;font-weight:900}
.step-t,.ic-step .st{font-weight:900;font-size:var(--fs-base);margin-bottom:var(--sp-1)}
.step-d,.ic-step .sd{font-size:var(--fs-sm);color:var(--tm);line-height:1.7}
/* 表格（shared；.ic-table 為個案頁薄 alias）*/
.tscroll,.ic-tscroll{overflow-x:auto}
.ctable,.ic-table{width:100%;border-collapse:collapse;margin:4px 0;font-size:var(--fs-xs)}
.ctable th,.ic-table th{background:var(--p10);text-align:left;padding:8px 10px;font-weight:900;border-bottom:2px solid var(--accent,var(--p));white-space:nowrap}
.ctable td,.ic-table td{padding:7px 10px;border-bottom:1px solid var(--bd);vertical-align:top;line-height:1.6}
.tnote,.ic-tnote{font-size:var(--fs-xs);color:var(--tm);margin-top:var(--sp-1);line-height:1.6}
/* 司法紀錄 */
.judicial{display:flex;flex-direction:column;gap:var(--sp-2)}
.jrec{background:#fff;border:1px solid var(--bd);border-radius:var(--r-sm);padding:12px 15px}
.jrec .jno{font-size:var(--fs-xs);color:var(--tm);font-family:ui-monospace,monospace}
.jrec .jt{font-weight:900;font-size:var(--fs-sm);margin:2px 0}
.jrec .jmeta{font-size:var(--fs-xs);color:var(--tm)}
.jrec .jr{font-size:var(--fs-sm);color:var(--t);line-height:1.65;margin-top:var(--sp-1)}
.jrec .jstatus{display:inline-block;font-size:var(--fs-xs);font-weight:900;padding:1px 9px;border-radius:var(--r-xs);margin-top:var(--sp-2);background:var(--y);color:var(--t)}
/* 結論/通案（揭露結尾，醒目框）*/
.concl{background:linear-gradient(135deg,var(--p10),#fff);border:2px solid var(--accent,var(--p));border-radius:var(--r-md);padding:22px 24px}
.concl-tag{display:inline-block;font-size:var(--fs-xs);font-weight:900;letter-spacing:2px;color:#fff;background:var(--accent,var(--p));padding:2px 11px;border-radius:var(--r-pill);margin-bottom:var(--sp-3)}
.concl .bh{border-left:none;padding-left:0;margin-bottom:var(--sp-2);color:var(--accent,var(--p))}
.concl p{font-size:var(--fs-base);line-height:1.85;color:var(--t);margin-bottom:var(--sp-2)}
.concl p:last-child{margin-bottom:0}
.concl strong{color:var(--accent,var(--p))}
.positions{list-style:none;counter-reset:po}
.positions li{counter-increment:po;padding:14px 16px 14px 58px;background:#fff;border:1px solid var(--bd);border-radius:var(--r-sm);margin-bottom:var(--sp-2);position:relative;font-size:var(--fs-sm);line-height:1.65}
.positions li::before{content:counter(po);position:absolute;left:14px;top:12px;width:30px;height:30px;background:var(--accent,var(--p));color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:900;font-size:var(--fs-base)}
.case-act{background:#fff;border:1px solid var(--bd);border-radius:var(--r-sm);padding:14px 16px;margin-bottom:var(--sp-2);display:flex;justify-content:space-between;gap:var(--sp-3);align-items:center}
.case-act .ad{font-size:var(--fs-xs);color:var(--tm)}
.case-act .at{font-weight:700;font-size:var(--fs-sm);margin-top:var(--sp-1)}
.case-act a{font-size:var(--fs-xs);color:var(--p);text-decoration:none;border-bottom:1px solid var(--p);white-space:nowrap;flex-shrink:0}
.case-cands{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-3)}
@media(max-width:560px){.case-cands{grid-template-columns:1fr 1fr}}
.case-cands .cm{background:#fff;border:1px solid var(--bd);border-radius:var(--r-sm);padding:var(--sp-3);text-decoration:none;color:inherit;text-align:center;transition:all .15s}
.case-cands .cm:hover{border-color:var(--p);transform:translateY(-2px);box-shadow:0 6px 14px rgba(101,73,148,.1)}
.case-cands .cm .a{width:48px;height:48px;border-radius:50%;margin:0 auto 8px;display:flex;align-items:center;justify-content:center;font-weight:900;font-size:var(--fs-m);overflow:hidden}
.case-cands .cm .n{font-weight:900;font-size:var(--fs-sm)}
.case-cands .cm .m{font-size:var(--fs-xs);color:var(--tm);margin-top:var(--sp-1)}
.case-sources{background:#fff;border:1px solid var(--bd);border-radius:var(--r-sm);padding:14px 18px;font-size:var(--fs-sm)}
.case-sources summary{font-weight:900;cursor:pointer;color:var(--t)}
.case-sources .b{margin-top:var(--sp-3);padding-top:12px;border-top:1px solid var(--bd);line-height:1.8;color:var(--tm)}
.prov-badge{display:inline-block;font-size:var(--fs-xs);font-weight:900;padding:2px 8px;border-radius:var(--r-xs);margin-left:var(--sp-2);letter-spacing:1px}
.prov-badge.draft{background:var(--y);color:var(--t)}
.prov-badge.reviewed{background:var(--youth);color:#fff}

/* ===== 議題類別頁的個案卡（_build_issues.py）；--accent 由 body 設議題色 ===== */
.icase-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-4)}
@media(max-width:768px){.icase-grid{grid-template-columns:1fr 1fr}}
@media(max-width:480px){.icase-grid{grid-template-columns:1fr}}
.icard{background:#fff;border:1px solid var(--bd);border-radius:var(--r-md);padding:var(--sp-4);text-decoration:none;color:inherit;display:block;border-top:4px solid var(--accent,var(--p));transition:transform .15s,box-shadow .15s,border-color .15s}
.icard:hover{transform:translateY(-3px);box-shadow:0 8px 20px rgba(101,73,148,.12)}
.icard .cnum{font-size:38px;font-weight:900;color:var(--accent,var(--p));line-height:1;margin:6px 0;letter-spacing:-1px}
.icard .cnum .u{font-size:var(--fs-base);margin-left:var(--sp-1)}
.icard .ctitle{font-size:var(--fs-sm);font-weight:700;line-height:1.45;color:var(--t)}
.icard .cdate{font-size:var(--fs-xs);color:var(--tm);margin-top:var(--sp-2)}
.icat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-3);margin-bottom:var(--sp-12)}
@media(max-width:768px){.icat-grid{grid-template-columns:repeat(2,1fr)}}
.icat{display:block;background:#fff;border:1px solid var(--bd);border-radius:var(--r-md);padding:22px 18px;text-decoration:none;color:inherit;border-top:5px solid var(--accent,var(--p));transition:transform .15s,box-shadow .15s}
.icat:hover{transform:translateY(-3px);box-shadow:0 8px 20px rgba(101,73,148,.12)}
.icat .cn{font-size:var(--fs-m);font-weight:900;color:var(--accent,var(--p))}
.icat .cc{font-size:var(--fs-sm);color:var(--tm);margin-top:var(--sp-1);font-weight:700}

/* ===== Q4 答題卡（候選人頁：為什麼不加入大黨，編輯器 q4 欄位） ===== */
.q4sec{margin:0 0 40px}
.q4card{background:#fff;border:2px solid var(--p);border-radius:16px;padding:20px 22px;box-shadow:0 3px 0 var(--p)}
.q4q{display:flex;align-items:center;gap:10px;font-weight:900;color:var(--tm);font-size:var(--fs-base);margin-bottom:10px}
.q4a{display:flex;gap:10px;font-size:var(--fs-base);font-weight:700;line-height:1.75}
.q4a p{margin:1px 0 0}
.q4tag{flex:0 0 auto;width:26px;height:26px;border-radius:8px;background:var(--p10);color:var(--p);display:inline-flex;align-items:center;justify-content:center;font-weight:900;font-size:var(--fs-xs)}
.q4tag.a{background:var(--y);color:var(--t)}
/* 監督實績的查證來源徽章 */
.trec-src{display:inline-block;margin-top:8px;font-size:var(--fs-xs);font-weight:700;color:var(--p);text-decoration:none;border-bottom:1px dashed var(--p)}
a.trec-src:hover{border-bottom-style:solid}

/* 候選人頁「我關心的議題」：範疇列 → 個別議題連結（drow，2026-06-12） */
.drow{background:var(--p10);border:1px solid var(--p20);border-radius:var(--r-md);padding:14px 18px;display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap}
.drow .it{font-size:var(--fs-base);font-weight:900;color:var(--p)}
.drow .it::before{content:"＃";opacity:.7}
.drow .dlinks{display:flex;gap:8px;flex-wrap:wrap}
.dlink{font-size:var(--fs-xs);font-weight:700;color:var(--p);text-decoration:none;border:1px solid var(--p20);background:#fff;border-radius:999px;padding:4px 12px;cursor:pointer}
a.dlink:hover{background:var(--p);color:#fff}
.dnone{font-size:var(--fs-xs);color:var(--tm)}

/* ===== shared 臉牆 tile（縣市在地夥伴 / 議題關心者共用）=====
   產生器（_build_counties.py／_build_issues.py）輸出 .face-wall>.face-tile，
   每張 tile 以 inline style="--tint:黨色soft" 上淡黨色底；有照片＝<img> 出血，無照片＝退字圈 .ph。 */
.face-wall{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:20px 14px;align-items:start}
.face-tile{display:block;text-align:center;text-decoration:none;color:inherit;transition:transform .15s}
.face-tile:hover{transform:translateY(-4px)}
.face-tile .frame{position:relative;aspect-ratio:1/1;border-radius:var(--r-lg);overflow:hidden;background:linear-gradient(180deg,#fbfaf8 25%,var(--tint,var(--p20)));box-shadow:0 6px 14px rgba(43,31,69,.16);border:1px solid var(--bd)}
.face-tile .frame img{position:absolute;width:132%;max-width:none;height:auto;left:-16%;top:-19%}
.face-tile .frame .ph{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:44px;font-weight:900;color:var(--p)}
.face-tile .n{font-size:var(--fs-base);font-weight:900;color:var(--ink);margin-top:9px;line-height:1.3}
.face-tile .m{font-size:var(--fs-xs);color:var(--tm);font-weight:700;margin-top:2px;line-height:1.4}
@media(max-width:640px){.face-wall{grid-template-columns:repeat(3,1fr);gap:14px 10px}}

/* ===== shared 資料型指標卡底盤（.cy-ix／.cy-bcard 共用白卡表面；縣市各 variant 靠 body.cyv-* 較高特異度覆寫底色）===== */
.metric-card,.cy-ix,.cy-bcard{background:#fff;border:1px solid var(--bd);border-radius:var(--r-lg);box-shadow:var(--shadow-card)}

/* footer 四黨黨徽列 */
/* 四黨 logo 統一 chip：等高圓角框＋淺底，解決寬度不一(小歐盟橫式字標)與時力黃 logo 撞白底低對比 */
.ftbottom .plogos{display:flex;gap:12px;align-items:stretch;justify-content:center;flex-wrap:wrap;margin-bottom:14px}
.ftbottom .plogos a{display:flex;align-items:center;justify-content:center;height:46px;padding:0 16px;background:#fff;border:1px solid var(--bd);border-radius:var(--r-sm);transition:transform .15s,box-shadow .15s}
.ftbottom .plogos a:hover{transform:translateY(-1px);box-shadow:var(--shadow-card-sm)}
.ftbottom .plogos img{height:26px;width:auto;max-width:112px;object-fit:contain;display:block}

/* scroll-trigger（進視窗才播） */
.pre-anim{opacity:0;transform:translateY(18px)}
.anim-in{opacity:1;transform:none;transition:opacity .5s ease,transform .5s ease}

/* nav 品牌一句話（桌機） */
.brand .brand-tag{font-size:var(--fs-xs);font-weight:700;color:var(--tm);letter-spacing:2px;margin-left:12px;padding-left:14px;border-left:1px solid var(--bd)}
@media(max-width:900px){.brand .brand-tag{display:none}}
