/* ============================================================
   jargan-vibe-palette.css  —  CANONICAL VIBE PALETTE (single source of truth)

   Each cross-surface vibe is defined ONCE here as semantic --v-* variables.
   The SPA (renderer/jargan-reskin-vibes.css) and the Blazor admin
   (Jargan.Client/wwwroot/css/jargan-semantic-tokens.css) both MAP their own
   token vocabularies onto these vars, so a vibe + the brand colour live in one
   place and cannot drift between surfaces.

   THIS IS THE ONLY COPY in git. The SPA serves it directly. The Blazor admin's
   copy (Jargan.Client/wwwroot/css/jargan-vibe-palette.css) is GENERATED from this
   file at build/publish by the SyncVibePalette target in Jargan.Client.csproj and
   is gitignored — so there is no second source to drift. Edit only this file.

   BRAND RULE: --v-accent-brand is JARGAN Traffic Orange on EVERY vibe (the
   signal never changes colour). --v-accent-2 is the vibe's secondary character
   (e.g. lime for carbon-lime, sienna for sepia) — never the brand signal.
   Token name globs are written ip-gray / bg-text (never --x-(asterisk)/--y) so
   a comment can never contain a comment-closer.

   STRATEGIC DIVERGENCE (identical by default, diverge only on purpose):
   The two surfaces are identical unless you deliberately diverge ONE token on
   ONE surface. Accidental drift is impossible (the Blazor copy is build-
   generated from this file). To diverge intentionally, two idioms:
     1. One-off: override the token in that surface's MAP file with a literal +
        a comment (SPA: jargan-reskin-vibes.css / Blazor: jargan-semantic-tokens.css).
     2. Catalogued: define a surface variant HERE, consumed via a fallback in the
        map. Each map reads var(--v-TOKEN--SURFACE, var(--v-TOKEN)) — so a surface
        uses its variant if defined, else the shared value. Surfaces: --spa, --admin.
        Worked example: --v-accent-brand is wired through this fallback in both
        maps. To make ONLY the admin brand warmer, uncomment a per-vibe override:
           --v-accent-brand--admin: #ff7a30;   (admin diverges; SPA stays shared)
        Leave it undefined and both surfaces stay identical. Any --v-* token can
        diverge the same way. NEVER hand-edit a generated copy to diverge.
   ============================================================ */

/* ============================================================
   NEUTRAL BASE (bare :root) — BU-418.
   The --v-* tokens used to exist ONLY under the four named-vibe blocks
   (:root[data-theme="..."]), so any surface viewed with no named vibe active
   (the app default theme sets data-theme to dark/light or removes it, none of
   which are named vibes) rendered UNSTYLED: transparent cards, no borders, no
   accent. This bare :root supplies a vibe-NEUTRAL default for every token so
   vibe-tokenized surfaces always render styled.

   Character: clean LIGHT COOL-NEUTRAL — near-white canvas, cool-gray surfaces
   and borders, near-black cool-gray ink. Deliberately NOT warm cream (sepia)
   and NOT dark (carbon). The four named vibes override this entirely because
   :root[data-theme="..."] outranks bare :root on specificity; this block is
   placed FIRST regardless so source order never matters.

   AA verified vs surface #f4f6f8 / canvas #fbfcfd: ink 15.3:1, ink-dim 8.7:1,
   ink-muted 5.6:1, accent-brand 4.8:1, on-accent(white)/accent 5.2:1, all
   status colours and stage labels at or above 4.5:1.
   ============================================================ */
:root {
  --v-canvas:         #e7ebf0;
  --v-surface:        #ffffff;
  --v-surface-raised: #ffffff;
  --v-surface-sunken: #dde3ea;
  --v-hover:          #f0f3f7;
  --v-ink:            #1a1f24;
  --v-ink-dim:        #3f4750;
  --v-ink-muted:      #5a636d;
  --v-ink-rgb:        26, 31, 36;
  --v-surface-rgb:    255, 255, 255;
  --v-line:           #e1e6ea;
  --v-line-strong:    #c2cad1;
  --v-line-subtle:    #edf0f3;
  --v-border:         #d3d9df;
  --v-border-strong:  #9aa3ad;

  /* BRAND SIGNAL — JARGAN Traffic Orange, AA-safe shade for the light neutral. ONE place. */
  --v-accent-brand:      #bd4500;
  --v-accent-brand-aa:   #bd4500;
  --v-on-accent:         #ffffff;
  --v-accent-brand-soft: rgba(189, 69, 0, 0.10);
  --v-accent-brand-tint: rgba(189, 69, 0, 0.06);
  /* Secondary character (NON-brand): a cool slate/steel, never orange. */
  --v-accent-2:          #4a6172;

  --v-success: #2f7d3a;
  --v-warning: #955800;
  --v-error:   #c0331f;
  --v-info:    #1f6b8f;

  /* Categorical chart ramp + funnel-stage marks — neutral-leaning but distinct, AA on surface.
     chart-1 is the brand orange (allowed per the card). */
  --v-chart-1: #bd4500; --v-chart-2: #1f6b8f; --v-chart-3: #2f7d3a; --v-chart-4: #7a4ea8;
  --v-chart-5: #955800; --v-chart-6: #4a6172; --v-chart-7: #b03a6a; --v-chart-8: #5a636d;
  --v-stage-awareness:     #1f6b8f;
  --v-stage-consideration: #7a4ea8;
  --v-stage-decision:      #2f7d3a;
  --v-stage-retention:     #955800;
  /* Stage NAME labels: AA on the neutral surface. */
  --v-stage-label-awareness:     #1f6b8f;
  --v-stage-label-consideration: #7a4ea8;
  --v-stage-label-decision:      #2f7d3a;
  --v-stage-label-retention:     #955800;

  /* BU-408 (F-059): medium colours default to categorical chart marks so they recolour per vibe. */
  --v-medium-photo: var(--v-chart-1);
  --v-medium-video: var(--v-chart-2);
  --v-medium-copy:  var(--v-chart-3);
  /* BU-408 (F-059): sequential heat/coverage ramp (pale cool-gray -> deep brand for this neutral base). */
  --v-scale-0: #eef1f4;
  --v-scale-1: #d9c3b0;
  --v-scale-2: #d98a5a;
  --v-scale-3: #c25e22;
  --v-scale-4: #8a3500;
}

