
/* ===================================================================
   E-INK 電子戰報：單色、紋理編碼政黨、硬線條、無圓角、無陰影
   =================================================================== */
:root{
  color-scheme:light;
  --paper:#f4f2ec; --paper-2:#faf9f5; --well:#e8e6df; --well-2:#dedbd2;
  --ink:#151515; --ink-2:#3c3c3a; --ink-3:#7b7a74; --rule:#1a1a1a; --rule-2:#bcbab2;
  --accent:#b3261e;
  /* 彩色電子紙（Kaleido 式低飽和）：政黨色 + 淡底色；狀態色 */
  --c-KMT:#1f4f9a; --t-KMT:#e1e9f6; --c-DPP:#24773a; --t-DPP:#e0efe3; --c-TPP:#0f7f86; --t-TPP:#dbeff0;
  --c-IND:#6e6250; --t-IND:#ebe6dd; --c-NPP:#a77d00; --t-NPP:#f4ead0;
  --good:#2a7a3b; --info:#2558a3; --warn:#a87300; --serious:#c2561a; --crit:#b3261e; --violet:#6a46a8; --on-c:#ffffff;
  --serif:"Noto Serif TC","PingFang TC","Microsoft JhengHei",serif;
  --sans:"Noto Sans TC","PingFang TC","Microsoft JhengHei",sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,Menlo,Consolas,monospace;
  --pix:"VT323",var(--mono);
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --paper:#121211; --paper-2:#1a1a18; --well:#242421; --well-2:#2e2e2a;
  --ink:#ebe9e2; --ink-2:#c9c7bf; --ink-3:#8c8b84; --rule:#e6e4dc; --rule-2:#4a4a45;
  --accent:#e0574d;
  --c-KMT:#7ea7e8; --t-KMT:#1d2738; --c-DPP:#6cc581; --t-DPP:#1b2b1f; --c-TPP:#4fc4ca; --t-TPP:#162c2e;
  --c-IND:#c2b39a; --t-IND:#29251f; --c-NPP:#e3bd4f; --t-NPP:#302914;
  --good:#6cc581; --info:#7ea7e8; --warn:#e3b23f; --serious:#ef8b4f; --crit:#e0574d; --violet:#a990e6; --on-c:#121211;
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
*{box-sizing:border-box}
*{scrollbar-width:thin;scrollbar-color:var(--ink-3) transparent}
*::-webkit-scrollbar{height:6px;width:6px}*::-webkit-scrollbar-thumb{background:var(--ink-3)}*::-webkit-scrollbar-track{background:transparent}
html,body{margin:0}
body{
  font-family:var(--sans);color:var(--ink);background:var(--paper);font-size:14.5px;line-height:1.55;
  background-image:radial-gradient(color-mix(in oklab,var(--ink) 7%,transparent) .6px,transparent .7px);background-size:3px 3px;
}
body:after{ /* 紙張顆粒 */
  content:"";pointer-events:none;position:fixed;inset:0;z-index:999;opacity:.045;mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='200' height='200' filter='url(%23n)'/></svg>");
}
:root[data-theme="dark"] body:after{mix-blend-mode:screen;opacity:.06}
a{color:inherit}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
.wrap{max-width:1380px;margin:0 auto;padding:0 18px}
.mono{font-family:var(--mono)}
.pix{font-family:var(--pix)}
.muted{color:var(--ink-3)}
.small{font-size:12.5px}
.spacer{flex:1}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
hr.rule{border:0;border-top:1.5px solid var(--rule);margin:14px 0}
hr.rule.double{border-top:4px double var(--rule)}
hr.rule.thin{border-top:1px solid var(--rule-2)}

/* ---------- 政黨紋理（CSS 版，用於 chip / bar） ---------- */
.pt{color:var(--ink)}
.pt-KMT{--pc:var(--c-KMT);--pt:var(--t-KMT)} .pt-DPP{--pc:var(--c-DPP);--pt:var(--t-DPP)} .pt-TPP{--pc:var(--c-TPP);--pt:var(--t-TPP)} .pt-IND{--pc:var(--c-IND);--pt:var(--t-IND)} .pt-NPP{--pc:var(--c-NPP);--pt:var(--t-NPP)}
.pt[class*="pt-"]{color:var(--pc,var(--ink));background-color:var(--pt,transparent)!important}
.pc-KMT{color:var(--c-KMT)} .pc-DPP{color:var(--c-DPP)} .pc-TPP{color:var(--c-TPP)} .pc-IND{color:var(--c-IND)} .pc-NPP{color:var(--c-NPP)}
.pt-KMT{background-image:repeating-linear-gradient(45deg,currentColor 0 1.6px,transparent 1.6px 6px)}
.pt-DPP{background-image:radial-gradient(currentColor 1.35px,transparent 1.45px);background-size:6px 6px}
.pt-TPP{background-image:repeating-linear-gradient(45deg,currentColor 0 1.1px,transparent 1.1px 6px),repeating-linear-gradient(-45deg,currentColor 0 1.1px,transparent 1.1px 6px)}
.pt-IND{background-image:repeating-linear-gradient(0deg,currentColor 0 1.6px,transparent 1.6px 6px)}
.pt-NPP{background-image:repeating-linear-gradient(90deg,currentColor 0 1.6px,transparent 1.6px 6px)}
.pt-solid{background:currentColor}
.sw{display:inline-block;width:14px;height:14px;border:1.2px solid var(--pc,var(--ink));vertical-align:-2px;margin-right:5px;background-color:var(--paper-2)}
.chip{display:inline-flex;align-items:center;gap:4px;border:1.2px solid var(--ink);padding:1px 7px;font-size:11.5px;font-weight:500;white-space:nowrap;background:var(--paper-2);line-height:1.5}
.chip.lite{border-color:var(--rule-2);color:var(--ink-2)}
.chip.inv{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.chip.acc{background:var(--accent);color:#fff;border-color:var(--accent)}
.chip.mono{font-family:var(--mono);font-size:10.5px;letter-spacing:.05em}
.stamp{display:inline-block;border:2px solid var(--accent);color:var(--accent);font-family:var(--serif);font-weight:900;padding:0 6px;transform:rotate(-3deg);font-size:12px;letter-spacing:.1em}

/* ---------- 報頭 ---------- */
header.mast{border-bottom:1.5px solid var(--rule);background:var(--paper);position:relative;z-index:5}
.mast-top{display:flex;gap:10px;align-items:center;padding:8px 0 6px;font-family:var(--mono);font-size:11.5px;color:var(--ink-2);border-bottom:1px solid var(--rule-2);flex-wrap:wrap}
.mast-top .cursor{display:inline-block;width:7px;height:12px;background:var(--ink);vertical-align:-2px;animation:blink 1.1s steps(2) infinite}
@keyframes blink{to{opacity:0}}
.btn{border:1.2px solid var(--ink);background:var(--paper-2);padding:3px 10px;font-family:var(--mono);font-size:11.5px}
.btn:hover{background:var(--ink);color:var(--paper)}
.btn.on{background:var(--ink);color:var(--paper)}
.title-row{display:flex;align-items:flex-end;gap:18px;padding:10px 0 4px;flex-wrap:wrap}
h1.title{font-family:var(--serif);font-weight:900;font-size:clamp(30px,5.2vw,58px);margin:0;letter-spacing:.06em;line-height:1.05}
h1.title .sep{opacity:.35;margin:0 .15em}
.countdown{font-family:var(--pix);font-size:clamp(22px,3vw,34px);line-height:1;color:var(--ink);display:flex;align-items:baseline;gap:8px;border:1.5px solid var(--ink);padding:6px 12px;background:var(--paper-2)}
.countdown b{font-size:1.9em;color:var(--accent);font-weight:400;min-width:1.4em;text-align:right}
.countdown small{font-size:.65em;color:var(--ink-3)}
.mast-sub{display:flex;gap:14px;align-items:center;font-size:13px;color:var(--ink-2);padding:2px 0 8px;border-bottom:4px double var(--rule);flex-wrap:wrap}
.mast-sub .brief{font-family:var(--serif);font-weight:700;letter-spacing:.08em}
.ticker{display:flex;align-items:stretch;border-bottom:1px solid var(--rule);font-family:var(--pix);font-size:21px;line-height:1;overflow:hidden;background:var(--well)}
.ticker .lbl{background:var(--ink);color:var(--paper);padding:6px 12px;white-space:nowrap;display:flex;align-items:center}
.ticker .track{flex:1;overflow:hidden;position:relative}
.ticker .run{display:inline-flex;gap:0;white-space:nowrap;padding:6px 0;animation:marquee var(--dur,80s) linear infinite}
.ticker .track:hover .run{animation-play-state:paused}
.ticker .run>span{padding:0 22px;border-right:1px solid var(--rule-2)}
.ticker .run>span b{color:var(--accent);font-weight:400}
.ticker .run>span{display:inline-flex;align-items:center;gap:6px}
.tk{display:inline-block;padding:1px 6px 0;font-family:var(--sans);font-size:12.5px;line-height:1.35;color:var(--on-c);background:var(--ink-3);letter-spacing:.05em;font-style:normal}
.tk-sched{background:var(--warn)} .tk-law{background:var(--violet)} .tk-court{background:var(--crit)} .tk-poll{background:var(--info)} .tk-fact{background:var(--serious)} .tk-mkt{background:var(--c-TPP)}
.tk-KMT{background:var(--c-KMT)} .tk-DPP{background:var(--c-DPP)} .tk-TPP{background:var(--c-TPP)} .tk-IND{background:var(--c-IND)} .tk-NPP{background:var(--c-NPP)}
.ticker .run>span b.tk-up{color:var(--good)} .ticker .run>span b.tk-down{color:var(--crit)}
@keyframes marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.regionbar{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));border-bottom:1.5px solid var(--rule)}
.areabar{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-bottom:1px solid var(--rule-2)}
.areabar button{border:0;border-right:1px solid var(--rule-2);background:var(--paper);padding:5px 4px;text-align:center;font-family:var(--serif);font-weight:700;font-size:13px;letter-spacing:.08em;color:var(--ink-2);white-space:nowrap}
.areabar button.on{background:var(--well);color:var(--ink);box-shadow:inset 0 -3px 0 var(--accent)}
.areabar button .n{font-family:var(--mono);font-size:10px;color:var(--ink-3);margin-left:4px;font-weight:400}
.tile.incb{border:2px solid var(--pc);background:var(--pt)}
.regionbar .rg{border-right:1px solid var(--rule-2);padding:8px 10px;cursor:pointer;display:flex;flex-direction:column;gap:3px;min-width:0;position:relative;background:var(--paper)}
.regionbar .rg:last-child{border-right:0}
.regionbar .rg:hover{background:var(--well)}
.regionbar .rg.on{background:var(--ink);color:var(--paper)}
.regionbar .rg.on .muted{color:color-mix(in oklab,var(--paper) 70%,transparent)}
.regionbar .rg .nm{font-family:var(--serif);font-weight:900;font-size:17px;letter-spacing:.06em;display:flex;justify-content:space-between;align-items:baseline}
.regionbar .rg .nm small{font-family:var(--mono);font-size:10px;font-weight:400;opacity:.7}
.regionbar .rg .cs{font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.regionbar .rg .gap{font-family:var(--mono);font-size:11px}
.regionbar .rg.na{opacity:.45;cursor:default}
.regionbar .rg .spark{height:22px;width:100%}
.regionbar .rg .mkt{font-family:var(--mono);font-size:10.5px;display:flex;gap:4px;align-items:center;white-space:nowrap;overflow:hidden}
.regionbar .rg.on .mkt .tk{outline:1px solid var(--paper)}
@media (max-width:900px){.regionbar{grid-template-columns:repeat(3,1fr)}.regionbar .rg:nth-child(3){border-right:0}}
nav.tabs{display:grid;grid-template-columns:repeat(var(--n,12),minmax(0,1fr));border-bottom:1.5px solid var(--rule);border-left:1px solid var(--rule-2)}
nav.tabs button.og{color:var(--ink-3);background:var(--paper-2)}
nav.tabs button.gend{border-right:1.5px solid var(--rule)}
nav.tabs button{background:none;border:0;border-right:1px solid var(--rule-2);padding:9px 4px;text-align:center;overflow:hidden;text-overflow:clip;font-family:var(--serif);font-weight:700;font-size:14.5px;letter-spacing:.08em;color:var(--ink-2);white-space:nowrap}
nav.tabs button .n{font-family:var(--mono);font-size:10px;color:var(--ink-3);margin-left:3px;font-weight:400;vertical-align:super;letter-spacing:0}
nav.tabs button.on{background:var(--ink);color:var(--paper)}
nav.tabs button.on .n{color:var(--paper)}
@media (max-width:960px){nav.tabs{grid-template-columns:repeat(var(--m,5),minmax(0,1fr))}nav.tabs button.og{display:none}}
@media (max-width:620px){nav.tabs button{padding:8px 2px;font-size:13.5px;letter-spacing:.02em}nav.tabs button .n{display:none}}
@media (max-width:440px){nav.tabs button{padding:8px 0;font-size:12.5px;letter-spacing:0}}
.searchrow{display:flex;gap:8px;align-items:center;padding:6px 0}
.search{display:flex;align-items:center;gap:8px;border:1.2px solid var(--ink);padding:4px 10px;flex:1;background:var(--paper-2);font-family:var(--mono);font-size:12.5px}
.search input{border:0;background:transparent;outline:0;width:100%;font-family:var(--mono)}

/* ---------- 版面 ---------- */
main{padding:18px 0 90px}
section.view{display:none}
section.view.on{display:block}
section.view.calm,section.view.calm *{animation:none!important}
@keyframes settle{from{transform:translateY(6px)}to{transform:none}}
.grid{display:grid;gap:16px}
.g2{grid-template-columns:repeat(auto-fit,minmax(360px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.g4{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
.polls-grid{grid-template-columns:minmax(0,2fr) minmax(300px,1fr)}
/* 版面：避免短區塊被拉長造成大片留白 */
.grid.mas{grid-auto-rows:4px;row-gap:0}
.grid.mas>*{align-self:start}
.ov-grid>*,.polls-grid>*{align-self:start}
@media (min-width:1001px){.ov-grid>.box:first-child{position:sticky;top:10px}}
.ov-grid{grid-template-columns:minmax(260px,1fr) minmax(0,2.2fr)}
@media (max-width:1000px){.polls-grid,.ov-grid{grid-template-columns:1fr}}
.box{border:1.5px solid var(--rule);background:var(--paper-2);padding:14px 16px;position:relative}
.box.well{background:var(--well)}
.box h3{font-family:var(--serif);font-size:16px;margin:-14px -16px 12px;padding:7px 16px;border-bottom:1.5px solid var(--rule);display:flex;justify-content:space-between;align-items:baseline;gap:10px;letter-spacing:.06em;background:var(--paper)}
.box h3 .sub{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);font-weight:400;letter-spacing:0}
.sec{font-family:var(--serif);font-size:22px;margin:4px 0 12px;display:flex;align-items:baseline;gap:12px;letter-spacing:.08em;border-bottom:4px double var(--rule);padding-bottom:4px;flex-wrap:wrap}
.sec>.sub{flex:1 1 240px;min-width:0}
.sec .sub{font-family:var(--mono);font-size:11px;color:var(--ink-3);font-weight:400;letter-spacing:0}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));border:1.5px solid var(--rule);background:var(--paper-2);margin-bottom:16px}
.kpi{padding:10px 14px;border-right:1px solid var(--rule-2);display:flex;flex-direction:column}
.kpi:last-child{border-right:0}
.kpi .v{font-family:var(--pix);font-size:40px;line-height:1}
.kpi .l{font-size:12px;color:var(--ink-2)}
.kpi .d{font-family:var(--mono);font-size:10.5px;color:var(--ink-3)}
.list{display:flex;flex-direction:column;gap:9px}
.item{border:1px solid var(--rule-2);padding:9px 11px;background:var(--paper-2)}
.item .t{font-weight:700;display:flex;gap:7px;align-items:center;flex-wrap:wrap}
.item .d{font-size:13.5px;color:var(--ink-2);margin-top:3px}
.src{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);margin-top:6px;display:flex;gap:9px;flex-wrap:wrap}
.src a{color:var(--ink-3);text-decoration:none;border-bottom:1px dotted var(--ink-3)}
.src a:hover{color:var(--accent);border-color:var(--accent)}
.empty{color:var(--ink-3);font-family:var(--mono);font-size:12px;padding:14px;text-align:center;border:1px dashed var(--rule-2)}
.cols2{columns:2;column-gap:28px;column-rule:1px solid var(--rule-2)}
@media (max-width:800px){.cols2{columns:1}}
mark{background:none;border-bottom:2px solid var(--accent);color:inherit}
kbd{font-family:var(--mono);font-size:11px;border:1px solid var(--ink);padding:0 5px}
.tip{position:fixed;z-index:60;pointer-events:none;background:var(--ink);color:var(--paper);padding:6px 9px;font-family:var(--mono);font-size:11.5px;opacity:0;max-width:300px;white-space:pre-line;line-height:1.45}
.tip.on{opacity:1}
details.more summary{cursor:pointer;color:var(--ink-2);font-size:13px;margin-top:6px;font-family:var(--mono)}
textarea.note{width:100%;min-height:56px;border:1px dashed var(--ink-3);background:transparent;padding:7px;resize:vertical;font-size:13px}
.notehint{font-family:var(--mono);font-size:10.5px;color:var(--ink-3)}

/* ---------- 標記 ---------- */
.v-true{background:var(--good);color:var(--on-c);border-color:var(--good)} .v-partly{color:var(--serious);border-color:var(--serious)} .v-false{background:var(--crit);color:var(--on-c);border-color:var(--crit)} .v-context{border-style:dashed;color:var(--warn);border-color:var(--warn)} .v-pending{color:var(--ink-3);border-color:var(--rule-2)}
.s-done{background:var(--good);color:var(--on-c);border-color:var(--good)} .s-ongoing{color:var(--info);border-color:var(--info)} .s-stalled{border-style:dashed;color:var(--warn);border-color:var(--warn)} .s-unfulfilled{background:var(--crit);color:var(--on-c);border-color:var(--crit)} .s-changed{color:var(--serious);border-color:var(--serious);border-style:dashed}
.st{display:inline-block;padding:0 6px;border:1.2px solid var(--ink);font-size:12px;font-weight:600;margin-bottom:3px}
.st-support{background:var(--ink);color:var(--paper)} .st-oppose{color:var(--accent);border-color:var(--accent)} .st-mixed{border-style:dashed} .st-unknown{color:var(--ink-3);border-color:var(--rule-2)}
.grade{display:inline-grid;place-items:center;width:20px;height:20px;border:1.5px solid var(--ink);font-family:var(--mono);font-weight:600;font-size:12px}
.grade.A{background:var(--good);color:var(--on-c);border-color:var(--good)} .grade.B{color:var(--warn);border-color:var(--warn)} .grade.C{border-style:dashed;color:var(--crit);border-color:var(--crit)}
.stc-done,.legend i.stc-done{background:var(--good)} .stc-ongoing,.legend i.stc-ongoing{background:var(--info)} .stc-stalled,.legend i.stc-stalled{background:var(--warn)} .stc-unfulfilled,.legend i.stc-unfulfilled{background:var(--crit)} .stc-changed,.legend i.stc-changed{background-color:var(--paper-2);background-image:repeating-linear-gradient(45deg,var(--serious) 0 2px,transparent 2px 5px)}
.kpi .v.c-info{color:var(--info)} .kpi .v.c-violet{color:var(--violet)} .kpi .v.c-crit{color:var(--crit)} .kpi .v.c-good{color:var(--good)} .kpi .v.c-tpp{color:var(--c-TPP)}
.up{color:var(--good)} .down{color:var(--crit)}

/* ---------- 候選人 ---------- */
.cands{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px;margin-bottom:14px}
.cand{border:1.5px solid var(--rule);background:var(--paper-2);cursor:pointer;position:relative;overflow:hidden}
.cand .band{height:12px;border-bottom:1.5px solid var(--rule)}
.cand .bd{padding:10px 14px}
.cand .nm{font-family:var(--serif);font-size:26px;font-weight:900;letter-spacing:.06em;display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.cand .role{font-size:12.5px;color:var(--ink-2)}
.cand .bio{font-size:12.5px;color:var(--ink-2);margin-top:6px}
.cand.sel{outline:3px solid var(--ink);outline-offset:-3px}
.cand .stat{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);margin-top:8px;display:flex;gap:10px;flex-wrap:wrap}
.subtabs{display:flex;flex-wrap:wrap;border:1.2px solid var(--ink);margin:6px 0 14px;width:max-content;max-width:100%}
.subtabs button{border:0;border-right:1px solid var(--rule-2);background:var(--paper-2);padding:5px 13px;font-size:13px}
.subtabs button:last-child{border-right:0}
.subtabs button.on{background:var(--ink);color:var(--paper)}
table.mx{width:100%;border-collapse:collapse;font-size:13px}
table.mx th,table.mx td{border-bottom:1px solid var(--rule-2);padding:7px 8px;vertical-align:top;text-align:left}
table.mx th{font-family:var(--serif);font-size:12.5px;background:var(--well);position:sticky;top:0;letter-spacing:.05em}
table.mx td.topic{font-weight:700;white-space:nowrap;width:110px}
.tbl{overflow:auto;max-height:72vh;border:1.5px solid var(--rule)}
.stackbar{display:flex;height:16px;border:1.2px solid var(--ink);background:var(--paper-2);margin:8px 0 6px}
.stackbar i{display:block;height:100%;border-right:1px solid var(--paper-2);transform-origin:left;animation:grow .8s ease backwards;animation-delay:calc(var(--i)*.08s)}
@keyframes grow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.legend{display:flex;gap:8px 12px;flex-wrap:wrap;font-size:11.5px;color:var(--ink-2);font-family:var(--mono)}
.legend span{white-space:nowrap}
.legend i{width:12px;height:12px;border:1px solid var(--ink);display:inline-block;margin-right:4px;vertical-align:-2px;background-color:var(--paper-2)}
.tl{position:relative;padding-left:20px}
.tl.cols{columns:3 280px;column-gap:28px;padding-left:0}.tl.cols:before{display:none}.tl.cols .ev{break-inside:avoid;border-left:1.5px solid var(--ink);padding-left:12px}.tl.cols .ev:before{left:-5.5px;width:8px;height:8px}
.tl:before{content:"";position:absolute;left:5px;top:4px;bottom:4px;width:1.5px;background:var(--ink)}
.tl .ev{position:relative;margin-bottom:11px}
.tl .ev:before{content:"";position:absolute;left:-19px;top:6px;width:9px;height:9px;background:var(--paper-2);border:1.5px solid var(--ink)}
.tl .ev.fut:before{background:var(--accent);border-color:var(--accent)}
.tl .ev.now:before{background:var(--ink)}
.tl .ev .dt{font-family:var(--mono);font-size:10.5px;color:var(--ink-3)}
.tl .ev .tt{font-weight:600}
.tl .ev .dd{font-size:13px;color:var(--ink-2)}

/* ---------- 圖表 ---------- */
.chart{width:100%;height:auto;display:block;font-family:var(--mono);font-size:11px;color:var(--ink)}
@media (max-width:700px){.box[style*="overflow:auto"]>table,.tbl>table{min-width:600px}svg.chart{min-width:620px}.box:has(svg.chart){overflow-x:auto;max-width:100%}}
.chart .grid line{stroke:var(--rule-2);stroke-dasharray:2 3}
.chart .ax text,.chart text.ax{fill:var(--ink-3)}
.chart .ln{fill:none;stroke:currentColor;stroke-width:2.2;stroke-linejoin:round;stroke-linecap:round}
.chart .ln.draw{stroke-dasharray:1;stroke-dashoffset:0;animation:draw 1.1s ease}
@keyframes draw{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
.chart .ln.c1{} .chart .ln.c2{stroke-dasharray:6 4} .chart .ln.c3{stroke-dasharray:1.5 3.5} .chart .ln.c4{stroke-dasharray:10 3 2 3}
.chart .ln.c2.draw,.chart .ln.c3.draw,.chart .ln.c4.draw{stroke-dasharray:1}
.chart .band{fill:currentColor;opacity:.14}
.chart .mk{stroke:currentColor;stroke-width:1.4;fill:var(--paper-2);cursor:crosshair}
.chart .mk.f{fill:currentColor}
.chart .refl{stroke:var(--ink-3);stroke-dasharray:4 3;stroke-width:1}
.chart .mk.out{stroke:var(--accent);stroke-width:2}
.chart .err{stroke:var(--ink-3);stroke-width:1}
.chart .lbl{fill:var(--ink);font-weight:600;font-family:var(--sans);font-size:12px}
.chart .today{stroke:var(--accent);stroke-width:1.2;stroke-dasharray:3 3}
.bars .b{display:grid;grid-template-columns:150px 1fr 64px;gap:8px;align-items:center;font-size:12.5px;margin:4px 0}
.bars .b .bar{height:13px;border:1.2px solid var(--ink);background-color:var(--paper-2);transform-origin:left;animation:grow .8s ease backwards;animation-delay:calc(var(--i)*.06s)}
.bars .b .v{font-family:var(--mono);font-size:11.5px;text-align:right;color:var(--ink-2)}
.hbar{display:grid;grid-template-columns:120px 1fr 48px;gap:8px;align-items:center;font-size:12.5px;margin:3px 0}
.waffle{display:grid;grid-template-columns:repeat(auto-fill,12px);gap:3px;justify-content:start}
.waffle i{width:12px;height:12px;border:1px solid var(--ink);background-color:var(--paper-2);animation:pop .5s ease backwards;animation-delay:calc(var(--i)*8ms)}
@keyframes pop{from{transform:scale(0)}to{transform:scale(1)}}
.w-false{background:var(--crit)!important;border-color:var(--crit)!important} .w-partly{background:var(--serious)!important;border-color:var(--serious)!important} .w-context{background-image:repeating-linear-gradient(45deg,var(--warn) 0 2px,transparent 2px 4px)!important;border-color:var(--warn)!important} .w-true{background:var(--good)!important;border-color:var(--good)!important} .w-pending{border-color:var(--rule-2)!important}
.stage{font-family:var(--mono);letter-spacing:2px;font-size:15px;line-height:1}
.stage .on{color:var(--ink)} .stage .off{color:var(--rule-2)}
.racebar{display:flex;height:20px;border:1.5px solid var(--ink);background-color:var(--paper-2);font-family:var(--mono);font-size:10.5px}
.racebar i{display:block;height:100%;position:relative;border-right:1.5px solid var(--ink);transform-origin:left;animation:grow .9s ease;background-color:var(--paper-2)}
.racebar i:last-child{border-right:0}
.racebar i span{position:absolute;left:4px;top:2px;background:var(--paper-2);padding:0 3px;line-height:1.3;border:1px solid var(--ink);white-space:nowrap}
.map{width:100%;max-width:520px;height:auto;display:block;font-family:var(--serif);font-weight:700}
.map path{stroke:var(--ink);stroke-width:1.5;cursor:pointer;transition:stroke-width .15s}
.hide-sm{}
@media (max-width:900px){.hide-sm{display:none!important}}
.map path:hover{stroke-width:3}
.map path.on{stroke-width:3.5}
.map text{fill:var(--ink);font-size:11px;pointer-events:none;letter-spacing:.05em}
.map text.sm{font-family:var(--mono);font-weight:400;font-size:9px;fill:var(--ink-2)}
.steps{width:100%;height:auto;display:block;font-family:var(--mono);font-size:10px}

/* ---------- 民調觀測 ---------- */
.pollctl{display:flex;gap:14px;flex-wrap:wrap;align-items:flex-start;border:1.5px solid var(--rule);padding:10px 14px;background:var(--well);margin-bottom:14px;font-size:12.5px}
.pollctl label{display:inline-flex;gap:5px;align-items:center;cursor:pointer}
.pollctl .grp{display:flex;flex-direction:column;gap:4px}
.pollctl .grp b{font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;color:var(--ink-3)}
.pollctl select{border:1.2px solid var(--ink);background:var(--paper-2);padding:2px 6px;font-family:var(--mono);font-size:12px}
table.polls{width:100%;border-collapse:collapse;font-size:12px;font-family:var(--mono)}
table.polls th,table.polls td{border-bottom:1px solid var(--rule-2);padding:5px 6px;text-align:left;vertical-align:top}
table.polls th{background:var(--well);font-weight:600;position:sticky;top:0}
table.polls td.n{text-align:right}
table.polls tr.ex{opacity:.45;text-decoration:line-through}
table.polls tr.out td:first-child:before{content:"⚠ ";color:var(--accent)}
.pollster{border:1.2px solid var(--rule);padding:10px 12px;background:var(--paper-2)}
.pollster h4{margin:0 0 4px;font-family:var(--serif);font-size:14.5px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.pollster .kv{font-size:12px;color:var(--ink-2)}
.pollster .kv b{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);letter-spacing:.05em;margin-right:4px}
table.tr{width:100%;border-collapse:collapse;font-family:var(--mono);font-size:11px;margin-top:6px}
table.tr td,table.tr th{border-bottom:1px solid var(--rule-2);padding:3px 5px;text-align:left}
.method{font-size:12.5px;color:var(--ink-2)}
.method li{margin-bottom:4px}

/* ---------- 議題 ---------- */
.filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px;align-items:center}
.fchip{border:1.2px solid var(--ink);background:var(--paper-2);padding:3px 11px;font-size:12.5px;font-family:var(--mono)}
.fchip.on{background:var(--ink);color:var(--paper)}
.filters select{border:1.2px solid var(--ink);background:var(--paper-2);padding:4px 8px;font-family:var(--mono);font-size:12px}
.issue{border-left:6px solid var(--ink)}
.issues-grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));grid-auto-rows:1fr}
.issue.mini{display:flex;flex-direction:column;gap:4px;cursor:pointer;min-height:190px}
.issue.mini:hover{background:var(--well)}
.issue.mini.open{outline:3px double var(--accent);outline-offset:-3px}
.issue.mini h4{font-family:var(--serif);font-size:15.5px;margin:2px 0;letter-spacing:.03em;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.issue.mini .sum{font-size:13px;color:var(--ink-2);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;flex:1}
.issue.mini .ft{display:flex;flex-wrap:wrap;gap:4px 10px;margin-top:auto;padding-top:6px;border-top:1px dotted var(--rule-2)}
.issue.mini .ft .more{margin-left:auto;color:var(--accent)}
.issue-detail{border:3px double var(--ink);padding:10px 12px;margin-bottom:16px;background:var(--paper-2)}
.issue-detail .box.issue{border:0;border-left:8px double var(--ink);box-shadow:none}
.issue.lv-central{border-left-style:double;border-left-width:8px}
.issue.lv-local{border-left-style:dashed}
.issue .hd{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
.issue .hd h4{font-family:var(--serif);font-size:16.5px;margin:0;letter-spacing:.04em}
.pos{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin:10px 0}
.pos div{border:1px solid var(--rule-2);padding:6px 9px;font-size:12.5px;background:var(--paper)}
.pos b{display:flex;align-items:center;font-size:11.5px;margin-bottom:2px}
.talk{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:8px}
.talk>div{padding:8px 10px;font-size:13px;border:1.2px solid var(--ink)}
.talk .atk{border-color:var(--accent);background:color-mix(in oklab,var(--accent) 6%,transparent)}
.talk .atk b{color:var(--accent)}
.talk .def{background:var(--well)}
.talk b{display:block;font-size:12px;margin-bottom:3px;font-family:var(--mono);letter-spacing:.05em}
.talk ul{margin:0;padding-left:16px}
@media (max-width:600px){.talk{grid-template-columns:1fr}}

/* ---------- 查核 ---------- */
.fc{display:grid;grid-template-columns:140px 1fr;gap:12px}
@media (max-width:700px){.fc{grid-template-columns:1fr}}
.fc .meta{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);display:flex;flex-direction:column;gap:3px}
.fc .claim{font-family:var(--serif);font-size:15.5px;font-weight:700}
.fc .ev{font-size:13px;color:var(--ink-2);margin-top:4px}
.facts-grid{display:grid;grid-template-columns:2fr 1fr;gap:16px}
@media (max-width:900px){.facts-grid{grid-template-columns:1fr}.facts-grid .box{position:static!important}}
form.add{display:grid;grid-template-columns:1fr 1fr;gap:8px}
form.add input,form.add select,form.add textarea{border:1.2px solid var(--ink);background:var(--paper);padding:6px 9px;width:100%;font-size:13px}
form.add textarea{grid-column:1/-1;min-height:56px}
form.add button{grid-column:1/-1;justify-self:start;background:var(--ink);color:var(--paper);border:0;padding:7px 16px;font-weight:700}

/* ---------- 在地（信義） ---------- */
.seat{display:flex;gap:6px;flex-wrap:wrap}
.seat span{width:30px;height:30px;border:1.5px solid var(--ink);display:grid;place-items:center;font-size:11px;font-weight:700;background-color:var(--paper-2);position:relative}
.seat span em{font-style:normal;background:var(--paper-2);padding:0 2px;line-height:1}

/* ---------- e-ink 刷新閃爍 ---------- */
.eink{position:fixed;inset:0;z-index:998;pointer-events:none;opacity:0;background:var(--paper)}
.eink.go{animation:eink .28s ease-out}
@keyframes eink{0%{opacity:.55}100%{opacity:0}}

/* ---------- 九合一 / 政黨比拚 ---------- */
.twmap{display:block;width:100%;max-width:460px;margin:0 auto;height:auto}
.twmap .cty{stroke:var(--paper);stroke-width:.9;stroke-linejoin:round;cursor:pointer;transition:opacity .15s}
.twmap .cty:hover{stroke:var(--ink);stroke-width:1.6}
.twmap .cty.isl{stroke:var(--ink-2);stroke-width:.7}
.twmap .cty.sel{stroke:var(--ink);stroke-width:2.2}
.twmap .sea{fill:none}
.twmap .ins{fill:none;stroke:var(--ink-3);stroke-width:.8;stroke-dasharray:3 2}
.twmap .insl{font-family:var(--mono);font-size:9px;fill:var(--ink-3)}
.twmap text.tl{font-family:var(--serif);font-weight:900;font-size:13px;fill:var(--ink);paint-order:stroke;stroke:var(--paper);stroke-width:3px;stroke-linejoin:round;pointer-events:none;letter-spacing:.02em}
.twmap text.ts{font-family:var(--sans,var(--serif));font-weight:700;font-size:9.5px;fill:var(--ink-2);paint-order:stroke;stroke:var(--paper);stroke-width:2.6px;stroke-linejoin:round;pointer-events:none}
.twmap .co{cursor:pointer}.twmap .co line{stroke:var(--ink-2);stroke-width:.8}.twmap .co circle{fill:var(--ink)}
.twmap .co text.tl{pointer-events:auto}
.tilemap{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:4px;max-width:440px;margin:0 auto}
.tile{aspect-ratio:1/1;border:2px solid var(--rule-2);display:flex;flex-direction:column;justify-content:space-between;padding:4px 5px;cursor:pointer;position:relative;background:var(--paper-2);min-width:0;overflow:hidden}
.tile .tn{font-family:var(--serif);font-weight:900;font-size:clamp(11px,2.6vw,16px);letter-spacing:.04em;line-height:1.1}
.tile .tc{font-size:clamp(9px,2vw,11.5px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tile .tr{font-family:var(--mono);font-size:clamp(8px,1.8vw,10px);color:var(--ink-2)}
.tile .inc{position:absolute;top:4px;right:4px}
.tile .inc .sw{width:10px;height:10px;margin:0}
.tile.safe{border:3px solid var(--pc);background:var(--pt)}
.tile.lean{border:2px dashed var(--pc);background:linear-gradient(var(--pt),var(--pt)) padding-box;background-color:var(--paper-2)}
.tile.lean{background:color-mix(in oklab,var(--pt) 55%,var(--paper-2))}
.tile.tossup{border:2px dotted var(--accent);background:repeating-linear-gradient(45deg,var(--paper-2) 0 5px,color-mix(in oklab,var(--accent) 12%,var(--paper-2)) 5px 7px)}
.tile.sel{outline:3px solid var(--ink);outline-offset:1px}
.tile:hover{outline:2px solid var(--ink-3)}
.tally{display:flex;gap:2px;margin:6px 0 4px;position:relative}
.tally i{flex:1;height:28px;border:1.5px solid var(--pc,var(--rule-2));background:var(--pt,var(--paper-2));cursor:pointer}
.tally i.lean{border-style:dashed;background:color-mix(in oklab,var(--pt) 55%,var(--paper-2))}
.tally i.tossup{border:1.5px dotted var(--accent);background:repeating-linear-gradient(45deg,var(--paper-2) 0 4px,color-mix(in oklab,var(--accent) 14%,var(--paper-2)) 4px 6px)}
.tally .half{position:absolute;top:-6px;bottom:-6px;border-left:2px solid var(--ink)}
.rate{display:inline-block;padding:0 6px;font-size:11.5px;font-weight:600;border:1.5px solid var(--pc,var(--accent));color:var(--pc,var(--accent));white-space:nowrap}
.rate.safe{background:var(--pc);color:var(--on-c)}
.rate.tossup{border-style:dotted}
.hemi{width:100%;max-width:340px;height:auto;display:block;margin:0 auto}
.grid.hemis{align-items:stretch;grid-auto-rows:1fr}.grid.hemis>.box{display:flex;flex-direction:column}.grid.hemis .hemi-foot{margin-top:auto;padding-top:8px}
.stack{display:flex;height:18px;border:1.2px solid var(--ink);margin:3px 0}
.stack i{display:block;height:100%;border-right:1px solid var(--paper-2);position:relative;min-width:0}
.stack i:last-child{border-right:0}
.stack i span{position:absolute;left:3px;top:0;font-family:var(--mono);font-size:10px;line-height:16px;color:var(--ink);white-space:nowrap}
.ninegrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}
.chipp{display:inline-flex;align-items:center;gap:3px;font-size:12px;border:1px solid var(--pc,var(--rule-2));border-left-width:4px;padding:0 6px;margin:1px 3px 1px 0;background:var(--paper)}
.chipp.inc{font-weight:700}
/* ---------- 廉政 / 總統 ---------- */
.ig-st{display:inline-block;padding:0 6px;font-size:11.5px;font-weight:600;border:1.5px solid var(--ink-3);color:var(--ink-2);white-space:nowrap}
.ig-st.convicted{background:var(--crit);border-color:var(--crit);color:var(--on-c)}
.ig-st.court{color:var(--serious);border-color:var(--serious)}
.ig-st.indicted{color:var(--warn);border-color:var(--warn)}
.ig-st.probe{color:var(--info);border-color:var(--info)}
.ig-st.cleared{color:var(--good);border-color:var(--good);border-style:dashed}
.ig-st.admin{color:var(--violet);border-color:var(--violet)}
.ig-st.alleged{border-style:dotted}
.ig-st.promise{color:var(--crit);border-color:var(--crit);border-style:dashed}
.ig-item{border-left:5px solid var(--rule-2)}
.ig-item.sev3{border-left-color:var(--crit)} .ig-item.sev2{border-left-color:var(--warn)} .ig-item.sev1{border-left-color:var(--rule-2)}
.stack i.ig-st{color:var(--ink)!important;border-width:0 1px 0 0!important}
.stack i.ig-st.convicted{background:var(--crit)} .stack i.ig-st.court{background:var(--serious)} .stack i.ig-st.indicted{background:var(--warn)} .stack i.ig-st.probe{background:var(--info)} .stack i.ig-st.cleared{background:color-mix(in oklab,var(--good) 45%,var(--paper-2))} .stack i.ig-st.admin{background:var(--violet)} .stack i.ig-st.alleged{background:var(--well-2)} .stack i.ig-st.promise{background:color-mix(in oklab,var(--crit) 30%,var(--paper-2))}
.stack i.ig-st span{color:var(--on-c)}
.yrbar{display:grid;grid-template-columns:48px 1fr;gap:8px;align-items:center;margin:3px 0;font-family:var(--mono);font-size:11.5px}
/* ---------- 關聯連結 ---------- */
[data-go]{cursor:pointer}
.item[data-go]:hover,.ev[data-go]:hover{border-color:var(--ink);background:var(--well)}
a.golink,span.golink{color:inherit;text-decoration:none;border-bottom:1px dotted var(--ink-3);cursor:pointer}
a.golink:hover,span.golink:hover{color:var(--accent);border-color:var(--accent)}
.rel{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px;align-items:center}
.rel-h{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);margin-right:2px}
.relc{font-size:11.5px;border:1px solid var(--rule-2);border-left-width:4px;padding:1px 7px;color:var(--ink-2);background:var(--paper);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.6}
.relc:hover{border-color:var(--ink);color:var(--ink)}
.relc b{font-weight:600;margin-right:3px}
.rc-issue{border-left-color:var(--violet)} .rc-issue b{color:var(--violet)}
.rc-fact{border-left-color:var(--serious)} .rc-fact b{color:var(--serious)}
.rc-time{border-left-color:var(--warn)} .rc-time b{color:var(--warn)}
.rc-poll{border-left-color:var(--info)} .rc-poll b{color:var(--info)}
.rc-mkt{border-left-color:var(--c-TPP)} .rc-mkt b{color:var(--c-TPP)}
.rc-plat,.rc-stance,.rc-contro,.rc-rec,.rc-cand{border-left-color:var(--pc,var(--ink))} .rc-plat b,.rc-stance b,.rc-contro b,.rc-rec b,.rc-cand b{color:var(--pc,var(--ink))}
.hit{outline:3px solid var(--accent)!important;outline-offset:3px;background-color:color-mix(in oklab,var(--accent) 8%,var(--paper-2))!important}
.cand .links{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
/* ---------- 預測市場 ---------- */
.mcards{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px;margin-bottom:16px}
.mcard{border:1.5px solid var(--rule);background:var(--paper-2);padding:10px 12px;cursor:pointer;display:flex;flex-direction:column;gap:6px}
.mcard:hover{background:var(--well)}
.mcard.on{outline:3px solid var(--c-TPP);outline-offset:-3px}
.mcard .hd{display:flex;justify-content:space-between;align-items:baseline;font-family:var(--serif);font-weight:900;font-size:16px;letter-spacing:.06em}
.mcard .fav{display:flex;align-items:baseline;gap:8px}
.mcard .fav b{font-family:var(--pix);font-size:38px;font-weight:400;line-height:.9}
.mcard .spark{height:30px;width:100%;display:block}
.mcard .meta{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);display:flex;gap:8px;flex-wrap:wrap}
.liq{display:inline-block;padding:0 5px;font-family:var(--mono);font-size:10.5px;border:1.2px solid}
.liq-hi{color:var(--good);border-color:var(--good)} .liq-mid{color:var(--warn);border-color:var(--warn)} .liq-lo{color:var(--crit);border-color:var(--crit);border-style:dashed}
.probbar{display:flex;height:14px;border:1.2px solid var(--ink)}
.probbar i{display:block;height:100%;border-right:1.2px solid var(--paper-2)}
.probbar i:last-child{border-right:0}
.agree{color:var(--good);font-weight:700} .disagree{color:var(--crit);font-weight:700} .nodata{color:var(--ink-3)}
.mkt-note{border-left:4px solid var(--c-TPP);padding:6px 10px;background:var(--t-TPP);font-size:13px;margin:6px 0}

/* 三層導覽：群組（大）→ 分頁（小） */
.groupbar{display:grid;grid-template-columns:var(--gc,repeat(3,minmax(0,1fr)));border-bottom:1px solid var(--rule-2);border-left:1px solid var(--rule-2)}
@media (max-width:960px){.groupbar{grid-template-columns:repeat(3,minmax(0,1fr))}}
.groupbar button{border:0;border-right:1.5px solid var(--rule);background:var(--paper-2);padding:7px 10px 6px;text-align:center;align-items:center;justify-content:center;font-family:var(--serif);font-weight:900;font-size:15px;line-height:1.25;letter-spacing:.12em;color:var(--ink-2);display:flex;flex-direction:column;gap:2px}
.groupbar button small{font-family:var(--serif);font-size:11.5px;letter-spacing:.06em;font-weight:400;line-height:1.3;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.groupbar button.on{background:var(--paper);color:var(--ink);box-shadow:inset 0 -3px 0 var(--ink)}
.groupbar button.on small{color:var(--ink-2)}
@media(max-width:640px){.groupbar button{font-size:13px;letter-spacing:.04em}.groupbar button small{display:none}}
.distbar{display:flex;flex-wrap:wrap;gap:4px;margin:10px 0 14px}
.distbar button{border:1.2px solid var(--rule);background:var(--paper);padding:4px 9px;font-family:var(--serif);font-weight:700;font-size:13px;color:var(--ink-2);cursor:pointer}
.distbar button small{font-family:var(--mono);font-weight:400;font-size:10.5px;color:var(--ink-3);margin-left:4px}
.distbar button.on{background:var(--ink);color:var(--paper)}
.distbar button.focus{border-color:var(--accent);box-shadow:inset 0 -3px 0 var(--accent)}
.distbar .fk{font-family:var(--mono);font-weight:400;font-size:9.5px;color:var(--accent);margin-left:5px;border:1px solid var(--accent);padding:0 3px;vertical-align:1px}
.distbar button.on .fk{color:var(--paper);border-color:var(--paper)}
.distbar button.on small{color:var(--paper-2)}
.cmp .row2{display:grid;grid-template-columns:92px 1fr 1fr;gap:8px;align-items:center;font-size:12.5px;margin:5px 0}
.cmp .pair{display:grid;grid-template-columns:1fr 78px;gap:6px;align-items:center}
.cmp .pair>div{height:12px;border:1px solid var(--rule-2);background:var(--paper-2)}
.cmp .pair .bar{height:100%}
.cmp .v{font-family:var(--mono);font-size:11px;color:var(--ink-2);white-space:nowrap}
.cmp .hd2{display:grid;grid-template-columns:92px 1fr 1fr;gap:8px;font-family:var(--mono);font-size:10.5px;color:var(--ink-3);margin-bottom:2px}
.facts div{padding:3px 0;border-bottom:1px dotted var(--rule-2);font-size:13px}
.chips{display:flex;flex-wrap:wrap;gap:3px}
.chipp[data-go],.chipp[data-person]{cursor:pointer}
.chipp[data-go]:hover,.chipp[data-person]:hover{background:var(--well)}
.ban{display:none;background:var(--ink);color:var(--paper);padding:7px 12px;font-size:13px;line-height:1.5;border-bottom:1.5px solid var(--rule)}.ban.on{display:block}.ban b{font-family:var(--pix);font-size:16px;letter-spacing:.06em;margin-right:8px}
.sealed{position:relative;overflow:hidden;min-height:120px}.sealed-in{filter:blur(7px) saturate(.5);opacity:.55;pointer-events:none;user-select:none}
.seal{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) rotate(-12deg);border:4px double var(--crit);color:var(--crit);padding:8px 24px;font-family:var(--serif);font-weight:900;font-size:34px;letter-spacing:.3em;text-align:center;background:var(--paper);box-shadow:0 0 0 6px var(--paper);white-space:nowrap}
.seal small{display:block;font-family:var(--mono);font-size:11px;letter-spacing:0;margin-top:2px;color:var(--ink-2)}
.sealchart{height:200px;background:repeating-linear-gradient(0deg,var(--paper-2) 0 24px,var(--rule-2) 24px 25px);border:1px solid var(--rule-2)}
@media(max-width:640px){.seal{font-size:22px;padding:6px 14px}}
footer{border-top:4px double var(--rule);padding:14px 18px;color:var(--ink-3);font-size:11.5px;font-family:var(--mono);text-align:center}
/* 國際觀點：評比卡片、國家 × 對象矩陣、主題長條 */
.ixgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));gap:12px}
.ixcard{border:1px solid var(--rule-2);background:var(--paper);padding:10px 12px;display:flex;flex-direction:column;gap:2px}
.ixcard .ixh{font-family:var(--serif);font-weight:700;font-size:14px}
.ixcard .ixv{font-family:var(--serif);font-weight:900;font-size:26px;line-height:1.15;margin-top:4px}
.ixcard .ixv small{font-size:12px;font-weight:500;color:var(--ink-3);margin-left:3px}
.ixcard .ixd{font-family:var(--mono);font-size:11px;color:var(--ink-3)}
.ixcard .ixd.up{color:var(--good)}.ixcard .ixd.down{color:var(--crit)}
.ixcard svg{width:100%;height:auto;display:block;margin:6px 0 2px}
table.ixmx{width:100%;border-collapse:collapse;font-size:12.5px}
table.ixmx th,table.ixmx td{border-bottom:1px solid var(--rule-2);padding:4px 6px;text-align:center}
table.ixmx th{background:var(--well);font-weight:600}
table.ixmx th:first-child,table.ixmx td:first-child{text-align:left}
table.ixmx td button{all:unset;cursor:pointer;display:inline-block;min-width:22px;padding:1px 5px;background:var(--well);font-family:var(--mono)}
table.ixmx td button:hover,table.ixmx td button:focus-visible{background:var(--ink);color:var(--paper)}
.ifbar{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;margin:2px 0 4px}.ifsel{display:flex;gap:6px;align-items:center;font-size:13px}.ifsel span{font-family:var(--mono);font-size:11px;color:var(--ink-3)}.ifsel select{border:1.2px solid var(--ink);background:var(--paper-2);color:var(--ink);padding:3px 6px;font:inherit;max-width:12em}
.tbars .r{display:grid;grid-template-columns:7em 1fr 2.2em;gap:8px;align-items:center;margin:4px 0}
.tbars .b{height:10px;background:var(--ink-2)}
/* 國策議題卡片格 */
.pmx{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,340px),1fr));gap:12px;align-items:start}
.pmx-c{border:1px solid var(--rule-2);background:var(--paper);padding:10px 12px;min-width:0}.pmx-c>summary{list-style:none;cursor:pointer;display:flex;flex-direction:column;gap:6px}.pmx-c>summary::-webkit-details-marker{display:none}.pmx-c .pmx-more{color:var(--ink-3);font-family:var(--mono)}.pmx-c[open] .pmx-more{display:none}.pmx-c .pmx-p{margin-top:8px}
.pmx-h{font-family:var(--serif);font-weight:700;font-size:15px;line-height:1.4}
.pmx-s{font-size:12.5px;color:var(--ink-2);border-left:3px solid var(--rule-2);padding-left:8px}
.pmx-p{display:flex;flex-direction:column;gap:6px}
.pmx-r{display:grid;grid-template-columns:5.4em minmax(0,1fr);gap:8px;font-size:13px;line-height:1.6;padding:4px 0 4px 8px;background:var(--paper-2)}
.pmx-r b{font-size:12px;white-space:nowrap}
@media (max-width:480px){.pmx-r{grid-template-columns:1fr;gap:2px}}
/* 長期宏觀 */
.mgrid{display:flex;flex-direction:column;gap:10px;margin-top:10px}
.mrow{border-top:1px solid var(--rule-2);padding-top:6px}
.mlab{display:flex;flex-wrap:wrap;gap:2px 10px;align-items:baseline;font-size:13px}
.mlab .mv{font-family:var(--mono);font-size:12px;margin-left:auto}
svg.mchart,svg.mlane{width:100%;height:auto;display:block}
svg .mt{font:10px var(--mono);fill:var(--ink-3)}
.mdot{cursor:pointer;stroke:var(--paper);stroke-width:1.2}
.mdot.sc-0{fill:var(--accent)}.mdot.sc-1{fill:var(--info)}.mdot.sc-2{fill:var(--ink-2)}
.mdot.on{stroke:var(--ink);stroke-width:2.2}
.msel{border:1.5px solid var(--accent);background:var(--paper);padding:8px 10px;margin:8px 0}
.msel .t{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.msel .d{font-size:13.5px;margin-top:4px}
.mevs details.mev{border-bottom:1px solid var(--rule-2);padding:6px 0}
.mevs summary{cursor:pointer;list-style:none;display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline;font-size:13.5px;line-height:1.5}
.mevs summary::-webkit-details-marker{display:none}
.mevs summary::before{content:"▸";color:var(--ink-3);font-size:11px}
.mevs details[open]>summary::before{content:"▾"}
.mevs details[open]>summary{font-weight:700}
.mevs .mpick{margin-left:auto;font-size:11px;padding:0 7px}
.mevs .dd{font-size:13px;color:var(--ink-2);margin:4px 0 0 14px}
.mevs .src{margin-left:14px}
details.mev.hit{border-left:3px solid var(--accent);padding-left:6px}
/* 人物履歷 */
.pcareer{display:grid;gap:4px;font-size:13px}.pcareer .pc{display:grid;grid-template-columns:8.5em minmax(0,1fr);gap:8px;border-bottom:1px dashed var(--rule-2);padding:3px 0}
@media (max-width:600px){.pcareer .pc{grid-template-columns:1fr;gap:0}}
/* 手機：資料表逐列卡片，不在框內左右／上下捲動 */
.stk-btn{display:none}
.pres-op{grid-template-columns:repeat(2,minmax(0,1fr))!important}@media (max-width:900px){.pres-op{grid-template-columns:1fr!important}}
@media (max-width:560px){.box h3{flex-wrap:wrap;row-gap:2px}.box h3>.sub{flex:1 1 100%}.sec{font-size:19px}}
@media (max-width:700px){
  table.stk{min-width:0!important;font-size:13px}
  table.stk thead{display:none}
  table.stk,table.stk tbody{display:block;width:100%}
  table.stk tr{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 12px;border:1px solid var(--rule-2);background:var(--paper-2);margin:0 0 8px;padding:6px 10px}
  table.stk td{display:block;border:0!important;padding:1px 0!important;text-align:left!important;white-space:normal!important;width:auto!important;min-width:0!important;overflow-wrap:anywhere}
  table.stk td::before{content:attr(data-l);display:block;font-family:var(--mono);font-size:10.5px;color:var(--ink-3);line-height:1.3}
  table.stk td:first-child{grid-column:1/-1;font-weight:700;font-size:14px;border-bottom:1px solid var(--rule-2)!important;padding-bottom:4px!important}
  table.stk td:first-child::before,table.stk td.stk-full::before,table.stk td:not([data-l])::before{display:none}
  table.stk td.stk-full{grid-column:1/-1}
  table.stk td:empty{display:none}
  table.stk.stk-clip tbody tr:nth-child(n+7){display:none}
  .stk-btn{display:block;width:100%;margin:0 0 10px}
  .tbl:has(table.stk),.box:has(>table.stk),.box:has(>.tbl>table.stk){max-height:none!important;overflow:visible!important}
  .tbl:has(table.stk){border:0}
}
@media print{header.mast .mast-top,.ticker,.searchrow,nav.tabs,.regionbar,form.add,textarea.note,.pollctl,.filters,footer,.eink{display:none!important}body{background:#fff}body:after{display:none}section.view{display:none}section.view.on{display:block}.box{break-inside:avoid}}

/* ===== 預先產生的頁面摘要（prerender/）：JS 接手前、不執行 JS 的搜尋引擎與分享預覽看到的版本 ===== */
.pre .crumbs{font-family:var(--mono);font-size:11.5px;color:var(--ink-3);margin:2px 0 10px;display:flex;gap:7px;flex-wrap:wrap;align-items:center}
.pre .crumbs a{color:inherit}
.pre h1.sec{font-size:24px;font-weight:900}
.pre h2.sec{font-size:18px;margin-top:26px}
.pre .lead{font-size:15px;line-height:1.8;max-width:62em;margin:0 0 14px}
.pre p{line-height:1.75}
.pre .grid.g2{grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));margin-bottom:16px;align-items:start}
.pre .grid.g2>div{display:flex;flex-direction:column;gap:16px}
.pre ul.links{display:flex;flex-wrap:wrap;gap:6px 18px;list-style:none;padding:0;margin:0 0 10px;font-size:13.5px}
.pre .sw{display:inline-block;width:.85em;height:.85em;border:1px solid var(--ink);vertical-align:-.1em;margin-right:4px;color:var(--pc);background-color:var(--pt)}
.pre .pre-src{font-size:11.5px;color:var(--ink-3);margin-top:5px;word-break:break-all}
.pre .pre-src a{color:inherit}
.pre .tbl{overflow-x:auto;margin-bottom:12px}
.pre table.pre-tbl{font-family:var(--sans);font-size:13px}
.pre table.pre-tbl tr.grp td{background:var(--well);font-family:var(--serif);font-weight:700;letter-spacing:.1em}
.pre details summary{cursor:pointer;font-size:13px;font-weight:700;margin:6px 0 2px}
.pre .item .method{margin:4px 0 0;padding-left:1.2em}
.pre .h3{font-family:var(--serif);font-size:16px;margin:18px 0 6px}
.pre .toc ol{margin:0;padding-left:1.6em;columns:2;font-size:13.5px;line-height:1.9}
.pre .pre-links{margin-top:24px;font-size:13.5px}
.pre-note{border:1.5px dashed var(--rule);padding:8px 12px;font-size:13px;margin-top:20px}
.pre-home{text-decoration:none;color:inherit}
.pre-home .title{font-family:var(--serif);font-weight:900;font-size:clamp(24px,4vw,40px);letter-spacing:.06em;line-height:1.05}
.pre-home .title .sep{opacity:.35;margin:0 .15em}
.doc{max-width:980px}
@media (max-width:640px){.pre .toc ol{columns:1}.pre h1.sec{font-size:20px}}
