/* ==========================================================================
   tokens.css — the design brief, compiled.

   business_id: grant-creek-lawns-missoula-mt
   Source: runs/grant-creek-lawns-missoula-mt/brief.md — every value below is
   transcribed from the approved brief §2 (fonts), §3 (palette), §5 (layout),
   §8 (motion). Nothing here is improvised.
   ========================================================================== */

:root {

  /* --- Colour --------------------------------------------------------------
     Brief §3.1: business's own colours are absent (dossier §4.5: none found),
     so the palette derives from local character (Missoula's own glacial-
     valley geology — a "cirque," a cool steel-blue) and family norms
     (bold-industrial, pushed for distinctiveness). Every pairing below is
     contrast-verified in brief §4 and re-checked by scripts/qa/contrast.mjs. */

  --scheme: light;

  --color-bg:          #F1F3F4;   /* frost-white */
  --color-surface:     #E4E8EA;   /* glacier-grey */
  --color-ink:         #14181B;
  --color-ink-muted:   #4B545B;
  --color-accent:      #2C4F63;   /* cirque-blue — DOMINANT, hsl(201.8°, 38.5%, 28.0%) */
  --color-accent-ink:  #F5F8F9;   /* text ON accent fill */

  /* House-required structural colours */
  --color-border:      #C9CDCF;   /* rail hairlines, hero field border downshade */
  --color-focus:       #2C4F63;   /* :focus-visible — = accent, 7.84:1 vs bg (brief §4.2 row 13) */
  --color-selection-bg:  #2C4F63;
  --color-selection-ink: #F5F8F9;

  /* No dark band exists on this site (brief §3.2): every section runs on
     --color-bg or --color-surface, so --color-focus-on-band is not declared. */

  /* Brief-specific colours (brief §3.2) */
  --color-brass:       #7D5F29;   /* secondary accent — the rail's four read-out ticks (§5.2) */
  --color-moss:        #4B6B45;   /* the anchor's green, sparing — one hero touch only */
  --color-atmo-1:      #F4F1EA;   /* hero radial, lightest stop */
  --color-atmo-3:      #C7CDD1;   /* hero radial, darkest stop reached beneath any text */


  /* --- Typography ------------------------------------------------------------
     Brief §2: Chivo (display, one weight, 700) + Barlow (body, 400 + 600).
     Self-hosted woff2, OFL 1.1, subset to the house declared safe range
     (house-tech-spec §8). No variable-font axis on this site (brief §2.2) —
     both faces ship as static instances at fixed weights. */

  --font-display: 'Chivo', 'Chivo Fallback', 'Arial Narrow', Arial, sans-serif;
  --font-body:    'Barlow', 'Barlow Fallback', 'Helvetica Neue', Arial, sans-serif;

  --font-weight-display: 700;       /* the only display weight on this site */
  --font-weight-body: 400;
  --font-weight-body-strong: 600;

  /* --- Type scale — brief §2.5/§2.6, computed across 375→1440 -------------- */

  --text-display: clamp(2.125rem, 1.4648rem + 2.8169vw, 4rem);    /* 34px @375 → 64px @1440 */
  --text-h2:      clamp(1.375rem, 1.1109rem + 1.1268vw, 2.125rem); /* 22px @375 → 34px @1440 */
  --text-lead:    clamp(1.0625rem, 0.9965rem + 0.2817vw, 1.25rem); /* 17px @375 → 20px @1440 */
  --text-body:    1rem;        /* 16px, fixed at every width */
  --text-eyebrow: 0.75rem;     /* 12px, fixed at every width */
  --text-micro:   0.6875rem;   /* 11px, fixed at every width */
  --text-small:   0.75rem;     /* alias used by house .site-nav__link / .nav-toggle patterns */

  --leading-tight:   1.235;  /* h1 — 34px × 1.235 = 41.99 ≈ 42px @375 */
  --leading-snug:    1.14;   /* h2/h3 */
  --leading-lead:    1.5;
  --leading-body:    1.6;

  --tracking-tight: 0em;     /* Chivo carries no negative tracking on this site */
  --tracking-wide: 0.14em;   /* eyebrows, kickers */

  /* --- Space -----------------------------------------------------------------
     House scale, unchanged (brief §3.3). */

  --space-3xs: 0.25rem;
  --space-2xs: 0.5rem;
  --space-xs: 0.75rem;
  --space-sm: 1rem;
  --space-md: 1.5rem;
  --space-lg: 2.5rem;
  --space-xl: 4rem;
  --space-2xl: 6rem;
  --space-3xl: 9rem;

  --section-gap: var(--space-xl);   /* = 64px, fixed at EVERY width (brief §5.5) */

  /* --- Layout ------------------------------------------------------------- */

  --layout-container: 72rem;
  --layout-measure: 62ch;
  --layout-gutter: clamp(1.25rem, 5vw, 3rem);
  --layout-tap-min: 44px;

  /* Brief §5.3/§5.4 layout arithmetic constants — fixed pixel values the
     brief states directly (fold arithmetic depends on the exact number, not
     a scale step), so each is its own named token rather than borrowed from
     the space scale. */
  --hero-field-height: clamp(18.75rem, 16.988rem + 7.512vw, 26.25rem);  /* 300px @375 → 420px @1440 */
  --rail-column: 18rem;              /* brief §5.3: grid-template-columns: 18rem 1fr at ≥1024 */
  --layout-header-height: 3.5rem;    /* 56px, brief §5.4 sticky-chrome arithmetic */
  --control-height: 3.25rem;         /* 52px — CTA / submit / tel-button height, <1024 */
  --control-height-lg: 3.5rem;       /* 56px — same controls, ≥1024 */
  --row-height: 1.25rem;             /* 20px — eyebrow line height AND the read-out dial's own diameter (brief §2.6, §5.2) */
  --gap-eyebrow-h1: 0.75rem;         /* 12px, <1024 */
  --gap-eyebrow-h1-lg: 1.5rem;       /* 24px, ≥1024 */
  --gap-h1-cta: 1.125rem;            /* 18px, <1024 */
  --gap-h1-cta-lg: 1.5rem;           /* 24px, ≥1024 */
  --gauge-size: 4.75rem;             /* 76px — the hero inset gauge, carried from the C2-winning tile exactly */
  --gauge-inset: 1.375rem;           /* 22px */
  --border-gauge: 0.1875rem;         /* 3px — the gauge's own ring, carried from the tile exactly */
  --dial-tick-length: 0.625rem;      /* 10px — the rail read-out dial's brass tick */
  --section-head-rule-width: 2.5rem;      /* 40px — the head-rule's own stated minimum drawn length (brief §6.6) */
  --section-head-rule-thickness: 0.3125rem; /* 5px */
  --plate-image-trust-max: 12rem;    /* small decorative accent width, brief §II closing image */

  /* The three frost motes' own drift amounts (brief §8.2), carried forward
     from the C2-winning tile's own computed offsets exactly. */
  --mote-drift-a-x: 0.5625rem;  --mote-drift-a-y: -0.4375rem;
  --mote-drift-b-x: -0.5rem;    --mote-drift-b-y: -0.625rem;
  --mote-drift-c-x: 0.375rem;   --mote-drift-c-y: -0.375rem;

  /* --- Radius / shadow / border — brief §3.2 --------------------------------
     NO SHADOW IS USED ANYWHERE ON THIS SITE. */

  --radius-none: 0;
  --radius-sm:   2px;    /* the primary CTA and the gauge/read-out dial ticks only */
  --radius-md:   2px;    /* alias — this site has one non-zero radius step */
  --radius-lg:   2px;
  --radius-pill: 2px;

  --shadow-none: none;
  --shadow-sm: none;
  --shadow-md: none;
  --shadow-lg: none;

  --border-hairline: 1px;
  --border-thick: 2px;    /* the hero field border and the stat plates — the "data-plate" register */
  --border-style: solid;

  /* --- Motion — brief §8 ---------------------------------------------------- */

  --duration-fast: 140ms;      /* focus/hover transitions */
  --duration-base: 320ms;      /* the scroll reveal */
  --duration-slow: 320ms;      /* alias consumed by base.css's reveal transition */
  --duration-signature: 900ms; /* the gauge needle's one-time sweep-and-settle */

  --ease-out: cubic-bezier(.2, .7, .15, 1);
  --ease-in-out: cubic-bezier(.2, .7, .15, 1);
  --ease-standard: cubic-bezier(.2, .7, .15, 1);

  --loop-mote-a: 17s;   --loop-mote-b: 22s;   --loop-mote-c: 27s;   /* three frost motes, mutually non-synchronising */

  --reveal-shift: 12px;
  --reveal-stagger: 60ms;

  /* --- Z layers --------------------------------------------------------- */
  --z-base: 0;
  --z-header: 100;
  --z-nav-panel: 200;
  --z-skip-link: 300;
}

