:root{
/* ── The six. Locked. Nothing outside this list is a brand colour. ── */
--bone:#F3F0E7;
--ink:#131210;
--acid-lime:#C4F02D;
--hot-magenta:#FF2E88;
--volt-violet:#5B2EF0;
--crown-gold:#E9B63C;

/* ── Interaction ramp ──
   Three derived steps per accent, each with ONE stated job. Not a decorative scale:
   there is no "lighter lime" for styling, only these. Every value is the accent mixed
   with Ink (press) or Bone (wash / disabled), so no new hue enters the system.
   -press     The DARKEST mix toward Ink that still keeps the accent's own label at >=4.5:1.
              Not a fixed percentage: 18% Ink suits Lime, Violet and Gold, but on Magenta it
              produces #D42972, where Ink is 3.89:1 and Bone 4.23:1 — no label passes. Magenta
              therefore presses at 8% (#EC2C7E, Ink 4.66:1). Validate any new accent the same
              way; the press fill is a state, and the label must survive it.
              Ink is already the darkest value, so --ink-press LIGHTENS instead (Ink + 11% Bone,
              #2C2A26, Bone 12.57:1) — the direction differs, the label rule does not.
   -wash      8% on Bone. Soft category grounds and table row tints.
   -disabled  flat replacement for opacity, so it does not shift with the ground behind it. */
--ink-press:#2C2A26;
--lime-press:#A4C828;
--lime-wash:#EFF0D8;
--lime-disabled:#E3F0A6;
--magenta-press:#EC2C7E;
--magenta-wash:#F4E0DF;
--magenta-disabled:#F8A2C1;
--violet-press:#4E29C8;
--violet-wash:#E7E0E8;
--violet-disabled:#B6A2EB;
--gold-press:#C29834;
--gold-wash:#F2EBD9;

/* ── Semantic error ──
   NOT Hot Magenta. Magenta is the primary CTA, so an error rendered in it competes with
   the action that fixes it — and Magenta is only 3.1:1 on Bone, failing AA at caption size.
   This is a darkened Magenta: same family, 5.1:1 on Bone, unmistakably not a button. */
--error:#C4155F;
--error-wash:#F6E2EA;
--error-on-dark:#FF6B9E;

/* Success is Lime-derived, by the same logic as --error: same family, darkened until it clears
   4.5:1 on Bone. Acid Lime itself is 1.2:1 on Bone and can never carry text there.
   --success #5E7316 = Lime at 48%, 4.68:1 on Bone.
   On Ink the derived value drops to 3.51:1, so the dark ground uses pure Lime (14.13:1) instead. */
--success:#5E7316;
--success-wash:#EDF3D9;
--success-on-dark:var(--acid-lime);

/* ── Derived neutrals (opacity of Ink / Bone — NOT new hues) ── */
/* --ink-70 is the ONLY Ink alpha that carries text on Bone: it composites to #565551
   at 6.55:1. --ink-55 composites to #787671 at 3.98:1, which fails AA for normal text
   at EVERY size (contrast is size-independent) — so it is a non-text token: hairlines,
   inactive marks, decorative dots. Never set body, label or caption text in it. */
--ink-70:rgba(19,18,16,.70);
--ink-55:rgba(19,18,16,.55);
--ink-30:rgba(19,18,16,.30);
--ink-12:rgba(19,18,16,.12);
--ink-06:rgba(19,18,16,.06);
/* Bone alphas over Ink, composited and measured:
   --bone-70 #B0ADA7 8.36:1  secondary text — the default on Ink
   --bone-55 #8E8C86 5.57:1  tertiary text, the smallest legible step
   --bone-40 #6D6B66 3.52:1  NON-TEXT: rules, keylines, inactive marks. Never text.
   Same rule as --ink-55 on Bone. Contrast is size-independent — no size makes 3.52:1 legal. */
--bone-70:rgba(243,240,231,.70);
--bone-55:rgba(243,240,231,.55);
--bone-40:rgba(243,240,231,.40);
--bone-15:rgba(243,240,231,.15);

/* ── Semantic: light act (Bone ground) ── */
--surface-page:var(--bone);
--surface-card:var(--bone);
--surface-raised:#FBFAF5;
--surface-inverse:var(--ink);
--text-body:var(--ink);
--text-tertiary:var(--ink-55); /* non-text only — 3.98:1, fails AA */
--text-secondary:var(--ink-70);
--text-inverse:var(--bone);
--line-rule:var(--ink);
--line-hairline:var(--ink-12);

/* ── Semantic: dark act (Ink ground) ── */
--surface-dark:var(--ink);
--text-on-dark:var(--bone);
--text-on-dark-secondary:var(--bone-70);
--text-on-dark-tertiary:var(--bone-55);
--line-on-dark:var(--bone-40); /* keyline use only — 3.52:1, never text */

/* ── Accent roles ── */
--accent-fill:var(--acid-lime);      /* fill / highlight block ONLY, never text on Bone */
--accent-cta:var(--hot-magenta);     /* buttons, dubrae, scribble */
--accent-cta-text:var(--ink);        /* Ink on Magenta = 5.35:1. Bone is 3.07:1, and WCAG's
                                        3:1 large-text exception starts at 18.66px bold —
                                        Button renders 11/13/15px, so none of it qualified. */
--accent-ground:var(--volt-violet);  /* a ground, never a foreground */
--accent-award:var(--crown-gold);    /* ACT 6 only. Only ever on Ink. */

/* ── Category colour code ── */
--cat-street:var(--acid-lime);
--cat-street-on:var(--ink);
--cat-kpop:var(--hot-magenta);
--cat-kpop-on:var(--ink);
--cat-jazz:var(--volt-violet);
--cat-jazz-on:var(--bone);

/* ── Focus ── */
--focus-ring:var(--hot-magenta);

/* ── Semantic aliases for the ramp ── */
--cta-press:var(--magenta-press);
--cta-disabled:var(--magenta-disabled);
--surface-street-wash:var(--lime-wash);
--surface-kpop-wash:var(--magenta-wash);
--surface-jazz-wash:var(--violet-wash);
--surface-award-wash:var(--gold-wash);
--text-error:var(--error);
--text-error-on-dark:var(--error-on-dark);
--surface-error:var(--error-wash);
--line-error:var(--error);
--text-success:var(--success);
--text-success-on-dark:var(--success-on-dark);
--surface-success:var(--success-wash);
--line-success:var(--success);
}
