/* DeckLogic design tokens — single source for app AND website.
   Layers: theme primitives → semantic roles. Components reference ONLY
   semantic tokens.

   Themes: :root holds the default theme (blueprint-dark, the cyanotype print)
   plus the invariant identity anchors. [data-theme="..."] blocks override the
   themed tokens. Exactly two themes ship (UX-6/DS-19, 2026-09-05):
   blueprint-dark (the :root default) and blueprint-light (sepia).

   Blueprint is a technical-drawing language. Two prints of one drawing:
   ink on paper. The highlighter is the ONLY accent — there is no second brand
   hue. Status hues stay reserved for status, categorical data hues stay
   reserved for chart series, and both are held to the same measured floors.

   Invariance rules:
   - Identity ANCHORS never appear in theme blocks and never decorate UI:
     --mana-* discs and their ink, --rarity-mythic/rare/uncommon, --shade-*
     (black scrims).
   - The legibility variants (--rarity-*-text, --mana-*-mark) and categorical
     data hues (--data-*) MAY be re-tuned per theme for readability. */

:root {
  /* ---- invariant scales: typography ---- */
  --t-display: 2.25rem;
  --t-title: 1.375rem;
  --t-body: 0.9375rem;
  --t-ui: 0.8125rem;
  --t-label: 0.75rem;
  /* A factual loyalty register has a shield silhouette, not a surface radius. */
  --r-loyalty: 0 0 40% 40%;
  --t-micro: 0.6875rem;

  --lh-tight: 1.05;
  --lh-snug: 1.3;
  --lh-body: 1.55;
  /* DS-19: 0.14em was set against a narrow annotation face. Azeret Mono's
     advance is 0.65em where IBM Plex Mono's was 0.60em, so the same tracking
     on the same 12 px label runs 8 percent wider and started clipping the
     narrowest columns in the product. Tracked labels stay tracked; the scale
     is set with the face rather than inherited from the one it replaced. */
  --tracking-label: 0.1em;

  /* ---- invariant scales: spacing, radius, elevation ---- */
  --s-1: 4px;
  --s-2: 8px;
  --s-3: 12px;
  --s-4: 16px;
  --s-6: 24px;
  --s-8: 32px;
  --s-12: 48px;

  /* DS-19: a drawing has square corners. The radius scale survives so every
     component keeps a legal `border-radius` token, but every rectangular step
     is zero; only --r-pill stays round, because a mana disc and a status dot
     are circles rather than rounded rectangles. */
  --r-0: 0;
  --r-1: 0;
  --r-2: 0;
  --r-pill: 999px;
  /* The chamfers are no-ops in Blueprint, in both themes. They remain declared
     so nothing that reads them becomes an invalid substitution. */
  --notch: none;

  /* ---- invariant geometry ---- */
  --module-notch: 0px;
  --module-clip: none;
  --module-pad: var(--s-4);
  --module-gap: var(--s-3);
  --rail-size: 40px;
  --bracket-size: 10px;
  --grid-size: 24px;
  /* Card payload geometry. Unlike a module, a card keeps its full rectangle
     for art and touch geometry. */
  --card-frame-rail: 38%;
  --card-frame-datum: 18%;
  --card-metric-clip: none;
  --card-action-clip: none;
  /* Signature workspace anatomy. The supported desktop floor keeps the loop
     labels visible; compact unsupported widths shed them as ornament before
     any route behavior changes. */
  /* DS-19: 8.75rem was sized for a CONDENSED display face. Schibsted Grotesk
     is not condensed, so the longest loop label overran its own box at the
     1280x800 floor (ux-shell "keeps one ranked action and a quiet loop crown
     composed at minimum size"). Measured: Accounts needs ~78 px across
     platforms; 9.5rem leaves 85 px so the label does not overflow on any
     engine, the type is not shrunk, and the stage keeps the rest. */
  --workspace-spine-w: 9.5rem;
  --workspace-spine-compact-w: 3.5rem;
  --stage-crown-h: 4rem;
  --stage-crown-field-h: 2.75rem;
  --stage-well-gutter: clamp(var(--s-4), 3vw, var(--s-8));
  /* Calm-signal defaults. Blueprint has no bloom at all: the drawing is line
     work on paper, so the ornament budget is a hairline, not a glow. */
  --copy-measure: 58ch;
  --texture-opacity: 0.05;
  --ornament-opacity: 0.28;
  --signal-bloom-opacity: 0;

  --e-0: none;
  --e-1: 0 1px 0 var(--wash-06);
  --e-2: 0 0 0 1px var(--border);

  /* ---- density (DS-12) ----
     Minimum readable cell widths, and the container width below which a
     surface is in its compact reading. Stated as the width at which a cell's
     content stops being readable — a label over a figure on the terminal
     grid — never as a guess at a screen size. DeckLogic sits beside a game
     that owns the screen, so the narrow case is ordinary use, not an edge
     case. The same numbers live in src/lib/design/density.ts, which is what
     `AutoGrid` and the density tests read; a test asserts they agree. */
  --cell-micro: 96px;
  --cell-stat: 140px;
  --cell-card: 150px;
  --cell-fact: 180px;
  --cell-tile: 220px;
  --cell-board: 320px;
  --density-compact-max: 520px;
  /* DS-15 step 8: the name band over a stacked card's art, and therefore the
     one number every stack's overlap is derived from — a stack covers
     `tileHeight - band - 1px`, so raising this shows more of each card rather
     than silently re-hiding the name. Shared with CARD_BAND_HEIGHT in
     src/lib/card/stack.ts; a test asserts they agree. */
  --card-band-h: 23px;
  /* DS-13: minimum supported window size — primary content must remain
     legible; panels may stack or scroll but must not disappear. */
  --density-min-window-width: 1280px;
  --density-min-window-height: 800px;

  /* ---- focus ring (DS-11) ----
     A keyboard user's only positional feedback, so it is a token — declared
     once, never re-specified per component. The colour derives from
     --accent-bright, which every theme retunes, so the ring follows the theme
     automatically; scripts/check-contrast.mjs holds it to the WCAG 3:1 non-text
     floor against every surface it can be drawn on, in both themes. */
  --focus-ring: var(--accent-bright);
  --focus-ring-width: 3px;
  --focus-ring-offset: 2px;

  /* ---- invariant scales: motion ---- */
  --m-fast: 120ms;
  --m-base: 220ms;
  --m-screen: 280ms;
  --m-event: 420ms;
  --m-impact: 600ms;
  --m-loading: 800ms;
  --m-handoff: 1100ms;
  --ease-out: cubic-bezier(0.2, 0.8, 0.2, 1);
  /* DS-19: the event easing is a pen stroke, not a shutter. It draws in and
     stops; `steps()` belonged to the slice-displacement grammar that is gone. */
  --ease-plot: cubic-bezier(0.35, 0, 0.15, 1);
  --motion-response-duration: var(--m-fast);
  --motion-response-ease: var(--ease-out);
  --motion-response: var(--motion-response-duration) var(--motion-response-ease);
  --motion-enter: var(--m-base) var(--ease-out);
  --motion-route: var(--m-screen) var(--ease-out);
  --motion-event-duration: var(--m-event);
  --motion-event-ease: var(--ease-out);
  --motion-event: var(--motion-event-duration) var(--motion-event-ease);
  --motion-scan: var(--m-event) linear;
  --motion-impact: var(--m-impact) var(--ease-out);
  --motion-handoff: var(--m-handoff) var(--ease-out);
  --motion-loading: var(--m-loading) linear;
  --motion-plot: var(--m-event) var(--ease-plot);
  /* DS-19: kept so nothing that reads it becomes an invalid substitution. The
     BRAND-3 pulse it timed is retired — Blueprint has no idle motion. */
  --motion-brand-pulse: var(--m-impact) var(--ease-out);

  /* ================================================================
     Blueprint — the cyanotype print (dark). The paper/ink/line/grid
     vocabulary the drawing primitives read directly.
     ================================================================ */
  --paper: #123a63;
  --paper-2: #0e2f52;
  --ink: #e6eef7;
  --ink-2: #b9c6d8;
  /* DS-19: the canvas started --ink-3 at rgba(230,238,247,.55), which
     composites to #879db4 on --paper and measures 4.07:1 — below the small-text
     floor. This is the same colour taken to .62 and stated opaquely, so the
     gate measures what a reader actually sees: 4.81:1 on --paper, 5.67:1 on
     --paper-2. */
  --ink-3: #95aabf;
  --line: rgba(230, 238, 247, 0.8);
  --line-2: rgba(230, 238, 247, 0.35);
  --grid-fine: rgba(230, 238, 247, 0.018);
  --grid-mid: rgba(230, 238, 247, 0.03);
  --grid-heavy: rgba(230, 238, 247, 0.05);

  /* The highlighter — the ONE accent. Solid marker on cyanotype. */
  --hi-fill: #fcee0a;
  --hi-line: #fcee0a;
  --hi-text: #fcee0a;
  --hi-ink: #4a4a10;
  --hi-row: rgba(252, 238, 10, 0.14);

  /* Primary button and the "won" fill: ink laid down solid. */
  --solid: rgba(230, 238, 247, 0.9);
  --solid-ink: #123a63;

  /* The overlay tape's paper. The reading contract is enforced on
     --ovl-surface below, which is the token HudPanel composites. */
  --tape-bg: rgba(18, 58, 99, 0.9);

  /* The sheet: a three-weight drafting grid at a hint, a faint grain, and a
     plain border set in from the edge. Fine every 8 px, medium every 40,
     heavy every 80 — proportions, not decoration. */
  --paper-grid:
    linear-gradient(var(--grid-heavy) 1px, transparent 1px),
    linear-gradient(90deg, var(--grid-heavy) 1px, transparent 1px),
    linear-gradient(var(--grid-mid) 1px, transparent 1px),
    linear-gradient(90deg, var(--grid-mid) 1px, transparent 1px),
    linear-gradient(var(--grid-fine) 1px, transparent 1px),
    linear-gradient(90deg, var(--grid-fine) 1px, transparent 1px);
  --paper-grid-size: 80px 80px, 80px 80px, 40px 40px, 40px 40px, 8px 8px, 8px 8px;
  --grain-opacity: 0.035;
  --sheet-inset: 12px;

  /* ---- semantic: surfaces (blueprint: cyanotype paper) ----
     A table, note, form or data block sits on SOLID paper and is bounded by a
     line, so --surface-2 is the paper itself rather than a lifted plane. */
  --surface-0: #123a63;
  --surface-1: #0e2f52;
  --surface-2: #123a63;
  --surface-3: #164470;
  --border: #56718f;
  --border-strong: #7b93ad;

  /* ---- semantic: text ---- */
  --text: #e6eef7;
  --text-muted: #b9c6d8;
  --text-dim: #95aabf;
  --text-faint: #718ba6;
  --text-bright: #ffffff;

  /* ---- semantic: brand. ONE colour: the highlighter. --accent-2 is not a
     second hue any more, it is the leader-stroke weight of the same one. ---- */
  --accent: #fcee0a;
  --accent-2: #d8cc3a;
  --accent-bright: #fdf457;
  --accent-gold: #d9c04a;
  --accent-contrast: #4a4a10;

  /* ---- semantic: status (hue family stable across themes) ----
     DS-19: danger is lighter than the crimson it replaces. Not a
     hue change — it is still the cool red, still separated from the R pip's
     brick — but cyanotype paper is a mid-luminance blue rather than near
     black, and #ff2450 measured 3.10:1 on it against the 4.5 floor
     design-system.test.ts holds every status hue to. */
  --status-good: #06d6a0;
  --status-warn: #ff9e1b;
  --status-danger: #ff7b85;

  /* ---- semantic: material and interaction ----
     Blueprint materials are flat. A panel is paper with a line around it; a
     gradient would read as a lit plane, which a drawing does not have. */
  --material-canvas: var(--surface-0);
  --material-panel: var(--surface-2);
  --material-raised: var(--surface-3);
  --material-inset: var(--surface-1);
  --material-glass: var(--tape-bg);

  --signal-brand: var(--accent);
  --signal-select: var(--accent);
  --signal-cool: var(--data-teal);
  --signal-muted: var(--border);

  --edge-quiet: var(--border);
  --edge-strong: var(--border-strong);
  --edge-inset: inset 0 1px 0 var(--wash-06);
  /* DS-19: no ambient glow anywhere. What was a bloom is now a hairline — the
     tokens survive so every consumer keeps a valid substitution. */
  --glow-brand: 0 0 0 1px rgb(from var(--signal-brand) r g b / 0.55);
  --glow-select: 0 0 0 1px rgb(from var(--signal-select) r g b / 0.5);
  --glow-cool: 0 0 0 1px rgb(from var(--signal-cool) r g b / 0.45);

  --grid-line: var(--grid-mid);
  --grid-technical:
    linear-gradient(90deg, var(--grid-line) 1px, transparent 1px),
    linear-gradient(0deg, var(--grid-line) 1px, transparent 1px);
  --state-hover: var(--wash-06);
  --state-pressed: var(--wash-12);
  --state-selected: var(--hi-row);
  --state-disabled: var(--wash-04);

  /* ---- mana DISCS (INVARIANT — a colour identity, not a theme choice) ----
     A blue pip that turned yellow in the light theme would stop meaning
     anything, so these never appear in a theme override. Each disc carries its
     own ink for the same reason: the pip's contrast cannot be left to whatever
     surface it happens to sit on. TABLE-4.

     This namespace is the printed pip — a disc with ink on it — and ManaPips
     is its consumer. A colour drawn ON a surface (a type glyph, a colour dot,
     a curve bar, a ring slice) is a different job: the B disc is near-black
     and vanishes on a dark panel, so those read the --mana-*-mark variants
     further down, tuned per theme exactly as --rarity-*-text is. The two
     namespaces used to be one name declared twice in this block, and the
     later (mark) values won the cascade, so every saturated disc's light ink
     was measured over a pastel: U 2.0:1, R 2.4:1, G 1.9:1.
     scripts/check-contrast.mjs now gates each disc against the ink
     ManaPips.svelte puts on it. */
  --mana-w: #f6efd8;
  --mana-u: #2b8fd6;
  --mana-b: #34303a;
  --mana-r: #e5533c;
  /* Darkened from #37a86b, which held the light ink at only 2.88:1. */
  --mana-g: #2b975c;
  --mana-c: #b9bfcb;
  --mana-s: #c8dbe8;
  /* Generic/variable discs: the neutral stone the numbers sit on. */
  --mana-generic: #cbc5b8;
  /* DS-22, 2026-09-06: the disc letter is text held to a 4.5:1 floor, and
     --mana-ink-light has no headroom to carry U, R or G there (even pure
     white only reaches 3.50 / 3.73 / 3.69 on those fills) — so dark ink goes
     on every disc except B (W, C, S, generic, U, R, G); B's fill is dark
     enough that dark ink fails and light ink is the one that holds. See
     ManaPips.svelte's DARK_INK set, which this follows, not restates. */
  --mana-ink-dark: #17151b;
  --mana-ink-light: #fbfaf7;
  /* DS-19: every disc is drawn with a hairline of the sheet's own ink, so the
     white pip has an edge on paper instead of dissolving into it. It follows
     the theme; the disc fill does not. */
  --mana-ring: 0 0 0 1px var(--ink);

  /* ---- neutral washes (white on dark themes, black on light) ---- */
  --wash-01: rgba(255, 255, 255, 0.01);
  --wash-02: rgba(255, 255, 255, 0.02);
  --wash-03: rgba(255, 255, 255, 0.03);
  --wash-04: rgba(255, 255, 255, 0.04);
  --wash-05: rgba(255, 255, 255, 0.05);
  --wash-06: rgba(255, 255, 255, 0.06);
  --wash-08: rgba(255, 255, 255, 0.08);
  --wash-10: rgba(255, 255, 255, 0.1);
  --wash-12: rgba(255, 255, 255, 0.12);
  --wash-15: rgba(255, 255, 255, 0.15);
  --wash-18: rgba(255, 255, 255, 0.18);
  --wash-20: rgba(255, 255, 255, 0.2);

  /* ---- scrims/shadows (INVARIANT) ---- */
  --shade-15: rgba(0, 0, 0, 0.15);
  --shade-20: rgba(0, 0, 0, 0.2);
  --shade-25: rgba(0, 0, 0, 0.25);
  --shade-30: rgba(0, 0, 0, 0.3);
  --shade-40: rgba(0, 0, 0, 0.4);
  --shade-45: rgba(0, 0, 0, 0.45);
  --shade-50: rgba(0, 0, 0, 0.5);
  --shade-55: rgba(0, 0, 0, 0.55);
  --shade-60: rgba(0, 0, 0, 0.6);
  --shade-65: rgba(0, 0, 0, 0.65);
  --shade-70: rgba(0, 0, 0, 0.7);
  --shade-80: rgba(0, 0, 0, 0.8);

  /* ---- overlay (in-match HUD) sub-namespace: the escape hatch that
     lets a theme darken the overlay independently of app surfaces.
     --ovl-border derives from the accent and follows every theme.

     DS-19: --ovl-surface carries no alpha of its own. HudPanel already scales
     it by the panel opacity the player chose, and the cyanotype paper is much
     lighter than the near-black panel it replaces — a second alpha on top of
     that put --ovl-text below 4.5:1 over a fully bright Arena board at the
     opacity floor. The token is the deepest cyanotype the tape is drawn in;
     the translucency is still entirely the player's dial. ---- */
  --ovl-surface: #0c2642;
  --ovl-surface-strong: #0a1f37;
  --ovl-border: rgb(from var(--accent) r g b / 0.35);
  --ovl-text: var(--text);
  /* DS-6: secondary overlay text is brighter than the app's --text-dim on
     purpose. It is read through a translucent panel over an unknown board, so
     it is tuned to hold 3:1 against the panel composited over a fully bright
     backdrop at the lowest selectable opacity. */
  --ovl-text-dim: #c8d3e2;
  --ovl-fade: rgba(10, 31, 55, 0.95);
  /* DS-6: the one OPAQUE overlay fill. A saturated mid-luminance hue (the
     accent, the danger red) cannot reach 3:1 against a translucent panel over
     an arbitrary backdrop at any usable opacity, so overlay emphasis that must
     be read — the win-expectancy value, the lethal indicator — sits on this
     instead of on the board. */
  --ovl-chip: #0b2440;

  /* ---- mana MARKS: the legibility variant of the discs above, for a colour
     drawn on a surface rather than a disc with ink on it — a type glyph, a
     colour dot, a curve bar, a ring slice, an "open colours" swatch. The mana
     counterpart of --rarity-*-text: the same identity, re-tuned per theme so
     it holds 3:1 (WCAG 1.4.11) on --surface-0 and --surface-2, which
     scripts/check-contrast.mjs gates in both themes. On the Tape a mark is
     drawn against --ovl-chip and nothing else — a ring of it round a dot, a
     tile of it under a letter or glyph — because over the translucent panel
     at the opacity floor even these values land at 1.1–2.9:1 (measured
     2026-09-04, only dark W passed), so the gate measures each mark on the
     chip as well. --mana-gold-mark is the multicolour identity (DeckTracker)
     and has no disc, because a printed cost never has a gold pip. Never use
     these on a pip; never use for decoration. ---- */
  --mana-w-mark: #f5efd0;
  --mana-u-mark: #7fb6ef;
  /* Lightened from #7a6a99, which was tuned against a near-black panel and
     measures 2.40:1 on cyanotype paper — the dark print here is a mid blue,
     not a near-black. Same desaturated purple identity, one step up. */
  --mana-b-mark: #9084b4;
  --mana-r-mark: #f0837f;
  --mana-g-mark: #86c98e;
  --mana-gold-mark: #d4af37;
  --mana-c-mark: #b8b2a6;

  /* ---- card rarity identity: anchors INVARIANT; -text variants are
     legibility-tuned per theme. ---- */
  --rarity-mythic: #e8863c;
  --rarity-mythic-text: #fab387;
  --rarity-rare: #d4af37;
  --rarity-uncommon: #8a9bb0;
  --rarity-uncommon-text: #94e2d5;
  --rarity-common: #8fa0b6;

  /* ---- categorical data hues (charts/tags) ----
     A chart SERIES belongs here and not in the brand roles. Blueprint keeps
     exactly three, retuned to drafting-pencil tones so they read as plotted
     data rather than as a second accent, and they stay mutually distinct in
     both prints. */
  --data-teal: #7fc9c0;
  --data-peach: #e0b184;
  --data-magenta: #c2a2d6;

  /* ---- app background: paper. No radial glow, no scanlines, nothing that
     moves or blooms. The sheet's grid and grain are drawn by the `Sheet`
     primitive, not smuggled into the window background. ---- */
  --bg-app: var(--paper);
}

