/* ==========================================================================
   KodeshWay — Divine speech typography (web)
   CANONICAL SOURCE — sync via build/sync_design.sh.

   THREE VOICES, set apart by TYPE **and** COLOUR (2026-07-31), matching iOS
   KodeshWayVoiceTypography:
     Yeshua           WEIGHT           and crimson
     Yahweh           SLANT            and kodesh gold
     Ruach HaKodesh   WEIGHT + SLANT   and royal blue

   Two axes, three states. Weight and slant are the only axes in play, and
   their third combination is the Ruach HaKodesh — so a third voice arrived
   without a third font, and the distinction still survives greyscale
   printing, colour-blindness and forced-colour modes on type alone.

   Supersedes the 2026-06-11 type-only rule. Type is kept as well as colour,
   never instead of it — colour is the fast read, type is the one that cannot
   be taken away.

   Ink values are the shipping iOS speech inks, so a verse reads identically
   in the app and on the sites:
     Yeshua  #B83E1E light / #E1673F dark
     Yahweh  #866118 light / #D9A64B dark
     Ruach   #3B5DD4 light / #6A8ACC dark
   The Yahweh gold is deliberately deeper than --kw-accent (#A8742A): it is
   body text on parchment, not chrome, and needs the extra contrast to read
   at paragraph length.

   The Ruach is ROYAL BLUE in both modes (2026-07-31). Its light ink used to
   be #2F6C82 — a teal at hue 196 — while its own dark partner sat at hue 220,
   so the one voice changed hue between light and dark mode and disagreed with
   the teal app icon on a third value. All three now speak the same royal blue.
   True royal blue (#4169E1) measures only 4.03:1 on parchment and is too light
   to carry body text, so the light ink is that hue deepened: #3B5DD4 at hue 227,
   BT.601 luma 96.4 — dead centre between Yeshua's 94.8 and Yahweh's 99.7 —
   and 4.71:1 on parchment against their 4.66:1 and 4.67:1. The dark ink
   #6A8ACC is unchanged and is still WatchPalette.ruach, so the watch and the
   reader agree. All three voices read as one family and none looks like a
   rendering fault.

   ONE VOCABULARY, EVERYWHERE — spans, never rows (2026-07-31):
     <span class="kw-yeshua">…His words…</span>
     <span class="kw-divine">…Yahweh's voice…</span>
     <span class="kw-ruach">…the Ruach HaKodesh's words…</span>

   The .com reader used to classify whole verse rows
   (<li class="verse-item divine">). That could only say "this verse is
   divine", so it painted the attribution frame and any human reply sharing
   the verse in a voice that was not theirs — Shemot 3:4 set apart the
   narration AND Moshe's "Here I am." along with Elohim's "Moshe! Moshe!".
   Those row selectors are GONE. Editorial prose on .org and the reader on
   .com now use the same three span classes.

   Which characters carry which voice is computed ONCE, in the canonical
   Scripture repo (KodeshWayScriptures/build/divine_spans.py), and published
   as a companion artifact keyed by verse id (dist/divine_spans.json →
   .com data/divine-spans.json). Consumers RENDER; nobody re-detects. The
   verse text itself is never modified, so the canon hash, the canon version
   and the narration audio are all untouched. The artifact's voice tags map
   to these classes: yeshua → .kw-yeshua, yahweh → .kw-divine,
   ruach → .kw-ruach. A tag no consumer knows yet renders PLAIN, never
   guessed at and never a crash.

   Spans are span-accurate, not verse-accurate: only the quoted words carry
   the treatment. Attribution frames ("and YHWH said to Moshe,") and any
   human reply sharing the verse stay plain. Yeshua wins if voices ever
   overlap.

   This file is the ONLY place the web's voice law is expressed. Consumers
   declare no colour of their own; .com's reader adds a single weight tweak
   (600, not 700) for its Georgia verse face, and its print stylesheet forces
   black ink. Change the law here and every web surface follows.
   ========================================================================== */

:root {
  --kw-ink-yeshua: #B83E1E;
  --kw-ink-divine: #866118;
  --kw-ink-ruach:  #3B5DD4;
}

[data-theme="dark"] {
  --kw-ink-yeshua: #E1673F;
  --kw-ink-divine: #D9A64B;
  --kw-ink-ruach:  #6A8ACC;
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --kw-ink-yeshua: #E1673F;
    --kw-ink-divine: #D9A64B;
    --kw-ink-ruach:  #6A8ACC;
  }
}

.kw-yeshua {
  font-weight: 700;
  color: var(--kw-ink-yeshua);
}

.kw-divine {
  font-style: italic;
  color: var(--kw-ink-divine);
}

/* The Ruach HaKodesh — the third state of the same two axes, weight AND
   slant, so it is told apart from both neighbours with no colour at all. */
.kw-ruach {
  font-weight: 700;
  font-style: italic;
  color: var(--kw-ink-ruach);
}

/* Forced-colour modes (Windows high contrast, and similar) discard author
   colours. Weight and slant are what carry the distinction there, and they
   already do — this only stops a half-applied state from looking broken. */
@media (forced-colors: active) {
  .kw-yeshua,
  .kw-divine,
  .kw-ruach {
    color: CanvasText;
  }
}
