:root{--up:#ff3b3b;--dn:#22c55e;--flat:#e5e5e5;--fs:clamp(12px,.68vw,17px);--fs-sm:calc(var(--fs) - 1px);--fs-quote:clamp(16px,1.05vw,22px);
 --zh:"Noto Sans TC","Noto Sans CJK TC","PingFang TC","Microsoft JhengHei",sans-serif;--num:"JetBrains Mono","DejaVu Sans Mono",Consolas,monospace;--panel:#0a0a0a;--line:#2a2a2a}
*{box-sizing:border-box}html,body{height:100%}
body{margin:0;background:#000;color:#ddd;font:var(--fs)/1.45 var(--zh);display:flex;flex-direction:column;overflow:hidden}
.n,td.n,.num,b.num{font-family:var(--num);font-variant-numeric:tabular-nums}
.up{color:var(--up)}.dn{color:var(--dn)}.fl{color:var(--flat)}.mut{color:#808080}.warn{color:#c9a227}.err{color:#ff6b6b}
#menu,#qbar,#sub{display:flex;align-items:center;gap:4px;padding:0 10px;border-bottom:1px solid #1d1d1d;white-space:nowrap}
#menu{background:var(--panel);height:38px}#menu a{padding:4px 10px;cursor:pointer;font-size:calc(var(--fs) + 1px)}#menu a.on{background:#f5c518;color:#000;border-radius:3px}
.logo{color:#38bdf8;font-weight:bold;margin-right:10px;font-size:calc(var(--fs) + 2px)}a.dis,.qi.dis{color:#555!important;cursor:not-allowed}
.qwrap{position:relative;margin-left:12px}#q{background:#111;border:1px solid #333;color:#fff;padding:4px 10px;width:250px;font:inherit}#q:focus{border-color:#0ea5e9;outline:none}
#qerr{position:absolute;left:4px;top:30px;font-size:var(--fs-sm);white-space:nowrap;z-index:70}
#sugg{position:absolute;top:30px;left:0;width:330px;max-height:360px;overflow:auto}#sugg a{display:flex;gap:10px;padding:4px 10px}#sugg a.hi,#sugg a:hover{background:#1f2937}#sugg a.dead{color:#666}
#sugg .c{font-family:var(--num);min-width:56px}#sugg .x{margin-left:auto;color:#777;font-size:var(--fs-sm)}
select,button,input{font:inherit;font-size:var(--fs-sm)}select,button{background:#1a1a1a;color:#ddd;border:1px solid #333;padding:2px 8px;cursor:pointer;border-radius:3px}
button.on{background:#0ea5e9;color:#000;border-color:#0ea5e9}button:disabled,select:disabled{color:#555;cursor:not-allowed}
.sp{flex:1}.fsl{margin-right:6px}
#qbar{height:46px;gap:40px;background:#000}.qi{cursor:pointer;display:flex;align-items:baseline;gap:8px}.qi i{font-style:normal;color:#bbb;font-size:calc(var(--fs) + 1px)}
.qi b{font-family:var(--num);font-size:var(--fs-quote);font-weight:700}.qi small{font-family:var(--num);color:#777;font-size:var(--fs-sm)}.qi b small{color:inherit;font-weight:400}
#asof{font-size:var(--fs-sm);color:#aaa;cursor:help}#asof .dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#c9a227;margin-right:5px}
#sub{height:32px;background:var(--panel)}#sub a{padding:4px 14px;cursor:pointer;color:#bbb}#sub a.on{color:#fff;border-bottom:2px solid #38bdf8}
#ws{flex:1;display:flex;flex-direction:column;min-height:0;padding:6px;gap:0}
.row{display:flex;min-height:60px}
.cell{display:flex;flex-direction:column;min-width:140px;border:1px solid var(--line);border-radius:4px;background:var(--panel);overflow:hidden;position:relative}
.gh{width:8px;cursor:col-resize;flex:none}.gv{height:8px;cursor:row-resize;flex:none}.gh:hover,.gv:hover,.gh.drag,.gv.drag{background:#0ea5e9}
.ph{display:flex;align-items:center;gap:4px;padding:5px 10px;font-size:calc(var(--fs) + 2px);font-weight:bold;border-bottom:1px solid #1d1d1d;background:#0d0d0d}
.ph .t{flex:1;cursor:grab;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ph button{padding:0 6px;font-size:var(--fs-sm);min-width:24px;height:22px}
.pb{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;position:relative}.pb.scroll{overflow:auto;padding:8px 10px}
.cell.full{position:fixed;inset:0;z-index:50;--fs:calc(clamp(12px,.68vw,17px) + 1px)}.cell.dragover{outline:2px dashed #0ea5e9}
.fullhint{display:none;position:absolute;right:120px;top:6px;z-index:60;color:#000;background:#c9a227;padding:0 8px;border-radius:3px;font-size:var(--fs-sm)}.cell.full .fullhint{display:block}
.tb{display:flex;gap:4px;padding:4px 10px;align-items:center;flex-wrap:nowrap;flex:none;overflow-x:auto;scrollbar-width:thin;white-space:nowrap}
.tb button.period{min-width:38px;height:26px;font-size:var(--fs)}.tb .gap{width:10px}
.info{padding:1px 10px;font-size:var(--fs);line-height:1.5;white-space:nowrap;overflow-x:auto;overflow-y:hidden;flex:none;scrollbar-width:none;font-family:var(--zh)}
.info .n{margin-left:2px}.info .k{color:#999;margin-left:8px}
.chart{position:relative;min-height:0}#tv-attr-logo{opacity:.35}
.vh{height:6px;cursor:row-resize;background:#111;flex:none}.vh:hover{background:#0ea5e9}
.subhd{display:flex;align-items:center;gap:6px;padding:1px 10px;font-size:var(--fs-sm);background:#060606;flex:none;white-space:nowrap;overflow:hidden}.subhd .tg{cursor:pointer;color:#888;padding:0 4px}
.itabs{display:flex;gap:2px;padding:3px 8px;flex:none;flex-wrap:wrap}.itabs a{padding:3px 12px;cursor:pointer;color:#ccc;font-size:var(--fs)}.itabs a.on{background:#0ea5e9;color:#000;border-radius:3px}
.hl{position:absolute;z-index:5;font:var(--fs-sm) var(--num);padding:0 4px;border:1px solid;background:#000;pointer-events:none;white-space:nowrap}
.tolatest{position:absolute;right:90px;bottom:8px;z-index:6;display:none;background:#0ea5e9;color:#000;border:none;font-weight:bold}
table{width:100%;border-collapse:collapse}th{background:#1c2230;color:#bbb;font-weight:normal;padding:5px 8px;position:sticky;top:0;z-index:1}
td{white-space:nowrap;padding:4px 8px;border-bottom:1px solid #151515}td.n,th.n{text-align:right;padding-right:12px}tr.hov:hover{background:#1f2937;cursor:pointer}
label{font-size:var(--fs-sm);margin-right:6px;cursor:pointer;white-space:nowrap}label.dis{color:#555;cursor:not-allowed}
#status{height:26px;padding:3px 10px;font-size:var(--fs-sm);background:var(--panel);border-top:1px solid #1d1d1d;color:#c9a227;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
#status .e{color:#f5c518}
.pop{display:none;position:fixed;z-index:80;background:#111;border:1px solid #444;padding:4px;box-shadow:0 6px 20px #000c}.pop a{display:block;padding:5px 14px;cursor:pointer}.pop a:hover{background:#222}
#toast{position:fixed;right:12px;top:84px;z-index:90;display:flex;flex-direction:column;gap:6px;pointer-events:none}
#toast div{pointer-events:auto;transition:opacity .4s}#toast div.fade{opacity:0}
#toast div{background:#1f2937;border:1px solid #374151;padding:6px 14px;border-radius:4px;display:flex;gap:14px;align-items:center}#toast a{color:#38bdf8;cursor:pointer;font-weight:bold}
#keys{left:50%;top:80px;transform:translateX(-50%);padding:14px 20px;max-width:720px}#keys td{border:none;padding:2px 10px}#keys td:first-child{font-family:var(--num);color:#38bdf8;text-align:right}
/* 自選 */
.wtabs{display:flex;gap:2px;padding:4px 6px;flex-wrap:wrap;border-bottom:1px solid #1d1d1d;flex:none}.wtabs a{padding:2px 10px;cursor:pointer;color:#bbb;border-radius:3px}.wtabs a.on{background:#374151;color:#fff}
.wtabs a .gx{margin-left:6px;color:#777}.wtabs input{width:90px;background:#000;color:#fff;border:1px solid #0ea5e9}
.wadd{display:flex;gap:4px;padding:4px 6px;flex:none}.wadd input{flex:1;background:#111;border:1px solid #333;color:#fff;padding:2px 6px}
.whd,.wi{display:grid;grid-template-columns:minmax(70px,1.3fr) 58px minmax(64px,1fr) 52px 20px;align-items:center;gap:4px;padding:4px 8px}
.whd{color:#888;font-size:var(--fs-sm);border-bottom:1px solid #1d1d1d;flex:none}.whd span{cursor:pointer}.whd span:hover{color:#fff}
.wl{flex:1;overflow:auto}.wi{border-bottom:1px solid #141414;cursor:pointer}.wi:hover{background:#151b26}.wi.sel{background:#1f2937;box-shadow:inset 3px 0 #0ea5e9}.wi.dragover{box-shadow:inset 0 2px #0ea5e9}
.wi .x{color:#666;text-align:center}.wi .x:hover{color:#ff6b6b}.wi .r{text-align:right;font-family:var(--num)}.wi small{color:#888}
/* 計算器、工具 */
.trow{flex:1 1 0;min-height:0;display:flex}.tcol{flex:1 1 0;min-width:0;display:flex;flex-direction:column;position:relative}
.calc{flex:none;width:250px;background:#0d1117;border-left:1px solid #374151;padding:8px 10px;overflow:auto;display:none}
.calc .chd{display:flex;align-items:center;gap:4px;margin-bottom:4px}.calc .cx{margin-left:auto;background:none;border:0;color:#9ca3af;cursor:pointer}
.calc input,.calc select{min-width:0}
.calc.on{display:block}.calc label{display:flex;justify-content:space-between;margin:3px 0}.calc input,.calc select{width:110px;background:#000;color:#fff;border:1px solid #333;text-align:right;padding:1px 4px}
.calc .out{margin-top:6px;border-top:1px solid #333;padding-top:6px;font-family:var(--num)}
.toolhint{position:absolute;left:10px;top:6px;z-index:7;background:#0ea5e9;color:#000;padding:0 8px;border-radius:3px;display:none}
.badge{background:#f5c518;color:#000;padding:1px 8px;border-radius:3px;font-size:var(--fs-sm);font-weight:bold;margin-right:6px}.badge.est{background:#a855f7;color:#fff}
canvas{display:block}
input[type=range]{accent-color:#0ea5e9;height:4px}
.flowdt{font-size:calc(var(--fs) + 1px);font-family:var(--num);min-width:100px}
/* 熱圖、選股 */
.heat{position:relative;flex:1;min-height:200px}.hb{position:absolute;overflow:hidden;cursor:pointer;padding:3px 5px;font-size:var(--fs-sm);border:1px solid #000;line-height:1.3}
.legend{display:flex;gap:0;align-items:center;font-size:var(--fs-sm);margin:4px 0}.legend span{padding:0 6px;font-family:var(--num);color:#fff}
.excl{color:#777;cursor:pointer}.excl:hover{color:#aaa}
.plbl{position:absolute;left:6px;top:0;z-index:4;pointer-events:none}.plbl span{position:absolute;left:0;white-space:nowrap;font:var(--fs-sm) var(--num);background:#000c;border:1px solid;border-radius:2px;padding:0 4px;line-height:16px}
.compact .vv,.compact .i2{display:none!important}.compact .tb{padding:2px 6px}
.pb:has(.wl){container-type:inline-size}
@container (max-width:300px){.whd,.wi{grid-template-columns:minmax(52px,1fr) minmax(62px,auto) 40px 16px;padding:4px 6px}.wi svg,.whd>span:nth-child(2){display:none}}
@container (max-width:230px){.whd,.wi{grid-template-columns:minmax(46px,1fr) minmax(60px,auto) 16px}.wi>div:nth-child(4),.whd>span:nth-child(4){display:none}}
.limu{background:#ff3b3b;color:#fff!important;border-radius:2px;padding:0 2px}.limd{background:#16a34a;color:#fff!important;border-radius:2px;padding:0 2px}
.fdl{position:absolute;top:0;bottom:0;width:0;border-left:1px dashed #38bdf8;z-index:5;pointer-events:none;display:none}.fdl::after{content:attr(data-d);position:absolute;top:2px;left:3px;background:#0c4a6e;color:#e0f2fe;font-size:var(--fs-sm);padding:0 4px;white-space:nowrap;border-radius:2px}
.cell.full .fullhint{left:50%;right:auto;top:45%;transform:translateX(-50%);font-size:var(--fs);padding:6px 16px;background:#000c;color:#fde68a;border:1px solid #a16207;pointer-events:none;animation:fhfade 2.4s forwards}
@keyframes fhfade{0%,60%{opacity:1}100%{opacity:0;visibility:hidden}}
.tb .star.on{color:#fc3}
/* v3.2 選擇權分佈 */
.optp{display:flex;flex-direction:column;min-height:0}
.optp .otb{display:flex;gap:6px;align-items:center;flex-wrap:wrap;padding:4px 8px}
.optp .olg{display:flex;gap:6px;align-items:center;color:#aaa;font-size:calc(var(--fs) - 1px)}
.optp .olg i{display:inline-block;width:10px;height:10px;opacity:.75}
.optp .olg i.ochg{background:none;border:1px dashed #fff;opacity:1}
.optp .osum{display:flex;gap:12px;flex-wrap:wrap;padding:2px 8px;font-family:var(--mono,monospace)}
.optp .owarn{color:#f5c518;padding:0 8px;font-size:calc(var(--fs) - 1px)}
.optp .obody{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;position:relative}
.optp .obody[data-empty]::after{content:attr(data-empty);display:block;margin:30px auto;text-align:center;color:#888}
.optp .osvg{display:block;font-family:var(--mono,monospace)}
.optp .otip{position:absolute;display:none;z-index:5;width:220px;padding:6px 8px;background:#111;border:1px solid #333;font-size:calc(var(--fs) - 1px)}
.optp .onote{padding:2px 8px;font-size:calc(var(--fs) - 2px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.optp .orow:hover rect:first-child{fill:#ffffff10}
/* v3.3 籌碼峰 */
.peakcv{position:absolute;top:0;z-index:3;pointer-events:none}
.peakhd{position:absolute;top:4px;z-index:4;background:#000c;border:1px solid #333;padding:3px 6px;font-size:calc(var(--fs) - 1px);line-height:1.4;max-width:46%;text-align:right}
.peakhd .warn{color:#f5c518}.peakhd .pkm{font-size:calc(var(--fs) - 2px)}
.peakhd select{font-size:calc(var(--fs) - 1px);max-width:170px}
