/* @innovalda/tokens 0.15.0, concatenated by scripts/build.mjs. Do not edit. */
/* ---- @innovalda/tokens/foundation.css ---- */
/* =============================================================================
 * FOUNDATION — universal primitives, zero brand opinion.
 *
 * Layer 1 of 5. Spacing, type, radius, shadow, motion, z-index, focus.
 * No colors live here except shadow tints (overridden per scheme). These values
 * are stable across every brand, surface, and scheme.
 *
 * Naming: --[category]-[role]-[modifier?]
 * ========================================================================== */

:root {
  /* ---- Type families (product UI — all open-source / self-hostable) -------
   * Identity fonts (wordmark/slogan) are declared per brand, NOT here, and are
   * for rendered logo assets only — never general UI. */
  --font-display: 'Roboto', system-ui, sans-serif; /* marketing headlines, hero */
  --font-body: 'Inter', system-ui, sans-serif; /* all app UI, copy, labels */
  --font-mono: 'JetBrains Mono', ui-monospace, monospace; /* scores, codes, numbers */

  /* ---- Type scale (px, per brief) ---------------------------------------- */
  --text-xs: 11px;
  --text-sm: 13px;
  --text-base: 15px;
  --text-md: 17px;
  --text-lg: 20px;
  --text-xl: 24px;
  --text-2xl: 30px;
  --text-3xl: 38px;
  --text-4xl: 48px;
  --text-display: 64px;

  /* ---- Type weight ------------------------------------------------------- */
  --font-weight-regular: 400;
  --font-weight-medium: 500;
  --font-weight-semibold: 600;
  --font-weight-bold: 700;

  /* ---- Type leading ------------------------------------------------------ */
  --leading-tight: 1.2;
  --leading-snug: 1.35;
  --leading-normal: 1.5;
  --leading-relaxed: 1.7;

  /* ---- Type tracking ----------------------------------------------------- */
  --tracking-tight: -0.02em;
  --tracking-normal: 0em;
  --tracking-wide: 0.06em;
  --tracking-widest: 0.12em;

  /* ---- Spacing (4px base; non-linear scale) ------------------------------ */
  --space-0: 0px;
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 20px;
  --space-6: 24px;
  --space-8: 32px;
  --space-10: 40px;
  --space-12: 48px;
  --space-16: 64px;
  --space-20: 80px;
  --space-24: 96px;

  /* ---- Radius ------------------------------------------------------------ */
  --radius-none: 0px;
  --radius-sm: 3px;
  --radius-md: 6px;
  --radius-lg: 10px;
  --radius-xl: 16px;
  --radius-full: 9999px;

  /* ---- Shadow (light-scheme values; dark scheme swaps to hairline borders)
   * Tinted with slate-900 (15 23 42) rather than pure black. */
  --shadow-none: none;
  --shadow-xs: 0 1px 2px 0 rgb(15 23 42 / 0.05);
  --shadow-sm: 0 1px 3px 0 rgb(15 23 42 / 0.1), 0 1px 2px -1px rgb(15 23 42 / 0.1);
  --shadow-md: 0 4px 6px -1px rgb(15 23 42 / 0.1), 0 2px 4px -2px rgb(15 23 42 / 0.1);
  --shadow-lg: 0 10px 15px -3px rgb(15 23 42 / 0.1), 0 4px 6px -4px rgb(15 23 42 / 0.1);
  --shadow-xl: 0 20px 25px -5px rgb(15 23 42 / 0.1), 0 8px 10px -6px rgb(15 23 42 / 0.1);

  /* ---- Motion — duration ------------------------------------------------- */
  --duration-instant: 0ms;
  --duration-fast: 100ms;
  --duration-base: 200ms;
  --duration-slow: 350ms;
  --duration-deliberate: 500ms;

  /* ---- Motion — easing --------------------------------------------------- */
  --ease-default: cubic-bezier(0.4, 0, 0.2, 1);
  --ease-out: cubic-bezier(0, 0, 0.2, 1);
  --ease-in: cubic-bezier(0.4, 0, 1, 1);
  --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);

  /* ---- Z-index ----------------------------------------------------------- */
  --z-base: 0;
  --z-raised: 10;
  --z-sticky: 100;
  --z-dropdown: 200;
  --z-overlay: 300;
  --z-modal: 400;
  --z-toast: 500;

  /* ---- Focus ring (used by interactive components; color is scheme-aware) - */
  --focus-ring-width: 2px;
  --focus-ring-offset: 2px;
}