/* Blueprint dark — the cyanotype print, and the :root default above. An
   explicit alias so data-theme="blueprint-dark" keeps working. */
[data-theme="blueprint-dark"] {
}

/* Blueprint light — the sepia print. The same drawing on warm paper: ink
   darkens, the highlighter becomes a translucent marker stroke with an ochre
   leader line, and washes flip to black. Mana/rarity anchors and black scrims
   inherit :root (invariant); the -text legibility variants and data hues are
   darkened for paper. */
[data-theme="blueprint-light"] {
  --texture-opacity: 0.04;
  --ornament-opacity: 0.24;

  --paper: #ede3cb;
  --paper-2: #e4d8ba;
  --ink: #211e19;
  --ink-2: #4f4a40;
  /* DS-19: the canvas started --ink-3 at #857c67, which measures 3.24:1 on
     --paper — below the small-text floor. Darkened until small text passes on
     every paper in the set, including the washed #d9cdb1 the setup dialog
     composites, which is darker than either --paper or --paper-2 and is what
     the lobby spec's axe pass actually reads: 6.27:1 on --paper, 5.66:1 on
     --paper-2, 5.09:1 on the dialog's wash. */
  --ink-3: #575044;
  --line: rgba(33, 30, 25, 0.78);
  --line-2: rgba(33, 30, 25, 0.32);
  --grid-fine: rgba(110, 80, 40, 0.03);
  --grid-mid: rgba(110, 80, 40, 0.05);
  --grid-heavy: rgba(110, 80, 40, 0.085);

  /* The highlighter on paper: a translucent marker stroke, an ochre leader
     line, and a dark ochre for callout TEXT. --hi-line started at #a67c00 and
     --hi-text at #7a5a00; both are darkened here because they carry the
     interactive accent role, which is measured at 4.5:1 (text) and 3:1
     (non-text graphic) against every paper in the set. */
  --hi-fill: rgba(250, 232, 0, 0.62);
  --hi-line: #9c7400;
  --hi-text: #6f5200;
  --hi-ink: #1a1a10;
  --hi-row: rgba(250, 232, 0, 0.28);

  --solid: #211e19;
  --solid-ink: #ede3cb;

  --tape-bg: rgba(240, 231, 210, 0.93);

  --surface-0: #ede3cb;
  --surface-1: #e4d8ba;
  --surface-2: #ede3cb;
  --surface-3: #ded1af;
  --border: #a08f6d;
  --border-strong: #7d6f52;

  --text: #211e19;
  --text-muted: #4f4a40;
  --text-dim: #575044;
  --text-faint: #7a7261;
  /* --text-bright stays white: pop text/dots on colored or dark fills. */

  --accent: #6f5200;
  --accent-2: #9c7400;
  --accent-bright: #8a6600;
  --accent-gold: #8a6a12;
  --accent-contrast: #ede3cb;

  /* Darkened just enough to clear WCAG AA (4.5:1) as SMALL text on every paper
     in the set, down to the washed #d9cdb1 the setup dialog composites — the
     surface the lobby spec's axe pass reads, and a whole step darker than
     sepia --paper. */
  --status-good: #0a5f47;
  --status-warn: #7a4700;
  --status-danger: #a51730;

  --wash-01: rgba(0, 0, 0, 0.01);
  --wash-02: rgba(0, 0, 0, 0.02);
  --wash-03: rgba(0, 0, 0, 0.03);
  --wash-04: rgba(0, 0, 0, 0.04);
  --wash-05: rgba(0, 0, 0, 0.05);
  --wash-06: rgba(0, 0, 0, 0.06);
  --wash-08: rgba(0, 0, 0, 0.08);
  --wash-10: rgba(0, 0, 0, 0.1);
  --wash-12: rgba(0, 0, 0, 0.12);
  --wash-15: rgba(0, 0, 0, 0.15);
  --wash-18: rgba(0, 0, 0, 0.18);
  --wash-20: rgba(0, 0, 0, 0.2);

  /* Mirrored DS-6 tuning: a pale tape over Arena's dark board lightens, so
     secondary text darkens to keep the same 3:1 floor. */
  --ovl-surface: #f0e7d2;
  --ovl-surface-strong: #f6efdf;
  --ovl-text: #211e19;
  --ovl-text-dim: #443f36;
  --ovl-fade: rgba(240, 231, 210, 0.95);
  --ovl-chip: #f3ead4;

  --rarity-mythic-text: #a0491b;
  --rarity-uncommon-text: #0c6155;
  /* Mana marks darkened for paper: each holds at least 3:1 on every light
     surface (the gate asks 3:1 on surface-0 and surface-2, and on the light
     tape's --ovl-chip). W is a parchment ink rather than a cream, because a
     cream on paper is not a mark. */
  --mana-w-mark: #857324;
  --mana-u-mark: #2a6fc0;
  --mana-b-mark: #574b73;
  --mana-r-mark: #c0392b;
  --mana-g-mark: #23864a;
  --mana-gold-mark: #7d5f00;
  --mana-c-mark: #6e6b64;
  --data-teal: #0e6a5f;
  --data-peach: #8a5a2b;
  --data-magenta: #62397f;
}
