*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font-family:var(--font);
  background:var(--c-bg);
  color:var(--c-text);
  font-size:14px;
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}
a{color:inherit;text-decoration:none}
button{font:inherit;cursor:pointer;border:0;background:none;color:inherit}
input,select,textarea{font:inherit;color:inherit}
img,svg{max-width:100%;display:block}
ul{list-style:none;margin:0;padding:0}

/* layout helpers */
.row{display:flex;align-items:center}
.col{display:flex;flex-direction:column}
.between{justify-content:space-between}
.center{justify-content:center;align-items:center}
.gap-1{gap:4px}
.gap-2{gap:8px}
.gap-3{gap:12px}
.gap-4{gap:16px}
.grow{flex:1}
.mono{font-feature-settings:"tnum" 1;font-variant-numeric:tabular-nums}
.faint{color:var(--c-text-3)}
.muted{color:var(--c-text-2)}
.hidden{display:none!important}

/* Visually-hidden file input. Old Android WebViews / stock browsers refuse to
   open the file chooser for an <input type=file> set to display:none (the
   `hidden` attribute), even when triggered via its <label>. Keep it rendered
   and interactive but off-screen so the label tap reliably opens the picker. */
.vh-file{
  position:absolute!important;width:1px;height:1px;
  padding:0;margin:-1px;border:0;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);opacity:0;
}

/* scrollbar (subtle) */
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:var(--c-surface-2);border-radius:8px}
