/* ============================================================================
   LEO Panel — tokens.css · two-tier (SPEC-010 §16.2, decisione 9)
   TIER 1 = raw palette (MAI usata dai componenti).
   TIER 2 = semantici per tema; i componenti consumano SOLO questi.
   UNICO file del repo dove sono ammessi hex letterali (gate in CI).
   Night: valori lockati (decisione 9), invariati.
   Day: palette «mist» (06/10/2026, Frisco: il chiaro era accecante) — off-white
   freddi con la tinta petrolio dell'accento night, 4 livelli di superficie,
   nessun bianco puro, nessun nero puro. WCAG AA verificato su TUTTE le
   superfici day (test tests/unit/test_css_tokens.py).
============================================================================ */

/* ---- @font-face — WOFF2 self-hosted (B-21, §16.3), nessun CDN ---------- */
@font-face { font-family:'Inter'; font-weight:400; font-style:normal; font-display:swap;
  src:url('/panel/static/fonts/inter-400.woff2') format('woff2'); }
@font-face { font-family:'Inter'; font-weight:500; font-style:normal; font-display:swap;
  src:url('/panel/static/fonts/inter-500.woff2') format('woff2'); }
@font-face { font-family:'Inter'; font-weight:600; font-style:normal; font-display:swap;
  src:url('/panel/static/fonts/inter-600.woff2') format('woff2'); }
@font-face { font-family:'Inter'; font-weight:700; font-style:normal; font-display:swap;
  src:url('/panel/static/fonts/inter-700.woff2') format('woff2'); }
@font-face { font-family:'JetBrains Mono'; font-weight:400; font-style:normal; font-display:swap;
  src:url('/panel/static/fonts/jetbrains-mono-400.woff2') format('woff2'); }
@font-face { font-family:'JetBrains Mono'; font-weight:500; font-style:normal; font-display:swap;
  src:url('/panel/static/fonts/jetbrains-mono-500.woff2') format('woff2'); }
@font-face { font-family:'JetBrains Mono'; font-weight:600; font-style:normal; font-display:swap;
  src:url('/panel/static/fonts/jetbrains-mono-600.woff2') format('woff2'); }

