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

   poop-busters-clarksville-tn — brief.md v1 (C3 approved 2026-09-14), family
   `retro-local`, archetype `poster-hero`, signature "press-and-hold badge".
   Every value below is copied from brief.md §2.2 (colour), §2.3-2.4 (contrast
   resolution), §3.1-3.4 (typography/weights/radius/shadow) and §6 (motion).
   Brief-specific tokens (badge geometry, satellite motion, earth-shadow) are
   added in the marked slots per house-tech-spec §3's own allowance — never
   renaming or removing a required token.
   ========================================================================== */

:root {

  /* --- Colour (brief §2.2). Derivation: brief §2.1 — no real-world colour
     found (dossier §4.5, departure ground 4 applies by default) → Middle
     Tennessee farm-country register (khaki/olive field-canvas) → retro-local
     family norms. The §6.1 anchor is imagery-carried, not palette-carried
     (playbook §6.1), so nothing here fights it. */

  --scheme: light;

  --color-bg:          #F1ECDD;   /* khaki-canvas — page ground */
  --color-surface:     #E4DCC3;   /* badge fill, cards, form fields */
  --color-ink:         #262218;   /* gunmetal-ink — primary text */
  --color-ink-muted:   #56503E;   /* secondary text */

  /* Olive-canvas — a plain field-jacket tone, NEVER an insignia colour or a
     rank/unit reference (brief §2.2, C2 tweaks-bar nudge). */
  --color-accent:      #5B6236;
  --color-accent-ink:  #F7F4EA;

  --color-border:        #D3C8A9; /* DECORATIVE hairlines only — dotted ledger
                                      rules, header/footer dividers. No
                                      contrast floor (brief §2.2). */
  --color-border-strong: #56503E; /* = ink-muted; >=3:1 vs bg AND surface
                                      (brief §2.3 row 12) — a control's own
                                      boundary, WCAG 1.4.11 */
  --color-focus:          #5B6236; /* = accent; >=3:1 vs bg AND surface (row 11) */

  /* No --color-focus-on-band: no dark band or inverted section anywhere on
     this site (one light mode, no full-bleed dark ground) — brief §2.2 says
     so explicitly, so the skeleton's conditional token stays commented out
     per its own instruction. */
  /* --color-focus-on-band: …; */

  --color-selection-bg:  #5B6236;
  --color-selection-ink: #F7F4EA;

  /* Brief-specific — imagery art-direction only, NEVER a text/bg pair
     (brief §2.3: "below-grade cross-section shading, slot 2 art direction
     only"). Baked into the generated image, not consumed by site.css as a
     live text/background pairing. */
  --color-earth-shadow: #3D3826;

  /* Hero atmosphere gradient stops (brief §2.3): "two soft radial gradients
     at rgba(91,98,54,0.15) (top-right) and rgba(91,98,54,0.10) (bottom-left)
     over --color-bg" — 91/98/54 is --color-accent's own RGB. Named tokens
     rather than a CSS relative-colour expression in site.css, for the same
     reason the atmosphere stops on other sites in this repo are named
     tokens: keeps site.css literal-free without depending on `rgb(from ...)`
     browser support. */
  --color-accent-wash-hi: rgba(91, 98, 54, 0.15);
  --color-accent-wash-lo: rgba(91, 98, 54, 0.10);

  /* --- Typography (brief §3.1). Barlow ships as two static instances
     (400/700) rather than the brief's named single variable file: Barlow
     carries no variable axis on Google Fonts (checked, not assumed — no
     `axes` entry at fonts.google.com/metadata/fonts). Same face, same two
     weights; 3 files total, still under the §5 cap of 4. See README.md. */

  --font-display:      'Ultra', 'Ultra Fallback', Georgia, 'Times New Roman', serif;
  --font-body:         'Barlow', 'Barlow Fallback', 'Helvetica Neue', Arial, sans-serif;

  --font-weight-display:     400;  /* Ultra's only weight */
  --font-weight-body:        400;  /* Barlow Regular — paragraph text */
  --font-weight-body-strong: 700;  /* Barlow Bold — labels, CTAs, eyebrow, ledger headings */

  /* --- Type scale (brief §3.2), computed across its full range. --- */

  --text-hero:    clamp(1.5rem, 1.2rem + 2.2vw, 2.5rem);
  --text-h2:      clamp(1.5rem, 1.3rem + 1vw, 2rem);
  --text-h3:      clamp(1.05rem, 0.95rem + 0.5vw, 1.3rem);
  --text-lead:    clamp(1.05rem, 0.95rem + 0.4vw, 1.25rem);
  --text-body:    clamp(1rem, 0.96rem + 0.16vw, 1.08rem);
  --text-small:   0.85rem;
  --text-eyebrow: clamp(0.76rem, 0.70rem + 0.26vw, 0.9rem);

  /* Badge geometry (brief §3.2 "brief-specific — badge geometry"). Flat
     300px on every real phone (floor reached <=600px), 420px ceiling
     (>=1000px). */
  --badge-width: clamp(18.75rem, 7.5rem + 30vw, 26.25rem);

  --leading-tight: 1.05;
  --leading-snug: 1.25;
  --leading-body: 1.6;

  --tracking-tight: -0.02em;
  --tracking-normal: 0em;
  --tracking-wide: 0.08em;            /* eyebrows / small caps */

  /* --- Space — house scale, unchanged by this brief (brief §4.2/§4.4's own
     arithmetic is computed directly against these house values: --space-xs
     = 12px, --space-sm = 16px, --space-md = 24px, --space-xl = 64px). */

  --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;

  /* Inter-section rhythm (brief §4.4): --space-xl (64px), fixed at every
     width. Call sites: .section's padding-block and the hero's
     padding-block-end — nothing else consumes it. */
  --section-gap: var(--space-xl);

  /* --- Layout — house defaults, unchanged by this brief. --- */

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

  /* Sticky chrome (brief §4.5: "Header (sticky) | Trade + always-on phone
     CTA"). Both bars sticky, house-tech-spec §2's documented pattern. Fixed
     flow height, measured against the real render — see README.md. */
  --header-height: 3.75rem;

  /* --- Radius / shadow / border (brief §3.4 — deliberately not uniform). */

  --radius-none: 0;
  --radius-sm: 2px;    /* CTA buttons — sign-painter/stamped-label register */
  --radius-md: 6px;
  --radius-lg: 16px;
  --radius-pill: 999px;

  /* --shadow-none everywhere except the badge (brief §3.4). Tone follows
     this site's own --color-ink (#262218 = rgb(38 34 24)), not the
     skeleton's literal; same offsets/blur/opacity. */
  --shadow-none: none;
  --shadow-sm: 0 1px 2px rgb(38 34 24 / 0.06);
  --shadow-md: 0 6px 24px rgb(38 34 24 / 0.09);
  --shadow-lg: 0 24px 60px rgb(38 34 24 / 0.14);

  --border-hairline: 1px;
  --border-thick: 3px;
  --border-style: solid;

  /* --- Motion (brief §6). House reveal defaults kept as-is: fade + rise,
     --duration-base (320ms), --ease-out, --reveal-shift (1.25rem),
     --reveal-stagger (90ms). */

  --duration-fast: 140ms;
  --duration-base: 320ms;
  --duration-slow: 640ms;

  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);

  --reveal-shift: 1.25rem;
  --reveal-stagger: 90ms;

  /* "Press-and-hold badge" (brief §6). Corrects Tile C's own shipped CSS (an
     infinite 6s loop) to its stated rationale: press-in runs ONCE
     (iteration-count 1, site.css) and holds. Curve re-timed from Tile C's
     own 0/10/16/22% (of its 6s loop) to a one-shot settle. */
  --duration-badge-press: 900ms;
  --ease-badge-press: cubic-bezier(0.2, 0, 0.1, 1);
  --badge-press-shift: -0.1875rem;  /* Tile C's own -3px pre-settle offset */

  /* Ambient satellites (brief §6, ref-001) — Tile C's own durations,
     verbatim, never synchronised with each other or the badge's press. */
  --duration-compass: 5.4s;
  --ease-compass: cubic-bezier(0.3, 0, 0.2, 1);
  --duration-watch: 6s;

  /* Fixed decorative satellite sizes (brief §4.6): 34px / 30px @375,
     unscaled by viewport. */
  --compass-size: 34px;
  --watch-size: 30px;

  /* Recurring-ornament geometry (brief §4.6): services numeral column
     min-width 2.2rem; review-ledger compass-rose glyph 14px fixed. */
  --index-num-width: 2.2rem;
  --ledger-mark-size: 0.875rem;

  /* How-it-works strip flex-basis — Builder layout choice within "compact
     3-step inline strip", not a stated brief number. */
  --steps-item-basis: 12rem;

  /* --- Z layers — house defaults, unchanged. --- */
  --z-base: 0;
  --z-header: 100;
  --z-nav-panel: 200;
  --z-skip-link: 300;
}

