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

   anderson-landscape-green-bay-wi — brief.md v1 (C3 PASS), family `warm-craft`,
   archetype `split-hero`. Every value cites brief.md; the only Builder fills
   are --text-h3 and --control-height-primary (flagged inline), both
   interpolated from outcomes the brief already states, never a new choice.
   ========================================================================== */

:root {

  /* --- Colour (brief §3.2). Derivation: dossier §4.5 has no real-world
     brand colour (Gap) → local character (Green Bay four-season Midwest
     trade) → family norms (warm-craft cream/ink/rust + playbook §6.1's
     green anchor). Contrast computed in brief §3.3–§3.6. */

  --scheme: light;

  --color-bg:            #FAF3E9;  /* warm cream — ref-010's ground */
  --color-surface:       #F0E4D2;  /* form fields + trust-strip panel interior ONLY */
  --color-ink:           #2B1E14;  /* warm near-black */
  --color-ink-muted:     #6B5744;  /* secondary text, hairline-adjacent text */
  --color-accent:        #3E6B37; /* cedar-green — dominant, hsl(111.9°,32.1%,31.8%) */
  --color-accent-ink:    #FAF3E9; /* type on the accent fill */

  --color-border:        #E0D3BA; /* decorative hairlines ONLY — never a control boundary */
  --color-focus:         #3E6B37; /* 5.67:1 vs bg, 4.97:1 vs surface — brief §3.3 rows 5,6 */

  /* One light mode, no dark band beyond the skeleton's preview expiry bar
     (out of brief scope) — so --color-focus-on-band is intentionally absent. */

  --color-selection-bg:  #3E6B37;
  --color-selection-ink: #FAF3E9;

  /* Brief-specific colours (§3.2) */
  --color-accent-hover:  #2C4E28; /* control :hover/:active ground — 8.56:1 vs accent-ink */
  --color-accent-2:      #C08A2E; /* honey-ochre — DECORATIVE FILL ONLY, R6: never text-on-bg (2.76:1, fails) */
  --color-accent-3:      #9C4A1F; /* terracotta — sparing micro-accent: eyebrow, italic emphasis, ring tick */

  /* Hero atmosphere stops — NAMED so contrast is computed against the
     ground's actual extremes, never a flat token (brief §3.4). */
  --color-atmos-hi:      #FBF5EC; /* lightest stop, top-left radial peak */
  --color-atmos-mid:     #F3E6CF; /* the radial's warm highlight — darkest of the three named stops */
  --color-atmos-lo:      #FAF3E9; /* == --color-bg, the linear base the radial sits over */

  /* Field ground — an OPAQUE sibling block, never a ground type sits on
     (brief §3.5). The trim-line/sprig SVG lives on this flat fill. */
  --color-field-bg:      #F4E9D6; /* L = 0.823759 */


  /* --- Typography (brief §2). Two families, four static woff2 instances —
     design-rules §5's ceiling. Both OFL 1.1, self-hosted, subset to the
     house range (house-tech-spec §8). R3: no font-variation-settings. */

  --font-display: 'Source Serif 4', 'Source Serif 4 Fallback', Georgia, 'Times New Roman', serif;
  --font-body:    'Karla', 'Karla Fallback', Arial, 'Helvetica Neue', sans-serif;

  --font-weight-display:  700;
  --font-weight-emphasis: 500;  /* italic only — H1 accent word, h2 accent words, the one pull-quote */
  --font-weight-body:     400;
  --font-weight-body-strong: 600;

  /* --- Type scale — computed across its full range, brief §2.7 ----------- */

  --text-h1:      clamp(2.1rem, 1.5rem + 3vw, 3.7rem);
  --text-h2:      clamp(1.45rem, 1.2rem + 1.3vw, 2.1rem);
  --text-body:    clamp(1rem, 0.95rem + 0.25vw, 1.1rem);
  --text-eyebrow: clamp(0.72rem, 0.6rem + 0.35vw, 0.85rem);
  --text-small:   clamp(0.85rem, 0.8rem + 0.18vw, 0.95rem);

  /* --text-h3 — Builder execution fill, flagged not chosen silently. Brief
     §2.6 gives h3 the display face at 700 and shares --leading-h2 across
     "h2, h3", so h3 is anticipated (row/card/step/FAQ headings) but §2.7's
     clamp table has no size row for it. Interpolated on the same clamp
     mechanics, between --text-body and --text-h2's floor. Reported as a
     brief omission per §12, not a silent choice. */
  --text-h3:      clamp(1.1rem, 1rem + 0.4vw, 1.3rem);

  --leading-tight: 1.08;  /* h1 only */
  --leading-h2:    1.14;  /* h2, h3 */
  --leading-snug:  1.25;  /* controls/buttons — house default, brief does not override */
  --leading-body:  1.55;  /* prose, rows, form */
  --leading-caps:  1.4;   /* every caps label */

  --tracking-caps:  0.12em; /* eyebrow, section eyebrows */
  /* trust-strip facts, footer meta — NOT headings: site.css resets
     h1/h2/h3/brand letter-spacing to `normal`, since base.css's h1–h4 rule
     reads this same token name for a role the brief repurposes. Flagged. */
  --tracking-tight: 0.08em;


  /* --- Space — house scale, unchanged. Brief §4.2's arithmetic
     (16/24/40/64/96px etc.) resolves entirely to these existing steps. */

  --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.2): --space-xl below 768, --space-2xl at ≥768. */
  --section-gap: var(--space-xl);

  /* --- Layout. Container = house default (72rem = 1152px, brief §4.2's
     ceiling). Gutter is a STEPPED value per brief §4.2 (16px below 768,
     40px at ≥768) reusing existing space tokens. */

  --layout-container: 72rem;
  --layout-measure:   62ch;
  --layout-gutter:    var(--space-sm);  /* 16px below 768 — 40px override at 768, below */
  --layout-tap-min:   44px;

  /* Header's fixed height (brief §4.4 step 1: 56px + 1px border-bottom),
     and the term §5's sticky-chrome arithmetic (44+56+1=101px) measures. */
  --header-height: 3.5rem;  /* 56px */

  /* Text/field column split at ≥768 (brief §4.2): 44% text / 56% field,
     as fr tracks so the browser's fr-vs-gap math reproduces the brief's
     table exactly (454.08 / 577.92 @1152) — see site.css .hero__grid. */
  --hero-col-text:  44fr;
  --hero-col-field: 56fr;

  /* Primary-CTA fluid height (brief §5): two stated outcomes, 46px @375 /
     52px @1440, no padding formula given. Interpolated on the type scale's
     own clamp mechanics, binding at those exact measured widths. */
  --control-height-primary: clamp(2.875rem, 2.743rem + 0.5634vw, 3.25rem);

  /* --- Radius / shadow / border. R5: --radius: 0, no shadow anywhere. */

  --radius-none: 0;
  --radius-sm:   0;
  --radius-md:   0;
  --radius-lg:   0;
  --radius-pill: 0;

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

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

  /* Hero trim-line's stroke weight (brief §4.3: "a static ink trim-line
     (2px stroke)") — compiled so no raw 2 sits outside this file. */
  --border-trim: 2px;

  /* --- Motion. Reveals reference these; base.css collapses every duration
     to ~0 under prefers-reduced-motion (house kill switch). */

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

  /* Sprig sway durations (brief §4.3 Motion): five independent,
     non-synchronised loops — 5.0/6.4/4.6/7.1/5.0s(2.6s delay), the 5th–8th
     sprigs cycling the same four base durations with staggered delays. */
  --duration-sprig-1: 5.0s;
  --duration-sprig-2: 6.4s;
  --duration-sprig-3: 4.6s;
  --duration-sprig-4: 7.1s;
  --sprig-delay-5:    2.6s;

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

