/* ============================================================
   TOKENS — single source of truth for the theme.
   Change a value here and it updates everywhere on the site.
   Nothing else in the CSS should contain a raw colour or size.

   Palette: "site plan", v2. Navy grounds, one dusty blue, warm
   off-white surfaces. Taken from the approved mockup in
   research/land-surveyors-nyc/mockup-v2.html, which was in turn
   built from manhattansurveying.com's COMPUTED styles rather
   than an impression of them:
     navy   rgb(20,33,72)    dominant dark sections
     paper  rgb(250,250,248) alternating light sections
     sky    rgb(131,176,206) accent, top bar, on-navy CTAs
   White is the dominant surface by area on the reference, and
   it is here too — this is a light, airy site, not a dark one.

   Checked against the portfolio: harlingen green, houston iron
   blue, chandler red, pittsburgh graphite, plano green, dallas
   navy, phoenix near-black, tampa walnut. Dallas is the closest
   at #141C26 but pairs with teal and runs near-black; this is a
   true indigo navy on white with a pale blue.
   ============================================================ */
:root{
  /* ---- brand palette: navy ---- */
  --brand:#142148;         /* navy — header type, dark sections */
  --brand-dk:#0D1631;      /* deeper — scrims, footer */
  --brand-md:#22336B;      /* borders on dark, button hover */
  --brand-lt:#E7EDF5;      /* pale wash — icon plates */

  /* --accent carries LINK TEXT as well as buttons. The dusty blue #83B0CE is
     only ~2.4:1 on white and cannot be link text, so --accent is the navy and
     the pale blue lives in --zest, pulled onto on-navy CTAs and the top bar by
     a delta in main.css. Same split as every other site in the portfolio
     (phoenix blue/orange, tampa walnut/gold), for the same reason. */
  --accent:#142148;        /* navy — links, prices (15.7:1 on white) */
  --accent-dk:#0D1631;
  --accent-lt:#E7EDF5;
  --ruby:#8A5A28;          /* placeholder flags only */

  --zest:#83B0CE;          /* dusty blue — on-navy CTAs, top bar, accents */
  --zest-lt:#EDF4F9;

  /* Label-weight blue. --zest measures 2.4:1 on white and #5E8FB2 measures
     3.47:1 — both fail as 12px uppercase eyebrow text. This one clears 4.5:1.
     Measured, not guessed; the mockup shipped the failing value first. */
  --sky-ink:#3D6A88;

  /* ---- surfaces & text ---- */
  --bg:#FFFFFF;
  --cream:#FAFAF8;         /* warm off-white — alternating sections */
  --ink:#1B1D24;
  --muted:#63666F;
  --line:#E4E4E0;

  /* ---- type ----
     The reference pairs aktiv-grotesk with termina, both Adobe Fonts; the
     engine loads no webfont and the artifact CSP blocks font hosts anyway, so
     the system stack stands in. The character is in the WEIGHT AND TRACKING
     rhythm, which is the part that was actually measured off the reference:
     H1 uppercase 800 at -0.025em, and every heading below it SENTENCE CASE at
     500-600. Making them all shout is what flattened the previous attempt. */
  --sans:ui-sans-serif,system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;
  --serif:ui-sans-serif,system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;

  /* ---- shape & rhythm ----
     Pill buttons, softly rounded cards, and shadows that are barely there.
     The reference separates blocks with WHITESPACE, not with borders — the
     previous pass used 2px black outlines on everything and read as a sign
     shop. Generous section padding does that work now. */
  --r:10px;
  --r-sm:7px;
  --maxw:1240px;
  --shadow:0 1px 2px rgba(13,22,49,.05),0 14px 32px -22px rgba(13,22,49,.42);

  /* ---- surfaces & text on dark / tinted overlays ----
     rgb triplets, not hex: CSS cannot build rgba() from a hex custom property.
     --scrim-rgb is a literal inside the hero gradient, so a palette swap that
     misses it leaves the previous hue over the photograph. */
  --scrim-rgb:13,22,49;
  --band-rgb:13,22,49;
  --ink-rgb:27,29,36;
  --zest-rgb:131,176,206;

  --paper:#FAFAF8;
  --paper-rgb:250,250,248;

  --zest-ink:#142148;      /* navy text on dusty blue — 6.8:1 */
  --zest-dk:#5E8FB2;

  --on-brand:#D3DCE8;
  --on-brand-dim:#C3CEE0;
  --on-brand-mute:#BCC6D8;
  --on-brand-fade:#98A4BC;

  /* ---- hero focal point ----
     The hero is a golden-hour skyline looking down an avenue: open haze on the
     left where the headline sits, towers on the right under the quote form.
     Y is pulled up slightly so the horizon and the avenue stay in frame when
     cover() crops the top and bottom. */
  --hero-focus:50% 42%;
  --hero-focus-sm:56% 40%;

  --hero-band-h:auto;
}
