/* base.css — reset, typography, focus, utilities */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;font-size:calc(100% * var(--font-scale));scroll-behavior:smooth;background:var(--bg)}
body{margin:0;font-family:var(--font);font-size:var(--fs-md);line-height:var(--lh);color:var(--text);background:var(--bg);
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;min-height:100dvh;overflow-x:hidden;
  background-image:radial-gradient(900px 500px at 85% -10%,rgba(79,70,229,.14),transparent 60%),radial-gradient(700px 400px at -10% 110%,rgba(245,158,11,.07),transparent 60%);
  background-attachment:fixed}
h1,h2,h3,h4{margin:0;line-height:var(--lh-tight);font-weight:700;letter-spacing:-.005em}
h1{font-size:var(--fs-2xl)} h2{font-size:var(--fs-xl)} h3{font-size:var(--fs-lg)} h4{font-size:var(--fs-md)}
p{margin:0 0 var(--s-3)} a{color:var(--brand-text);text-decoration:none} a:hover{text-decoration:underline}
img,svg{max-width:100%;display:block} button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer} [hidden]{display:none!important}
:focus{outline:none}
:focus-visible{outline:3px solid var(--focus);outline-offset:2px;border-radius:var(--r-sm)}
::selection{background:var(--brand-300);color:var(--ink)}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.muted{color:var(--text-2)} .faint{color:var(--text-3)} .small{font-size:var(--fs-sm)} .xs{font-size:var(--fs-xs)}
.bold{font-weight:700} .center{text-align:center} .nowrap{white-space:nowrap} .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row{display:flex;align-items:center;gap:var(--s-3)} .row.wrap{flex-wrap:wrap} .col{display:flex;flex-direction:column;gap:var(--s-3)}
.grow{flex:1;min-width:0} .between{justify-content:space-between} .end{justify-content:flex-end}
.gap-1{gap:var(--s-1)} .gap-2{gap:var(--s-2)} .gap-4{gap:var(--s-4)} .gap-6{gap:var(--s-6)}
.mt-2{margin-top:var(--s-2)} .mt-4{margin-top:var(--s-4)} .mt-6{margin-top:var(--s-6)} .mb-2{margin-bottom:var(--s-2)} .mb-4{margin-bottom:var(--s-4)}
.grid{display:grid;gap:var(--s-4)} .grid.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))} .grid.cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}
.grid.auto{grid-template-columns:repeat(auto-fill,minmax(min(100%,220px),1fr))}
.num{font-variant-numeric:tabular-nums}
.ok{color:var(--ok)} .danger{color:var(--danger)} .warn{color:var(--warn)}
@media (max-width:420px){.grid.cols-3{grid-template-columns:repeat(2,minmax(0,1fr))}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes popIn{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}
@keyframes sheetUp{from{transform:translateY(100%)}to{transform:none}}
@keyframes shimmer{from{background-position:200% 0}to{background-position:-200% 0}}
@media print{body{background:#fff}.no-print,.nav-rail,.tabbar,.topbar{display:none!important}}
