/* TOKENS */
:root{
  --bg:#eef1f6;--bg2:#e6ebf3;--panel:#ffffff;--panel2:#f5f7fb;
  --ink:#0e1a2b;--ink2:#2e415c;--muted:#61708a;
  --line:#d8e0ec;--line2:#c3d0e2;
  --accent:#0f4fa8;--accent-soft:#dfe9fa;
  --gold:#b78a2e;--gold-soft:#f4e9cf;
  --up:#d5382f;--up-bg:rgba(213,56,47,.11);   /* HK convention: red=up */
  --down:#0e9f63;--down-bg:rgba(14,159,99,.11);
  --shadow:0 10px 30px rgba(16,38,74,.09);
  --grid-ln:rgba(15,79,168,.055);
  --disp:'Barlow Condensed','Noto Sans HK',sans-serif;
  --body:'Noto Sans HK',system-ui,sans-serif;
  --mono:'IBM Plex Mono','Noto Sans HK',monospace;
  --r:14px;
}
[data-theme="dark"]{
  --bg:#0a0f1a;--bg2:#0d1524;--panel:#111a2c;--panel2:#17223a;
  --ink:#e9eef7;--ink2:#c4cfe2;--muted:#8595b0;
  --line:#22304c;--line2:#31436a;
  --accent:#66a5ff;--accent-soft:#152a4d;
  --gold:#d9a441;--gold-soft:#3a2f17;
  --up:#ff6157;--up-bg:rgba(255,97,87,.14);
  --down:#34c68c;--down-bg:rgba(52,198,140,.14);
  --shadow:0 14px 34px rgba(0,0,0,.45);
  --grid-ln:rgba(102,165,255,.05);
}
/* BASE */
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{font-family:var(--body);background:var(--bg);color:var(--ink);font-size:15px;line-height:1.65;-webkit-font-smoothing:antialiased;transition:background .35s,color .35s}
.bgfx{position:fixed;inset:0;z-index:0;pointer-events:none;
  background:radial-gradient(950px 520px at 88% -8%,var(--accent-soft),transparent 62%),
             radial-gradient(760px 460px at -8% 34%,color-mix(in srgb,var(--gold) 12%,transparent),transparent 60%),
             linear-gradient(var(--grid-ln) 1px,transparent 1px),
             linear-gradient(90deg,var(--grid-ln) 1px,transparent 1px),var(--bg);
  background-size:auto,auto,46px 46px,46px 46px,auto;transition:background .35s}
