/* theme-revive-tech: presented target (theme spec §3 contract, §1 tokens).
   The REVIVE technical register: the engineering sibling of theme-revive, for the
   org REVIVE ("Think. Believe. Do."). It shares the family's brand DNA (the same
   deep-royal-violet accent, Space Grotesk kept as the shared display face, the
   same accent-rail signature, the same calm motion profile) and differs in
   material: cooler graphite neutrals instead of violet-warm paper, an engineered
   Geist + Geist Mono voice, a mono-forward register, a steeper type scale, tighter
   engineered radii, and a subtle dot-grid over the stage (the modern design-canvas
   texture that reads techy without shouting). Cobalt blue stays the support colour
   so violet remains the only saturated family.

   Space Grotesk for display (the family tie with the business sibling), Geist for
   prose, Geist Mono for code: Geist is Vercel's developer-tool sans, and pairing
   it with the Geist Mono the theme already uses gives one coherent engineered
   voice. All SIL Open Font License and self-hosted (no external font CDNs: decks
   present offline). Licences ship beside the files in fonts/. Space Grotesk and
   Geist are variable, so one file covers each role's weight range; Geist Mono is
   variable too. */

@font-face {
  font-family: 'Space Grotesk';
  font-weight: 500 700;
  font-style: normal;
  font-display: swap;
  src: url('fonts/space-grotesk-var.woff2') format('woff2');
}
@font-face {
  font-family: 'Geist';
  font-weight: 400 600;
  font-style: normal;
  font-display: swap;
  src: url('fonts/geist-var.woff2') format('woff2');
}
@font-face {
  font-family: 'Geist Mono';
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  src: url('fonts/geist-mono-var.woff2') format('woff2');
}

