/* css/theme.css - THE colour registry. Every colour in the app comes from here.
 * Plan: .claude/PLAN_color_system.md   Engine: js/ui_theme.js   Test: test/ui_theme.test.cjs
 *
 * Three layers, all on :root so everything sees them (body-mounted dialogs, the GL map, overlays):
 *   --p-*  PALETTE: the only hex values for UI colours. Small on purpose (plan D10): colours that look alike
 *          and do similar jobs share one entry. Change a value here and every role using it follows.
 *   --d-*  DATA SETS: categorical colours whose job is to be told apart (groups, loops, damage types,
 *          resource groups, wallet brands). Exact values, not merged.
 *   --c-*  ROLES: what consumers use. Fixed roles point at the palette below. Scheme roles (listed in DERIVE
 *          in js/ui_theme.js) are rewritten on :root by uiTheme.apply(); their values in the generated block
 *          are only the first paint (Default scheme).
 *
 * Consumers: CSS var(--c-role); translucent color-mix(in srgb, var(--c-role) N%, transparent).
 * Canvas / GL / d3 / SVG attributes: uiColor('role'), uiColorA('role', a), uiPal('name'), uiPalA('name', a).
 * A new colour = a new palette entry or role HERE (ask the owner first), never a literal elsewhere.
 */