/* Section rhythm + gutter step at ≥768 (brief §4.2's table: --section-gap
   64→96px, --layout-gutter 16→40px at the one declared breakpoint). Both
   sides already resolve to existing scale steps. */
@media (min-width: 48rem) {
  :root {
    --section-gap:   var(--space-2xl);  /* 96px */
    --layout-gutter: var(--space-lg);   /* 40px */
  }
}

/* --------------------------------------------------------------------------
   @font-face — self-hosted woff2, latin subset, static instances only.
   Source Serif 4: SIL OFL 1.1, Frank Grießhammer / Adobe. Karla: SIL OFL
   1.1, Jonathan Pinhorn. Licence text: assets/fonts/OFL.txt. Subset to the
   house declared range, identical on all four faces (house-tech-spec §8;
   brief §2.4). Coverage gap: U+2011/2012/2015 and (Karla only)
   U+2010/2032/2033 are absent from the source faces — none render in this
   site's copy (only U+2013 is used, and both faces carry it).
   -------------------------------------------------------------------------- */

@font-face {
  font-family: 'Source Serif 4';
  src: url('../assets/fonts/source-serif-4-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;
}

@font-face {
  font-family: 'Source Serif 4';
  src: url('../assets/fonts/source-serif-4-italic-500-latin.woff2') format('woff2');
  font-weight: 500;
  font-style: italic;
  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: 'Karla';
  src: url('../assets/fonts/karla-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: 'Karla';
  src: url('../assets/fonts/karla-600-latin.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.5). Donors:
   Georgia (both Source Serif 4 instances), Arial (both Karla instances).
   size-adjust / ascent-override / descent-override / line-gap-override
   computed from the real shipped instances' own OS/2 + hhea metrics against
   Georgia/Arial reference data (the `fontaine` algorithm), matched to the
   SPECIFIC local() face each rule loads. Verified against Lighthouse CLS —
   see README.md. */

@font-face {
  font-family: 'Source Serif 4 Fallback';
  src: local('Georgia');
  font-weight: 700;
  font-style: normal;
  size-adjust: 104.31%;
  ascent-override: 99.32%;
  descent-override: 32.12%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Source Serif 4 Fallback';
  src: local('Georgia Italic'), local('Georgia');
  font-weight: 500;
  font-style: italic;
  size-adjust: 93.71%;
  ascent-override: 110.55%;
  descent-override: 35.75%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Karla Fallback';
  src: local('Arial');
  font-weight: 400;
  font-style: normal;
  size-adjust: 102.40%;
  ascent-override: 89.55%;
  descent-override: 24.61%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Karla Fallback';
  src: local('Arial Bold'), local('Arial');
  font-weight: 600;
  font-style: normal;
  size-adjust: 98.44%;
  ascent-override: 93.15%;
  descent-override: 25.60%;
  line-gap-override: 0%;
}
