/* NEUTRALS CARRY THE BRAND HUE. --text-primary, --text-secondary and
   --bg-inverse are Royal mixed into near-black and mid-grey rather than
   neutral values: 18% for the two text tokens, 22% for the dark ground. They
   are written as resolved hex because this file is where raw values live, but
   they are derived from --royal-primary and should move with it.

   Changed at the token rather than per rule, so all 52 --text-primary uses,
   42 --text-secondary uses and 21 --bg-inverse uses stay in one family.

   Contrast is better after the change, not worse: --text-secondary went from
   7.85:1 to 8.99:1 on white, and --text-primary holds 17.2:1 against 17.72.
   The hero is unaffected — its headline and lede are white on Royal and use
   neither token. */

/* ROIzor design tokens — the source of truth for every value.

   TEN COLOUR TOKENS DEFINE BUT NEVER RENDER. Both groups are deliberate;
   neither is dead code, and a future audit should not strip them.

   1. Three alternate theme pairs — electric, future, executive. The active
      theme is selected by two aliases and nothing else:
        --brand-primary: var(--royal-primary)
        --brand-accent:  var(--royal-accent)
      Repointing those two lines swaps the whole site's brand colour. The
      other three pairs are the options that mechanism exists to offer, so
      removing them would leave a switch with one position.

   2. Four semantic colours — success, warning, error, info. This is a
      marketing page with no forms and no system feedback, so nothing uses
      them yet. They stay because the first form that ships will need them,
      and inventing them at that point is how palettes drift.

   Every other colour in this file renders somewhere on the page. */