/* Carbon Lime — cool dark: charcoal surfaces, JARGAN-orange signal, lime secondary. */
:root[data-theme="carbon-lime"] {
  --v-canvas:         #14171a;
  --v-surface:        #1c2024;
  --v-surface-raised: #262b30;
  --v-surface-sunken: #14171a;
  --v-hover:          #2c3238;
  --v-ink:            #eef1f4;
  --v-ink-dim:        #b8c0c8;
  --v-ink-muted:      #8a949e;
  --v-ink-rgb:        238, 241, 244;
  --v-surface-rgb:    28, 32, 36;
  --v-line:           rgba(184, 192, 200, 0.14);
  --v-line-strong:    rgba(184, 192, 200, 0.22);
  --v-line-subtle:    rgba(184, 192, 200, 0.08);
  --v-border:         #3a424a;
  --v-border-strong:  #5a646e;

  /* BRAND SIGNAL — JARGAN Traffic Orange, on-dark shade for charcoal. ONE place. */
  --v-accent-brand:      #ff6b1a;
  --v-accent-brand-aa:   #ff8a4d;
  --v-on-accent:         #1c1206;
  --v-accent-brand-soft: rgba(255, 107, 26, 0.12);
  --v-accent-brand-tint: rgba(255, 107, 26, 0.08);
  /* Secondary vibe character (NON-brand): lime. */
  --v-accent-2:          #b6f24a;

  --v-success: #66e08a;
  --v-warning: #ffcc55;
  --v-error:   #ff6b6b;
  --v-info:    #6ad0ff;

  /* Categorical chart ramp + funnel-stage marks (vibe character; not the signal). */
  --v-chart-1: #b6f24a; --v-chart-2: #66e08a; --v-chart-3: #ffcc55; --v-chart-4: #6ad0ff;
  --v-chart-5: #b8c0c8; --v-chart-6: #9be86a; --v-chart-7: #8fd4c0; --v-chart-8: #7a848e;
  --v-stage-awareness:     #b6f24a;
  --v-stage-consideration: #6ad0ff;
  --v-stage-decision:      #66e08a;
  --v-stage-retention:     #ffcc55;
  /* Stage NAME labels: AA against the surface (bright = fine on charcoal). */
  --v-stage-label-awareness:     #b6f24a;
  --v-stage-label-consideration: #6ad0ff;
  --v-stage-label-decision:      #66e08a;
  --v-stage-label-retention:     #ffcc55;

  /* BU-408 (F-059): medium colours default to categorical chart marks so they recolour per vibe. */
  --v-medium-photo: var(--v-chart-1);
  --v-medium-video: var(--v-chart-2);
  --v-medium-copy:  var(--v-chart-3);
  /* BU-408 (F-059): sequential heat/coverage ramp (dim->bright lime for this charcoal vibe). */
  --v-scale-0: #232a30;
  --v-scale-1: #3f4a33;
  --v-scale-2: #687a3a;
  --v-scale-3: #93c247;
  --v-scale-4: #b6f24a;
}

/* Sepia Ledger — warm light: cream paper, JARGAN-orange signal, sienna secondary. */
:root[data-theme="sepia-ledger"] {
  --v-canvas:         #faf6ee;
  --v-surface:        #f1e9da;
  --v-surface-raised: #fffaf0;
  --v-surface-sunken: #e8ddc8;
  --v-hover:          #efe6d4;
  --v-ink:            #2e2519;
  --v-ink-dim:        #5e5038;
  --v-ink-muted:      #6b5d45;
  --v-ink-rgb:        46, 37, 25;
  --v-surface-rgb:    241, 233, 218;
  --v-line:           #d8c9ad;
  --v-line-strong:    #6b5d49;
  --v-line-subtle:    #e3d8c2;
  --v-border:         #d8c9ad;
  --v-border-strong:  #6b5d49;

  /* BRAND SIGNAL — JARGAN Traffic Orange, AA-safe shade for cream. ONE place. */
  --v-accent-brand:      #bd4500;
  --v-accent-brand-aa:   #bd4500;
  --v-on-accent:         #ffffff;
  --v-accent-brand-soft: rgba(189, 69, 0, 0.10);
  --v-accent-brand-tint: rgba(189, 69, 0, 0.06);
  /* Secondary vibe character (NON-brand): burnt sienna. */
  --v-accent-2:          #b5532a;

  --v-success: #51601f;
  --v-warning: #b06410;
  --v-error:   #a8321f;
  --v-info:    #51601f;

  --v-chart-1: #b5532a; --v-chart-2: #51601f; --v-chart-3: #b06410; --v-chart-4: #6b5d49;
  --v-chart-5: #8a4e0c; --v-chart-6: #c98a4a; --v-chart-7: #7a2e14; --v-chart-8: #8a7c60;
  --v-stage-awareness:     #b5532a;
  --v-stage-consideration: #51601f;
  --v-stage-decision:      #b06410;
  --v-stage-retention:     #6b5d49;
  /* Stage NAME labels: darker, AA on cream. */
  --v-stage-label-awareness:     #9a3f1c;
  --v-stage-label-consideration: #51601f;
  --v-stage-label-decision:      #8a4e0c;
  --v-stage-label-retention:     #5e503c;

  /* BU-408 (F-059): medium colours default to categorical chart marks so they recolour per vibe. */
  --v-medium-photo: var(--v-chart-1);
  --v-medium-video: var(--v-chart-2);
  --v-medium-copy:  var(--v-chart-3);
  /* BU-408 (F-059): sequential heat/coverage ramp (pale cream -> deep sienna for this light vibe). */
  --v-scale-0: #f1e4cc;
  --v-scale-1: #e0c49a;
  --v-scale-2: #cf9a5f;
  --v-scale-3: #b5532a;
  --v-scale-4: #7a2e14;
}

