:root{
  --bg:#0d1117;--panel:#141a22;--panel2:#1a222c;--line:#263040;--grid:#1c2531;
  --text:#d7dee8;--muted:#7d8b9c;--accent:#f0b429;
  --up:#ff4d4f;--down:#19c37d;--flat:#c8ced6;
  --ma1:#f5c542;--ma2:#d06bff;--ma3:#3fa7ff;--boll:#8aa0b8;
  --cross:#8a96a6;--alert:#ffb020;--emaUp:#f80303;--emaDown:#05f80d;
}
:root[data-theme="light"]{
  --bg:#ffffff;--panel:#f5f7fa;--panel2:#eceff4;--line:#d6dce4;--grid:#edf0f4;
  --text:#1d2733;--muted:#66727f;--accent:#c98a00;
  --up:#e5262c;--down:#0f9d58;--flat:#4a5563;
  --ma1:#c99500;--ma2:#9b3fd1;--ma3:#1f7ae0;--boll:#7a8899;
  --cross:#7a8594;--alert:#d98200;--emaUp:#d00000;--emaDown:#00a80a;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--bg);color:var(--text);
  font:13px/1.4 "Microsoft JhengHei","PingFang TC","Noto Sans TC",system-ui,sans-serif}
button,select,input{font:inherit;color:inherit}
[hidden]{display:none !important}
.num{font-variant-numeric:tabular-nums;font-family:Consolas,"Roboto Mono",ui-monospace,monospace}
.up{color:var(--up)}.down{color:var(--down)}.flat{color:var(--flat)}

header{height:46px;display:flex;align-items:center;gap:16px;padding:0 14px;
  background:var(--panel);border-bottom:1px solid var(--line)}
.logo{font-weight:700;font-size:16px;letter-spacing:.5px;white-space:nowrap}
.logo b{color:var(--accent)}
.hdr-info{display:flex;gap:14px;align-items:center;color:var(--muted);white-space:nowrap;overflow:hidden}
.hdr-info .num{color:var(--text)}
.pill{padding:2px 8px;border-radius:10px;font-size:12px;border:1px solid var(--line)}
.pill.live{color:var(--down);border-color:color-mix(in srgb,var(--down) 50%,transparent)}
.pill.off{color:var(--muted)}
.pill.warn{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 50%,transparent)}
.spacer{flex:1}
.iconbtn{background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:4px 10px;cursor:pointer}
.iconbtn:hover{border-color:var(--muted)}

/* 頁尾：資料來源與「僅供參考，不構成投資建議」警語（保留） */
main{display:grid;grid-template-columns:230px minmax(0,1fr) 300px;height:calc(100vh - 46px - 24px)}
footer{height:24px;display:flex;align-items:center;padding:0 14px;font-size:11.5px;color:var(--muted);
  border-top:1px solid var(--line);background:var(--panel);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 自選清單 */
#left{border-right:1px solid var(--line);overflow:auto;background:var(--panel);min-width:0}
.wgroup{padding:8px 12px 4px;font-size:11.5px;color:var(--muted);letter-spacing:1px}
.wrow{display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto;gap:0 8px;
  padding:7px 12px;cursor:pointer;border-left:3px solid transparent}
.wrow:hover{background:var(--panel2)}
.wrow.sel{background:var(--panel2);border-left-color:var(--accent)}
.wrow .nm{font-weight:600}
.wrow .cd{font-size:11px;color:var(--muted)}
.wrow .px{text-align:right;font-weight:600}
.wrow .ch{text-align:right;font-size:11.5px}
/* 報價項目（加權、小那斯達克、日經、KOSPI）：沒有 K 棒，不能點選切換主圖 */
.wrow.ov{cursor:default}
.wrow.ov:hover{background:transparent}
/* 台指期列下方的試撮資訊；試撮進行中改用強調色 */
.wrow .tr{grid-column:1/3;display:flex;flex-wrap:wrap;justify-content:space-between;gap:0 8px;margin-top:3px;font-size:11px;color:var(--muted)}
.wrow .tr:not([hidden]){display:flex}
.wrow .tr[hidden]{display:none}
.wrow .tr span{white-space:nowrap}
.wrow .tr b{color:var(--text);font-weight:600}
.wrow .tr b.up{color:var(--up)}.wrow .tr b.down{color:var(--down)}
.wrow .tr.on,.wrow .tr.on b{color:var(--accent)}

/* 中央圖表 */
#center{display:flex;flex-direction:column;min-width:0}
.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:6px 10px;
  border-bottom:1px solid var(--line);background:var(--panel)}
.seg{display:flex;border:1px solid var(--line);border-radius:6px;overflow:hidden}
.seg button{background:transparent;border:0;padding:4px 9px;cursor:pointer;color:var(--muted)}
.seg button.manual{color:var(--accent);font-weight:700}
.seg button+button{border-left:1px solid var(--line)}
.seg button.on{background:var(--panel2);color:var(--accent);font-weight:700}
.tb-sep{width:1px;height:20px;background:var(--line);margin:0 4px}
.chk{display:flex;align-items:center;gap:4px;color:var(--muted);cursor:pointer;user-select:none}
.chk input{accent-color:var(--accent)}
select{background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:3px 6px}
#charts{flex:1;min-height:0;display:flex}
#chartWrap{position:relative;flex:1;min-height:0;min-width:0}
#chart,#chart2{position:absolute;inset:0;width:100%;height:100%;touch-action:none;cursor:crosshair;display:block}
/* K 棒重播控制列：浮在主圖下方中央 */
#replayBar{position:absolute;left:50%;bottom:30px;transform:translateX(-50%);z-index:3;display:flex;align-items:center;gap:6px;
  padding:5px 10px;border-radius:8px;background:color-mix(in srgb,var(--panel) 92%,transparent);border:1px solid var(--accent);
  box-shadow:0 4px 16px rgba(0,0,0,.35);white-space:nowrap;font-size:12.5px}
#replayBar[hidden]{display:none}
#replayBar>span{display:flex;align-items:center;gap:6px}
#replayBar>span[hidden]{display:none}
#replayBar button,#replayBar select{background:var(--panel2);border:1px solid var(--line);border-radius:5px;padding:2px 8px;cursor:pointer}
#replayBar button:hover{border-color:var(--accent)}
#replayBar .rp-t{color:var(--accent);font-weight:700}
#replayBar.picking{color:var(--accent)}
#replayBtn.on{border-color:var(--accent);color:var(--accent)}
#chartWrap:has(#replayBar:not([hidden])) .hint{display:none}
body.replaying #chart{cursor:crosshair}
/* 重播中：籌碼、權值股貢獻沒有歷史，淡化並標示為即時資料 */
body.replaying #gaugeCol .chip,body.replaying #contribBox{opacity:.35}
body.replaying #gaugeCol .gc-h::after{content:'重播中・籌碼為即時';font-size:10.5px;color:var(--accent);margin-left:auto}
.tb-lb{color:var(--muted);font-size:12px}
.toolbar .spacer{flex:1}

/* 雙週期版面（D）：左右欄收起，大小週期兩張圖並排，權值／籌碼／波浪放下方 */
body:not(.layout-d) .d-only{display:none !important}
body.layout-d main{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) 300px}
body.layout-d #left,body.layout-d #side{display:none}
/* 雙週期：左右兩張完整主圖等寬 */
body.layout-d #miniWrap{display:block;position:relative;flex:1 1 0;min-width:0;min-height:0;border-left:1px solid var(--line)}
body.layout-d #chartWrap{flex:1 1 0}
body.layout-d #gaugeCol .cdial>b{font-size:20px}
body.layout-d #gaugeCol .cdial .dn{font-size:12.5px}
body.layout-d #dock{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);
  border-top:1px solid var(--line);background:var(--panel);min-height:0}