/* ---- TIER 1 — raw palette (mai usata dai componenti) -------------------- */
:root {
  /* lockati (decisione 9) — night */
  --raw-night:#0B1216;   --raw-night-hi:#141F26;  --raw-teal:#4FD8DF;
  --raw-night-ok:#6FD3A6; --raw-night-warn:#F0BE4C; --raw-night-hot:#FF7A52;
  /* day «mist» (06/10/2026) — superfici dalla più scura alla più chiara:
     bg (pagina) < well (input, nav attiva) < surface (copilot, palette) < panel (card, header, sidebar) */
  --raw-day-bg:#DEE5E8;      --raw-day-well:#E2E8EB;
  --raw-day-surface:#E5EBED; --raw-day-panel:#ECF0F2;
  --raw-day-ink:#17222A;     --raw-day-ink2:#44525C;
  --raw-day-line:#C4CED3;    --raw-day-line2:#677780;   /* line = divisori; line2 = bordi dei controlli (>= 3:1) */
  --raw-day-accent:#0A5E69;  /* petrolio: stessa famiglia del teal night */
  --raw-day-attention:#DD5672;  /* rosa segnale, testo scuro sopra (>= 4.5) */
  --raw-day-ok:#13603E;      --raw-day-warn:#764C0F;   --raw-day-down:#992C28;
  --raw-day-unknown:#4C5660; --raw-day-disabled:#58656D;  /* disabled e' anche TESTO (.st-disabled, valori dei tile): >= 4.5 */
  /* fissati in Fase A (test WCAG AA) — night */
  --raw-night-down:#E8685B;    --raw-night-unknown:#9AA5B4;
  --raw-night-disabled:#7C8A94;   /* era #55636D (3.05/2.71 su bg/surface): e' anche TESTO, >= 4.5 */
  --raw-night-ink:#E3E9ED;     --raw-night-ink2:#9AA5B4;  --raw-night-line:#22303A;
  --raw-night-line2:#5F6E78;   /* bordi dei controlli (>= 3:1); line resta il divisore decorativo */
  /* sensitivity smemex (per viste memoria; base dal ramo dark upstream panel.css:23) */
  --raw-sens-personal:#6FB0A8; --raw-sens-portable:#D6A25E; --raw-sens-confidential:#E06A72;
  --raw-sens-personal-day:#285D58; --raw-sens-portable-day:#754D18; --raw-sens-confidential-day:#95303E;

  /* Studio scuro (T1 Studio, 20/10/2026) — base: proposta del design system
     15/10 «Studio scura». Ritocchi MINIMI per WCAG (test_studio_themes.py):
     down #F47C70 -> #F69085, unknown #9AA5B4 -> #A4AFBC, disabled #55636D ->
     #8C969E (e' anche TESTO), sens-* schiariti per stare >= 4.5 sulla propria
     tinta. ok e attention riusano i raw night (come la proposta). */
  --raw-studio-bg:#11171D;     --raw-studio-panel:#192129;  --raw-studio-well:#222D37;
  --raw-studio-ink:#EDF1F5;    --raw-studio-ink2:#AABAC8;
  --raw-studio-line:#34414C;   --raw-studio-line2:#74879A;  /* line = divisore; line2 = bordi dei controlli */
  --raw-studio-accent:#A4C6FF; --raw-studio-on-accent:#16273D;
  --raw-studio-warn:#FFCE8B;   --raw-studio-down:#F69085;
  --raw-studio-unknown:#A4AFBC; --raw-studio-disabled:#8C969E;
  --raw-sens-personal-studio:#7FB8B1; --raw-sens-portable-studio:#D6A360;
  --raw-sens-confidential-studio:#E99699;
  /* Grigio chiaro (T1 Studio): sostituisce «mist» quando Studio e' acceso nel
     workspace. Base: proposta 15/10 «Grigia chiara»; ritocchi MINIMI per WCAG:
     ink2 #535E67 -> #4D5861, accent #385F68 -> #375C65, ok #276344 -> #276143,
     warn #795213 -> #745017, down #A03732 -> #943733, unknown #56636F ->
     #4C5863 (>= 4.5 sulla propria tinta), disabled #7C858D -> #5E676E (TESTO),
     attention rosa mist scurita #DD5672 -> #D45270 (>= 3 su ogni superficie). */
  --raw-gray-bg:#E4E6E8;       --raw-gray-well:#E8EAEC;
  --raw-gray-surface:#ECEEF0;  --raw-gray-panel:#F1F2F3;
  --raw-gray-ink:#222A30;      --raw-gray-ink2:#4D5861;
  --raw-gray-line:#C8CED3;     --raw-gray-line2:#747D85;
  --raw-gray-accent:#375C65;   --raw-gray-on-accent:#F5F6F7;
  --raw-gray-attention:#D45270;
  --raw-gray-ok:#276143;       --raw-gray-warn:#745017;     --raw-gray-down:#943733;
  --raw-gray-unknown:#4C5863;  --raw-gray-disabled:#5E676E;

  /* scala + font + layout (theme-independent) */
  --r:4px; --r-md:6px; --r-lg:7px; --r-xl:10px;
  /* scala tipografica — in rem: scala con l'impostazione "dimensione testo" del browser */
  --fs-3xs:0.5625rem; --fs-2xs:0.625rem; --fs-xs:0.6875rem; --fs-sm:0.75rem;
  --fs-base:0.8125rem; --fs-md:0.875rem; --fs-lg:1.1875rem; --fs-h1:1.375rem;
  --fs-xl:1.625rem;  --fs-2xl:2.125rem;
  --sans:'Inter', system-ui, -apple-system, "Segoe UI", sans-serif;
  --mono:'JetBrains Mono', ui-monospace, "Cascadia Code", Consolas, monospace;
  --side-w:236px;   /* pattern upstream panel.css:70 */
  --cop-w:48px;     /* default copilot: rail (decisione 7) */
  /* T2 Studio (solo con data-layout="studio" sull'<html>, panel.css): rail
     delle aree (icona + label) e colonna elenco. Spento: non usati. */
  --studio-rail-w:96px; --list-w:224px;
  /* ombre e velo (F3a, follow-up review T1): niente rgba() letterali in panel.css */
  --shadow-menu:0 12px 32px rgba(0,0,0,.35);
  --shadow-menu-up:0 -12px 32px rgba(0,0,0,.35);
  --shadow-modal:0 24px 64px rgba(0,0,0,.5);
  --shadow-fab:0 4px 16px rgba(0,0,0,.18);
  --shadow-drawer:0 0 40px rgba(0,0,0,.4);
  --scrim:rgba(4,6,10,.62);
}
:root[data-copilot="open"]   { --cop-w:290px; }
:root[data-copilot="rail"]   { --cop-w:48px; }
:root[data-copilot="hidden"] { --cop-w:0px; }

