@import url("/assets/fonts/fonts.css");

/* ============================================================
   MNRL — shared base
   Monochrome interface. Client work supplies all color.
   ============================================================ */

:root {
  /* Monochrome system (per MNRL reference style guide) */
  --black: #000000;
  --white: #ffffff;
  --paper: #ffffff;
  --ink: #000000;
  --gray-050: #f7f7f6;
  --gray-100: #f0efed;
  --gray-200: #e4e3e0;
  --gray-300: #d1d1d1;
  --gray-500: #9a9a97;
  --gray-600: #767676;
  --gray-700: #565654;
  --gray-850: #1a1a19;
  --gray-900: #101010;

  /* Type */
  --font-body: "Geist", ui-sans-serif, system-ui, -apple-system, sans-serif;
  --font-display: "Archivo", "Geist", sans-serif;
  --font-impact: "Anton", "Archivo Narrow", sans-serif;
  --font-mono: "Geist Mono", ui-monospace, "SFMono-Regular", monospace;

  /* 8pt spacing */
  --sp-1: 8px;  --sp-2: 16px; --sp-3: 24px; --sp-4: 32px;
  --sp-5: 48px; --sp-6: 64px; --sp-7: 96px; --sp-8: 128px;
  --sp-9: 176px; --sp-10: 240px;

  --gutter: clamp(20px, 4.5vw, 72px);
  --maxw: 1600px;

  --ease: cubic-bezier(0.22, 1, 0.36, 1);      /* expo-ish ease-out */
  --ease-inout: cubic-bezier(0.65, 0, 0.35, 1);
}

*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }

html { -webkit-text-size-adjust: 100%; }
body {
  font-family: var(--font-body);
  font-weight: 400;
  color: var(--ink);
  background: var(--paper);
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  font-feature-settings: "kern" 1, "liga" 1;
  overflow-x: clip;
}

img, picture, video, canvas, svg { display: block; max-width: 100%; }
img, video { height: auto; }
input, button, textarea, select { font: inherit; color: inherit; }
button { background: none; border: 0; cursor: pointer; }
a { color: inherit; text-decoration: none; }
ul, ol { list-style: none; padding: 0; }
h1, h2, h3, h4 { font-weight: 400; line-height: 0.95; letter-spacing: -0.02em; }

::selection { background: var(--ink); color: var(--paper); }

.u-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }

.mono { font-family: var(--font-mono); }

/* Focus */
:focus-visible { outline: 2px solid currentColor; outline-offset: 3px; }

/* Container / 12-col grid */
.wrap { width: 100%; max-width: var(--maxw); margin-inline: auto; padding-inline: var(--gutter); }
.grid12 { display: grid; grid-template-columns: repeat(12, minmax(0,1fr)); column-gap: clamp(14px, 1.6vw, 28px); }

/* Reveal primitive (JS toggles .is-in). Content visible by default if no JS. */
[data-reveal] { opacity: 1; }
.js [data-reveal] { opacity: 0; transform: translateY(24px); transition: opacity 0.8s var(--ease), transform 0.8s var(--ease); }
.js [data-reveal].is-in { opacity: 1; transform: none; }
.js [data-reveal-clip] { clip-path: inset(0 0 100% 0); transition: clip-path 1s var(--ease); }
.js [data-reveal-clip].is-in { clip-path: inset(0 0 0 0); }

@media (prefers-reduced-motion: reduce) {
  * { animation-duration: 0.001ms !important; animation-iteration-count: 1 !important;
      transition-duration: 0.001ms !important; scroll-behavior: auto !important; }
  .js [data-reveal] { opacity: 1; transform: none; }
  .js [data-reveal-clip] { clip-path: none; }
}

/* ============================================================
   [hidden] must actually hide.
   The UA implements [hidden] as `display:none` at element specificity, so
   ANY class that sets display — flex, grid, block — silently outranks it.
   The element then stays laid out at whatever opacity it has and keeps
   swallowing pointer events. This has been patched per-component four
   times in this codebase (.nm-frame-play, .ss-panel, .wcase-a,
   .cs2-ix-panel) and reintroduced again by the press pane, which sat
   invisible over the RACERSHIP gate and ate every click on it.
   One global guard, so it cannot happen a sixth time.
   ============================================================ */
[hidden] { display: none !important; }