#dock>*{overflow:auto;min-height:0;border-bottom:0}
#dock>*+*{border-left:1px solid var(--line)}
#dock #contribBox{border-top:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0 12px;align-content:start}
#dock #contribBox>*{grid-column:1/3}
#dock #contribBox .cb-head.up{grid-column:1;grid-row:5}
#dock #contribBox #contribUp{grid-column:1;grid-row:6}
#dock #contribBox .cb-head.down{grid-column:2;grid-row:5}
#dock #contribBox #contribDown{grid-column:2;grid-row:6}
#dock #contribBox #contribNote{grid-row:7}
#dock #contribBox[hidden],#dock .box[hidden]{display:none}

/* 頂層分頁（看盤／選股／法人籌碼） */
.pagetabs{display:flex;gap:2px;height:100%;align-items:stretch}
.pagetabs button{background:transparent;border:0;border-bottom:2px solid transparent;padding:0 12px;cursor:pointer;color:var(--muted);font-size:13.5px}
.pagetabs button:hover{color:var(--text)}
.pagetabs button.on{color:var(--accent);border-bottom-color:var(--accent);font-weight:700}
.page{height:calc(100vh - 46px - 24px);display:flex;flex-direction:column;min-height:0}
.pg-bar{display:flex;align-items:center;gap:10px;padding:6px 14px;border-bottom:1px solid var(--line);background:var(--panel);flex-wrap:wrap}
.pg-status{color:var(--muted);font-size:12.5px}
.pg-status.ok{color:var(--down)}.pg-status.err{color:var(--up)}.pg-status.busy{color:var(--accent)}
.pg-body{flex:1;min-height:0;display:grid;grid-template-columns:260px minmax(0,1fr)}
.pg-cond{border-right:1px solid var(--line);background:var(--panel);padding:14px;overflow:auto;display:flex;flex-direction:column;gap:12px}
.pg-cond h2{margin:0;font-size:16px;color:var(--accent)}
.pg-desc{margin:0;color:var(--muted);font-size:12.5px;line-height:1.6}
.pg-note{margin:0;color:var(--muted);font-size:11.5px;line-height:1.6;border-top:1px solid var(--line);padding-top:10px}
.pg-field{display:flex;flex-direction:column;gap:4px;color:var(--muted);font-size:12px}
.pg-field input,.pg-field select{background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:4px 6px;color:var(--text);color-scheme:dark}
:root[data-theme="light"] .pg-field input{color-scheme:light}
.pg-checks{display:flex;flex-direction:column;gap:7px}
.pg-cond .iconbtn{padding:7px 10px}
.pg-main{overflow:auto;padding:12px 14px;display:flex;flex-direction:column;gap:12px;min-width:0}
.pg-split{display:grid;grid-template-columns:repeat(auto-fit,minmax(380px,1fr));gap:12px;align-items:start}
.pg-scroll{flex:1;overflow:auto;padding:12px 16px;display:flex;flex-direction:column;gap:12px}
.pg-h3{margin:0;font-size:13.5px;color:var(--accent);display:flex;gap:10px;align-items:baseline;flex-wrap:wrap}
.pg-h3 span{color:var(--muted);font-size:11.5px;font-weight:400}
.pg-empty{color:var(--muted);text-align:center;padding:36px 12px;border:1px dashed var(--line);border-radius:8px}
.rt{border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--panel)}
.rt-head{display:flex;justify-content:space-between;align-items:baseline;padding:8px 12px;border-bottom:1px solid var(--line)}
.rt-head b{color:var(--accent)}.rt-head span{color:var(--muted);font-size:11.5px}
.rt-wrap{overflow:auto}
table.grid{font-size:12.5px}
table.grid th{position:sticky;top:0;background:var(--panel2);color:var(--muted);font-weight:600;text-align:right;padding:6px 10px;white-space:nowrap;cursor:pointer;user-select:none}
table.grid th.l,table.grid td.l{text-align:left}
table.grid th.sorted{color:var(--accent)}
table.grid td{padding:5px 10px;text-align:right;border-top:1px solid var(--line);white-space:nowrap}
table.grid tbody tr:hover td{background:var(--panel2)}
.fc-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px}
.fc-cards div{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:10px 12px}
.fc-cards span{display:block;color:var(--muted);font-size:12px;font-family:"Microsoft JhengHei",system-ui,sans-serif}
.fc-cards b{font-size:20px}
#pageForeign:not([data-k="cost"]) .fc-only,#pageForeign:not([data-k="large"]) .lt-only,#pageForeign:not([data-k="market"]) .mk-only,
#pageForeign:not([data-k="inst"]) .in-only,#pageForeign:not([data-k="futlarge"]) .fl-only,
#pageForeign[data-k="cost"] .ch-only,#pageForeign[data-k="large"] .ch-only{display:none !important}
.pg-inline select{background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:3px 6px;color:var(--text)}
.fc-cards small{display:block;margin-top:2px;font-size:12px;color:var(--muted)}
.fc-cards small b{font-size:12px}
.fc-cards b.txt{font-size:16px;font-family:"Microsoft JhengHei",system-ui,sans-serif}
/* 大盤籌碼小圖：各圖同一條日期軸、單一 y 軸，滑鼠十字線同步 */
.ch-charts{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:10px}
.ch-chart{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:8px 10px 6px;position:relative}
.ch-chart h4{margin:0 0 4px;font-size:12.5px;font-family:"Microsoft JhengHei",system-ui,sans-serif;display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.ch-chart h4 em{font-style:normal;font-weight:400;color:var(--muted);font-size:11.5px;display:inline-flex;align-items:center;gap:4px}
.ch-chart h4 em i{display:inline-block;width:10px;height:3px;border-radius:2px}
.ch-chart h4 em i.s1{background:var(--ma3)}.ch-chart h4 em i.s2{background:var(--accent)}
.ch-chart canvas{display:block;width:100%;height:150px}
.ch-tip{position:absolute;pointer-events:none;background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:4px 8px;font-size:12px;white-space:nowrap;z-index:2}
.ch-tip span{color:var(--muted);margin-right:6px}
/* 選擇權多空 */
#opCharts canvas{height:180px}
.fc-cards b.rng{font-size:17px}
table.grid tr.cur td{background:var(--panel2);font-weight:700}
.ch-chart h4 em i.ref{background:none;border-top:2px dashed var(--text);height:0}
.ch-chart h4 em i.now{background:var(--ma2)}
.op-dir{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:10px 12px;display:grid;grid-template-columns:minmax(150px,auto) repeat(auto-fit,minmax(170px,1fr));gap:8px 16px;align-items:start}
.op-dir h4{margin:0;font-size:12px;color:var(--muted);font-weight:400;font-family:"Microsoft JhengHei",system-ui,sans-serif}
.op-dir .hl{font-size:18px;font-weight:700;font-family:"Microsoft JhengHei",system-ui,sans-serif}
.op-dir .pt span{display:block;color:var(--muted);font-size:12px;font-family:"Microsoft JhengHei",system-ui,sans-serif}
.op-dir .pt b{font-size:15px}
.op-dir .pt small{display:block;color:var(--muted);font-size:11.5px;font-family:"Microsoft JhengHei",system-ui,sans-serif}
/* 夜盤約 57 格，表格限高、表頭固定 */
#opTemp .rt-wrap{max-height:340px}
#opDef .rt-wrap{max-height:420px}
#opTemp thead th,#opDef thead th{position:sticky;top:0;background:var(--panel)}
.op-help{color:var(--muted);font-size:12.5px;line-height:1.6}
.op-help summary{cursor:pointer;color:var(--accent)}
.op-help p{margin:6px 0}
.ob-dir{font-weight:700;font-size:14px;margin-bottom:4px;font-family:"Microsoft JhengHei",system-ui,sans-serif}
.ob-kv{display:grid;grid-template-columns:auto 1fr;gap:3px 8px;margin:0;font-size:12.5px}
.ob-kv dt{color:var(--muted);font-family:"Microsoft JhengHei",system-ui,sans-serif}.ob-kv dd{margin:0;text-align:right}
.ob-kv small{color:var(--muted)}
.pg-inline{display:flex;align-items:center;gap:8px}
.pg-inline input[type=date]{background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:3px 6px;color:var(--text);color-scheme:dark}
:root[data-theme="light"] .pg-inline input[type=date]{color-scheme:light}
.lt-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px}
.lt-cards>div{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:10px 12px}
.lt-cards h4{margin:0 0 6px;font-size:13px;color:var(--accent);font-family:"Microsoft JhengHei",system-ui,sans-serif}
.lt-cards h4 small{color:var(--muted);font-weight:400;margin-left:6px}
.lt-cards p{margin:5px 0;display:grid;grid-template-columns:22px 1fr 1fr;gap:6px;font-size:13.5px;align-items:center}
.lt-cards p>span{color:var(--muted);font-family:"Microsoft JhengHei",system-ui,sans-serif}
.lt-cards b i{font-style:normal;font-weight:400;color:var(--muted);margin-right:6px}
/* 部位增減達 1 萬口以上：同色外框＋淡底 */
.big{display:inline-block;padding:0 6px;border:1.5px solid currentColor;border-radius:4px;
  background:color-mix(in srgb,currentColor 14%,transparent);font-weight:700;line-height:1.45}