:root{color-scheme:light;--royal-primary:#5c0099;--royal-accent:#fdc500;--electric-primary:#731dd8;--electric-accent:#fd190d;--future-primary:#5b21b6;--future-accent:#b7f000;--executive-primary:#4c1d95;--executive-accent:#ffb000;--brand-primary:var(--royal-primary);--brand-accent:var(--royal-accent);--brand-primary-hover:#480078;--brand-accent-hover:#ddb000;--brand-primary-soft:#f2e9f8;--brand-accent-soft:#fff8d6;--bg-canvas:#f6f6f3;--bg-surface:#fff;--bg-elevated:#fafaf8;--bg-inverse:#220d30;--text-primary:#241432;--text-secondary:#534265;--text-muted:#7c7c84;--text-on-brand:#fff;--border-default:#deded9;--border-strong:#aaa9a2;--border-interactive:color-mix(in srgb,var(--text-primary) 50%,transparent);--border-emphasis:color-mix(in srgb,var(--text-primary) 62%,transparent);--state-success:#16794f;--state-warning:#9a5b00;--state-error:#c9342f;--state-info:#2870bd;--ai-data:#797982;--ai-knowledge:var(--brand-primary);--ai-intelligence:var(--brand-primary);--ai-agent:var(--brand-primary);--ai-action:var(--brand-accent);--ai-outcome:var(--brand-accent);--ai-human-approval:#5d5d66;--font-display:"Bricolage Grotesque","Avenir Next",Arial,sans-serif;--font-body:"Inter",Arial,sans-serif;--weight-medium:500;--weight-semibold:600;--weight-bold:700;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--space-16:64px;--space-20:80px;--space-24:96px;--space-30:120px;--space-40:160px;--radius-pill:999px;--radius-xs:6px;--radius-sm:8px;--radius-md:12px;--radius-lg:16px;--radius-xl:24px;--shadow-xs:0 1px 2px rgba(0,0,0,.04);--shadow-sm:0 8px 24px rgba(20,15,25,.06);--shadow-md:0 20px 60px rgba(20,15,25,.09);--shadow-floating:0 28px 80px rgba(20,15,25,.14);--duration-micro:180ms;--duration-normal:360ms;--duration-story:800ms;--duration-ambient:7s;--duration-hero-carousel:800ms;--duration-hero-hold:3200ms;--duration-hero-signal:1600ms;--duration-mesh-a:26000ms;--duration-mesh-b:35000ms;--duration-mesh-c:44000ms;--ease-standard:cubic-bezier(.2,.8,.2,1);--ease-enter:cubic-bezier(.16,1,.3,1);--ease-exit:cubic-bezier(.7,0,.84,0);--container:1680px;--content:1520px;--editorial:900px}
html[data-brand=electric]{--brand-primary:var(--electric-primary);--brand-accent:var(--electric-accent);--brand-primary-hover:#5b12af;--brand-accent-hover:#d91409;--brand-primary-soft:#f0e9fb;--brand-accent-soft:#ffe9e7}html[data-brand=future]{--brand-primary:var(--future-primary);--brand-accent:var(--future-accent);--brand-primary-hover:#461692;--brand-accent-hover:#99c900;--brand-primary-soft:#efeafb;--brand-accent-soft:#efffc2}html[data-brand=executive]{--brand-primary:var(--executive-primary);--brand-accent:var(--executive-accent);--brand-primary-hover:#391273;--brand-accent-hover:#d99600;--brand-primary-soft:#eee9f7;--brand-accent-soft:#fff1cc}html[data-font=jakarta]{--font-display:"Bricolage Grotesque","Avenir Next",Arial,sans-serif}
html[data-theme=dark]{--bg-canvas:#0d0d10;--bg-surface:#151519;--bg-elevated:#1b1b20;--bg-inverse:#f4f3ef;--text-primary:#f4f3ef;--text-secondary:#b9b8c0;--text-muted:#85848d;--border-default:#2d2d34;--border-strong:#4c4b55;--brand-primary-soft:color-mix(in srgb,var(--brand-primary) 24%,#141418);--brand-accent-soft:color-mix(in srgb,var(--brand-accent) 16%,#141418);--shadow-xs:0 1px 0 rgba(255,255,255,.04);--shadow-sm:0 10px 30px rgba(0,0,0,.18);--shadow-md:0 24px 70px rgba(0,0,0,.3)}
:root{--bg-surface-intelligence:var(--brand-primary-soft);--text-inverse:var(--bg-canvas);--text-on-primary:#fff;--text-on-accent:#17120a;--border-subtle:color-mix(in srgb,var(--border-default) 62%,transparent);--border-focus:var(--brand-primary);--border-intelligence:var(--brand-primary);--border-action:var(--brand-accent);--state-success-soft:color-mix(in srgb,var(--state-success) 12%,var(--bg-surface));--state-warning-soft:color-mix(in srgb,var(--state-warning) 12%,var(--bg-surface));--state-error-soft:color-mix(in srgb,var(--state-error) 12%,var(--bg-surface));--state-info-soft:color-mix(in srgb,var(--state-info) 12%,var(--bg-surface));--ai-data-soft:color-mix(in srgb,var(--ai-data) 12%,var(--bg-surface));--ai-knowledge-soft:var(--brand-primary-soft);--ai-intelligence-soft:var(--brand-primary-soft);--ai-agent-soft:var(--brand-primary-soft);--ai-human-approval-soft:color-mix(in srgb,var(--ai-human-approval) 12%,var(--bg-surface));--ai-action-soft:var(--brand-accent-soft);--ai-outcome-soft:var(--brand-accent-soft)}
/* Permanent display-face contract: all current and future titles inherit this token. */
:root,html[data-font=jakarta]{--font-display:"Bricolage Grotesque","Avenir Next",Arial,sans-serif}
/* Interactive borders are surface-scoped. The two values above are for light
   grounds (Natural Canvas, white surfaces); a saturated Royal ground inverts
   which direction a boundary has to travel to be seen, so it is redefined
   here rather than compromised into one mid-grey that clears 3:1 on both by
   ~4% and looks wrong on each. The header used to fall back to the light
   values once it crossed onto the canvas, via :not(.is-light); the bar is
   Royal on every section now, so it holds these values the whole way down. */
[data-surface=royal],[data-surface=inverse]{--border-interactive:rgba(255,255,255,.48);--border-emphasis:rgba(255,255,255,.5)}
