/* ALPHA0 — the estate's own tokens, and nothing that was not already banked.
 *
 * WHAT THIS IS FOR. `shared.css` in the styleguide folder is Purpul's, and its `--v/--b/--c` are
 * ALREADY this gradient — #a78bfa → #5b9dff → #34e2f0, byte-identical to
 * `ALPHA0_PARALLAX_GRADIENT_STOPS` in `mobius.mjs` and to the stops in `generate-svg.mjs`. So
 * "adjust the styles to our brand" is not a restyle. Four files already agree on the palette; this
 * one names them in one place so a fifth cannot disagree.
 *
 * NOTHING HERE IS A NEW COLOUR. Every value below is copied from something already on disk, with the
 * source named beside it. `brands.json` lists six brands whose tokens drifted apart — three
 * different violets (#a855f7, #c4b5fd, #8d7cff) for what reads as one family — and that drift is
 * exactly what happens when a palette lives in six files. The gradient is the fixed point: all six
 * carry the same three stops.
 *
 * THE MARK IS GEOMETRY, NOT A TRACE. `alpha0-parallax-mark.svg` is WRITTEN by `generate-svg.mjs`
 * from `mobiusPath2D()` — a Mobius centreline, 120 segments, computed. It must not be hand-edited:
 * `HANDOVER-2026-09-04` records the mark being "reshot from numbers rather than traced" and a gate
 * that went RED on three one-unit drifts. Regenerate with:
 *
 *     node brand/alpha0-parallax/generate-svg.mjs
 *
 * ONE NAME. `brands.json` has no `alpha0` entry — the closest is `orion`, whose mark is described as
 * "Mobius-strip O + rion" and whose brandBank points at `../copernicus/brand/orion`. This estate is
 * `alpha0-parallax` and the CSS classes in `alpha0-parallax-mark.css` still carry `--orion-ink` and
 * `--orion-o-size` from that lineage. Renaming those is a ruling, not a step: they are referenced by
 * `alpha0-parallax-mark.js`, and a half-rename is worse than an old name. Named here so the next
 * reader knows it is deliberate.
 */

:root {
  /* THE GRADIENT, from `mobius.mjs: ALPHA0_PARALLAX_GRADIENT_STOPS`. The one thing every brand in
     `brands.json` already agrees on — 8lem, pulse, orion, octoguard all carry these three stops. */
  --a0-violet: #a78bfa;
  --a0-blue: #5b9dff;
  --a0-cyan: #34e2f0;
  --a0-gradient: linear-gradient(120deg, var(--a0-violet) 0%, var(--a0-blue) 45%, var(--a0-cyan) 100%);

  /* GROUND, from `shared.css`. #080d18 is also `orion.tokens.navy` and `pulse.tokens.bg` in
     brands.json — the same value under two names, which is the drift this file exists to stop. */
  --a0-bg: #080d18;
  --a0-panel: rgba(16, 26, 46, 0.92);
  --a0-ink: #e3e8f2;
  --a0-muted: #9aa6bd;
  --a0-line: rgba(255, 255, 255, 0.09);

  /* TYPE, from `alpha0-parallax-mark.css` — Space Grotesk with Geist behind it, JetBrains Mono for
     the eyebrow. `brands.json` gives `orion` font/body/mono as exactly this triple. */
  --a0-font: "Space Grotesk", "Geist", ui-sans-serif, system-ui, sans-serif;
  --a0-mono: "JetBrains Mono", ui-monospace, monospace;

  /* THE GLOW, from `alpha0-parallax-mark.css`. Two shadows, blue over violet, and the mark's own
     file is the source — a third value here would be a fourth opinion. */
  --a0-glow:
    drop-shadow(0 0 10px rgba(125, 155, 255, 0.65))
    drop-shadow(0 0 4px rgba(167, 139, 250, 0.45));
}

/* LOCAL FONTS, because the appliance is offline and `adapt.mjs` names fonts.googleapis.com IN ORDER
   TO STRIP IT. All four faces are already banked as variable woff2 in `fonts/` — 22-57 KB each,
   declared exactly as `alpha0-parallax-slides/index.html` declares them, so the two cannot disagree.
   A guide that needs a CDN to look right looks wrong on the box it ships on. */
