/* site/css/tokens.css · OWNER: Agent B (design system); landed by Agent A from design/final/tokens.css.
   The ONLY file in site/css that may contain color, font or other literal values. The build reads
   --theme-color (light + dark), --fonts-href, --fonts-preload and every --prog-<id>{,-tint,-ink,-on,-edge}
   from here, and fails if a program in data/programs.json has no tokens. Font URLs are relative to
   this file: it is served as docs/assets/tokens.css next to docs/assets/fonts/. */
/* ======================================================================
   tokens.css · Cincy Week · design system "Interchange"
   A city paper's special section, routed like a transit map.
   Ink on newsprint; color only where it means something: a program's ink,
   the house river green (live, links, focus, the Ohio), and a state.

   Drop-in for the startup-india-guide engine (site/css/tokens.css):
     1. @font-face        self-hosted woff2 (SIL OFL 1.1) + metric-matched fallbacks
     2. :root             non-color tokens: type, space, layout, shape, rules, motion, shapes
     3. :root, [data-theme="light"]   Morning edition (default)
     4. [data-theme="dark"]           Night edition
     5. @media (prefers-color-scheme: dark) :root:not([data-theme])
                                      the Night edition again, for readers without JS
   GENERATED by scripts/build-tokens.mjs. Edit the script, not this file.
   components.css (site.css) reads ONLY these custom properties. No color
   literal may appear anywhere else; scripts/lint.mjs enforces it.
   ====================================================================== */