/* ---- @innovalda/tokens/brands/innovalda.css ---- */
/* =============================================================================
 * PARENT BRAND — InnovAlda. Layer 2 of 5. ALWAYS imported.
 *
 * The company identity (cyan). These are universal to every InnovAlda product,
 * so they live on :root with no data-brand gate.
 *
 * ⚠ ACCESSIBILITY: company cyan (#39d2ee) is FILL-ONLY with dark foreground.
 * As text / icon / 1px border on a light surface it measures ~1.8:1 and FAILS
 * WCAG. Never derive links or borders from --color-company-default/-hover on
 * light. For text/links use --color-company-dark (or --color-interactive-*).
 * Source: Looka brand kit (HANDOFF.md §4).
 * ========================================================================== */

:root {
  --color-company-default: #39d2ee; /* cyan */
  --color-company-hover: #1bb8d4;
  --color-company-subtle: #e8fafd;
  --color-company-on: #111111; /* dark text — cyan is too light for white */
  --color-company-dark: #111111;
  --color-company-light: #f5f5f5;

  /* Identity fonts — rendered logo/wordmark contexts ONLY, never general UI.
   * Licensed faces are fallback-guarded with open-source families. */
  --font-company-wordmark: 'Versatile Bold', 'Roboto', sans-serif;
  --font-company-slogan: 'ArgentCF ExtraBold', 'Roboto Slab', serif;
}

/* ---- @innovalda/tokens/brands/nemeo.css ---- */
/* =============================================================================
 * PRODUCT BRAND — Nemeo (verdigris + bronze). Layer 3 of 5 — plus the system's
 * first sanctioned SCHEME-LAYER overrides (green-tinted neutrals, verdigris-ink
 * dark canvas, yellow-pushed success). MDM console for travelling tablet sets.
 * Spec: docs/superpowers/specs/2026-08-09-nemeo-brand-design.md.
 *
 * ATTRIBUTE-ONLY (like koineo): apps MUST set data-brand="nemeo" on <html>.
 * Never seed any of these values on a bare :root.
 *
 * TWO-BLOCK STRUCTURE (load-bearing — do not "simplify"):
 *   • Light block: the selector list's compound arm (0,2,0) beats an explicit
 *     [data-scheme="light"] (0,1,0) regardless of import order; the bare arm
 *     covers the no-scheme-attribute case.
 *   • Dark block: re-declares EVERY --color-* property the light block sets,
 *     so the brand-vs-scheme tie (both 0,1,0) never decides anything and
 *     import order stays irrelevant. Enforced by a structural test in
 *     @innovalda/ui (token-contrast.test.ts). If you add a --color-* line to
 *     one block, add its counterpart to the other.
 *
 * Success is yellow-pushed (~95° hue, Δ77° vs verdigris) so a compliance badge
 * never reads as a brand chip — handoff: "do not narrow this gap".
 * Warning/danger/info/neutral status stay canonical.
 *
 * Bronze reference ramp (handoff §3; logo + badge/hairline uses; the deepened
 * #986a2a/#835b24 below are the AA text-bearing CTA steps):
 *   bronze-dark #6b4a21 · bronze-core #a9762f · bronze-light #c89b5e ·
 *   bronze-wash #f0e3cd
 * ========================================================================== */