/* ---- TIER 2 — semantici per tema (i componenti consumano SOLO questi) --- */
/* ORDINE DEI BLOCCHI = FUNZIONALE (bug tema scoperto in WS2.4, harness
   2026-07-16): :root e [data-theme="day"] hanno pari specificità (0-1-0),
   quindi vince l'ordine di sorgente. Il blocco night (default, :root) DEVE
   stare PRIMA del day: col day dopo, su <html data-theme="day"> matchano
   entrambi e il day sovrascrive; col night dopo (com'era) il day non si
   applicava MAI — toggle che cambiava solo il glifo. Nessun valore toccato:
   i lock di decisione 9 restano quelli. */
:root, [data-theme="night"] {
  --bg:var(--raw-night); --surface:var(--raw-night-hi); --ink:var(--raw-night-ink);
  --ink-2:var(--raw-night-ink2); --line:var(--raw-night-line);
  --accent:var(--raw-teal);
  --attention:var(--raw-night-hot);
  --ok:var(--raw-night-ok); --warn:var(--raw-night-warn); --down:var(--raw-night-down);
  --disabled:var(--raw-night-disabled); --unknown:var(--raw-night-unknown);
  --panel:var(--surface); --panel-2:var(--surface); --raised:var(--surface);
  --line-2:var(--line); --control-border:var(--raw-night-line2); --ink-3:var(--ink-2); --accent-2:var(--accent);
  --err:var(--down); --info:var(--accent);
  --on-attention:var(--raw-night);     /* testo sui badge --attention (F3a, AA 7.3) */
  /* T1 Studio: alias espliciti (stessi valori di prima: nessun cambio visivo) */
  --on-accent:var(--bg); --focus-ring:var(--accent);
  --surface-page:var(--bg); --surface-panel:var(--panel); --surface-input:var(--panel-2);
  /* testo dei toni rossi sulla PROPRIA tinta (badge 13%, 14-16%): il tono puro
     su surface sta a 4.2-4.47; mescolato al 60% con --ink (pattern dei badge
     della console piattaforma, platform.css) sale a >= 6.4. Fondo e bordo
     restano del tono puro: cambia solo il testo, non il colore di stato. */
  --err-on-tint:color-mix(in oklab, var(--err) 60%, var(--ink));
  --sens-confidential-on-tint:color-mix(in oklab, var(--sens-confidential) 60%, var(--ink));
  --grid:rgba(255,255,255,.022);
  --sens-personal:var(--raw-sens-personal);
  --sens-portable:var(--raw-sens-portable);
  --sens-confidential:var(--raw-sens-confidential);
}
[data-theme="day"] {
  --bg:var(--raw-day-bg); --surface:var(--raw-day-surface); --ink:var(--raw-day-ink);
  --ink-2:var(--raw-day-ink2); --line:var(--raw-day-line);
  --accent:var(--raw-day-accent);      /* accento di LAVORO */
  --attention:var(--raw-day-attention); /* SOLO attenzione: badge, scadenze */
  --ok:var(--raw-day-ok); --warn:var(--raw-day-warn); --down:var(--raw-day-down);
  --disabled:var(--raw-day-disabled); --unknown:var(--raw-day-unknown);
  /* livelli di superficie distinti (in night coincidono tutti con --surface) */
  --panel:var(--raw-day-panel); --panel-2:var(--raw-day-well); --raised:var(--raw-day-panel);
  --line-2:var(--raw-day-line2); --control-border:var(--raw-day-line2); --ink-3:var(--ink-2); --accent-2:var(--accent);
  --err:var(--down); --info:var(--accent);
  --on-attention:var(--raw-night);     /* testo sui badge --attention (F3a, AA >= 4.5) */
  --on-accent:var(--bg); --focus-ring:var(--accent);
  --surface-page:var(--bg); --surface-panel:var(--panel); --surface-input:var(--panel-2);
  /* day: il tono puro e' gia' AA sulla propria tinta (test_css_tokens) */
  --err-on-tint:var(--err);
  --sens-confidential-on-tint:var(--sens-confidential);
  --grid:rgba(23,34,42,.035);
  /* ombre e velo più leggeri sul chiaro (in night valgono quelli di :root) */
  --shadow-menu:0 12px 32px rgba(23,34,42,.16);
  --shadow-menu-up:0 -12px 32px rgba(23,34,42,.16);
  --shadow-modal:0 24px 64px rgba(23,34,42,.24);
  --shadow-fab:0 4px 16px rgba(23,34,42,.14);
  --shadow-drawer:0 0 40px rgba(23,34,42,.2);
  --scrim:rgba(23,34,42,.42);
  --sens-personal:var(--raw-sens-personal-day);
  --sens-portable:var(--raw-sens-portable-day);
  --sens-confidential:var(--raw-sens-confidential-day);
}

