/* ═══════════════════════════════════════════════════════════════════════
   PitCrew Mechanics — shared design tokens
   ═══════════════════════════════════════════════════════════════════════

   Single source of truth for the brand tokens (CLAUDE.md: dark/gold,
   Bebas Neue / Playfair Display / DM Sans / DM Mono). Every page links
   this BEFORE its own <style> block, so page-specific rules still win —
   this file provides variables and the base reset, never components.

   Before this existed each page carried its own :root block and they had
   drifted: eight distinct token blocks across fourteen pages, with
   --muted rendering as #9a958c on the claim page and #888 everywhere
   else, and the admin/login pages missing the Arial Narrow / Georgia /
   Courier New fallbacks that keep the type sane when a webfont fails.

   Component primitives (.btn, .topbar, .wrap, .card …) are deliberately
   NOT here yet. They have genuinely diverged — .btn alone has nine
   distinct definitions — so collapsing them is a separate, visual change
   that needs to be made page by page.

   Motion tokens ARE here, because they are variables, not components.
   Before them every curve and duration was hand-typed at its use site:
   18 declarations, four durations, three spellings of the dominant
   0.15s, and provable drift — signup.html transitioned a transform its
   own hover rule never applied. The curve is the strong ease-out from
   the audit playbook; the built-in `ease` is too weak for deliberate
   motion and is kept only for colour changes.

   The three pages that do not link this file (privacy, terms) and the
   two generated universes (lib/seo-pages.js, scripts/build-blog.js)
   carry their own copies of these same four values. That duplication is
   inherent to this repo's four-stylesheet split, not an oversight.
   ═══════════════════════════════════════════════════════════════════════ */

:root {
  /* Ground + surfaces */
  --bg: #0a0a0a;
  --bg2: #111;
  --bg3: #1a1a1a;

  /* Type */
  --text: #F0EDE6;
  --muted: #888;
  --muted2: #555;

  /* Lines */
  --border: rgba(201,168,76,0.2);
  --border2: rgba(255,255,255,0.06);

  /* Accent + semantic */
  --gold: #C9A84C;
  --gold-light: #E8C96A;
  --green: #4CAF7A;
  --red: #E05555;

  /* Typefaces — always keep the fallback stack; Google Fonts can fail. */
  --font-display: 'Bebas Neue','Arial Narrow',sans-serif;
  --font-serif: 'Playfair Display',Georgia,serif;
  --font-body: 'DM Sans',system-ui,-apple-system,Arial,sans-serif;
  --font-mono: 'DM Mono','Courier New',monospace;

  /* Motion. See plans/000-animation-audit-2026-09-11.md. */
  --ease-out: cubic-bezier(0.23, 1, 0.32, 1);
  --duration-fast: 150ms;
  --duration-press: 160ms;
  --duration-reveal: 250ms;

  /* Short aliases used by claim.html. Kept so the two spellings can
     never drift apart again. */
  --fd: var(--font-display);
  --fb: var(--font-body);
  --fm: var(--font-mono);
}

/* Base reset — identical on every page that had it. */
* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }

/* "Reduce" asks for less movement, not less feedback — so this keeps colour and
   opacity transitioning, a little gentler, and drops `transform` from every
   transition list instead. A press then still acknowledges the tap, instantly,
   rather than animating; that also means no `transform: none` reset is needed
   anywhere, which is what would otherwise swallow :active feedback during a
   press (a press matches :hover too).

   It is deliberately NOT a blanket `transition: none` / `animation: none`: that
   also freezes load-bearing motion such as an indeterminate spinner, and this
   file is linked by fourteen pages. Animations are left alone for that reason.

   Every page that carries its own inline copy of this rule has the same change
   — an inline copy comes after this file's <link> and would otherwise win. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    transition-property: opacity, color, background-color, border-color, box-shadow, fill, stroke !important;
    transition-duration: 200ms !important;
    transition-delay: 0s !important;
    transition-timing-function: ease !important;
  }
}
