*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
html { font-size: 16px; -webkit-font-smoothing: antialiased; }
body { min-height: 100vh; font-family: var(--font-main); }
a { color: inherit; text-decoration: none; }
img, video { display: block; max-width: 100%; }
button { cursor: pointer; border: none; background: none; font: inherit; }
ul, ol { list-style: none; }

/* `hidden` must win over any layout rule (.poster-wall sets display:grid, which
   otherwise outranks the user-agent [hidden] rule and leaves the Wall view
   visible behind the List view). */
[hidden] { display: none !important; }

/* ── Mobile/touch foundations ──
   Applied globally so every page gets the same touch behaviour: no grey
   iOS tap flash, no Safari font inflation in landscape, and no accidental
   horizontal scroll from a single wide child. */
html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}

body {
  -webkit-tap-highlight-color: transparent;
  overflow-x: hidden;
}

/* Taps shouldn't wait on the 300ms double-tap-zoom check. */
a, button, [role="button"], input, select, textarea, label {
  touch-action: manipulation;
}

/* iOS zooms the viewport when a focused input's text is under 16px. Scoped to
   touch devices so the desktop type scale is untouched. */
@media (pointer: coarse) {
  input, textarea, select { font-size: max(16px, 1em); }
}
