/* SODL — colour tokens
 *
 * ONE LINE PER ROLE, BOTH THEMES ON IT: light-dark(light, dark).
 * Change either value and everything follows, including the measured contrast
 * numbers on palette.html — which recomputes them from these values, live.
 *
 * DARK IS A ROLE FLIP, NOT AN INVERSION. Inverting #FAF7F0 gives a near-black
 * blue and destroys the warmth. The same six browns stay; the opposite end
 * carries the text:
 *
 *   Walnut Brown  is text on light, and a surface on dark.
 *   Warm Beige    is a surface on light, and text on dark.
 *   Caramel       is large-text-and-accent only, at both ends.
 *
 * STATUS COLOURS ARE NOT IN THE PALETTE CARD, AND CANNOT BE. Six browns cannot
 * separate pass from fail, and every artifact the site shows needs that: the run
 * record carries six states, coverage carries exercised/unexercised, drift
 * carries breaking/informational. Added here, warm and muted, to sit with the
 * browns rather than shout over them.
 *
 * A status colour cannot be one value across both themes. Clearing 4.5:1 on
 * near-white needs a dark colour; clearing it on dark chocolate needs a light
 * one. The ranges do not overlap. Hence a value at each end.
 *
 * Every ratio in the comments was computed, not estimated.
 */

:root {
  color-scheme: light dark;

  /* ---- ground and surfaces ---------------------------------------------- */
  /*                        light            dark                              */
  --ground:    light-dark(#FAF7F0,        #2C1E15);  /* Soft Ivory / Deep Cocoa.
                                                        Darkened from the card's #3B2A20,
                                                        which sat light for a dark theme —
                                                        this lands near the depth a code
                                                        editor uses, and stays a brown */
  --surface:   light-dark(#F2E7D5,        #382720);  /* Vanilla Cream / Lifted Cocoa.
                                                        Separation from ground is 1.135,
                                                        against light's 1.143 — a card sits
                                                        off the page by the same amount in
                                                        both themes.
                                                        NOT Walnut on dark: only 2.30:1 from
                                                        Ivory, so it fails under text */
  --hairline:  light-dark(#D1B89A,        #7B5E4A);  /* Warm Beige / Walnut — structure is
                                                        carried by these, not by shadows */

  /* ---- text ------------------------------------------------------------- */
  /*                                                    ground  ·  surface      */
  --ink:       light-dark(#3B2A20,        #FAF7F0);  /* 12.76 / 15.06 · 13.27 */
  --muted:     light-dark(#7B5E4A,        #D1B89A);  /*  5.54 /  8.46 ·  7.46 */
  --accent:    light-dark(#A67C52,        #A67C52);  /*  3.49 /  4.32 ·  3.80 — LARGE TEXT
                                                        ONLY, and the one colour both
                                                        themes share */

  /* ---- status ----------------------------------------------------------- */
  /*                                                    ground L/D  ·  surface L/D */
  --pass:        light-dark(#4C6B4F,      #A3C4A0);  /* 5.57 / 8.41 · 4.87 / 7.41 */
  --fail:        light-dark(#9C4630,      #E6A08A);  /* 5.89 / 7.49 · 5.15 / 6.60 */
  --notverified: light-dark(#6E6254,      #CABAA7);  /* 5.55 / 8.51 · 4.85 / 7.50 */
  --notice:      light-dark(#7D5F1E,      #D9B463);  /* 5.56 / 8.18 · 4.87 / 7.21 */
}

/* Manual override, for judging both themes side by side. The site itself follows
   the reader's browser and offers no switch — this exists only while the palette
   is being decided. Setting color-scheme is all that is needed: light-dark()
   resolves against it, so no token is repeated. */
:root[data-theme="light"] { color-scheme: light; }
:root[data-theme="dark"]  { color-scheme: dark; }

/* ---- what each status means -------------------------------------------------
 * Named for the product's vocabulary, never for the colour:
 *
 *   pass         PASS
 *   fail         FAIL
 *   notverified  SKIPPED · NOT SERVED · UNSUPPORTED · UNCOMPILABLE, and
 *                "unexercised" in coverage. Four states, one colour: the
 *                distinction a reader acts on is verified vs not. The report
 *                keeps the four apart in words, where the difference is stated
 *                rather than implied.
 *   notice       informational drift, deprecation — disclosure that is not failure.
 *
 * Never tint a non-status surface with these. Sage means passed; borrowing it for
 * decoration spends the meaning somewhere it was not earned.
 * -------------------------------------------------------------------------- */
