/* nbd-original = the brand navy (#1E3A6E), unified with theme-engine.js's
   generated nbd-original so the default theme renders identically whether or
   not the engine has booted — previously this was near-black here and navy in
   the engine, so the dashboard flipped color after init (audit F-3). Values
   mirror generateCSSVariables('nbd-original'): --bg = bg darkened 18%, muted
   tuned to clear AA (audit F-5). */
:root[data-theme="nbd-original"] { --orange:#e8720c;--ob:#eb8730;--og:rgba(232,114,12,.12);--bg:#19305a;--s:#1e3a6e;--s2:#0f2847;--s3:#1a3d5e;--br:rgba(255,255,255,.08);--t:#e2e8f0;--m:#acb2bc;--blue:#3b82f6;--green:#16a34a;--purple:#a78bfa;--red:#ef4444;--gold:#eab308;--paper:#1a3d5e;--ink:#e2e8f0;--rule:rgba(226,232,240,.09); }
:root[data-theme="midnight"] { --orange:#6366F1;--ob:#818CF8;--og:rgba(99,102,241,.16);--bg:#070b1a;--s:#0b1024;--s2:#141a36;--s3:#1d2548;--br:rgba(99,102,241,.14);--t:#e2e8f0;--m:#7e88a8;--blue:#60A5FA;--green:#34D399;--purple:#A78BFA;--red:#F87171;--gold:#FBBF24;--paper:#141a36;--ink:#e2e8f0;--rule:rgba(255,255,255,.09); }
:root[data-theme="cobalt"] { --orange:#0047ab;--ob:#1d5dc8;--og:rgba(0,71,171,.18);--bg:#04081f;--s:#061230;--s2:#0a1d4d;--s3:#0f2a6e;--br:rgba(0,71,171,.18);--t:#eaf2ff;--m:#90b3e8;--blue:#3b82f6;--green:#34D399;--purple:#818CF8;--red:#F87171;--gold:#fcd34d;--paper:#0a1d4d;--ink:#eaf2ff;--rule:rgba(255,255,255,.08); }
:root[data-theme="forest"] { --orange:#16A34A;--ob:#22C55E;--og:rgba(22,163,74,.2);--bg:#0A1A0F;--s:#0F2218;--s2:#142B20;--s3:#1A3428;--br:rgba(255,255,255,.08);--t:#ECFDF5;--m:#6EE7B7;--blue:#38BDF8;--green:#4ADE80;--purple:#A78BFA;--red:#F87171;--gold:#FBBF24;--paper:#142B20;--ink:#ECFDF5;--rule:rgba(255,255,255,.1); }
:root[data-theme="crimson"] { --orange:#DC2626;--ob:#EF4444;--og:rgba(220,38,38,.2);--bg:#0F0A0A;--s:#1A0F0F;--s2:#221414;--s3:#2A1919;--br:rgba(255,255,255,.08);--t:#FFF1F2;--m:#FCA5A5;--blue:#38BDF8;--green:#34D399;--purple:#C084FC;--red:#F87171;--gold:#FBBF24;--paper:#221414;--ink:#FFF1F2;--rule:rgba(255,255,255,.1); }
:root[data-theme="gold"] { --orange:#D97706;--ob:#F59E0B;--og:rgba(217,119,6,.2);--bg:#0F0C04;--s:#1A1508;--s2:#22190A;--s3:#2A1F0D;--br:rgba(255,255,255,.08);--t:#FFFBEB;--m:#FCD34D;--blue:#38BDF8;--green:#34D399;--purple:#A78BFA;--red:#F87171;--gold:#FBBF24;--paper:#22190A;--ink:#FFFBEB;--rule:rgba(255,255,255,.1); }
:root[data-theme="plasma"] { --orange:#A855F7;--ob:#C084FC;--og:rgba(168,85,247,.2);--bg:#0D0A1A;--s:#130F24;--s2:#1A1430;--s3:#221A3C;--br:rgba(255,255,255,.08);--t:#F5F3FF;--m:#A78BFA;--blue:#60A5FA;--green:#34D399;--purple:#E879F9;--red:#F87171;--gold:#FBBF24;--paper:#1A1430;--ink:#F5F3FF;--rule:rgba(255,255,255,.1); }
:root[data-theme="arctic"] { --orange:#0EA5E9;--ob:#38BDF8;--og:rgba(14,165,233,.2);--bg:#04111C;--s:#071828;--s2:#0A1E34;--s3:#0D2440;--br:rgba(255,255,255,.08);--t:#F0F9FF;--m:#7DD3FC;--blue:#67E8F9;--green:#34D399;--purple:#A78BFA;--red:#F87171;--gold:#FBBF24;--paper:#0A1E34;--ink:#F0F9FF;--rule:rgba(255,255,255,.1); }
:root[data-theme="rose"] { --orange:#E11D48;--ob:#FB7185;--og:rgba(225,29,72,.2);--bg:#120810;--s:#1C0F1A;--s2:#261422;--s3:#30192C;--br:rgba(255,255,255,.08);--t:#FFF1F2;--m:#FDA4AF;--blue:#38BDF8;--green:#34D399;--purple:#E879F9;--red:#F87171;--gold:#FBBF24;--paper:#261422;--ink:#FFF1F2;--rule:rgba(255,255,255,.1); }
:root[data-theme="obsidian"] { --orange:#dadcde;--ob:#ffffff;--og:rgba(218,220,222,.06);--bg:#020203;--s:#040406;--s2:#0c0c10;--s3:#16161c;--br:rgba(255,255,255,.06);--t:#f0f0f4;--m:#7a7a82;--blue:#60A5FA;--green:#34D399;--purple:#A78BFA;--red:#F87171;--gold:#FCD34D;--paper:#0c0c10;--ink:#f0f0f4;--rule:rgba(255,255,255,.06); }
:root[data-theme="neon"] { --orange:#00CC6A;--ob:#00FF88;--og:rgba(0,255,136,.15);--bg:#040A06;--s:#071008;--s2:#0A160B;--s3:#0D1C0F;--br:rgba(0,255,136,.1);--t:#F0FFF4;--m:#4ADE80;--blue:#22D3EE;--green:#00FF88;--purple:#A855F7;--red:#F87171;--gold:#FBBF24;--paper:#0A160B;--ink:#F0FFF4;--rule:rgba(0,255,136,.12); }
:root[data-theme="steel"] { --orange:#bac4d2;--ob:#dbe2ec;--og:rgba(186,196,210,.14);--bg:#11151c;--s:#1a1f26;--s2:#252b35;--s3:#323a47;--br:rgba(186,196,210,.14);--t:#e6edf5;--m:#8a96a6;--blue:#5a8fc4;--green:#34D399;--purple:#A78BFA;--red:#e74c3c;--gold:#d4a017;--paper:#252b35;--ink:#e6edf5;--rule:rgba(255,255,255,.08); }
:root[data-theme="paper"] { --orange:#1a1a1a;--ob:#000000;--og:rgba(26,26,26,.06);--bg:#fafaf7;--s:#fafaf7;--s2:#ffffff;--s3:#f3f1ec;--br:rgba(0,0,0,.10);--t:#1a1a1a;--m:#6b6b6b;--blue:#1d4ed8;--green:#16a34a;--purple:#7c3aed;--red:#dc2626;--gold:#a16207;--paper:#ffffff;--ink:#1a1a1a;--rule:rgba(0,0,0,.10); }
:root[data-theme="slate"] { --orange:#64748b;--ob:#94a3b8;--og:rgba(100,116,139,.18);--bg:#0a0c11;--s:#0f1117;--s2:#161b25;--s3:#1c2333;--br:rgba(148,163,184,.14);--t:#f1f5f9;--m:#64748B;--blue:#60A5FA;--green:#22c55e;--purple:#A78BFA;--red:#F87171;--gold:#FBBF24;--paper:#161b25;--ink:#f1f5f9;--rule:rgba(255,255,255,.08); }
:root[data-theme="coffee"] { --orange:#92400E;--ob:#B45309;--og:rgba(146,64,14,.2);--bg:#0F0905;--s:#1C1008;--s2:#26160C;--s3:#301C10;--br:rgba(255,255,255,.08);--t:#FEF3C7;--m:#D97706;--blue:#60A5FA;--green:#34D399;--purple:#A78BFA;--red:#F87171;--gold:#FBBF24;--paper:#26160C;--ink:#FEF3C7;--rule:rgba(255,255,255,.1); }
:root[data-theme="deep-space"] { --orange:#818CF8;--ob:#A5B4FC;--og:rgba(129,140,248,.2);--bg:#06060F;--s:#0D0D1E;--s2:#12122A;--s3:#181834;--br:rgba(255,255,255,.07);--t:#EEF2FF;--m:#818CF8;--blue:#38BDF8;--green:#34D399;--purple:#E879F9;--red:#F87171;--gold:#FBBF24;--paper:#12122A;--ink:#EEF2FF;--rule:rgba(255,255,255,.1); }

/* ══ v5 NEW THEMES — injected by theme system upgrade ══ */
:root[data-theme="matrix"] { --orange:#00ff41;--ob:#39ff6e;--og:rgba(0,255,65,.3);--bg:#000300;--s:#000800;--s2:#001000;--s3:#001800;--br:rgba(0,255,65,.1);--t:#b8ffb8;--m:#4a904a;--blue:#00cc33;--green:#00ff41;--purple:#39ff6e;--red:#ff4444;--gold:#ccff33;--paper:#001800;--ink:#b8ffb8;--rule:rgba(0,255,65,.12); }
:root[data-theme="galaxy"] { --orange:#9c27b0;--ob:#ba68c8;--og:rgba(156,39,176,.35);--bg:#06000e;--s:#0e0020;--s2:#180030;--s3:#220042;--br:rgba(156,39,176,.12);--t:#f0e8ff;--m:#9070b8;--blue:#ce93d8;--green:#4db6ac;--purple:#e040fb;--red:#ef5350;--gold:#ffca28;--paper:#180030;--ink:#f0e8ff;--rule:rgba(156,39,176,.15); }
:root[data-theme="ghost"] { --orange:#9aa6b8;--ob:#7c8aa0;--og:rgba(154,166,184,.16);--bg:#f4f6fa;--s:#f4f6fa;--s2:#ffffff;--s3:#eef1f6;--br:rgba(60,70,90,.10);--t:#3b4252;--m:#8b94a3;--blue:#0ea5e9;--green:#10b981;--purple:#7c3aed;--red:#ef4444;--gold:#d97706;--paper:#ffffff;--ink:#3b4252;--rule:rgba(60,70,90,.10); }
:root[data-theme="glow"] { --orange:#ff6d00;--ob:#ff8f00;--og:rgba(255,109,0,.4);--bg:#050200;--s:#0e0600;--s2:#180c00;--s3:#221200;--br:rgba(255,109,0,.12);--t:#fff3e0;--m:#b08060;--blue:#ff9800;--green:#ffc107;--purple:#ff6d00;--red:#ff3d00;--gold:#ff6d00;--paper:#180c00;--ink:#fff3e0;--rule:rgba(255,109,0,.15); }
:root[data-theme="batman"] { --orange:#f5c518;--ob:#ffd700;--og:rgba(245,197,24,.28);--bg:#080808;--s:#111115;--s2:#1a1a20;--s3:#22222a;--br:rgba(245,197,24,.1);--t:#e8e8f0;--m:#80808a;--blue:#f5c518;--green:#4caf50;--purple:#9c27b0;--red:#f44336;--gold:#f5c518;--paper:#1a1a20;--ink:#e8e8f0;--rule:rgba(245,197,24,.12); }
:root[data-theme="darth-vader"] { --orange:#cc0000;--ob:#ff1a1a;--og:rgba(204,0,0,.3);--bg:#000000;--s:#080808;--s2:#101010;--s3:#181818;--br:rgba(204,0,0,.1);--t:#e0e0e0;--m:#666666;--blue:#cc0000;--green:#4caf50;--purple:#9c27b0;--red:#cc0000;--gold:#ffd600;--paper:#101010;--ink:#e0e0e0;--rule:rgba(204,0,0,.12); }
:root[data-theme="lightsaber"] { --orange:#00e5ff;--ob:#40f0ff;--og:rgba(0,229,255,.35);--bg:#000508;--s:#000d14;--s2:#001820;--s3:#00222e;--br:rgba(0,229,255,.1);--t:#e0f8ff;--m:#60b8c8;--blue:#00e5ff;--green:#69f0ae;--purple:#ce93d8;--red:#ff5252;--gold:#ffff00;--paper:#001820;--ink:#e0f8ff;--rule:rgba(0,229,255,.12); }
:root[data-theme="pokemon"] { --orange:#ffcc02;--ob:#ffe040;--og:rgba(255,204,2,.35);--bg:#1a1a2e;--s:#16213e;--s2:#0f3460;--s3:#163480;--br:rgba(255,204,2,.1);--t:#f0f0ff;--m:#9090c8;--blue:#0a84ff;--green:#4caf50;--purple:#9c27b0;--red:#e53935;--gold:#ffcc02;--paper:#0f3460;--ink:#f0f0ff;--rule:rgba(255,204,2,.12); }
:root[data-theme="mario"] { --orange:#e52222;--ob:#ff3333;--og:rgba(229,34,34,.3);--bg:#1a0800;--s:#2e1200;--s2:#421c00;--s3:#562600;--br:rgba(229,34,34,.1);--t:#fff8e0;--m:#b09060;--blue:#2196f3;--green:#4caf50;--purple:#9c27b0;--red:#e52222;--gold:#ffd600;--paper:#421c00;--ink:#fff8e0;--rule:rgba(229,34,34,.12); }
:root[data-theme="zelda"] { --orange:#c8a800;--ob:#e8c800;--og:rgba(200,168,0,.3);--bg:#060e00;--s:#0e1c00;--s2:#162c00;--s3:#203c00;--br:rgba(200,168,0,.1);--t:#f8f0d0;--m:#98a050;--blue:#2196f3;--green:#4caf50;--purple:#9c27b0;--red:#e53935;--gold:#c8a800;--paper:#162c00;--ink:#f8f0d0;--rule:rgba(200,168,0,.12); }
:root[data-theme="arcade"] { --orange:#ff0055;--ob:#ff3377;--og:rgba(255,0,85,.38);--bg:#000018;--s:#000030;--s2:#000048;--s3:#000060;--br:rgba(255,0,85,.12);--t:#ffe8f0;--m:#c06080;--blue:#00e5ff;--green:#00e676;--purple:#ce93d8;--red:#ff0055;--gold:#ffff00;--paper:#000048;--ink:#ffe8f0;--rule:rgba(255,0,85,.15); }
:root[data-theme="retro"] { --orange:#ff8c00;--ob:#ffa833;--og:rgba(255,140,0,.3);--bg:#120a00;--s:#201400;--s2:#301e00;--s3:#402800;--br:rgba(255,140,0,.1);--t:#fff4d0;--m:#a08040;--blue:#ff8c00;--green:#8bc34a;--purple:#ce93d8;--red:#f44336;--gold:#ff8c00;--paper:#301e00;--ink:#fff4d0;--rule:rgba(255,140,0,.12); }
:root[data-theme="synthwave"] { --orange:#f706cf;--ob:#ff40df;--og:rgba(247,6,207,.42);--bg:#0d0018;--s:#180030;--s2:#250048;--s3:#320060;--br:rgba(247,6,207,.12);--t:#ffe8ff;--m:#c070c8;--blue:#00e5ff;--green:#00e676;--purple:#f706cf;--red:#ff1744;--gold:#f706cf;--paper:#250048;--ink:#ffe8ff;--rule:rgba(247,6,207,.15); }
:root[data-theme="vaporwave"] { --orange:#ff71ce;--ob:#ff9de2;--og:rgba(255,113,206,.38);--bg:#0a0014;--s:#140028;--s2:#1e003c;--s3:#280050;--br:rgba(255,113,206,.12);--t:#ffe8ff;--m:#d080c0;--blue:#01cdfe;--green:#05ffa1;--purple:#b967ff;--red:#ff71ce;--gold:#fffb96;--paper:#1e003c;--ink:#ffe8ff;--rule:rgba(255,113,206,.15); }
:root[data-theme="lofi"] { --orange:#c8a878;--ob:#e0c090;--og:rgba(200,168,120,.2);--bg:#f2ede4;--s:#ebe4d8;--s2:#e0d8c8;--s3:#d4ccb8;--br:rgba(0,0,0,.08);--t:#2c2418;--m:#786858;--blue:#8c7a6b;--green:#6a9a6a;--purple:#9a6a9a;--red:#b06060;--gold:#c8a878;--paper:#e0d8c8;--ink:#2c2418;--rule:rgba(0,0,0,.1); }
:root[data-theme="typewriter"] { --orange:#1a1208;--ob:#2a1e10;--og:rgba(26,18,8,.12);--bg:#f0e8d4;--s:#e8dfc8;--s2:#ded4b8;--s3:#d4c8a8;--br:rgba(0,0,0,.08);--t:#1a1208;--m:#706040;--blue:#1a3060;--green:#2a5a2a;--purple:#5a2a6a;--red:#8a2a2a;--gold:#a08020;--paper:#ded4b8;--ink:#1a1208;--rule:rgba(0,0,0,.1); }
:root[data-theme="ink"] { --orange:#0f0a04;--ob:#201808;--og:rgba(15,10,4,.12);--bg:#f5f0e8;--s:#ece6d8;--s2:#e2dac8;--s3:#d8ceb8;--br:rgba(0,0,0,.08);--t:#0f0a04;--m:#605840;--blue:#1a2060;--green:#1a4a1a;--purple:#4a1a5a;--red:#7a1a1a;--gold:#907020;--paper:#e2dac8;--ink:#0f0a04;--rule:rgba(0,0,0,.1); }
:root[data-theme="blueprint-art"] { --orange:#ffffff;--ob:#ffffff;--og:rgba(255,255,255,.2);--bg:#001428;--s:#001e3c;--s2:#002a52;--s3:#003668;--br:rgba(255,255,255,.1);--t:#c8e0ff;--m:#6088a8;--blue:#4fc3f7;--green:#4db6ac;--purple:#ce93d8;--red:#ef9a9a;--gold:#fff176;--paper:#002a52;--ink:#c8e0ff;--rule:rgba(255,255,255,.1); }
:root[data-theme="army"] { --orange:#6a8c2a;--ob:#84ac36;--og:rgba(106,140,42,.28);--bg:#060a02;--s:#0e1808;--s2:#182610;--s3:#20341a;--br:rgba(106,140,42,.1);--t:#e0f0c8;--m:#789858;--blue:#6a8c2a;--green:#8bc34a;--purple:#9c8a4a;--red:#c0392b;--gold:#c8a820;--paper:#182610;--ink:#e0f0c8;--rule:rgba(106,140,42,.12); }
:root[data-theme="cia"] { --orange:#c8a000;--ob:#e8c000;--og:rgba(200,160,0,.22);--bg:#020202;--s:#0c0c0c;--s2:#161616;--s3:#202020;--br:rgba(200,160,0,.08);--t:#f0f0e0;--m:#888870;--blue:#c8a000;--green:#4a7a4a;--purple:#8a7a4a;--red:#c02020;--gold:#c8a000;--paper:#161616;--ink:#f0f0e0;--rule:rgba(200,160,0,.1); }
:root[data-theme="ninja"] { --orange:#cc0000;--ob:#ff1a1a;--og:rgba(204,0,0,.3);--bg:#040400;--s:#0c0c00;--s2:#141400;--s3:#1e1e00;--br:rgba(204,0,0,.1);--t:#e8e8d0;--m:#787858;--blue:#cc0000;--green:#6a8a2a;--purple:#8a4a4a;--red:#cc0000;--gold:#c8a000;--paper:#141400;--ink:#e8e8d0;--rule:rgba(204,0,0,.12); }
:root[data-theme="halloween"] { --orange:#ff6d00;--ob:#ff8c00;--og:rgba(255,109,0,.3);--bg:#080200;--s:#100400;--s2:#180800;--s3:#200c00;--br:rgba(255,109,0,.1);--t:#fff0d8;--m:#907850;--blue:#ff6d00;--green:#6a8c2a;--purple:#9c27b0;--red:#ff3d00;--gold:#ff6d00;--paper:#180800;--ink:#fff0d8;--rule:rgba(255,109,0,.12); }
:root[data-theme="christmas"] { --orange:#e53935;--ob:#ff5252;--og:rgba(229,57,53,.25);--bg:#000e04;--s:#001808;--s2:#00220c;--s3:#002e10;--br:rgba(229,57,53,.1);--t:#f5fff8;--m:#80b890;--blue:#2196f3;--green:#4caf50;--purple:#9c27b0;--red:#e53935;--gold:#ffd600;--paper:#00220c;--ink:#f5fff8;--rule:rgba(229,57,53,.1); }
:root[data-theme="easter"] { --orange:#9c27b0;--ob:#ba68c8;--og:rgba(156,39,176,.2);--bg:#f0e8f8;--s:#ffe8f8;--s2:#f8d8f0;--s3:#f0c8e8;--br:rgba(156,39,176,.08);--t:#2a0838;--m:#806888;--blue:#2196f3;--green:#4caf50;--purple:#9c27b0;--red:#e91e63;--gold:#ffd600;--paper:#f8d8f0;--ink:#2a0838;--rule:rgba(156,39,176,.1); }
:root[data-theme="underwater"] { --orange:#00e5cc;--ob:#40ffea;--og:rgba(0,229,204,.34);--bg:#000c14;--s:#001828;--s2:#00223a;--s3:#002e4e;--br:rgba(0,229,204,.1);--t:#d8fff8;--m:#4898a0;--blue:#00e5cc;--green:#69f0ae;--purple:#ce93d8;--red:#ef9a9a;--gold:#fff176;--paper:#00223a;--ink:#d8fff8;--rule:rgba(0,229,204,.12); }
:root[data-theme="volcanic"] { --orange:#ff3d00;--ob:#ff6e40;--og:rgba(255,61,0,.38);--bg:#120000;--s:#220000;--s2:#340000;--s3:#480000;--br:rgba(255,61,0,.12);--t:#ffe8e0;--m:#c06858;--blue:#ff3d00;--green:#ffab40;--purple:#ff6d00;--red:#ff3d00;--gold:#ff9800;--paper:#340000;--ink:#ffe8e0;--rule:rgba(255,61,0,.15); }
:root[data-theme="japan"] { --orange:#c41c24;--ob:#e83038;--og:rgba(196,28,36,.28);--bg:#0a0608;--s:#180e12;--s2:#26161e;--s3:#34202c;--br:rgba(196,28,36,.1);--t:#fff8f8;--m:#b88898;--blue:#c41c24;--green:#4caf50;--purple:#9c27b0;--red:#c41c24;--gold:#ffd600;--paper:#26161e;--ink:#fff8f8;--rule:rgba(196,28,36,.12); }
:root[data-theme="wildwest"] { --orange:#c87840;--ob:#e89858;--og:rgba(200,120,64,.26);--bg:#120a00;--s:#201400;--s2:#302000;--s3:#402c00;--br:rgba(200,120,64,.1);--t:#fff4e0;--m:#a08860;--blue:#c87840;--green:#8bc34a;--purple:#9c8a4a;--red:#c0392b;--gold:#c87840;--paper:#302000;--ink:#fff4e0;--rule:rgba(200,120,64,.1); }
:root[data-theme="samurai"] { --orange:#cc2200;--ob:#ee3300;--og:rgba(204,34,0,.32);--bg:#080208;--s:#120810;--s2:#1e1018;--s3:#2c1a24;--br:rgba(204,34,0,.1);--t:#f8f0e8;--m:#987058;--blue:#cc2200;--green:#4caf50;--purple:#9c27b0;--red:#cc2200;--gold:#ffd600;--paper:#1e1018;--ink:#f8f0e8;--rule:rgba(204,34,0,.12); }
/* ── OS / TECH ── */
:root[data-theme="android"] { --orange:#4caf50;--ob:#66bb6a;--og:rgba(76,175,80,.3);--bg:#0a0f0a;--s:#141c14;--s2:#1c2a1c;--s3:#24382a;--br:rgba(76,175,80,.1);--t:#e8f5e8;--m:#78a878;--blue:#4caf50;--green:#66bb6a;--purple:#9c27b0;--red:#f44336;--gold:#ffd600;--paper:#1c2a1c;--ink:#e8f5e8;--rule:rgba(76,175,80,.12); }
:root[data-theme="ios"] { --orange:#0a84ff;--ob:#409cff;--og:rgba(10,132,255,.32);--bg:#000000;--s:#1c1c1e;--s2:#2c2c2e;--s3:#3a3a3c;--br:rgba(255,255,255,.1);--t:#ffffff;--m:#aeaeb2;--blue:#0a84ff;--green:#30d158;--purple:#bf5af2;--red:#ff453a;--gold:#ffd60a;--paper:#2c2c2e;--ink:#ffffff;--rule:rgba(255,255,255,.1); }
:root[data-theme="ios26"] { --orange:#30d158;--ob:#4cd964;--og:rgba(48,209,88,.28);--bg:#050508;--s:#0e0e14;--s2:#181820;--s3:#22222e;--br:rgba(255,255,255,.08);--t:#f5f5f7;--m:#8e8e93;--blue:#0a84ff;--green:#30d158;--purple:#bf5af2;--red:#ff453a;--gold:#ffd60a;--paper:#181820;--ink:#f5f5f7;--rule:rgba(255,255,255,.08); }
:root[data-theme="windows"] { --orange:#0078d4;--ob:#2899f5;--og:rgba(0,120,212,.32);--bg:#001828;--s:#002040;--s2:#002c56;--s3:#00386e;--br:rgba(0,120,212,.1);--t:#e8f4ff;--m:#6898c8;--blue:#0078d4;--green:#107c10;--purple:#8764b8;--red:#d13438;--gold:#ffb900;--paper:#002c56;--ink:#e8f4ff;--rule:rgba(0,120,212,.12); }
:root[data-theme="terminal"] { --orange:#00ff00;--ob:#33ff33;--og:rgba(0,255,0,.3);--bg:#000000;--s:#0a0a0a;--s2:#111111;--s3:#1a1a1a;--br:rgba(0,255,0,.08);--t:#00ff00;--m:#005500;--blue:#00ff00;--green:#00ff00;--purple:#00ff00;--red:#ff4444;--gold:#ffff00;--paper:#111111;--ink:#00ff00;--rule:rgba(0,255,0,.1); }
/* ── MATERIAL ── */
:root[data-theme="liquid"] { --orange:#78c8e8;--ob:#a0e0f8;--og:rgba(120,200,232,.3);--bg:#080c12;--s:#101820;--s2:#18242e;--s3:#20303e;--br:rgba(120,200,232,.1);--t:#e8f4ff;--m:#7098b8;--blue:#78c8e8;--green:#4db6ac;--purple:#9fa8da;--red:#ef9a9a;--gold:#fff176;--paper:#18242e;--ink:#e8f4ff;--rule:rgba(120,200,232,.12); }
:root[data-theme="metal"] { --orange:#c8ccd8;--ob:#e8ecf8;--og:rgba(200,204,216,.22);--bg:#0e0e10;--s:#1a1a1e;--s2:#242428;--s3:#2e2e34;--br:rgba(255,255,255,.08);--t:#f0f0f4;--m:#808090;--blue:#90caf9;--green:#a5d6a7;--purple:#ce93d8;--red:#ef9a9a;--gold:#fff176;--paper:#242428;--ink:#f0f0f4;--rule:rgba(255,255,255,.1); }
:root[data-theme="translucent"] { --orange:#e8eeff;--ob:#ffffff;--og:rgba(232,238,255,.18);--bg:#030408;--s:#080c14;--s2:#0e1420;--s3:#141c2c;--br:rgba(255,255,255,.06);--t:#f8f9ff;--m:#8890b8;--blue:#e8eeff;--green:#a5d6a7;--purple:#ce93d8;--red:#ef9a9a;--gold:#fff176;--paper:#0e1420;--ink:#f8f9ff;--rule:rgba(255,255,255,.08); }
:root[data-theme="frosted"] { --orange:#5064c8;--ob:#6878e0;--og:rgba(80,100,200,.18);--bg:#e8eaf2;--s:#f0f2fa;--s2:#e0e4f0;--s3:#d8dcea;--br:rgba(80,100,200,.08);--t:#1a1e3c;--m:#6068a0;--blue:#5064c8;--green:#388e3c;--purple:#7c4dff;--red:#d32f2f;--gold:#f9a825;--paper:#e0e4f0;--ink:#1a1e3c;--rule:rgba(80,100,200,.1); }
/* ── AMBIENT / MOOD ── */
:root[data-theme="candlelit"] { --orange:#e8820a;--ob:#f8a020;--og:rgba(232,130,10,.45);--bg:#0c0600;--s:#180e00;--s2:#241600;--s3:#301e00;--br:rgba(232,130,10,.14);--t:#fff4d8;--m:#a07848;--blue:#e8820a;--green:#8bc34a;--purple:#9c6a4a;--red:#e53935;--gold:#e8820a;--paper:#241600;--ink:#fff4d8;--rule:rgba(232,130,10,.15); }
:root[data-theme="ember"] { --orange:#ff4500;--ob:#ff6530;--og:rgba(255,69,0,.42);--bg:#0a0300;--s:#160800;--s2:#220e00;--s3:#301600;--br:rgba(255,69,0,.12);--t:#ffe8d8;--m:#b06040;--blue:#ff4500;--green:#8bc34a;--purple:#9c6a4a;--red:#ff4500;--gold:#ff9800;--paper:#220e00;--ink:#ffe8d8;--rule:rgba(255,69,0,.15); }
:root[data-theme="midnight-oil"] { --orange:#d4900a;--ob:#f0ac20;--og:rgba(212,144,10,.28);--bg:#060402;--s:#100c06;--s2:#1a140c;--s3:#241c14;--br:rgba(212,144,10,.1);--t:#f0e8d0;--m:#988060;--blue:#d4900a;--green:#8bc34a;--purple:#9c6a4a;--red:#c0392b;--gold:#d4900a;--paper:#1a140c;--ink:#f0e8d0;--rule:rgba(212,144,10,.12); }
:root[data-theme="deep-focus"] { --orange:#0d9488;--ob:#14b8a6;--og:rgba(13,148,136,.28);--bg:#020404;--s:#060c0c;--s2:#0c1414;--s3:#121e1e;--br:rgba(13,148,136,.1);--t:#e0f8f4;--m:#4a9088;--blue:#0d9488;--green:#14b8a6;--purple:#818cf8;--red:#ef4444;--gold:#fbbf24;--paper:#0c1414;--ink:#e0f8f4;--rule:rgba(13,148,136,.12); }
:root[data-theme="neon-rain"] { --orange:#ff2d9b;--ob:#ff5bb8;--og:rgba(255,45,155,.44);--bg:#06000e;--s:#0e0018;--s2:#180028;--s3:#240038;--br:rgba(255,45,155,.12);--t:#ffe8f8;--m:#c060a8;--blue:#00e5ff;--green:#00e676;--purple:#ff2d9b;--red:#ff1744;--gold:#ffff00;--paper:#180028;--ink:#ffe8f8;--rule:rgba(255,45,155,.15); }
:root[data-theme="noir"] { --orange:#d8cfa8;--ob:#f0e8c8;--og:rgba(216,207,168,.2);--bg:#080604;--s:#121008;--s2:#1e1c10;--s3:#2a2818;--br:rgba(216,207,168,.08);--t:#f0ecd8;--m:#888468;--blue:#d8cfa8;--green:#8a9a6a;--purple:#9a8a6a;--red:#c0392b;--gold:#d8cfa8;--paper:#1e1c10;--ink:#f0ecd8;--rule:rgba(216,207,168,.1); }
:root[data-theme="blood-moon"] { --orange:#e8001a;--ob:#ff2030;--og:rgba(232,0,26,.38);--bg:#080002;--s:#140006;--s2:#200008;--s3:#2e000e;--br:rgba(232,0,26,.12);--t:#ffe8ec;--m:#c06070;--blue:#e8001a;--green:#4caf50;--purple:#9c27b0;--red:#e8001a;--gold:#ffd600;--paper:#200008;--ink:#ffe8ec;--rule:rgba(232,0,26,.15); }
:root[data-theme="aurora"] { --orange:#00ffc0;--ob:#40ffd0;--og:rgba(0,255,192,.32);--bg:#020810;--s:#040e18;--s2:#081824;--s3:#0e2232;--br:rgba(0,255,192,.1);--t:#d8fff8;--m:#50a898;--blue:#00ffc0;--green:#69f0ae;--purple:#ce93d8;--red:#ef9a9a;--gold:#fff176;--paper:#081824;--ink:#d8fff8;--rule:rgba(0,255,192,.12); }
:root[data-theme="obsidian-v5"] { --orange:#8b5cf6;--ob:#a78bfa;--og:rgba(139,92,246,.32);--bg:#06040a;--s:#0e0c14;--s2:#181620;--s3:#22202c;--br:rgba(139,92,246,.1);--t:#f0eeff;--m:#8880c0;--blue:#8b5cf6;--green:#4db6ac;--purple:#a78bfa;--red:#f87171;--gold:#fbbf24;--paper:#181620;--ink:#f0eeff;--rule:rgba(139,92,246,.12); }
:root[data-theme="copper"] { --orange:#b87333;--ob:#d8934e;--og:rgba(184,115,51,.28);--bg:#0c0800;--s:#1a1200;--s2:#281e00;--s3:#362a00;--br:rgba(184,115,51,.1);--t:#f8ecd8;--m:#a08058;--blue:#b87333;--green:#8bc34a;--purple:#9c8a4a;--red:#c0392b;--gold:#b87333;--paper:#281e00;--ink:#f8ecd8;--rule:rgba(184,115,51,.12); }
:root[data-theme="sakura"] { --orange:#e8346c;--ob:#ff5080;--og:rgba(232,52,108,.2);--bg:#fff0f4;--s:#ffe8f0;--s2:#ffd8e8;--s3:#ffc8e0;--br:rgba(232,52,108,.08);--t:#2a0818;--m:#a04868;--blue:#e91e63;--green:#4caf50;--purple:#9c27b0;--red:#e8346c;--gold:#ffd600;--paper:#ffd8e8;--ink:#2a0818;--rule:rgba(232,52,108,.1); }
/* ════ END v5 THEMES ════ */

/* ── Presentation mode (audit batch 8) ──
   When the rep flips Presentation Mode in customer.html, the
   data-theme attribute switches to "presentation" — a light NBD-brand
   palette that mirrors the customer-facing portal. The rep's chosen
   dashboard theme stays in sessionStorage and restores when toggled
   off. Token values match nbd-brand.css so the customer page (when
   in Presentation Mode), portal.html, and the photo report PDFs all
   render with the same warm cream + orange brand. */
:root[data-theme="presentation"] {
  --orange:#e8720c; --ob:#ff8420; --og:rgba(232,114,12,.10);
  --bg:#faf8f5;     --s:#ffffff;   --s2:#f0ede7; --s3:#fdf6ed;
  --br:rgba(26,22,18,.10);
  --t:#1a1612;      --m:#6b6357;
  --blue:#2563eb;   --green:#16a34a; --purple:#7c3aed;
  --red:#dc2626;    --gold:#d97706;
  --paper:#ffffff;  --ink:#1a1612; --rule:rgba(26,22,18,.10);
}

/* ══ Wave 6 (A.1) 2026-05-14 — Shared accent contrast contract ═════════
   Was inline in dashboard.html; lifted here so customer.html / login.html /
   vault.html / portal-rendered PDFs all inherit the same contract.
   Every theme below remaps --orange to its own primary accent — that's
   the existing strength of the system, BUT it means .btn-orange and
   any other "background:var(--orange); color:#fff" surface paints
   accent-on-accent on themes where --orange has surface-similar
   luminance (forest, neon, gold, paper, ghost, batman, etc.). Two
   tokens fix that across every component:

     --accent-fg    Guaranteed-contrast foreground (text/icon) painted
                    on top of a --orange fill. Defaults to #fff.
     --accent-ring  Semi-transparent 1px boundary so accent surfaces
                    read as a button on ANY surface. Defaults to a
                    soft black rgba.

   Per-theme overrides below cover the high-risk pairings (accent
   luminance near surface luminance). Themes not listed inherit the
   defaults. */
:root{
  --accent-fg:#fff;
  --accent-ring:rgba(0,0,0,.35);
}
/* Light themes — accent is dark, white fg works but the ring needs to
   be black-tinted to be visible on white surfaces. */
:root[data-theme="paper"],
:root[data-theme="ghost"],
:root[data-theme="easter"],
:root[data-theme="frosted"],
:root[data-theme="lofi"],
:root[data-theme="typewriter"],
:root[data-theme="ink"],
:root[data-theme="sakura"],
:root[data-theme="presentation"]{
  --accent-fg:#fff;
  --accent-ring:rgba(0,0,0,.25);
}
/* Pastel-accent / greyscale-accent themes where the fill is too light
   to carry white text — fg flips to a near-black for contrast. */
:root[data-theme="obsidian"]{ --accent-fg:#0a0a0e; --accent-ring:rgba(255,255,255,.45); }
:root[data-theme="steel"]    { --accent-fg:#11151c; --accent-ring:rgba(255,255,255,.35); }
:root[data-theme="slate"]    { --accent-fg:#0f1117; --accent-ring:rgba(255,255,255,.30); }
:root[data-theme="neon"]     { --accent-fg:#03110a; --accent-ring:rgba(0,0,0,.55);     }
:root[data-theme="terminal"] { --accent-fg:#001500; --accent-ring:rgba(0,0,0,.55);     }
:root[data-theme="batman"]   { --accent-fg:#080808; --accent-ring:rgba(0,0,0,.45);     }
:root[data-theme="pokemon"]  { --accent-fg:#1a1a2e; --accent-ring:rgba(0,0,0,.40);     }
:root[data-theme="zelda"]    { --accent-fg:#060e00; --accent-ring:rgba(0,0,0,.45);     }
:root[data-theme="cia"]      { --accent-fg:#020202; --accent-ring:rgba(0,0,0,.45);     }
:root[data-theme="metal"]    { --accent-fg:#0e0e10; --accent-ring:rgba(255,255,255,.35); }
:root[data-theme="translucent"]{ --accent-fg:#030408; --accent-ring:rgba(255,255,255,.30); }
:root[data-theme="noir"]     { --accent-fg:#080604; --accent-ring:rgba(0,0,0,.45);     }
:root[data-theme="liquid"]   { --accent-fg:#080c12; --accent-ring:rgba(255,255,255,.30); }
:root[data-theme="gold"]     { --accent-fg:#0F0C04; --accent-ring:rgba(0,0,0,.45);     }
:root[data-theme="blueprint-art"]{ --accent-fg:#001428; --accent-ring:rgba(0,0,0,.45); }
:root[data-theme="aurora"]   { --accent-fg:#020810; --accent-ring:rgba(0,0,0,.40);     }
:root[data-theme="lightsaber"]{ --accent-fg:#000508; --accent-ring:rgba(0,0,0,.45);    }
:root[data-theme="matrix"]   { --accent-fg:#000300; --accent-ring:rgba(0,0,0,.55);     }
:root[data-theme="underwater"]{ --accent-fg:#000c14; --accent-ring:rgba(0,0,0,.45);    }
/* ══ Wave 5e (A.5) — second-pass theme contrast audit ══════════════
   Ran a WCAG luminance check across all 66 themes for white-on-accent
   contrast; these 11 fell under the 3.5:1 floor (white text reads as
   low-contrast on the saturated mid-luminance accent). Each gets a
   dark-fg override matched to its base surface tone. The user
   explicitly flagged 'forest' on a deployed screenshot — that's the
   highest-traffic one of the group. */
:root[data-theme="forest"]       { --accent-fg:#0A1A0F; --accent-ring:rgba(0,0,0,.45); }
:root[data-theme="arctic"]       { --accent-fg:#04111C; --accent-ring:rgba(0,0,0,.40); }
:root[data-theme="deep-space"]   { --accent-fg:#06060F; --accent-ring:rgba(0,0,0,.40); }
:root[data-theme="glow"]         { --accent-fg:#050200; --accent-ring:rgba(0,0,0,.45); }
:root[data-theme="retro"]        { --accent-fg:#120a00; --accent-ring:rgba(0,0,0,.45); }
:root[data-theme="vaporwave"]    { --accent-fg:#0a0014; --accent-ring:rgba(0,0,0,.40); }
:root[data-theme="halloween"]    { --accent-fg:#080200; --accent-ring:rgba(0,0,0,.45); }
:root[data-theme="android"]      { --accent-fg:#0a0f0a; --accent-ring:rgba(0,0,0,.45); }
:root[data-theme="ios26"]        { --accent-fg:#050508; --accent-ring:rgba(0,0,0,.45); }
:root[data-theme="candlelit"]    { --accent-fg:#0c0600; --accent-ring:rgba(0,0,0,.45); }
:root[data-theme="midnight-oil"] { --accent-fg:#060402; --accent-ring:rgba(0,0,0,.45); }
/* Borderline cases — white-contrast in the 3.0-3.5 range. Tighter
   thresholds for primary buttons (which use ~13px bold) tip these
   toward dark-fg. */
:root[data-theme="wildwest"]     { --accent-fg:#120a00; --accent-ring:rgba(0,0,0,.45); }
:root[data-theme="ember"]        { --accent-fg:#0a0300; --accent-ring:rgba(0,0,0,.45); }
:root[data-theme="neon-rain"]    { --accent-fg:#06000e; --accent-ring:rgba(0,0,0,.45); }
/* nbd-original (#e8720c, white 3.07) intentionally keeps white text —
   it IS the NBD brand identity. The default --accent-fg:#fff at :root
   handles it. */
/* ══ END Wave 6 accent contract ══ */

/* ── Trial Banners ── */
#trial-banner{display:flex;align-items:center;gap:12px;padding:8px 16px;font-size:12px;font-weight:500;z-index:99998;justify-content:center;flex-wrap:wrap;}
#trial-banner span{flex:1;min-width:200px;text-align:center;}
.trial-warning{background:rgba(232,114,12,.12);color:var(--orange);border-bottom:1px solid rgba(232,114,12,.2);}
.trial-urgent{background:rgba(224,82,82,.15);color:var(--red);border-bottom:1px solid rgba(224,82,82,.25);}
.trial-expired{background:rgba(224,82,82,.2);color:#fca5a5;border-bottom:1px solid rgba(224,82,82,.3);}

/* ══ Phase C.6 utility-class layer (2026-05-16) ════════════════════════════
   Replaces ~421 exact-match inline style="..." attributes from dashboard.html
   with single-class shorthands. Each class equals the inline declaration it
   replaces — same cascade order, same visual outcome, but no `style="..."`
   attribute on the element so style-src CSP can eventually drop 'unsafe-inline'
   once JS template-literal style emitters are also migrated. */
.dn{display:none;}
/* Doubled-class selector .dn.dn has specificity (0,2,0) so it ALWAYS beats
   single-class rules like `.cmd-palette { display:flex }` or `.ni { display:flex }`
   that load later in dashboard.html's inline <style> block and otherwise win
   the cascade. Without this, every overlay-class element + .dn was visible
   on page load until the user dismissed it (kbd-shortcuts modal, search
   palette, hidden admin nav item, etc. — full audit found 4 such offenders).
   Inline `style.display = 'flex'` from openers still wins (inline = 1,0,0,0). */
.dn.dn{display:none;}
.mb-md{margin-bottom:16px;}
.mb-lg{margin-bottom:20px;}
.mb-14{margin-bottom:14px;}
.mb-12{margin-bottom:12px;}
.mt-14{margin-top:14px;}
.meta-11{font-size:11px;color:var(--m);}
.meta-10{font-size:10px;color:var(--m);}
.meta-10-mt2{font-size:10px;color:var(--m);margin-top:2px;}
.meta-12-mb14{font-size:12px;color:var(--m);margin-bottom:14px;}
.meta-12-mb16{font-size:12px;color:var(--m);margin-bottom:16px;}
.body-13{font-size:13px;color:var(--t);}
.heading-13{font-size:13px;font-weight:700;color:var(--t);}
.h-13-mb2{font-size:13px;font-weight:600;color:var(--t);margin-bottom:2px;}
.fs-11{font-size:11px;}
.fs-12{font-size:12px;}
.fs-14{font-size:14px;}
.fwt-14{font-weight:600;color:var(--text);font-size:14px;}
.fw-bold-t{font-weight:600;color:var(--t);}
.gold-14{font-weight:700;color:var(--gold);font-size:14px;}
.fg-orange{color:var(--orange);}
.eyebrow{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--m);display:block;margin-bottom:6px;}
.eyebrow-9{font-size:9px;text-transform:uppercase;letter-spacing:.1em;color:var(--m);display:block;margin-bottom:4px;}
.eyebrow-9i{font-size:9px;text-transform:uppercase;letter-spacing:.1em;color:var(--m);}
.bc-chip{font-family:'Barlow Condensed';font-weight:600;background:var(--s2);border:1px solid var(--br);border-radius:3px;padding:2px 6px;font-size:11px;}
.bc-meta-cp{font-size:10px;color:var(--m);cursor:pointer;font-family:'Barlow Condensed',sans-serif;letter-spacing:.08em;}
.kbd-input{background:var(--s2);border:1px solid var(--br);border-radius:4px;padding:4px 8px;font-family:'DM Mono',monospace;font-size:11px;}
.btn-11{font-size:11px;padding:5px 10px;}
.btn-12{font-size:12px;padding:8px 14px;}
.btn-input-40{width:100%;height:40px;border:1px solid var(--br);border-radius:6px;cursor:pointer;background:none;}
.row-tight{display:flex;align-items:center;gap:6px;margin-bottom:4px;}
.row-card{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;background:var(--s2);border:1px solid var(--br);border-radius:7px;cursor:pointer;}
.card-7{padding:14px;background:var(--s2);border:1px solid var(--br);border-radius:7px;}
.flex-g8{display:flex;gap:8px;}
.fwgap-8{display:flex;gap:8px;flex-wrap:wrap;}
.cell{padding:8px 4px;}
.cell-t{padding:8px 4px;color:var(--t);}
.cell-m{padding:8px 4px;color:var(--m);}
.bb{border-bottom:1px solid var(--br);}
.cp{cursor:pointer;}
.w-full{width:100%;}
.f1{flex:1;}
.pos-rel{position:relative;}
.ac-orange{accent-color:var(--orange);}
.chip-green{background:rgba(46,204,138,.1);color:var(--green);}
.chip-blue{background:rgba(74,158,255,.1);color:var(--blue);}

/* ══ Audit 2026-06 (F-5) — muted-text contrast floor ════════════════════════
   Programmatic WCAG sweep found --m (muted/secondary text) below AA normal
   (4.5:1) on these static themes — muted is the one token hand-authored
   palettes routinely leave too low, and it carries .meta-*/.eyebrow/.cell-m
   etc. on cards (--s2). Each --m below is its own hue, lightness-lifted only
   until it clears 4.5:1 against the card surface (and, being a smaller move,
   clears the darker page bg too). Hue is preserved so theme identity holds.
   On the dashboard ThemeEngine.generateCSSVariables tunes --m the same way at
   runtime; this block covers the engine-less pages (login/customer/codex/demo).
   nbd-original's own --m is set in its theme rule above. */
:root[data-theme="batman"]{ --m:#94949d; }
:root[data-theme="blueprint-art"]{ --m:#799bb6; }
:root[data-theme="candlelit"]{ --m:#af8e65; }
:root[data-theme="copper"]{ --m:#af9473; }
:root[data-theme="darth-vader"]{ --m:#7e7e7e; }
:root[data-theme="easter"]{ --m:#6e5975; }
:root[data-theme="ember"]{ --m:#bd795f; }
:root[data-theme="frosted"]{ --m:#53598a; }
:root[data-theme="ghost"]{ --m:#676d78; }
:root[data-theme="lofi"]{ --m:#67594c; }
:root[data-theme="metal"]{ --m:#9494a2; }
:root[data-theme="ninja"]{ --m:#8e8e73; }
:root[data-theme="pokemon"]{ --m:#a2a2d1; }
:root[data-theme="retro"]{ --m:#af945f; }
:root[data-theme="sakura"]{ --m:#8a3e59; }
:root[data-theme="samurai"]{ --m:#a88773; }
:root[data-theme="slate"]{ --m:#7d8a9e; }
:root[data-theme="terminal"]{ --m:#689a68; }
:root[data-theme="typewriter"]{ --m:#605337; }

/* ══ Audit 2026-06 (F-6) — semantic compat-alias bridge ═════════════════════
   The app still carries several isolated CSS-variable dialects (codex/vault
   --void/--surface/--card, understand/project-codex --s1/--or/--tx/--bdr, the
   palette --ac/--bar/--muted set). Those pages hardcode their own :root, so the
   theme switcher can't restyle them. Converging them fully is the Phase 3
   token-architecture job (it needs per-page visual QA). This bridge is the safe
   first step: it maps each legacy dialect name to the canonical token via a
   var() reference, so the legacy name dynamically resolves to the ACTIVE theme's
   value. It's a plain :root (specificity 0,1,0), so any page's own :root or the
   per-theme :root[data-theme] rules still win — i.e. ZERO visual change today.
   What it enables: in Phase 3, deleting a page's hardcoded :root dialect block
   makes that page inherit themed values automatically (no per-var rewrite). It
   also fixes the latent .fwt-14 rule above, which reads var(--text) that the
   canonical set never defined. Only DISTINCT legacy names are aliased — names
   shared with the canonical set (--gold/--paper/--ink/--bg/--s2/--s3) are left
   to their real per-theme definitions. */
:root {
  /* codex / vault dialect */
  --void: var(--bg);
  --surface: var(--s);
  --card: var(--s2);
  --lift: var(--s3);
  --border: var(--br);
  --text: var(--t);
  /* understand / project-codex dialect */
  --s1: var(--s);
  --or: var(--orange);
  --grn: var(--green);
  --tx: var(--t);
  --bdr: var(--br);
  /* palette dialect */
  --ac: var(--orange);
  --bar: var(--s);
  --muted: var(--m);
  --blu: var(--blue);
  --pur: var(--purple);
  /* admin project-codex (cyan) */
  --cyan: var(--blue);
}