/* Harbor Night — deep navy: midnight-blue surfaces, JARGAN-orange signal, warm-sand secondary. */
:root[data-theme="harbor-night"] {
  --v-canvas:         #060a18;
  --v-surface:        #131d33;
  --v-surface-raised: #1e2b45;
  --v-surface-sunken: #060a18;
  --v-hover:          #26334f;
  --v-ink:            #f2ede3;
  --v-ink-dim:        #d8d2be;
  --v-ink-muted:      #9aa0ad;
  --v-ink-rgb:        242, 237, 227;
  --v-surface-rgb:    19, 29, 51;
  --v-line:           rgba(242, 237, 227, 0.14);
  --v-line-strong:    rgba(242, 237, 227, 0.22);
  --v-line-subtle:    rgba(242, 237, 227, 0.08);
  --v-border:         #34415c;
  --v-border-strong:  #4e5b78;

  /* BRAND SIGNAL — JARGAN Traffic Orange, on-dark shade for navy. ONE place. */
  --v-accent-brand:      #ff6b1a;
  --v-accent-brand-aa:   #ff8a4d;
  --v-on-accent:         #1c1206;
  --v-accent-brand-soft: rgba(255, 107, 26, 0.12);
  --v-accent-brand-tint: rgba(255, 107, 26, 0.08);
  /* Secondary vibe character (NON-brand): warm sand/gold. */
  --v-accent-2:          #f3cd80;

  --v-success: #5fd98a;
  --v-warning: #ffc94d;
  --v-error:   #ff6b6b;
  --v-info:    #6ab8ff;

  /* Categorical chart ramp + funnel-stage marks (vibe character; not the signal). */
  --v-chart-1: #f3cd80; --v-chart-2: #7fb0d4; --v-chart-3: #e3d6bf; --v-chart-4: #5fd98a;
  --v-chart-5: #6ab8ff; --v-chart-6: #6ad0a0; --v-chart-7: #d4a5c8; --v-chart-8: #a0aab8;
  --v-stage-awareness:     #f3cd80;
  --v-stage-consideration: #7fb0d4;
  --v-stage-decision:      #5fd98a;
  --v-stage-retention:     #ffc94d;
  /* Stage NAME labels: AA against the surface (bright = fine on navy). */
  --v-stage-label-awareness:     #f3cd80;
  --v-stage-label-consideration: #7fb0d4;
  --v-stage-label-decision:      #5fd98a;
  --v-stage-label-retention:     #ffc94d;

  /* BU-408 (F-059): medium colours default to categorical chart marks so they recolour per vibe. */
  --v-medium-photo: var(--v-chart-1);
  --v-medium-video: var(--v-chart-2);
  --v-medium-copy:  var(--v-chart-3);
  /* BU-408 (F-059): sequential heat/coverage ramp (dim navy -> warm sand for this navy vibe). */
  --v-scale-0: #1a2540;
  --v-scale-1: #43506e;
  --v-scale-2: #8a8c80;
  --v-scale-3: #d6b673;
  --v-scale-4: #f3cd80;
}

/* Estuary — deep blue→green: navy canvas where water meets shore, cool-pale ink,
   estuary-green secondary. From the Coolors blue→green ramp (Yale Blue → Mindaro).
   JARGAN orange preserved. All text AA-computed vs --v-surface #122436 (lowest 5.68:1). */