@font-face { font-family: "Space Grotesk"; font-style: normal; font-weight: 300 700; font-display: swap;
  src: url("fonts/spacegrotesk-latin.woff2") format("woff2"); }
@font-face { font-family: "Geist"; font-style: normal; font-weight: 100 900; font-display: swap;
  src: url("fonts/geist-latin.woff2") format("woff2"); }
@font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 100 800; font-display: swap;
  src: url("fonts/jetbrainsmono-latin.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 100 900; font-display: swap;
  src: url("fonts/inter-latin.woff2") format("woff2"); }

/* ALPHA[MOBIUS] — THE MOBIUS IS THE ZERO, not a badge beside the word.
 *
 * "Alpha0" already ends in a zero and a Mobius ring is already a closed loop, so the mark does not
 * need to sit next to the wordmark — it can BE the last glyph. One less object on the page, and the
 * mark earns its place by carrying the name instead of decorating it.
 *
 * SIZED FROM MEASURED INK, NOT BY EYE. `alpha0-zero.svg` is emitted with a viewBox tight to its own
 * ink plus half a stroke (30.97 x 33.13 of a 44u box — 75.3%), so `height: 1cap` makes the ring's
 * height equal the cap height with no margin nudging. `1cap` falls back to 0.7em where unsupported.
 *
 * THE ZERO IS THE ONLY GRADIENT ON THE PAGE. `tonality.mjs` holds the estate's colour law —
 * ground 60 / surface 24 / figure 11 / accent 5 — and this is that 5%. A wordmark where every letter
 * carries the gradient reads as a gradient, not as a word. */
.alpha0-lockup {
  display: inline-flex;
  align-items: baseline;
  font-family: var(--a0-font);
  font-weight: 700;
  letter-spacing: -0.04em;
  line-height: 1;
  color: var(--a0-ink);
}
.alpha0-lockup__zero {
  height: 0.7em;          /* fallback first, for engines without cap units */
  height: 1cap;
  width: auto;
  /* The glyph sits ON the baseline, like the letters beside it. A tuned-by-eye translate is what a
     tight viewBox exists to make unnecessary. */
  align-self: baseline;
  margin-left: -0.02em;   /* the -0.04em tracking above applies between letters, not before an img */
  filter: var(--a0-glow);
}

/* THE OLDER WORDMARK, kept: `index.html` in the slides deck may still reference it, and deleting a
   class to tidy a stylesheet is how a page silently loses its mark. */
.alpha0-wordmark {
  display: inline-flex;
  align-items: center;
  gap: 0.14em;
  font-family: var(--a0-font);
  font-weight: 700;
  letter-spacing: -0.04em;
  line-height: 1;
  color: var(--a0-ink);
}

.alpha0-wordmark__mark {
  width: 1.15em;
  height: 1.15em;
  flex: none;
  display: block;
  filter: var(--a0-glow);
}

/* The zero is the only gradient-filled glyph. A wordmark where every letter is a gradient reads as
   a gradient, not as a word — the accent is 5% of the page by the estate's own colour law
   (`tonality.mjs weights [60,24,11,5]`), and this is that 5%. */
.alpha0-wordmark__zero {
  background: var(--a0-gradient);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

/* EYEBROW. Mono, tracked out, cyan — the pattern `shared.css` already uses for `.eyebrow`, kept so a
   page can carry either stylesheet and look the same. */
.alpha0-eyebrow {
  font-family: var(--a0-mono);
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--a0-cyan);
}

/* THE BARCODE FACE, added by alpha0.io/build.mjs. Libre Barcode 39 Text, OFL — see fonts/LibreBarcode39Text-OFL.txt.
   A scanner reads it; a person reads the text it prints beneath the bars; a model reads the DOM. */
@font-face { font-family: "Libre Barcode 39 Text"; font-style: normal; font-weight: 400; font-display: swap;
  src: url("fonts/LibreBarcode39Text-Regular.ttf") format("truetype"); }
