:root{
  /* Backgrounds — professional dark navy theme (matches sign-in screen) */
  --void:#0a0f1c;
  --deep:#0d1424;
  --surface:#121b2e;
  --raised:#19233a;
  --float:#202c47;
  /* Borders */
  --rim:#263250;
  --rim2:#34456a;
  /* Brand accent - Steel blue */
  --gold:#3b82f6;
  --gold2:#2563eb;
  --gold3:#1d4ed8;
  /* Semantic colours */
  --jade:#22c55e;
  --jade2:#16a34a;
  --ruby:#f87171;
  --ruby2:#ef4444;
  --sapph:#38bdf8;
  --violet:#a78bfa;
  /* Text */
  --ink:#e7ecf3;
  --ink2:#c3ccdb;
  --ink3:#8b96ab;
  --ink4:#5b6680;
  /* Subtle hover/divider tint (theme-aware) */
  --hover-tint:rgba(255,255,255,.035);
  /* Fonts */
  --fh:'DM Serif Display',serif;--fm:'JetBrains Mono',monospace;--fb:'DM Sans',sans-serif
}
/* ── LIGHT THEME — overrides root tokens; sidebar/topbar/scanbar/idx-bar stay dark navy (locked below) ── */
[data-theme="light"]{
  --void:#f1f4f9;
  --deep:#e9edf5;
  --surface:#ffffff;
  --raised:#f4f6fb;
  --float:#e7ebf3;
  --rim:#dde3ee;
  --rim2:#c7d0e0;
  --gold:#2563eb;
  --gold2:#1d4ed8;
  --gold3:#1e40af;
  --jade:#16a34a;
  --jade2:#15803d;
  --ruby:#dc2626;
  --ruby2:#b91c1c;
  --sapph:#0284c7;
  --violet:#7c3aed;
  --ink:#1e293b;
  --ink2:#475569;
  --ink3:#64748b;
  --ink4:#94a3b8;
  --hover-tint:rgba(15,23,42,.045);
}
/* Permanent dark "chrome" — sidebar/topbar/scanbar/live-ticker keep their navy look in BOTH themes
   by re-pinning every token back to the dark values inside this scope, regardless of [data-theme]. */