:root[data-theme="estuary"] {
  --v-canvas:         #08131f;
  --v-surface:        #122436;
  --v-surface-raised: #1c3145;
  --v-surface-sunken: #08131f;
  --v-hover:          #243f54;
  --v-ink:            #eef2ec;
  --v-ink-dim:        #c4cec2;
  --v-ink-muted:      #93a39c;
  --v-ink-rgb:        238, 242, 236;
  --v-surface-rgb:    18, 36, 54;
  --v-line:           rgba(238, 242, 236, 0.14);
  --v-line-strong:    rgba(238, 242, 236, 0.22);
  --v-line-subtle:    rgba(238, 242, 236, 0.08);
  --v-border:         #2e4458;
  --v-border-strong:  #486074;

  /* BRAND SIGNAL — JARGAN Traffic Orange, on-dark shade. ONE place. */
  --v-accent-brand:      #ff6b1a;
  --v-accent-brand-aa:   #ff8a4d;
  --v-on-accent:         #1c1206;
  --v-accent-brand-soft: rgba(255, 107, 26, 0.12);
  --v-accent-brand-tint: rgba(255, 107, 26, 0.08);
  /* Secondary vibe character (NON-brand): estuary green (Cambridge/Mindaro). */
  --v-accent-2:          #b3d98f;

  --v-success: #5fd98a;
  --v-warning: #ffc94d;
  --v-error:   #ff6b6b;
  --v-info:    #6ab8ff;

  /* Categorical chart ramp + funnel-stage marks — blue→green palette family, AA on surface. */
  --v-chart-1: #b3d98f; --v-chart-2: #5fb0c0; --v-chart-3: #cbdf90; --v-chart-4: #7fb0d4;
  --v-chart-5: #6ab8ff; --v-chart-6: #6ad0a0; --v-chart-7: #a8c98c; --v-chart-8: #9aa8b5;
  --v-stage-awareness:     #b3d98f;
  --v-stage-consideration: #7fb0d4;
  --v-stage-decision:      #6ad0a0;
  --v-stage-retention:     #ffc94d;
  --v-stage-label-awareness:     #b3d98f;
  --v-stage-label-consideration: #7fb0d4;
  --v-stage-label-decision:      #6ad0a0;
  --v-stage-label-retention:     #ffc94d;

  /* BU-408 (F-059): medium colours default to categorical chart marks so they recolour per vibe. */
  --v-medium-photo: var(--v-chart-1);
  --v-medium-video: var(--v-chart-2);
  --v-medium-copy:  var(--v-chart-3);
  /* BU-408 (F-059): sequential heat/coverage ramp (deep navy -> estuary green for this blue->green vibe). */
  --v-scale-0: #122436;
  --v-scale-1: #2f5560;
  --v-scale-2: #5a8a78;
  --v-scale-3: #8cc088;
  --v-scale-4: #b3d98f;
}

/* ── BU-532 FRESH PROOF VIBES — authored blind for the /plan/generator gate run. ──
   Moss Terminal: near-black moss-green canvas, phosphor-pale ink, fern secondary.
   JARGAN orange preserved (on-dark shade). Text AA vs --v-surface #17211a. */
:root[data-theme="moss-terminal"] {
  --v-canvas:         #0b120d;
  --v-surface:        #17211a;
  --v-surface-raised: #212e24;
  --v-surface-sunken: #0b120d;
  --v-hover:          #2a382d;
  --v-ink:            #eaf2e6;
  --v-ink-dim:        #ccd8c5;
  --v-ink-muted:      #96a493;
  --v-ink-rgb:        234, 242, 230;
  --v-surface-rgb:    23, 33, 26;
  --v-line:           rgba(234, 242, 230, 0.14);
  --v-line-strong:    rgba(234, 242, 230, 0.22);
  --v-line-subtle:    rgba(234, 242, 230, 0.08);
  --v-border:         #33422f;
  --v-border-strong:  #4c5e47;
  --v-accent-brand:      #ff6b1a;
  --v-accent-brand-aa:   #ff8a4d;
  --v-on-accent:         #1c1206;
  --v-accent-brand-soft: rgba(255, 107, 26, 0.12);
  --v-accent-brand-tint: rgba(255, 107, 26, 0.08);
  --v-accent-2:          #9fd68a;
  --v-success: #7ede9a;
  --v-warning: #f0c65f;
  --v-error:   #ff7d70;
  --v-info:    #7cc3f0;
  --v-chart-1: #9fd68a; --v-chart-2: #7cc3f0; --v-chart-3: #d9d2a8; --v-chart-4: #7ede9a;
  --v-chart-5: #b8a7e0; --v-chart-6: #6fd0bb; --v-chart-7: #dba5b5; --v-chart-8: #9aa89a;
  --v-stage-awareness:     #9fd68a;
  --v-stage-consideration: #7cc3f0;
  --v-stage-decision:      #7ede9a;
  --v-stage-retention:     #f0c65f;
  --v-stage-label-awareness:     #9fd68a;
  --v-stage-label-consideration: #7cc3f0;
  --v-stage-label-decision:      #7ede9a;
  --v-stage-label-retention:     #f0c65f;
  --v-medium-photo: var(--v-chart-1);
  --v-medium-video: var(--v-chart-2);
  --v-medium-copy:  var(--v-chart-3);
  --v-scale-0: #16241a;
  --v-scale-1: #2e4630;
  --v-scale-2: #587a53;
  --v-scale-3: #85b374;
  --v-scale-4: #9fd68a;
}

/* Gallery Plaster: light warm greige plaster canvas, near-black ink, terracotta-adjacent
   secondary kept dusty so the JARGAN orange stays the only loud signal. */
