
:root{--bg:#eef1f6;--card:#fff;--raised:#f1f5f9;--ink:#1d2733;--mut:#586677;--line:#e4e9f0;
--navy:#13314f;--navy2:#0b2238;--accent:#2563eb;--accent2:#3f7bf0;--teal:#0d9488;
--good:#15803d;--goodbg:#e7f6ec;--poor:#b91c1c;--poorbg:#fbeaea;
/* text-on-surface semantic colors — distinct from the --good/--poor solid fills so they
   can brighten in dark mode without wrecking white-on-fill pills/badges */
--pos:#0f7a3d;--neg:#b91c1c;
/* market-breadth signal ramp (bullish→bearish) — shared by the donut AND the stacked bar
   so a bucket is one colour in both; was two divergent palettes */
--br-buy:#0b7a34;--br-sh:#2f6fbf;--br-hint:#d9a31a;--br-weak:#c0533f;
--neu:#b45309;--neubg:#fdf3e3;--value:#2563eb;--trend:#0e8a6a;
/* 8-pt spacing scale + fluid type scale (tokens; adopted incrementally) */
--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:24px;--sp-6:32px;--sp-7:48px;--sp-8:64px;
--fs-xs:.8125rem;--fs-sm:.9375rem;--fs-base:1.0625rem;
--fs-lg:clamp(1.25rem,1.15rem + .4vw,1.5rem);--fs-xl:clamp(1.75rem,1.5rem + 1vw,2.5rem);
--navh:48px;--shadow:0 1px 3px rgba(16,40,70,.07),0 1px 2px rgba(16,40,70,.04)}
*{box-sizing:border-box}html{scroll-behavior:smooth}
body{margin:0;font:14.5px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
color:var(--ink);background:linear-gradient(180deg,#e7ebf2 0,var(--bg) 260px) fixed;
font-variant-numeric:tabular-nums;
-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
header{background:linear-gradient(110deg,var(--navy2),var(--navy) 55%,#1f4e7a);color:#fff;
padding:15px clamp(14px,3vw,40px);display:flex;justify-content:space-between;align-items:center;gap:16px}
header .brand{display:flex;align-items:center;gap:12px}
header .logo{width:36px;height:36px;border-radius:10px;background:rgba(255,255,255,.13);
display:flex;align-items:center;justify-content:center;font-size:20px;border:1px solid rgba(255,255,255,.2)}
header .btxt b{display:block;font-weight:800;font-size:16px;letter-spacing:.2px;line-height:1.1}
header .btxt span{display:block;font-size:10.5px;color:#a8c8ec;letter-spacing:.06em;text-transform:uppercase;margin-top:2px}
header .date{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);
color:#e3f0ff;padding:6px 13px;border-radius:999px;font-size:13px;font-weight:600;white-space:nowrap}
nav{position:sticky;top:0;z-index:20;background:rgba(255,255,255,.93);backdrop-filter:saturate(1.4) blur(8px);
border-bottom:1px solid var(--line);padding:7px clamp(8px,2vw,20px);display:flex;gap:3px;align-items:center;
flex-wrap:nowrap;overflow-x:auto;height:var(--navh);box-shadow:0 2px 10px rgba(16,40,70,.05)}
nav::-webkit-scrollbar{height:0}
nav a{padding:7px 13px;color:var(--mut);text-decoration:none;font-weight:600;font-size:13.5px;
border-radius:8px;white-space:nowrap;transition:background .15s,color .15s}
nav a:hover{color:var(--ink);background:#eef3f9}
nav a.active{color:#fff;background:linear-gradient(135deg,var(--accent),var(--accent2));box-shadow:0 1px 4px rgba(37,99,235,.35)}
main{max-width:1600px;margin:0 auto;padding:20px clamp(14px,3vw,40px) 64px}
main.wide{max-width:none}  /* table-heavy tabs use the full viewport so all columns fit */
main.wide .t{font-size:13px;width:auto;min-width:60%}  /* shrink-wrap: columns hug content */
main.wide .t th,main.wide .t td{padding:3px 5px}
main.wide .cnm{max-width:120px}
/* column-freeze: keep the first (symbol) column in view while wide tables scroll sideways.
   Scoped to top-level table.sortable (nested track tables are plain table.t) and to
   non-detail rows so the expandable content is never affected. */
main.wide table.sortable th:first-child,
main.wide table.sortable tbody tr:not(.trow) td:first-child{position:sticky;left:0}
main.wide table.sortable th:first-child{z-index:3;background:#edf2f8}
main.wide table.sortable tbody tr:not(.trow) td:first-child{z-index:1;background:var(--card);box-shadow:1px 0 0 var(--line)}
main.wide table.sortable tbody tr:nth-child(even):not(.trow) td:first-child{background:#f8fafc}
main.wide table.sortable tbody tr:hover td:first-child{background:#f1f6fc}
[data-theme=dark] main.wide table.sortable th:first-child{background:#1a2638}
[data-theme=dark] main.wide table.sortable tbody tr:nth-child(even):not(.trow) td:first-child{background:#18222f}
[data-theme=dark] main.wide table.sortable tbody tr:hover td:first-child{background:#1d2a3c}
section{background:var(--card);border:1px solid var(--line);border-radius:13px;padding:18px 20px;margin:16px 0;box-shadow:var(--shadow)}
h1{font-size:23px;font-weight:800;margin:.1em 0;letter-spacing:-.01em;color:var(--navy)}
h2{font-size:16px;font-weight:800;margin:.1em 0 .7em;color:var(--navy);padding-left:11px;border-left:4px solid var(--accent);line-height:1.35;letter-spacing:-.01em}
.cnt{font-weight:400;color:var(--mut);font-size:13px}.sub{color:var(--mut);margin:.35em 0 0}
footer{text-align:center;color:var(--mut);font-size:12px;padding:26px}footer a,main a{color:var(--accent)}
/* overview hero banner */
.hero{background:linear-gradient(115deg,var(--navy2),var(--navy) 58%,#23527e);border:none;color:#fff;
padding:26px clamp(18px,3vw,34px);box-shadow:0 6px 20px rgba(11,34,56,.22)}
.hero h1{color:#fff;font-size:26px}.hero .sub{color:#cfe0f3;font-size:13.5px;max-width:74ch}
.tw{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;border-radius:8px}
table.t{border-collapse:collapse;width:100%;font-size:13.5px;margin:8px 0;font-variant-numeric:tabular-nums}
.t tbody tr:nth-child(even):not(.trow){background:#f8fafc}
/* header sticks to the top of its (horizontally-scrolling) .tw container; top:0 avoids the
   var(--navh) offset that pushed it down into row 1 and caused the overlap. */
.t th{position:sticky;top:0;background:#edf2f8;text-align:right;padding:6px 6px;border-bottom:2px solid #d3deea;white-space:nowrap;font-weight:700;font-size:12px;letter-spacing:.015em;color:var(--navy);z-index:2}
.t th.sortable-th{cursor:pointer}.t th.sa::after{content:" ▲";font-size:9px;color:var(--accent)}.t th.sd::after{content:" ▼";font-size:9px;color:var(--accent)}
.t td{text-align:right;padding:4px 6px;border-bottom:1px solid var(--line);white-space:nowrap}
/* compact 1-year track / fundamentals fold tables: shrink-wrap the columns instead of
   stretching 9 columns across the full-width colspan row (signal column stays in view) */
.trow .t,.trkfold .t{width:auto;font-size:12.5px;margin:4px 0}
.trow .t th,.trkfold .t th{padding:4px 7px;font-size:11.5px}
.trow .t td,.trkfold .t td{padding:3px 7px}
.t tbody tr:hover{background:#f1f6fc}.t td:first-child,.t td:nth-child(2),.t td:nth-child(3),.t th:first-child,.t th:nth-child(2),.t th:nth-child(3){text-align:left}
.pos{color:var(--pos);font-weight:600}.neg{color:var(--neg);font-weight:600}.zero,.na{color:var(--mut)}
.rsi-os{background:var(--goodbg);color:var(--good);font-weight:700;padding:1px 5px;border-radius:4px}
.rsi-ob{background:var(--poorbg);color:var(--poor);font-weight:700;padding:1px 5px;border-radius:4px}
.pill{display:inline-block;padding:2px 10px;border-radius:11px;font-size:12.5px;font-weight:700}
.v-good{background:var(--good);color:#fff}.v-poor{background:var(--poor);color:#fff}
.v-neu{background:var(--neu);color:#fff}.v-na{background:#cdd5df;color:#fff}
.badge{display:inline-block;padding:2px 9px;border-radius:6px;font-size:12.5px;font-weight:700;color:#fff}
.s-value{background:var(--value)}.s-trend{background:var(--trend)}
.chip{display:inline-block;padding:2px 9px;border-radius:6px;font-size:12px;font-weight:700;margin:1px}
.f-red{background:var(--poor);color:#fff}.f-green{background:var(--good);color:#fff}.f-amber{background:var(--neu);color:#fff}
.warnbox{border:1px solid var(--poor);border-left:4px solid var(--poor);background:color-mix(in srgb,var(--poor) 10%,transparent);
 padding:.6rem .8rem;border-radius:6px;margin:.4rem 0;line-height:1.45}
.wk{background:#ffe9a8;color:#7a5d00;border:1px solid #e0c45a;padding:1px 8px;border-radius:6px;font-size:12.5px;font-weight:700}
.bar{display:inline-block;width:120px;height:14px;border-radius:7px;background:var(--line);overflow:hidden;vertical-align:middle;margin-right:8px}
.bar .bg{display:inline-block;height:14px;background:var(--good)}.bar .bp{display:inline-block;height:14px;background:var(--poor)}
.bn{font-size:13px;color:var(--ink);font-weight:700}
.picks{display:flex;flex-direction:column;gap:16px;margin-top:10px}
.pick{background:#fff;border:1px solid var(--line);border-left:6px solid var(--accent);border-radius:12px;padding:20px 22px;box-shadow:0 2px 6px rgba(0,0,0,.06)}
/* gated-out picks: flagged by the red border + reason chips, NOT dimmed (kept readable) */
.pick.inel{border-left-color:var(--poor);background:var(--poorbg)}
.gate-row{margin-top:10px}
.top5line{font-size:14px;margin:.6em 0 0}.top5line .mut{font-size:12.5px;margin-left:8px}
.pick-h{display:flex;align-items:center;gap:16px;border-bottom:2px solid var(--line);padding-bottom:14px}
.pick-h .rank{background:var(--navy);color:#fff;font-weight:800;border-radius:7px;padding:4px 11px;font-size:15px}
.pick-id{flex:1}.cname{font-size:19px;font-weight:800;line-height:1.1;color:var(--navy)}.cticker{color:var(--mut);font-size:12.5px;margin-top:3px}
.pick-h .pick-tags{margin:0}
.pick-blocks{display:flex;flex-direction:column;gap:9px;margin-top:12px}
.blk{background:#f7f9fc;border:1px solid var(--line);border-radius:9px;padding:11px 13px}
.blk-h{font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--navy);font-weight:800;margin-bottom:8px;border-bottom:1px solid var(--line);padding-bottom:5px}
.metrics{display:flex;flex-wrap:wrap;gap:9px 24px}
.m{display:flex;flex-direction:column;gap:1px}.m>span{font-size:12px;color:var(--mut);text-transform:uppercase;letter-spacing:.03em}
.m>b{font-size:15px;font-weight:700}
.fan{font-size:13px;color:var(--mut);margin-top:9px;line-height:1.85}.fan>span{font-weight:800;color:var(--navy);margin:0 5px;font-size:11.5px}
.fm-row{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}
.fm{font-size:12px;padding:3px 9px;border-radius:6px;font-weight:700}
.blk .chips{margin:8px 0}
.stt{padding:1px 7px;border-radius:5px;font-weight:700;font-size:12px;color:#fff}
.st-buy{background:#16a34a}.st-sh{background:#0891b2}.st-hint{background:var(--neu)}.st-weak{background:#94a3b8}.st-none{background:#cbd5e1;color:#475569}
.amber{color:var(--neu);font-weight:700}
.cdesc{color:var(--mut);font-size:12.5px;margin:9px 0 2px;line-height:1.45;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.filt{float:right;font-size:12px;padding:4px 9px;border:1px solid var(--line);border-radius:6px;width:160px}
/* per-column filter row (second thead row): not sticky, sortable header above stays clickable */
.t .filtrow th{position:static;top:auto;background:#eef3f9;padding:3px 5px;border-bottom:1px solid var(--line);z-index:1}
/* page-level symbol search bar (Strategies / Buy / Model — filters every table on the page) */
.psf{display:flex;align-items:center;gap:9px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:9px 14px;margin:6px 0 14px;box-shadow:var(--shadow);flex-wrap:wrap}
.psf-lbl{font-size:13.5px;color:var(--navy);font-weight:700;white-space:nowrap}
.psf-in{flex:1;min-width:160px;font-size:13.5px;padding:6px 11px;border:1px solid #cdd7e3;border-radius:7px;outline:none;font-weight:500;background:#fafcff}
.psf-in:focus{border-color:var(--accent);background:#fff;box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.psf-clear{font-size:14px;padding:5px 11px;border:1px solid #cdd7e3;border-radius:7px;background:#f4f6f9;cursor:pointer;color:var(--mut);font-weight:700}
.psf-clear:hover{background:#e7eef6;border-color:var(--accent);color:var(--ink)}
.psf-count{font-size:12px;color:var(--mut);font-weight:600;white-space:nowrap}
.psf-chk{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--navy);
font-weight:700;white-space:nowrap;background:#fafcff;border:1px solid #cdd7e3;border-radius:7px;
padding:6px 11px;cursor:pointer}
.psf-chk input{accent-color:var(--accent);cursor:pointer}
[data-theme=dark] .psf-chk{background:#0f1b2a;border-color:var(--line)}
/* free-text filter input */
.colfilt{width:100%;min-width:46px;box-sizing:border-box;font-size:11px;padding:2px 4px;border:1px solid #cdd7e3;border-radius:4px;font-weight:400;color:var(--ink)}
.colfilt:focus{outline:none;border-color:var(--accent);background:#fff}
/* numeric column → histogram with two draggable dot handles (no separate inputs) */
.crange{position:relative;min-width:0}
.hist{width:100%;min-width:130px;height:36px;display:block;overflow:visible;-webkit-user-select:none;user-select:none;background:#f4f6f9;border:1px solid #e1e7ef;border-radius:5px}
.hist:hover{border-color:#c3d2e6}
.hbar{fill:#9aa6b2;opacity:.45;transition:fill .1s,opacity .1s}
.hbar.in{fill:var(--accent);opacity:.95}
/* handle track + vertical guides + the two dots */
.htrack{stroke:#cdd7e3;stroke-width:1.2}
.hguide{stroke:var(--accent);stroke-width:1;stroke-dasharray:2,2;opacity:.55;pointer-events:none}
.hhandle{fill:#fff;stroke:var(--accent);stroke-width:1.6;cursor:ew-resize;transition:fill .12s}
.hhandle:hover{fill:var(--accent)}
/* page-level numeric filter strip (second .psf line) — one slider box per metric,
   stretched to share the full row width */
.psf-num{margin-top:-8px;gap:14px}
.pfbox{display:flex;flex-direction:column;gap:2px;flex:1 1 0;min-width:120px}
.pflbl{display:flex;align-items:baseline;justify-content:space-between;gap:6px;
  font-size:11px;color:var(--mut);font-weight:700;white-space:nowrap;letter-spacing:.02em}
.pfval{font-size:10.5px;font-weight:700;color:var(--mut);opacity:.6;
  font-variant-numeric:tabular-nums}
.pfval.on{color:var(--accent);opacity:1}
.pfrange{position:relative;min-width:0}
.pfrange .hist{min-width:0}
.projin{width:84px;font-size:12.5px;padding:3px 6px;border:1px solid #cdd7e3;border-radius:5px;
  background:#fafcff;color:var(--ink);font-weight:600;outline:none;text-align:right;margin-left:4px}
.projin:focus{border-color:var(--accent);background:#fff;box-shadow:0 0 0 3px rgba(37,99,235,.12)}
[data-theme=dark] .projin{background:#0f1b2a;border-color:var(--line);color:var(--ink)}
/* ISA-style planner block: header + metric cards + reward:risk bar + ladder */
.planblock{border:1px solid var(--line);border-radius:11px;padding:13px 15px;margin:12px 0;
  background:var(--raised)}
.planhead{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:11px}
.plansym{font-weight:800;font-size:16px;color:var(--ink)}
.plantot{margin:4px 0 2px}
.plantot .otile{background:linear-gradient(180deg,var(--card),var(--raised))}
/* compact metric cards inside the planner (smaller than the overview KPI tiles) */
.planblock .otile{flex:1 1 108px;padding:8px 11px}
.planblock .otile .ov{font-size:19px}
.planblock .otile .ol{font-size:10.5px}
.planblock .otile .os{font-size:11px}
.planblock .otile[title]{cursor:help}
/* verdict colours: green=good · orange=neutral · red=bad (left stripe + value tint) */
.planblock .otile.pos::before{background:var(--good)}
.planblock .otile.neu::before{background:var(--neu)}
.planblock .otile.neg::before{background:var(--poor)}
.planblock .otile.pos .ov{color:var(--good)}
.planblock .otile.neu .ov{color:var(--neu)}
.planblock .otile.neg .ov{color:var(--poor)}
.oq{display:inline-block;font-size:9px;font-weight:700;color:var(--mut);border:1px solid var(--line);
  border-radius:50%;width:12px;height:12px;line-height:11px;text-align:center;vertical-align:1px;opacity:.7}
.rrwrap{margin:14px 0 6px}.rrlbl{margin-bottom:4px;font-weight:600}
.plancharts{display:flex;gap:14px;flex-wrap:wrap;margin:14px 0 4px}
.planchart{flex:1 1 380px;min-width:300px;background:linear-gradient(180deg,#fff,#fafcff);
  border:1px solid var(--line);border-radius:11px;padding:12px 14px;box-shadow:var(--shadow)}
[data-theme=dark] .planchart{background:var(--card)}
svg.rrbar{width:100%;max-width:none;height:auto;display:block}
.rrbar .rrpos{fill:var(--pos)}.rrbar .rrneg{fill:var(--neg);opacity:.85}
.rrbar .rrgrid{stroke:var(--line);stroke-width:1;stroke-dasharray:2,3}
.rrbar .rrzero{stroke:var(--mut);stroke-width:1.6}
.rrbar text.rrt{font-size:15px;font-weight:700}
.rrbar text.rrt-in{fill:#fff}
.rrbar text.rrtick{font-size:12px;fill:var(--mut);text-anchor:middle}
.rrbar text.rrlegt{font-size:13px;fill:var(--ink)}
.rrbar text.pos{fill:var(--pos)}.rrbar text.neg{fill:var(--neg)}
/* FCF-growth price-path projection */
svg.ppath{width:100%;max-width:none;height:auto;display:block}
.ppath .ppline{fill:none;stroke:var(--accent);stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.ppath .ppdot{fill:var(--accent)}
.ppath .ppref{stroke-width:1.4;stroke-dasharray:5,4}
.ppath .ppref.tp{stroke:var(--pos)}.ppath .ppref.fair{stroke:var(--accent2,#3f7bf0)}
.ppath .pprerate{stroke:var(--accent2,#3f7bf0);stroke-width:1.4;stroke-dasharray:2,3;opacity:.7}
.ppath .ppreflab{font-size:13px;font-weight:700}
.ppath .ppreflab.tp{fill:var(--pos)}.ppath .ppreflab.fair{fill:var(--accent2,#3f7bf0)}
.ppath .ppx.tp{fill:var(--pos)}.ppath .ppx.fair{fill:var(--accent2,#3f7bf0)}
.ppath .ppxl{font-size:12.5px;font-weight:700}.ppath .ppxl.tp{fill:var(--pos)}.ppath .ppxl.fair{fill:var(--accent2,#3f7bf0)}
.ppath .lcxl,.ppath .lcyl{fill:var(--mut);font-size:11px}.ppath .lcxl{text-anchor:middle}
.rrbar .rrrr{font-size:13px;font-weight:800}
.rrbar .rrrr.pos{fill:var(--pos)}.rrbar .rrrr.neu{fill:var(--zero,#c8871a)}.rrbar .rrrr.neg{fill:var(--neg)}
.rrbar .rrpill{fill:#fff;stroke-width:1.4}[data-theme=dark] .rrbar .rrpill{fill:#0f1b2a}
.rrbar .rrpill.pos{stroke:var(--pos)}.rrbar .rrpill.neu{stroke:var(--zero,#c8871a)}.rrbar .rrpill.neg{stroke:var(--neg)}
svg.pmap{width:100%;max-width:none;height:auto;display:block}
.pmap .pmaxis{stroke:var(--mut);stroke-width:1.6}
.pmap .pmzrisk{fill:var(--neg);opacity:.14}.pmap .pmzrew{fill:var(--pos);opacity:.14}
.pmap .pmlead{stroke:var(--mut);stroke-width:1;opacity:.45}
.pmap .pmlead.pm-now{stroke:var(--accent);opacity:.7}
.pmap .pmlead.pm-sl{stroke:var(--neg);opacity:.5}.pmap .pmlead.pm-tp,.pmap .pmlead.pm-fair{stroke:var(--pos);opacity:.5}
.pmap .pmdot{fill:var(--mut)}.pmap .pmdot.pm-now{fill:var(--accent)}
.pmap .pmdot.pm-sl{fill:var(--neg)}.pmap .pmdot.pm-tp,.pmap .pmdot.pm-fair{fill:var(--pos)}
.pmap .pmlab{font-size:12.5px;font-weight:700;fill:var(--mut)}
.pmap .pmlab.pm-now{fill:var(--accent)}.pmap .pmlab.pm-sl{fill:var(--neg)}
.pmap .pmlab.pm-tp,.pmap .pmlab.pm-fair{fill:var(--pos)}
.projtot{display:flex;flex-wrap:wrap;gap:16px;align-items:baseline;padding:12px 16px;margin:4px 0 14px;
  border:1px solid var(--line);border-radius:8px;background:linear-gradient(180deg,#f4f8ff,#fafcff)}
[data-theme=dark] .projtot{background:var(--card)}
.projtot .pt-l{font-weight:800;letter-spacing:.03em;text-transform:uppercase;font-size:12px;color:var(--mut)}
.projtot span{font-size:14px}.projtot b{font-size:15px}
.projtot .pt-w{color:var(--mut);font-style:italic}
.pfsel{font-size:12px;padding:7px 9px;border:1px solid #cdd7e3;border-radius:5px;
  background:#fafcff;color:var(--ink);font-weight:600;outline:none;height:36px;cursor:pointer}
.pfsel:focus{border-color:var(--accent);background:#fff;box-shadow:0 0 0 3px rgba(37,99,235,.12)}
[data-theme=dark] .pfsel{background:#0f1b2a;border-color:var(--line);color:var(--ink)}
.psf-num .psf-count{flex:0 0 100%;margin-top:2px}
[data-theme=dark] .psf-num .pflbl,[data-theme=dark] .pfval{color:var(--mut)}
/* categorical column → multi-select dropdown (fixed positioning escapes table overflow) */
.ccat{position:relative;font-size:11px}
.ccat>summary{cursor:pointer;list-style:none;padding:2px 6px;border:1px solid #cdd7e3;border-radius:4px;background:#fff;font-weight:400;color:var(--mut);white-space:nowrap;text-align:left}
.ccat>summary::-webkit-details-marker{display:none}
.ccat>summary::after{content:" ▾";color:var(--mut);font-size:9px}
.ccat[open]>summary{background:#eef3f9;border-color:var(--accent);color:var(--ink)}
.ccat-list{display:none}
.ccat[open]>.ccat-list{display:block;z-index:50;background:#fff;border:1px solid var(--line);border-radius:6px;box-shadow:0 4px 12px rgba(11,34,56,.15);padding:5px 6px;max-height:260px;overflow-y:auto;min-width:170px}
.ccat-list label{display:flex;align-items:center;gap:5px;padding:2px 3px;font-size:11.5px;cursor:pointer;font-weight:400;white-space:nowrap}
.ccat-list label:hover{background:#f1f6fc;border-radius:3px}
.ccat-list input[type=checkbox]{margin:0;accent-color:var(--accent)}
/* ✓ all / ✕ none shortcut row inside the multi-select */
.ccat-ctrl{display:flex;gap:4px;border-bottom:1px solid var(--line);padding:0 0 5px;margin-bottom:4px;position:sticky;top:-5px;background:#fff;z-index:1}
.ccat-btn{font-size:10.5px;padding:2px 7px;border:1px solid #cdd7e3;border-radius:4px;background:#f4f6f9;cursor:pointer;color:var(--ink);font-weight:600}
.ccat-btn:hover{background:#e7eef6;border-color:var(--accent)}
table.sortable th.sortable-th:hover{background:#e2ebf5}
/* sector score line chart */
.lcwrap{position:relative;margin-top:6px}
.lcplot{overflow-x:auto}
.lchart{width:100%;min-width:560px;height:auto;display:block}
.lchart .scl{fill:none;stroke-width:1.7;opacity:.9;transition:opacity .12s,stroke-width .12s}
.lchart .scl-wave{stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
/* smooth mode (default): show the wave, hide the raw daily line + per-day dots (keep current).
   daily mode (.lcwrap without .smooth): hide the wave, show the raw line at full weight. */
.lcwrap.smooth .scl-raw{display:none}
.lcwrap.smooth .scdot:not(.sccur){display:none}
.lcwrap:not(.smooth) .scl-wave{display:none}
.lcwrap:not(.smooth) .scl-raw{opacity:.9!important;stroke-width:1.7!important}
.slgd-btn.lcmode{font-weight:700}
.lchart .scl.hl{stroke-width:3.6;opacity:1}
.lchart .scl.dim,.lchart .scdot.dim{opacity:.08}
.lchart .scdot{transition:opacity .12s;stroke:#fff;stroke-width:.6}
.lchart .scdot.hl{r:3.4}
.sclines:hover .scl,.sclines:hover .scdot{opacity:.22}
.sclines .scl:hover{opacity:1;stroke-width:3.6}
.lcgrid{stroke:var(--line);stroke-width:1;stroke-dasharray:2,3}
.lcguide{stroke:var(--mut);stroke-width:1;stroke-dasharray:3,3;pointer-events:none}
.lcyl{fill:var(--mut);font-size:9px;text-anchor:end}
.lcxl{fill:var(--mut);font-size:8.5px;text-anchor:middle}
.lcband{fill:var(--mut);font-size:9.5px;font-weight:800;text-anchor:end;opacity:.65}
/* legend on TOP, bigger, clickable */
.slgd-row{display:flex;flex-wrap:wrap;align-items:center;gap:7px 14px;margin:2px 0 12px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.slgd-bulk{display:inline-flex;gap:5px;margin-right:6px;padding-right:10px;border-right:1px solid var(--line)}
.slgd-btn{font-size:11.5px;padding:3px 11px;border:1px solid #cdd7e3;border-radius:999px;background:#f4f6f9;cursor:pointer;color:var(--ink);font-weight:700}
.slgd-btn:hover{background:#e7eef6;border-color:var(--accent)}
.slgd{font-size:13px;color:var(--ink);cursor:pointer;display:inline-flex;align-items:center;gap:6px;padding:3px 9px;border:1px solid var(--line);border-radius:999px;user-select:none;transition:background .1s}
.slgd i{width:13px;height:13px;border-radius:4px;display:inline-block}
.slgd b{font-variant-numeric:tabular-nums}
.slgd:hover{background:#eef3f9;border-color:#c3d2e6}
.slgd.off{opacity:.45;text-decoration:line-through;background:#f4f6f9}
.slgd.off i{filter:grayscale(1)}
/* crosshair tooltip */
.lctip{position:absolute;top:46px;z-index:5;pointer-events:none;background:rgba(255,255,255,.97);
border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow);padding:7px 9px;font-size:11.5px;max-width:230px}
.lctip .lctip-d{font-weight:800;color:var(--navy);margin-bottom:4px;font-size:11px}
.lctip div{display:flex;align-items:center;gap:5px;line-height:1.5}
.lctip i{width:9px;height:9px;border-radius:2px;display:inline-block}
.lctip b{margin-left:auto;font-variant-numeric:tabular-nums}
.treemap{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}
.tile{flex-basis:96px;min-height:56px;border-radius:6px;padding:7px 9px;color:#fff;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;
cursor:pointer;transition:transform .12s ease,box-shadow .12s ease,outline-color .12s}
.tile:hover{transform:translateY(-1px);box-shadow:0 3px 10px rgba(10,30,55,.30)}
.tile.sel{outline:3px solid var(--accent);outline-offset:-3px;box-shadow:0 3px 12px rgba(37,99,235,.40)}
.tile .tt{font-size:11.5px;font-weight:600;line-height:1.12}.tile .tp{font-size:14px;font-weight:800}
.lgd span{display:inline-block;width:12px;height:12px;border-radius:2px;vertical-align:middle;margin:0 1px}
tr.drow{cursor:pointer}tr.drow:hover{background:#eef4fb}.exp{color:var(--accent);font-weight:700}
.wlb{border:none;background:none;cursor:pointer;font-size:13px;line-height:1;padding:0 0 0 4px;
  color:#b8c2cf;vertical-align:baseline}
.wlb:hover{color:var(--accent)}.wlb.on{color:#f0a818}
[data-theme=dark] .wlb{color:#5a6675}[data-theme=dark] .wlb.on{color:#f0a818}
tr.trow>td{background:#f7f9fc;padding:10px 14px}
.trk{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.trkstats{display:flex;flex-wrap:wrap;gap:8px 22px;margin:4px 0 12px;font-size:14px;line-height:1.4}
.tstat{display:flex;gap:7px;align-items:baseline}
.tstat>b{font-size:11px;color:var(--mut);text-transform:uppercase;letter-spacing:.05em}
.tstat>span{font-weight:600;font-variant-numeric:tabular-nums}
.fold{border:1px solid var(--line);border-radius:9px;background:#fff;padding:0 13px}
.fold>summary{padding:11px 0;font-weight:700;font-size:12.5px;color:var(--navy);text-transform:uppercase;letter-spacing:.04em;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.fold[open]{padding-bottom:11px}
/* fundamentals candidate folds — fixed grid so every entry aligns */
.fcand{padding:0 6px}
.fhead,.fcand>summary{display:grid;grid-template-columns:16px 64px minmax(150px,2fr) 150px 150px 130px 56px minmax(80px,1fr);gap:12px;align-items:center}
.fhead{font-size:11.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--mut);font-weight:700;padding:6px 6px 5px;border-bottom:2px solid var(--line)}
.fcand>summary{text-transform:none;letter-spacing:0;font-weight:600;font-size:13px;color:var(--ink);padding:9px 6px}
.fcand>summary::-webkit-details-marker,.fcand>summary::marker{display:none;content:""}
.fcand[open]>summary{border-bottom:1px solid var(--line)}
.fc-x{color:var(--accent);font-weight:700}.fcand[open] .fc-x::before{content:"▾"}.fcand[open] .fc-x{font-size:0}.fcand[open] .fc-x::before{font-size:13px}
.fc-sym{font-weight:800;color:var(--navy);font-size:14px}.fc-name{color:var(--mut);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fcand>summary>span{overflow:hidden}
svg.spark{vertical-align:middle;max-width:100%;height:auto}
/* sparkline: colour via tokens so it brightens in dark mode */
svg.spark.up{color:var(--pos)}svg.spark.dn{color:var(--neg)}
.sk-line{stroke:currentColor;stroke-width:1.8}
.sk-de{fill:currentColor}.sk-area{fill:currentColor;opacity:.12}
.sk-d0{fill:var(--mut)}
.sk-base{stroke:var(--mut);stroke-width:1;stroke-dasharray:3,3;opacity:.55}
.rc{font-size:14px;line-height:1.5;margin-top:8px}
@media(max-width:760px){.metrics{gap:8px 18px}}
.kpis{display:flex;gap:14px;flex-wrap:wrap}.kpi b{font-size:20px;margin-right:6px}
.callout{background:#eef4fb;border:1px solid #d4e3f5;border-radius:8px;padding:10px 12px;font-size:12.5px;margin:8px 0}
.callout.warn{background:var(--neubg);border-color:#ecd97a}
pre{background:#0f1b2a;color:#d7e3f0;border-radius:8px;padding:12px;overflow:auto;font-size:13px;max-height:520px}
pre.report{background:#fbfcfe;color:var(--ink);border:1px solid var(--line);max-height:none}
details{margin:6px 0;border-bottom:1px solid var(--line)}summary{cursor:pointer;padding:7px 0;font-size:13px}
summary:hover{color:var(--accent)}
.hm td{text-align:center;font-weight:600;color:#fff;padding:4px 7px}.hm td:first-child{color:var(--ink);background:#fff;font-weight:600}
.g-A{background:#15803d}.g-B{background:#3b82f6}.g-C{background:#d97706}.g-D{background:#b91c1c}
.mut{color:var(--mut)}
/* overview dashboard */
.otiles{display:flex;flex-wrap:wrap;gap:14px;margin:16px 0}
.otile{flex:1 1 170px;position:relative;overflow:hidden;background:linear-gradient(180deg,#fff,#fafcff);
border:1px solid var(--line);border-radius:14px;padding:16px 18px;box-shadow:var(--shadow);transition:transform .12s,box-shadow .12s}
.otile:hover{transform:translateY(-2px);box-shadow:0 6px 18px rgba(16,40,70,.12)}
.otile::before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;background:var(--mut)}
.otile.good::before{background:var(--good)}.otile.accent::before{background:linear-gradient(var(--accent),var(--accent2))}
.otile .oicon{position:absolute;top:13px;right:14px;font-size:18px;opacity:.85}
.otile .ov{font-size:33px;font-weight:800;color:var(--navy);line-height:1;letter-spacing:-.02em}
.otile .ol{font-size:11.5px;font-weight:700;color:var(--ink);margin-top:6px;text-transform:uppercase;letter-spacing:.04em}
.otile .os{font-size:11.5px;color:var(--mut);margin-top:3px}
.statbar{display:flex;height:32px;border-radius:9px;overflow:hidden;border:1px solid var(--line);margin:10px 0 8px}
.statbar>span{display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;font-weight:800;min-width:2px;overflow:hidden}
.sb-buy{background:var(--br-buy)}.sb-sh{background:var(--br-sh)}.sb-hint{background:var(--br-hint)}.sb-weak{background:var(--br-weak)}
/* signal-mix donut segments share the same ramp tokens as the bar above */
.dseg.br-buy{stroke:var(--br-buy)}.dseg.br-sh{stroke:var(--br-sh)}.dseg.br-hint{stroke:var(--br-hint)}.dseg.br-weak{stroke:var(--br-weak)}
/* true market-breadth buckets: bullish (advancers) / neutral / bearish (decliners) */
.sb-bull{background:var(--good)}.sb-neu{background:#94a3b8}.sb-bear{background:var(--poor)}
.dseg.br-bull{stroke:var(--good)}.dseg.br-neu{stroke:#94a3b8}.dseg.br-bear{stroke:var(--poor)}
.dtrack{stroke:var(--line)}
.statlgd{display:flex;flex-wrap:wrap;gap:16px;font-size:12.5px;color:var(--mut)}
.statlgd b{color:var(--ink)}.statlgd i{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:6px;vertical-align:-1px}
.gchips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.gchip{font-size:12px;font-weight:700;color:#fff;padding:3px 9px;border-radius:6px}
.wsec{font-size:11px;font-weight:800;color:#fff;padding:1px 6px;border-radius:5px;margin-left:5px;vertical-align:middle}
/* model probability bar + high-confidence groups */
.pbar{display:inline-block;width:84px;height:11px;border-radius:6px;background:var(--line);overflow:hidden;vertical-align:middle;margin-right:6px}
.pbf{display:block;height:11px}.pbf.good{background:var(--good)}.pbf.neu{background:var(--neu)}.pbf.mut{background:#9aa6b2}
.hcg{display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px 12px;padding:9px 0;border-bottom:1px solid var(--line)}
.hcs{font-weight:800;color:var(--navy);font-size:13px;min-width:220px;flex-shrink:0}
.hcc{display:flex;flex-wrap:wrap;gap:5px}
.hcchip{display:inline-block;font-size:12px;font-weight:700;padding:2px 8px;border-radius:6px;color:#fff}
.hcchip b{font-weight:800}
.hc-hi{background:var(--good)}.hc-mid{background:#3b82f6}.hc-lo{background:var(--neu)}
.grank{display:inline-block;font-size:11px;font-weight:800;color:#fff;padding:1px 7px;border-radius:5px}
.cnm{color:var(--mut);font-size:12px;display:inline-block;max-width:230px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}
.xbadge{background:var(--trend);color:#fff;padding:2px 8px;border-radius:6px;font-size:11.5px;font-weight:800;white-space:nowrap;vertical-align:middle;box-shadow:0 1px 2px rgba(14,138,106,.35)}
/* top summary strip + bottom help fold */
.sumbar{display:flex;flex-wrap:wrap;gap:8px 10px;align-items:center;margin:2px 0 4px}
.sumchip{background:#eef3f9;border:1px solid var(--line);border-radius:7px;padding:3px 10px;font-size:12.5px;color:var(--ink)}
.sumchip b{color:var(--navy);font-weight:800;margin-right:3px}
.sumbar .sumtot b{font-size:16px}
.helpnote{margin-top:18px;background:var(--bg2,#f7f9fc)}
.helpnote>summary{color:var(--mut)}.helpnote .hn{font-size:12.5px;line-height:1.5;padding:4px 2px 10px}
/* sentiment cards */
.scards{display:flex;flex-direction:column;gap:13px;margin-top:6px}
.scard{background:#fff;border:1px solid var(--line);border-left:5px solid var(--mut);border-radius:12px;padding:14px 16px;box-shadow:var(--shadow)}
.scard.s-bull{border-left-color:var(--good)}.scard.s-bear{border-left-color:var(--poor)}.scard.s-neut{border-left-color:var(--neu)}
.sc-h{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.sc-t{font-weight:800;font-size:17px;color:var(--navy)}
.sc-n{color:var(--mut);font-size:13px;flex:1;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sc-badge{font-weight:700;font-size:12.5px;padding:3px 12px;border-radius:999px}
.sb-bull{background:var(--goodbg);color:var(--good)}.sb-bear{background:var(--poorbg);color:var(--poor)}.sb-neut{background:var(--neubg);color:var(--neu)}
.sc-score{font-weight:800;font-size:13.5px;color:var(--navy)}
.sc-stats{display:flex;flex-wrap:wrap;gap:6px 30px;margin:11px 0;padding:10px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.sc-stats>div{display:flex;flex-direction:column;gap:2px}
.sc-stats span{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--mut)}
.sc-stats b{font-size:13.5px}
.sc-risk{font-size:13px;color:var(--poor);margin-top:7px;line-height:1.45}
.sc-opp{font-size:13px;color:var(--good);margin-top:4px;line-height:1.45}
.sc-risk b,.sc-opp b{color:var(--ink)}
.scard .fold{margin-top:11px;border:1px solid var(--line);border-radius:8px}
/* wider on big screens; compact + single-column only on small screens */
/* retractable strategy sections: the page opens as a clean list of titles */
.stratsec{padding:0;overflow:hidden}
.stratfold>summary{list-style:none;cursor:pointer;padding:15px 20px;display:block;
transition:background .14s}
.stratfold>summary::-webkit-details-marker{display:none}
.stratfold>summary:hover{background:#f4f8fc}
.stratfold>summary h2{margin:0;border-left:4px solid var(--accent);pointer-events:none}
.stratfold>summary h2::before{content:"▸";display:inline-block;margin-right:8px;color:var(--accent);
font-size:13px;transition:transform .15s ease}
.stratfold[open]>summary h2::before{transform:rotate(90deg)}
.stratfold[open]>summary{border-bottom:1px solid var(--line)}
.stratfold>.tw{padding:0 20px 16px}
.stratfold>.foldbody{padding:2px 20px 16px}
/* fundamentals: shared 640px band so funnel banner, detail strip and metric table align.
   The selectors must out-rank `main.wide .t{width:auto;min-width:60%}` and
   `.trow .t{width:auto}` (the table-compaction rules), hence the explicit contexts. */
.fundbox{width:640px;max-width:100%;box-sizing:border-box}
/* metric-table rows + funnel box: classes replacing ~2960 per-cell inline styles per heavy
   page (perf) AND giving them dark-mode support (were hardcoded #f4f4f6/#555/#fafbfd) */
.ms-cat td{background:var(--raised);font-size:15px;font-weight:700;padding:9px 9px 4px}
.ms-sub td{color:var(--mut);font-size:14px;font-weight:600;font-style:italic;padding:4px 9px 4px 18px}
.ms-m{padding-left:28px;font-weight:500}
.funnelbox{padding:9px;background:var(--raised);border:1px solid var(--line);border-radius:6px;margin:6px 0;font-size:13px}
/* pagination bar for windowed large tables */
.pgbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:center;margin:10px 0 2px;font-size:13px;color:var(--mut)}
.pgbar .pgb{font-size:13px;padding:5px 13px;border:1px solid var(--line);border-radius:7px;background:var(--card);cursor:pointer;color:var(--ink);font-weight:700}
.pgbar .pgb:hover:not([disabled]){background:var(--raised);border-color:var(--accent)}
.pgbar .pgb[disabled]{opacity:.4;cursor:default}
.pgbar .pgi{font-variant-numeric:tabular-nums}
.pgbar .pgs{font-size:13px;padding:4px 9px;border:1px solid var(--line);border-radius:7px;background:var(--card);color:var(--ink);cursor:pointer}
.fundbox .t,main.wide .fundbox .t,.trow .fundbox .t,.trkfold .fundbox .t{
width:100%;min-width:100%;margin:6px 0}
.fdetail .fdl{width:130px;color:var(--mut);font-weight:700;font-size:11px;text-transform:uppercase;
letter-spacing:.04em;text-align:left;vertical-align:top}
.fdetail .fdv{text-align:left;white-space:normal;font-size:12.5px}
.mhelp{cursor:help;border-bottom:1px dotted #b8c4d2}
/* stat tiles inside the detail strip (Risk & alpha / Market rows) */
.fstats{display:flex;flex-wrap:wrap;gap:4px}
.fstat{display:inline-flex;flex-direction:column;align-items:flex-start;background:#fff;
border:1px solid var(--line);border-radius:6px;padding:3px 9px 4px;cursor:help;min-width:56px}
.fstat b{font-size:10.5px;color:var(--mut);text-transform:uppercase;letter-spacing:.05em;
font-weight:700;line-height:1.4}
.fstat>span{font-size:12.5px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.25}
.p52{display:inline-block;width:46px;height:6px;border-radius:3px;background:var(--line);
position:relative;vertical-align:middle;margin-right:3px}
.p52 i{position:absolute;top:-2px;width:3px;height:10px;background:var(--accent);
border-radius:1px;transform:translateX(-1px)}
/* overview: Top-5 strip, breadth donut, animated sector bars, diff chips */
.t5strip{display:flex;gap:12px;overflow-x:auto;padding:4px 2px 8px}
.t5c{position:relative;flex:0 0 200px;display:flex;flex-direction:column;gap:4px;background:#fff;
border:1px solid var(--line);border-radius:11px;padding:12px 14px;text-decoration:none;
color:var(--ink);transition:transform .14s ease,box-shadow .14s ease}
.t5c:hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(16,40,70,.13)}
.t5c .t5r{position:absolute;top:9px;left:10px;background:var(--navy);color:#fff;
border-radius:6px;padding:1px 7px;font-size:11px;font-weight:800}
.t5c .t5s{font-size:17px;font-weight:800;color:var(--navy);margin-left:34px}
.t5c .t5n{font-size:12px;color:var(--mut);margin-left:34px;min-height:14px;
overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.t5c .t5m{font-size:12.5px;color:var(--mut)}.t5c .t5m b{color:var(--accent);font-size:14px}
.t5c svg{align-self:center;margin:2px 0}
.bflex{display:flex;gap:26px;align-items:center;flex-wrap:wrap}
.bbars{flex:1;min-width:280px}
/* market-breadth donut grid (Global + per-market); numbers live on hover (slice <title>) */
.bpies{display:flex;gap:22px;flex-wrap:wrap;align-items:flex-start}
.bpie{flex:0 0 auto;display:flex;flex-direction:column;align-items:center}
.bpie .donut{cursor:default}
.bpie .dseg{cursor:pointer}
/* market / timeframe label above each donut */
.bptitle{font-size:13px;font-weight:800;color:var(--navy);letter-spacing:.02em;margin-bottom:2px}
/* bull/neutral/bear count caption under each market donut (numbers visible without hover) */
.bpcap{display:flex;gap:10px;margin-top:-6px;font-size:12.5px;font-weight:700}
.bpcap span{white-space:nowrap}
.bpcap .bp-bull{color:var(--good)}.bpcap .bp-neu{color:#94a3b8}.bpcap .bp-bear{color:var(--poor)}
/* per-stock economy-cycle alignment flag (step 2) */
.cflag{font-size:10.5px;font-weight:700;padding:1px 5px;border-radius:7px;white-space:nowrap;margin-left:4px}
.cflag.cf-ok{background:#1f9d5522;color:#1f9d55}
.cflag.cf-no{background:#dc262622;color:#dc2626}
/* sector/subsector concentration donut charts */
.piechart{flex:1;min-width:300px;margin:4px 0}
.pierow{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.pie{flex:0 0 auto}
.pielgs{display:flex;flex-direction:column;gap:3px;font-size:12px}
.pielg{display:flex;align-items:center;gap:6px;white-space:nowrap}
.pielg i{width:11px;height:11px;border-radius:2px;display:inline-block;flex:0 0 auto}
.donut .dseg{transition:stroke-dasharray 1s cubic-bezier(.22,.8,.36,1)}
.donut .dpct{font-size:25px;font-weight:800;fill:var(--navy)}
.donut .dlbl{font-size:10.5px;fill:var(--mut);text-transform:uppercase;letter-spacing:.06em}
.secbars{display:flex;flex-direction:column;gap:3px}
.srow{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--ink);
padding:3px 8px;border-radius:7px;transition:background .12s}
.srow:hover{background:#eef3f9}
.srn{flex:0 0 185px;font-weight:600;font-size:13.5px;overflow:hidden;text-overflow:ellipsis;
white-space:nowrap}
.sgn{flex:0 0 265px;display:flex;align-items:center;gap:8px;overflow:hidden;white-space:nowrap}
.sgn .sgd{color:var(--mut);font-size:12px;overflow:hidden;text-overflow:ellipsis}
.srt{flex:0 0 76px}
.srb{flex:1;height:11px;background:#eef1f6;border-radius:6px;overflow:hidden}
.srb .sbar{display:block;height:100%;width:0;border-radius:6px;
transition:width .9s cubic-bezier(.22,.8,.36,1)}
.srv{flex:0 0 86px;text-align:right;font-weight:700;font-size:13.5px;font-variant-numeric:tabular-nums}
@media(prefers-reduced-motion:reduce){.donut .dseg,.srb .sbar,.t5c{transition:none}}
/* sector/subsector concentration bar charts (Buy tabs summary) */
.hbgroup{margin:12px 0 6px}
.hbgh{font-size:13.5px;font-weight:700;color:var(--navy);margin-bottom:7px}
.hbpair{display:flex;gap:26px;flex-wrap:wrap}
.hbchart{flex:1 1 320px;min-width:270px}
.hbtitle{font-size:11.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--mut);
font-weight:700;margin-bottom:5px}
.hbrow{display:flex;align-items:center;gap:8px;margin:2px 0}
.hbl{flex:0 0 132px;font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hbt{flex:1;height:13px;background:#eef1f6;border-radius:6px;overflow:hidden}
.hbt i{display:block;height:100%;border-radius:6px;
background:linear-gradient(90deg,var(--accent),var(--accent2))}
.hbv{flex:0 0 28px;text-align:right;font-size:12.5px;font-weight:700;font-variant-numeric:tabular-nums}
[data-theme=dark] .hbt{background:#22304a}
/* momentum-change view (ETF tab + Overview) — larger, well-spaced bars */
.mpair{display:flex;gap:34px;flex-wrap:wrap;margin-top:6px}
.mcol{flex:1 1 400px;min-width:300px}
.mctitle{font-size:12.5px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;
margin:2px 0 12px;padding-bottom:7px;border-bottom:2px solid var(--line)}
.mctitle.up{color:var(--good)}.mctitle.dn{color:var(--poor)}
.mrow{display:flex;align-items:center;gap:13px;margin:8px 0}
.mlbl{flex:0 0 158px;font-size:13.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;
white-space:nowrap}
.mbar{flex:1;height:20px;min-width:60px;background:#eef1f6;border-radius:5px;overflow:hidden}
.mbar i{display:block;height:100%;border-radius:5px;transition:width .5s cubic-bezier(.22,.8,.36,1)}
.mval{flex:0 0 60px;text-align:right;font-size:14px;font-weight:800;font-variant-numeric:tabular-nums}
.mval.pos{color:var(--pos)}.mval.neg{color:var(--neg)}
[data-theme=dark] .mbar{background:#22304a}
@media(prefers-reduced-motion:reduce){.mbar i{transition:none}}
/* conflux chips, data-health dots, NEW badge, theme toggle */
.cfxchip{display:inline-block;background:linear-gradient(120deg,#7a5d00,#b08900);color:#fff;
border-radius:8px;padding:4px 13px;font-weight:800;font-size:13px;margin:2px 3px;
text-decoration:none;box-shadow:0 1px 4px rgba(122,93,0,.35)}
.cfxchip:hover{filter:brightness(1.12)}
.cfxrep{margin-top:11px;font-size:12.5px;color:var(--mut);line-height:1.7}
.cfxrep b{color:var(--navy);font-weight:700}
.hdots{display:flex;gap:8px;flex-wrap:wrap}
.hdot{display:inline-flex;align-items:center;gap:7px;background:#f6f8fb;border:1px solid var(--line);
border-radius:999px;padding:4px 13px;font-size:12px;color:var(--mut);cursor:help}
.hdot b{color:var(--ink)}
.hdot i{width:9px;height:9px;border-radius:50%;display:inline-block}
.h-ok i{background:#19a052;box-shadow:0 0 5px rgba(25,160,82,.6)}
.h-warn i{background:#e2a716;box-shadow:0 0 5px rgba(226,167,22,.6)}
.h-bad i{background:#d23b2e;box-shadow:0 0 6px rgba(210,59,46,.65);animation:evp 1.4s ease-in-out infinite}
.newb{background:#fff3cd;color:#8a6d00;border:1px solid #e6cf7a;border-radius:5px;
padding:1px 7px;font-size:10.5px;font-weight:800}
.thbtn{margin-left:auto;background:none;border:1px solid var(--line);border-radius:8px;
padding:4px 10px;cursor:pointer;font-size:15px;line-height:1;color:var(--ink)}
.thbtn:hover{background:var(--raised);border-color:var(--accent)}
nav .thbtn+.thbtn{margin-left:6px}
/* density toggle: highlight the ≡ button while compact mode is active */
[data-density=compact] .dsbtn{background:linear-gradient(135deg,var(--accent),var(--accent2));
color:#fff;border-color:transparent}
/* compact table density (persisted; toggled by ≡ in nav) — tightens cells, not layout */
[data-density=compact] .t th,[data-density=compact] .t td{padding:2px 5px;font-size:12px}
[data-density=compact] .trow .t th,[data-density=compact] .trkfold .t th{padding:2px 5px;font-size:11px}
[data-density=compact] section{padding:13px 16px;margin:12px 0}
/* dark theme — variable swap + the handful of hardcoded light surfaces */
[data-theme=dark]{--bg:#0e1622;--card:#151f2d;--raised:#1b2735;--ink:#d7e1ec;--mut:#9aacc0;--line:#26354a;
--navy:#cfdded;--navy2:#0a1929;--goodbg:#11301e;--poorbg:#391a1a;--neubg:#33270e;
/* brightened text tokens: fixes the #b91c1c .neg / #15803d .pos contrast failure on dark
   surfaces (the solid --good/--poor fills are left intact for white-on-fill pills) */
--pos:#3fcf8e;--neg:#f87171;--teal:#2dd4bf;
--br-buy:#16a34a;--br-sh:#60a5fa;--br-hint:#e6b333;--br-weak:#d56a55;
--shadow:0 1px 3px rgba(0,0,0,.45),0 1px 2px rgba(0,0,0,.3)}
[data-theme=dark] body{background:linear-gradient(180deg,#0a111b 0,var(--bg) 260px) fixed}
[data-theme=dark] nav{background:rgba(14,22,34,.93)}
[data-theme=dark] nav a:hover,[data-theme=dark] .thbtn:hover,[data-theme=dark] .srow:hover,
[data-theme=dark] .stratfold>summary:hover{background:#1c2940}
[data-theme=dark] .t th{background:#1a2638;border-bottom-color:#2c3c52}
[data-theme=dark] .t tbody tr:nth-child(even):not(.trow){background:#18222f}
[data-theme=dark] .t tbody tr:hover{background:#1d2a3c}
[data-theme=dark] .fseg,[data-theme=dark] .fstat,[data-theme=dark] .t5seq .t5p,
[data-theme=dark] .hdot,[data-theme=dark] .chgchip{background:#1b2735}
[data-theme=dark] .fundbox>div,[data-theme=dark] .pick,[data-theme=dark] .t5c,
[data-theme=dark] .otile{background:var(--card)}
[data-theme=dark] .pick.inel{background:var(--poorbg)}
[data-theme=dark] .srb,[data-theme=dark] .bar{background:#22304a}
[data-theme=dark] .hero{box-shadow:0 6px 20px rgba(0,0,0,.5)}
[data-theme=dark] header .btxt b,[data-theme=dark] .hero h1{color:#fff}
/* dark: surfaces that were hardcoded light → unreadable white boxes / numbers before */
[data-theme=dark] .blk{background:#16212f;border-color:var(--line)}
[data-theme=dark] .fold,[data-theme=dark] tr.trow>td{background:var(--card)}
[data-theme=dark] pre.report{background:#0f1b2a;border-color:var(--line);color:var(--ink)}
[data-theme=dark] .hm td:first-child{background:var(--card);color:var(--ink)}
[data-theme=dark] .colfilt,[data-theme=dark] .ccat>summary,[data-theme=dark] .ccat-list,
[data-theme=dark] .ccat-btn,[data-theme=dark] .psf-clear,[data-theme=dark] .slgd,
[data-theme=dark] .slgd-btn{background:#16212f;border-color:var(--line);color:var(--ink)}
[data-theme=dark] .psf,[data-theme=dark] .sumchip,[data-theme=dark] .callout{
background:#16212f;border-color:var(--line)}
[data-theme=dark] .psf-in{background:#0f1b2a;border-color:var(--line);color:var(--ink)}
[data-theme=dark] .ccat[open]>summary{background:#1c2940}
[data-theme=dark] .filtrow th{background:#16212f;border-bottom-color:var(--line)}
[data-theme=dark] .hist{background:#0f1b2a}[data-theme=dark] .hbar{fill:#5d6e86}
[data-theme=dark] .callout.warn{background:#2a2310;border-color:#5a4a1e}
[data-theme=dark] .statbar,[data-theme=dark] .pbar{border-color:var(--line)}
[data-theme=dark] .lctip{background:rgba(21,31,45,.97);border-color:var(--line)}
/* "what changed" rows: labeled, soft-tinted, yesterday → today Top-5 sequence */
.chgrow{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:7px 0}
.chglbl{flex:0 0 72px;color:var(--mut);font-weight:700;font-size:11px;
text-transform:uppercase;letter-spacing:.04em}
.chgsub{font-size:11px;font-weight:800;margin-right:2px}
.chgchip{display:inline-block;padding:2px 9px;border-radius:6px;font-size:12px;font-weight:700;margin:1px}
.chgchip.cin{background:var(--goodbg);color:var(--good);border:1px solid #bfe3cc}
.chgchip.cout{background:var(--poorbg);color:var(--poor);border:1px solid #ecc8c8;opacity:.8}
.t5seq{display:inline-flex;gap:4px;flex-wrap:wrap}
.t5seq .t5p{background:#eef3f9;border:1px solid var(--line);border-radius:6px;
padding:2px 9px;font-size:12px;font-weight:700;color:var(--navy)}
.t5seq.old .t5p{opacity:.75}
.t5seq .t5p.t5gone{opacity:.4;text-decoration:line-through}
.t5seq .t5p.t5new{background:var(--goodbg);color:var(--good);border-color:#9fd4b3;
box-shadow:0 0 0 2px rgba(21,128,61,.12)}
.chgarr{color:var(--mut);font-weight:800}
/* hero mood chips */
.hchips{margin-top:12px;display:flex;gap:8px;flex-wrap:wrap}
.hchip{background:rgba(255,255,255,.13);border:1px solid rgba(255,255,255,.25);color:#e8f1fb;
padding:4px 13px;border-radius:999px;font-size:12.5px;font-weight:600;backdrop-filter:blur(4px)}
/* same-day rotation event badge (sector snapshot) */
.evpulse{font-size:10.5px;font-weight:800;padding:1px 8px;border-radius:999px;margin-left:6px;
animation:evp 1.6s ease-in-out 3}
.ev-up{background:var(--goodbg);color:var(--good)}.ev-dn{background:var(--poorbg);color:var(--poor)}
@keyframes evp{0%,100%{opacity:1}50%{opacity:.45}}
/* clickable KPI tiles */
a.otile{text-decoration:none;color:inherit;cursor:pointer;
transition:transform .14s ease,box-shadow .14s ease}
a.otile:hover{transform:translateY(-2px);box-shadow:0 7px 18px rgba(16,40,70,.14)}
/* gentle section entrance */
section.sanim{opacity:0;transform:translateY(10px);
transition:opacity .45s ease,transform .45s ease}
section.sanim.vis{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){.evpulse{animation:none}
section.sanim{opacity:1;transform:none;transition:none}}
/* active theme-filter pill (ETF treemap): always visible while a tile is selected */
.tmbar{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);z-index:60;
background:var(--navy);color:#fff;padding:8px 16px;border-radius:999px;font-size:13px;
box-shadow:0 4px 16px rgba(11,34,56,.35)}
.tmbar button{margin-left:10px;background:rgba(255,255,255,.16);color:#fff;
border:1px solid rgba(255,255,255,.35);border-radius:999px;padding:2px 11px;font-size:12px;
cursor:pointer}.tmbar button:hover{background:rgba(255,255,255,.28)}
/* fundamentals summary line: labeled segments instead of a run-on line */
.fsegs{display:inline-flex;flex-wrap:wrap;gap:3px;vertical-align:middle;margin:0 4px}
.fseg{display:inline-flex;align-items:center;gap:5px;background:#f3f6fa;border:1px solid var(--line);
border-radius:6px;padding:1px 8px;font-size:11.5px;color:var(--ink);white-space:nowrap}
.fseg b{color:var(--mut);font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.05em}
.conf{padding:0 6px;border-radius:5px;font-size:10.5px;font-weight:700}
.c-high{background:var(--goodbg);color:var(--good)}.c-medium{background:var(--neubg);color:var(--neu)}
.c-low{background:var(--poorbg);color:var(--poor)}
/* sector → strategies deep link */
.seclink{text-decoration:none;color:inherit;border-bottom:1px dotted var(--accent)}
.seclink:hover{color:var(--accent)}
/* focus visibility for keyboard / filter inputs */
.psf-in:focus,.cfin:focus{outline:2px solid var(--accent2);outline-offset:1px;border-color:var(--accent2)}
.stratfold>summary:focus-visible{outline:2px solid var(--accent2);outline-offset:-2px}
/* global keyboard focus ring (>=3:1) for all interactive elements */
a:focus-visible,button:focus-visible,summary:focus-visible,[tabindex]:focus-visible,
.t th.sortable-th:focus-visible,tr.drow:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}
/* honor reduced-motion globally: kill non-essential transitions/animations */
@media(prefers-reduced-motion:reduce){*,*::before,*::after{
animation-duration:.01ms!important;animation-iteration-count:1!important;
transition-duration:.01ms!important;scroll-behavior:auto!important}}
/* tablet: let table-heavy pages use full width + slightly denser tables */
@media(max-width:1024px){
  main.wide{max-width:none}
  .t{font-size:13px}
  .srn{flex-basis:140px}.sgn{flex-basis:200px}
}
@media(max-width:680px){
  main{padding:12px 12px 48px}
  section{padding:12px 12px}
  nav{overflow-x:auto;white-space:nowrap}
  .hcs{min-width:0}
  .otiles{gap:9px}.otile{flex:1 1 120px;padding:11px 12px}.otile .ov{font-size:24px}
}
/* small phone: shrink type/padding so dense tables stay legible without huge scroll */
@media(max-width:480px){
  h1{font-size:20px}.hero h1{font-size:22px}
  .otile .ov{font-size:21px}
  .t{font-size:12px}.t th,.t td{padding:3px 4px}
  .psf{flex-direction:column;align-items:stretch}
  .pick{padding:14px 15px}
  .metrics{gap:7px 14px}
}
/* ultra-wide: use more of a 4K canvas instead of stranding whitespace */
@media(min-width:1920px){
  main{max-width:1800px}
}