/* ---------- 1. fonts: files live in fonts/ next to this file (docs/assets/fonts/ in the build) ---------- */
@font-face {
  font-family: "Newsreader"; font-style: normal; font-weight: 400 700; font-display: swap;
  src: url("fonts/newsreader-roman-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Newsreader"; font-style: normal; font-weight: 400 700; font-display: swap;
  src: url("fonts/newsreader-roman-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Newsreader"; font-style: italic; font-weight: 400 600; font-display: swap;
  src: url("fonts/newsreader-italic-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Public Sans"; font-style: normal; font-weight: 300 800; font-display: swap;
  src: url("fonts/public-sans-roman-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Public Sans"; font-style: normal; font-weight: 300 800; font-display: swap;
  src: url("fonts/public-sans-roman-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Public Sans"; font-style: italic; font-weight: 300 700; font-display: swap;
  src: url("fonts/public-sans-italic-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* metric-matched fallbacks (scripts/metrics.py): the schedule does not reflow when the web fonts swap in */
@font-face {
  font-family: "Public Sans Fallback";
  src: local("Arial"), local("Liberation Sans"), local("Arimo"), local("Helvetica Neue"), local("Helvetica");
  size-adjust: 102.97%; ascent-override: 92.26%; descent-override: 21.85%; line-gap-override: 0%;
}
@font-face {
  font-family: "Newsreader Fallback";
  src: local("Times New Roman"), local("Liberation Serif"), local("Tinos"), local("Times");
  size-adjust: 107.75%; ascent-override: 68.21%; descent-override: 24.59%; line-gap-override: 0%;
}

/* ---------- 2. non-color tokens ---------- */
:root {
  /* families */
  --font-display: "Newsreader", "Newsreader Fallback", "Iowan Old Style", "Palatino Linotype", Georgia, serif;
  --font-body: "Public Sans", "Public Sans Fallback", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --font-mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
  --fonts-href: none;            /* self-hosted: the shell preloads the two files below instead of a Google CSS link */
  --fonts-preload: "fonts/public-sans-roman-latin.woff2 fonts/newsreader-roman-latin.woff2";

  /* type scale (16px root; fluid sizes clamp between 390 and 1440 px) */
  --fs-label: 0.75rem;           /* 12px caps labels, badges, flags: the floor; nothing is smaller */
  --fs-xs: 0.8125rem;            /* 13px meta lines, captions */
  --fs-sm: 0.875rem;             /* 14px secondary text, chips, nav */
  --fs-base: 1rem;               /* 16px body, UI */
  --fs-md: 1.125rem;             /* 18px card headlines (serif) */
  --fs-lg: 1.375rem;             /* 22px h3, deks on desktop */
  --fs-xl: clamp(1.5rem, 1.18rem + 1.3vw, 2.125rem);   /* h2 24 to 34 */
  --fs-2xl: clamp(1.875rem, 1.3rem + 2.5vw, 3.25rem);  /* h1 30 to 52 */
  --fs-3xl: clamp(3rem, 1.9rem + 5.2vw, 6.25rem);      /* nameplate 48 to 100 (usually the outlined SVG) */
  --fs-time: 1rem;               /* schedule times, tabular */
  --fs-daynum: 1.375rem;         /* numerals in day tabs */

  --lh-tight: 1.04; --lh-head: 1.12; --lh-snug: 1.28; --lh-body: 1.58; --lh-ui: 1.35;

  --wght-body: 400;              /* Night edition drops to 380 */
  --wght-ui: 500;
  --wght-strong: 650;            /* Public Sans is variable: 650 sits between semibold and bold */
  --wght-head: 640;              /* Newsreader headlines; Night edition 620 */
  --wght-mast: 660;
  --track-label: 0.085em; --track-head: -0.012em; --track-mast: -0.022em;

  /* space (4px base) */
  --sp-1: 4px; --sp-2: 8px; --sp-3: 12px; --sp-4: 16px; --sp-5: 24px;
  --sp-6: 32px; --sp-7: 48px; --sp-8: 64px; --sp-9: 96px;
  --gutter: clamp(16px, 3.4vw, 40px);   /* 16px side gutter on phones */
  --col-gap: clamp(16px, 2.2vw, 28px);
  --measure: 66ch;

  /* layout (engine contract names) */
  --tap: 44px;                   /* minimum touch target, everywhere */
  --topbar-h: 60px;
  --sidebar-w: 268px;
  --dock-h: 64px;
  --content-max: 1220px;
  --sched-bar-h: 76px;           /* the only sticky part of the schedule header */
  --rail-time-w: 84px;           /* desktop time rail */
  --wk-key-w: 208px;             /* week line: program key column */
  --wk-head: 76px;               /* week line: day header height */
  --wk-lane: 40px;               /* week line: lane height (desktop) */
  --wk-row: 56px;                /* week line: day row (phone) */
  --map-pin: 30px;               /* visible pin disc; hit area is always --tap */

  /* shape: nearly square, like type locked in a forme. Pills only for the Live pill and switches;
     circles only for stations (pins, rail stops). */
  --radius-xs: 2px; --radius-sm: 3px; --radius-md: 4px; --radius-lg: 6px; --radius-pill: 999px;

  /* rules: the main structural device */
  --rule-hair: 1px;              /* between items and columns */
  --rule-mid: 2px;               /* time rail, input underlines, top of the week line */
  --rule-heavy: 4px;             /* Oxford rule bar, program rule on cards and mugs */
  --line-w: 6px;                 /* transit line in the week line */
  --stripe-w: 5px;               /* program stripe on session cards */

  /* program geometry: every program is letter + shape + ink (+ its name in text) */
  --shape-square: inset(0 round 2px);
  --shape-circle: circle(50% at 50% 50%);
  --shape-diamond: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
  --shape-hexagon: polygon(25% 3%, 75% 3%, 100% 50%, 75% 97%, 25% 97%, 0 50%);
  --shape-octagon: polygon(29% 0, 71% 0, 100% 29%, 100% 71%, 71% 100%, 29% 100%, 0 71%, 0 29%);
  --prog-caw-letter: "A";       --prog-caw-shape: var(--shape-square);
  --prog-scw-letter: "S";       --prog-scw-shape: var(--shape-circle);
  --prog-blink-letter: "B";     --prog-blink-shape: var(--shape-diamond);
  --prog-brandfusion-letter: "BF"; --prog-brandfusion-shape: var(--shape-octagon);
  --prog-fotofocus-letter: "F"; --prog-fotofocus-shape: var(--shape-hexagon);
  --prog-also-letter: "&";      --prog-also-shape: var(--shape-hexagon);

  /* effect toggles (one line each) */
  --photo-filter: none;          /* e.g. grayscale(1) to unify a dense grid; default is full color */
  --mask-ink: #000;              /* mask-image alpha source only; never painted */

  /* motion */
  --ease: cubic-bezier(0.2, 0.7, 0.2, 1);
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --speed: 160ms;                /* hovers, toggles */
  --speed-slow: 280ms;           /* drawer, dialogs, sheets */
  --pulse: 2400ms;               /* the live ring; 0s under reduced motion */

  /* stacking */
  --z-sticky: 40; --z-topbar: 60; --z-dock: 65; --z-scrim: 69; --z-drawer: 70; --z-modal: 80; --z-toast: 90;
}

/* ================= LIGHT · Morning edition (default) ================= */
:root,
:root[data-theme="light"] {
  color-scheme: light;

  /* paper and ink */
  --bg: #f5ecdf;
  --surface: #fffbf4;
  --surface-alt: #eee3d2;
  --surface-sunken: #e6d9c6;
  --past-bg: #f1e8db;
  --border: #dbcdb8;
  --border-strong: #877b68;
  --rule-ink: #1c1a17;
  --text: #1c1a17;
  --text-muted: #4d463c;
  --text-faint: #655b4e;

  /* actions and the house ink (river green) */
  --primary: #1c1a17;
  --primary-contrast: #fffbf4;
  --accent: #1c6b56;
  --accent-strong: #135240;
  --accent-contrast: #ffffff;
  --accent-tint: #dcebe1;
  --link: #135240;
  --link-hover: #0b3a2d;
  --focus: #1c6b56;

  /* states */
  --success: #1c6b56;
  --success-tint: #dcebe1;
  --warning: #8a5700;
  --warning-tint: #fbeccd;
  --warning-edge: #b07a1e;
  --danger: #a4281c;
  --danger-tint: #f9dfd8;
  --live: #1c6b56;
  --live-tint: #dcebe1;
  --live-ink: #135240;
  --soon: #1c1a17;

  /* shell surfaces (SIG names) */
  --hero-bg: #f5ecdf;
  --hero-text: #1c1a17;
  --hero-muted: #4d463c;
  --sidebar-bg: #efe5d6;
  --topbar-bg: rgb(245 236 223 / 0.92);
  --dock-bg: rgb(245 236 223 / 0.96);
  --code-bg: #eee3d2;
  --kbd-bg: #fffbf4;
  --scrim: rgb(28 26 23 / 0.5);
  --plate: #ffffff;
  --plate-dark: #000000;
  --plate-border: #dbcdb8;
  --plate-ink: #1c1a17;
  --plate-dark-ink: #ffffff;
  --theme-color: #f5ecdf;

  /* program inks: fill (bullets, lines, stripes) · -ink (text on paper, sheet and tint) · -on (text on fill) · -tint (quiet ground) · -edge (keyline, 3:1 on paper) */
  --prog-caw: #75295c;
  --prog-caw-ink: #75295c;
  --prog-caw-on: #ffffff;
  --prog-caw-tint: #f4e2ea;
  --prog-caw-edge: #75295c;
  --prog-scw: #c23b24;
  --prog-scw-ink: #a8321f;
  --prog-scw-on: #ffffff;
  --prog-scw-tint: #f9e3da;
  --prog-scw-edge: #a8321f;
  --prog-blink: #2747c6;
  --prog-blink-ink: #2747c6;
  --prog-blink-on: #ffffff;
  --prog-blink-tint: #e6e9f8;
  --prog-blink-edge: #2747c6;
  /* Brand Fusion (added Sep 25): olive, clear of the other four lines, river green and the warning amber */
  --prog-brandfusion: #66700a;
  --prog-brandfusion-ink: #545c06;
  --prog-brandfusion-on: #ffffff;
  --prog-brandfusion-tint: #ecedcf;
  --prog-brandfusion-edge: #66700a;
  --prog-fotofocus: #c6cacd;
  --prog-fotofocus-ink: #50575e;
  --prog-fotofocus-on: #1c1a17;
  --prog-fotofocus-tint: #ebebe8;
  --prog-fotofocus-edge: #50575e;

  /* map (basemap paths reference these through inline custom-property styles) */
  --map-bg: #efe6d7;
  --map-water: #c7dccf;
  --map-water-edge: #9fc2b1;
  --map-park: #d6e0c6;
  --map-road-minor: #fffbf4;
  --map-road: #fffbf4;
  --map-road-major: #fffbf4;
  --map-casing: #cdbfa9;
  --map-rail: #1c1a17;
  --map-label: #4d463c;
  --map-label-halo: #f5ecdf;
  --map-pin-ink: #1c1a17;
  --map-pin-bg: #fffbf4;

  /* elevation: flat by default; rules do the structural work, shadows only float things */
  --shadow-1: 0 1px 0 rgb(28 26 23 / 0.06);
  --shadow-2: 0 10px 24px -12px rgb(28 26 23 / 0.3), 0 2px 6px -2px rgb(28 26 23 / 0.08);
  --shadow-3: 0 24px 48px -16px rgb(28 26 23 / 0.38), 0 6px 14px -6px rgb(28 26 23 / 0.12);
  /* aliases: "also" (other verified happenings) rides the FotoFocus line; letters differ (F, &) */
  --prog-also: var(--prog-fotofocus); --prog-also-ink: var(--prog-fotofocus-ink); --prog-also-on: var(--prog-fotofocus-on);
  --prog-also-tint: var(--prog-fotofocus-tint); --prog-also-edge: var(--prog-fotofocus-edge);
}

/* ================= DARK · Night edition ================= */
:root[data-theme="dark"] {
  color-scheme: dark;

  /* paper and ink: warm graphite, 7.1 ΔE00 from pure black, so never BLINK's black canvas */
  --bg: #1f1d19;
  --surface: #282521;
  --surface-alt: #312d28;
  --surface-sunken: #171512;
  --past-bg: #24211d;
  --border: #403b33;
  --border-strong: #857d6f;
  --rule-ink: #f3eee4;
  --text: #f3eee4;
  --text-muted: #cdc5b6;
  --text-faint: #aba292;

  /* actions and the house ink */
  --primary: #f3eee4;
  --primary-contrast: #1f1d19;
  --accent: #6cc7a4;
  --accent-strong: #8fd8bc;
  --accent-contrast: #0c1f18;
  --accent-tint: #1b3a31;
  --link: #8fd8bc;
  --link-hover: #b5e8d4;
  --focus: #8fd8bc;

  /* states */
  --success: #6cc7a4;
  --success-tint: #1b3a31;
  --warning: #eab65a;
  --warning-tint: #3a2c12;
  --warning-edge: #b8893a;
  --danger: #ff8f80;
  --danger-tint: #3f1f1a;
  --live: #6cc7a4;
  --live-tint: #1b3a31;
  --live-ink: #8fd8bc;
  --soon: #f3eee4;

  /* shell surfaces */
  --hero-bg: #1f1d19;
  --hero-text: #f3eee4;
  --hero-muted: #cdc5b6;
  --sidebar-bg: #23211d;
  --topbar-bg: rgb(31 29 25 / 0.92);
  --dock-bg: rgb(31 29 25 / 0.96);
  --code-bg: #312d28;
  --kbd-bg: #312d28;
  --scrim: rgb(8 7 6 / 0.72);
  --plate: #ffffff;
  --plate-dark: #000000;
  --plate-border: #403b33;
  --plate-ink: #1c1a17;
  --plate-dark-ink: #ffffff;
  --theme-color: #1f1d19;

  /* program inks, Night edition: print-strength mid-tones with lamp-black labels (no glow) */
  --prog-caw: #c98aa8;
  --prog-caw-ink: #d6a0b9;
  --prog-caw-on: #1f1d19;
  --prog-caw-tint: #3a2431;
  --prog-caw-edge: #c98aa8;
  --prog-scw: #fc6a45;
  --prog-scw-ink: #fd8163;
  --prog-scw-on: #1f1d19;
  --prog-scw-tint: #41221a;
  --prog-scw-edge: #fc6a45;
  --prog-blink: #86a4fc;
  --prog-blink-ink: #9bb3fc;
  --prog-blink-on: #1f1d19;
  --prog-blink-tint: #212a4a;
  --prog-blink-edge: #86a4fc;
  --prog-brandfusion: #b7c24a;
  --prog-brandfusion-ink: #c3cd63;
  --prog-brandfusion-on: #1f1d19;
  --prog-brandfusion-tint: #2e3117;
  --prog-brandfusion-edge: #b7c24a;
  --prog-fotofocus: #e1e4e6;
  --prog-fotofocus-ink: #d5d9dc;
  --prog-fotofocus-on: #1f1d19;
  --prog-fotofocus-tint: #2e3032;
  --prog-fotofocus-edge: #8b9197;

  /* map */
  --map-bg: #26231f;
  --map-water: #1b3a31;
  --map-water-edge: #27503f;
  --map-park: #26301f;
  --map-road-minor: #3b372f;
  --map-road: #48433a;
  --map-road-major: #5a544a;
  --map-casing: #1f1d19;
  --map-rail: #f3eee4;
  --map-label: #cdc5b6;
  --map-label-halo: #1f1d19;
  --map-pin-ink: #f3eee4;
  --map-pin-bg: #282521;

  /* elevation */
  --shadow-1: 0 1px 0 rgb(0 0 0 / 0.4);
  --shadow-2: 0 10px 24px -12px rgb(0 0 0 / 0.7), 0 2px 6px -2px rgb(0 0 0 / 0.5);
  --shadow-3: 0 24px 48px -16px rgb(0 0 0 / 0.8), 0 6px 14px -6px rgb(0 0 0 / 0.5);

  /* type compensation: light text on a dark ground reads heavier */
  --wght-body: 380;
  --wght-head: 620;
  /* aliases: "also" (other verified happenings) rides the FotoFocus line; letters differ (F, &) */
  --prog-also: var(--prog-fotofocus); --prog-also-ink: var(--prog-fotofocus-ink); --prog-also-on: var(--prog-fotofocus-on);
  --prog-also-tint: var(--prog-fotofocus-tint); --prog-also-edge: var(--prog-fotofocus-edge);
}

/* ============ Night edition for readers without JS (must equal the block above; contrast.mjs checks) ============ */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme]) {
    color-scheme: dark;

    /* paper and ink: warm graphite, 7.1 ΔE00 from pure black, so never BLINK's black canvas */
    --bg: #1f1d19;
    --surface: #282521;
    --surface-alt: #312d28;
    --surface-sunken: #171512;
    --past-bg: #24211d;
    --border: #403b33;
    --border-strong: #857d6f;
    --rule-ink: #f3eee4;
    --text: #f3eee4;
    --text-muted: #cdc5b6;
    --text-faint: #aba292;

    /* actions and the house ink */
    --primary: #f3eee4;
    --primary-contrast: #1f1d19;
    --accent: #6cc7a4;
    --accent-strong: #8fd8bc;
    --accent-contrast: #0c1f18;
    --accent-tint: #1b3a31;
    --link: #8fd8bc;
    --link-hover: #b5e8d4;
    --focus: #8fd8bc;

    /* states */
    --success: #6cc7a4;
    --success-tint: #1b3a31;
    --warning: #eab65a;
    --warning-tint: #3a2c12;
    --warning-edge: #b8893a;
    --danger: #ff8f80;
    --danger-tint: #3f1f1a;
    --live: #6cc7a4;
    --live-tint: #1b3a31;
    --live-ink: #8fd8bc;
    --soon: #f3eee4;

    /* shell surfaces */
    --hero-bg: #1f1d19;
    --hero-text: #f3eee4;
    --hero-muted: #cdc5b6;
    --sidebar-bg: #23211d;
    --topbar-bg: rgb(31 29 25 / 0.92);
    --dock-bg: rgb(31 29 25 / 0.96);
    --code-bg: #312d28;
    --kbd-bg: #312d28;
    --scrim: rgb(8 7 6 / 0.72);
    --plate: #ffffff;
    --plate-dark: #000000;
    --plate-border: #403b33;
    --plate-ink: #1c1a17;
    --plate-dark-ink: #ffffff;
    --theme-color: #1f1d19;

    /* program inks, Night edition: print-strength mid-tones with lamp-black labels (no glow) */
    --prog-caw: #c98aa8;
    --prog-caw-ink: #d6a0b9;
    --prog-caw-on: #1f1d19;
    --prog-caw-tint: #3a2431;
    --prog-caw-edge: #c98aa8;
    --prog-scw: #fc6a45;
    --prog-scw-ink: #fd8163;
    --prog-scw-on: #1f1d19;
    --prog-scw-tint: #41221a;
    --prog-scw-edge: #fc6a45;
    --prog-blink: #86a4fc;
    --prog-blink-ink: #9bb3fc;
    --prog-blink-on: #1f1d19;
    --prog-blink-tint: #212a4a;
    --prog-blink-edge: #86a4fc;
    --prog-brandfusion: #b7c24a;
    --prog-brandfusion-ink: #c3cd63;
    --prog-brandfusion-on: #1f1d19;
    --prog-brandfusion-tint: #2e3117;
    --prog-brandfusion-edge: #b7c24a;
    --prog-fotofocus: #e1e4e6;
    --prog-fotofocus-ink: #d5d9dc;
    --prog-fotofocus-on: #1f1d19;
    --prog-fotofocus-tint: #2e3032;
    --prog-fotofocus-edge: #8b9197;

    /* map */
    --map-bg: #26231f;
    --map-water: #1b3a31;
    --map-water-edge: #27503f;
    --map-park: #26301f;
    --map-road-minor: #3b372f;
    --map-road: #48433a;
    --map-road-major: #5a544a;
    --map-casing: #1f1d19;
    --map-rail: #f3eee4;
    --map-label: #cdc5b6;
    --map-label-halo: #1f1d19;
    --map-pin-ink: #f3eee4;
    --map-pin-bg: #282521;

    /* elevation */
    --shadow-1: 0 1px 0 rgb(0 0 0 / 0.4);
    --shadow-2: 0 10px 24px -12px rgb(0 0 0 / 0.7), 0 2px 6px -2px rgb(0 0 0 / 0.5);
    --shadow-3: 0 24px 48px -16px rgb(0 0 0 / 0.8), 0 6px 14px -6px rgb(0 0 0 / 0.5);

    /* type compensation: light text on a dark ground reads heavier */
    --wght-body: 380;
    --wght-head: 620;
    /* aliases: "also" (other verified happenings) rides the FotoFocus line; letters differ (F, &) */
    --prog-also: var(--prog-fotofocus); --prog-also-ink: var(--prog-fotofocus-ink); --prog-also-on: var(--prog-fotofocus-on);
    --prog-also-tint: var(--prog-fotofocus-tint); --prog-also-edge: var(--prog-fotofocus-edge);
  }
}

/* ============ reduced motion: every duration collapses, the pulse stops ============ */
@media (prefers-reduced-motion: reduce) {
  :root { --speed: 0.01ms; --speed-slow: 0.01ms; --pulse: 0s; }
}