[data-brand='nemeo'],
[data-brand='nemeo'][data-scheme='light'] {
  /* Brand — verdigris */
  --color-brand-default: #1e7a6e; /* verdigris-core; white-on = 5.17 */
  --color-brand-hover: #14504a; /* verdigris-deep (pressed) */
  --color-brand-subtle: #d8ece7; /* verdigris-wash */
  --color-brand-on: #ffffff;

  /* Muted siblings — sustained console UI runs on the deep step */
  --color-brand-muted: #14504a; /* white-on = 9.23 */
  --color-brand-muted-hover: #1e7a6e;
  --color-brand-muted-subtle: #e9f2f1;
  --color-brand-muted-on: #ffffff;

  /* Highlight — bronze accent (enrollment CTAs; keep scarce).
   * Anchor deepened from bronze-core #a9762f (a mid-tone: white 3.95 ✗,
   * dark text 4.65 — muddy) to carry white text at 4.74. */
  --color-highlight-default: #986a2a;
  --color-highlight-hover: #835b24; /* presses darker; white 6.02 */
  --color-highlight-subtle: #f0e3cd; /* bronze-wash */
  --color-highlight-on: #ffffff;
  --color-highlight-text: #6b4a21; /* bronze-dark on wash = 6.31 */

  /* Status SUCCESS ONLY — yellow-pushed away from the brand hue.
   * Dark -on (like warning): #5c9e2e is too light for white text (3.29). */
  --color-status-success: #5c9e2e;
  --color-status-success-subtle: #e7f0e0;
  --color-status-success-on: #0f1614; /* 5.58 */
  --color-status-success-text: #447522; /* 4.70 on subtle */

  /* Neutrals — green-tinted (handoff §3), AA-corrected where needed */
  --color-surface-base: #ffffff;
  --color-surface-raised: #ffffff;
  --color-surface-overlay: #ffffff;
  --color-surface-sunken: #f5f7f6; /* neutral-50 */
  --color-surface-disabled: #e7ebe9;
  --color-surface-inverse: #0f1614; /* neutral-900 chip (tooltips) */
  --color-overlay-scrim: rgb(15 22 20 / 0.5); /* neutral-900 @ 50% */

  --color-border-default: #dde3e1; /* neutral-200 */
  --color-border-strong: #c0c7c5;
  --color-border-subtle: #eaeeed;

  --color-text-primary: #0f1614; /* 18.34 on white */
  --color-text-secondary: #3a4744; /* neutral-700; 9.70 */
  --color-text-muted: #687371; /* handoff neutral-400 #7b8885 fails AA (3.68) → darkened in-family; 4.91 */
  --color-text-disabled: #95a09d;
  --color-text-inverse: #f5f7f6;

  /* Identity fonts — declared to shadow the Lumieos :root seed (Quart would
   * leak into the NEMEO wordmark otherwise). UI type inherits the foundation. */
  --font-brand-wordmark: 'Roboto', system-ui, sans-serif;
  --font-brand-slogan: 'Roboto', system-ui, sans-serif;
}

/* Dark — verdigris-ink canvas. Re-declares EVERY --color-* from the light
 * block (see header). Brand tints reuse dark.css's color-mix mechanism and
 * resolve against the values on this same carrier element. */