.lt-legend{display:inline-flex;align-items:center;gap:6px}
table.grid tr.special td{color:var(--muted)}
@media (max-width:900px){
  .pagetabs button{padding:0 8px}
  .page{height:auto;min-height:calc(100vh - 46px)}
  .pg-body{grid-template-columns:1fr}
  .pg-cond{border-right:0;border-bottom:1px solid var(--line)}
}

/* 盤中決策版面（C）：右欄加寬，結論 → 籌碼 → 波浪各級（每級精簡成兩行）→ 報價 */
body.layout-c main{grid-template-columns:230px minmax(0,1fr) 340px}
body.layout-c .ew-dirs,body.layout-c .ew-help,body.layout-c .ew-deg .phase,body.layout-c .ew-deg details,body.layout-c .chip-note{display:none}
body.layout-c .ew-deg{margin-top:6px;padding:6px 8px 6px 9px}
body.layout-c .ew-deg .lv{margin-top:4px;font-size:12px}
body.layout-c .chip{grid-template-columns:repeat(3,minmax(0,1fr));gap:4px}
body.layout-c .chip .ci{padding:4px 6px}
body.layout-c .chip b{font-size:13.5px}
body.layout-c .chip .ct{flex-direction:column;align-items:flex-start}
/* 圖表操作提示文字依使用者要求隱藏（2026-11-08） */
.hint{display:none !important;position:absolute;right:82px;bottom:28px;font-size:11px;color:var(--muted);pointer-events:none;opacity:.8}

