:root{
  /* base palette, SRG Compass v2.1 (confirmed with Jeffrey 2026-07-31) */
  --black:#000000;
  --white:#FFFFFF;
  --ink:#1A1A1A;
  --fog:#F1F1EE;
  --infinity-blue:#1B2C4A;
  --infinity-blue-dark:color-mix(in oklch,var(--infinity-blue) 78%,black);
  --chimichurri-green:#4B7A3F;
  --chimichurri-green-dark:#3A5F30;

  /* Gold is RATING STARS ONLY. Convention beats brand cohesion here: a reader
     recognises gold stars and has to stop and think about blue ones. Do not
     reach for this token for anything else.

     The stars themselves are inline SVG rendered by build/components.js, which
     cannot read a CSS custom property, so it takes the same value from
     src/data/site-facts.js palette. Those two must not drift. */
  --gold:#D4A017;
  --star-empty:#D8D8D2;

  --border-subtle:#E5E5E0;

  /* semantic aliases */
  --surface-page:var(--white);
  --surface-card:var(--fog);
  --surface-inverse:var(--black);
  --text-heading:var(--black);
  --text-body:var(--ink);
  --text-muted:#5A5A54;
  --text-inverse:var(--white);
  --border-default:var(--border-subtle);
  --accent-primary:var(--infinity-blue);
  --accent-primary-hover:var(--infinity-blue-dark);
  --accent-spot:var(--chimichurri-green);
  --accent-spot-hover:var(--chimichurri-green-dark);
  /* Green TEXT on a dark ground is not available: Chimichurri Green is 3.44:1
     on --ink, below the 4.5:1 WCAG AA threshold for normal text, and the brand
     palette contains no lighter green. Small text on a dark band uses Fog Gray
     instead (15.38:1). The base green stays correct for borders and fills,
     where the 3:1 non-text threshold applies and it passes comfortably. */
  --accent-spot-on-dark:var(--fog);
  --link:var(--infinity-blue);
  --link-hover:var(--infinity-blue-dark);
  --focus-ring:var(--infinity-blue);

  /* TYPE FAMILIES. Exactly two, per Brand Guidelines v2.1 section 04.
     The fallbacks are the ones the guide names. Nothing in this codebase may
     declare a font-family that is not one of these two tokens; build/audit.js
     fails the build if it finds one. */
  --font-heading:'Playfair Display',Georgia,serif;
  --font-body:'Inter',Helvetica,Arial,sans-serif;

  /* type scale */
  --text-display:3rem;
  --text-h1:2.25rem;
  --text-h2:1.5rem;
  --text-h3:1.125rem;
  --text-body-size:1rem;
  --text-caption:0.8125rem;

  --leading-tight:1.05;
  --leading-heading:1.2;
  --leading-body:1.6;

  --tracking-label:0.14em;
  --tracking-tight:0.02em;

  /* spacing */
  --space-1:4px;
  --space-2:8px;
  --space-3:12px;
  --space-4:16px;
  --space-5:24px;
  --space-6:32px;
  --space-7:48px;
  --space-8:64px;
  --space-9:96px;

  --radius-sm:2px;
  --radius-md:8px;
  --radius-lg:12px;
  --radius-pill:999px;

  --shadow-card:0 1px 3px rgba(0,0,0,0.08);
  --shadow-raised:0 4px 16px rgba(0,0,0,0.12);

  /* motion */
  --ease-out-expo:cubic-bezier(0.16,1,0.3,1);
  --ease-out:cubic-bezier(0.22,1,0.36,1);
  --duration-fast:150ms;
  --duration-base:250ms;
  --duration-slow:450ms;
  --duration-deliberate:650ms;
}
