/* ═══════════════════════════════════════════════════════
   SECTOR PULSE — styles.css
   All CSS for the SectorPulse2 PWA dashboard
   ═══════════════════════════════════════════════════════ */

*{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg0:#080a0e;--bg1:#0d1117;--bg2:#0f1623;--bg3:#070b12;
  --border:#1e293b;--border2:#334155;
  --text1:#f1f5f9;--text2:#94a3b8;--text3:#475569;--text4:#334155;
  --green:#4ade80;--red:#f87171;--amber:#fb923c;--blue:#60a5fa;--purple:#a78bfa;
  --green-bg:#0c2d1a;--red-bg:#2d1111;--amber-bg:#1a1205;--blue-bg:#071220;
  --green-bdr:#166534;--red-bdr:#7f1d1d;--amber-bdr:#78350f;--blue-bdr:#1e3a5f;
}
html,body{background:var(--bg0);color:var(--text1);font-family:'SF Mono','Fira Code',Consolas,monospace;min-height:100vh}
.wrap{max-width:1200px;margin:0 auto;padding:16px;box-sizing:border-box}
body.font-lg  .wrap{max-width:1200px}
body.font-xl  .wrap{max-width:1200px}
body.font-xxl .wrap{max-width:1200px}
/* ── Header ── */
.hdr{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px;gap:8px}
.hdr-left{min-width:0;flex:1}
.hdr-right{flex-shrink:0;text-align:right}
.mode-btns{display:flex;gap:4px;align-items:center;margin-top:4px;flex-wrap:wrap;justify-content:flex-end}
.hdr-left{}
.ttl{font-size:20px;font-weight:700;color:var(--text1);letter-spacing:-0.5px}
.status-row{display:flex;align-items:center;gap:6px;margin-top:3px;flex-wrap:wrap}
.dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex-shrink:0}
.dot.live{background:var(--green);animation:blink 1.5s infinite}
.dot.delay{background:var(--amber);animation:blink 2s infinite}
.dot.mock{background:var(--text3)}
@keyframes blink{0%,100%{opacity:1}50%{opacity:0.3}}
.status-txt{font-size:9px;color:var(--text3);letter-spacing:0.8px}
.connect-lnk{font-size:9px;color:var(--blue);cursor:pointer;text-decoration:underline}
.hdr-right{text-align:right;flex-shrink:0}
.clk{font-size:11px;color:var(--text2)}
.refresh-btn{font-size:9px;padding:3px 8px;border-radius:5px;border:1px solid var(--border);background:transparent;color:var(--text3);cursor:pointer;font-family:inherit;margin-top:4px;display:block;margin-left:auto;transition:all 0.12s}
.refresh-btn:hover{border-color:var(--border2);color:var(--text2)}
.refresh-countdown{font-size:8px;color:var(--text4);margin-top:2px;text-align:right}
/* ── Summary bar ── */
.sumbar{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:12px}
.sum-card{background:var(--bg2);border:1px solid var(--border);border-radius:9px;padding:8px 10px}
.sum-lbl{font-size:8px;color:var(--text3);letter-spacing:0.7px;margin-bottom:2px}
.sum-name{font-size:10px;font-weight:500;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sum-val{font-size:13px;font-weight:700}
/* ── Top 5 ── */
.panel{background:var(--bg2);border:1px solid var(--border);border-radius:11px;padding:12px;margin-bottom:12px}
.panel-hdr{display:flex;justify-content:space-between;align-items:center;cursor:pointer;user-select:none}
.panel-title{font-size:11px;font-weight:700;color:var(--text1);letter-spacing:0.3px}
.panel-sub{font-size:8px;color:var(--text3);letter-spacing:0.6px;margin-top:2px}
.panel-chevron{font-size:9px;color:var(--text3);transition:transform 0.2s}
.panel-body{overflow:hidden;transition:max-height 0.3s ease}
.play-card{background:var(--bg3);border:1px solid var(--border);border-radius:8px;padding:9px 11px;margin-top:8px;cursor:pointer;transition:border-color 0.12s}
.play-card:hover{border-color:var(--border2)}
.play-card.c{border-left:3px solid var(--green)}
.play-card.p{border-left:3px solid var(--red)}
.play-card.s{border-left:3px solid var(--blue)}
.play-top{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:5px}
.play-name{font-size:12px;font-weight:700;color:var(--text1)}
.play-meta{font-size:9px;color:var(--text3);margin-top:1px}
.play-score-wrap{text-align:right;flex-shrink:0}
.play-score{font-size:13px;font-weight:700}
.play-score-lbl{font-size:7px;color:var(--text3);letter-spacing:0.5px}
.factor-bars{display:flex;gap:2px;margin-bottom:6px}
.factor-bar-wrap{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px}
.factor-track{width:100%;height:3px;background:#1a2233;border-radius:2px;overflow:hidden}
.factor-fill{height:100%;border-radius:2px}
.factor-lbl{font-size:6px;color:var(--text4);letter-spacing:0.2px}
.play-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:3px;margin-bottom:5px}
.play-stat{text-align:center;background:#0a0e18;border-radius:4px;padding:3px 1px}
.play-stat .sv{font-size:9px;font-weight:700}
.play-stat .sk{font-size:6px;color:var(--text3);margin-top:1px}
.play-signals{display:flex;flex-wrap:wrap;gap:3px;margin-bottom:5px}
.sig-pill{font-size:7px;padding:2px 5px;border-radius:3px;font-weight:600;letter-spacing:0.3px}
.play-setup{font-size:10px;color:var(--text2);line-height:1.5;padding-top:5px;border-top:1px solid var(--text4)}
/* ── Tabs ── */
.tabs{display:flex;gap:5px;margin-bottom:10px;flex-wrap:wrap}
.tab{padding:5px 10px;border-radius:18px;font-size:9px;letter-spacing:0.6px;cursor:pointer;border:1px solid var(--border);background:var(--bg1);color:var(--text3);transition:all 0.12s;font-family:inherit;white-space:nowrap}
.tab:hover{border-color:var(--border2);color:var(--text2)}
.tab.on{background:#1e3a5f;color:var(--blue);border-color:var(--blue-bdr)}
.tab.ron{background:var(--red-bg);color:var(--red);border-color:var(--red-bdr)}
/* ── Sector cards ── */
.cards{display:flex;flex-direction:column;gap:7px}
.scard{background:var(--bg2);border:1px solid var(--border);border-radius:10px;padding:12px;transition:border-color 0.12s}
.scard.bull{border-left:3px solid var(--green)}
.scard.bear{border-left:3px solid var(--red)}
.scard.flat{border-left:3px solid var(--text4)}
.scard-top{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:7px;cursor:pointer}
.scard-name{font-size:11px;font-weight:700;color:var(--text1);letter-spacing:0.2px}
.scard-etf{font-size:9px;color:var(--text3);margin-top:1px}
.scard-right{text-align:right}
.scard-pct{font-size:15px;font-weight:700}
.badge{font-size:8px;padding:2px 6px;border-radius:10px;display:inline-block;margin-top:2px;letter-spacing:0.3px}
.badge.lead{background:var(--green-bg);color:var(--green)}
.badge.lag{background:var(--red-bg);color:var(--red)}
.badge.neut{background:var(--blue-bg);color:var(--blue)}
.sbar{height:2px;background:var(--border);border-radius:1px;overflow:hidden;margin-bottom:7px}
.sbar-fill{height:100%;border-radius:1px}
.sbar-up{background:linear-gradient(90deg,#16a34a,var(--green))}
.sbar-dn{background:linear-gradient(90deg,#dc2626,var(--red))}
.scard-meta{display:flex;justify-content:space-between;align-items:center}
.scard-q{font-size:9px;color:var(--text3)}
.scard-q span{font-size:11px;font-weight:700}
.scard-right-meta{display:flex;align-items:center;gap:7px}
.trend-mini{display:flex;align-items:flex-end;gap:1.5px;height:14px}
.trend-bar{width:2.5px;border-radius:1px}
.type-pill{font-size:8px;padding:2px 6px;border-radius:4px;font-weight:700;letter-spacing:0.4px}
/* ── Sector detail ── */
.sdet{display:none;margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}
.sdet.open{display:block}
.sdet-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:5px;margin-bottom:10px}
.sdet-stat{background:var(--bg3);border-radius:6px;padding:6px 8px}
.sdet-lbl{font-size:8px;color:var(--text3);margin-bottom:1px;letter-spacing:0.4px}
.sdet-val{font-size:11px;font-weight:700}
.iv-track{height:2px;background:var(--border);border-radius:1px;overflow:hidden;margin-top:3px}
.iv-fill{height:100%;border-radius:1px}
/* ── Stock rows ── */
.stocks-hdr{font-size:8px;color:var(--text3);letter-spacing:0.7px;margin-bottom:5px}
.stock-row{display:flex;justify-content:space-between;align-items:center;padding:6px 8px;background:var(--bg3);border-radius:6px;margin-bottom:3px;cursor:pointer;border:1px solid transparent;transition:all 0.12s}
.stock-row:hover{border-color:var(--border)}
.stock-row.active{border-color:var(--border2);background:#0d1520}
.stock-left{display:flex;align-items:center;gap:7px}
.stock-t{font-size:10px;font-weight:700;color:var(--text1);min-width:38px}
.stock-n{font-size:9px;color:var(--text3)}
.stock-right{display:flex;align-items:center;gap:6px}
.stock-pct{font-size:11px;font-weight:700}
.rsi-pill{font-size:7px;padding:2px 5px;border-radius:3px;font-weight:700;letter-spacing:0.3px}
.rsi-ob{background:var(--red-bg);color:var(--red);border:1px solid var(--red-bdr)}
.rsi-os{background:var(--green-bg);color:var(--green);border:1px solid var(--green-bdr)}
.rsi-n{background:var(--blue-bg);color:var(--blue);border:1px solid var(--blue-bdr)}
.earn-badge{font-size:7px;padding:1px 4px;border-radius:3px;background:#1a1205;color:var(--amber);border:1px solid var(--amber-bdr);font-weight:700}
/* ── Stock panel ── */
.spanel{display:none;background:#090d16;border:1px solid var(--border);border-radius:8px;padding:11px;margin-bottom:3px}
.spanel.open{display:block}
.spanel-hdr{display:flex;justify-content:space-between;align-items:center;margin-bottom:9px}
.spanel-ticker{font-size:13px;font-weight:700;color:var(--text1)}
.spanel-sub{font-size:10px;color:var(--text3);margin-top:1px}
.spanel-price{text-align:right}
/* ── Chart toggle ── */
.chart-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 9px;border-radius:7px;font-size:8px;letter-spacing:0.5px;cursor:pointer;border:1px solid var(--border);background:var(--bg1);color:var(--text3);margin-bottom:8px;font-family:inherit;transition:all 0.12s}
.chart-btn.on{background:var(--blue-bg);color:var(--blue);border-color:var(--blue-bdr)}
.chart-wrap{display:none;margin-bottom:9px;border-radius:7px;overflow:hidden;border:1px solid var(--border)}
.chart-wrap.show{display:block}
/* ── Earnings warning ── */
.earn-warn{background:var(--amber-bg);border:1px solid var(--amber-bdr);border-radius:6px;padding:7px 10px;margin-bottom:9px;font-size:10px;color:var(--amber);line-height:1.5}
/* ── RSI bar ── */
.rsi-bar-wrap{margin-bottom:9px}
.rsi-bar-labels{display:flex;justify-content:space-between;font-size:7px;color:var(--text3);margin-bottom:2px}
.rsi-track{height:5px;background:var(--border);border-radius:3px;position:relative;overflow:visible}
.rsi-zone-os{position:absolute;left:0;top:0;width:30%;height:100%;background:rgba(74,222,128,0.08);border-radius:3px 0 0 3px}
.rsi-zone-ob{position:absolute;right:0;top:0;width:30%;height:100%;background:rgba(248,113,113,0.08);border-radius:0 3px 3px 0}
.rsi-needle{position:absolute;top:-4px;width:2px;height:13px;border-radius:1px;background:var(--blue)}
/* ── Tech grid ── */
.tech-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;margin-bottom:9px}
.tech-box{background:var(--bg3);border-radius:5px;padding:5px 7px;text-align:center}
.tech-lbl{font-size:7px;color:var(--text3);margin-bottom:2px;letter-spacing:0.4px}
.tech-val{font-size:11px;font-weight:700}
.tech-sig{font-size:7px;margin-top:1px;letter-spacing:0.3px}
/* ── Earnings context in tech ── */
.earn-box{background:var(--bg3);border-radius:5px;padding:5px 7px;text-align:center;border:1px solid var(--amber-bdr)}
/* ── Opt tabs ── */
.opt-tabs{display:flex;gap:4px;margin-bottom:7px}
.opt-tab{padding:4px 9px;border-radius:7px;font-size:8px;letter-spacing:0.5px;cursor:pointer;border:1px solid var(--border);background:var(--bg1);color:var(--text3);font-family:inherit;transition:all 0.12s}
.opt-tab.call-on{background:#1e3a5f;color:var(--blue);border-color:var(--blue-bdr)}
.opt-tab.put-on{background:var(--red-bg);color:var(--red);border-color:var(--red-bdr)}
.opt-tab.spr-on{background:var(--blue-bg);color:var(--blue);border-color:var(--blue-bdr)}
.opt-content{display:none}
.opt-content.show{display:block}
/* ── Spreads ── */
.chain-lbl{font-size:8px;color:var(--text3);letter-spacing:0.7px;margin-bottom:5px}
.spread-row{background:var(--bg3);border-radius:6px;padding:7px 9px;margin-bottom:5px;border:1px solid var(--border)}
.spread-row.best{border-color:var(--blue-bdr)}
.spread-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;flex-wrap:wrap;gap:3px}
.spread-name{font-size:9px;font-weight:700;color:var(--text1)}
.spread-badges{display:flex;gap:3px;flex-wrap:wrap}
.sbadge{font-size:8px;padding:1px 5px;border-radius:3px}
.sbadge.call{background:var(--green-bg);color:var(--green)}
.sbadge.put{background:var(--red-bg);color:var(--red)}
.sbadge.best{background:#1e3a5f;color:var(--blue)}
.spread-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:3px}
.spread-stat{text-align:center}
.spread-stat .ssv{font-size:9px;font-weight:700}
.spread-stat .ssk{font-size:7px;color:var(--text3);margin-top:1px}
.strat-box{border-radius:7px;padding:8px 10px;margin-bottom:5px}
.strat-box.call{background:var(--green-bg);border:1px solid var(--green-bdr)}
.strat-box.put{background:var(--red-bg);border:1px solid var(--red-bdr)}
.strat-box.spread{background:var(--blue-bg);border:1px solid var(--blue-bdr)}
.strat-box.watch{background:var(--amber-bg);border:1px solid var(--amber-bdr)}
.strat-title{font-size:8px;letter-spacing:0.7px;font-weight:700;margin-bottom:3px}
.strat-box.call .strat-title{color:var(--green)}
.strat-box.put .strat-title{color:var(--red)}
.strat-box.spread .strat-title{color:var(--blue)}
.strat-box.watch .strat-title{color:var(--amber)}
.strat-body{font-size:10px;color:var(--text2);line-height:1.5}
/* ── Macro ── */
.macro-verdict{border-radius:9px;padding:12px;margin-bottom:10px;display:flex;align-items:flex-start;gap:12px}
.macro-verdict.bull{background:var(--green-bg);border:1px solid var(--green-bdr)}
.macro-verdict.bear{background:var(--red-bg);border:1px solid var(--red-bdr)}
.macro-verdict.neut{background:var(--blue-bg);border:1px solid var(--blue-bdr)}
.macro-verdict.warn{background:var(--amber-bg);border:1px solid var(--amber-bdr)}
.verdict-icon{font-size:24px;flex-shrink:0;line-height:1;margin-top:1px}
.verdict-label{font-size:11px;font-weight:700;letter-spacing:0.7px;margin-bottom:3px}
.verdict-desc{font-size:10px;color:var(--text2);line-height:1.5}
.macro-bar-wrap{margin-bottom:10px}
.macro-bar-track{height:7px;background:var(--border);border-radius:4px;overflow:hidden;margin-bottom:3px}
.macro-bar-fill{height:100%;border-radius:4px;transition:width 0.5s ease}
.macro-bar-labels{display:flex;justify-content:space-between;font-size:7px;color:var(--text4)}
.macro-signals{display:flex;flex-direction:column;gap:5px;margin-bottom:10px}
.sig-row{background:var(--bg3);border:1px solid var(--border);border-radius:6px;overflow:hidden}
.sig-row-top{display:flex;justify-content:space-between;align-items:center;padding:6px 9px}
.sig-icon{font-size:12px;width:16px;text-align:center;flex-shrink:0}
.sig-name{font-size:10px;font-weight:700;color:var(--text1);margin-left:7px}
.sig-right{display:flex;align-items:center;gap:7px;flex-shrink:0}
.sig-val{font-size:10px;font-weight:700}
.sig-badge{font-size:8px;padding:2px 6px;border-radius:4px;font-weight:700;letter-spacing:0.4px;white-space:nowrap}
.sig-detail{font-size:9px;color:var(--text3);padding:0 9px 7px 32px;line-height:1.5}
.macro-note{font-size:8px;color:var(--text4);line-height:1.6;padding-top:7px;border-top:1px solid #1a2233;margin-top:4px}
.fred-note{font-size:8px;color:var(--blue);margin-top:3px}
/* ── Modal ── */
.modal-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.85);z-index:200;align-items:center;justify-content:center}
.modal-overlay.open{display:flex}
.modal{background:var(--bg2);border:1px solid var(--border);border-radius:13px;padding:22px;width:92%;max-width:400px}
.modal h2{font-size:14px;color:var(--text1);margin-bottom:5px}
.modal p{font-size:10px;color:var(--text3);margin-bottom:14px;line-height:1.6}
.modal label{font-size:9px;color:var(--text2);letter-spacing:0.6px;display:block;margin-bottom:3px}
.modal input{width:100%;background:var(--bg3);border:1px solid var(--border);border-radius:6px;padding:7px 9px;color:var(--text1);font-size:11px;font-family:inherit;margin-bottom:10px;outline:none}
.modal input:focus{border-color:var(--blue-bdr)}
.modal-btns{display:flex;gap:7px;justify-content:flex-end;margin-top:3px}
.mbtn{font-size:10px;padding:6px 14px;border-radius:6px;cursor:pointer;border:1px solid var(--border);background:var(--bg2);color:var(--text2);font-family:inherit;transition:all 0.12s}
.mbtn.primary{background:#1e3a5f;color:var(--blue);border-color:var(--blue-bdr)}
.mbtn.primary:hover{background:#2563eb;color:#fff}
.warn-txt{font-size:9px;color:var(--amber);margin-top:-6px;margin-bottom:10px;line-height:1.5}
/* ── Global ETF ── */
.etf-region-hdr{font-size:9px;color:var(--text3);letter-spacing:0.8px;margin:10px 0 5px;padding-bottom:4px;border-bottom:1px solid var(--border)}
.etf-grid{display:flex;flex-direction:column;gap:4px}
.etf-row{display:flex;align-items:center;gap:10px;padding:7px 10px;background:var(--bg3);border-radius:7px;border:1px solid var(--border);border-left:3px solid var(--border2);transition:border-color 0.12s;cursor:default}
.etf-row.pos{border-left-color:var(--green)}
.etf-row.neg{border-left-color:var(--red)}
.etf-flag{font-size:16px;flex-shrink:0;width:22px;text-align:center}
.etf-info{flex:1;min-width:0}
.etf-country{font-size:11px;font-weight:700;color:var(--text1)}
.etf-ticker{font-size:9px;color:var(--text3);margin-top:1px}
.etf-bar-wrap{flex:1;min-width:60px;max-width:120px}
.etf-bar-track{height:4px;background:var(--border);border-radius:2px;overflow:hidden}
.etf-bar-fill{height:100%;border-radius:2px}
.etf-pct{font-size:13px;font-weight:700;min-width:60px;text-align:right;flex-shrink:0}
.etf-extra{font-size:9px;color:var(--text3);min-width:50px;text-align:right;flex-shrink:0}
.etf-loading-row{font-size:9px;color:var(--text3);padding:4px 10px;font-style:italic}
.etf-note{font-size:8px;color:var(--text4);margin-top:10px;line-height:1.6;padding-top:7px;border-top:1px solid var(--border)}
/* ── Watchlist ── */
.wl-row{display:flex;align-items:center;gap:10px;padding:8px 10px;background:var(--bg3);border-radius:7px;margin-bottom:5px;border:1px solid var(--border);transition:border-color 0.12s;cursor:pointer}
.wl-row:hover{border-color:var(--border2)}
.wl-ticker{font-size:12px;font-weight:700;color:var(--text1);min-width:50px}
.wl-name{font-size:10px;color:var(--text3);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wl-pct{font-size:13px;font-weight:700;min-width:60px;text-align:right}
.wl-price{font-size:10px;color:var(--text3);min-width:50px;text-align:right}
.wl-rsi{font-size:8px;padding:2px 5px;border-radius:3px;font-weight:700;flex-shrink:0}
.wl-remove{font-size:10px;color:var(--text4);cursor:pointer;padding:2px 5px;border-radius:3px;border:none;background:transparent;font-family:inherit;flex-shrink:0;transition:color 0.12s}
.wl-remove:hover{color:var(--red)}
.wl-loading-row{font-size:9px;color:var(--text3);padding:4px 0}
/* ── Pre-market ── */
.pm-row{display:flex;align-items:center;gap:10px;padding:8px 10px;background:var(--bg3);border-radius:7px;margin-bottom:4px;border:1px solid var(--border);cursor:pointer;transition:border-color 0.12s}
.pm-row:hover{border-color:var(--border2)}
.pm-row.pm-up{border-left:3px solid var(--green)}
.pm-row.pm-dn{border-left:3px solid var(--red)}
.pm-ticker{font-size:11px;font-weight:700;color:var(--text1);min-width:48px}
.pm-name{font-size:10px;color:var(--text3);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pm-pct{font-size:13px;font-weight:700;min-width:62px;text-align:right;flex-shrink:0}
.pm-price{font-size:10px;color:var(--text3);min-width:52px;text-align:right;flex-shrink:0}
.pm-vol{font-size:8px;padding:2px 5px;border-radius:3px;flex-shrink:0}
.pm-section-lbl{font-size:9px;color:var(--text3);letter-spacing:0.7px;margin:10px 0 5px;padding-bottom:4px;border-bottom:1px solid var(--border)}
.pm-note{font-size:8px;color:var(--text4);line-height:1.6;margin-top:10px;padding-top:8px;border-top:1px solid var(--border)}
/* ── Technical Analysis ── */
.ta-tf-btn{padding:4px 10px;border-radius:7px;font-size:9px;letter-spacing:0.5px;cursor:pointer;border:1px solid var(--border);background:var(--bg1);color:var(--text3);font-family:inherit;transition:all 0.12s}
.ta-tf-btn.on{background:#1e3a5f;color:var(--blue);border-color:var(--blue-bdr)}
.ta-verdict{border-radius:10px;padding:14px;margin-bottom:12px;display:flex;align-items:flex-start;gap:12px}
.ta-verdict.bull{background:var(--green-bg);border:1px solid var(--green-bdr)}
.ta-verdict.bear{background:var(--red-bg);border:1px solid var(--red-bdr)}
.ta-verdict.neut{background:var(--blue-bg);border:1px solid var(--blue-bdr)}
.ta-verdict-icon{font-size:26px;flex-shrink:0;line-height:1;margin-top:1px}
.ta-verdict-label{font-size:12px;font-weight:700;letter-spacing:0.6px;margin-bottom:3px}
.ta-verdict-desc{font-size:11px;color:var(--text2);line-height:1.5}
.ta-section{background:var(--bg3);border:1px solid var(--border);border-radius:9px;padding:11px 13px;margin-bottom:9px}
.ta-section-title{font-size:9px;color:var(--text3);letter-spacing:0.8px;margin-bottom:8px;font-weight:700}
.ta-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;margin-bottom:0}
.ta-box{background:var(--bg1);border-radius:6px;padding:6px 8px;text-align:center}
.ta-box-lbl{font-size:8px;color:var(--text3);margin-bottom:2px;letter-spacing:0.4px}
.ta-box-val{font-size:12px;font-weight:700}
.ta-box-sig{font-size:8px;margin-top:1px}
.ta-sr-row{display:flex;align-items:center;gap:8px;padding:5px 8px;background:var(--bg1);border-radius:5px;margin-bottom:4px}
.ta-sr-label{font-size:9px;color:var(--text3);min-width:80px}
.ta-sr-bar{flex:1;height:3px;background:var(--border);border-radius:2px;overflow:hidden;position:relative}
.ta-sr-fill{height:100%;border-radius:2px}
.ta-sr-val{font-size:10px;font-weight:700;min-width:50px;text-align:right}
.ta-pattern{border-radius:7px;padding:9px 11px;margin-bottom:6px}
.ta-pattern.bull{background:var(--green-bg);border:1px solid var(--green-bdr)}
.ta-pattern.bear{background:var(--red-bg);border:1px solid var(--red-bdr)}
.ta-pattern.neut{background:var(--blue-bg);border:1px solid var(--blue-bdr)}
.ta-pattern-name{font-size:10px;font-weight:700;margin-bottom:3px}
.ta-pattern.bull .ta-pattern-name{color:var(--green)}
.ta-pattern.bear .ta-pattern-name{color:var(--red)}
.ta-pattern.neut .ta-pattern-name{color:var(--blue)}
.ta-pattern-desc{font-size:10px;color:var(--text2);line-height:1.5}
.ta-confirm{font-size:9px;margin-top:4px;color:var(--text3)}
.ta-confirm span{font-weight:700}
.ta-options-box{background:var(--blue-bg);border:1px solid var(--blue-bdr);border-radius:8px;padding:10px 12px}
.ta-options-title{font-size:9px;color:var(--blue);letter-spacing:0.7px;margin-bottom:4px;font-weight:700}
.ta-options-body{font-size:11px;color:var(--text2);line-height:1.5}
.ta-disclaimer{font-size:8px;color:var(--text4);line-height:1.6;margin-top:10px;padding-top:7px;border-top:1px solid var(--border)}
.ta-price-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;padding-bottom:10px;border-bottom:1px solid var(--border)}
.ta-ticker-lbl{font-size:18px;font-weight:700;color:var(--text1)}
.ta-price-info{text-align:right}
/* ── Light mode ── */
body.light{
  --bg0:#f1f3f6;--bg1:#ffffff;--bg2:#ffffff;--bg3:#f4f6f9;
  --border:#d1d9e6;--border2:#a0aec0;
  --text1:#0f172a;--text2:#334155;--text3:#64748b;--text4:#94a3b8;
  --green-bg:#dcfce7;--red-bg:#fee2e2;--amber-bg:#fef3c7;--blue-bg:#dbeafe;
  --green-bdr:#86efac;--red-bdr:#fca5a5;--amber-bdr:#fcd34d;--blue-bdr:#93c5fd;
}
body.light ::-webkit-scrollbar-track{background:var(--bg1)}
body.light ::-webkit-scrollbar-thumb{background:var(--border)}
/* ── Font sizes: large / xl / xxl ── */
/* LARGE — comfortable reading */
body.font-lg .ttl{font-size:24px} body.font-lg .tab{font-size:12px;padding:7px 13px} body.font-lg .scard-name{font-size:14px} body.font-lg .scard-pct{font-size:19px} body.font-lg .sum-val{font-size:17px} body.font-lg .sum-name{font-size:13px} body.font-lg .sum-lbl{font-size:10px} body.font-lg .stock-t{font-size:13px} body.font-lg .stock-n{font-size:11px} body.font-lg .stock-pct{font-size:14px} body.font-lg .rsi-pill{font-size:10px;padding:3px 7px} body.font-lg .panel-title{font-size:14px} body.font-lg .clk{font-size:14px} body.font-lg .wl-ticker{font-size:14px} body.font-lg .wl-pct{font-size:15px} body.font-lg .pm-ticker{font-size:13px} body.font-lg .pm-pct{font-size:15px} body.font-lg .ta-verdict-desc{font-size:13px} body.font-lg .ta-pattern-desc{font-size:12px} body.font-lg .ta-options-body{font-size:13px} body.font-lg .badge{font-size:10px} body.font-lg .stocks-hdr{font-size:10px} body.font-lg .etf2-country{font-size:17px} body.font-lg .etf2-sub{font-size:13px} body.font-lg .etf2-perf-val{font-size:13px} body.font-lg .etf2-perf-lbl{font-size:9px} body.font-lg .etf2-etf-name{font-size:12px} body.font-lg .etf2-etf-sub{font-size:10px} body.font-lg .etf2-cell{font-size:12px} body.font-lg .etf2-exp{font-size:11px} body.font-lg .etf2-score{font-size:11px} body.font-lg .etf2-sort-btn{font-size:11px} body.font-lg .heat-name{font-size:11px} body.font-lg .heat-pct{font-size:15px} body.font-lg .heat-etf{font-size:9px} body.font-lg .pulse-mover-t{font-size:14px} body.font-lg .pulse-mover-n{font-size:11px}
/* XL — no reading glasses */
body.font-xl .ttl{font-size:28px} body.font-xl .tab{font-size:14px;padding:8px 15px} body.font-xl .scard-name{font-size:17px} body.font-xl .scard-pct{font-size:23px} body.font-xl .sum-val{font-size:20px} body.font-xl .sum-name{font-size:15px} body.font-xl .sum-lbl{font-size:11px} body.font-xl .stock-t{font-size:16px} body.font-xl .stock-n{font-size:13px} body.font-xl .stock-pct{font-size:17px} body.font-xl .rsi-pill{font-size:12px;padding:4px 9px} body.font-xl .panel-title{font-size:17px} body.font-xl .clk{font-size:16px} body.font-xl .wl-ticker{font-size:17px} body.font-xl .wl-pct{font-size:18px} body.font-xl .pm-ticker{font-size:16px} body.font-xl .pm-pct{font-size:18px} body.font-xl .ta-verdict-desc{font-size:16px} body.font-xl .ta-pattern-desc{font-size:15px} body.font-xl .ta-options-body{font-size:16px} body.font-xl .badge{font-size:12px} body.font-xl .stocks-hdr{font-size:12px} body.font-xl .sdet-lbl{font-size:11px} body.font-xl .sdet-val{font-size:15px} body.font-xl .etf2-country{font-size:19px} body.font-xl .etf2-sub{font-size:15px} body.font-xl .etf2-perf-val{font-size:15px} body.font-xl .etf2-perf-lbl{font-size:10px} body.font-xl .etf2-etf-name{font-size:14px} body.font-xl .etf2-etf-sub{font-size:11px} body.font-xl .etf2-cell{font-size:14px} body.font-xl .etf2-exp{font-size:12px} body.font-xl .etf2-score{font-size:12px} body.font-xl .etf2-sort-btn{font-size:12px} body.font-xl .heat-name{font-size:12px} body.font-xl .heat-pct{font-size:17px} body.font-xl .heat-etf{font-size:10px} body.font-xl .pulse-mover-t{font-size:16px} body.font-xl .pulse-mover-n{font-size:12px}
/* XXL — maximum accessibility */
body.font-xxl .ttl{font-size:32px} body.font-xxl .tab{font-size:16px;padding:10px 16px} body.font-xxl .scard-name{font-size:20px} body.font-xxl .scard-pct{font-size:28px} body.font-xxl .sum-val{font-size:24px} body.font-xxl .sum-name{font-size:17px} body.font-xxl .sum-lbl{font-size:13px} body.font-xxl .stock-t{font-size:19px} body.font-xxl .stock-n{font-size:15px} body.font-xxl .stock-pct{font-size:20px} body.font-xxl .rsi-pill{font-size:14px;padding:5px 11px} body.font-xxl .panel-title{font-size:20px} body.font-xxl .clk{font-size:18px} body.font-xxl .wl-ticker{font-size:20px} body.font-xxl .wl-pct{font-size:22px} body.font-xxl .pm-ticker{font-size:19px} body.font-xxl .pm-pct{font-size:22px} body.font-xxl .ta-verdict-desc{font-size:19px} body.font-xxl .ta-pattern-desc{font-size:18px} body.font-xxl .ta-options-body{font-size:19px} body.font-xxl .badge{font-size:14px} body.font-xxl .stocks-hdr{font-size:14px} body.font-xxl .sdet-lbl{font-size:13px} body.font-xxl .sdet-val{font-size:18px} body.font-xxl .play-name{font-size:17px} body.font-xxl .play-setup{font-size:14px} body.font-xxl .etf2-country{font-size:22px} body.font-xxl .etf2-sub{font-size:18px} body.font-xxl .etf2-perf-val{font-size:18px} body.font-xxl .etf2-perf-lbl{font-size:12px} body.font-xxl .etf2-etf-name{font-size:16px} body.font-xxl .etf2-etf-sub{font-size:13px} body.font-xxl .etf2-cell{font-size:16px} body.font-xxl .etf2-exp{font-size:14px} body.font-xxl .etf2-score{font-size:14px} body.font-xxl .etf2-sort-btn{font-size:14px} body.font-xxl .heat-name{font-size:14px} body.font-xxl .heat-pct{font-size:20px} body.font-xxl .heat-etf{font-size:11px} body.font-xxl .pulse-mover-t{font-size:19px} body.font-xxl .pulse-mover-n{font-size:13px}
/* XXXL — large print / TV display */
body.font-xxxl .ttl{font-size:40px} body.font-xxxl .tab{font-size:19px;padding:12px 20px} body.font-xxxl .scard-name{font-size:25px} body.font-xxxl .scard-pct{font-size:34px} body.font-xxxl .sum-val{font-size:30px} body.font-xxxl .sum-name{font-size:21px} body.font-xxxl .sum-lbl{font-size:15px} body.font-xxxl .stock-t{font-size:23px} body.font-xxxl .stock-n{font-size:18px} body.font-xxxl .stock-pct{font-size:25px} body.font-xxxl .rsi-pill{font-size:17px;padding:6px 13px} body.font-xxxl .panel-title{font-size:24px} body.font-xxxl .clk{font-size:22px} body.font-xxxl .wl-ticker{font-size:24px} body.font-xxxl .wl-pct{font-size:27px} body.font-xxxl .pm-ticker{font-size:23px} body.font-xxxl .pm-pct{font-size:27px} body.font-xxxl .ta-verdict-desc{font-size:23px} body.font-xxxl .ta-pattern-desc{font-size:21px} body.font-xxxl .ta-options-body{font-size:22px} body.font-xxxl .badge{font-size:17px} body.font-xxxl .stocks-hdr{font-size:17px} body.font-xxxl .sdet-lbl{font-size:16px} body.font-xxxl .sdet-val{font-size:22px} body.font-xxxl .play-name{font-size:21px} body.font-xxxl .play-setup{font-size:18px} body.font-xxxl .wrap{max-width:1280px} body.font-xxxl .etf2-country{font-size:26px} body.font-xxxl .etf2-sub{font-size:22px} body.font-xxxl .etf2-perf-val{font-size:22px} body.font-xxxl .etf2-perf-lbl{font-size:13px} body.font-xxxl .etf2-etf-name{font-size:20px} body.font-xxxl .etf2-etf-sub{font-size:15px} body.font-xxxl .etf2-cell{font-size:20px} body.font-xxxl .etf2-exp{font-size:17px} body.font-xxxl .etf2-score{font-size:17px} body.font-xxxl .etf2-sort-btn{font-size:16px;padding:6px 14px} body.font-xxxl .heat-name{font-size:16px} body.font-xxxl .heat-pct{font-size:24px} body.font-xxxl .heat-etf{font-size:13px} body.font-xxxl .pulse-mover-t{font-size:22px} body.font-xxxl .pulse-mover-n{font-size:15px}
/* Mom Explains scales with font size */
body.font-xl #ta-body [style*="font-size:12px;color:#c4b5fd"]{font-size:16px!important}
body.font-xxl #ta-body [style*="font-size:12px;color:#c4b5fd"]{font-size:20px!important}
/* ── Mode buttons ── */
.mode-btn{padding:4px 8px;border-radius:6px;font-size:10px;cursor:pointer;border:1px solid var(--border);background:var(--bg3);color:var(--text3);font-family:inherit;transition:all 0.15s;white-space:nowrap}
.mode-btn:hover{border-color:var(--border2);color:var(--text2)}
.mode-btn.active{border-color:var(--blue-bdr);background:var(--blue-bg);color:var(--blue)}
/* ── Global ETF v2 ── */
.etf2-row{background:var(--bg3);border:1px solid var(--border);border-radius:8px;margin-bottom:5px;overflow:hidden;transition:border-color 0.12s}
.etf2-row:hover{border-color:var(--border2)}
.etf2-row.pos{border-left:3px solid var(--green)}
.etf2-row.neg{border-left:3px solid var(--red)}
.etf2-main{display:flex;align-items:center;gap:8px;padding:9px 10px;cursor:pointer}
.etf2-flag{font-size:18px;flex-shrink:0;width:24px;text-align:center}
.etf2-info{flex:1;min-width:0}
.etf2-country{font-size:15px;font-weight:700;color:var(--text1)}
.etf2-sub{font-size:11px;color:var(--text3);margin-top:2px}
.etf2-perfs{display:flex;gap:8px;flex-shrink:0;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.etf2-perf{text-align:center;min-width:44px}
.etf2-perf-val{font-size:11px;font-weight:700}
.etf2-perf-lbl{font-size:7px;color:var(--text4);letter-spacing:0.3px;margin-top:1px}
.etf2-chevron{font-size:9px;color:var(--text4);flex-shrink:0;transition:transform 0.2s;margin-left:4px}
.etf2-row.open .etf2-chevron{transform:rotate(180deg)}
/* Detail panel */
.etf2-detail{display:none;padding:0 10px 10px}
.etf2-row.open .etf2-detail{display:block}
.etf2-detail-hdr{display:grid;grid-template-columns:2fr 1fr 1fr 1fr 1fr;gap:4px;padding:5px 8px;background:var(--bg1);border-radius:5px;margin-bottom:5px;font-size:7px;color:var(--text3);letter-spacing:0.5px;font-weight:700}
.etf2-etf-row{display:grid;grid-template-columns:2fr 1fr 1fr 1fr 1fr;gap:4px;padding:6px 8px;background:var(--bg3);border-radius:6px;margin-bottom:3px;align-items:center;border:1px solid var(--border)}
.etf2-etf-row.best{border-color:var(--blue-bdr);background:var(--blue-bg)}
.etf2-etf-name{font-size:10px;font-weight:700;color:var(--text1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.etf2-etf-sub{font-size:8px;color:var(--text3)}
.etf2-cell{font-size:10px;font-weight:600;text-align:right}
.etf2-exp{font-size:9px;font-weight:700;text-align:right}
.etf2-score{font-size:9px;font-weight:700;color:var(--blue);text-align:right}
.etf2-loading{text-align:center;padding:14px;color:var(--text3);font-size:9px}
.etf2-sort-btns{display:flex;gap:5px;margin-bottom:10px;flex-wrap:wrap}
.etf2-sort-btn{padding:4px 9px;border-radius:6px;font-size:9px;cursor:pointer;border:1px solid var(--border);background:var(--bg1);color:var(--text3);font-family:inherit;transition:all 0.12s}
.etf2-sort-btn.on{background:#1e3a5f;color:var(--blue);border-color:var(--blue-bdr)}
.etf2-note{font-size:8px;color:var(--text4);margin-top:10px;line-height:1.6;padding-top:7px;border-top:1px solid var(--border)}
/* ── Global Liquidity ── */
.liq-verdict{border-radius:10px;padding:14px 16px;margin-bottom:12px;display:flex;align-items:center;gap:14px}
.liq-verdict-label{font-size:18px;font-weight:700;letter-spacing:0.5px;margin-bottom:3px}
.liq-verdict-sub{font-size:11px;line-height:1.6;opacity:0.85}
.liq-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:10px}
.liq-card{background:var(--bg3);border:1px solid var(--border);border-radius:8px;padding:10px 12px}
.liq-card-name{font-size:8px;color:var(--text3);letter-spacing:0.5px;margin-bottom:4px;font-weight:700}
.liq-card-val{font-size:15px;font-weight:700;margin-bottom:2px}
.liq-card-trend{font-size:9px;color:var(--text3)}
.liq-bar-wrap{margin-bottom:10px}
.liq-bar-track{height:6px;background:var(--border);border-radius:3px;margin:4px 0}
.liq-bar-fill{height:100%;border-radius:3px;transition:width 0.5s ease}
/* ── AI Prediction ── */
.ai-verdict{border-radius:10px;padding:14px 16px;margin-bottom:12px;display:flex;align-items:center;gap:14px}
.ai-verdict-icon{font-size:36px;flex-shrink:0;line-height:1}
.ai-verdict-right{flex:1}
.ai-verdict-call{font-size:18px;font-weight:700;letter-spacing:0.5px;margin-bottom:3px}
.ai-verdict-sub{font-size:11px;line-height:1.6;opacity:0.85}
.ai-signals-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:10px}
.ai-sig{background:var(--bg3);border:1px solid var(--border);border-radius:7px;padding:8px 10px;display:flex;align-items:center;gap:8px}
.ai-sig-icon{font-size:14px;flex-shrink:0}
.ai-sig-body{flex:1;min-width:0}
.ai-sig-name{font-size:9px;color:var(--text3);letter-spacing:0.4px}
.ai-sig-val{font-size:11px;font-weight:700}
.ai-sig-bar{height:3px;border-radius:2px;margin-top:4px;background:var(--border)}
.ai-sig-fill{height:100%;border-radius:2px;transition:width 0.4s ease}
.ai-disclaimer{font-size:8px;color:var(--text4);padding:7px 10px;background:var(--bg3);border-radius:6px;line-height:1.6;border:1px solid var(--border)}
/* ── FX Currency Row ── */
.etf2-fx{display:flex;align-items:center;gap:6px;padding:4px 10px 7px 56px;flex-wrap:wrap}
.etf2-fx-label{font-size:8px;color:var(--text3);letter-spacing:0.4px;flex-shrink:0}
.etf2-fx-pill{font-size:9px;font-weight:700;padding:2px 7px;border-radius:4px;display:flex;align-items:center;gap:4px}
.etf2-fx-pill .fx-period{font-size:7px;color:var(--text3);font-weight:400}
/* ── ETF Compare ── */
.cmp-wrap{display:grid;grid-template-columns:1fr 1fr;gap:0;border:1px solid var(--border);border-radius:9px;overflow:hidden;margin-bottom:10px}
.cmp-col{padding:12px}
.cmp-col.a{background:var(--green-bg);border-right:1px solid var(--border)}
.cmp-col.b{background:var(--blue-bg)}
.cmp-col-hdr{font-size:13px;font-weight:700;margin-bottom:2px}
.cmp-col.a .cmp-col-hdr{color:var(--green)}
.cmp-col.b .cmp-col-hdr{color:var(--blue)}
.cmp-col-name{font-size:9px;color:var(--text3);margin-bottom:10px;line-height:1.5}
.cmp-metric{margin-bottom:7px}
.cmp-metric-lbl{font-size:8px;color:var(--text3);letter-spacing:0.5px;margin-bottom:2px}
.cmp-metric-val{font-size:13px;font-weight:700}
.cmp-metric-sub{font-size:8px;margin-top:1px}
.cmp-winner{font-size:7px;padding:1px 5px;border-radius:3px;font-weight:700;letter-spacing:0.3px;display:inline-block;margin-top:2px}
.cmp-winner.green{background:var(--green-bg);color:var(--green);border:1px solid var(--green-bdr)}
.cmp-winner.blue{background:var(--blue-bg);color:var(--blue);border:1px solid var(--blue-bdr)}
.cmp-winner.tie{background:var(--bg3);color:var(--text3);border:1px solid var(--border)}
.cmp-verdict{border-radius:9px;padding:12px;margin-bottom:8px;text-align:center}
.cmp-verdict-title{font-size:12px;font-weight:700;margin-bottom:4px}
.cmp-verdict-body{font-size:11px;color:var(--text2);line-height:1.6}
.cmp-divider{display:flex;align-items:center;justify-content:center;padding:8px 0;font-size:10px;color:var(--text3);letter-spacing:0.5px;gap:8px;margin-bottom:4px}
.cmp-divider::before,.cmp-divider::after{content:"";flex:1;height:1px;background:var(--border)}
/* ── Watchlist Sidebar ── */
.wl-sidebar{display:none;position:fixed;top:0;right:0;width:255px;height:100vh;background:var(--bg2);border-left:1px solid var(--border);z-index:100;flex-direction:column;box-shadow:-4px 0 20px rgba(0,0,0,0.4)}
.wl-sidebar.open{display:flex}
.wl-sb-hdr{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 9px;border-bottom:1px solid var(--border);flex-shrink:0}
.wl-sb-title{font-size:11px;font-weight:700;color:var(--text1);letter-spacing:0.3px}
.wl-sb-close{font-size:15px;color:var(--text3);cursor:pointer;padding:2px 7px;border-radius:4px;border:none;background:transparent;font-family:inherit;transition:color 0.12s}
.wl-sb-close:hover{color:var(--red)}
.wl-sb-add{display:flex;gap:5px;padding:8px 10px;border-bottom:1px solid var(--border);flex-shrink:0}
.wl-sb-add input{flex:1;background:var(--bg3);border:1px solid var(--border);border-radius:6px;padding:6px 8px;color:var(--text1);font-size:11px;font-family:inherit;outline:none;min-width:0}
.wl-sb-add input:focus{border-color:var(--blue-bdr)}
.wl-sb-add button{padding:6px 10px;border-radius:6px;border:1px solid var(--green-bdr);background:var(--green-bg);color:var(--green);font-size:10px;font-family:inherit;cursor:pointer;font-weight:700;flex-shrink:0}
.wl-sb-list{flex:1;overflow-y:auto;padding:6px 8px}
.wl-sb-row{display:flex;align-items:center;gap:5px;padding:7px 8px;background:var(--bg3);border-radius:6px;margin-bottom:4px;cursor:pointer;border:1px solid transparent;transition:border-color 0.12s}
.wl-sb-row:hover{border-color:var(--border)}
.wl-sb-row.up{border-left:2px solid var(--green)}
.wl-sb-row.dn{border-left:2px solid var(--red)}
.wl-sb-ticker{font-size:11px;font-weight:700;color:var(--text1);min-width:40px}
.wl-sb-name{font-size:9px;color:var(--text3);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wl-sb-right{display:flex;align-items:center;gap:5px;flex-shrink:0}
.wl-sb-pct{font-size:12px;font-weight:700;min-width:52px;text-align:right}
.wl-sb-rsi{font-size:7px;padding:2px 5px;border-radius:3px;font-weight:700}
.wl-sb-remove{font-size:10px;color:var(--text4);cursor:pointer;padding:2px 5px;border:none;background:transparent;font-family:inherit;transition:color 0.12s}
.wl-sb-remove:hover{color:var(--red)}
.wl-sb-empty{text-align:center;padding:24px 12px;color:var(--text3);font-size:10px;line-height:1.8}
.wl-sb-footer{padding:7px 10px;border-top:1px solid var(--border);font-size:8px;color:var(--text4);text-align:center;flex-shrink:0;line-height:1.6}
.wl-toggle-btn{font-size:10px;padding:4px 8px;border-radius:6px;cursor:pointer;border:1px solid var(--border);background:var(--bg3);color:var(--text3);font-family:inherit;transition:all 0.15s;white-space:nowrap}
.wl-toggle-btn:hover{border-color:var(--border2);color:var(--text2)}
.wl-toggle-btn.open{border-color:#d97706;background:#1a1205;color:#fbbf24}
/* ── Scrollbar ── */
::-webkit-scrollbar{width:3px}
::-webkit-scrollbar-track{background:var(--bg0)}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
/* ── Sector heat map boxes ── */
.heat-box{border-radius:6px;padding:7px 6px;text-align:center;cursor:pointer;transition:all 0.2s;border:1px solid transparent;display:flex;flex-direction:column;justify-content:center}
.heat-box:hover{filter:brightness(1.2);transform:translateY(-1px);box-shadow:0 3px 10px rgba(0,0,0,0.4)}
.heat-name{font-size:9px;color:rgba(255,255,255,0.92);letter-spacing:0.2px;margin-bottom:3px;font-weight:700;line-height:1.2;word-break:break-word;white-space:normal}
.heat-pct{font-size:14px;font-weight:900;letter-spacing:-0.5px;line-height:1}
.heat-etf{font-size:8px;color:rgba(255,255,255,0.55);margin-top:2px}
/* Sector drill-down popup */
.sector-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:9999;background:var(--bg1);border:1px solid var(--border2);border-radius:12px;padding:16px;min-width:300px;max-width:420px;width:90vw;box-shadow:0 8px 40px rgba(0,0,0,0.7)}
.sector-popup-overlay{position:fixed;inset:0;z-index:9998;background:rgba(0,0,0,0.55)}
.sector-popup-hdr{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}
.sector-popup-close{background:none;border:none;color:var(--text3);font-size:18px;cursor:pointer;padding:0;line-height:1}
.sector-popup-close:hover{color:var(--text1)}
.sector-stock-row{display:flex;justify-content:space-between;align-items:center;padding:8px 10px;border-radius:7px;margin-bottom:4px;background:var(--bg3);border:1px solid var(--border)}
.sector-stock-t{font-size:14px;font-weight:800;color:var(--text1)}
.sector-stock-n{font-size:9px;color:var(--text3);margin-top:1px}
.sector-stock-pct{font-size:15px;font-weight:800}
.sector-stock-price{font-size:9px;color:var(--text3);text-align:right;margin-top:1px}
/* ── Setup cards ── */
.setup-card{background:var(--bg0);border-radius:8px;border:1px solid var(--border);padding:11px 13px;margin-bottom:7px;cursor:pointer;transition:border-color 0.15s}
.setup-card:hover{border-color:var(--border2)}
.setup-card.call-card{border-left:3px solid var(--green)}
.setup-card.put-card{border-left:3px solid var(--red)}
.setup-top{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:7px}
.setup-ticker{font-size:15px;font-weight:800;color:var(--text1);letter-spacing:0.5px}
.setup-name{font-size:9px;color:var(--text3);margin-top:1px}
.setup-score{font-size:20px;font-weight:900}
.setup-levels{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:4px;margin-top:7px}
.setup-lv{background:var(--bg1);border-radius:4px;padding:5px 7px;text-align:center}
.setup-lv-lbl{font-size:8px;color:var(--text3);letter-spacing:0.3px;margin-bottom:2px}
.setup-lv-val{font-size:11px;font-weight:700;color:var(--text1)}
.setup-badges{display:flex;gap:4px;flex-wrap:wrap;margin-top:6px}
.setup-badge{font-size:8px;padding:2px 6px;border-radius:3px;font-weight:600;letter-spacing:0.3px}
.setup-filter{padding:5px 10px;border-radius:5px;font-size:10px;font-weight:600;cursor:pointer;border:1px solid var(--border);background:var(--bg3);color:var(--text3);font-family:inherit;letter-spacing:0.3px;transition:all 0.15s}
.setup-filter.active{background:var(--blue-bg);border-color:var(--blue-bdr);color:var(--blue)}
.rr-good{color:var(--green)}
.rr-ok{color:var(--amber)}
.rr-bad{color:var(--red)}
/* ── Pulse movers ── */
.pulse-mover{display:flex;justify-content:space-between;align-items:center;padding:5px 0;border-bottom:1px solid var(--border);cursor:pointer;transition:background 0.1s;border-radius:4px;padding-left:4px;padding-right:4px}
.pulse-mover:hover{background:var(--bg0)}
.pulse-mover:last-child{border-bottom:none}
.pulse-mover-t{font-size:12px;font-weight:700;color:var(--text1)}
.pulse-mover-n{font-size:9px;color:var(--text3)}
/* ── Quick Chart Modal ── */
.qchart-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.82);z-index:10000;align-items:center;justify-content:center}
.qchart-overlay.open{display:flex}
.qchart-box{background:var(--bg1);border:1px solid var(--border2);border-radius:13px;width:min(680px,96vw);box-shadow:0 10px 50px rgba(0,0,0,0.8);overflow:hidden;display:flex;flex-direction:column}
.qchart-hdr{display:flex;align-items:center;justify-content:space-between;padding:10px 14px 8px;border-bottom:1px solid var(--border);flex-shrink:0}
.qchart-title{font-size:14px;font-weight:800;color:var(--text1);letter-spacing:0.5px}
.qchart-sub{font-size:10px;color:var(--text3);margin-top:1px}
.qchart-close{background:none;border:1px solid var(--border);border-radius:6px;color:var(--text3);font-size:13px;width:26px;height:26px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-family:inherit;transition:all 0.12s}
.qchart-close:hover{color:var(--text1);border-color:var(--border2)}
.qchart-iframe{width:100%;height:320px;border:none;display:block}
/* ── Trump Feed ── */
.trump-post{padding:8px 0;border-bottom:1px solid var(--border);font-size:10px;color:var(--text2);line-height:1.5;cursor:pointer}
.trump-post:hover{color:var(--text1)}
.trump-post:last-child{border-bottom:none}
.trump-time{font-size:8px;color:var(--text4);margin-bottom:3px;letter-spacing:0.4px}
/* ── Watchlist sync ── */
.wl-sync-wrap{padding:7px 10px;border-top:1px solid var(--border);flex-shrink:0}
.wl-sync-lbl{font-size:8px;color:var(--text3);letter-spacing:0.6px;margin-bottom:4px;font-weight:700}
.wl-sync-row{display:flex;gap:4px}
.wl-sync-input{flex:1;background:var(--bg3);border:1px solid var(--border);border-radius:5px;padding:5px 7px;color:var(--text1);font-size:10px;font-family:inherit;outline:none;min-width:0}
.wl-sync-input:focus{border-color:var(--blue-bdr)}
.wl-sync-btn{padding:5px 8px;border-radius:5px;border:1px solid var(--blue-bdr);background:var(--blue-bg);color:var(--blue);font-size:9px;font-family:inherit;cursor:pointer;font-weight:700;flex-shrink:0;white-space:nowrap}
.wl-sync-status{font-size:8px;margin-top:3px;min-height:12px}
.panel-page{display:none}
.panel-page.active{display:block}
/* ── Pulse 2-col layout ── */
.pulse-layout{display:grid;grid-template-columns:1fr 380px;gap:10px;align-items:start}
.pulse-right{display:flex;flex-direction:column;gap:8px}
@media(max-width:700px){
  .pulse-layout{grid-template-columns:1fr}
  .pulse-right{gap:7px}
  .heat-pct{font-size:12px}
  .heat-name{font-size:8px}
  #sector-heatmap{grid-template-columns:repeat(auto-fill,minmax(72px,1fr)) !important;gap:4px !important}
  .sumbar{grid-template-columns:repeat(2,1fr) !important}
  .tab{font-size:9px !important;padding:8px 8px !important}
  .wrap{padding:6px !important}
  .panel{padding:9px 10px !important}
}

/* ── TRADE SIGNALS (new) ── */
.sig-badge-row{display:flex;align-items:center;gap:6px;margin-top:5px;flex-wrap:wrap}
.trade-sig{display:inline-flex;align-items:center;gap:4px;font-size:8px;font-weight:700;padding:3px 7px;border-radius:5px;letter-spacing:0.5px;white-space:nowrap;border:1px solid transparent}
.trade-sig.strong-buy{background:rgba(74,222,128,0.18);color:#4ade80;border-color:#166534}
.trade-sig.buy{background:rgba(74,222,128,0.10);color:#86efac;border-color:#166534}
.trade-sig.hold{background:rgba(96,165,250,0.10);color:#93c5fd;border-color:#1e3a5f}
.trade-sig.sell{background:rgba(248,113,113,0.10);color:#fca5a5;border-color:#7f1d1d}
.trade-sig.strong-sell{background:rgba(248,113,113,0.20);color:#f87171;border-color:#7f1d1d}
.trade-sig.exit{background:#300;color:#ff4444;border-color:#ff4444;animation:blink 0.8s infinite}
.sig-conf{font-size:8px;color:var(--text3);margin-left:2px}
.sig-expand{display:none;padding:7px 10px;background:var(--bg1);border:1px solid var(--border);border-radius:6px;margin-top:5px;font-size:9px;line-height:1.7}
.sig-expand.open{display:block}
.sig-expand .sig-why{color:var(--text2)}
.sig-expand .sig-levels{display:grid;grid-template-columns:1fr 1fr 1fr;gap:4px;margin-top:6px}
.sig-expand .sig-lv{background:var(--bg3);border-radius:4px;padding:4px 7px;text-align:center}
.sig-expand .sig-lv-lbl{font-size:7px;color:var(--text3);letter-spacing:0.4px}
.sig-expand .sig-lv-val{font-size:10px;font-weight:700}
.wl-row-expanded{background:var(--bg1);border:1px solid var(--border2);border-radius:7px;margin-top:-4px;margin-bottom:4px;padding:10px 12px;display:none}
.wl-row-expanded.open{display:block}

/* ── AI Prediction upgraded ── */
.ai-score-bar-wrap{margin:8px 0}
.ai-score-track{height:8px;background:var(--border);border-radius:4px;overflow:hidden}
.ai-score-fill{height:100%;border-radius:4px;transition:width 0.6s ease}
.ai-top3{margin-top:10px;border-top:1px solid var(--border);padding-top:8px}
.ai-top3-lbl{font-size:8px;color:var(--text3);letter-spacing:0.7px;margin-bottom:5px}
.ai-reason{display:flex;align-items:flex-start;gap:6px;padding:4px 0;border-bottom:1px solid var(--border)}
.ai-reason:last-child{border-bottom:none}
.ai-reason-icon{font-size:12px;flex-shrink:0;margin-top:1px}
.ai-reason-text{font-size:10px;color:var(--text2);flex:1;line-height:1.5}

/* ── Polling indicator ── */
.poll-dot{width:5px;height:5px;border-radius:50%;display:inline-block;margin-left:4px;vertical-align:middle}
.poll-dot.polling{background:var(--green);animation:blink 1s infinite}
.poll-dot.idle{background:var(--text4)}
