:root{
  --paper:#F4F5F8; --surface:#FFFFFF; --surface-2:#EAECF2; --sunken:#E2E5EE;
  --ink:#14161F; --ink-2:#2E3342; --muted:#5F6779; --faint:#8D94A6;
  --rule:#DCE0EA; --rule-2:#C6CCDB;
  --brass:#8A6A1F; --brass-2:#6E5316; --brass-wash:#F3ECDB;
  --up:#17683F; --up-wash:#E4F0E9; --down:#A32833; --down-wash:#F8E7E8;
  --flag:#8A5A16; --flag-wash:#F7ECDD;
  --track:#DFE3ED;
  --f-ui:"Inter var",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  --f-mono:ui-monospace,"SF Mono",SFMono-Regular,Menlo,Consolas,monospace;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --paper:#0E1017; --surface:#161923; --surface-2:#1D212D; --sunken:#11141C;
    --ink:#E9EBF2; --ink-2:#C2C7D6; --muted:#8E96AA; --faint:#69718A;
    --rule:#262B39; --rule-2:#343B4D;
    --brass:#D9A93F; --brass-2:#EFC768; --brass-wash:#2A2314;
    --up:#4CB07A; --up-wash:#12271C; --down:#E0707B; --down-wash:#2B1519;
    --flag:#D08B44; --flag-wash:#2B1E10; --track:#242938;
  }
}
:root[data-theme="dark"]{
  --paper:#0E1017; --surface:#161923; --surface-2:#1D212D; --sunken:#11141C;
  --ink:#E9EBF2; --ink-2:#C2C7D6; --muted:#8E96AA; --faint:#69718A;
  --rule:#262B39; --rule-2:#343B4D;
  --brass:#D9A93F; --brass-2:#EFC768; --brass-wash:#2A2314;
  --up:#4CB07A; --up-wash:#12271C; --down:#E0707B; --down-wash:#2B1519;
  --flag:#D08B44; --flag-wash:#2B1E10; --track:#242938;
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;background:var(--paper);color:var(--ink-2);font-family:var(--f-ui);
  font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}
.mono{font-family:var(--f-mono);font-variant-numeric:tabular-nums}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--brass);outline-offset:2px;border-radius:3px}
.hide{display:none !important}

/* shell */
.shell{display:grid;grid-template-rows:auto auto 1fr;grid-template-columns:minmax(0,1fr);height:100%}
/* Without an explicit column the grid sizes to its widest child, so the header's tab
   row stretched every page to about 1,470px and phones scrolled sideways. */
header.top{display:flex;align-items:center;gap:16px;padding:0 18px;height:56px;
  background:var(--surface);border-bottom:1px solid var(--rule)}
.brand{font-weight:750;letter-spacing:-.02em;color:var(--ink);font-size:15px;
  display:flex;align-items:center;gap:9px}
.dot{width:8px;height:8px;border-radius:50%;background:var(--brass)}
nav.tabs{display:flex;flex-wrap:wrap;align-items:center;gap:2px 2px;padding:6px 14px;
  min-width:0;background:var(--surface);border-bottom:1px solid var(--rule)}
/* A flex child will not shrink below its content without min-width:0, so a long tab
   row widened the whole page instead of scrolling inside its own strip. */
nav.tabs button{background:none;border:0;padding:8px 13px;border-radius:5px;
  color:var(--muted);cursor:pointer;white-space:nowrap;font-weight:500}
nav.tabs button:hover{background:var(--surface-2);color:var(--ink)}
nav.tabs button[aria-selected="true"]{background:var(--brass-wash);color:var(--brass-2);font-weight:650}
.spacer{flex:1}
.who{font-size:12.5px;color:var(--muted);text-align:right;line-height:1.3}
.who b{display:block;color:var(--ink);font-size:13px}
main{overflow:auto;padding:20px 18px 60px}
.page{max-width:1240px;margin:0 auto}

/* buttons */
.btn{background:var(--surface);border:1px solid var(--rule-2);border-radius:6px;
  padding:8px 14px;cursor:pointer;font-weight:550;color:var(--ink);white-space:nowrap}
