/* tokens.css — brief.md (approved) §2–§6, compiled. THE ONLY PLACE RAW
   VALUES LIVE (house-tech-spec §3). warm-craft / band-rhythm /
   tidewater-clay-oat-cream (light). Full derivation: README.md. */

:root {

  --scheme: light;

  /* Colour (brief §2.1, §2.2). No real-world colour exists for this
     business (dossier §4.5); tidewater-clay is drawn from the dossier's
     own Hampton Roads geography. Every pairing is in the brief's §2.2
     contrast table. */
  --color-bg:           #FBF4E9;  /* oat-cream — page ground */
  --color-surface:      #F3E8D7;  /* deeper cream — alternating band ground */
  --color-ink:          #2B2420;  /* warm near-black — body/heading text */
  --color-ink-muted:    #5B5147;  /* 7.09:1 on bg */
  --color-accent:       #B5633B;  /* tidewater-clay (bright) — LARGE-TEXT/ICON ONLY, 3.99:1 on bg, never body/small text (Correction, C2-DECISION item 6) */
  --color-accent-deep:  #8F4A2A;  /* deep clay — every text/button accent role: 6.04:1 bg, 5.52:1 surface, 6.60:1 white-on-fill */
  --color-accent-ink:   #FFFFFF;  /* on --color-accent-deep fill only */

  /* House-structural, drawn from already-vetted brief tokens rather than a
     new unchecked pairing. */
  --color-border: var(--color-surface);            /* decorative hairline only */
  --color-border-strong: var(--color-accent-deep);  /* control boundary, >=3:1 both grounds */
  --color-focus: var(--color-accent-deep);

  /* brief §4.6's CTA band is a flat accent-deep fill with white text, so
     --color-focus above would be invisible on it. Reuses the brief's own
     6.60:1 white-on-accent-deep pairing. Scoped in site.css:
       .cta-band :focus-visible { outline-color: var(--color-focus-on-band); } */
  --color-focus-on-band: var(--color-accent-ink);

  --color-selection-bg: var(--color-accent-deep);
  --color-selection-ink: var(--color-accent-ink);

  /* Hero atmosphere (brief §2.2's worst-case-ground gradient). */
  --color-hero-halo-a: rgba(181, 99, 59, 0.16);   /* tidewater-clay bleed */
  --color-hero-halo-b: rgba(139, 116, 86, 0.14);  /* warm slate-brown bleed */

  /* Typography (brief §2.3). 4 self-hosted STATIC instances: Fraunces 600
     normal (headings), Fraunces 500 italic (H1 emphasis, process-step
     emphasis), Karla 400/700 normal (body/buttons). No variable axis ships
     anywhere, so the house §8 wght/opsz trap is unreachable by
     construction. SIL OFL 1.1 — assets/fonts/OFL-Fraunces.txt, OFL-Karla.txt. */
  --font-display:  'Fraunces', 'Fraunces Fallback', Georgia, serif;
  --font-emphasis: 'Fraunces Italic', 'Fraunces Italic Fallback', Georgia, serif;
  --font-body:     'Karla', 'Karla Fallback', Arial, sans-serif;

  --font-weight-body: 400;
  --font-weight-body-strong: 700;
  --font-weight-display: 600;
  --font-weight-emphasis: 500;

  /* Fluid type scale (brief §2.4 — exact clamp() arithmetic). */
  --text-hero:  clamp(2.25rem, 1.1rem + 5.2vw, 4.75rem);    /* 37.1px @375 -> 76px @1440 */
  --text-h2:    clamp(1.5rem, 0.95rem + 2.1vw, 2.5rem);     /* 24px floor -> 40px ceiling */
  --text-h3:    clamp(1.15rem, 0.95rem + 1vw, 1.5rem);      /* card/step headings — not brief-stated, kept in the family's scale */
  --text-lead:  clamp(1.0625rem, 0.95rem + 0.4vw, 1.25rem); /* 17px floor -> 20px ceiling */
  --text-body:  1rem;
  --text-small: 0.875rem;
  --text-eyebrow: 0.72rem; /* 11.52px — brief §2.2 Correction 1 */

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

  --tracking-tight: -0.01em;
  --tracking-normal: 0em;
  --tracking-wide: 0.12em;

  /* Space — house scale, unchanged (brief §2.5 uses the house default). */
  --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); /* brief §2.5 Correction 3: 64px, house default */

  /* Layout — house-required plus brief-derived figures (§3.1, §4). */
  --layout-container: 90rem;          /* 1440px — brief §4 container width */
  --layout-measure: 62ch;
  --layout-gutter: clamp(1.25rem, 5vw, 4rem); /* ceiling 64px -> 1312px usable at 1440 */
  --layout-tap-min: 44px;

  --layout-hero-field-height: 168px;   /* brief §3.1 */
  --layout-hero-field-max: 47.5rem;    /* 760px — brief §4.1 */
  --layout-hero-copy-width: 35rem;     /* 560px — brief §4.1 */
  --layout-hero-pad-y: 4.5rem;         /* 72px — brief §4.1 */
  --layout-hero-gap: 3rem;             /* 48px — brief §4.1 */
  --layout-hero-min-height: 620px;     /* brief §4.1: a floor, not a cap */
  --layout-services-rail: 15rem;       /* 240px — brief §4.2 */
  --layout-process-image: 26.25rem;    /* 420px — brief §4.3 */
  --layout-reviews-width: 60rem;       /* 960px — brief §4.4 */
  --layout-cta-width: 40rem;           /* 640px — brief §4.6 */

  /* Per-column reading-measure caps, brief §4's own figures */
  --measure-lead: 38ch;    /* §4.1 Correction 4 */
  --measure-card: 22ch;    /* §4.2 */
  --measure-step: 30ch;    /* §4.3 */
  --measure-review: 38ch;  /* §4.4 */
  --measure-faq: 60ch;     /* §4.5 */

  --loop-steam-rise: 22px; /* brief §6 steam loop travel */

  /* Brief-stated grid gaps between house space-scale steps */
  --gap-cards: 1.25rem;    /* 20px — §4.2 */
  --gap-reviews: 3rem;     /* 48px — §4.4 */

  /* Radius / shadow / border — house scale, unchanged. */
  --radius-none: 0;
  --radius-sm: 2px;
  --radius-md: 6px;
  --radius-lg: 16px;
  --radius-pill: 999px;

  --shadow-none: none;
  --shadow-sm: 0 1px 2px rgb(43 36 32 / 0.08);
  --shadow-md: 0 6px 24px rgb(43 36 32 / 0.10);
  --shadow-lg: 0 24px 60px rgb(43 36 32 / 0.16);

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

  /* Motion — house fade-and-rise reveal, plus the hero's 4 independent,
     non-synced loops (brief §6: hook-sway 6.4s, lid-glint 5.1s, steam
     4.2s/5.6s with a 1.1s offset). */
  --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;

  --loop-hook-sway: 6.4s;
  --loop-lid-glint: 5.1s;
  --loop-steam-1: 4.2s;
  --loop-steam-2: 5.6s;
  --loop-steam-2-delay: 1.1s;

  --z-base: 0;
  --z-header: 100;
  --z-nav-panel: 200;
  --z-skip-link: 300;
}