.sidebar,.topbar,.scanbar,.idx-bar{
  --void:#0a0f1c;--deep:#0d1424;--surface:#121b2e;--raised:#19233a;--float:#202c47;
  --rim:#263250;--rim2:#34456a;
  --gold:#3b82f6;--gold2:#2563eb;--gold3:#1d4ed8;
  --jade:#22c55e;--jade2:#16a34a;--ruby:#f87171;--ruby2:#ef4444;--sapph:#38bdf8;--violet:#a78bfa;
  --ink:#e7ecf3;--ink2:#c3ccdb;--ink3:#8b96ab;--ink4:#5b6680;
  --hover-tint:rgba(255,255,255,.035);
  color:var(--ink);
}
*{box-sizing:border-box;margin:0;padding:0}html{font-size:13px}
body{background:linear-gradient(135deg,var(--void) 0%,var(--deep) 50%,var(--void) 100%);color:var(--ink);font-family:var(--fb);height:100vh;overflow:hidden;display:flex;flex-direction:column;transition:background .25s,color .25s}
::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--rim2);border-radius:2px}
.app{display:flex;height:100vh;overflow:hidden}
.sidebar{width:232px;min-width:232px;background:linear-gradient(180deg,#0d1424 0%,#0a0f1c 100%);border-right:1px solid rgba(255,255,255,.08);display:flex;flex-direction:column;height:100vh;overflow-y:auto}
.sb-brand{padding:20px 18px 16px;border-bottom:1px solid rgba(255,255,255,.1);background:transparent}
/* The source logo artwork is navy-on-transparent, so on the sidebar's
   permanently-dark background it was nearly invisible. Force it to
   render white (regardless of theme, since the sidebar chrome itself
   never switches to light) while keeping the text fallback's own color. */
.sb-brand img{filter:brightness(0) invert(1);opacity:.95}
.sb-wm{font-family:var(--fh);font-size:24px;font-weight:700;color:#ffffff;letter-spacing:.4px;line-height:1}
.sb-tg{font-size:10px;color:rgba(255,255,255,.7);margin-top:4px;text-transform:uppercase;letter-spacing:1.5px}
.sb-st{margin-top:10px;display:flex;align-items:center;gap:6px;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.15);border-radius:99px;padding:4px 11px;font-size:10px;color:rgba(255,255,255,.8);width:fit-content}
.sdot{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.6);flex-shrink:0}
.sdot.live{background:#10b981;animation:throb 2s infinite}.sdot.busy{background:#fbbf24;animation:throb .8s infinite}.sdot.err{background:#ef4444}
@keyframes throb{0%,100%{opacity:1}50%{opacity:.25}}
.sb-nav{flex:1;padding:6px 0}
.ngrp{padding:13px 15px 4px;font-size:9px;text-transform:uppercase;letter-spacing:2px;color:rgba(255,255,255,.5);font-weight:700}
.ni{display:flex;align-items:center;gap:9px;padding:9px 18px;cursor:pointer;color:rgba(255,255,255,.7);font-size:12.5px;font-weight:500;transition:all .15s;border-left:2px solid transparent}
.ni:hover{color:#ffffff;background:rgba(255,255,255,.1)}.ni.active{color:#ffffff;background:rgba(255,255,255,.2);border-left-color:#ffffff}
.nico{font-size:14px;width:17px;text-align:center;flex-shrink:0}
.nbadge{margin-left:auto;font-size:9px;font-weight:700;padding:1px 6px;border-radius:99px;font-family:var(--fm)}
.nbr{background:var(--ruby);color:#fff}.nbg{background:var(--gold);color:#fff}.nbj{background:var(--jade);color:#fff}
.sb-ft{border-top:1px solid var(--rim);padding:12px 16px}
.sb-md{font-family:var(--fm);font-size:10px;color:var(--jade);margin-bottom:7px}
.ki{background:var(--surface);border:1px solid var(--rim);color:var(--ink);padding:5px 9px;border-radius:5px;font-family:var(--fm);font-size:10px;outline:none;width:100%;margin-bottom:5px;transition:border-color .2s}
.ki:focus{border-color:var(--gold);color:var(--ink)}.ki::placeholder{color:var(--ink4)}
.main-area{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.topbar{height:50px;background:linear-gradient(90deg,#0d1424 0%,#0a0f1c 100%);border-bottom:1px solid var(--rim);display:flex;align-items:center;padding:0 20px;gap:9px;flex-shrink:0;box-shadow:0 1px 4px rgba(0,0,0,.2)}
.tbt{font-family:var(--fh);font-size:17px;font-weight:600;flex:1}
.chip{background:var(--raised);border:1px solid var(--rim);border-radius:99px;padding:3px 10px;font-size:10px;font-family:var(--fm);color:var(--ink3);white-space:nowrap}
.chip.j{border-color:rgba(42,181,148,.3);color:var(--jade)}.chip.g{border-color:rgba(37,99,235,.3);color:var(--gold2)}
.scanbar{background:#202c47;border-bottom:1px solid var(--rim);padding:8px 20px;display:none;align-items:center;gap:11px;flex-shrink:0}
.scanbar.on{display:flex}
.pt{flex:1;height:3px;background:var(--rim);border-radius:2px;overflow:hidden}
.pf{height:3px;border-radius:2px;background:linear-gradient(90deg,var(--gold),var(--jade));transition:width .5s ease;width:0}
.pl{font-family:var(--fm);font-size:10px;color:var(--ink2);white-space:nowrap;min-width:210px}
.pcx{font-size:10px;color:var(--ruby);cursor:pointer;padding:2px 8px;border:1px solid rgba(217,79,79,.3);border-radius:4px}
.pages{flex:1;overflow:hidden;position:relative}
.page{position:absolute;inset:0;overflow-y:auto;display:none}.page.active{display:block}
.btn{border:1px solid var(--rim2);background:var(--raised);color:var(--ink);padding:6px 14px;border-radius:7px;font-family:var(--fb);font-size:12px;cursor:pointer;transition:all .18s;font-weight:600;white-space:nowrap;display:inline-flex;align-items:center;gap:5px}
.btn:hover{border-color:var(--gold);color:var(--gold2)}.btn:disabled{opacity:.35;cursor:not-allowed}
.btn-p{background:var(--gold);border-color:var(--gold);color:#fff;font-weight:700}.btn-p:hover{background:var(--gold2);border-color:var(--gold2);color:#fff}
.btn-j{background:rgba(26,158,122,.08);border-color:rgba(26,158,122,.3);color:var(--jade)}.btn-j:hover{background:rgba(26,158,122,.15)}
.btn-r{background:rgba(192,57,43,.06);border-color:rgba(192,57,43,.25);color:var(--ruby)}.btn-r:hover{background:rgba(192,57,43,.12)}
.btn-s{background:rgba(36,113,184,.08);border-color:rgba(36,113,184,.3);color:var(--sapph)}.btn-s:hover{background:rgba(36,113,184,.15)}
.btn-sm{padding:4px 10px;font-size:11px;border-radius:5px}.btn-xs{padding:3px 8px;font-size:10px;border-radius:4px}
.card{background:var(--surface);border:1px solid var(--rim);border-radius:10px;padding:18px;box-shadow:0 1px 3px rgba(0,0,0,.04)}
.ct{font-family:var(--fh);font-size:15px;font-weight:600;color:var(--gold2);margin-bottom:4px;display:flex;align-items:center;gap:6px}
.cs{font-size:10.5px;color:var(--ink3)}
.inp{background:var(--raised);border:1px solid var(--rim);color:var(--ink);padding:8px 11px;border-radius:7px;font-family:var(--fb);font-size:12.5px;outline:none;transition:border-color .2s;width:100%}
.inp:focus{border-color:var(--gold)}.inp::placeholder{color:var(--ink4)}
.il{font-size:10px;text-transform:uppercase;letter-spacing:1px;color:var(--ink3);margin-bottom:4px;font-weight:600;display:block}
select.inp option{background:var(--surface)} textarea.inp{resize:vertical;font-family:var(--fb);line-height:1.6}
.ldr{display:none;align-items:center;gap:8px;color:var(--ink3);font-size:11.5px;padding:8px 0}.ldr.on{display:flex}
.sp{width:13px;height:13px;border:2px solid var(--rim);border-top-color:var(--gold);border-radius:50%;animation:rot .7s linear infinite}
.sp-lg{width:18px;height:18px}@keyframes rot{to{transform:rotate(360deg)}}
.kc{background:var(--raised);border:1px solid var(--rim);border-radius:8px;padding:13px 15px;position:relative;overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,.04)}
.kc::after{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:var(--gold);opacity:.5}
.kc.jd::after{background:var(--jade);opacity:.7}.kc.rb::after{background:var(--ruby);opacity:.7}.kc.sp2::after{background:var(--sapph);opacity:.7}
.kl{font-size:9px;text-transform:uppercase;letter-spacing:1.2px;color:var(--ink3);margin-bottom:6px;font-weight:600}
.kv{font-family:var(--fm);font-size:22px;font-weight:600;line-height:1}
.kv-s{font-size:15px}.kd{font-size:10.5px;color:var(--ink3);margin-top:4px}
.kd-up{color:var(--jade)}.kd-dn{color:var(--ruby)}
.ins{border-left:3px solid var(--gold);background:var(--raised);border-radius:0 8px 8px 0;padding:12px 14px;margin-bottom:10px;border:1px solid var(--rim);border-left:3px solid var(--gold)}
.ins.j{border-left-color:var(--jade);background:rgba(34,197,94,.08)}.ins.r{border-left-color:var(--ruby);background:rgba(248,113,113,.08)}.ins.s{border-left-color:var(--sapph);background:rgba(56,189,248,.08)}.ins.v{border-left-color:var(--violet);background:rgba(167,139,250,.08)}
.in-lb{font-size:9.5px;text-transform:uppercase;letter-spacing:1px;color:var(--ink3);font-weight:600;margin-bottom:5px}
.in-tx{font-size:12.5px;line-height:1.7}.in-tx strong{color:var(--gold2)}.in-tx em{color:var(--jade);font-style:normal}
.sg{display:inline-flex;align-items:center;font-family:var(--fm);font-size:10px;font-weight:700;padding:3px 9px;border-radius:4px}
.sg.buy{background:rgba(16,185,129,.2);color:var(--jade)}.sg.hold{background:rgba(251,191,36,.2);color:var(--gold2)}.sg.reduce{background:rgba(239,68,68,.2);color:var(--ruby2)}
/* Sticky header for Holdings table */
#holdTable{width:100%;border-collapse:collapse;font-size:12px;margin-top:8px}
#holdTable thead{position:sticky;top:0;background:linear-gradient(180deg,rgba(59,130,246,.95) 0%,rgba(37,99,235,.95) 100%);z-index:20;color:#ffffff;font-weight:600;box-shadow:0 2px 8px rgba(59,130,246,.3)}
#holdTable thead th{padding:11px 8px;text-align:left;border-bottom:2px solid rgba(59,130,246,.3);font-size:11px;text-transform:uppercase;letter-spacing:.6px;white-space:nowrap}
#holdTable tbody tr{border-bottom:1px solid var(--rim);transition:all .15s}
#holdTable tbody tr:hover{background:rgba(59,130,246,.08)}
#holdTable td{padding:9px 8px;text-align:left}
#holdTable .stock-col{position:sticky;left:0;background:var(--void);z-index:10;min-width:200px;font-weight:600;border-right:1px solid var(--rim)}
#holdTable tbody tr:hover .stock-col{background:rgba(59,130,246,.12)}
#holdTable .alloc-col{position:sticky;left:200px;background:var(--void);z-index:10;min-width:70px;text-align:center;font-weight:600;border-right:2px solid var(--gold)}
#holdTable tbody tr:hover .alloc-col{background:rgba(59,130,246,.12)}
.sg-buy{background:rgba(26,158,122,.1);color:var(--jade);border:1px solid rgba(26,158,122,.3)}
.sg-hold{background:rgba(59,130,246,.08);color:var(--gold2);border:1px solid rgba(59,130,246,.3)}
.sg-reduce{background:rgba(192,57,43,.08);color:var(--ruby);border:1px solid rgba(192,57,43,.3)}
.sg-watch{background:rgba(36,113,184,.08);color:var(--sapph);border:1px solid rgba(36,113,184,.3)}
.scen-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.scen-box{background:var(--raised);border:1px solid var(--rim);border-radius:7px;padding:12px;text-align:center}
.scen-lbl{font-size:9.5px;text-transform:uppercase;letter-spacing:1px;color:var(--ink3);margin-bottom:5px}
.scen-val{font-family:var(--fm);font-size:22px;font-weight:600}.scen-desc{font-size:10.5px;color:var(--ink3);margin-top:3px}
.bull{color:var(--jade)}.base{color:var(--gold2)}.bear{color:var(--ruby)}
.news-ni{padding:10px 0;border-bottom:1px solid var(--rim);cursor:pointer;transition:padding-left .15s}
.news-ni:hover{padding-left:4px}.news-ni:last-child{border-bottom:none}
.news-nh{font-size:12.5px;line-height:1.4;margin-bottom:3px}.news-ns{font-size:10px;color:var(--ink3)}
.nchp{display:inline-block;margin-top:3px;font-size:9.5px;padding:1px 7px;border-radius:3px;font-weight:700;font-family:var(--fm)}
.ncp{background:rgba(26,158,122,.1);color:var(--jade)}.ncn{background:rgba(192,57,43,.1);color:var(--ruby)}.ncz{background:rgba(113,128,150,.1);color:var(--ink3)}
.htbl{width:100%;border-collapse:separate;border-spacing:0}
.htbl th{text-align:left;font-size:9px;text-transform:uppercase;letter-spacing:1.2px;color:#ffffff;padding:11px 9px 10px;border-bottom:2px solid rgba(59,130,246,.3);white-space:nowrap;font-weight:600;background:linear-gradient(180deg,rgba(59,130,246,.97) 0%,rgba(37,99,235,.97) 100%);position:sticky;top:0;z-index:20}
.htbl td{padding:10px 9px;border-bottom:1px solid var(--rim);font-size:12px;vertical-align:middle}
.htbl tr:hover td{background:var(--hover-tint);cursor:pointer}
.htbl tr.scanning td{animation:rowglow 1.5s infinite}
.htbl .col-stock{position:sticky;left:0;z-index:6;width:280px;min-width:280px;max-width:280px;background:var(--void);font-weight:600;border-right:1px solid var(--rim2);overflow:hidden}
.htbl .col-stock .snm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:260px}
.htbl .col-stock .setf{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:260px}
.htbl .col-alloc{position:sticky;left:280px;z-index:6;width:72px;min-width:72px;max-width:72px;background:var(--void);font-family:var(--fm);font-weight:600;border-right:2px solid var(--rim2);text-align:center}
.htbl th.col-stock{z-index:25;background:linear-gradient(180deg,rgba(37,99,235,.99) 0%,rgba(29,78,216,.99) 100%)}
.htbl th.col-alloc{z-index:25;background:linear-gradient(180deg,rgba(37,99,235,.99) 0%,rgba(29,78,216,.99) 100%)}
.htbl tr:hover .col-stock,.htbl tr:hover .col-alloc{background:rgba(37,99,235,.12)}
@keyframes rowglow{0%,100%{background:transparent}50%{background:rgba(37,99,235,.04)}}
.snm{font-weight:600;font-size:12.5px}.setf{font-size:10px;color:var(--ink3);margin-top:1px}
.mn{font-family:var(--fm);font-size:11px}.tup{color:var(--jade)}.tdn{color:var(--ruby)}.tneu{color:var(--ink3)}
.xrow{display:none}.xrow.open{display:table-row}
.xi{padding:15px 17px;background:var(--surface);border-bottom:1px solid var(--rim)}
.xg{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px}
.xh{font-size:9px;text-transform:uppercase;letter-spacing:1.2px;color:var(--ink3);font-weight:600;margin-bottom:9px;padding-bottom:5px;border-bottom:1px solid var(--rim)}
.fr{display:flex;justify-content:space-between;padding:4px 0;border-bottom:1px solid var(--rim);font-size:11.5px}
.fr:last-child{border-bottom:none}.fk{color:var(--ink3)}.fv{font-family:var(--fm);color:var(--ink)}
.ri{background:var(--surface);border:1px solid var(--rim);border-radius:9px;padding:14px 16px;margin-bottom:10px;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.ri-head{display:flex;align-items:flex-start;gap:12px}
.ri-ico{font-size:22px;flex-shrink:0;margin-top:2px}
.ri-body{flex:1;min-width:0}
.ri-name{font-weight:700;font-size:13.5px;margin-bottom:4px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ri-reason{font-size:12.5px;color:var(--ink2);line-height:1.6;margin-bottom:10px}
.ri-meta{display:flex;gap:7px;flex-wrap:wrap;align-items:center;padding-top:10px;border-top:1px solid var(--rim)}
.alloc-pill{font-family:var(--fm);font-size:11px;padding:3px 8px;background:var(--raised);border:1px solid var(--rim);border-radius:5px}
.urg{font-size:10px;font-weight:700;padding:2px 8px;border-radius:3px}
.u-i{background:rgba(217,79,79,.12);color:var(--ruby2)}.u-w{background:rgba(37,99,235,.12);color:var(--gold2)}.u-m{background:rgba(42,181,148,.1);color:var(--jade)}
.chg-p{font-family:var(--fm);font-size:11.5px;font-weight:700}
.cup{color:var(--jade)}.cdn{color:var(--ruby2)}.cfl{color:var(--gold2)}
.chat-outer{display:flex;flex-direction:column;height:100%}
.chat-msgs{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px}
.cm{display:flex;gap:9px;animation:msgIn .22s ease}
@keyframes msgIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.mav{width:27px;height:27px;border-radius:7px;display:flex;align-items:center;justify-content:center;font-size:13px;flex-shrink:0;margin-top:1px}
.av-user{background:rgba(37,99,235,.12)}.av-ai{background:rgba(42,181,148,.1)}
.mn2{flex:1}.mwho{font-size:9.5px;text-transform:uppercase;letter-spacing:.8px;color:var(--ink3);margin-bottom:3px;font-weight:600}
.mb2{font-size:12.5px;line-height:1.68;background:var(--raised);border:1px solid var(--rim);border-radius:0 8px 8px 8px;padding:10px 13px}
.cm.user .mb2{background:var(--hover-tint);border-color:rgba(59,130,246,.25)}
.mb2 strong{color:var(--gold2)}.mb2 em{color:var(--jade);font-style:normal}
.chat-bot{border-top:1px solid var(--rim);background:var(--surface);display:flex}
.chat-inp{flex:1;background:transparent;border:none;color:var(--ink);padding:11px 15px;font-family:var(--fb);font-size:12.5px;outline:none}
.chat-inp::placeholder{color:var(--ink4)}
.chat-snd{background:var(--gold);border:none;color:#fff;padding:0 17px;cursor:pointer;font-weight:700;font-size:14px;transition:background .18s}
.chat-snd:hover{background:var(--gold2)}.chat-snd:disabled{background:var(--rim);cursor:not-allowed}
.qchips{display:flex;gap:5px;flex-wrap:wrap;padding:10px 15px;border-bottom:1px solid var(--rim);background:var(--raised)}
.qc{background:var(--raised);border:1px solid var(--rim);border-radius:5px;padding:5px 10px;font-size:11px;color:var(--ink2);cursor:pointer;transition:all .15s;white-space:nowrap}
.qc:hover{border-color:var(--gold);color:var(--gold2)}
.sbar-row{margin-bottom:10px}.sbar-labels{display:flex;justify-content:space-between;font-size:11.5px;margin-bottom:4px;color:var(--ink2)}
.sbar-v{font-family:var(--fm);color:var(--ink)}.sbar-bg{background:var(--raised);border-radius:3px;height:5px;overflow:hidden;position:relative}
.sbar-fill{height:5px;border-radius:3px;background:var(--gold);transition:width .8s ease;position:absolute;top:0;left:0}
.tab-strip{display:flex;gap:2px;border-bottom:1px solid var(--rim);margin-bottom:15px}
.ti{padding:8px 14px;cursor:pointer;font-size:12px;font-weight:500;color:var(--ink3);border-bottom:2px solid transparent;transition:all .18s}
.ti:hover{color:var(--ink)}.ti.active{color:var(--gold2);border-bottom-color:var(--gold)}
.tp{display:none}.tp.active{display:block}
.fp{background:transparent;border:1px solid var(--rim);border-radius:99px;padding:4px 12px;font-size:11px;cursor:pointer;color:var(--ink3);transition:all .18s}
.fp:hover{border-color:var(--gold);color:var(--gold2)}.fp.active{background:rgba(37,99,235,.08);border-color:var(--gold);color:var(--gold2)}
.sw{display:flex;align-items:center;gap:10px}
input[type=range]{flex:1;accent-color:var(--gold);cursor:pointer}.sv{font-family:var(--fm);font-size:12px;color:var(--gold2);min-width:38px}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:15px}
.g5{display:grid;grid-template-columns:repeat(5,1fr);gap:11px}
.mb{margin-bottom:15px}.mbs{margin-bottom:10px}
.pg{padding:20px}
.fbet{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.fc{display:flex;align-items:center;gap:7px}
.aout{font-size:12.5px;line-height:1.75;color:var(--ink)}
.aout strong{color:var(--gold2)}.aout em{color:var(--jade);font-style:normal}
.ph{color:var(--ink4);font-style:italic;font-size:12.5px}
.emp{color:var(--ink4);font-size:12px;padding:18px 0;text-align:center}
.div{border:none;border-top:1px solid var(--rim);margin:12px 0}
/* ── Live Price styles — continuously scrolling ticker tape ── */
.idx-bar{display:flex;align-items:center;gap:0;padding:9px 0 9px 20px;background:#19233a;border-bottom:1px solid var(--rim);flex-shrink:0;overflow:hidden}
.idx-track-wrap{flex:1;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 24px,#000 calc(100% - 24px),transparent);mask-image:linear-gradient(90deg,transparent,#000 24px,#000 calc(100% - 24px),transparent)}
.idx-track{display:flex;gap:10px;width:max-content;animation:idxmarquee 38s linear infinite}
.idx-bar:hover .idx-track{animation-play-state:paused}
@keyframes idxmarquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.idx-tile{display:flex;align-items:center;gap:8px;padding:6px 14px;border:1px solid var(--rim);border-radius:7px;white-space:nowrap;background:#19233a;flex-shrink:0}
.idx-name{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:var(--ink3)}
.idx-val{font-family:var(--fm);font-size:16px;font-weight:700;color:var(--ink)}
.idx-chg{font-family:var(--fm);font-size:13px;font-weight:700}
.idx-chg.up{color:var(--jade)}.idx-chg.dn{color:var(--ruby)}.idx-chg.neu{color:var(--ink3)}
.idx-spin{font-size:10px;color:var(--ink4);animation:rot .8s linear infinite;display:inline-block}
.idx-live-fixed{display:flex;align-items:center;gap:4px;flex-shrink:0;padding:0 16px;border-left:1px solid var(--rim);margin-left:10px}
.cmp-val{font-family:var(--fm);font-size:11.5px;color:var(--ink);font-weight:600}
.cmp-chg{font-family:var(--fm);font-size:10px;font-weight:700;display:block;margin-top:1px}
.cmp-chg.up{color:var(--jade)}.cmp-chg.dn{color:var(--ruby)}.cmp-chg.neu{color:var(--ink3)}
.cmp-load{color:var(--ink4);font-size:10px;animation:rot .8s linear infinite;display:inline-block}
.live-dot{width:5px;height:5px;border-radius:50%;background:var(--jade);animation:throb 2s infinite;flex-shrink:0;display:inline-block;vertical-align:middle;margin-right:3px}
.hero{background:linear-gradient(135deg,rgba(59,130,246,.05) 0%,var(--surface) 100%);border:1px solid var(--rim);border-radius:10px;padding:18px;margin-bottom:15px}
.h-nm{font-family:var(--fh);font-size:20px;font-weight:700;color:var(--gold2)}
.h-sub{font-size:11px;color:var(--ink3);margin-top:3px}
.h-row{display:flex;gap:17px;margin-top:12px;flex-wrap:wrap;align-items:center}
.hstat-v{font-family:var(--fm);font-size:15px;font-weight:600}.hstat-l{font-size:10px;color:var(--ink3);margin-top:2px}
.pp{font-family:var(--fm);font-size:10.5px;color:var(--ink2);line-height:1.8;white-space:pre-wrap;background:var(--raised);border:1px solid var(--rim);border-radius:8px;padding:13px}
/* Quant Screener */
.qcrit-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:16px}
.qcrit-tag{background:var(--raised);border:1px solid var(--rim);border-radius:7px;padding:11px 13px;box-shadow:0 1px 2px rgba(0,0,0,.04)}
.qcrit-label{font-size:9.5px;text-transform:uppercase;letter-spacing:.8px;color:var(--ink3);font-weight:600;margin-bottom:4px}
.qcrit-val{font-family:var(--fm);font-size:13px;font-weight:600;color:var(--gold2)}
/* Stock result cards */
.sr-card{background:var(--raised);border:1px solid var(--rim);border-radius:9px;padding:16px;margin-bottom:10px;cursor:pointer;transition:border-color .2s,box-shadow .2s;box-shadow:0 1px 3px rgba(0,0,0,.04)}
.sr-card:hover{border-color:var(--rim2);box-shadow:0 3px 10px rgba(0,0,0,.08)}
.sr-card.all-pass{border-left:3px solid var(--jade)}
.sr-card.most-pass{border-left:3px solid var(--gold2)}
.sr-card.low-pass{border-left:3px solid var(--ruby2)}
.sr-head{display:flex;align-items:flex-start;gap:12px;margin-bottom:10px}
.sr-name{font-weight:700;font-size:13px;margin-bottom:2px}
.sr-ticker{font-family:var(--fm);font-size:10px;color:var(--ink3)}
.sr-score{font-family:var(--fm);font-size:22px;font-weight:700}
.sr-criteria{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;margin-top:8px}
.sc-item{display:flex;align-items:center;gap:5px;font-size:11px;padding:4px 8px;border-radius:5px}
.sc-pass{background:rgba(26,158,122,.08);color:var(--jade);border:1px solid rgba(26,158,122,.2)}
.sc-fail{background:rgba(192,57,43,.06);color:var(--ruby);border:1px solid rgba(192,57,43,.15)}
.sc-na{background:rgba(160,174,192,.12);color:var(--ink3);border:1px solid rgba(160,174,192,.2)}
.sc-val{font-family:var(--fm);font-size:10px;margin-left:auto}
/* Explainer box */
.explainer{background:rgba(56,189,248,.08);border:1px solid rgba(36,113,184,.2);border-radius:9px;padding:14px 16px;margin-bottom:14px}
.explainer strong{color:var(--sapph)}
/* Portfolio Donut + Chart Containers */
.chart-wrap{position:relative;width:100%;height:180px}
.chart-wrap-sm{position:relative;width:100%;height:140px}
.chart-wrap-lg{position:relative;width:100%;height:220px}
/* Animated stat counter */
.kv-animated{animation:countUp .6s ease-out}
@keyframes countUp{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
/* Allocation bar improved */
.alloc-bar-wrap{margin-bottom:12px}
.alloc-bar-label{display:flex;justify-content:space-between;font-size:11.5px;margin-bottom:5px;color:var(--ink2)}
.alloc-bar-track{background:var(--rim);border-radius:4px;height:6px;overflow:hidden}
.alloc-bar-fill{height:6px;border-radius:4px;transition:width .9s cubic-bezier(.4,0,.2,1)}
/* Holdings table improvements */
.sg-buy{box-shadow:none}
.sg-reduce{box-shadow:none}
/* Card hover effect */
.card{transition:border-color .2s,box-shadow .2s}
.card:hover{border-color:var(--rim2);box-shadow:0 2px 8px rgba(0,0,0,.07)}
/* Dashboard stats glow top bar */
.kc.jd{box-shadow:0 1px 4px rgba(26,158,122,.1);border-top:2px solid var(--jade)}
.kc.rb{box-shadow:0 1px 4px rgba(192,57,43,.1);border-top:2px solid var(--ruby)}
.kc.sp2{box-shadow:0 1px 4px rgba(36,113,184,.1);border-top:2px solid var(--sapph)}
/* Portfolio composition mini donut */
#portfolioDonutWrap{display:flex;align-items:center;gap:16px}
#portfolioDonutWrap canvas{flex-shrink:0}
.donut-legend{flex:1;display:flex;flex-direction:column;gap:5px}
.dl-item{display:flex;align-items:center;gap:7px;font-size:11px}
.dl-dot{width:8px;height:8px;border-radius:2px;flex-shrink:0}
.dl-name{color:var(--ink2);flex:1}
.dl-val{font-family:var(--fm);color:var(--ink);font-size:10.5px}
/* Quant radar / score ring */
.score-ring-wrap{display:flex;justify-content:center;align-items:center;padding:10px 0}
/* Topbar pulse */
.topbar{border-bottom:1px solid var(--rim);background:linear-gradient(90deg,#0d1424 0%,#0a0f1c 100%);box-shadow:0 1px 0 var(--rim)}
/* News card hover */
.news-ni{transition:all .15s;border-radius:5px;padding:10px 8px;margin:0 -8px}
.news-ni:hover{background:var(--hover-tint);padding-left:12px}
/* Better scrollbar */
::-webkit-scrollbar{width:3px;height:3px}
/* Holdings expand row polish */
.xrow.open .xi{animation:slideDown .18s ease}
@keyframes slideDown{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
/* Criteria grid tags */
.qcrit-tag{transition:all .15s;cursor:default}
.qcrit-tag:hover{border-color:var(--gold);background:rgba(59,130,246,.08)}
/* ── Quant Screener: tickable criteria + sector blocks + rank cards ── */
.qscr-sector-block{margin-bottom:14px;padding:12px;border:1px solid var(--rim);border-radius:9px;background:rgba(59,130,246,.03)}
.qscr-sector-hdr{font-size:11px;font-weight:700;color:var(--gold2);margin-bottom:9px;text-transform:uppercase;letter-spacing:.8px}
.qscr-sector-total{font-family:var(--fb);font-weight:400;color:var(--ink3);text-transform:none;letter-spacing:0}
.qcrit-tag.chk{display:flex;align-items:flex-start;gap:8px;cursor:pointer;user-select:none}
.qcrit-tag.chk input[type=checkbox]{margin-top:2px;width:14px;height:14px;flex-shrink:0;accent-color:var(--gold2);cursor:pointer}
.qcrit-tag.chk .qcrit-body{flex:1;min-width:0}
.qcrit-wt{color:var(--ink3);font-weight:600;margin-left:4px}
.qcrit-tag.chk.inactive{opacity:.42;background:var(--surface)}
.qcrit-tag.chk.inactive:hover{opacity:.7}
.qcrit-tag.chk.active{border-color:rgba(34,197,94,.3)}
/* Compact "name only" criteria pills — Active Criteria panel */
.qcrit-pillwrap{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}
.qcrit-pill{display:inline-flex;align-items:center;gap:5px;background:var(--raised);border:1px solid var(--rim);border-radius:99px;padding:4px 10px 4px 7px;font-size:11px;cursor:pointer;user-select:none;transition:all .15s;max-width:100%}
.qcrit-pill:hover{border-color:var(--gold);background:rgba(59,130,246,.08)}
.qcrit-pill input[type=checkbox]{width:12px;height:12px;flex-shrink:0;accent-color:var(--gold2);cursor:pointer;margin:0}
.qcrit-pill .qcp-lbl{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}
.qcrit-pill .qcp-wt{color:var(--ink3);font-family:var(--fm);font-size:9.5px;font-weight:600;flex-shrink:0}
.qcrit-pill.inactive{opacity:.4;background:var(--surface)}
.qcrit-pill.inactive:hover{opacity:.7}
.qcrit-pill.active{border-color:rgba(34,197,94,.28)}
.qcrit-pill .qcp-rank{color:var(--gold2);flex-shrink:0}
.qcrit-densitybtn{font-size:10px;padding:2px 8px}
/* Universe/rank summary bar */
.qscr-summary-bar{display:flex;align-items:center;gap:22px;flex-wrap:wrap;padding:12px 16px;margin-bottom:14px;border-radius:10px;background:linear-gradient(90deg,rgba(59,130,246,.09),rgba(34,197,94,.06));border:1px solid rgba(59,130,246,.2)}
.qscr-ss-row:hover td{background:rgba(59,130,246,.08)!important}
.qscr-summary-item{display:flex;flex-direction:column;align-items:center;line-height:1.1}
.qscr-summary-num{font-family:var(--fm);font-size:20px;font-weight:700;color:var(--ink)}
.qscr-summary-lbl{font-size:9px;text-transform:uppercase;letter-spacing:.8px;color:var(--ink3);margin-top:2px}
.qscr-summary-scope{margin-left:auto;font-size:11.5px;color:var(--ink2);font-family:var(--fm)}
/* Ranked result cards */
.qscr-card{position:relative;padding-left:52px}
.qscr-rank-badge{position:absolute;left:14px;top:16px;font-size:18px;font-weight:700;font-family:var(--fm);color:var(--gold2);width:30px;text-align:center}
.qscr-bar{margin-top:8px;height:5px;border-radius:3px;background:var(--rim);overflow:hidden;width:100%}
.qscr-bar-fill{height:5px;border-radius:3px;transition:width .5s cubic-bezier(.4,0,.2,1)}
.qscr-bar-fill.bull{background:var(--jade)}
.qscr-bar-fill.base{background:var(--gold2)}
.qscr-bar-fill.bear{background:var(--ruby)}
/* Chat improvements */
.cm.ai .mb2{background:var(--float)}
.cm.user{flex-direction:row-reverse}
.cm.user .mn2{align-items:flex-end;display:flex;flex-direction:column}
.cm.user .mb2{border-radius:8px 0 8px 8px;background:rgba(37,99,235,.07);border-color:rgba(37,99,235,.18)}
/* Scan progress glow */
.pf{box-shadow:0 0 6px rgba(59,130,246,.3)}
/* Portfolio value big display */
.pv-big{font-family:var(--fh);font-size:28px;font-weight:700;color:var(--gold2);line-height:1}
.pv-sub{font-size:10px;color:var(--ink3);margin-top:3px;text-transform:uppercase;letter-spacing:1px}

/* ═══ SIDEBAR TOGGLE — collapse on desktop, off-canvas overlay on tablet/mobile ═══ */
.nav-toggle-btn{padding:6px 10px;font-size:15px;line-height:1}
.sidebar{transition:width .22s ease,min-width .22s ease,transform .22s ease}
body.nav-collapsed .sidebar{width:0;min-width:0;border-right:none;overflow:hidden}
.sidebar-backdrop{display:none;position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:998}

/* ═══ RESPONSIVE — tablet (iPad) and mobile ═══ */
@media (max-width:1024px){
  html{font-size:13px}
  .sidebar{position:fixed;top:0;left:0;height:100vh;z-index:999;transform:translateX(-100%);box-shadow:4px 0 28px rgba(0,0,0,.5)}
  body.nav-open .sidebar{transform:translateX(0)}
  body.nav-open .sidebar-backdrop{display:block}
  body.nav-collapsed .sidebar{width:232px;min-width:232px} /* collapse rule doesn't apply once off-canvas */
  .main-area{width:100%}
  .g5{grid-template-columns:repeat(2,1fr)!important}
  .g2{grid-template-columns:1fr!important}
  .scen-grid{grid-template-columns:repeat(2,1fr)!important}
  .xg{grid-template-columns:1fr!important}
  .qcrit-grid{grid-template-columns:repeat(2,1fr)!important}
  .sr-criteria{grid-template-columns:repeat(2,1fr)!important}
  .pg{padding:14px!important}
  .topbar{padding:0 12px}
  .tbt{font-size:15px}
}
@media (max-width:680px){
  html{font-size:12.5px}
  .g5{grid-template-columns:repeat(2,1fr)!important;gap:8px}
  .scen-grid{grid-template-columns:1fr!important}
  .qcrit-grid{grid-template-columns:1fr!important}
  .sr-criteria{grid-template-columns:1fr!important}
  .htbl .col-stock{width:150px;min-width:150px;max-width:150px}
  .htbl .col-stock .snm,.htbl .col-stock .setf{max-width:130px}
  .htbl .col-alloc{left:150px}
  .tab-strip{overflow-x:auto;flex-wrap:nowrap!important;-webkit-overflow-scrolling:touch}
  .ti{white-space:nowrap;padding:8px 12px!important}
  .fp{padding:7px 10px!important}
  .btn{padding:8px 12px;min-height:34px}
  .topbar{gap:6px}
  .tbt{font-size:14px}
  .chip{display:none} /* redundant status chips — save space on phones */
  .idx-bar{overflow-x:auto}
  .hero .h-row{flex-wrap:wrap}
}
@media (max-width:420px){
  .sb-brand img{height:28px!important}
  .kc .kv{font-size:18px!important}
}

/* App-loader spinner keyframes */
@keyframes vkspin{to{transform:rotate(360deg)}}
@keyframes vkbar{0%{left:-40%}100%{left:110%}}