/* --------------------------------------------------------------------------
   @font-face — self-hosted woff2, latin subset, static instances only.
   Ultra: Apache 2.0, Astigmatic/Brian J. Bonislawsky (source repo files it
   Apache, not OFL — assets/fonts/LICENSE-ultra-apache-2.0.txt). Barlow: SIL
   OFL 1.1 (assets/fonts/OFL-Barlow.txt).

   Subset to the house declared safe range (house-tech-spec §8). Coverage
   gap, recorded per §8's own instruction rather than left for the next
   reader to rediscover: U+2010/2011/2012/2015 absent from all three faces
   alike (the pilot site's own documented "lack it equally" case). U+2032/
   U+2033 absent from Ultra specifically while both Barlow instances carry
   them — an asymmetric, FIX-worthy gap in principle, but this site's copy
   never sets ′ or ″ in any face (grepped, zero hits), so the census check
   (rendered codepoints ⊆ declared range) passes clean. Re-check on any copy
   amendment touching a measurement.
   -------------------------------------------------------------------------- */

@font-face {
  font-family: 'Ultra';
  src: url('../assets/fonts/ultra-latin-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-400-latin.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-700-latin.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;
}

/* --- Metrics-matched fallbacks (house-tech-spec §8). Ultra's reused
   byte-for-byte from all-pro-lawn-service-boise-id (same file, same weight,
   same Georgia donor — the values are a property of the font, not the
   site). Barlow's reused from two independent sites shipping the same
   Barlow 400/700 latin files against Arial, agreeing to the hundredth of a
   percent. Verify: `node scripts/qa/lighthouse.mjs` — CLS should read
   0.000. */

@font-face {
  font-family: 'Ultra Fallback';
  src: local('Georgia');
  font-weight: 400;
  font-style: normal;
  size-adjust: 159.91%;
  ascent-override: 63.08%;
  descent-override: 17.13%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Barlow Fallback';
  src: local('Helvetica Neue'), local('Arial'), local('Liberation Sans');
  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('Liberation Sans Bold'), local('Liberation Sans');
  font-weight: 700;
  font-style: normal;
  size-adjust: 92.39%;
  ascent-override: 108.23%;
  descent-override: 21.65%;
  line-gap-override: 0%;
}