/* @font-face — self-hosted woff2, SIL OFL 1.1, subset to the house declared
   safe range, byte-identical unicode-range on every face. Karla ships on
   Google Fonts only as a variable font; both weights here are pinned to
   genuinely static instances with fontTools varLib.instancer at wght=400/
   700 before subsetting, so no fvar table exists anywhere on this site.
   Fraunces' two files were already static, per-instance exports. Full
   derivation and byte table: README.md. */

@font-face {
  font-family: 'Fraunces';
  src: url('../assets/fonts/fraunces-latin-600-normal.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;
}

@font-face {
  font-family: 'Fraunces Italic';
  src: url('../assets/fonts/fraunces-latin-500-italic.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-latin-400-normal.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-latin-700-normal.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 §7/§8) — MEASURED with
   scripts/font-metrics.mjs against the shipped, subset woff2 files, never
   eyeballed. Georgia/Arial are not redistributable in this build
   container, so their free metric clones (Gelasio, Liberation Sans) stood
   in for measurement only; the shipped src still lists what real visitors
   have installed. CLS 0.000 is the test. */

@font-face {
  font-family: 'Fraunces Fallback';
  src: local('Georgia');
  font-style: normal;
  size-adjust: 108.97%;
  ascent-override: 89.75%;
  descent-override: 23.40%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Fraunces Italic Fallback';
  src: local('Georgia Italic'), local('Georgia');
  font-style: italic;
  size-adjust: 100.92%;
  ascent-override: 96.91%;
  descent-override: 25.27%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Karla Fallback';
  src: local('Arial');
  font-style: normal;
  size-adjust: 103.53%;
  ascent-override: 88.57%;
  descent-override: 24.34%;
  line-gap-override: 0%;
}