:root[data-theme="gallery-plaster"] {
  --v-canvas:         #efeae2;
  --v-surface:        #f7f4ee;
  --v-surface-raised: #fbf9f5;
  --v-surface-sunken: #e7e0d5;
  --v-hover:          #ece6db;
  --v-ink:            #23201c;
  --v-ink-dim:        #514b43;
  --v-ink-muted:      #6f685c;
  --v-ink-rgb:        35, 32, 28;
  --v-surface-rgb:    247, 244, 238;
  --v-line:           rgba(35, 32, 28, 0.14);
  --v-line-strong:    rgba(35, 32, 28, 0.24);
  --v-line-subtle:    rgba(35, 32, 28, 0.07);
  --v-border:         #d4ccbe;
  --v-border-strong:  #b8ae9c;
  --v-accent-brand:      #DD5100;
  --v-accent-brand-aa:   #BD4500;
  --v-on-accent:         #ffffff;
  --v-accent-brand-soft: rgba(221, 81, 0, 0.10);
  --v-accent-brand-tint: rgba(221, 81, 0, 0.06);
  --v-accent-2:          #8a6f52;
  --v-success: #2e7d43;
  --v-warning: #9a6a08;
  --v-error:   #b3362a;
  --v-info:    #2a6a9a;
  --v-chart-1: #8a6f52; --v-chart-2: #5f7d8c; --v-chart-3: #a3865e; --v-chart-4: #2e7d43;
  --v-chart-5: #7c6494; --v-chart-6: #3f8d7a; --v-chart-7: #a05c74; --v-chart-8: #8c8578;
  --v-stage-awareness:     #8a6f52;
  --v-stage-consideration: #5f7d8c;
  --v-stage-decision:      #2e7d43;
  --v-stage-retention:     #9a6a08;
  --v-stage-label-awareness:     #6d5638;
  --v-stage-label-consideration: #466170;
  --v-stage-label-decision:      #235f33;
  --v-stage-label-retention:     #7a5406;
  --v-medium-photo: var(--v-chart-1);
  --v-medium-video: var(--v-chart-2);
  --v-medium-copy:  var(--v-chart-3);
  --v-scale-0: #e7e0d5;
  --v-scale-1: #cbbfa9;
  --v-scale-2: #a3927a;
  --v-scale-3: #7a6a54;
  --v-scale-4: #54473a;
}

/* ==========================================================================
   BU-608 / F3 — dusk + deep-sea migrated onto the --v-* contract.

   These two shipped BEFORE PM-010 and were authored in the older --color-*
   namespace (24 tokens) in jargan-semantic-tokens.css. That namespace has no
   slot for the chart ramp, the funnel-stage marks, or the brand tints, so both
   vibes sat outside the fast gate and their charts/stages never recolored.

   Neutrals, ink ramp and status tints below are carried over VERBATIM from
   those blocks, so the surfaces they already painted are unchanged. Everything
   the old contract lacked (charts, stages, brand tints, borders, scale ramp)
   is newly authored in each vibe's own key: violet for dusk, teal for deep-sea.

   Brand note: both old blocks set --color-accent-strong/-aa to #ff8a4d. In the
   --v-* contract that slot is the SECONDARY VIBE CHARACTER (--v-accent-2), not
   the brand — the brand is --v-accent-brand and must be a sanctioned JARGAN
   orange. So #ff8a4d moves to --v-accent-brand-aa (its correct slot, matching
   harbor-night) and --v-accent-2 becomes the vibe's own hue.
   ========================================================================== */

:root[data-theme="dusk"] {
  --v-canvas:         #16121f;
  --v-surface:        #221b33;
  --v-surface-raised: #2b2240;
  --v-surface-sunken: #1b1528;
  --v-hover:          #312747;
  --v-ink:            #ece8f5;
  --v-ink-dim:        #b6acce;
  --v-ink-muted:      #a59cc0;
  --v-ink-rgb:        236, 232, 245;
  --v-surface-rgb:    34, 27, 51;
  --v-line:           rgba(236, 232, 245, 0.12);
  --v-line-strong:    rgba(236, 232, 245, 0.20);
  --v-line-subtle:    rgba(236, 232, 245, 0.08);
  --v-border:         #3d3355;
  --v-border-strong:  #574a76;

  /* BRAND SIGNAL — JARGAN Traffic Orange, on-dark shade. ONE place. */
  --v-accent-brand:      #ff6b1a;
  --v-accent-brand-aa:   #ff8a4d;
  --v-on-accent:         #1c1206;
  --v-accent-brand-soft: rgba(255, 107, 26, 0.12);
  --v-accent-brand-tint: rgba(255, 107, 26, 0.08);
  /* Secondary vibe character (NON-brand): lilac. */
  --v-accent-2:          #c9a6e8;

  --v-success: #86efac;
  --v-warning: #f0b860;
  --v-error:   #fca5a5;
  --v-info:    #93c5fd;

  /* Categorical chart ramp + funnel-stage marks (vibe character; not the signal). */
  --v-chart-1: #c9a6e8; --v-chart-2: #93c5fd; --v-chart-3: #f0b860; --v-chart-4: #86efac;
  --v-chart-5: #fca5a5; --v-chart-6: #c7d2fe; --v-chart-7: #7fd4c8; --v-chart-8: #b0a8c4;
  --v-stage-awareness:     #c9a6e8;
  --v-stage-consideration: #93c5fd;
  --v-stage-decision:      #86efac;
  --v-stage-retention:     #f0b860;
  /* Stage NAME labels: AA against the surface (bright = fine on plum). */
  --v-stage-label-awareness:     #c9a6e8;
  --v-stage-label-consideration: #93c5fd;
  --v-stage-label-decision:      #86efac;
  --v-stage-label-retention:     #f0b860;

  --v-medium-photo: var(--v-chart-1);
  --v-medium-video: var(--v-chart-2);
  --v-medium-copy:  var(--v-chart-3);
  /* Sequential heat/coverage ramp (dim plum -> lilac). */
  --v-scale-0: #241d33;
  --v-scale-1: #3d3355;
  --v-scale-2: #6b5f85;
  --v-scale-3: #9d8bbd;
  --v-scale-4: #c9a6e8;
}

