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

   texas-pool-fort-worth-tx — brief.md (C3 APPROVED 2026-09-29), family
   `bold-industrial`, palette `instrument-slate/harbor-ivory`, archetype
   `instrument-column`, signature "the beam finds the line". Every value
   below cites brief.md by section.
   ========================================================================== */

:root {

  /* --- Colour (brief §2). Derivation: no real-world brand colour available
     (dossier §4.5: no truck wrap/uniform/signage/logo observed) → family
     norms — instrument-slate grounded in the trade's own diagnostic
     materials (gauge glass, dive-computer displays, oxidised steel pipe
     fittings). Contrast computed in brief §2's table. */

  --scheme: light;

  --color-bg:          #F2EFEA;  /* harbor-ivory */
  --color-surface:     #E4E6E5;
  --color-ink:         #17191B;
  --color-ink-muted:   #52585C;
  --color-accent:      #3E6E7E;  /* instrument-slate */
  --color-accent-ink:  #FFFFFF;

  --color-border:        #CDD0CC;  /* decorative hairlines, quiet, no floor */
  --color-border-strong: #7C8380;  /* control boundaries, WCAG 1.4.11 >= 3:1 */

  --color-focus:        #3E6E7E;
  /* No dark band carries a focusable control (brief §2: the hero's dark
     cross-section plate is decorative only, no interactive element sits on
     it), so --color-focus-on-band is not needed — left uncommented-out per
     tokens.css's own instruction only when a band exists; here it does not
     apply and is omitted entirely rather than left as dead commented code. */

  --color-selection-bg: #3E6E7E;
  --color-selection-ink: #FFFFFF;

  /* IMAGERY-ONLY. The cross-section's water tones, per brief §2 — carried by
     the generated hero illustration itself now (runs/{id}/images.jsonl),
     declared here because the brief's own palette table requires it and
     these are the values the generation prompt targeted. Never a UI role:
     not bg, not surface, not ink, not accent. */
  --color-pool: #1C5C78;
  --color-pool-deep: #0B2E3D;
  /* The hero field's own contained dark plate (brief §2: "a contained dark
     plate inside the field... decorative atmosphere inside one hero
     component, not a second site-wide mode") — the box's own background,
     visible as the letterbox tone either side of the image frame at wider
     viewports (site.css .hero-field__frame). Imagery-only. */
  --color-hero-plate: #12181A;
  /* The crack-glow overlay's colour (site.css .hero-field__crack) — a pale
     sky tone, consistent with the generated image's own palette. */
  --color-hero-sky-top: #DCE7E6;

  /* Imagery-only utility tones for the hero's CSS/SVG overlay layer (beam
     sweep, rising bubbles) — never baked into the generated image itself.
     The beam-glow hue is preserved from Tile B's own signature-move device
     exactly (brief §6: "preserved from Tile B exactly"). */
  --color-beam-glow: rgb(255 247 214 / 0.5);
  --color-bubble: rgb(255 255 255 / 0.6);


  /* --- Typography (brief §3). Two families:
       Anton  — SIL OFL 1.1, static, wght 400 only, no italic.
       Barlow — SIL OFL 1.1. THE BRIEF NAMES THIS "variable: wght 400-700, one
       file". Google Fonts' own metadata records Barlow's axes as [] — it does
       not ship a variable instance from the licensed source (the same finding
       already recorded on `bend-lawn-service-bend-or`'s tokens.css, which
       shares this exact family pair). Substituted with TWO STATIC instances
       (400, 600) of the identical family instead of one variable file: same
       face, same two weights, same roles, only the delivery mechanism changes
       (a mechanical substitution, not a design choice — house-tech-spec §7.1
       treats font delivery as delivery-mechanical work). File count is now 3
       (Anton 400 + Barlow 400 + Barlow 600), still inside design-rules §5's
       ≤4 woff2 / ≤2 family caps, and the combined payload is far under §7's
       100 KB total. FLAGGED for Art Director awareness — no token, weight or
       role assignment changed from the brief. */

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

  --font-weight-body:        400;
  --font-weight-body-strong: 600;
  --font-weight-display:     400;   /* Anton has one static weight, visually
                                        black by design (brief §3) */

  /* --- Fluid type scale (brief §3's own table, every clamp floor/ceiling) */

  --text-hero: clamp(2rem, 1.5rem + 2.6vw, 3.4rem);
  --text-h2:   clamp(1.3rem, 1.05rem + 1.2vw, 1.9rem);
  --text-h3:   clamp(1.3rem, 3vw, 1.75rem);        /* house default, unchanged */
  --text-lead: clamp(1.125rem, 2.2vw, 1.375rem);    /* house default, unchanged */
  --text-body: clamp(1rem, 0.95rem + 0.15vw, 1.0625rem);
  --text-small: 0.8125rem;    /* 13px, fixed */
  --text-eyebrow: 0.75rem;    /* 12px, fixed */

  /* Section corner numerals (brief §6 motion plan): Anton, 28px, fixed at
     every width — a stepped instrument-panel scale, not a fluid one. */
  --text-numeral: 1.75rem;    /* 28px */

  --leading-tight: 1.05;   /* display */
  --leading-snug: 1.25;    /* eyebrows/small caps/CTA labels */
  --leading-body: 1.6;     /* body copy */

  --tracking-tight: -0.02em;
  --tracking-normal: 0em;
  --tracking-wide: 0.08em;


  /* --- Space scale (house default, unchanged) --------------------------- */

  --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 rhythm (brief §4): one token, fixed (not fluid) at every
     breakpoint — a scale step, not a clamp(). Call sites: every .section's
     padding-block and the hero's padding-block-end. */
  --section-gap: var(--space-2xl);   /* = 96px, at EVERY width */


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

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

  /* Hero field height (brief §4's layout arithmetic): a deliberate
     instrument-panel scale, fixed, not fluid, at every breakpoint. */
  --hero-field-height: 13.75rem;   /* 220px */


  /* --- Radius / shadow / border (house defaults; brief does not restyle) - */

  --radius-none: 0;
  --radius-sm: 2px;
  --radius-md: 6px;
  --radius-lg: 16px;
  --radius-pill: 999px;

  --shadow-none: none;
  --shadow-sm: 0 1px 2px rgb(23 25 27 / 0.06);
  --shadow-md: 0 6px 24px rgb(23 25 27 / 0.09);
  --shadow-lg: 0 24px 60px rgb(23 25 27 / 0.14);

  --border-hairline: 1px;
  --border-thick: 3px;     /* the recurring head-rule ornament (brief §6) */
  --border-style: solid;


  /* --- Motion (brief §6) -------------------------------------------------- */

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

  /* The signature move — the hero cross-section's four independently timed
     layers, carried forward from the winning tile unchanged (brief §6). */
  --duration-beam-sweep: 2.6s;
  --ease-beam-sweep: cubic-bezier(.2, .8, .2, 1);
  --duration-crack-reveal: 1.2s;
  --delay-crack-reveal: 2.1s;
  --duration-bubble-1: 4.6s;
  --delay-bubble-1: 2.7s;
  --duration-bubble-2: 5.2s;
  --delay-bubble-2: 0s;
  --duration-bubble-3: 6.7s;
  --delay-bubble-3: 1.4s;
  --duration-gauge-sweep: 6.8s;

  /* --- Z layers (house default, 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.
   Anton: SIL OFL 1.1, Vernon Adams. Barlow: SIL OFL 1.1, Jeremy Tribby.
   Subset to the house declared range, identical on all three faces
   (house-tech-spec §8; brief §3).

   Same shipped binaries as `bend-lawn-service-bend-or`'s Anton/Barlow faces
   (identical upstream Google Fonts files, same OFL licence, same house
   declared range) — the fontTools cmap read and the coverage-gap note
   recorded there apply verbatim here and are not re-measured: U+2011 is
   absent from Anton; U+2011, U+2012 and U+2015 are absent from both Barlow
   instances. None of the three render anywhere in this site's copy — the
   only separator used is U+00B7 (·), and copy.md carries no em dash — so the
   gap is latent, not a mid-sentence split. Not narrowed, per house-tech-spec
   §8's reasoning.
   -------------------------------------------------------------------------- */

@font-face {
  font-family: 'Anton';
  src: url('../assets/fonts/anton-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.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 §3). Same shipped
   font binaries as `bend-lawn-service-bend-or`, so the same measured numbers
   apply verbatim (fontaine algorithm, English-letter-frequency weighted,
   computed against Liberation Sans Narrow / Liberation Sans donors —
   scripts/font-metrics.mjs). Re-verified, not re-measured: identical input
   files produce identical output numbers. Verified against Lighthouse CLS
   on this build: 0.000 (see README.md). */

@font-face {
  font-family: 'Anton Fallback';
  src: local('Arial Narrow'), local('Arial');
  font-weight: 400;
  font-style: normal;
  size-adjust: 112.34%;
  ascent-override: 104.70%;
  descent-override: 29.29%;
  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%;
}
