/* ==========================================================================
   tokens.css — the design brief, compiled.
   Mock's Landscape and Supply, Mankato MN.
   Source: runs/mocks-landscaping-mankato-mn/brief.md v1 (APPROVED).
   Every value below is stated there. Nothing here was chosen here.
   THIS FILE IS THE ONLY PLACE RAW VALUES LIVE (house-tech-spec §3).
   ========================================================================== */

:root {

  /* --- Colour — brief §5. Step 1 (real-world brand colour) is EMPTY and
     recorded as such in the dossier (brand_color: {hex:"", ...}) — nothing
     to echo, not a departure from one. Step 2 licenses earth/aggregate tone
     from the yard's own operational identity. The playbook's green-and-growth
     anchor is carried by IMAGERY ONLY (brief §5.2) — no green hex is a token
     on this site. */

  --scheme: light;

  /* required roles — brief §5.4 */
  --color-bg:          #F0EDE7;   /* limestone-grey — page ground */
  --color-surface:     #FFFFFF;   /* alternating band ground */
  --color-ink:         #241D19;   /* warm charcoal — 14.21:1 on bg */
  --color-ink-muted:   #5C5148;   /* warm grey-brown — 6.59:1 on bg */
  --color-accent:      #8A3F24;   /* DOMINANT — quarry-rust, hsl(16,59%,34%) */
  --color-accent-ink:  #F7F2EA;   /* text ON accent — the primary CTA's label */

  /* house-required structural */
  --color-border:      #5C5148;   /* alias of ink-muted — every hairline (brief §5.4) */
  --color-focus:       #241D19;   /* alias of ink — :focus-visible everywhere */
  --color-selection-bg:  #8A3F24;
  --color-selection-ink: #F7F2EA;

  /* brief-specific — §5.4. The hero's one atmosphere gradient, and the
     seam's baked hex (a data-URI asset, not a site.css literal — brief §4.1). */
  --color-atmos-deep:  #2B140B;
  --color-atmos-mid:   #5A2D19;
  --color-seam:        #8A3F24;   /* same value as accent; named separately, baked into the SVG */


  /* --- Typography — brief §2. Two families, three woff2, one weight each.
     No emphasis face: the one emphasised word in the h1 is carried by
     --color-accent, never a third face (brief §2.1). font-variation-settings
     never appears — both faces are static instances (brief §2.6). */

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

  --font-weight-display: 600;   /* Barlow Condensed carries every headline and band label at one weight */
  --font-weight-body: 400;
  --font-weight-body-strong: 700;

  /* Scale, computed at every declared breakpoint — brief §2.6/§2.7 */
  --text-display: clamp(2.1rem, 1.35rem + 3.1vw, 4.4rem);      /* 33.60 -> 66.24 */
  --text-h2:      clamp(1.375rem, 1.10rem + 1.0vw, 2.0rem);    /* 22.00 -> 32.00 */
  --text-lead:    clamp(1.0625rem, 1.0rem + 0.25vw, 1.3125rem);/* 17.00 -> 19.60 */
  --text-body:    1rem;         /* fixed at every width */
  --text-eyebrow: 0.75rem;      /* fixed at every width */
  --text-micro:   0.6875rem;    /* fixed at every width */

  /* Aliases so skeleton call sites (site-header__brand etc.) keep working */
  --text-hero: var(--text-display);
  --text-h3: var(--text-h2);
  --text-small: var(--text-micro);

  --leading-tight:   1.06;   /* h1, h2 */
  --leading-lead:    1.55;
  --leading-body:    1.62;
  --leading-eyebrow: 1.36;
  --leading-snug: var(--leading-tight);

  --tracking-tight:  0em;
  --tracking-wide:   0.16em;  /* eyebrows, band labels, uppercase treatments */
  --tracking-normal: 0em;


  /* --- Space — brief §3, the house scale, unchanged ---------------------- */

  --space-3xs: 0.25rem;  /* 4px */
  --space-2xs: 0.5rem;   /* 8px */
  --space-xs:  0.75rem;  /* 12px */
  --space-sm:  1rem;     /* 16px */
  --space-md:  1.5rem;   /* 24px */
  --space-lg:  2.5rem;   /* 40px */
  --space-xl:  4rem;     /* 64px */
  --space-2xl: 6rem;     /* 96px */
  --space-3xl: 9rem;

  /* ONE token, two call sites — .section's padding-block and the hero's
     padding-block-end. 64px at EVERY width (brief §3). */
  --section-gap: var(--space-xl);


  /* --- Layout — brief §3 -------------------------------------------------- */

  --layout-container: 72rem;   /* 1152px cap, centred, from 1248px viewport up */
  --layout-measure: 62ch;
  --layout-gutter: clamp(1.25rem, 5vw, 3rem);  /* 20px @375 . 32px @640 . 48px @1024+ */
  --layout-tap-min: 44px;

  --header-height: 3.5rem;      /* 56px, brief §4.5 */
  --cta-height: 3.25rem;        /* 52px primary control at <1024, §4.3 */
  --cta-height-lg: 3.5rem;      /* 56px at >=1024, §4.3 */
  --hero-ratio-mobile: 67 / 60; /* <640, brief §4.3 */
  --hero-ratio-desktop: 16 / 9; /* >=640, brief §4.3 */
  --seam-height: 0.625rem;      /* 10px, fixed at every width, brief §4.1 */
  --seam-unit: 2.5rem;          /* 40px repeat unit, brief §4.1 */


  /* --- Radius / shadow / border — brief §5.4 ------------------------------ */

  --radius-none: 0;
  --radius-sm:   2px;      /* the primary CTA only */
  --shadow-none: none;     /* NO SHADOW IS USED ANYWHERE ON THIS SITE */
  --border-hairline: 1px;
  --border-thick:    2px;  /* the seam's minimum-width fallback rule, §4.1 */
  --border-style: solid;

  /* Contract tokens, ZERO call sites — brief §5.4: this site has no cards */
  --radius-md: 6px;
  --radius-lg: 16px;
  --radius-pill: 999px;
  --shadow-sm: 0 1px 2px rgb(36 29 25 / 0.06);
  --shadow-md: 0 6px 24px rgb(36 29 25 / 0.09);
  --shadow-lg: 0 24px 60px rgb(36 29 25 / 0.14);


  /* --- Motion — brief §7 -------------------------------------------------- */

  --ease-settle: cubic-bezier(0.22, 1, 0.36, 1);
  --ease-drift:  cubic-bezier(0.45, 0, 0.55, 1);
  --ease-reveal: var(--ease-settle);
  --ease-out: var(--ease-settle);
  --ease-in-out: var(--ease-drift);

  --duration-signature:   1400ms;   /* the truck bed tips, the pile settles, the seam draws */
  --duration-satellite-1: 7000ms;   /* stone 1 */
  --duration-satellite-2: 9500ms;   /* stone 2 */
  --duration-satellite-3: 6200ms;   /* stone 3 */
  --duration-moss:        8000ms;   /* moss-tipped stone sway */
  --duration-reveal:       400ms;   /* section-entrance fade, body sections only */

  /* House aliases the skeleton/base.css reads */
  --duration-fast: 140ms;
  --duration-base: var(--duration-reveal);
  --duration-slow: var(--duration-signature);

  --reveal-shift: 0.5rem;   /* 8px -> 0, brief §7.3 */
  --reveal-stagger: 0ms;    /* no per-item cascade, brief §7.3 */

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

/* --------------------------------------------------------------------------
   @font-face — brief §2.1-§2.6. Two families, three woff2, SIL OFL 1.1,
   self-hosted, no CDN. Every face ships font-display: swap and the ONE house
   declared safe range (spec §8), identical on every face. Fallback overrides
   are MEASURED (scripts/font-metrics.mjs, the fontaine algorithm) against
   Liberation Sans Narrow (Arial Narrow's open metric clone) and Liberation
   Sans (Helvetica Neue/Arial's open metric clone) — see README.md for the
   full derivation; neither Arial Narrow nor Helvetica Neue is installable on
   this Linux build host.
   -------------------------------------------------------------------------- */

@font-face {
  font-family: 'Barlow Condensed Fallback';
  src: local('Arial Narrow');
  size-adjust: 98.38%;
  ascent-override: 101.65%;
  descent-override: 20.33%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Archivo Fallback';
  src: local('Helvetica Neue');
  size-adjust: 98.05%;
  ascent-override: 89.55%;
  descent-override: 21.42%;
  line-gap-override: 0%;
}

/* The house declared safe range (house-tech-spec.md §8), identical on every
   face. Coverage gap, recorded rather than silently shipped: U+2010, U+2011,
   U+2012 and U+2015 are in this range and absent from all three faces below
   (checked with a fontTools cmap read against the shipped woff2). The range
   is not narrowed for this — both faces lack the SAME four codepoints, so a
   page rendering either one falls to the metrics-matched fallback
   consistently, never mid-sentence in two faces (house-tech-spec §8). copy.md
   carries no em dash and no other dash form beyond the plain hyphen-minus
   U+002D (already inside U+0020-007E), so the gap is latent on this site's
   own copy. */
@font-face {
  font-family: 'Barlow Condensed';
  src: url('../assets/fonts/barlow-condensed-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;
}

@font-face {
  font-family: 'Archivo';
  src: url('../assets/fonts/archivo-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: 'Archivo';
  src: url('../assets/fonts/archivo-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;
}