.btn:hover:not(:disabled){background:var(--surface-2)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn.primary{background:var(--brass);border-color:var(--brass);color:#fff}
:root[data-theme="dark"] .btn.primary,
:root:not([data-theme="light"]) .btn.primary{color:#14161F}
@media (prefers-color-scheme:light){:root:not([data-theme="dark"]) .btn.primary{color:#fff}}
.btn.primary:hover:not(:disabled){filter:brightness(1.08)}
.btn.ghost{background:none;border-color:transparent;color:var(--muted)}
.btn.sm{padding:5px 10px;font-size:12.5px}

/* cards + layout */
h1{font-size:19px;margin:0 0 3px;color:var(--ink);letter-spacing:-.02em}
h2{font-size:15px;margin:0 0 10px;color:var(--ink);letter-spacing:-.01em}
.sub{margin:0 0 18px;color:var(--muted);font-size:13.5px;max-width:74ch}
.grid{display:grid;gap:12px}
.g4{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}
.g2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.card{background:var(--surface);border:1px solid var(--rule);border-radius:8px;padding:15px 16px}
.card .k{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint);
  display:block;margin-bottom:7px;font-weight:600}
.card .v{font-size:22px;font-weight:700;color:var(--ink);letter-spacing:-.025em;
  font-family:var(--f-mono);font-variant-numeric:tabular-nums}
.card .n{font-size:12.5px;color:var(--muted);margin-top:4px}
.bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:16px}
.field{display:flex;flex-direction:column;gap:4px}
.field label{font-size:11px;letter-spacing:.07em;text-transform:uppercase;color:var(--faint);font-weight:600}
input,select,textarea{background:var(--surface);border:1px solid var(--rule-2);
  border-radius:6px;padding:7px 10px}
input[type=number]{width:120px;font-family:var(--f-mono)}
textarea{width:100%;font-family:var(--f-mono);font-size:13px;line-height:1.6;resize:vertical}

/* tables */
.tablewrap{overflow:auto;border:1px solid var(--rule);border-radius:8px;background:var(--surface);
  max-height:64vh}
table{border-collapse:collapse;width:100%;font-size:13px}
th{position:sticky;top:0;background:var(--surface-2);text-align:left;padding:9px 12px;
  font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);
  font-weight:600;white-space:nowrap;border-bottom:1px solid var(--rule-2);cursor:pointer;
  user-select:none}
th:hover{color:var(--ink)}
th .arrow{opacity:.5;margin-left:4px}
td{padding:8px 12px;border-bottom:1px solid var(--rule);white-space:nowrap}
tbody tr:hover{background:var(--surface-2)}
td.num{font-family:var(--f-mono);font-variant-numeric:tabular-nums;text-align:right;color:var(--ink)}
td.sym{font-family:var(--f-mono);font-weight:650;color:var(--ink);cursor:pointer}
td.sym:hover{color:var(--brass)}
.pos{color:var(--up)} .neg{color:var(--down)}

/* progress */
.progress{height:6px;background:var(--track);border-radius:3px;overflow:hidden;flex:1;min-width:120px}
.progress i{display:block;height:100%;background:var(--brass);transition:width .3s ease}
@media (prefers-reduced-motion:reduce){.progress i{transition:none}}
.steps{margin-top:12px;display:flex;flex-direction:column;gap:5px;font-size:12.5px}
.step{display:flex;gap:9px;align-items:baseline}
.step .s{font-family:var(--f-mono);font-size:10px;padding:1px 6px;border-radius:3px;font-weight:700}
.s.ok{background:var(--up-wash);color:var(--up)} .s.failed{background:var(--down-wash);color:var(--down)}
.s.skipped{background:var(--surface-2);color:var(--muted)}
.step b{color:var(--ink);font-weight:600;min-width:120px}
.step span{color:var(--muted)}

/* misc */
.pill{font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  padding:2px 7px;border-radius:4px;white-space:nowrap}
.pill.both{background:var(--brass-wash);color:var(--brass-2)}
.pill.warn{background:var(--flag-wash);color:var(--flag)}
.msg{padding:11px 14px;border-radius:7px;margin-bottom:14px;font-size:13.5px}
.msg.err{background:var(--down-wash);color:var(--down);border:1px solid var(--down)}
.msg.ok{background:var(--up-wash);color:var(--up);border:1px solid var(--up)}
.msg.info{background:var(--surface-2);color:var(--muted);border:1px solid var(--rule)}
.empty{padding:36px 16px;text-align:center;color:var(--muted)}
.hint{font-size:12.5px;color:var(--faint);margin-top:7px}
.ex{display:block;width:100%;text-align:left;background:var(--surface);border:1px solid var(--rule);
  border-radius:6px;padding:9px 12px;margin-bottom:7px;cursor:pointer}
.ex:hover{border-color:var(--brass)}
.ex b{display:block;color:var(--ink);font-size:13px;margin-bottom:3px}
.ex code{font-family:var(--f-mono);font-size:11.5px;color:var(--muted);
  display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* login */
.login{display:grid;place-items:center;height:100%;padding:20px}
.loginbox{background:var(--surface);border:1px solid var(--rule);border-radius:12px;
  padding:30px 30px 26px;width:100%;max-width:370px}
.loginbox h1{font-size:21px;margin-bottom:5px}
.loginbox .field{margin-bottom:13px}
.loginbox input{width:100%}
.sparkbox{height:52px;width:100%}


/* ---------- analysis surfaces: controls, notes, warnings ---------- */
.controls{display:flex;flex-wrap:wrap;gap:12px 18px;align-items:flex-end;
  margin:14px 0 18px;padding:12px 14px;background:var(--surface-2);
  border:1px solid var(--rule);border-radius:8px}
.ctl{display:flex;flex-direction:column;gap:5px;font-size:12px;
  color:var(--muted);letter-spacing:.02em}
.ctl select{font:inherit;font-size:13.5px;color:var(--text);
  background:var(--surface);border:1px solid var(--rule);border-radius:6px;
  padding:6px 9px;min-width:150px}
.ctl.inline{flex-direction:row;align-items:center;gap:7px;font-size:13.5px;
  color:var(--text);padding-bottom:7px}
.ctl.inline input{accent-color:var(--accent)}
.note{color:var(--muted);font-size:13px;line-height:1.55;margin:0 0 14px;
  max-width:74ch}
.msg.warn{background:var(--surface-2);color:var(--text);
  border:1px solid var(--down);border-left-width:3px}

/* ---------- charts ---------- */
.chartbox{background:var(--surface);border:1px solid var(--rule);border-radius:8px;
  padding:10px 12px;margin-bottom:10px;overflow:hidden}
svg.chart{display:block;width:100%;height:auto}
/* chart hover */
.chartwrap{position:relative}
.chartwrap svg.chart{touch-action:pan-y;cursor:crosshair}
.charttip{position:absolute;top:8px;pointer-events:none;background:var(--surface);
  border:1px solid var(--rule);border-radius:6px;padding:7px 10px;font-size:12px;
  line-height:1.5;box-shadow:0 4px 14px rgba(0,0,0,.12);white-space:nowrap;z-index:2}
.charttip .tipdate{font-weight:650;color:var(--ink);margin-bottom:2px}
.charttip .tiprow{display:flex;align-items:center;gap:6px}
.charttip .tiprow b{margin-left:auto;padding-left:12px;font-family:var(--f-mono);color:var(--ink)}
.charttip .swatch{width:8px;height:8px;border-radius:2px;display:inline-block}
svg.chart text.axis{font:10.5px var(--f-mono);fill:var(--faint)}
.legend{display:flex;flex-wrap:wrap;gap:8px 20px;margin:0 2px 16px;font-size:13px}
.legitem{display:flex;align-items:center;gap:7px}
.swatch{width:11px;height:11px;border-radius:3px;flex:none}
.lname{color:var(--text)}
.lval{font-family:var(--f-mono);font-weight:600;color:var(--ink);
  font-variant-numeric:tabular-nums}
.lnote{color:var(--faint);font-size:12px}
.ctl select.multi{min-height:86px;padding:4px 6px}
.ctl textarea,#view>textarea{width:100%;max-width:760px}
h3{font-size:13.5px;margin:18px 0 9px;color:var(--ink);letter-spacing:-.01em}

/* ---------- static snapshot mode ---------- */
.staticbanner{margin:0 0 4px;border-radius:0;border-left:0;border-right:0;
  border-top:0;font-size:13px;line-height:1.55}
body.static-mode .hide{display:none !important}

.tbltools{display:flex;justify-content:space-between;align-items:center;margin:0 0 6px;gap:8px}
nav.tabs select.more{font:inherit;font-size:13.5px;background:none;border:0;border-radius:5px;
  padding:8px 10px;color:var(--muted);cursor:pointer;flex:0 0 auto}
nav.tabs select.more:hover{background:var(--surface-2);color:var(--ink)}
nav.tabs select.more.on{background:var(--brass-wash);color:var(--brass-2);font-weight:650}
nav.tabs button{flex:0 0 auto}

/* Navigation: the brief's tabs lead; the other tools follow, smaller, after a rule. */
nav.tabs button.lead{color:var(--ink);font-weight:650}
nav.tabs .tabsep{width:1px;height:20px;background:var(--rule);margin:0 8px}
nav.tabs button.minor{font-size:12.5px;padding:6px 9px}

/* Top 10 */
.picks{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(340px,100%),1fr));gap:12px}
.pickcard{background:var(--surface);border:1px solid var(--rule);border-radius:8px;padding:12px 14px}
.pickhead{display:flex;gap:10px;align-items:flex-start}
.pickhead .rank{flex:0 0 26px;height:26px;border-radius:50%;background:var(--brass-wash);
  color:var(--brass-2);font-weight:700;display:flex;align-items:center;justify-content:center}
.pickname{flex:1;min-width:0}
.pickname a{color:var(--ink);text-decoration:none}
.pickname a:hover{text-decoration:underline}
.pickscore{text-align:right;white-space:nowrap}
.pickscore b{font-size:18px;color:var(--ink)}
.scorebar{display:block;width:80px;height:5px;border-radius:3px;background:var(--surface-2);
  margin-top:4px;overflow:hidden}
.scorebar i{display:block;height:100%;background:var(--brass)}
ul.reasons{margin:8px 0 0;padding-left:18px;font-size:13px;line-height:1.5}

.card .v .vlist{font-family:var(--f-ui);font-size:15px;line-height:1.45;font-weight:600}
td.wrap{white-space:normal;min-width:300px;max-width:520px;font-size:12.5px;line-height:1.45}
.trendcheck{margin-top:9px;padding-top:8px;border-top:1px solid var(--rule);font-size:12.5px}
.trendcheck .tchead{color:var(--muted);margin-bottom:3px}
.trendcheck .tcrow{color:var(--faint);line-height:1.55}
.trendcheck .tcrow.pass{color:var(--ink-2)}
.trendcheck .tcmark{display:inline-block;width:16px;font-weight:700}
.trendcheck .tcrow.pass .tcmark{color:var(--up)}
.seg{display:inline-flex;border:1px solid var(--rule);border-radius:7px;overflow:hidden}
.seg button{background:none;border:0;padding:6px 14px;cursor:pointer;color:var(--muted);font-weight:550}
.seg button+button{border-left:1px solid var(--rule)}
.seg button[aria-selected="true"]{background:var(--brass-wash);color:var(--brass-2)}
.alsoin{margin-top:7px;font-size:12.5px;color:var(--muted);display:flex;gap:5px;align-items:center;flex-wrap:wrap}
details.gainers{background:var(--surface);border:1px solid var(--rule);border-radius:8px;padding:10px 14px}
details.gainers summary{cursor:pointer;font-weight:650;color:var(--ink)}
ol.plain{padding-left:20px;line-height:1.7}
.msg.stale{border-left-color:var(--down)}

/* Phones. Last in the file so it overrides the base rules above. */
@media (max-width:700px){
  header.top{gap:8px;padding:0 10px}
  .who,.brand{display:none}
  .g2{grid-template-columns:minmax(0,1fr)}
  .g4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .card .v{font-size:19px}
  /* One scrolling strip on a phone rather than four rows of wrapped tabs. */
  nav.tabs{flex-wrap:nowrap;overflow-x:auto;padding:6px 10px}
  nav.tabs button{flex:0 0 auto}
}
