/* ==========================================================================
   tokens.css — Aqua Man Pools (McAllen, TX), "The Reply Line".
   Compiled from runs/aqua-man-pools-mcallen-tx/brief.md section 2. Every
   value below traces to that section; nothing here is improvised.
   ========================================================================== */

:root {

  /* --- Colour --------------------------------------------------------------
     Brief section 2.1. One deliberate mode: light. No dark band anywhere on
     this site, so --color-focus-on-band stays unused/commented, per the
     skeleton's own instruction. brand_color is recorded as fully omitted in
     the dossier (section 4.5) — no brand-echo departure is argued because
     there is nothing recorded to echo. Derivation proceeds from local
     character (Rio Grande Valley grapefruit country). */

  --scheme: light;

  --color-bg: #FBF2E7;                /* caliche-cream — sun-bleached South Texas stucco */
  --color-surface: #F0E1D2;           /* deeper cream — raised cards, form fields */
  --color-ink: #241512;               /* near-black warm ink */
  --color-ink-muted: #6E574C;         /* secondary text */
  --color-accent: #B22242;            /* grapefruit-ruby — RGV's own agricultural signature */
  --color-accent-ink: #FFFFFF;

  /* House-required structural colours (consumed by base.css) */
  --color-border: #DDD0BE;            /* decorative hairlines only */
  --color-border-strong: #6E574C;     /* = --color-ink-muted, >=3:1 vs bg AND surface */
  --color-focus: #B22242;             /* = --color-accent, >=3:1 vs bg AND surface */
  --color-selection-bg: #B22242;
  --color-selection-ink: #FFFFFF;

  /* Brief-specific colours — brief section 2.1 */
  --color-vessel: #2C7A82;            /* literal water colour — the section 6.1 anchor's own
                                          hue. Large text / icon / graphic fills ONLY, never
                                          small body text (brief section 2.2) */
  --color-vessel-ink: #1F5C63;        /* text-safe variant, used wherever a water-related
                                          label appears AS TEXT */
  --color-atmosphere-light: #F7E3C8;  /* hero gradient — warm highlight, top of frame */
  --color-atmosphere-deep: #E3BFA0;   /* hero gradient — warm shadow, bottom of frame; also
                                          the deck-plane fill in the vessel elevation graphic */
  --color-chip-bg: #FFFFFF;           /* hero annotation chip fill (brief section 4.1) —
                                          opaque white, --color-vessel-ink text, 7.58:1 */


  /* --- Typography ------------------------------------------------------------
     Petrona (display, serif, italic-capable) + Public Sans (body, sans).
     Both OFL 1.1, self-hosted. Brief section 2.3. */

  --font-display: 'Petrona', 'Petrona Fallback', Georgia, serif;
  --font-body: 'Public Sans', 'Public Sans Fallback', Arial, sans-serif;

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

  /* --- Type scale --------------------------------------------------------
     Fluid via clamp(): min at 375px, max at 1440px. Brief section 2.3 —
     unchanged from the house default scale (the brief cites it as-is). */

  --text-hero: clamp(2.6rem, 9vw, 5rem);
  --text-h2: clamp(1.9rem, 5vw, 3rem);
  --text-h3: clamp(1.3rem, 3vw, 1.75rem);
  --text-lead: clamp(1.125rem, 2.2vw, 1.375rem);
  --text-body: clamp(1rem, 1.4vw, 1.0625rem);
  --text-small: 0.9375rem;
  --text-eyebrow: 0.8125rem;

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

  --tracking-tight: -0.02em;
  --tracking-normal: 0em;
  --tracking-wide: 0.08em;            /* eyebrows / facts, uppercase (brief section 2.3) */

  /* --- Space ---------------------------------------------------------------
     House scale, unchanged (brief section 2.4). */

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

  /* Brief section 2.4: --section-gap = --space-xl (64px), the ONE token
     setting space between sections. Every intra-section gap stays at
     --space-lg (40px) or below. */
  --section-gap: var(--space-xl);

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

  --layout-container: 72rem;          /* max content width, 1152px — brief section 3 */
  --layout-measure: 62ch;
  --layout-gutter: clamp(1.25rem, 5vw, 3rem);
  --layout-tap-min: 44px;

  /* --- Radius / shadow / border -------------------------------------------
     Brief section 2.4: radius-sm on buttons/chips, radius-md on the vessel-
     elevation field and cards, radius-none on the pull-quote band (a flush
     left-border block, per ref-006). Shadow-sm only, on raised cards. */

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

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

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

  /* --- Motion --------------------------------------------------------------
     House scale, unchanged (brief section 2.4). */

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

  /* Living-hero satellite trio (brief section 5): three independently-timed,
     non-synchronised ambient loops. Brief-specific durations, not on the
     house fast/base/slow scale, so they get their own named tokens. */
  --duration-ambient-trident: 8.4s;   /* skimmer-pole sway */
  --duration-ambient-marker: 5.4s;    /* diagnostic-marker pulse */
  --duration-ambient-glint: 6.2s;     /* sun-glint drift */

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

/* --------------------------------------------------------------------------
   @font-face — brief section 2.3. Four static files, two families, SIL OFL
   1.1, self-hosted, Google Fonts. Subset to the house declared safe range
   (house-tech-spec section 8).

   Metrics-matched fallbacks: computed with scripts/font-metrics.mjs against
   each real face's own file. Georgia and Arial are not freely distributable
   and are not installed in this build environment, so — same method as the
   sibling pool-service site, cds-pool-service-and-repair-mesa-az — Petrona
   is measured against Gelasio (Google Fonts' own metric-compatible open
   substitute for Georgia, wght=500 to match Petrona's own weight) and Public
   Sans is measured against Liberation Sans (Red Hat's stated metric-
   compatible clone of Arial, genuinely installed here — fc-match Arial
   confirms it), at both the regular and bold cuts since both are shipped as
   real static files with a real local Bold to reach.

   Coverage gap, recorded rather than silently shipped (house-tech-spec
   section 8's "found on first use" instruction; checked with fontTools
   against all four shipped woff2 files):
     - U+2010, U+2011, U+2012, U+2015 are in the declared range and absent
       from ALL FOUR source faces — consistent across every face on the
       site, so a page rendering one of them falls to the metrics-matched
       fallback consistently, never mid-sentence in two different faces.
       Not narrowed for it, per house-tech-spec section 8.
     - U+2032, U+2033 (prime/double-prime) are present in both Petrona cuts
       but absent from both Public Sans cuts. This asymmetry is exactly the
       "different matter" house-tech-spec section 8 calls a FIX risk IF
       actually rendered — but copy.md contains no ′ or ″ character anywhere
       (its own separator rule uses a middot or a full stop only), so the
       census check has nothing in this codepoint pair to catch mid-sentence
       on this site. Recorded here so the gap travels with the range rather
       than being rediscovered. */

@font-face {
  font-family: 'Petrona Fallback';
  src: local('Georgia'), local('Gelasio');
  font-weight: 500;
  font-style: normal;
  size-adjust: 96.6%;
  ascent-override: 88.82%;
  descent-override: 27.95%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Petrona Fallback';
  src: local('Georgia'), local('Gelasio');
  font-weight: 500;
  font-style: italic;
  size-adjust: 87.88%;
  ascent-override: 97.64%;
  descent-override: 30.72%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Public Sans Fallback';
  src: local('Arial'), local('Liberation Sans');
  font-weight: 400;
  font-style: normal;
  size-adjust: 105.21%;
  ascent-override: 90.3%;
  descent-override: 21.39%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Public Sans Fallback';
  src: local('Arial Bold'), local('Liberation Sans Bold');
  font-weight: 700;
  font-style: normal;
  size-adjust: 99.41%;
  ascent-override: 95.57%;
  descent-override: 22.63%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Petrona';
  src: url('../assets/fonts/petrona-medium-latin.woff2') format('woff2');
  font-weight: 500;
  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: 'Petrona';
  src: url('../assets/fonts/petrona-mediumitalic-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: 'Public Sans';
  src: url('../assets/fonts/publicsans-regular-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: 'Public Sans';
  src: url('../assets/fonts/publicsans-bold-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;
}