/* ---- T1 Studio (20/10/2026): due temi nuovi, dietro flag per workspace ----
   ``studio_ui_enabled`` + ``studio_ui_tenant_slugs`` (unico punto di
   lettura: leo_panel.studio_flags). Questi blocchi si applicano SOLO se
   base.html mette data-theme="studio"/"gray", cosa che fa solo a flag acceso:
   a flag spento night e day «mist» restano quelli sopra, identici. Stessa
   specificita' (0-1-0) del :root: DEVONO restare DOPO il blocco night.
   Ogni tema definisce TUTTI i semantici (test_studio_themes.py): nessun valore
   ereditato per sbaglio dal :root night. Font e dimensioni non cambiano. */
[data-theme="studio"] {
  --bg:var(--raw-studio-bg); --surface:var(--raw-studio-panel); --ink:var(--raw-studio-ink);
  --ink-2:var(--raw-studio-ink2); --line:var(--raw-studio-line);
  --accent:var(--raw-studio-accent);
  --attention:var(--raw-night-hot);
  --ok:var(--raw-night-ok); --warn:var(--raw-studio-warn); --down:var(--raw-studio-down);
  --disabled:var(--raw-studio-disabled); --unknown:var(--raw-studio-unknown);
  --panel:var(--raw-studio-panel); --panel-2:var(--raw-studio-well); --raised:var(--raw-studio-panel);
  --line-2:var(--raw-studio-line2); --control-border:var(--raw-studio-line2); --ink-3:var(--ink-2); --accent-2:var(--accent);
  --err:var(--down); --info:var(--accent);
  --on-attention:var(--raw-studio-bg);
  --on-accent:var(--raw-studio-on-accent); --focus-ring:var(--accent);
  --surface-page:var(--bg); --surface-panel:var(--panel); --surface-input:var(--panel-2);
  /* il tono puro e' gia' >= 4.5 sulla propria tinta (test): niente mix con --ink */
  --err-on-tint:var(--err);
  --sens-confidential-on-tint:var(--sens-confidential);
  --grid:rgba(255,255,255,.022);
  --shadow-menu:0 12px 32px rgba(0,0,0,.35);
  --shadow-menu-up:0 -12px 32px rgba(0,0,0,.35);
  --shadow-modal:0 24px 64px rgba(0,0,0,.5);
  --shadow-fab:0 4px 16px rgba(0,0,0,.18);
  --shadow-drawer:0 0 40px rgba(0,0,0,.4);
  --scrim:rgba(4,6,10,.62);
  --sens-personal:var(--raw-sens-personal-studio);
  --sens-portable:var(--raw-sens-portable-studio);
  --sens-confidential:var(--raw-sens-confidential-studio);
}
[data-theme="gray"] {
  --bg:var(--raw-gray-bg); --surface:var(--raw-gray-surface); --ink:var(--raw-gray-ink);
  --ink-2:var(--raw-gray-ink2); --line:var(--raw-gray-line);
  --accent:var(--raw-gray-accent);
  --attention:var(--raw-gray-attention);
  --ok:var(--raw-gray-ok); --warn:var(--raw-gray-warn); --down:var(--raw-gray-down);
  --disabled:var(--raw-gray-disabled); --unknown:var(--raw-gray-unknown);
  --panel:var(--raw-gray-panel); --panel-2:var(--raw-gray-well); --raised:var(--raw-gray-panel);
  --line-2:var(--raw-gray-line2); --control-border:var(--raw-gray-line2); --ink-3:var(--ink-2); --accent-2:var(--accent);
  --err:var(--down); --info:var(--accent);
  --on-attention:var(--raw-night);
  --on-accent:var(--raw-gray-on-accent); --focus-ring:var(--accent);
  --surface-page:var(--bg); --surface-panel:var(--panel); --surface-input:var(--panel-2);
  --err-on-tint:var(--err);
  --sens-confidential-on-tint:var(--sens-confidential);
  --grid:rgba(34,42,48,.035);
  --shadow-menu:0 12px 32px rgba(34,42,48,.16);
  --shadow-menu-up:0 -12px 32px rgba(34,42,48,.16);
  --shadow-modal:0 24px 64px rgba(34,42,48,.24);
  --shadow-fab:0 4px 16px rgba(34,42,48,.14);
  --shadow-drawer:0 0 40px rgba(34,42,48,.2);
  --scrim:rgba(34,42,48,.42);
  --sens-personal:var(--raw-sens-personal-day);
  --sens-portable:var(--raw-sens-portable-day);
  --sens-confidential:var(--raw-sens-confidential-day);
}