:root {
  /* ================= PALETTE ================= */
  /* neutrals */
  --p-black: #000000;
  --p-gray-900: #151515;
  --p-gray-800: #3c3c3c;
  --p-gray-700: #555555;
  --p-gray-500: #888888;
  --p-gray-400: #b4b4b4;
  --p-gray-300: #cccccc;
  --p-white: #ffffff;
  /* colours */
  --p-blue: #519af9;
  --p-sky: #5ac8fa;
  --p-steel: #75acb7;
  --p-cyan: #02f3f3;
  --p-teal: #12c6b4;
  --p-green: #3ef598;
  --p-mint: #a6ee8f;
  --p-chartreuse: #bff56b;
  --p-lime: #e3ff00;
  --p-pale-yellow: #ffff99;
  --p-amber: #ffd74d;
  --p-orange: #ff8b2c;
  --p-peach: #ffb866;
  --p-salmon: #ff7e86;
  --p-red: #cc3f00;
  --p-crimson: #e13255;
  --p-purple: #9a41ff;
  --p-violet: #c77eff;
  --p-lavender: #ab9ff2;
  --p-magenta: #f200ff;
  --p-pink: #f87ff8;
  --p-olive: #9b9b00;
  --p-khaki: #cfc730;
  --p-rose: #aa3c61;
  --p-indigo: #5f77cf;
  --p-slate: #92aac9;
  /* bare "r, g, b" forms for legacy rgba(var(--x), a) consumers */
  --p-lavender-rgb: 171, 159, 242;
  --p-blue-rgb: 81, 154, 249;

  /* ================= DATA SETS ================= */
  /* squad / armada groups (8-cycle) */
  --d-group-0: #e06c75;
  --d-group-1: #98c379;
  --d-group-2: #61afef;
  --d-group-3: #e5c07b;
  --d-group-4: #c678dd;
  --d-group-5: #56b6c2;
  --d-group-6: #d19a66;
  --d-group-7: #b0b6c0;
  /* ops loop colours (map paths, loop list) */
  --d-loop-1: #7cd0ff;
  --d-loop-2: #ff9db3;
  --d-loop-3: #ffcf8a;
  --d-loop-4: #b9a0ff;
  --d-loop-5: #8affc7;
  --d-loop-6: #ffb0e0;
  --d-loop-7: #c0c8ff;
  --d-loop-8: #ffe27a;
  /* damage types (mirrors standalone/killboard_c4.html) */
  --d-dmg-kinetic: #c9d3e0;
  --d-dmg-energy: #37e0c8;
  --d-dmg-emp: #b07cff;
  --d-dmg-superchill: #7cc4ff;
  --d-dmg-shockwave: #ffb454;
  --d-dmg-graygoo: #6ee787;
  --d-dmg-heat: #ff7a45;
  --d-dmg-bomb: #ff4d6d;
  --d-dmg-missile: #ff5db0;
  /* resource groups */
  --d-resgroup-r4: #efae15;
  --d-resgroup-basic: #e4cc60;
  --d-resgroup-basic-organic: #c2d8aa;
  --d-resgroup-ingredient: #89b5c2;
  --d-resgroup-component: #65a2b1;
  --d-resgroup-organic-component: #b1e679;
  --d-resgroup-countermeasures: #f25e85;
  --d-resgroup-missiles: #df3965;
  --d-resgroup-drone: #ec2936;
  --d-resgroup-ship-components: #02f3f3;
  --d-resgroup-ship-modules: #02dbf3;
  --d-resgroup-ship-weapons: #02bff3;
  --d-resgroup-organic-consumable: #d0ff00;
  --d-resgroup-claim-stakes: #f200ff;
  --d-resgroup-habs: #d74be9;
  /* wallet brands */
  --d-wallet-solflare: #ffef47;
  --d-wallet-phantom: #ab9ff2;
  --d-wallet-backpack: #e33e3f;
  --d-wallet-jupiter: #c7f284;
  --d-wallet-metamask: #eb8221;
  --d-wallet-brave: #ff2a01;
  /* scan patterns (recent-scans heatmap, best-pattern cells, signal rings; legacy = no pattern) */
  --d-scan-broad-spectrum: #9e4ff8;
  --d-scan-focused-array: #536cea;
  --d-scan-enhanced-signal: #32c0c3;
  --d-scan-deep-resonance: #d38545;
  --d-scan-spatial-anomaly: #e9f53d;
  --d-scan-legacy: #ffffff;

  /* ================= FIXED ROLES ================= */
  /* text */
  --c-text: var(--p-white);
  --c-text-soft: var(--p-white);
  --c-text-muted: var(--p-gray-300);
  --c-text-subtle: var(--p-gray-400);
  --c-text-dim: var(--p-gray-500);
  --c-text-disabled: var(--p-gray-700);
  --c-text-faint: var(--p-gray-800);
  --c-text-inverse: var(--p-black);
  --c-header-text: var(--p-black);
  --c-tab-text-on: var(--p-black);
  --c-text-on-accent: var(--p-black);
  --c-subtab-text: var(--p-white);
  --c-subtab-text-on: var(--p-white);
  --c-link: var(--p-lime);
  /* surfaces, lines, overlays */
  --c-surface-0: var(--p-black);
  --c-surface-1: var(--p-black);
  --c-surface-2: var(--p-gray-900);
  --c-surface-3: var(--p-gray-800);
  --c-line-frame: var(--c-pane-frame);
  --c-input-line: var(--p-gray-700);
  --c-line-subtle: var(--p-gray-900);
  --c-scrim-soft: color-mix(in srgb, var(--p-black) 40%, transparent);
  --c-scrim: color-mix(in srgb, var(--p-black) 60%, transparent);
  --c-scrim-strong: color-mix(in srgb, var(--p-black) 90%, transparent);
  --c-wash: color-mix(in srgb, var(--p-white) 10%, transparent);
  --c-wash-strong: color-mix(in srgb, var(--p-white) 20%, transparent);
  --c-input-bg: color-mix(in srgb, var(--p-black) 6%, transparent);
  --c-input-bg-light: color-mix(in srgb, var(--p-white) 10%, transparent);
  --c-button-bg: var(--p-gray-900);
  --c-button-line: var(--p-gray-700);
  --c-focus-ring: color-mix(in srgb, var(--p-blue) 70%, transparent);
  --c-shadow: var(--p-black);
  /* scrollbars: app panes, follow the scheme accent (owner 2026-10-06); map panes keep their own thin HUD-ink bar */
  --c-scroll-thumb: color-mix(in srgb, var(--c-accent-deep) 35%, transparent);
  --c-scroll-thumb-hover: color-mix(in srgb, var(--c-accent-deep) 70%, transparent);
  /* combat view: action buttons, risk tiers, roster headers, destroyed cards (owner 2026-10-06) */
  --c-combat-attack: var(--p-peach);
  --c-combat-attack-line: var(--p-salmon);
  --c-combat-auto-attack: var(--c-combat-attack-line);
  --c-combat-auto-heal: var(--p-blue);
  --c-combat-repair: var(--p-blue);
  --c-combat-risk-easy: var(--p-green);
  --c-combat-risk-risky: var(--p-amber);
  --c-combat-risk-strong: var(--p-red);
  --c-combat-hostile: var(--p-salmon);
  --c-combat-ally: var(--p-blue);
  --c-combat-destroyed: var(--p-red);
  --c-combat-destroyed-text: var(--p-salmon);
  /* armed: armed / selected target / move-pick / drop target (plan D7; one colour app-wide) */
  --c-armed: var(--p-lime);
  --c-armed-hover: color-mix(in srgb, var(--p-lime) 70%, var(--p-white));
  /* HUD, buttons and panes: ONE look for map panes, ops loop editor, list view, HUD + command buttons (owner 2026-10-04) */
  --c-pane-bg: color-mix(in srgb, var(--p-black) 5%, transparent);
  --c-pane-card: var(--c-pane-bg);
  --c-pane-head-bg: color-mix(in srgb, var(--c-pane-line-soft) 20%, transparent);
  --c-pane-section-bg: color-mix(in srgb, var(--c-btn-tone) 7%, transparent);
  --c-pane-hover: color-mix(in srgb, var(--c-btn-tone) 15%, transparent);
  --c-pane-field: color-mix(in srgb, var(--c-hud-bg) 80%, transparent);
  --c-pane-line: color-mix(in srgb, var(--c-btn-tone) 20%, transparent);
  --c-pane-line-soft: color-mix(in srgb, var(--c-btn-tone) 10%, transparent);
  --c-pane-line-strong: color-mix(in srgb, var(--c-hud) 35%, transparent);
  --c-pane-frame: color-mix(in srgb, var(--p-white) 8.6%, transparent);
  --c-pane-title: var(--c-hud-ink-hi);
  --c-pane-text: var(--c-hud-ink-soft);
  --c-pane-text-dim: var(--c-hud-ink-dim);
  --c-pane-text-faint: var(--c-hud-ink-faint);
  --c-hud-box-bg: var(--c-pane-bg);
  --c-btn-tone: var(--c-hud);
  --c-btn-fill: var(--c-pane-bg);
  --c-btn-text: var(--p-slate);
  --c-btn-text-hi: var(--c-btn-text);
  /* ops panel ladder: points at the pane roles above, so the ops editor + list view look like the map panes */
  --c-panel: var(--c-pane-bg);
  --c-panel-card: var(--c-pane-card);
  --c-panel-raised: var(--c-pane-head-bg);
  --c-panel-hover: var(--c-pane-card);
  --c-panel-strong: var(--c-pane-head-bg);
  --c-panel-sunken: var(--c-pane-field);
  --c-panel-line: var(--c-pane-line);
  --c-panel-line-soft: var(--c-pane-line-soft);
  --c-panel-line-strong: var(--c-pane-line-strong);
  --c-panel-line-muted: var(--c-pane-text-faint);
  /* status (each also gets -soft 12% and -line 50% below) */
  --c-status-danger: var(--p-salmon);
  --c-status-critical: var(--p-crimson);
  --c-status-warn: var(--p-amber);
  --c-status-ok: var(--p-green);
  --c-status-info: var(--p-blue);
  --c-status-running: var(--p-mint);
  --c-status-disabled: var(--p-gray-500);
  /* fleet states */
  --c-fleet-own: var(--p-cyan);
  --c-fleet-idle: var(--p-gray-300);
  --c-fleet-move: var(--p-blue);
  --c-fleet-mining: var(--p-orange);
  --c-fleet-scanning: var(--p-pale-yellow);
  --c-fleet-docked: var(--p-white);
  --c-fleet-exit: var(--p-chartreuse);
  --c-fleet-transfer: var(--p-steel);
  --c-fleet-destroyed: var(--c-status-critical);
  --c-fleet-stopped: var(--c-status-danger);
  --c-fleet-impaired: var(--p-violet);
  /* fleet stats */
  --c-stat-hp: var(--p-crimson);
  --c-stat-sp: var(--p-cyan);
  --c-stat-ap: var(--p-peach);
  --c-stat-fuel: var(--p-amber);
  --c-stat-ammo: var(--p-orange);
  --c-stat-cargo: var(--p-mint);
  --c-stat-time: var(--p-steel);
  /* factions */
  --c-faction-mud: var(--p-rose);
  --c-faction-oni: var(--p-indigo);
  --c-faction-ustur: var(--p-khaki);
  --c-faction-neutral: var(--p-gray-500);
  --c-faction-npc: var(--p-gray-300);
  /* map */
  --c-map-route: var(--p-lime);
  --c-map-route-c4: var(--p-magenta);
  --c-map-route-blocked: var(--p-crimson);
  --c-map-jump: var(--p-peach);
  --c-map-target: var(--p-chartreuse);
  --c-loot-locked: var(--p-amber);
  --c-loot-free: var(--p-mint);
  /* market, currencies, brands */
  --c-trade-buy: var(--p-sky);
  --c-trade-sell: var(--p-crimson);
  --c-trade-own: var(--p-lime);
  --c-currency: var(--p-sky);
  --c-currency-lp: var(--p-pink);
  --c-currency-sol: var(--p-purple);
  --c-currency-usdc: var(--p-sky);
  --c-currency-atlas: var(--p-lime);
  --c-currency-zink: var(--p-green);
  --c-brand-ge: var(--p-orange);
  --c-rent-own: var(--p-purple);
  --c-rent-list: var(--p-lavender);
  --c-rent-borrowed: var(--p-blue);
  /* text accents */
  --c-coordinate: var(--p-amber);
  --c-total: var(--p-amber);
  --c-hint: var(--p-cyan);
  --c-address: var(--p-teal);
  --c-dev-testing: var(--p-lime);
  --c-note-bg: var(--p-black);
  --c-note-text: var(--p-pale-yellow);
  --c-note-custom: var(--p-chartreuse);
  /* stats series */
  --c-series-kills: var(--p-indigo);
  --c-series-jumps: var(--p-khaki);
  --c-series-pods: var(--p-rose);
  --c-series-npcs: var(--p-gray-700);
  --c-series-deploy: var(--p-purple);
  /* status soft fills and lines */
  --c-status-danger-soft: color-mix(in srgb, var(--c-status-danger) 12%, transparent);
  --c-status-danger-line: color-mix(in srgb, var(--c-status-danger) 50%, transparent);
  --c-status-critical-soft: color-mix(in srgb, var(--c-status-critical) 12%, transparent);
  --c-status-critical-line: color-mix(in srgb, var(--c-status-critical) 50%, transparent);
  --c-status-warn-soft: color-mix(in srgb, var(--c-status-warn) 12%, transparent);
  --c-status-warn-line: color-mix(in srgb, var(--c-status-warn) 50%, transparent);
  --c-status-ok-soft: color-mix(in srgb, var(--c-status-ok) 12%, transparent);
  --c-status-ok-line: color-mix(in srgb, var(--c-status-ok) 50%, transparent);
  --c-status-info-soft: color-mix(in srgb, var(--c-status-info) 12%, transparent);
  --c-status-info-line: color-mix(in srgb, var(--c-status-info) 50%, transparent);
  --c-status-running-soft: color-mix(in srgb, var(--c-status-running) 12%, transparent);
  --c-status-running-line: color-mix(in srgb, var(--c-status-running) 50%, transparent);
  /* accent / action / selected soft fills and lines (follow the scheme with their base role) */
  --c-accent-soft: color-mix(in srgb, var(--c-accent) 12%, transparent);
  --c-accent-line: color-mix(in srgb, var(--c-accent) 50%, transparent);
  --c-action-soft: color-mix(in srgb, var(--c-action) 12%, transparent);
  --c-action-line: color-mix(in srgb, var(--c-action) 50%, transparent);
  --c-selected-soft: color-mix(in srgb, var(--c-selected) 12%, transparent);
  --c-selected-line: color-mix(in srgb, var(--c-selected) 50%, transparent);
  --c-armed-soft: color-mix(in srgb, var(--c-armed) 12%, transparent);
  --c-armed-line: color-mix(in srgb, var(--c-armed) 50%, transparent);

  /* ================= SCHEME ROLES, first paint = Default scheme. GENERATED, do not hand-edit:
         node test/ui_theme.test.cjs --print-defaults ================= */
  /* @generated-defaults-start */
  --c-accent: #ff8b2c;
  --c-accent-deep: #dd6400;
  --c-header-bg: #ff8b2c;
  --c-tab-bg: #622c00;
  --c-tab-bg-hover: #813a00;
  --c-tab-bg-on: #ff8b2c;
  --c-tab-text: #ffd4b0;
  --c-subtab-bg: #1d0d00;
  --c-subtab-bg-hover: #321700;
  --c-subtab-bg-on: #4d2300;
  --c-subheader-bg: #160a00;
  --c-subheader-line: #1e0e00;
  --c-subheader-text: #ffd4b0;
  --c-text-accent: #ff8b2c;
  --c-line-sep: #331700;
  --c-row-alt: #000000;
  --c-droptarget: rgba(0, 0, 0, 0.439);
  --c-selected: #ffd74d;
  --c-hud: #8baedd;
  --c-hud-bg: #0c0d16;
  --c-hud-bg-raised: #202232;
  --c-hud-glow: #2d3a4b;
  --c-hud-ink: #b0b8c9;
  --c-hud-ink-hi: #edf6fc;
  --c-hud-ink-soft: #d6dfef;
  --c-hud-ink-dim: #969ead;
  --c-hud-ink-faint: #7a7a7a;
  --c-hud-line: rgba(139, 174, 221, 0.28);
  --c-hud-line-strong: rgba(163, 197, 242, 0.6);
  --c-hud-fill-hover: rgba(139, 174, 221, 0.12);
  --c-hud-fill-on: rgba(139, 174, 221, 0.28);
  --c-hud-panel: rgba(14, 15, 25, 0.97);
  --c-hud-grid-minor: #222b3e;
  --c-hud-grid-major: #354052;
  --c-hud-grid-ring: #5b6c84;
  --c-hud-lane: #45484d;
  --c-action: #78c8f0;
  --col-dt-alt: 98, 44, 0;
  --col-dt-over: 29, 13, 0;
  --col-cmd: 120, 200, 240;
  --col-filter-cmd: brightness(0) saturate(100%) invert(82%) sepia(63%) saturate(1434%) hue-rotate(170deg) brightness(94%) contrast(100%);
  /* @generated-defaults-end */
}