:root[data-theme="deep-sea"] {
  --v-canvas:         #04161a;
  --v-surface:        #0a2329;
  --v-surface-raised: #0e2e36;
  --v-surface-sunken: #061b20;
  --v-hover:          #123a44;
  --v-ink:            #e0f5f0;
  --v-ink-dim:        #9ec9c4;
  --v-ink-muted:      #6f9b97;
  --v-ink-rgb:        224, 245, 240;
  --v-surface-rgb:    10, 35, 41;
  --v-line:           rgba(120, 230, 220, 0.14);
  --v-line-strong:    rgba(120, 230, 220, 0.22);
  --v-line-subtle:    rgba(120, 230, 220, 0.08);
  --v-border:         #1c4a54;
  --v-border-strong:  #2f6b78;

  /* BRAND SIGNAL — JARGAN Traffic Orange, on-dark shade. ONE place. */
  --v-accent-brand:      #ff6b1a;
  --v-accent-brand-aa:   #ff8a4d;
  --v-on-accent:         #1c1206;
  --v-accent-brand-soft: rgba(255, 107, 26, 0.12);
  --v-accent-brand-tint: rgba(255, 107, 26, 0.08);
  /* Secondary vibe character (NON-brand): aqua. */
  --v-accent-2:          #5fe0d0;

  --v-success: #9be8a0;
  --v-warning: #f0d890;
  --v-error:   #ff9a9a;
  --v-info:    #7fe3ff;

  /* Categorical chart ramp + funnel-stage marks (vibe character; not the signal). */
  --v-chart-1: #5fe0d0; --v-chart-2: #7fe3ff; --v-chart-3: #f0d890; --v-chart-4: #9be8a0;
  --v-chart-5: #ff9a9a; --v-chart-6: #b8c0ff; --v-chart-7: #d0a9e0; --v-chart-8: #8fa8a5;
  --v-stage-awareness:     #5fe0d0;
  --v-stage-consideration: #7fe3ff;
  --v-stage-decision:      #9be8a0;
  --v-stage-retention:     #f0d890;
  /* Stage NAME labels: AA against the surface (bright = fine on deep teal). */
  --v-stage-label-awareness:     #5fe0d0;
  --v-stage-label-consideration: #7fe3ff;
  --v-stage-label-decision:      #9be8a0;
  --v-stage-label-retention:     #f0d890;

  --v-medium-photo: var(--v-chart-1);
  --v-medium-video: var(--v-chart-2);
  --v-medium-copy:  var(--v-chart-3);
  /* Sequential heat/coverage ramp (abyss -> aqua). */
  --v-scale-0: #082c33;
  --v-scale-1: #0f4a54;
  --v-scale-2: #2a7f85;
  --v-scale-3: #6fbdb0;
  --v-scale-4: #b8f0e4;
}

/* ── BU-663 — the two Blazor-selectable themes that had no vibe block. ──
   ThemeService.cs offers 8 themes; pastel-mondrian and instrument-paper had no
   :root[data-theme] block here, so every vibe-tokenized surface (notably
   Layout/ShellSidebar.razor.css) fell through to the neutral base while the
   rest of the page repainted off its own color-token block. These two blocks
   close that gap. Values are NOT invented: the surface/ink/line families are
   lifted verbatim from each theme's already-shipped palette so the sidebar
   matches the content exactly rather than approximately. */

/* Pastel Mondrian — warm cream paper, charcoal-blue ink, Mondrian-block accents.
   Surface/ink/line values copied verbatim from the color-token block for this
   theme in jargan-semantic-tokens.css so the sidebar and the page agree.
   Decorative hues derive from the theme's named Mondrian blocks in
   themes-canonical.css: pm-charcoal #304c61, pm-taupe #a98268, pm-ash #95b4b6,
   pm-coral #da7a7c, pm-sage #9ca89d. All text-bearing tokens AA-verified
   against BOTH surface #fdf6e6 and canvas #f7ead4 (lowest 4.52:1). */
