/* fido-tokens.css
 *
 * FIDO design-system tokens, v0.2.0 source candidate, 2026-09-03.
 * Deployment-specific version: light-mode values are reconciled for hub
 * accessibility and differ from design-system/fido.css in several overrides.
 * Canonical design source: design-system/fido.css and design-system/tokens.json.
 *
 * Light-mode text-safe accents (--fido-kicker-accent, --fido-underline, and the
 * light --fido-gradient-signal override) are additive accessibility variants: the
 * base spectrum hues fail WCAG AA as small text on the light canvas, so light mode
 * substitutes darkened, contrast-verified values while dark mode keeps the base
 * spectrum. See tests/shared-header-foundation.test.mjs for the verified ratios.
 */

:root,
:root[data-theme="dark"] {
  --fido-surface-canvas: #05060a;
  --fido-surface-panel: #111318;
  --fido-surface-raised: #1a1d24;
  --fido-surface-inverse: #ffffff;
  --fido-text-primary: #f5f7fb;
  --fido-text-secondary: #b8c0cc;
  --fido-text-muted: #7d8794;
  --fido-text-inverse: #111318;
  --fido-line-subtle: rgba(255, 255, 255, 0.12);
  --fido-line-strong: rgba(255, 255, 255, 0.28);
  --fido-action-primary: #2997ff;
  --fido-action-secondary: #4de3ff;
  --fido-positive: #35d399;
  --fido-attention: #ffb020;
  --fido-violet: #8b5cf6;
  --fido-gradient-signal: linear-gradient(120deg, #2997ff 0%, #4de3ff 45%, #8b5cf6 100%);
  /* Kicker / eyebrow accent, and the current-page underline cue. */
  --fido-kicker-accent: #4de3ff;
  --fido-underline: #4de3ff;
  /* Risk, pace teal, constant black and white (2026-11-10, Dash 3.6.42 signature rebuild,
     boards 47687 and 47704): values are the colours the Dash already rendered. */
  --fido-risk: #ff6b6b;
  --fido-teal: #42c9bd;
  --fido-black: #000;
  --fido-white: #fff;
}

:root[data-theme="light"] {
  --fido-surface-canvas: #f5f7fb;
  --fido-surface-panel: #ffffff;
  --fido-surface-raised: #e9eef7;
  --fido-surface-inverse: #05060a;
  --fido-text-primary: #111318;
  --fido-text-secondary: #374151;
  --fido-text-muted: #5b626e;
  --fido-text-inverse: #f5f7fb;
  --fido-line-subtle: rgba(17, 19, 24, 0.12);
  --fido-line-strong: rgba(17, 19, 24, 0.26);
  /* Darkened, contrast-verified spectrum for small text and the hero gradient. */
  --fido-kicker-accent: #0f62c7;
  --fido-underline: #0f62c7;
  --fido-action-primary: #0f62c7;
  --fido-action-secondary: #0f62c7;
  --fido-positive: #0f7a52;
  --fido-attention: #8a5300;
  --fido-violet: #6b34c9;
  --fido-gradient-signal: linear-gradient(120deg, #0f62c7 0%, #2b5fc9 45%, #6b34c9 100%);
  --fido-risk: #b42318;
  --fido-teal: #087e75;
  --fido-black: #000;
  --fido-white: #fff;
}

@media (prefers-color-scheme: light) {
  :root:not([data-theme]) {
    --fido-surface-canvas: #f5f7fb;
    --fido-surface-panel: #ffffff;
    --fido-surface-raised: #e9eef7;
    --fido-surface-inverse: #05060a;
    --fido-text-primary: #111318;
    --fido-text-secondary: #374151;
    --fido-text-muted: #5b626e;
    --fido-text-inverse: #f5f7fb;
    --fido-line-subtle: rgba(17, 19, 24, 0.12);
    --fido-line-strong: rgba(17, 19, 24, 0.26);
    --fido-kicker-accent: #0f62c7;
    --fido-underline: #0f62c7;
    --fido-action-primary: #0f62c7;
    --fido-action-secondary: #0f62c7;
    --fido-positive: #0f7a52;
    --fido-attention: #8a5300;
    --fido-violet: #6b34c9;
    --fido-gradient-signal: linear-gradient(120deg, #0f62c7 0%, #2b5fc9 45%, #6b34c9 100%);
    --fido-risk: #b42318;
    --fido-teal: #087e75;
    --fido-black: #000;
    --fido-white: #fff;
  }
}

/* Headline helpers use solid primary text. Gradient text is retired (CC-0312). */
.fido-spectrum-text,
.fido-full-headline {
  color: var(--fido-text-primary, currentColor);
}

@media (forced-colors: active) {
  .fido-spectrum-text,
  .fido-full-headline {
    background: none;
    color: CanvasText;
    -webkit-text-fill-color: CanvasText;
  }
}

@media print {
  .fido-full-headline {
    background: none !important;
    color: #000 !important;
    -webkit-text-fill-color: #000 !important;
  }
}

/* Kicker / eyebrow / portal-meta contrast fix. The marketing stylesheet colours
 * these with the cyan spectrum token, which fails AA as small text on the light
 * canvas; light mode substitutes the verified accent. Loaded after styles.css so
 * these win in the cascade. Non-essential, but keeps the intelligence signal legible. */
:root[data-theme="light"] .kicker,
:root[data-theme="light"] .eyebrow,
:root[data-theme="light"] .portal-meta,
:root[data-theme="light"] .org-label,
:root[data-theme="light"] .detail-kicker {
  color: var(--fido-kicker-accent);
}

@media (prefers-color-scheme: light) {
  :root:not([data-theme]) .kicker,
  :root:not([data-theme]) .eyebrow,
  :root:not([data-theme]) .portal-meta,
  :root:not([data-theme]) .org-label,
  :root:not([data-theme]) .detail-kicker {
    color: var(--fido-kicker-accent);
  }
}


/* FIDO capacity provider identity tokens, staged CD-0010, 2026-10-26 v1.
 * Additive to the unchanged v0.2.0 base. Sources and contrast: SOURCES.json,
 * CONTRAST-CHECK.json. Provider identity only; used-percent/status color remains
 * the unchanged status-legend.v1.json. Never apply these as health/status colors.
 * Claude: https://github.com/anthropics/skills/blob/main/skills/brand-guidelines/SKILL.md
 * OpenAI Codex: https://openai.com/brand/ (monochrome public brand examples).
 * Anvil: existing FIDO neutral text-muted; no external vendor.
 * Muse/Jev deliberately absent: provider identity pending existing CC-0038.
 */
:root,
:root[data-theme="dark"] {
  --fido-provider-claude: #D97757;
  --fido-provider-codex: #FFFFFF;
  --fido-provider-anvil: #7D8794;
}
:root[data-theme="light"] {
  --fido-provider-claude: #141413;
  --fido-provider-codex: #000000;
  --fido-provider-anvil: #5B626E;
}
@media (prefers-color-scheme: light) {
  :root:not([data-theme]) {
    --fido-provider-claude: #141413;
    --fido-provider-codex: #000000;
    --fido-provider-anvil: #5B626E;
  }
}

/* Portfolio provider identities, Muse CM-0015 board1485, 2026-10-26.
 * Exact Muse-set background hues from aggregate.py CAP_STYLE and mockup-v4
 * through v7.1 on the Muse VM. No M1 source mirror was reported.
 * Anvil/Jev have no Muse-set hue: use the existing FIDO neutral, not a brand claim.
 * Text pairing uses existing FIDO dark/white tokens for readable small text.
 */
:root {
  --provider-muse: #0a6cff;
  --provider-claude: #d96f43;
  --provider-codex: #1f9d74;
  --provider-anvil: var(--fido-text-muted);
  --provider-jev: var(--fido-text-muted);
  --provider-text: var(--fido-surface-canvas);
}
#caps .cap { background:var(--provider-color); color:var(--provider-text); }
#caps .cap[data-capacity-provider="Muse"] { --provider-text:#fff; }
#caps .cap .cap-note { color:inherit; }
#caps .cap small { opacity:1; }
#caps .cap:hover { filter:none; }
/* Fido1508: white text on Muse's three hues. A black mix changes lightness,
 * preserving the hue while clay/green meet small-text contrast. */
#caps .cap[data-capacity-provider="Codex"],
#caps .cap[data-capacity-provider="Claude"] {
  background:color-mix(in srgb,var(--provider-color) 83%,#000);
  --provider-text:#fff;
}

/* CC-0059 successor layout regression: Refresh joins the phone header. */
@media (max-width:760px) {
  #screen .hdr-btns .sched-btn { padding-left:8px; padding-right:8px; }
}

/* Agent identity palette v2, staged CD-0004 #1507 / CC-0059, 2026-10-27.
 * SOURCE VALUES: Muse #0A6CFF, Claude #D96F43, Codex #1F9D74 from
 * Muse board1485, VM aggregate.py CAP_STYLE. These are dashboard display
 * colors, NOT verified vendor-brand tokens or capacity measurement evidence.
 * Anvil graphite and Jev violet are FIDO display choices authorized by1507.
 * Dark-theme source fills preserved; foregrounds chosen for >=4.5:1.
 * Light variants adjust HSL lightness only before 8-bit quantization.
 * Existing --fido-provider-* vendor-grounded foreground tokens are retained.
 * Utilization status remains the unchanged status-legend.v1.json.
 */
:root,
:root[data-theme="dark"] {
  --provider-muse: #0A6CFF;
  --provider-muse-text: #FFFFFF;
  --provider-claude: #D96F43;
  --provider-claude-text: #05060A;
  --provider-codex: #1F9D74;
  --provider-codex-text: #05060A;
  --provider-anvil: #6B7280;
  --provider-anvil-text: #FFFFFF;
  --provider-jev: #8B5CF6;
  --provider-jev-text: #05060A;
}
:root[data-theme="light"] {
  --provider-muse: #0064F9;
  --provider-muse-text: #FFFFFF;
  --provider-claude: #B75025;
  --provider-claude-text: #FFFFFF;
  --provider-codex: #197E5D;
  --provider-codex-text: #FFFFFF;
  --provider-anvil: #686F7D;
  --provider-anvil-text: #FFFFFF;
  --provider-jev: #7E4AF5;
  --provider-jev-text: #FFFFFF;
}
@media (prefers-color-scheme: light) {
  :root:not([data-theme]) {
  --provider-muse: #0064F9;
  --provider-muse-text: #FFFFFF;
  --provider-claude: #B75025;
  --provider-claude-text: #FFFFFF;
  --provider-codex: #197E5D;
  --provider-codex-text: #FFFFFF;
  --provider-anvil: #686F7D;
  --provider-anvil-text: #FFFFFF;
  --provider-jev: #7E4AF5;
  --provider-jev-text: #FFFFFF;
  }
}
/* Exact filled-pill pairing used by the existing capacity renderer.
 * Provider text aliases intentionally override the earlier generic canvas-text
 * and Muse-only white-text rule. No utilization/status selectors change.
 */
#caps .cap[data-capacity-provider="Claude"] { --provider-text:var(--provider-claude-text); background:var(--provider-color); }
#caps .cap[data-capacity-provider="Codex"] { --provider-text:var(--provider-codex-text); background:var(--provider-color); }
#caps .cap[data-capacity-provider="OpenAI Codex"] { --provider-text:var(--provider-codex-text); background:var(--provider-color); }
#caps .cap[data-capacity-provider="Muse"] { --provider-text:var(--provider-muse-text); background:var(--provider-color); }
#caps .cap[data-capacity-provider="Anvil"] { --provider-text:var(--provider-anvil-text); background:var(--provider-color); }
#caps .cap[data-capacity-provider="Jev"] { --provider-text:var(--provider-jev-text); background:var(--provider-color); }
#caps .cap { background:var(--provider-color); color:var(--provider-text); }
#caps .cap .cap-note { color:inherit; }
#caps .cap small { opacity:1; }
#caps .cap:hover { filter:none; }