[data-brand='nemeo'][data-scheme='dark'] {
  /* Brand — verdigris-bright on ink */
  --color-brand-default: #4fa695; /* 5.01 on ink */
  --color-brand-hover: #6fb6a8;
  --color-brand-subtle: color-mix(in srgb, var(--color-brand-default) 22%, var(--color-surface-base));
  --color-brand-on: #0f1614; /* 6.30 */

  --color-brand-muted: #4fa695; /* mirrors default (koineo dark precedent) */
  --color-brand-muted-hover: #6fb6a8;
  --color-brand-muted-subtle: color-mix(in srgb, var(--color-brand-muted) 22%, var(--color-surface-base));
  --color-brand-muted-on: #0f1614;

  /* Highlight — bronze-light; subtle is a warm brown, NOT ink-mixed (bronze
   * over teal-ink goes olive). Adjacent to dark warning-subtle #3a2e10 —
   * accepted: highlight is a CTA accent, never a status. */
  --color-highlight-default: #c89b5e;
  --color-highlight-hover: #d0aa76;
  --color-highlight-subtle: #3a2c14;
  --color-highlight-on: #0f1614; /* 7.25 */
  --color-highlight-text: #c89b5e; /* dark pattern: -text = base; 5.36 on subtle */

  /* Status SUCCESS ONLY — brighter yellow-green for the ink canvas */
  --color-status-success: #8ec156;
  --color-status-success-subtle: #264b34;
  --color-status-success-on: #0f1614; /* 8.66 */
  --color-status-success-text: #8ec156; /* 4.64 on subtle */

  /* Neutrals — ink canvas + green-tinted steps */
  --color-surface-base: #0c2e2b; /* verdigris-ink */
  --color-surface-raised: #183836;
  --color-surface-overlay: #1d3d3a; /* tuned so canonical links clear 4.64 */
  --color-surface-sunken: #081e1c;
  --color-surface-disabled: #294744;
  --color-surface-inverse: #f5f7f6;
  --color-overlay-scrim: rgb(0 0 0 / 0.6); /* same as dark.css; re-declared for the invariant */

  --color-border-default: #2e4b49;
  --color-border-strong: #46605e;
  --color-border-subtle: #1f3f3c;

  --color-text-primary: #f5f7f6; /* 13.54 on ink */
  --color-text-secondary: #bbc5c3; /* 8.25 */
  --color-text-muted: #9daaa9; /* 6.08 base / 4.92 overlay */
  --color-text-disabled: #657a78;
  --color-text-inverse: #0f1614;
}

/* ---- @innovalda/tokens/surfaces/marketing.css ---- */
/* =============================================================================
 * SURFACE — Marketing. Overrides the app defaults under [data-surface="marketing"].
 *
 * Loose density, fuller brand colour, looser radius, generous motion budget —
 * realising the brief's app-vs-marketing table without touching component code.
 * ========================================================================== */

[data-surface='marketing'] {
  /* Marketing uses the full-strength brand colour. */
  --color-accent: var(--color-brand-default);
  --color-accent-hover: var(--color-brand-hover);
  --color-accent-subtle: var(--color-brand-subtle);
  --color-accent-on: var(--color-brand-on);

  /* Density — loose (--space-16…24). */
  --density-gap: var(--space-6);
  --density-section: var(--space-16);
  --density-inset: var(--space-8);

  /* Radius personality — looser. */
  --radius-control: var(--radius-lg);
  --radius-surface: var(--radius-xl);

  /* Motion budget — up to deliberate, spring easing OK. */
  --motion-budget: var(--duration-deliberate);
  --motion-ease: var(--ease-spring);
}

/* ---- @innovalda/tokens/schemes/light.css ---- */
/* =============================================================================
 * COLOR SCHEME — Light (default). Layer 5 of 5.
 *
 * surface / border / text / status / interactive. Slate-based neutrals,
 * blue-leaning. Seeded on :root (via :where, specificity 0) so light is the
 * default; [data-scheme="dark"] overrides win regardless of import order.
 *
 * STATUS colours have fixed meaning and never rebrand. Each carries its own
 * legible -on foreground (warning needs dark text; danger/info/success/neutral
 * take white). There is deliberately no global "text-on-status" token — a single
 * value can't be legible across all five.
 * ========================================================================== */

/* Highlight defaults to the active brand (specificity 0 so any brand's
 * [data-brand] override always wins, regardless of import order). */
:where(:root) {
  --color-highlight-default: var(--color-brand-default);
  --color-highlight-hover: var(--color-brand-hover);
  --color-highlight-subtle: var(--color-brand-subtle);
  --color-highlight-on: var(--color-brand-on);
  /* -text: AA text-on-subtle. Best-effort fallback here; brands with a real
   * highlight ramp (koineo, nemeo) override with validated values.
   * SCHEME-NEUTRAL by design — do not move into the [data-scheme] block below
   * (its 0,1,0 arm would tie with brand light blocks). */
  --color-highlight-text: var(--color-highlight-default);
}