::selection{background:var(--gold);color:#fff}
a{color:var(--accent)}
button{font-family:inherit;cursor:pointer;color:inherit}
:focus-visible{outline:2px solid var(--gold);outline-offset:2px;border-radius:6px}
.wrap{max-width:1280px;margin:0 auto;padding:0 22px}
.num{font-family:var(--mono);font-variant-numeric:tabular-nums}
.skip{position:absolute;left:-9999px;top:0;background:var(--gold);color:#fff;padding:10px 16px;z-index:300;border-radius:0 0 10px 0}
.skip:focus{left:0}
.up{color:var(--up)} .down{color:var(--down)}
.pill{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line2);border-radius:999px;padding:3px 10px;font-size:12px;font-weight:700;background:var(--panel2)}
.pill.warn{border-color:var(--gold);color:var(--gold)}
.pill .dot{width:7px;height:7px;border-radius:50%;background:var(--up);animation:pulse 1.6s ease infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--up) 45%,transparent)}60%{box-shadow:0 0 0 7px transparent}}
.chg{font-family:var(--mono);font-weight:600;font-size:13px;padding:2px 8px;border-radius:7px}
.chg.up{background:var(--up-bg)} .chg.down{background:var(--down-bg)}
.err-banner{position:fixed;top:10px;left:50%;transform:translateX(-50%);z-index:400;background:#c3342e;color:#fff;padding:10px 20px;border-radius:12px;font-size:13px;font-weight:700;box-shadow:var(--shadow);max-width:92vw}
.asof{font-size:12px;color:var(--muted)} .asof b{color:var(--ink)}
/* TICKER */
.ticker{position:relative;z-index:20;background:#0c1424;color:#c8d4e8;border-bottom:2px solid var(--gold);overflow:hidden}
.ticker-track{display:flex;gap:34px;width:max-content;padding:8px 0;animation:tick 46s linear infinite}
.ticker:hover .ticker-track{animation-play-state:paused}
@keyframes tick{to{transform:translateX(-50%)}}
.titem{display:flex;gap:9px;align-items:baseline;font-size:12.5px;white-space:nowrap}
.titem b{font-family:var(--mono);font-weight:600;color:#fff}
.titem .nm{color:#8fa2c2}
/* MASTHEAD */
.masthead{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 0;position:relative;z-index:5}
.brand{display:flex;gap:12px;align-items:center;text-decoration:none;color:inherit}
.brand svg{width:46px;height:46px;flex:none}
.brand-name{font-family:var(--disp);font-weight:800;font-size:26px;letter-spacing:1.2px;text-transform:lowercase;line-height:1}
.brand-tag{font-size:11.5px;color:var(--muted);letter-spacing:.6px;margin-top:3px}
.controls{display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.icon-btn,.seg-btn{border:1px solid var(--line2);background:var(--panel);border-radius:10px;width:38px;height:38px;display:grid;place-items:center;transition:transform .2s,border-color .2s}
.icon-btn:hover,.seg-btn:hover{transform:translateY(-2px);border-color:var(--gold)}
.seg-btn{width:auto;padding:0 14px;font-weight:800;font-size:13px;font-family:var(--disp);letter-spacing:1px}
[data-theme="light"] .ic-moon{display:none}
[data-theme="dark"] .ic-sun{display:none}
/* NAV */
.nav{position:sticky;top:0;z-index:40;background:color-mix(in srgb,var(--bg) 84%,transparent);backdrop-filter:blur(10px);border-block:1px solid var(--line)}
.tabs{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tab{flex:none;display:flex;align-items:center;gap:10px;background:none;border:none;padding:12px 16px;position:relative;color:var(--ink2)}
.tab svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.tab .lbl{text-align:left;line-height:1.15}
.tab .lbl b{display:block;font-size:15px;font-weight:700}
.tab .lbl i{display:block;font-style:normal;font-family:var(--disp);font-size:10.5px;letter-spacing:1.6px;text-transform:uppercase;color:var(--muted)}
.tab::after{content:"";position:absolute;left:14px;right:14px;bottom:-1px;height:3px;background:var(--gold);border-radius:3px 3px 0 0;transform:scaleX(0);transform-origin:left;transition:transform .3s cubic-bezier(.6,0,.2,1)}
.tab:hover{color:var(--ink)}
.tab[aria-selected="true"]{color:var(--accent)}
.tab[aria-selected="true"]::after{transform:scaleX(1)}
/* LAYOUT */
main{position:relative;z-index:2;padding:26px 0 60px}
.panel{display:none}
.panel.active{display:block;animation:rise .45s cubic-bezier(.3,.7,.3,1) both}
@keyframes rise{from{opacity:0;transform:translateY(16px)}}
.sec-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;flex-wrap:wrap;margin-bottom:22px}
.kicker{font-family:var(--disp);font-weight:700;letter-spacing:3px;text-transform:uppercase;font-size:13px;color:var(--gold);display:flex;align-items:center;gap:10px}
.kicker::before{content:"";width:26px;height:2px;background:var(--gold)}
.sec-head h1{font-size:clamp(26px,3.4vw,40px);font-weight:900;line-height:1.2;margin:6px 0 4px}
.sec-head p{color:var(--muted);max-width:640px}
.grid{display:grid;gap:18px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:20px;position:relative;transition:transform .25s,border-color .25s,box-shadow .25s}
.card:hover{border-color:var(--line2)}
.card h3{font-family:var(--disp);font-size:19px;font-weight:700;letter-spacing:.4px;text-transform:uppercase}
.stamp{position:absolute;top:14px;right:14px;font-size:10px;font-weight:700;letter-spacing:1px;color:var(--muted);border:1px dashed var(--line2);border-radius:6px;padding:2px 7px}
.rv{opacity:0;transform:translateY(18px);transition:opacity .6s ease,transform .6s cubic-bezier(.3,.7,.3,1)}
.rv.in{opacity:1;transform:none}
/* OVERVIEW */
.ov-grid{grid-template-columns:minmax(0,2.1fr) minmax(0,1fr)}
.chart-card{padding:0;overflow:hidden}
.chart-top{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:20px 22px 6px}
.hsi-price{font-family:var(--disp);font-weight:800;font-size:clamp(38px,5vw,54px);line-height:1;letter-spacing:.5px}
.hsi-meta{display:flex;gap:14px;flex-wrap:wrap;color:var(--muted);font-size:12.5px;margin-top:8px}
.hsi-meta b{color:var(--ink);font-family:var(--mono);font-weight:600}
.ranges{display:flex;gap:3px;background:var(--panel2);border:1px solid var(--line);border-radius:999px;padding:3px}
.ranges button{border:none;background:transparent;border-radius:50%;width:30px;height:30px;padding:0;display:grid;place-items:center;font-family:var(--disp);font-weight:700;font-size:14px;letter-spacing:.5px;color:var(--muted);transition:.2s}
.ranges button:hover{color:var(--ink)}
.ranges button.on{background:var(--accent);color:#fff}
.chart-top-right{display:flex;flex-direction:column;align-items:flex-end;gap:10px}
.chart-title{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
@media(max-width:720px){.chart-top-right{align-items:flex-start}}
.chart-wrap{position:relative;height:340px;margin:6px 8px 8px}
.chart-wrap canvas{width:100%;height:100%;display:block;touch-action:pan-y}
.ctip{position:absolute;pointer-events:none;background:var(--ink);color:var(--bg);border-radius:9px;padding:8px 11px;font-size:12px;line-height:1.5;box-shadow:var(--shadow);display:none;z-index:3;white-space:nowrap}
.ctip b{font-family:var(--mono)}
.ctip .tr{display:flex;justify-content:space-between;gap:14px}
.chart-legend{display:flex;gap:16px;align-items:center;font-size:12px;color:var(--muted)}
.chart-legend>span{display:inline-flex;align-items:center;gap:6px}
.lg-candle{position:relative;display:inline-block;width:7px;height:11px;background:var(--up);border-radius:1.5px}
.lg-candle::before{content:"";position:absolute;left:50%;top:-4px;bottom:-4px;width:1.5px;transform:translateX(-50%);background:var(--up)}
.lg-line{display:inline-block;width:18px;border-top:3px solid #4da6ff;border-radius:2px}
.chart-foot{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;border-top:1px dashed var(--line);padding:10px 22px;font-size:12px;color:var(--muted)}
.kpi{display:flex;flex-direction:column;gap:12px}
.kpi .card{padding:16px 18px}
.kpi .card:hover{transform:translateY(-3px)}
.kpi-val{font-family:var(--disp);font-weight:800;font-size:31px;line-height:1.1;margin-top:2px}
.kpi-row{display:flex;justify-content:space-between;align-items:flex-end;gap:10px}
.breadth-bar{height:12px;border-radius:7px;overflow:hidden;display:flex;background:var(--panel2);border:1px solid var(--line);margin:10px 0 8px}
.breadth-bar span{transition:width .8s cubic-bezier(.3,.7,.3,1)}
.breadth-bar .bu{background:var(--up)} .breadth-bar .bf{background:var(--line2)} .breadth-bar .bd{background:var(--down)}
.b-legend{display:flex;gap:14px;font-size:12px;color:var(--muted);flex-wrap:wrap}
.b-legend i{display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.hl-list{list-style:none;display:grid;gap:9px}
.hl-list li{display:flex;gap:10px;font-size:13.5px;color:var(--ink2)}
.hl-list li::before{content:"▸";color:var(--gold);font-weight:900;flex:none}
.mini-notes{grid-template-columns:repeat(3,1fr);margin-top:18px}
.mini-notes .card{padding:16px 18px}
.mini-notes h4{font-size:13px;color:var(--muted);font-weight:700}
.mini-notes .v{font-family:var(--disp);font-weight:800;font-size:26px;margin:2px 0}
.mini-notes p{font-size:12.5px;color:var(--muted)}
/* FACTORS */
.f-legend{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px}
.f-chip{display:flex;gap:8px;align-items:center;border:1px solid var(--line);background:var(--panel);border-radius:10px;padding:8px 12px;font-size:12.5px}
.f-chip b{font-size:13px} .f-chip i{font-style:normal;color:var(--muted);font-size:11.5px}
.f-chip .sq{width:11px;height:11px;border-radius:3px;flex:none}
.filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}
.fbtn{border:1px solid var(--line2);background:var(--panel);border-radius:999px;padding:7px 15px;font-size:13px;font-weight:700;transition:.2s}
.fbtn:hover{transform:translateY(-2px);border-color:var(--gold)}
.fbtn.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}
.f-detail{display:grid;grid-template-columns:minmax(220px,.9fr) minmax(0,1.6fr);gap:24px;margin-bottom:18px;border-left:4px solid var(--gold)}
.f-detail .id b{font-size:22px;font-weight:900}
.f-detail .comp{font-family:var(--disp);font-weight:800;font-size:56px;line-height:1;color:var(--gold)}
.f-detail .comp small{font-size:15px;color:var(--muted);font-weight:600}
.fbar{display:grid;grid-template-columns:86px 1fr 34px;align-items:center;gap:12px;font-size:13px;margin-bottom:9px}
.fbar .track{height:9px;background:var(--panel2);border:1px solid var(--line);border-radius:6px;overflow:hidden}
.fbar .fill{height:100%;border-radius:6px;width:0;transition:width .7s cubic-bezier(.3,.7,.3,1)}
.fbar .sc{font-family:var(--mono);font-weight:600;text-align:right}
.f-note{font-size:13px;color:var(--ink2);background:var(--panel2);border-radius:10px;padding:10px 14px;margin-top:8px}
.tagrow{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px}
.tagrow .pill{font-size:11px}
.tbl-card{padding:0;overflow:hidden}
.tbl-scroll{overflow:auto;max-height:560px}
table.tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:13.5px;min-width:760px}
.tbl th{position:sticky;top:0;background:var(--panel2);z-index:2;font-family:var(--disp);font-size:14px;letter-spacing:1px;text-transform:uppercase;text-align:right;padding:12px 14px;border-bottom:2px solid var(--line);white-space:nowrap;color:var(--ink2)}
.tbl th:nth-child(-n+2){text-align:left}
.tbl th[data-k]{cursor:pointer;user-select:none}
.tbl th[data-k]:hover{color:var(--accent)}
.tbl th .arr{font-size:10px;margin-left:4px;color:var(--gold)}
.tbl td{padding:10px 14px;border-bottom:1px solid var(--line);text-align:right;white-space:nowrap}
.tbl td:nth-child(-n+2){text-align:left}
.tbl tbody tr{cursor:pointer;transition:background .15s}
.tbl tbody tr:hover{background:var(--panel2)}
.tbl tbody tr.sel{background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--gold)}
.tbl .nm b{font-weight:700}
.tbl .nm i{font-style:normal;display:block;font-size:11px;color:var(--muted);font-family:var(--mono)}
.heat{display:inline-block;min-width:42px;padding:3px 8px;border-radius:8px;font-family:var(--mono);font-weight:600;font-size:12.5px}
.comp-badge{font-family:var(--disp);font-weight:800;font-size:17px}
.method-note{font-size:12px;color:var(--muted);padding:12px 18px;border-top:1px dashed var(--line)}
/* AI */
.ai-grid{grid-template-columns:minmax(0,1fr) minmax(0,1.7fr)}
.gauge-card{text-align:center}
.gauge{width:min(260px,86%);margin:6px auto 0}
.gauge .track{stroke:var(--line)}
.gauge .fillArc{stroke:url(#ggrad);transition:stroke-dashoffset 1s cubic-bezier(.3,.7,.3,1)}
.gauge .needle{transform-origin:100px 100px;transition:transform 1s cubic-bezier(.34,1.4,.4,1)}
.g-score{font-family:var(--disp);font-weight:800;font-size:44px;line-height:1}
.g-word{font-weight:800;font-size:14px}
.ai-line{border-left:3px solid var(--gold);padding:12px 16px;background:var(--panel2);border-radius:0 12px 12px 0;font-size:14px;min-height:74px;margin-top:14px;text-align:left;color:var(--ink2)}
.ai-line .cursor{display:inline-block;width:2px;height:1em;background:var(--gold);vertical-align:-2px;animation:blink 1s steps(1) infinite}
@keyframes blink{50%{opacity:0}}
.btn{border:1px solid var(--line2);background:var(--panel2);border-radius:10px;padding:8px 15px;font-weight:700;font-size:13px;display:inline-flex;gap:7px;align-items:center;transition:.2s}
.btn:hover{transform:translateY(-2px);border-color:var(--gold)}
.btn.gold{background:var(--gold);border-color:var(--gold);color:#fff}
.btn:disabled{opacity:.5;cursor:wait}
.ai-reports{grid-template-columns:repeat(2,1fr)}
.report{display:flex;flex-direction:column;gap:10px}
.report:hover{transform:translateY(-4px)}
.report .top{display:flex;justify-content:space-between;gap:10px;align-items:center}
.sent{font-size:11.5px;font-weight:800;letter-spacing:.6px;border-radius:6px;padding:3px 9px}
.sent.bull{background:var(--up-bg);color:var(--up)}
.sent.bear{background:var(--down-bg);color:var(--down)}
.sent.neutral{background:var(--accent-soft);color:var(--accent)}
.model-badge{font-family:var(--mono);font-size:11px;color:var(--muted);border:1px solid var(--line);border-radius:6px;padding:2px 8px}
.report h4{font-size:16.5px;font-weight:900;line-height:1.4}
.report p{font-size:13px;color:var(--ink2);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.conf{height:6px;border-radius:4px;background:var(--panel2);border:1px solid var(--line);overflow:hidden}
.conf i{display:block;height:100%;background:linear-gradient(90deg,var(--gold),var(--up));width:0;transition:width .9s ease}
.report .meta{display:flex;gap:12px;font-size:11.5px;color:var(--muted);flex-wrap:wrap}
.report .foot{margin-top:auto;display:flex;justify-content:space-between;align-items:center;font-size:13px}
.report .foot a{text-decoration:none;font-weight:800}
.report .foot a:hover{text-decoration:underline}
/* MARKET DATA */
.md-grid{grid-template-columns:repeat(12,1fr)}
.md-grid>.card{grid-column:span 4}
.md-grid>.card.wide{grid-column:span 8}
.md-grid>.card.full{grid-column:span 12}
.stat-row{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:9px 0;border-bottom:1px dashed var(--line);font-size:13.5px}
.stat-row:last-child{border:none}
.stat-row .l{color:var(--muted)}
.stat-row .v{font-family:var(--mono);font-weight:600;font-size:15px}
.hrow{display:grid;grid-template-columns:64px 1fr 56px;gap:10px;align-items:center;font-size:12.5px;margin-bottom:9px}
.hrow .track{height:10px;background:var(--panel2);border:1px solid var(--line);border-radius:6px;overflow:hidden}
.hrow .fill{height:100%;background:linear-gradient(90deg,var(--accent),var(--gold));width:0;transition:width .9s ease;border-radius:6px}
.hrow .v{font-family:var(--mono);font-weight:600;text-align:right}
.peg{margin-top:14px}
.peg-scale{position:relative;height:10px;border-radius:6px;background:linear-gradient(90deg,var(--down-bg),var(--panel2) 50%,var(--up-bg));border:1px solid var(--line)}
.peg-dot{position:absolute;top:50%;width:16px;height:16px;border-radius:50%;background:var(--gold);border:3px solid var(--panel);box-shadow:var(--shadow);transform:translate(-50%,-50%);transition:left .8s cubic-bezier(.3,.7,.3,1)}
.peg-lb{display:flex;justify-content:space-between;font-size:11px;color:var(--muted);margin-top:6px;font-family:var(--mono)}
.tiles{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.tile{background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:12px 14px;transition:.2s}
.tile:hover{border-color:var(--gold);transform:translateY(-2px)}
.tile .l{font-size:11.5px;color:var(--muted);font-weight:700}
.tile .v{font-family:var(--disp);font-weight:800;font-size:24px;line-height:1.15}
.tile .s{font-size:11px;color:var(--muted)}
.donut-wrap{display:flex;gap:18px;align-items:center;flex-wrap:wrap}
.donut{width:104px;height:104px;border-radius:50%;position:relative;flex:none}
.donut::after{content:"";position:absolute;inset:14px;border-radius:50%;background:var(--panel)}
.donut b{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--disp);font-weight:800;font-size:21px;z-index:1}
.perf-row{display:grid;grid-template-columns:90px 1fr;gap:12px;align-items:center;margin-bottom:14px;font-size:13px}
.perf-row .bars{display:grid;gap:5px}
.pbar{display:grid;grid-template-columns:38px 1fr 52px;gap:8px;align-items:center;font-size:11px;color:var(--muted)}
.pbar .track{height:7px;border-radius:5px;background:var(--panel2);border:1px solid var(--line);overflow:hidden}
.pbar .fill{height:100%;border-radius:5px;width:0;transition:width .9s ease}
.pbar .v{font-family:var(--mono);font-weight:600;text-align:right}
/* QUOTES */
.quote-card{display:grid;grid-template-columns:1fr auto;gap:26px;align-items:center;padding:clamp(26px,4vw,44px);overflow:hidden}
.quote-card::before{content:"";position:absolute;inset:0;background:radial-gradient(500px 220px at 12% -20%,var(--gold-soft),transparent 70%);pointer-events:none}
.q-mark{font-family:var(--disp);font-size:90px;line-height:.6;color:var(--gold);opacity:.5;user-select:none}
.q-text{font-size:clamp(20px,2.8vw,30px);font-weight:900;line-height:1.5;position:relative}
.q-en{font-family:var(--mono);font-size:13px;color:var(--muted);margin-top:12px;font-style:italic}
.q-src{margin-top:14px;font-size:13px;color:var(--gold);font-weight:700}
.seal{width:66px;height:66px;background:#c3342e;color:#fdf3ec;display:grid;place-items:center;border-radius:11px;font-weight:900;font-size:17px;writing-mode:vertical-rl;letter-spacing:5px;transform:rotate(7deg);box-shadow:inset 0 0 0 2px rgba(255,255,255,.35),0 8px 18px rgba(195,52,46,.35);flex:none}
.q-ctl{display:flex;align-items:center;gap:14px;margin-top:18px}
.q-prog{flex:1;height:4px;border-radius:3px;background:var(--line);overflow:hidden}
.q-prog i{display:block;height:100%;width:0;background:var(--gold)}
.q-prog i.run{animation:qp var(--qd,7s) linear forwards}
@keyframes qp{to{width:100%}}
.quote-chips{grid-template-columns:repeat(4,1fr);margin-top:18px}
.qchip{padding:16px;cursor:pointer}
.qchip:hover{transform:translateY(-4px);border-color:var(--gold)}
.qchip p{font-size:13.5px;font-weight:700;line-height:1.5}
.qchip span{font-size:11px;color:var(--muted);display:block;margin-top:6px}
/* FOOTER */
.risk-strip{position:relative;z-index:2;background:var(--gold-soft);border-block:1px solid var(--line);padding:10px 0;font-size:12.5px;color:var(--ink2)}
.risk-strip button{background:none;border:none;font-weight:800;color:var(--accent);text-decoration:underline}
footer{position:relative;z-index:2;background:var(--panel);border-top:1px solid var(--line);padding:44px 0 0}
.f-grid{display:grid;grid-template-columns:1.5fr 1fr 1fr 1.2fr;gap:34px;padding-bottom:34px}
.f-grid h4{font-family:var(--disp);font-size:16px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;margin-bottom:12px;color:var(--gold)}
.f-grid p,.f-grid li{font-size:13px;color:var(--muted)}
.f-grid ul{list-style:none;display:grid;gap:8px}
.f-grid a{color:var(--ink2);text-decoration:none;transition:color .15s}
.f-grid a:hover{color:var(--gold)}
.odo{display:flex;gap:4px;margin:8px 0 4px}
.odo span{font-family:var(--mono);font-weight:600;font-size:20px;background:var(--panel2);border:1px solid var(--line);border-radius:7px;padding:4px 7px;min-width:30px;text-align:center}
.disc-box{border-left:4px solid var(--gold);background:var(--panel2);border-radius:0 12px 12px 0;padding:16px 20px;font-size:12px;color:var(--muted);line-height:1.8;margin-bottom:26px}
.f-bottom{border-top:1px solid var(--line);padding:16px 0;display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--muted)}
.toTop{position:fixed;right:22px;bottom:22px;z-index:60;width:44px;height:44px;border-radius:12px;border:1px solid var(--line2);background:var(--panel);box-shadow:var(--shadow);display:grid;place-items:center;opacity:0;pointer-events:none;transform:translateY(12px);transition:.3s}
.toTop.show{opacity:1;pointer-events:auto;transform:none}
.toTop:hover{border-color:var(--gold);transform:translateY(-3px)}
/* MODAL / TOAST */
.mback{position:fixed;inset:0;background:rgba(8,14,26,.58);backdrop-filter:blur(4px);display:none;place-items:center;z-index:100;padding:20px}
.mback.open{display:grid}
.modal{background:var(--panel);border:1px solid var(--line);border-radius:18px;max-width:620px;width:100%;max-height:82vh;overflow:auto;padding:30px;animation:pop .3s cubic-bezier(.3,1.3,.4,1)}
@keyframes pop{from{opacity:0;transform:scale(.94) translateY(14px)}}
.modal h3{font-family:var(--disp);font-size:24px;font-weight:800;letter-spacing:1px;text-transform:uppercase;margin-bottom:14px}
.modal p{font-size:13.5px;color:var(--ink2);margin-bottom:12px;line-height:1.85}
.modal .x{float:right;border:none;background:none;font-size:22px;color:var(--muted)}
#toastWrap{position:fixed;bottom:26px;left:50%;transform:translateX(-50%);z-index:120;display:flex;flex-direction:column;gap:8px;align-items:center}
.toast{background:var(--ink);color:var(--bg);padding:11px 20px;border-radius:11px;font-size:13.5px;font-weight:700;box-shadow:var(--shadow);animation:rise .3s ease both}
/* RESPONSIVE / MOTION */
@media(max-width:1080px){
  .ov-grid,.ai-grid{grid-template-columns:1fr}
  .md-grid>.card,.md-grid>.card.wide{grid-column:span 6}
  .md-grid>.card.full{grid-column:span 12}
  .ai-reports{grid-template-columns:repeat(2,1fr)}
  .f-grid{grid-template-columns:1fr 1fr}
  .quote-chips{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:720px){
  .md-grid>.card,.md-grid>.card.wide{grid-column:span 12}
  .mini-notes,.ai-reports,.quote-chips{grid-template-columns:1fr}
  .f-detail{grid-template-columns:1fr}
  .f-grid{grid-template-columns:1fr}
  .quote-card{grid-template-columns:1fr}
  .seal{position:absolute;top:18px;right:18px;width:52px;height:52px;font-size:14px}
  .tab .lbl i{display:none}
  .brand-name{font-size:20px}
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
  .ticker-track{animation:none;flex-wrap:wrap;width:auto}
}
/* Verdict Banner */
.verdict-banner { display: flex; align-items: center; gap: 24px; padding: 24px; margin-bottom: 18px; background: linear-gradient(135deg, var(--panel), var(--panel2)); border: 2px solid var(--gold); flex-wrap: wrap; }
.verdict-banner .v-emoji { font-size: 48px; line-height: 1; }
.verdict-banner .v-text h2 { font-family: var(--disp); font-size: 28px; font-weight: 800; margin: 0; }
.verdict-banner .v-text p { color: var(--muted); font-size: 14px; margin: 4px 0 0; }
.verdict-banner .v-score { margin-left: auto; text-align: right; }
.verdict-banner .v-score .num { font-family: var(--disp); font-size: 42px; font-weight: 800; line-height: 1; }
.verdict-banner .v-score .lbl { font-size: 12px; color: var(--muted); text-transform: uppercase; letter-spacing: 1px; }

@media(max-width: 600px) {
  .verdict-banner { flex-direction: column; text-align: center; }
  .verdict-banner .v-score { margin-left: 0; margin-top: 12px; }
}

.ov-bottom { display:grid; grid-template-columns:repeat(3,1fr); gap:16px; }
@media (max-width:900px){ .ov-bottom { grid-template-columns:1fr; } }

/* Radar Modal */
.radar-modal { max-width: 560px; text-align: center; }
.radar-wrap { width: 100%; max-width: 400px; margin: 0 auto; aspect-ratio: 1; position: relative; }
.radar-wrap canvas { width: 100%; height: 100%; display: block; }
.radar-signals { margin-top: 20px; text-align: left; max-height: 200px; overflow-y: auto; }
.radar-signals h4 { font-family: var(--disp); font-size: 16px; margin-bottom: 10px; color: var(--gold); }
.radar-signals ul { list-style: none; padding: 0; margin: 0; }
.radar-signals li { font-size: 13px; padding: 8px 0; border-bottom: 1px dashed var(--line); display: flex; justify-content: space-between; gap: 12px; }
.radar-signals li .sig-msg { color: var(--ink2); flex: 1; }
.radar-signals li .sig-pts { font-family: var(--mono); font-weight: 700; flex: none; }


/* ── 十三式 ── */
.dg-poem{padding:34px;position:relative;background:linear-gradient(160deg,var(--panel),var(--gold-soft));border:1px solid var(--line)}
.dg-poem h3{font-family:var(--disp);letter-spacing:2px;color:var(--gold);margin-bottom:12px}
.dg-lines p{font-size:clamp(18px,2.6vw,26px);font-weight:900;line-height:2}
.dg-lines.alt{margin-top:12px}
.dg-lines.alt p{font-size:12.5px;color:var(--muted);font-style:italic;font-weight:400;font-family:var(--mono);line-height:1.8}
.dg-nav{display:flex;gap:8px;flex-wrap:wrap;margin:18px 0 6px;position:sticky;top:52px;z-index:5}
.dg-chapter{margin:28px 0;scroll-margin-top:110px}
.dg-chapter>h3{display:flex;align-items:center;gap:10px;font-size:20px;font-weight:900;border-left:4px solid var(--gold);padding-left:12px;margin-bottom:14px}
.dg-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.dg-form{padding:20px;position:relative;overflow:hidden}
.dg-form:hover{transform:translateY(-4px);border-color:var(--gold)}
.dg-med{position:absolute;top:14px;right:14px;width:44px;height:44px;border-radius:50%;background:var(--gold);color:#fff;display:grid;place-items:center;font-weight:900;writing-mode:vertical-rl;font-size:13px;letter-spacing:2px;box-shadow:0 6px 14px rgba(0,0,0,.25);transition:transform .3s}
.dg-form:hover .dg-med{transform:rotate(-10deg) scale(1.1)}
.dg-form h4{font-size:18px;font-weight:900;padding-right:52px}
.dg-form h4 i{display:block;font-style:normal;font-family:var(--disp);font-size:11.5px;letter-spacing:1.6px;text-transform:uppercase;color:var(--gold);margin-top:2px}
.dg-mantra{margin:10px 0 6px;font-weight:800;font-size:14px}
.dg-mantra b{color:var(--gold);margin-right:6px;font-size:11px;border:1px solid var(--gold);border-radius:5px;padding:1px 6px}
.dg-secret{font-size:13px;color:var(--ink2);line-height:1.8}
.dg-alt{margin-top:12px;padding-top:10px;border-top:1px dashed var(--line)}
.dg-alt .dg-mantra{font-size:12.5px}
.dg-alt .dg-secret{font-size:12px;color:var(--muted)}
@media(max-width:1080px){.dg-grid{grid-template-columns:1fr 1fr}}
@media(max-width:720px){.dg-grid{grid-template-columns:1fr}.dg-nav{top:48px}}

/* Disclaimer bar: spacing ABOVE only, none below */
*:has(> #btnDisc) { margin-top: 0rem; margin-bottom: 0; }

/* --- 修復 KPI 標籤顯示問題 --- */
.kpi-label {
    display: block;
    font-size: 12.5px;
    color: var(--muted);
    font-weight: 700;
    margin-bottom: 8px;
}

/* ---------- options strike wall (rev4 · final) ---------- */
#optCard{height:auto;min-height:0;overflow:visible}
#optRows{position:relative;display:flex;flex-direction:column;gap:38px;padding-top:26px;padding-bottom:4px}
#optRows .opt-hsi{position:absolute;top:22px;bottom:6px;left:50%;width:0;
  border-left:2px dashed var(--accent);z-index:2;pointer-events:none}
#optRows .opt-hsi span{position:absolute;top:-20px;left:0;transform:translateX(-50%);
  white-space:nowrap;color:var(--accent);font-weight:700;font-size:11.5px}
#optRows .opt-row{position:relative;margin:0;padding:0}
#optRows .opt-month{position:static;margin:0 0 8px;font-size:12px;color:var(--muted);letter-spacing:.4px}
#optRows .opt-bar{position:relative;height:16px;border-radius:9px;
  background:linear-gradient(90deg,
    color-mix(in srgb, var(--down) 16%, transparent) 0%,
    color-mix(in srgb, var(--down) 55%, transparent) 50%,
    color-mix(in srgb, var(--up) 55%, transparent) 50%,
    color-mix(in srgb, var(--up) 14%, transparent) 100%)}
#optRows .opt-wall{position:absolute;top:-3px;bottom:-3px;width:3px;margin-left:-1.5px;
  border-radius:2px;background:var(--ink);opacity:.85}
#optRows .opt-lbl{position:absolute;top:calc(100% + 6px);white-space:nowrap;
  font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:10.5px;font-weight:600;
  letter-spacing:-.2px;color:var(--ink)}
#optRows .opt-lbl.put{transform:translateX(calc(-100% - 5px))}
#optRows .opt-lbl.call{transform:translateX(5px)}
#optRows .opt-lbl i{font-style:normal;font-weight:500;color:var(--muted)}

/* ---------- final spacing tweaks ---------- */
/* breathing room between last cards and the disclaimer bar */
.risk-strip{margin-top:20px}
/* tighter footer: less air above the columns and below the copyright row */
footer{padding-top:20px;padding-bottom:20px}

/* ---------- footer app promo ---------- */
.app-promo{position:relative;border:1px solid color-mix(in srgb, var(--gold) 45%, transparent);
  border-radius:14px;padding:14px 14px 12px;
  background:linear-gradient(160deg, color-mix(in srgb, var(--gold) 14%, transparent),
    color-mix(in srgb, var(--accent) 8%, transparent) 60%, transparent)}
.app-promo h4{display:flex;align-items:center;gap:8px;margin:0 0 6px}
.app-promo p{margin:0 0 4px;font-size:12px;color:var(--muted)}
.promo-badge{margin-left:auto;font-size:11px;font-weight:700;letter-spacing:.3px;color:#fff;
  background:linear-gradient(90deg,var(--gold),var(--accent));padding:2px 18px;border-radius:99px}
@media (prefers-reduced-motion: no-preference){
  .promo-badge::before{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;
    background:#fff;margin-right:5px;animation:pb 1.6s infinite}
  @keyframes pb{0%,100%{opacity:1}50%{opacity:.35}}
}
.app-cta{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:10px;
  background:color-mix(in srgb, var(--ink) 6%, transparent);border:1px solid var(--line);
  text-decoration:none;color:var(--ink);margin-top:8px;
  transition:transform .18s,border-color .18s,background .18s}
.app-cta:hover{transform:translateY(-2px);border-color:var(--gold);
  background:color-mix(in srgb, var(--gold) 12%, transparent)}
.app-cta .app-ic{flex:0 0 30px;height:30px;display:grid;place-items:center;border-radius:8px;
  background:linear-gradient(135deg,var(--gold),var(--accent));font-size:14px;color:#fff}
.app-cta.yt .app-ic{background:linear-gradient(135deg,#ff0000,#b31212)}
.app-cta-t{display:flex;flex-direction:column;line-height:1.15}
.app-cta-t b{font-size:13px}
.app-cta-t i{font-style:normal;font-size:11px;color:var(--muted)}
.app-cta .app-arrow{margin-left:auto;color:var(--gold);font-weight:700;transition:transform .18s}
.app-cta:hover .app-arrow{transform:translateX(3px)}
.f-odo{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}

/* ---------- footer grid: even 4 columns ---------- */
.f-grid{grid-template-columns:repeat(4,1fr);gap:32px}
@media (max-width:960px){.f-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:600px){.f-grid{grid-template-columns:1fr}}

/* ---------- AI tab alignment ---------- */
.ai-reports { grid-template-columns: repeat(3, 1fr); gap: 24px; }
@media (max-width: 960px) {
  .ai-reports { grid-template-columns: 1fr; }
}
/* ----------------------- stat-row: right-aligned values ---------- */
.stat-row .v{margin-left:auto;text-align:right}
.stat-row .spill{flex:none;min-width:56px;text-align:right}

/* ----------------------- md-grid: 2x2 main cards ---------- */
.md-grid>.card.half{grid-column:span 6}

/* ----------------------- concept turnover leaders ---------- */
.md-note{font-size:12px;color:var(--muted);margin:0 0 10px}
.crow{display:grid;grid-template-columns:150px 1fr 150px;gap:10px;align-items:center;font-size:12.5px;margin-bottom:9px}
.crow .l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink2)}
.crow .track{height:10px;background:var(--panel2);border:1px solid var(--line);border-radius:6px;overflow:hidden}
.crow .fill{height:100%;border-radius:6px;width:0;transition:width .9s ease}
.crow .v{font-family:var(--mono);font-weight:600;text-align:right;white-space:nowrap}
@media(max-width:720px){.crow{grid-template-columns:96px 1fr 120px}}

/* ---------------- adsense ---------------- */
.ad-slot{max-width:970px;min-height:90px;margin:22px auto 0}

.ad-slot{display:block;width:100%;max-width:970px;min-height:90px;margin:22px auto 0}

#dataBadge .asof-l::after { content: ' ·'; }
#dataBadge .asof-d { margin-left: 6px; }
@media (max-width: 600px) {
    #dataBadge .asof-l, #dataBadge .asof-d { display: block; }
    #dataBadge .asof-l::after { content: ''; }
    #dataBadge .asof-d { margin-left: 0; }
}

/* ---------------- T1 · mobile header polish (<=600px) ---------- */
.brand-name{display:block}
.brand-tag{display:block}
@media (max-width:600px){
    .masthead{flex-wrap:wrap;gap:10px 12px;padding:12px 0 10px}
    .brand svg{width:38px;height:38px}
    .brand-name{font-size:19px;letter-spacing:.8px}
    .brand-tag{font-size:10.5px;margin-top:2px}
    .controls{order:2;width:100%;gap:8px}
    .controls .pill{margin-right:auto}
    #dataBadge{white-space:nowrap;font-size:11px}
    #dataBadge .asof-l,#dataBadge .asof-d{display:inline}
    #dataBadge .asof-l::after{content:' ·'}
    #dataBadge .asof-d{margin-left:4px}
    .seg-btn{height:34px;padding:0 12px;font-size:12px}
    .icon-btn{width:34px;height:34px}
}

/* ---------------- T1 · factors table: freeze STOCK + PRICE·CHG ---------- */
.tbl th:nth-child(1),.tbl td:nth-child(1){position:sticky;left:0;width:136px;min-width:136px;background:var(--panel);z-index:3}
.tbl th:nth-child(2),.tbl td:nth-child(2){position:sticky;left:136px;min-width:150px;background:var(--panel);z-index:3;box-shadow:2px 0 0 var(--line)}
.tbl th:nth-child(1),.tbl th:nth-child(2){background:var(--panel2);z-index:5}
.tbl tbody tr:hover td:nth-child(-n+2){background:var(--panel2)}
.tbl tbody tr.sel td:nth-child(-n+2){background:var(--accent-soft)}

/* ---------------- T1 · market data mobile stack ---------- */
@media (max-width:720px){
    .md-grid>.card.half{grid-column:span 12}
}
@media (max-width:600px){
    .crow{grid-template-columns:92px 1fr 118px;gap:8px}
    .crow .l{font-size:11.5px}
    .crow .v{font-size:11px}
}
@media (max-width:380px){
    .tiles{grid-template-columns:1fr}
}

/* ---------------- T1 · ad-slot mobile: no dead gap pre-approval ---------- */
@media (max-width:600px){
    .ad-slot{min-height:0;margin:12px auto 0}
}

/* ---------------- T1 · footer mobile polish ---------- */
@media (max-width:600px){
    .f-grid{gap:26px}
    .f-bottom{flex-direction:column;align-items:flex-start;gap:10px}
    .f-odo{flex-wrap:wrap;row-gap:6px}
    .odo span{font-size:16px;min-width:24px;padding:3px 5px}
}

/* ---------------- T1 · ticker compact (<=600px) ---------- */
@media (max-width:600px){
    .ticker{border-bottom-width:1px}
    .ticker-track{gap:24px;padding:6px 0}
    .titem{font-size:11.5px;gap:7px}
}

/* ---------------- sector leader sub-row ---------- */
.crow-ldr{display:flex;gap:7px;align-items:baseline;font-size:10.5px;color:var(--muted);margin:-2px 0 10px}
.crow-ldr b{color:var(--gold);font-weight:700;font-size:10px;letter-spacing:.4px;flex:none}
.crow-ldr .ldr-c{font-family:var(--mono);font-weight:600;color:var(--ink2);flex:none}
.crow-ldr span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