:root[data-theme] {
  /* colour. Cooler graphite paper (no violet warmth: this is the engineered
     sibling), high-contrast near-black ink. The signal-err red, the keyword and
     the constant sit off the accent hue but each is a single token, so none reads
     as a second accent. Cobalt blue appears in exactly two tokens (series-2 +
     code-function), the sanctioned support colour. */
  --surface: #f3f4f7;
  --surface-raised: #ffffff;
  --surface-sunken: #e6e8ed;
  --ink: #14171c;
  --ink-muted: #565c66;
  --ink-faint: #d2d6de;
  --accent: #5a2e8c;
  --accent-ink: #fbf9ff;
  --signal-ok: #1f7a46;
  --signal-warn: #a96a14;
  --signal-err: #c0374a;
  /* Series ramp. --series-1 is the accent (spec §1.1). The rest spread by hue AND
     lightness so no non-violet hue accumulates a rival cluster and the ramp
     survives deuteranopia and protanopia (series-ramp-cvd lint): violet, cobalt,
     teal-green, muted olive, dusty rose, graphite. The cobalt is lifted in
     lightness off the violet so the two stay distinct for a colour-blind viewer;
     the olive, rose and graphite are low-saturation so violet stays the only
     saturated family. */
  --series-1: #5a2e8c;
  --series-2: #1c64ad;
  --series-3: #1f7d6b;
  --series-4: #8f7a2e;
  --series-5: #c185a2;
  --series-6: #3f4550;

  /* code syntax colours. The highlighter paints every scope as var(--code-*), so
     these six are the whole vocabulary of code colour. Legible on the white
     raised surface, keyword kept in the violet family so it does not form a rival
     cluster, the rest separated by hue: violet keywords, green strings, cool grey
     comments, cobalt calls, amber numerals, teal types. */
  --code-keyword: #6e33a6;
  --code-string: #1f7a46;
  --code-comment: #7e838c;
  --code-function: #1c64ad;
  --code-constant: #a96a14;
  --code-type: #1f7d6b;

  /* typography: Space Grotesk for display, Geist for prose, Geist Mono for code.
     Space Grotesk stays the shared display face that ties the two siblings; the
     body font is the technical differentiator, moved from Inter to Geist so prose
     and code speak the one engineered Geist voice. A steeper scale and a tighter
     measure for the denser technical register. */
  --font-display: 'Space Grotesk', system-ui, sans-serif;
  --font-body: 'Geist', system-ui, sans-serif;
  --font-mono: 'Geist Mono', ui-monospace, monospace;
  --type-scale: 1.34;
  --size-base: 24px;
  --leading-tight: 1.08;
  --leading-body: 1.5;
  --tracking-display: -0.015em;
  --measure: 56ch;

  /* space / shape / elevation. Tighter, engineered corners and denser padding
     than the business sibling, and one flat cool-grey elevation. */
  --space-unit: 8px;
  --slide-pad: 68px;
  --radius: 5px;
  --radius-lg: 10px;
  --border-w: 1px;
  --shadow-raised: 0 4px 20px rgba(20, 23, 28, 0.1);

  /* motion. The calm, retuned signal profile, shared with the business sibling:
     unhurried reveals and transitions, a morph that leaves fast then lands soft
     like a camera settling. --dur-morph stays under 600ms (the slow-morph
     lint). */
  --dur-reveal: 220ms;
  --dur-transition: 380ms;
  --dur-morph: 520ms;
  --ease-standard: cubic-bezier(0.2, 0, 0, 1);
  --ease-morph: cubic-bezier(0.16, 1, 0.3, 1);
  --count-up: on;

  /* optional stage tokens (theme spec §1.6). A subtle dot-grid, painted over the
     flat base, gives the graphite surface the modern design-canvas texture (the
     Figma / AI-tool register) without touching any text contrast. It is two
     layers: a low-alpha dot lattice on top, and beneath it a whisper of an accent
     wash thrown from behind the top of the stage. --stage-bg keeps the base flat.
     Article and print reset the glow to none. The dots are a low-alpha mix of the
     hairline ink (not the ink at full strength), the lattice is tiled by the
     per-layer size after the slash (the token is the top --stage-glow layer of the
     engine's background shorthand, so a background-size there tiles the single
     radial into a grid), and the accent wash is barely-there, so the whole texture
     reads as a quiet technical whisper rather than a competing layer.
     --revive-tech-dot, --revive-tech-dot-cell and --revive-tech-dot-radius are
     theme-private, consumed only here. */
  --revive-tech-dot: color-mix(in srgb, var(--ink-faint) 70%, transparent);
  --revive-tech-dot-cell: calc(var(--space-unit) * 3.5);
  --revive-tech-dot-radius: 1.1px;
  --stage-bg: #f3f4f7;
  --stage-glow: radial-gradient(
        circle at center,
        var(--revive-tech-dot) 0,
        var(--revive-tech-dot) var(--revive-tech-dot-radius),
        transparent calc(var(--revive-tech-dot-radius) + 0.5px)
      )
      0 0 / var(--revive-tech-dot-cell) var(--revive-tech-dot-cell),
    radial-gradient(
      82% 58% at 50% -12%,
      color-mix(in srgb, var(--accent) 5%, transparent),
      transparent 68%
    );

  /* optional token (theme spec §1.6, letterbox amendment V2.4). The engine paints
     the area AROUND the 16:9 stage with --letterbox; it defaults to near-black,
     so a light theme must lift it or the bars read as black. A cool graphite-light
     bar keeps the frame quiet and of a piece with the surface. */
  --letterbox: #e4e7ec;

  /* branding (spec §3.9): the event logo + footer sit in a quiet band at the foot
     of the stage. Cool grey on the graphite surface, so it never competes with
     the slide. */
  --branding-inset: 24px;
  --branding-gap: 16px;
  --branding-logo-height: 26px;
  --branding-font-size: 13px;
  --branding-color: #565c66;

  /* theme-private tokens, consumed by layouts/*.css. Layout refinements may not
     carry raw literals (theme spec §2), so every value they need is a token. The
     display step is a unitless MULTIPLIER, not a size: the engine derives
     --size-5 on the stage, not on :root, so a token declared here cannot
     reference it. The multiplication happens at the point of use.

     The REVIVE accent rail: run here at 2px (tighter than the business sibling's
     3px, in keeping with the engineered register) and applied with the same iron
     consistency.

     The mono-forward register (the tech differentiator "kickers, labels, metrics
     in mono"): beyond the mono kickers the business sibling also carries, the tech
     section gets a mono accent marker as an engineered eyebrow above the title.
     --revive-mark-tracking spaces it; the marker glyph and colour are set in
     layouts/section.css from --font-mono and --accent (no new colour token, so the
     one-accent heuristic is untouched). */
  --revive-title-scale: 1.08;
  --revive-kicker-tracking: 0.2em;
  --revive-rail-w: 2px;
  --revive-rail-gap: calc(var(--space-unit) * 2.5); /* 20px: rail to text */
  --revive-mark-tracking: 0.32em;

  /* Crafted-layout tokens (consumed by layouts/grid.css, split.css, timeline.css,
     predict.css). The engine derives --space-N and --size-N on the STAGE, not on
     :root, so a token declared here cannot reference them; these build only on
     --space-unit (a :root token) and literals, which tokens.css is the sanctioned
     home for (theme spec §2). Scale tokens are unitless multipliers applied at the
     point of use, where the stage-derived --size-N is in scope.

     The engineered card, the tech differentiator from the business sibling: a LEFT
     accent hairline (the code-block / rail motif, distinct from business's TOP
     hairline), flat (no elevation), tighter corners, and a mono 01 index. The
     lead-in phrase stays on the shared display face in the accent. */
  --revive-card-lead-scale: 1.05; /* lead-in phrase, relative to card body */
  --revive-card-body-color: var(--ink-muted);
  --revive-card-pad: calc(var(--space-unit) * 3.5); /* 28px: denser tech padding */
  --revive-card-gap: calc(var(--space-unit) * 1.5); /* 12px */
  --revive-card-edge: 2px; /* accent left-hairline thickness (rail motif) */
  --revive-measure-tight: 46ch;
  --revive-para-gap: calc(var(--space-unit) * 2.5); /* 20px */
  --revive-marker-size: calc(var(--space-unit) * 0.85); /* ~7px accent tick */
  --revive-marker-offset: 0.5em; /* marker vertical offset onto the first line */
  --revive-index-tracking: 0.08em; /* mono 01 index: a hair of spacing, not a gap */
}