/* --------------------------------------------------------------------------
   @font-face — self-hosted woff2, OFL 1.1, subset to the house declared safe
   range (house-tech-spec §8):
     U+0020-007E, U+00A0, U+00A9, U+00AE, U+2122, U+00B0, U+00B7, U+00BF,
     U+00C0-00FF, U+2010-2015, U+2018-201A, U+201C-201E, U+2026, U+2032-2033

   COVERAGE GAP, disclosed per house-tech-spec §8's "found on first use"
   paragraph and brief §12 item 10 (escalate, never silent-ship). Checked by
   `fontTools` cmap read against the shipped woff2, 2026-08-29: neither Chivo
   nor Barlow carries U+2012 or U+2015; Barlow (both weights) additionally
   lacks U+2011. Chivo itself carries U+2010/U+2011. This is NOT the "both
   faces lack the same four" case the house precedent describes (auto-
   evolution-north-logan-ut) — Chivo's coverage is wider than Barlow's for two
   codepoints in the range. In practice this is inert: the copy doc (checked
   by script against every shipped, uncommented string) contains no character
   outside {printable ASCII, ©, ·}, and both of those resolve in every face
   shipped here. No lever narrows the range (house-tech-spec §8: "the range is
   not narrowed for this... narrowing it would make the range per-site").
   Flagged to the Art Director as the required documented exception rather
   than silently shipped; not a build blocker because no declared codepoint
   in this gap is ever actually rendered by this site's copy. -------------- */