:root[data-theme="pastel-mondrian"] {
  --v-canvas:         #f7ead4;
  --v-surface:        #fdf6e6;
  --v-surface-raised: #fbf0dc;
  --v-surface-sunken: #f1e4cf;
  --v-hover:          #f1e4cf;
  --v-ink:            #304c61;
  --v-ink-dim:        #566774;
  --v-ink-muted:      #586a81;
  --v-ink-rgb:        48, 76, 97;
  --v-surface-rgb:    253, 246, 230;
  --v-line:           #d4c5a8;
  --v-line-strong:    #c2b08a;
  --v-line-subtle:    #e2d4ba;
  --v-border:         #d4c5a8;
  --v-border-strong:  #c2b08a;

  /* BRAND SIGNAL — JARGAN Traffic Orange, deepened one step from the sepia
     shade so it clears AA on this theme's lighter cream AND its canvas. ONE place. */
  --v-accent-brand:      #b34100;
  --v-accent-brand-aa:   #b34100;
  --v-on-accent:         #ffffff;
  --v-accent-brand-soft: rgba(179, 65, 0, 0.10);
  --v-accent-brand-tint: rgba(179, 65, 0, 0.06);
  /* Secondary vibe character (NON-brand): the Mondrian taupe block, AA-deepened. */
  --v-accent-2:          #8a5b3d;

  --v-success: #4f6b52;
  --v-warning: #8f5f18;
  --v-error:   #a6353a;
  --v-info:    #2f6472;

  /* Categorical chart ramp — the Mondrian blocks deepened to AA on cream. */
  --v-chart-1: #8a5b3d; --v-chart-2: #46686c; --v-chart-3: #b03f43; --v-chart-4: #556455;
  --v-chart-5: #304c61; --v-chart-6: #3d6b70; --v-chart-7: #96566a; --v-chart-8: #5a6459;
  /* Funnel-stage marks: the raw pastel blocks (fills, not text). */
  --v-stage-awareness:     #a98268;
  --v-stage-consideration: #95b4b6;
  --v-stage-decision:      #da7a7c;
  --v-stage-retention:     #9ca89d;
  /* Stage NAME labels: deepened, AA on cream. */
  --v-stage-label-awareness:     #8a5b3d;
  --v-stage-label-consideration: #46686c;
  --v-stage-label-decision:      #b03f43;
  --v-stage-label-retention:     #556455;

  /* BU-408 (F-059): medium colours default to categorical chart marks so they recolour per vibe. */
  --v-medium-photo: var(--v-chart-1);
  --v-medium-video: var(--v-chart-2);
  --v-medium-copy:  var(--v-chart-3);
  /* BU-408 (F-059): sequential heat/coverage ramp (pale cream -> deep taupe for this cream vibe). */
  --v-scale-0: #f4e7d0;
  --v-scale-1: #dcc4a4;
  --v-scale-2: #c09a76;
  --v-scale-3: #a06a48;
  --v-scale-4: #6b4530;
}

/* Instrument Paper — monochrome industrial: white paper, gray canvas, black ink,
   hard rules, minimal signal colour. Values track the ip-gray scale already used
   by this theme in themes.css (black #000, gray-900 #1a1a1a, gray-700 #404040,
   gray-300 #b3b3b3, gray-100 #e6e6e6, white #fff) and its three signal colours
   (alert red, active blue, success green), deepened where AA required it.
   Deliberately flat and near-colourless: no vivid chart hues, greys plus the
   signal family only. All text-bearing tokens AA on BOTH surface #ffffff and
   canvas #e6e6e6 (lowest 4.58:1). */
:root[data-theme="instrument-paper"] {
  --v-canvas:         #e6e6e6;
  --v-surface:        #ffffff;
  --v-surface-raised: #ffffff;
  --v-surface-sunken: #e6e6e6;
  --v-hover:          #f2f2f2;
  --v-ink:            #000000;
  --v-ink-dim:        #404040;
  --v-ink-muted:      #666666;
  --v-ink-rgb:        0, 0, 0;
  --v-surface-rgb:    255, 255, 255;
  --v-line:           #b3b3b3;
  --v-line-strong:    #000000;
  --v-line-subtle:    #e6e6e6;
  --v-border:         #b3b3b3;
  --v-border-strong:  #000000;

  /* BRAND SIGNAL — JARGAN Traffic Orange, same AA shade as the other light
     vibe added here; the one colour this theme is allowed. ONE place. */
  --v-accent-brand:      #b34100;
  --v-accent-brand-aa:   #b34100;
  --v-on-accent:         #ffffff;
  --v-accent-brand-soft: rgba(179, 65, 0, 0.10);
  --v-accent-brand-tint: rgba(179, 65, 0, 0.06);
  /* Secondary vibe character (NON-brand): the theme's own active-signal blue, AA-deepened. */
  --v-accent-2:          #0055a8;

  --v-success: #006b00;
  --v-warning: #7a5c00;
  --v-error:   #c00000;
  --v-info:    #0055a8;

  /* Categorical chart ramp — greys plus the theme's signal colours only.
     This vibe is intentionally colourless; do not add vivid hues here. */
  --v-chart-1: #1a1a1a; --v-chart-2: #0055a8; --v-chart-3: #c00000; --v-chart-4: #006b00;
  --v-chart-5: #404040; --v-chart-6: #666666; --v-chart-7: #7a5c00; --v-chart-8: #003d7a;
  --v-stage-awareness:     #0055a8;
  --v-stage-consideration: #666666;
  --v-stage-decision:      #006b00;
  --v-stage-retention:     #404040;
  /* Stage NAME labels: same values, already AA on white and on the grey canvas. */
  --v-stage-label-awareness:     #0055a8;
  --v-stage-label-consideration: #666666;
  --v-stage-label-decision:      #006b00;
  --v-stage-label-retention:     #404040;

  /* BU-408 (F-059): medium colours default to categorical chart marks so they recolour per vibe. */
  --v-medium-photo: var(--v-chart-1);
  --v-medium-video: var(--v-chart-2);
  --v-medium-copy:  var(--v-chart-3);
  /* BU-408 (F-059): sequential heat/coverage ramp (paper white -> press black, greyscale only). */
  --v-scale-0: #f2f2f2;
  --v-scale-1: #d1d1d1;
  --v-scale-2: #999999;
  --v-scale-3: #595959;
  --v-scale-4: #1a1a1a;
}