/* 右側面板 */
#side{border-left:1px solid var(--line);overflow:auto;background:var(--panel)}
.box{padding:10px 12px;border-bottom:1px solid var(--line)}
.box h3{margin:0 0 8px;font-size:12px;color:var(--muted);font-weight:600;letter-spacing:1px;display:flex;justify-content:space-between}
.qname{display:flex;align-items:baseline;gap:8px}
.qname b{font-size:16px}
.qname span{color:var(--muted);font-size:12px}
.qprice{font-size:30px;font-weight:700;margin:2px 0}
.qchg{font-size:14px;display:flex;gap:12px}
.kv{display:grid;grid-template-columns:auto 1fr auto 1fr;gap:3px 8px;margin:8px 0 0}
.kv dt{color:var(--muted)}.kv dd{margin:0;text-align:right}
.ratio{height:6px;border-radius:3px;background:var(--down);overflow:hidden;margin-top:8px}
.ratio i{display:block;height:100%;width:50%;background:var(--up)}
.ratio-lb{display:flex;justify-content:space-between;font-size:11.5px;margin-top:3px}
table{width:100%;border-collapse:collapse}
.book td{padding:2px 4px;position:relative}
.book td.lb{color:var(--muted);width:34px}
.book td.p{text-align:right}
.book td.q{text-align:right;width:70px}
.book .bar{position:absolute;right:0;top:2px;bottom:2px;opacity:.16;border-radius:2px}
.book .bar.up{background:var(--up)}.book .bar.down{background:var(--down)}
.book tr.mid td{border-top:1px dashed var(--line)}
.ticks td{padding:1px 4px;text-align:right}
.ticks td:first-child{text-align:left;color:var(--muted)}
#tickBox{max-height:260px;overflow:auto}
.chip{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.chip .ci{background:var(--panel2);border-radius:6px;padding:6px 8px}
.chip .ct{display:flex;justify-content:space-between;align-items:baseline}
.chip span{color:var(--muted);font-size:12px}
.chip b{font-size:15px}
.chip .cd{display:flex;justify-content:space-between;gap:2px;margin-top:3px;font-size:11px}
.chip .cd span{font-size:10.5px}
.chip .cd i{font-style:normal;font-weight:700}
.chip .ct em{display:block;font-style:normal;font-size:10.5px;color:var(--muted)}
.chip-note{font-size:11px;color:var(--muted);margin-top:6px;line-height:1.5}
/* 籌碼 v2：總分半圓儀表＋以 0 為中線的多空條 */
.chip.v2,body.layout-c .chip.v2{display:block}
.chip.v2 .cg{display:flex;align-items:center;gap:10px;background:var(--panel2);border-radius:6px;padding:6px 8px 4px;margin-bottom:6px}
.chip.v2 .cg svg{width:118px;flex:none}
.chip.v2 .g-track{fill:none;stroke:var(--line);stroke-width:9;stroke-linecap:round}
.chip.v2 .g-fill{fill:none;stroke-width:9}
.chip.v2 .g-fill.up{stroke:var(--up)}.chip.v2 .g-fill.down{stroke:var(--down)}
.chip.v2 .g-tick{fill:var(--muted)}
/* 籌碼儀表直欄：主圖左側（order:-1），由上而下 力道、大戶、散戶、主力 */
#gaugeCol{order:-1;flex:0 0 clamp(190px,13.5vw,250px);min-width:0;overflow-y:auto;border-right:1px solid var(--line);background:var(--panel);padding:6px 6px 8px}
#gaugeCol[hidden]{display:none}
#gaugeCol .gc-h{display:flex;justify-content:space-between;align-items:baseline;gap:4px;margin:0 2px 6px;font-size:13px}
#gaugeCol .gc-h span{font-size:10.5px;color:var(--muted);white-space:nowrap}
/* 直欄撐滿整個高度：四個儀表平均分配高度，內容垂直置中，儀表依可用空間放大 */
#gaugeCol:not([hidden]){display:flex;flex-direction:column}
#gaugeCol .chip.v2{flex:1;min-height:0;display:flex;flex-direction:column}
#gaugeCol .cgrid{flex:1;min-height:0;grid-template-columns:1fr;grid-template-rows:repeat(4,minmax(0,1fr));gap:5px}
#gaugeCol .cdial{display:flex;flex-direction:column;justify-content:center;min-height:0}
/* 儀表圖形只用剩下的高度（數字、名稱優先），雙週期版面高度較矮時名稱不會被切掉 */
#gaugeCol .cdial svg{max-width:none;width:100%;flex:1 1 0;min-height:0;max-height:150px}
#gaugeCol .cdial>b{font-size:clamp(20px,1.7vw,28px)}
#gaugeCol .cdial .dn{font-size:clamp(12.5px,0.9vw,15px)}
#gaugeCol .cx{margin-top:5px;padding:3px 6px;flex:none}
#gaugeCol .cx+.cx{margin-top:3px}
/* 籌碼公式說明依使用者要求隱藏（2026-11-08） */
#gaugeCol .chip-note{display:none}
/* 籌碼欄：A 區（力道、大戶、散戶、主力四個儀表）＋ B 區（台積電大單），高度約 7:3 */
#gaugeCol .chip.v2{flex:2.3 1 0}
#gaugeCol .bo{flex:1 1 0;min-height:0;display:flex;flex-direction:column;margin-top:.4em;padding:.4em .5em .3em;background:var(--panel2);border-radius:6px;overflow:hidden}
.bo-h{display:flex;align-items:center;gap:.45em;white-space:nowrap;min-width:0}
.bo-h b{font-size:1em}
.bo-h small{font-size:.8em;color:var(--muted);overflow:hidden;text-overflow:ellipsis;min-width:0}
.bo-f{margin-left:auto;display:flex;flex:none;border:1px solid var(--line);border-radius:4px;overflow:hidden}
.bo-f button{background:none;border:0;padding:0 .5em;font-size:.82em;line-height:1.6;color:var(--muted);cursor:pointer}
.bo-f button.on{background:var(--accent);color:#111;font-weight:700}
.bo-bar{display:flex;height:.4em;border-radius:3px;overflow:hidden;background:var(--grid);margin:.35em 0 .15em}
.bo-bar i{display:block;height:100%}
.bo-bar i.up{background:var(--up)}.bo-bar i.down{background:var(--down)}
.bo-st{display:flex;justify-content:space-between;align-items:baseline;gap:.4em;font-size:.88em;white-space:nowrap}
.bo-st b{font-size:1.12em}
.bo-cols,.bo-r{display:grid;grid-template-columns:4.7em minmax(0,1fr) 2.6em 2.7em;gap:0 .3em;align-items:baseline;white-space:nowrap}
.bo-cols{font-size:.8em;color:var(--muted);border-bottom:1px solid var(--line);margin-top:.3em;padding-bottom:.1em}
.bo-cols>:not(:first-child),.bo-r>:not(:first-child){text-align:right}
.bo-list{flex:1;min-height:0;overflow:hidden}
.bo-r{font-size:.92em;line-height:1.5;padding:0 .15em;border-radius:3px}
.bo-r span{color:var(--muted)}
.bo-r b{font-weight:600}
.bo-r em{font-style:normal;font-size:.9em}
.bo-r.huge{background:color-mix(in srgb,currentColor 12%,transparent)}
.bo-r.huge b,.bo-r.huge em{font-weight:700}
.bo-empty{color:var(--muted);font-size:.88em;padding:.5em .15em}
body.replaying #gaugeCol .bo{opacity:.35}
/* 籌碼 v3：四個半圓儀表（總分、大戶、散戶、力道）2×2 */
.chip.v2 .cgrid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.chip.v2 .cdial{background:var(--panel2);border-radius:6px;padding:6px 4px 5px;text-align:center;min-width:0}
.chip.v2 .cdial svg{display:block;width:100%;max-width:140px;margin:0 auto}
.chip.v2 .cdial .g-track,.chip.v2 .cdial .g-fill{stroke-width:8}
.chip.v2 .g-tk{stroke:var(--muted);stroke-width:1}
.chip.v2 .cdial>b{display:block;font-size:19px;line-height:1.15;margin-top:1px}
.chip.v2 .cdial .dn{font-size:12px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chip.v2 .cdial .dn span{font-size:11px}
.chip.v2 .cdial .dd{display:flex;justify-content:center;flex-wrap:wrap;gap:0 4px;margin-top:2px;font-size:10.5px;color:var(--muted)}
.chip.v2 .cdial .dd span{font-size:10.5px;white-space:nowrap}
.chip.v2 .cdial .dd i{font-style:normal;font-weight:700;margin-left:2px}
.chip.v2 .cx{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 6px;margin-top:6px;padding:4px 8px;background:var(--panel2);border-radius:6px}
.chip.v2 .cx span{font-size:11px}
.chip.v2 .cx b{font-size:13px}
.chip.v2 .g-needle{stroke:var(--text);stroke-width:2.2;stroke-linecap:round}
.chip.v2 .g-hub{fill:var(--text)}
.chip.v2 .g-lb{fill:var(--muted);font-size:9px}
.chip.v2 .cg-t{display:flex;flex-direction:column;min-width:0}
.chip.v2 .cg-t b{font-size:26px;line-height:1.1}
.chip.v2 .cg-t strong{font-size:14px}
.chip.v2 .cg-t em{font-style:normal;font-size:10.5px;color:var(--muted);margin-top:2px;display:flex;flex-wrap:wrap;gap:0 8px}
.chip.v2 .cg-t em span{white-space:nowrap}
.chip.v2 .cg-t em i{font-style:normal;font-weight:700}
.chip.v2 .cr{background:var(--panel2);border-radius:6px;padding:5px 8px;margin-bottom:4px}
.chip.v2 .cr-h{display:flex;justify-content:space-between;align-items:baseline}
.chip.v2 .cr-h small{font-size:10px;color:var(--muted);margin-left:5px;border:1px solid var(--line);border-radius:3px;padding:0 3px}
.chip.v2 .cr-bar{position:relative;height:7px;border-radius:4px;background:var(--grid);margin:4px 0 3px;overflow:hidden}
.chip.v2 .cr-bar::after{content:"";position:absolute;left:50%;top:-1px;bottom:-1px;width:1px;background:var(--muted)}
.chip.v2 .cr-bar i{position:absolute;top:0;bottom:0}
.chip.v2 .cr-bar i.up{background:var(--up)}.chip.v2 .cr-bar i.down{background:var(--down)}
.chip.v2 .cd{margin-top:0}
.chip.v2 .cd em{font-style:normal;font-size:10.5px;color:var(--muted);margin-right:auto}
/* 權值股貢獻點數（左欄） */
#contribBox{padding:10px 10px 12px;border-top:1px solid var(--line)}
.cb-title{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}
.cb-title b{font-size:13px;color:var(--accent);letter-spacing:1px}
.cb-title span{font-size:11px;color:var(--muted)}
.cb-sum{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.cb-sum div{background:var(--panel2);border-radius:6px;padding:5px 7px}
.cb-sum span{display:block;font-size:11px;color:var(--muted)}
.cb-sum b{font-size:16px}
.cb-split{height:5px;border-radius:3px;background:var(--down);overflow:hidden;margin:8px 0 3px}
.cb-split i{display:block;height:100%;width:50%;background:var(--up)}
.cb-cnt{display:flex;justify-content:space-between;font-size:11px;margin-bottom:6px}
.cb-head,.cb-row{display:grid;grid-template-columns:minmax(0,1fr) 54px 50px;gap:4px;align-items:center}
.cb-head{font-size:11.5px;font-weight:700;padding:6px 4px 3px;border-bottom:1px solid var(--line)}
.cb-head span+span{text-align:right;font-weight:400;color:var(--muted)}
.cb-row{position:relative;padding:3px 4px;font-size:12.5px;border-radius:3px;overflow:hidden}
.cb-row:nth-child(even){background:color-mix(in srgb,var(--panel2) 60%,transparent)}
.cb-row span,.cb-row b{position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cb-row .pc,.cb-row b{text-align:right}
.cb-row .pc{font-size:11.5px}
.cb-row b{font-weight:700}
.cb-row .bar{position:absolute;right:0;top:2px;bottom:2px;opacity:.2;border-radius:2px}
.cb-row .bar.up{background:var(--up)}.cb-row .bar.down{background:var(--down)}
.cb-empty{font-size:12px;color:var(--muted);padding:4px}
.cb-note{font-size:11px;color:var(--muted);margin-top:8px;line-height:1.5}
.ov{margin-top:8px}
.ov td{padding:2px 0}
.ov td+td{text-align:right}
.ov td:first-child{color:var(--muted)}
/* 波浪格局卡片 */
.ew-concl{font-weight:700;font-size:13.5px;line-height:1.5;color:var(--accent);padding:8px 10px;border-radius:8px;
  background:color-mix(in srgb,var(--accent) 10%,transparent);border:1px solid color-mix(in srgb,var(--accent) 35%,transparent)}
.ew-concl.up{color:var(--up);background:color-mix(in srgb,var(--up) 10%,transparent);border-color:color-mix(in srgb,var(--up) 40%,transparent)}
.ew-concl.down{color:var(--down);background:color-mix(in srgb,var(--down) 10%,transparent);border-color:color-mix(in srgb,var(--down) 40%,transparent)}
.ew-dirs{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:12px;margin:8px 0 2px;color:var(--muted)}
.ew-concl b{display:block;font-size:14px}
.ew-concl span{display:block;margin-top:2px;font-size:12.5px;font-weight:500;color:var(--text);opacity:.9}
.ew-deg{margin-top:8px;padding:7px 10px 7px 11px;border-radius:8px;background:var(--panel2);border-left:3px solid var(--line)}
.ew-deg .hd{display:flex;align-items:center;gap:6px;min-width:0}
.ew-deg .hd b{font-size:13.5px;flex:none}
.ew-deg .tag{font-size:12px;font-weight:700;padding:0 6px;border-radius:4px;background:color-mix(in srgb,currentColor 14%,transparent);white-space:nowrap}
.ew-deg .tag.warn{color:var(--up)}
.ew-deg .wv{font-size:12px;color:var(--text);white-space:nowrap}
.ew-deg .tm{margin-left:auto;font-size:11px;color:var(--muted);white-space:nowrap}
.ew-deg .lv{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;margin-top:5px;font-size:12.5px}
.ew-deg .lv>span{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ew-deg .lv>span.sub{grid-column:1/3;white-space:normal}
.ew-deg .lv i{font-style:normal;margin-right:3px}
.ew-deg .lv em{font-style:normal;font-size:11px;color:var(--muted);margin-left:4px}
.ew-deg .lv em.warn{color:var(--up);font-weight:700}
.ew-deg .tgt{color:var(--accent)}
.ew-deg .inv{color:#ff8a65}
.ew-deg .warn{color:var(--up);font-weight:700}
.ew-deg .sub{color:var(--muted);font-size:11.5px}
.ew-deg.hit{background:color-mix(in srgb,var(--up) 12%,var(--panel2))}
.ew-deg details{margin-top:5px;font-size:12px}
.ew-deg summary{cursor:pointer;color:var(--muted)}
.ew-deg details p{margin:4px 0 0;line-height:1.5;color:var(--text)}
.ew-help{margin-top:10px;font-size:12px;color:var(--muted)}
.ew-help summary{cursor:pointer}
.ew-help p{margin:6px 0 0;line-height:1.55}
.alert-add{display:flex;gap:6px}
.alert-add input{flex:1;min-width:0;background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:4px 8px}
.alist{margin:8px 0 0;padding:0;list-style:none}
.alist li{display:flex;justify-content:space-between;align-items:center;padding:3px 0;color:var(--alert)}
.alist li.empty{color:var(--muted)}
.alist button{background:none;border:0;color:var(--muted);cursor:pointer}
.muted{color:var(--muted);font-size:12px}

#toasts{position:fixed;right:16px;bottom:36px;display:flex;flex-direction:column;gap:8px;z-index:9}
.toast{background:var(--panel2);border:1px solid var(--alert);border-left:4px solid var(--alert);
  padding:10px 14px;border-radius:6px;box-shadow:0 6px 20px rgba(0,0,0,.35);max-width:320px;white-space:pre-line}

.iconbtn.accent{color:var(--accent);font-weight:700}

/* 指標設定抽屜 */
.drawer{position:fixed;top:46px;right:0;bottom:0;width:400px;max-width:100vw;z-index:8;overflow:auto;
  background:var(--panel);border-left:1px solid var(--line);box-shadow:-10px 0 30px rgba(0,0,0,.35)}
.drawer-head{position:sticky;top:0;display:flex;justify-content:space-between;align-items:center;
  padding:10px 14px;background:var(--panel);border-bottom:1px solid var(--line);z-index:1}
.drawer-head b{font-size:15px}
.drawer-sec{padding:10px 14px;border-bottom:1px solid var(--line)}
.drawer-sec h4{margin:0 0 8px;font-size:13px;color:var(--accent)}
.drawer-sec summary{cursor:pointer;font-weight:600;color:var(--accent)}
.drawer-sec[open] summary{margin-bottom:8px}
.vis-grid,.fgrid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.f{display:flex;align-items:center;justify-content:space-between;gap:6px;background:var(--panel2);
  border:1px solid var(--line);border-radius:6px;padding:5px 8px;color:var(--text);min-width:0}
.f.chk{justify-content:flex-start;cursor:pointer;color:var(--text)}
.f.off{opacity:.45;cursor:default}
.f input[type=number],.f input[type=time],.f input[type=datetime-local],.f select{max-width:58%;min-width:0;
  background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:2px 4px}
.f input[type=number]{width:64px}
.f input[type=color]{width:34px;height:22px;padding:0;border:0;background:none}
.f input:disabled{opacity:.4}
.drawer-sec > .f{margin-bottom:6px}

/* 登入 */
.overlay{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
  background:color-mix(in srgb,var(--bg) 80%,transparent);z-index:10;padding:16px}
.login-card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:22px;width:320px;max-width:100%;
  display:flex;flex-direction:column;gap:10px;box-shadow:0 10px 40px rgba(0,0,0,.4)}
.login-card h2{margin:0;font-size:17px}
.login-card input{background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:8px 10px;font-size:18px;letter-spacing:3px;text-align:center}
.login-card .iconbtn{padding:8px;font-weight:700;color:var(--accent)}
.linkbtn{background:none;border:0;color:var(--muted);cursor:pointer;text-decoration:underline;font-size:12px}
#loginErr{color:var(--up);min-height:16px}
.login-tabs{width:100%}
.login-tabs button{flex:1;padding:6px 4px}
.login-pane{display:flex;flex-direction:column;gap:8px}
.login-card input.text{letter-spacing:0;text-align:left;font-size:15px}
.user-chip{color:var(--muted);font-size:12.5px;white-space:nowrap}
a.iconbtn{text-decoration:none;white-space:nowrap;color:var(--text)}

/* 帳號管理 */
.admin-body{overflow:auto}
.admin-head{position:sticky;top:0;z-index:2}
.admin-head .sub{color:var(--muted);font-size:12px}
.admin-wrap{max-width:1180px;margin:0 auto;padding:18px 16px 40px;display:flex;flex-direction:column;gap:16px}
.stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:10px}
.stat{padding:14px 16px}
.stat span{display:block;color:var(--muted);font-size:12.5px;margin-bottom:6px}
.stat b{font-size:26px;color:var(--accent);font-variant-numeric:tabular-nums}
.stat input[type=date]{background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:6px 8px;color-scheme:dark}
:root[data-theme="light"] .stat input[type=date]{color-scheme:light}
.card-head{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;padding:14px 16px;border-bottom:1px solid var(--line)}
.card-head .eyebrow{color:var(--accent);font-size:11px;letter-spacing:2px}
.card-head h2{margin:2px 0 0;font-size:19px}
.card-head p{margin:2px 0 0;color:var(--muted);font-size:12px}
.table-wrap{overflow-x:auto}
table.data th{text-align:left;color:var(--muted);font-weight:600;font-size:12px;padding:9px 16px;border-bottom:1px solid var(--line);white-space:nowrap}
table.data td{padding:10px 16px;border-bottom:1px solid var(--line);white-space:nowrap}
table.data tr:last-child td{border-bottom:0}
table.data td.empty{color:var(--muted);text-align:center;padding:18px}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--down);margin-right:7px;box-shadow:0 0 6px var(--down)}
.badge{display:inline-block;padding:1px 8px;border-radius:10px;font-size:12px;border:1px solid var(--line)}
.badge.on{color:var(--down);border-color:color-mix(in srgb,var(--down) 50%,transparent)}
.badge.off{color:var(--muted)}
.actions{display:flex;gap:6px}
.iconbtn.sm{padding:3px 9px;font-size:12.5px}
.iconbtn.danger{color:var(--up)}
.notice{padding:10px 14px;border-radius:8px;border:1px solid var(--up);color:var(--up)}
dialog.modal{background:var(--panel);color:var(--text);border:1px solid var(--line);border-radius:10px;padding:0;width:360px;max-width:calc(100vw - 32px)}
dialog.modal::backdrop{background:rgba(0,0,0,.55)}
dialog.modal form{display:flex;flex-direction:column;gap:10px;padding:18px}
dialog.modal h3{margin:0 0 4px;font-size:16px}
dialog.modal label{display:flex;flex-direction:column;gap:4px;color:var(--muted);font-size:12.5px}
dialog.modal input,dialog.modal select{background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:7px 9px;color:var(--text);font-size:14px}
dialog.modal .row{display:flex;gap:6px}
dialog.modal .row input{flex:1;min-width:0}
dialog.modal .err{color:var(--up);min-height:16px;font-size:12.5px}
dialog.modal .btns{display:flex;justify-content:flex-end;gap:8px}
@media (max-width:900px){.stats{grid-template-columns:repeat(2,minmax(0,1fr))}}

@media (max-width:900px){
  main{display:flex;flex-direction:column;height:auto}
  #left{border-right:0;overflow:visible}
  #watch{display:flex;overflow-x:auto;border-bottom:1px solid var(--line)}
  .wgroup{display:none}
  .wrow{min-width:168px;border-left:0;border-bottom:3px solid transparent;white-space:nowrap}
  .wrow.sel{border-bottom-color:var(--accent)}
  #chartWrap{height:62vh;flex:none}
  #charts{flex-direction:column}
  #gaugeCol{order:0;flex:none;border-right:0;border-top:1px solid var(--line)}
  #gaugeCol .cgrid{grid-template-columns:1fr 1fr}
  #gaugeCol .chip.v2{flex:none}
  #gaugeCol .bo{flex:none;height:15em}
  #side{border-left:0}
  .hdr-info .opt{display:none}
  .hint{display:none}
  footer{height:auto;white-space:normal;padding:6px 14px}
}

/* ───── 台股即時熱力圖 ───── */
#pageHeatmap{position:relative}
.hm-body{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px;padding:10px 14px 8px}
.hm-body .fc-cards{grid-template-columns:repeat(5,minmax(0,1fr));flex:none}
.hm-body .fc-cards div{padding:7px 12px}
.hm-body .fc-cards b i{font-style:normal}
.hm-main{flex:1;min-height:0;display:flex;gap:10px}
#hmMap{position:relative;flex:1;min-width:0;min-height:260px;background:#0b0f14;border-radius:6px;overflow:hidden}
.hm-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--muted)}
.hm-sec{position:absolute;box-sizing:border-box;border:1px solid #0b0f14;pointer-events:none}
.hm-sh{position:absolute;left:0;right:0;top:0;height:17px;display:flex;gap:8px;align-items:center;padding:0 6px;background:#0b0f14;
  font-size:11.5px;color:#c8ced6;white-space:nowrap;overflow:hidden}
.hm-sh b{color:#d9ad55;font-weight:600}
.hm-sh .up{color:#e8797b}.hm-sh .down{color:#5cb98d}.hm-sh .flat{color:#aab3bf}
/* 熱力圖頁的紅綠改用較柔和的色調，避免整片高彩度刺眼 */
#pageHeatmap{--up:#e0676a;--down:#47ad80}
.hm-t{position:absolute;box-sizing:border-box;border:1px solid #0b0f14;overflow:hidden;color:#e6ebf1;cursor:default;
  display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;line-height:1.25;padding:1px 2px}
.hm-t b,.hm-t i,.hm-t em{display:none;white-space:nowrap;font-style:normal;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.hm-t.sm b{display:block;font-size:11px;font-weight:500}
.hm-t.md b,.hm-t.xl b{display:block;font-size:13px;font-weight:600}
.hm-t.md i,.hm-t.xl i{display:block;font-size:12px;color:#f3f6f9}
.hm-t.xl b{font-size:clamp(14px,1.9vw,26px)}
.hm-t.xl i{font-size:clamp(12px,1.2vw,18px);font-weight:600}
.hm-t.xl em{display:block;font-size:11.5px;color:#b9c3cf}
.hm-t:hover{border-color:#c8ced6}
/* 漲跌停：方塊上緣一條細琥珀色線＋文字標示（大量漲跌停時不會滿版黃框） */
.hm-t.lim::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:#c99a2e}
.hm-t i small{font-size:.8em;color:#e9c46a;margin-left:3px}
.u1{background:#4a2c33}.u2{background:#6b2d34}.u3{background:#8f3037}.u4{background:#b3353c}
.d1{background:#233d36}.d2{background:#22533f}.d3{background:#226a4a}.d4{background:#228255}
.f0{background:#323a47}
#hmSectors{flex:0 0 290px;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:8px 10px}
#hmSectors h4{margin:0 0 6px;font-size:13px;color:var(--accent);display:flex;justify-content:space-between;align-items:baseline}
#hmSectors h4 span{font-size:11px;color:var(--muted);font-weight:400}
.hm-sr{display:grid;grid-template-columns:92px minmax(0,1fr) 58px 54px;gap:6px;align-items:center;font-size:12px;padding:4px 0;border-bottom:1px solid var(--grid)}
.hm-sr .nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hm-sr .nm small{margin-left:4px;font-size:10.5px;color:var(--muted)}
.hm-sr .tr{position:relative;height:8px;background:var(--grid);border-radius:4px}
.hm-sr .tr::after{content:"";position:absolute;left:50%;top:-2px;bottom:-2px;width:1px;background:var(--muted)}
.hm-sr .tr i{position:absolute;top:0;bottom:0;border-radius:4px}
.hm-sr .tr i.up{background:var(--up)}.hm-sr .tr i.down{background:var(--down)}.hm-sr .tr i.flat{background:var(--flat)}
.hm-sr>span:nth-child(3),.hm-sr>b{text-align:right}
.hm-legend{flex:none;display:flex;align-items:center;gap:2px;flex-wrap:wrap;font-size:11.5px;color:var(--muted)}
.hm-legend i{display:inline-block;width:26px;height:10px}
.hm-legend span{margin:0 4px}
.hm-legend .hm-lg-t{margin-left:12px}
.hm-tip{position:absolute;z-index:20;min-width:190px;background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:8px 10px;
  font-size:12px;pointer-events:none;box-shadow:0 4px 14px rgba(0,0,0,.35)}
.hm-tip[hidden]{display:none}
.hm-tip b{display:block;font-size:13px}
.hm-tip>span{color:var(--muted);font-size:11px}
.hm-tip dl{display:grid;grid-template-columns:auto 1fr;gap:2px 12px;margin:6px 0 0}
.hm-tip dt{color:var(--muted)}.hm-tip dd{margin:0;text-align:right}
@media (max-width:900px){
  .hm-body .fc-cards{grid-template-columns:repeat(2,minmax(0,1fr))}
  .hm-main{flex-direction:column}
  #hmMap{min-height:60vh}
  #hmSectors{flex:none}
}

/* ───── 直播模式（?live）：OBS 瀏覽器來源 1920×1080；1em＝畫面寬 / 120（1920 寬時 16px） ───── */
.live-only{display:none}
body.live{display:grid;grid-template-rows:auto minmax(0,1fr) auto;height:100vh;overflow:hidden;font-size:calc(100vw / 120)}
body.live .live-only:not([hidden]){display:flex}
body.live header,body.live footer,body.live #left,body.live #side,body.live #dock,body.live .toolbar,body.live .hint,
body.live .page,body.live #toasts,body.live .drawer,body.live #chipNote{display:none !important}
body.live main{display:block;height:auto;min-height:0}
body.live #center{height:100%}
/* 頂部：標誌｜四檔報價｜日期時鐘盤別 */
#liveTop{align-items:center;gap:1.4em;padding:.7em 1.2em;background:var(--panel);border-bottom:1px solid var(--line)}
.lv-logo{font-size:1.7em;font-weight:700;letter-spacing:.04em;white-space:nowrap}
.lv-logo b{color:var(--accent)}
.lv-logo span{margin-left:.5em;padding:.05em .45em;border-radius:.3em;font-size:.5em;vertical-align:middle;background:var(--up);color:#fff;letter-spacing:.1em}
/* 7 檔報價：加權、台積電、台指期、小道瓊、小那斯達克、日經、KOSPI */
/* 欄寬依內容（數字長短不同）自動分配，剩餘空間平均放在欄與欄之間 */
.lv-quotes{flex:1;display:flex;justify-content:space-between;gap:.9em;min-width:0}
.lv-q{flex:0 1 auto;min-width:0;overflow:hidden}
.lv-q>span{display:block;font-size:1em;color:var(--muted);white-space:nowrap}
.lv-q>div{display:flex;align-items:center;gap:.45em;white-space:nowrap}
.lv-q b{font-size:1.6em;font-weight:700;line-height:1.15}
.lv-q em{font-style:normal;font-size:.8em;line-height:1.2}
.lv-time{flex-direction:column;align-items:flex-end;gap:.15em;white-space:nowrap}
.lv-time span:first-child{font-size:1em;color:var(--muted)}
.lv-time b{font-size:1.9em;font-weight:700}
.lv-time .pill{font-size:.9em;padding:.1em .7em;border-radius:1em}
/* 籌碼：力道、大戶、散戶、主力四個儀表，放在最左側 */
body.live #gaugeCol{order:-1;flex:0 0 17em;border-left:0;border-right:1px solid var(--line);padding:.7em .7em .8em}
/* 右側：波浪目標規劃（各級別卡片：方向／第幾波、◎○ 目標、✕ 失效） */
#liveSide{order:2;flex:0 0 21em;flex-direction:column;gap:.6em;min-width:0;overflow:hidden;padding:.7em .8em;background:var(--panel);border-left:1px solid var(--line)}
.ls-h{display:flex;justify-content:space-between;align-items:baseline;font-size:1.2em}
.ls-h span{font-size:.75em;color:var(--muted)}
#lsDegs{display:flex;flex-direction:column;gap:.6em;min-height:0}
.ls-deg{padding:.6em .8em;border-radius:.5em;background:var(--panel2);border-left:.25em solid var(--line)}
.ls-deg.hit{background:color-mix(in srgb,var(--up) 12%,var(--panel2))}
.ls-hd{display:flex;align-items:center;gap:.5em;margin-bottom:.35em;white-space:nowrap}
.ls-hd b{font-size:1.3em}
.ls-tag{font-size:.95em;font-weight:700;padding:0 .45em;border-radius:.3em;background:color-mix(in srgb,currentColor 14%,transparent)}
.ls-wv{font-size:.95em;color:var(--text)}
.ls-row{display:flex;align-items:baseline;gap:.45em;font-size:1.05em;line-height:1.55;white-space:nowrap}
.ls-row i{font-style:normal;width:1.1em;text-align:center}
.ls-row b{font-size:1.25em}
.ls-row em{font-style:normal;font-size:.85em;color:var(--muted)}
.ls-row em.warn{color:var(--up);font-weight:700}
.ls-row.tgt{color:var(--accent)}
.ls-row.tgt2{color:color-mix(in srgb,var(--accent) 65%,var(--muted))}
.ls-row.inv{color:#ff8a65}
.ls-row.muted{color:var(--muted)}
.ls-empty{color:var(--muted)}
/* 右側：十大權值股熱力圖（填滿波浪卡片下方剩餘空間；色階沿用熱力圖頁 u1–u4／d1–d4／f0） */
.ls-hm{flex:1 1 0;min-height:9em;display:flex;flex-direction:column;gap:.35em}
.ls-hm-h{display:flex;justify-content:space-between;align-items:baseline;font-size:1.05em}
.ls-hm-h span{font-size:.8em;color:var(--muted)}
#lsHm{position:relative;flex:1;min-height:0;border-radius:.4em;overflow:hidden;color:var(--muted);font-size:.9em}
.ls-t{position:absolute;box-sizing:border-box;border:1px solid #0b0f14;overflow:hidden;color:#e6ebf1;
  display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;line-height:1.2;padding:2px}
.ls-t b,.ls-t span,.ls-t em{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-style:normal}
.ls-t b{font-weight:700}
.ls-t span{font-size:.92em}
.ls-t em{font-size:.78em;opacity:.85}
.ls-t.lim::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:#c99a2e}
/* 波浪符號說明：緊接在波浪卡片下方 */
.ls-note{margin-top:-.25em;font-size:.85em;color:var(--muted);line-height:1.5;text-align:right}
/* 雙週期：左圖（p，預設 1 分）、右圖（p2，預設 5 分）各半；右圖沿用 #miniWrap／#chart2 */
body.live.live-dual #miniWrap.d-only{display:block !important;position:relative;flex:1 1 0;min-width:0;min-height:0;border-left:1px solid var(--line)}
body.live.live-dual #chartWrap{flex:1 1 0}
body.live #gaugeCol .gc-h{font-size:1.2em;margin:0 .2em .4em}
body.live #gaugeCol .gc-h span{font-size:.75em}
body.live #gaugeCol .cgrid{grid-template-rows:repeat(4,minmax(0,1fr));gap:.5em}
body.live #gaugeCol .cdial svg{max-height:none}
body.live #gaugeCol .cdial>b{font-size:2.05em}
body.live #gaugeCol .cdial .dn{font-size:1.15em}
body.live #gaugeCol .bo{font-size:1.05em;margin-top:.5em}
/* 底部：試撮｜帳號｜重播｜警語跑馬燈（跑馬燈 flex:1 佔滿右側；波浪結論已移到右側欄） */
#liveBottom{align-items:center;gap:1.2em;padding:.65em 1.6em;background:var(--panel);border-top:1px solid var(--line);font-size:1.15em}
/* 右側最上方：波浪結論（判斷＋怎麼做，兩行） */
.lv-wave{padding:.6em .8em;border-radius:.5em;color:var(--accent);line-height:1.45;
  background:color-mix(in srgb,currentColor 10%,transparent);border:1px solid color-mix(in srgb,currentColor 40%,transparent)}
.lv-wave:empty{display:none}
.lv-wave.up{color:var(--up)}.lv-wave.down{color:var(--down)}
.lv-wave i{display:none}
.lv-trial i{font-style:normal;font-size:.8em;padding:.1em .55em;border-radius:.3em;background:var(--panel2);color:var(--muted)}
.lv-wave b{display:block;font-size:1.15em}
.lv-wave span{display:block;margin-top:.2em;font-size:.95em;color:var(--text)}
.lv-trial{align-items:baseline;gap:.6em;color:var(--accent);white-space:nowrap}
.lv-trial b{font-size:1.2em}
.lv-trial span{color:var(--muted)}
/* 直播：重播按鈕與控制列（字級隨畫面放大） */
.lv-btn{flex:none;font-size:.95em;padding:.25em .9em;border-radius:.4em;background:var(--panel2);border:1px solid var(--line);color:var(--text);cursor:pointer;white-space:nowrap}
.lv-btn:hover,.lv-btn.on{border-color:var(--accent);color:var(--accent)}
/* 直播週期切換：四顆按鈕連成一組 */
.lv-periods{display:flex;flex:none}
.lv-periods .lv-btn{padding:.25em .7em;border-radius:0;margin-left:-1px}
.lv-periods .lv-btn:first-child{border-radius:.4em 0 0 .4em;margin-left:0}
.lv-periods .lv-btn:last-child{border-radius:0 .4em .4em 0}
.lv-periods .lv-btn.on{position:relative;background:color-mix(in srgb,var(--accent) 14%,var(--panel2))}
body.live #replayBar{font-size:1.05em;bottom:2.4em;gap:.5em;padding:.4em .8em}
body.live #replayBar>span{gap:.5em}
body.live #replayBar button,body.live #replayBar select{font-size:1em;padding:.15em .6em}
/* 直播：行情中斷畫面（取代登入框；畫面淡化保留最後行情，中間顯示等待重連） */
.live-lost{display:none}
body.live .live-lost:not([hidden]){display:flex;position:fixed;inset:0;z-index:20;align-items:center;justify-content:center;
  background:color-mix(in srgb,var(--bg) 62%,transparent);backdrop-filter:blur(2px)}
.ll-card{font-size:1.3em;display:flex;flex-direction:column;align-items:center;gap:.55em;padding:1.6em 2.6em;border-radius:.8em;
  background:var(--panel);border:1px solid var(--line);box-shadow:0 1em 3em rgba(0,0,0,.45);text-align:center}
.ll-card b{font-size:1.9em;letter-spacing:.08em;color:var(--warn,#f0b429)}
.ll-card>span{font-size:1.1em;color:var(--text)}
.ll-meta{display:flex;gap:1.4em;font-size:.95em;color:var(--muted);font-variant-numeric:tabular-nums}
.ll-meta span:empty{display:none}
.ll-icon{display:flex;gap:.45em;height:1.4em;align-items:center;margin-bottom:.2em}
.ll-icon i{width:.6em;height:.6em;border-radius:50%;background:var(--accent);animation:llPulse 1.2s ease-in-out infinite}
.ll-icon i:nth-child(2){animation-delay:.2s}
.ll-icon i:nth-child(3){animation-delay:.4s}
@keyframes llPulse{0%,80%,100%{opacity:.25;transform:scale(.7)}40%{opacity:1;transform:scale(1.1)}}
body.live #login{z-index:30}

/* 直播底部：版權及風險警語跑馬燈（佔滿試撮與重播按鈕之間的空間） */
.lv-ticker{flex:1 1 0;min-width:0;overflow:hidden;contain:inline-size;align-self:stretch;display:flex;align-items:center;
  border:1px solid color-mix(in srgb,var(--accent) 35%,var(--line));border-radius:.4em;background:var(--panel2);
  mask-image:linear-gradient(90deg,transparent,#000 2.5em,#000 calc(100% - 2.5em),transparent)}
.lv-ticker-track{display:flex;width:max-content;animation:lvTicker 60s linear infinite}
.lv-ticker-track span{flex:none;padding-right:5em;white-space:nowrap;color:var(--text);font-size:.95em}
.lv-ticker-track b{color:var(--accent);margin-right:1em;padding:.05em .55em;border-radius:.3em;background:color-mix(in srgb,var(--accent) 16%,transparent)}
.lv-ticker-track strong{color:var(--accent)}
@keyframes lvTicker{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media (prefers-reduced-motion:reduce){.lv-ticker-track{animation-duration:180s}}
body.live{grid-template-columns:minmax(0,1fr)}
body.live #liveBottom{min-width:0}
/* 直播底部帳號工具 */
.lv-acct{display:none}
body.live .lv-acct:not([hidden]){display:flex;align-items:center;gap:.5em;flex:none;white-space:nowrap}
.lv-acct span{color:var(--muted);font-size:.9em}
.lv-acct a.lv-btn{text-decoration:none}
/* 本機管理員：平時隱藏（直播不入鏡），滑鼠移到底部列才出現 */
body.live .lv-acct.peek{opacity:0;transition:opacity .2s}
body.live #liveBottom:hover .lv-acct.peek,body.live .lv-acct.peek:focus-within{opacity:1}

/* ───── 直播手機版（寬度 ≤ 820px，或手機橫向）：改成上下捲動的單欄版面 ─────
   順序：頂部（標誌＋時鐘／報價左右滑）→ K 棒主圖＋副圖 → 四個籌碼儀表一排 → 波浪結論與各級目標 → 十大權值股 → 警語跑馬燈與帳號 */
@media (max-width:820px), (max-height:520px) and (pointer:coarse){
  body.live{display:block;height:auto;min-height:100vh;overflow:visible;font-size:13px}
  body.live main,body.live #center{display:block;height:auto}
  #liveTop{position:sticky;top:0;z-index:6;flex-wrap:wrap;gap:.35em .8em;padding:.5em .8em .45em}
  .lv-logo{font-size:1.35em;order:1}
  .lv-time{order:2;margin-left:auto;flex-direction:row;align-items:center;gap:.5em}
  .lv-time span:first-child{display:none}
  .lv-time b{font-size:1.25em}
  .lv-time .pill{font-size:.8em}
  /* 報價列：一排可左右滑動 */
  .lv-quotes{order:3;flex:1 0 100%;justify-content:flex-start;gap:1.1em;overflow-x:auto;scrollbar-width:none;padding-bottom:.1em;-webkit-overflow-scrolling:touch}
  .lv-quotes::-webkit-scrollbar{display:none}
  .lv-q{flex:none;overflow:visible}
  .lv-q>span{font-size:.85em}
  .lv-q b{font-size:1.25em}
  .lv-q em{font-size:.75em}
  /* 週期按鈕：由 pro.js 移到頂部，放在報價列下方、一整排四等分 */
  #liveTop .lv-periods{order:4;flex:1 0 100%;margin-top:.15em}
  #liveTop .lv-periods .lv-btn{flex:1 1 0;font-size:1em;padding:.3em 0;text-align:center}
  body.live #charts{display:flex;flex-direction:column}
  body.live #chartWrap{order:0;flex:none;height:clamp(320px,60vh,560px)}
  /* 手機上：左右拖曳＝移動 K 棒、上下滑＝捲動頁面、雙指＝縮放 */
  body.live #chart{touch-action:pan-y}
  /* 籌碼：四個儀表排成一排 */
  body.live #gaugeCol{order:1;flex:none;border-right:0;border-top:1px solid var(--line);padding:.5em .6em .6em;overflow:visible}
  body.live #gaugeCol .gc-h{font-size:1em;margin:0 .2em .3em}
  body.live #gaugeCol .chip.v2{flex:none}
  body.live #gaugeCol .cgrid{grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:auto;gap:.4em}
  body.live #gaugeCol .cdial svg{flex:none;width:100%;height:auto;max-height:90px}
  body.live #gaugeCol .cdial>b{font-size:1.35em}
  body.live #gaugeCol .cdial .dn{font-size:.85em}
  body.live #gaugeCol .bo{flex:none;height:15em;font-size:1em}
  /* 波浪＋權值股 */
  #liveSide{order:2;flex:none;overflow:visible;border-left:0;border-top:1px solid var(--line);padding:.7em .8em .8em}
  .ls-h{font-size:1.1em}
  .ls-row{white-space:normal;flex-wrap:wrap}
  .ls-hm{flex:none;height:250px}
  /* 底部：跑馬燈一整排，下面放帳號與警語（重播在手機不提供） */
  #liveBottom{flex-wrap:wrap;gap:.5em .8em;padding:.6em .8em calc(.6em + env(safe-area-inset-bottom));font-size:1em}
  .lv-ticker{flex:1 0 100%;order:-1;min-height:2.2em}
  #lvReplay,body.live #replayBar{display:none !important}
  .lv-acct.peek{display:none !important}
  body.live .lv-acct:not([hidden]){margin-left:auto}
  .ll-card{font-size:1em;padding:1.2em 1.4em;margin:0 1em}
  body.live .login-card{width:min(320px,calc(100vw - 32px))}
}

/* 帳號管理：未登入天數 */
.idle small{margin-left:.6em;font-size:12px;color:var(--muted)}
.idle small.warn{color:var(--up);font-weight:700}
