/* ─────────────────────────────────────────────────────────────────────────
   reset.css — minimal modern reset. Structural only; NO design values here
   (no colors, no spacing). Everything visual lives downstream in tokens →
   theme → base → components → app → utilities.
   ───────────────────────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }

html { -webkit-text-size-adjust: 100%; }
body {
  -webkit-font-smoothing: antialiased;
  min-height: 100vh;   /* fallback for browsers without dvh */
  min-height: 100dvh;
}

img, svg, video, canvas { display: block; max-width: 100%; }
input, button, textarea, select { font: inherit; color: inherit; }
button { cursor: pointer; background: none; border: none; }
a { color: inherit; text-decoration: none; }
ul, ol { list-style: none; padding: 0; }
table { border-collapse: collapse; width: 100%; }
:where(h1, h2, h3, h4, h5, h6) { font-weight: 600; line-height: 1.2; }
:where(p, h1, h2, h3, h4, h5, h6) { overflow-wrap: break-word; }

/* THE HIDDEN ATTRIBUTE MUST WIN. `hidden` is a UA default of display:none with
   effectively no specificity, so ANY class that sets display beats it — and
   the app is full of them (.btn is inline-flex, .panel-head is flex). The
   result is not a styling nit: a button rendered while JS believes it hidden
   is a control that does nothing when pressed, because the code that would
   arm it never ran. That is exactly how "add to home screen" and "turn on
   notifications" both became dead buttons. One rule here instead of a
   per-class patch each time somebody meets it again. */
[hidden] { display: none !important; }