/* Chiaro HDR: candidato neutro da verificare fisicamente; gray SDR resta invariato.
   Superfici acromatiche; foreground calcolati per testo anche sulle tinte.
   Nessuna selezione automatica o promessa di luminanza del display. */
:root {
  --raw-gray-hdr-bg:#CDCDCD; --raw-gray-hdr-well:#D4D4D4;
  --raw-gray-hdr-surface:#DCDCDC; --raw-gray-hdr-panel:#E4E4E4;
  --raw-gray-hdr-ink:#222A30; --raw-gray-hdr-ink2:#424A52;
  --raw-gray-hdr-line:#B0B0B0; --raw-gray-hdr-line2:#656565;
  --raw-gray-hdr-accent:#104079; --raw-gray-hdr-on-accent:#F5F6F7;
  --raw-gray-hdr-attention:#A72E58; --raw-gray-hdr-on-attention:#F5F6F7;
  --raw-gray-hdr-ok:#154C28; --raw-gray-hdr-warn:#623900;
  --raw-gray-hdr-down:#80202C; --raw-gray-hdr-unknown:#3D434B;
  --raw-gray-hdr-disabled:#50565C;
  --raw-gray-hdr-sens-personal:#19463F; --raw-gray-hdr-sens-portable:#5D380B;
  --raw-gray-hdr-sens-confidential:#762036;
}
[data-theme="gray-hdr"] {
  --bg:var(--raw-gray-hdr-bg); --surface:var(--raw-gray-hdr-surface); --ink:var(--raw-gray-hdr-ink);
  --ink-2:var(--raw-gray-hdr-ink2); --line:var(--raw-gray-hdr-line);
  --accent:var(--raw-gray-hdr-accent);
  --attention:var(--raw-gray-hdr-attention);
  --ok:var(--raw-gray-hdr-ok); --warn:var(--raw-gray-hdr-warn); --down:var(--raw-gray-hdr-down);
  --disabled:var(--raw-gray-hdr-disabled); --unknown:var(--raw-gray-hdr-unknown);
  --panel:var(--raw-gray-hdr-panel); --panel-2:var(--raw-gray-hdr-well); --raised:var(--raw-gray-hdr-panel);
  --line-2:var(--raw-gray-hdr-line2); --control-border:var(--raw-gray-hdr-line2); --ink-3:var(--ink-2); --accent-2:var(--accent);
  --err:var(--down); --info:var(--accent);
  --on-attention:var(--raw-gray-hdr-on-attention);
  --on-accent:var(--raw-gray-hdr-on-accent); --focus-ring:var(--accent);
  --surface-page:var(--bg); --surface-panel:var(--panel); --surface-input:var(--panel-2);
  --err-on-tint:var(--err);
  --sens-confidential-on-tint:var(--sens-confidential);
  --grid:rgba(34,42,48,.035);
  --shadow-menu:0 12px 32px rgba(34,42,48,.16);
  --shadow-menu-up:0 -12px 32px rgba(34,42,48,.16);
  --shadow-modal:0 24px 64px rgba(34,42,48,.24);
  --shadow-fab:0 4px 16px rgba(34,42,48,.14);
  --shadow-drawer:0 0 40px rgba(34,42,48,.2);
  --scrim:rgba(34,42,48,.42);
  --sens-personal:var(--raw-gray-hdr-sens-personal);
  --sens-portable:var(--raw-gray-hdr-sens-portable);
  --sens-confidential:var(--raw-gray-hdr-sens-confidential);
}

/* Analytical identities and decorative dark-theme accents; status tokens unchanged. */
:root {
  --raw-chart-blue:#7AB8FF; --raw-chart-teal:#64D6C6; --raw-chart-purple:#C4A1FF;
  --chart-series-1:var(--accent); --chart-series-2:var(--accent); --chart-series-3:var(--accent);
}
[data-theme="night"], [data-theme="studio"] {
  --chart-series-1:var(--raw-chart-blue); --chart-series-2:var(--raw-chart-teal); --chart-series-3:var(--raw-chart-purple);
  --decor-icon:var(--chart-series-1); --decor-border:color-mix(in srgb,var(--chart-series-1) 60%,var(--line));
  --decor-heading:color-mix(in srgb,var(--accent) 22%,var(--panel));
  --decor-heading-end:color-mix(in srgb,var(--chart-series-1) 14%,var(--panel));
  --decor-wash:color-mix(in srgb,var(--chart-series-3) 10%,var(--panel));
}