:where(:root),
[data-scheme='light'] {
  /* ---- Surface ----------------------------------------------------------- */
  --color-surface-base: #ffffff;
  --color-surface-raised: #ffffff;
  --color-surface-overlay: #ffffff;
  --color-surface-sunken: #f8fafc; /* slate-50 */
  --color-surface-disabled: #f1f5f9; /* slate-100 */

  /* ---- Overlay ------------------------------------------------------------ */
  --color-overlay-scrim: rgb(15 23 42 / 0.5); /* slate-900 @ 50% — modal backdrop */
  --color-surface-inverse: #0f172a; /* slate-900 — dark chip on light (tooltips); pairs with --color-text-inverse */

  /* ---- Border ------------------------------------------------------------ */
  --color-border-default: #e2e8f0; /* slate-200 */
  --color-border-strong: #cbd5e1; /* slate-300 */
  --color-border-subtle: #f1f5f9; /* slate-100 */

  /* ---- Text -------------------------------------------------------------- */
  --color-text-primary: #0f172a; /* slate-900 */
  --color-text-secondary: #334155; /* slate-700 */
  --color-text-muted: #64748b; /* slate-500 */
  --color-text-disabled: #94a3b8; /* slate-400 */
  --color-text-inverse: #f8fafc; /* on dark fills */

  /* ---- Status (fixed meaning) -------------------------------------------- */
  --color-status-success: #16a34a;
  --color-status-success-subtle: #dcfce7;
  --color-status-success-on: #ffffff;
  /* -text: AA-safe (>=4.5:1) as TEXT on the -subtle background (issue #2).
     The base status color is a FILL color and fails that contrast in light. */
  --color-status-success-text: #15803d;

  --color-status-warning: #f59e0b;
  --color-status-warning-subtle: #fef3c7;
  --color-status-warning-on: #111111; /* dark text — amber is too light for white */
  --color-status-warning-text: #92400e;

  --color-status-danger: #dc2626;
  --color-status-danger-subtle: #fee2e2;
  --color-status-danger-on: #ffffff;
  --color-status-danger-text: #b91c1c;

  --color-status-info: #2563eb;
  --color-status-info-subtle: #dbeafe;
  --color-status-info-on: #ffffff;
  --color-status-info-text: #1d4ed8;

  --color-status-neutral: #64748b;
  --color-status-neutral-subtle: #f1f5f9;
  --color-status-neutral-on: #ffffff;
  --color-status-neutral-text: #475569;

  /* ---- Interactive (links / controls — NOT company cyan, which fails AA) -- */
  --color-interactive-default: #2563eb;
  --color-interactive-hover: #1d4ed8;
  --color-interactive-active: #1e40af;
  --color-interactive-visited: #6d28d9;
  --color-interactive-focus: #2563eb; /* focus-ring colour; ≥3:1 on light surfaces */

  /* ---- Chart (data-viz categorical; FIXED slot order — never cycle, never
     re-map on brand flips; slots 2/3/7 are sub-3:1 on white → relief rule:
     direct labels or table view. Validated 2026-07-01 (dataviz six checks). */
  --color-chart-1: #2a78d6; /* blue */
  --color-chart-2: #1baf7a; /* aqua */
  --color-chart-3: #eda100; /* yellow */
  --color-chart-4: #008300; /* green */
  --color-chart-5: #4a3aa7; /* violet */
  --color-chart-6: #e34948; /* red */
  --color-chart-7: #e87ba4; /* magenta */
  --color-chart-8: #eb6834; /* orange */
}

/* ---- @innovalda/tokens/schemes/dark.css ---- */
/* =============================================================================
 * COLOR SCHEME — Dark. Same token names as light, different values.
 *
 * Dark is NOT an inversion:
 *   • Status colours get their own (brighter, less saturated) values — the light
 *     versions are over-saturated on dark surfaces — each with a dark -on.
 *   • Shadows don't read on dark, so --shadow-* become hairline borders.
 *   • #111111 (shared brand DNA) seeds --color-surface-base.
 *   • Brand -subtle tints are re-derived from the ACTIVE brand via color-mix, so
 *     they stay correct when data-brand is switched at runtime (brand-agnostic).
 *
 * Activated by a single attribute flip: <html data-scheme="dark">.
 * ========================================================================== */