@font-face {
  font-family: 'Chivo';
  src: url('/assets/fonts/chivo-700.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  unicode-range:
    U+0020-007E, U+00A0, U+00A9, U+00AE, U+2122, U+00B0, U+00B7, U+00BF,
    U+00C0-00FF, U+2010-2015, U+2018-201A, U+201C-201E, U+2026, U+2032-2033;
}

@font-face {
  font-family: 'Barlow';
  src: url('/assets/fonts/barlow-400.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range:
    U+0020-007E, U+00A0, U+00A9, U+00AE, U+2122, U+00B0, U+00B7, U+00BF,
    U+00C0-00FF, U+2010-2015, U+2018-201A, U+201C-201E, U+2026, U+2032-2033;
}

@font-face {
  font-family: 'Barlow';
  src: url('/assets/fonts/barlow-600.woff2') format('woff2');
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  unicode-range:
    U+0020-007E, U+00A0, U+00A9, U+00AE, U+2122, U+00B0, U+00B7, U+00BF,
    U+00C0-00FF, U+2010-2015, U+2018-201A, U+201C-201E, U+2026, U+2032-2033;
}

/* --- Metrics-matched fallbacks (house-tech-spec §8, brief §2.3) ------------
   Donors: Liberation Sans Narrow Bold (Chivo 700 — the metric-compatible
   open replacement for Arial Narrow Bold; no Arial Narrow binary is
   reachable on the Linux build host to measure directly), Liberation Sans /
   Liberation Sans Bold (Barlow 400/600 — the metric-compatible open
   replacement for Arial / Arial Bold, which is also the nearest available
   proxy for Helvetica Neue's own near-identical metrics). size-adjust /
   ascent-override / descent-override / line-gap-override computed from the
   real shipped instances' own hhea + OS/2 metrics against the donors' own
   tables (scripts/font-metrics.mjs, the fontaine algorithm, English-letter-
   frequency weighted). Verified against Lighthouse CLS: see README.md. */

@font-face {
  font-family: 'Chivo Fallback';
  src: local('Arial Narrow Bold'), local('Arial Narrow'), local('Arial Bold'), local('Arial');
  font-weight: 700;
  font-style: normal;
  size-adjust: 123.18%;
  ascent-override: 76.31%;
  descent-override: 20.30%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Barlow Fallback';
  src: local('Helvetica Neue'), local('Arial');
  font-weight: 400;
  font-style: normal;
  size-adjust: 96.96%;
  ascent-override: 103.14%;
  descent-override: 20.63%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Barlow Fallback';
  src: local('Helvetica Neue Bold'), local('Arial Bold'), local('Arial');
  font-weight: 600;
  font-style: normal;
  size-adjust: 91.42%;
  ascent-override: 109.38%;
  descent-override: 21.88%;
  line-gap-override: 0%;
}