/* ── BU-666 — "dark" (Dark Mode), the last Blazor-selectable theme with no vibe
   block. Same gap BU-663 closed for pastel-mondrian/instrument-paper: every
   --v-* consumer under data-theme="dark" (Layout/ShellSidebar.razor.css, the
   chart ramp, stage marks, neg-engine) fell through to the LIGHT neutral base
   at the top of this file, so the mission-control sidebar rendered white glass
   with near-black ink beside a deep-navy page.

   Values are a PORT, not a redesign. Neutrals, ink ramp, lines, hover and the
   status tints are lifted VERBATIM from this theme's already-shipped
   [data-theme="dark"] --color-* block in jargan-semantic-tokens.css, so every
   surface it already painted is byte-identical after the fold-in:
     canvas/surface/raised/sunken/hover  = --color-canvas/-surface/-surface-raised/
                                           -surface-sunken/-hover-surface
     ink / ink-dim / ink-muted / *-rgb   = --color-ink / -ink-dim / -ink-muted
     line / -strong / -subtle            = --color-line / -strong / -subtle
     success/warning/error/info          = --color-tint-success/warning/error/info-text
     accent-2                            = --color-accent-strong / --color-accent-aa
   Brand: dark shipped the base Traffic Orange #DD5100 (not the #ff6b1a on-dark
   shade the other dark vibes use), so #DD5100 stays in --v-accent-brand and the
   AA-safe on-navy shade #ff8a4d takes --v-accent-brand-aa — its correct slot,
   same move the dusk/deep-sea note above describes.

   Borders: --v-border/-strong take this theme's own opaque navy border pair
   (--border-color #2d3a5a / --border-focus #4a5a8a from theme-injector.js's
   'dark' definition) rather than new hexes.

   Newly authored (the old --color-* contract had no slot for these, so they were
   resolving to the LIGHT neutral base under dark — a leak, not a look): the
   chart ramp, stage NAME labels, medium colours and the scale ramp. Chart hues
   are this theme's own declared ColorPalette (ThemeService.cs 'dark'), filtered
   to the eight that clear AA 4.5:1 on surface #16213e — #e94560 (4.15) and
   #7b68ee (3.83) are excluded as text and stay fill-only swatches.
   Stage FILL marks (--v-stage-*) are the exact orange ramp --color-stage-1..4
   already resolves to under dark, so those pixels do not move. Stage NAME
   labels keep the hue families the neutral base gave them (blue / violet /
   green / amber) lightened to AA on navy. Lowest text-bearing ratio on surface
   #16213e: --v-ink-muted #8a93a8 at 5.16:1. */
:root[data-theme="dark"] {
  --v-canvas:         #1a1a2e;
  --v-surface:        #16213e;
  --v-surface-raised: #1e2a48;
  --v-surface-sunken: #0f3460;
  --v-hover:          #2a3f5f;
  --v-ink:            #eaeaea;
  --v-ink-dim:        #a8b0c0;
  --v-ink-muted:      #8a93a8;
  --v-ink-rgb:        234, 234, 234;
  --v-surface-rgb:    22, 33, 62;
  --v-line:           rgba(255, 255, 255, 0.12);
  --v-line-strong:    rgba(255, 255, 255, 0.20);
  --v-line-subtle:    rgba(255, 255, 255, 0.08);
  --v-border:         #2d3a5a;
  --v-border-strong:  #4a5a8a;

  /* BRAND SIGNAL — JARGAN Traffic Orange. This theme shipped the base #DD5100;
     kept verbatim so no orange in dark mode moves. ONE place. */
  --v-accent-brand:      #DD5100;
  --v-accent-brand-aa:   #ff8a4d;
  --v-on-accent:         #1c1206;
  --v-accent-brand-soft: rgba(221, 81, 0, 0.10);
  --v-accent-brand-tint: rgba(221, 81, 0, 0.06);
  /* Secondary vibe character (NON-brand): the warm amber this theme already
     shipped as --color-accent-strong / --color-accent-aa. 6.81:1 on surface. */
  --v-accent-2:          #ff8a4d;

  --v-success: #86efac;
  --v-warning: #f0b860;
  --v-error:   #fca5a5;
  --v-info:    #93c5fd;

  /* Categorical chart ramp — this theme's own declared palette, AA-filtered. */
  --v-chart-1: #f97583; --v-chart-2: #00d4ff; --v-chart-3: #feca57; --v-chart-4: #16c79a;
  --v-chart-5: #9d84ff; --v-chart-6: #0abde3; --v-chart-7: #ff9ff3; --v-chart-8: #1abc9c;
  /* Funnel-stage FILL marks: the exact ramp --color-stage-1..4 resolves to under
     dark today, so stage-tinted borders/chips do not shift. */
  --v-stage-awareness:     #FFB380;
  --v-stage-consideration: #FF8138;
  --v-stage-decision:      #DD5100;
  --v-stage-retention:     #8A3300;
  /* Stage NAME labels: same hue families the neutral base gave them, lightened
     to AA on navy (the neutral-base values were 2-3:1 dark-on-dark). */
  --v-stage-label-awareness:     #00d4ff;
  --v-stage-label-consideration: #9d84ff;
  --v-stage-label-decision:      #16c79a;
  --v-stage-label-retention:     #feca57;

  /* BU-408 (F-059): medium colours default to categorical chart marks so they recolour per vibe. */
  --v-medium-photo: var(--v-chart-1);
  --v-medium-video: var(--v-chart-2);
  --v-medium-copy:  var(--v-chart-3);
  /* BU-408 (F-059): sequential heat/coverage ramp (dim navy -> the vibe's amber). */
  --v-scale-0: #1a2540;
  --v-scale-1: #33405f;
  --v-scale-2: #7a5f63;
  --v-scale-3: #c4744f;
  --v-scale-4: #ff8a4d;
}