[data-scheme='dark'] {
  /* ---- Surface ----------------------------------------------------------- */
  --color-surface-base: #111111;
  --color-surface-raised: #1a1a1a;
  --color-surface-overlay: #242424;
  --color-surface-sunken: #0a0a0a;
  --color-surface-disabled: #2a2a2a;

  /* ---- Overlay ------------------------------------------------------------ */
  --color-overlay-scrim: rgb(0 0 0 / 0.6); /* modal backdrop — heavier in dark */
  --color-surface-inverse: #f5f5f5; /* light chip on dark (tooltips); pairs with --color-text-inverse */

  /* ---- Border ------------------------------------------------------------ */
  --color-border-default: #333333;
  --color-border-strong: #4d4d4d;
  --color-border-subtle: #222222;

  /* ---- Text -------------------------------------------------------------- */
  --color-text-primary: #f5f5f5;
  --color-text-secondary: #cccccc;
  --color-text-muted: #a3a3a3;
  --color-text-disabled: #666666;
  --color-text-inverse: #111111;

  /* ---- Status (brighter for dark surfaces; dark -on foreground) ----------- */
  --color-status-success: #4ade80;
  --color-status-success-subtle: #14331f;
  --color-status-success-on: #111111;
  /* -text: equals the base status color — dark bases already pass >=4.5:1
     on their -subtle backgrounds; token exists for scheme-symmetric API. */
  --color-status-success-text: #4ade80;

  --color-status-warning: #fbbf24;
  --color-status-warning-subtle: #3a2e10;
  --color-status-warning-on: #111111;
  --color-status-warning-text: #fbbf24;

  --color-status-danger: #f87171;
  --color-status-danger-subtle: #3a1a1a;
  --color-status-danger-on: #111111;
  --color-status-danger-text: #f87171;

  --color-status-info: #60a5fa;
  --color-status-info-subtle: #14233a;
  --color-status-info-on: #111111;
  --color-status-info-text: #60a5fa;

  --color-status-neutral: #94a3b8;
  --color-status-neutral-subtle: #1e293b;
  --color-status-neutral-on: #111111;
  --color-status-neutral-text: #94a3b8;

  /* ---- Interactive ------------------------------------------------------- */
  --color-interactive-default: #60a5fa;
  --color-interactive-hover: #93c5fd;
  --color-interactive-active: #3b82f6;
  --color-interactive-visited: #c4b5fd;
  --color-interactive-focus: #60a5fa;

  /* ---- Brand -subtle re-derived from the active brand (stay legible on dark) */
  --color-brand-subtle: color-mix(in srgb, var(--color-brand-default) 22%, var(--color-surface-base));
  --color-brand-muted-subtle: color-mix(in srgb, var(--color-brand-muted) 22%, var(--color-surface-base));
  --color-company-subtle: color-mix(in srgb, var(--color-company-default) 22%, var(--color-surface-base));

  /* ---- Shadows → hairline borders (box-shadow form) ---------------------- */
  --shadow-xs: 0 0 0 1px var(--color-border-subtle);
  --shadow-sm: 0 0 0 1px var(--color-border-default);
  --shadow-md: 0 0 0 1px var(--color-border-default);
  --shadow-lg: 0 0 0 1px var(--color-border-strong);
  --shadow-xl: 0 0 0 1px var(--color-border-strong);

  /* ---- Chart (selected dark steps — NOT an inversion of light; worst
     adjacent CVD ΔE 10.3 → 4+ series need direct labels or texture.
     Validated 2026-07-01 (dataviz six checks, surface #1a1a1a). */
  --color-chart-1: #3987e5; /* blue */
  --color-chart-2: #199e70; /* aqua */
  --color-chart-3: #c98500; /* yellow */
  --color-chart-4: #008300; /* green */
  --color-chart-5: #9085e9; /* violet */
  --color-chart-6: #e66767; /* red */
  --color-chart-7: #d55181; /* magenta */
  --color-chart-8: #d95926; /* orange */
}
