/* ---------- design tokens ---------- */
:root{
  --font: "Nunito Sans", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  --mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --fs-xs:11px; --fs-sm:12px; --fs-t:13px; --fs-b:14px; --fs-md:16px; --fs-lg:20px; --fs-xl:24px; --fs-2xl:32px;
  --r-s:6px; --r-m:8px; --r-l:12px; --r-xl:16px;
  --rail-w:232px; --rail-c:56px; --ai-w:380px; --peek-w:560px; --top-h:52px;
  --dur-i:80ms; --dur-f:120ms; --dur-b:180ms; --dur-p:240ms; --dur-m:220ms; --dur-x:140ms;
  --ease-out:cubic-bezier(.23,1,.32,1); --ease-std:cubic-bezier(.2,0,0,1); --ease-emph:cubic-bezier(.05,.7,.1,1); --ease-exit:cubic-bezier(.4,0,1,1);
  /* light */
  --bg:#FAFAF9; --surface:#FFFFFF; --surface-2:#F5F5F4; --surface-3:#EDECEA; --rail:#F4F4F2;
  --border:#E7E5E4; --border-2:#D6D3D1; --hair:rgba(28,25,23,.08);
  --text:#1C1917; --text-2:#57534E; --text-3:#78716C; --on-accent:#fff;
  --accent:#1D2951; --accent-h:#152040; --accent-soft:#E8EBF3; --accent-ring:rgba(29,41,81,.22); --font-h: "Poppins", "Nunito Sans", sans-serif;
  --ok:#15803D; --ok-soft:#EAF6EE; --warn:#B45309; --warn-soft:#FDF3E6; --bad:#C62828; --bad-soft:#FDECEC; --info:#0369A1; --info-soft:#E8F3FA;
  --ai:#7C3AED; --ai-soft:#F3EEFE; --ai-ring:rgba(124,58,237,.25);
  --sh-pop:0 1px 2px rgba(0,0,0,.06),0 4px 12px rgba(0,0,0,.08);
  --sh-panel:0 8px 32px rgba(0,0,0,.14),0 1px 2px rgba(0,0,0,.06);
  --sh-card:0 1px 2px rgba(28,25,23,.04);
  --scrim:rgba(28,25,23,.32);
  --chart-1:#1D2951; --chart-2:#A8A29E; --chart-3:#7C3AED;
  color-scheme:light;
}
:root[data-theme="dark"]{
  --bg:#111110; --surface:#181817; --surface-2:#1F1F1D; --surface-3:#272725; --rail:#141413;
  --border:#2B2B29; --border-2:#3B3B38; --hair:rgba(255,255,255,.08);
  --text:#EDEDEC; --text-2:#A8A29E; --text-3:#8C8681; --on-accent:#fff;
  --accent:#9DB0F0; --accent-h:#B3C2F5; --accent-soft:#1F2742; --accent-ring:rgba(157,176,240,.35);
  --ok:#4ADE80; --ok-soft:#14261B; --warn:#FBBF24; --warn-soft:#2B2210; --bad:#F87171; --bad-soft:#2E1616; --info:#38BDF8; --info-soft:#0F2330;
  --ai:#A78BFA; --ai-soft:#221A35; --ai-ring:rgba(167,139,250,.35);
  --sh-pop:0 0 0 1px var(--border),0 8px 24px rgba(0,0,0,.5);
  --sh-panel:0 0 0 1px var(--border),0 16px 48px rgba(0,0,0,.6);
  --sh-card:none;
  --scrim:rgba(0,0,0,.55);
  --chart-1:#9DB0F0; --chart-2:#8C8681; --chart-3:#A78BFA;
  color-scheme:dark;
}
*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{font-family:var(--font);font-size:var(--fs-b);line-height:20px;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow:hidden}
h1,h2,h3,h4{margin:0;font-weight:600;letter-spacing:-.01em;font-family:var(--font-h)}
h1{font-size:var(--fs-lg);line-height:28px}
h2{font-size:var(--fs-md);line-height:24px}
h3{font-size:var(--fs-b);line-height:20px}
p{margin:0}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
input,select,textarea{font:inherit;color:inherit}
::selection{background:var(--accent-soft)}
.num,.money,.mono{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1,"cv11" 1}
.mono{font-family:var(--mono);font-size:var(--fs-t)}
.muted{color:var(--text-2)} .faint{color:var(--text-3)} .small{font-size:var(--fs-sm);line-height:16px} .xs{font-size:var(--fs-xs);line-height:16px}
.ok{color:var(--ok)} .warn{color:var(--warn)} .bad{color:var(--bad)} .aic{color:var(--ai)} .acc{color:var(--accent)}
.right{text-align:right} .center{text-align:center} .nowrap{white-space:nowrap} .ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row{display:flex;align-items:center;gap:8px} .col{display:flex;flex-direction:column;gap:4px} .grow{flex:1;min-width:0} .wrap{flex-wrap:wrap}
.gap4{gap:4px}.gap12{gap:12px}.gap16{gap:16px}.gap24{gap:24px}
.mt8{margin-top:8px}.mt12{margin-top:12px}.mt16{margin-top:16px}.mt24{margin-top:24px}.mt32{margin-top:32px}.mb8{margin-bottom:8px}.mb12{margin-bottom:12px}.mb16{margin-bottom:16px}
.hide{display:none!important}
.ic{width:16px;height:16px;flex:none;vertical-align:-3px}
.ic.lg{width:20px;height:20px}.ic.xl{width:24px;height:24px}
::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--border-2);border-radius:8px;border:3px solid transparent;background-clip:padding-box}::-webkit-scrollbar-track{background:transparent}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--r-s)}
@keyframes vt-in{from{opacity:0;transform:translateY(8px)}}
@keyframes vt-out{to{opacity:0;transform:translateY(-4px)}}
@keyframes fade{from{opacity:0}}
@keyframes pop{from{opacity:0;transform:scale(.97)}}
@keyframes shimmer{from{background-position:200% 0}to{background-position:-200% 0}}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 var(--accent-ring)}50%{box-shadow:0 0 0 6px transparent}}
@keyframes grow-x{from{transform:scaleX(0)}}
@keyframes grow-y{from{transform:scaleY(0)}}
@keyframes draw{from{stroke-dashoffset:var(--len,1000)}}
@keyframes spin{to{transform:rotate(360deg)}}
::view-transition-old(main){animation:vt-out var(--dur-x) var(--ease-exit) both}
::view-transition-new(main){animation:vt-in var(--dur-b) var(--ease-out) both}
::view-transition-group(root){animation:none}
.main{view-transition-name:main}
.page.enter{animation:vt-in var(--dur-b) var(--ease-out) both}
.reveal>*{animation:vt-in var(--dur-b) var(--ease-out) both;animation-delay:calc(min(var(--i,0),8)*25ms)}
@media (prefers-reduced-motion:reduce){
  *,::before,::after{animation-duration:.01ms!important;transition-duration:.01ms!important}
  ::view-transition-old(*),::view-transition-new(*){animation:fade 120ms linear both!important}
}
