/* ============================================================
   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:         #ffffff;
  --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:         #ffffff;
  --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:         #ffffff;
  --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:         #ffffff;
  --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;
}
