/* ── Fontul Onest (OFL 1.1, fonts/OFL.txt), găzduit local ──────────────────────────────────
   §12.1: desfășurarea nu are ieșire spre internet, deci fontul se servește de aici, nu de la un CDN.
   Font variabil (100–900), subseturile latin, latin-ext (ș ț ă î â), chirilic și chirilic-ext (rusa);
   `font-display: swap` — textul apare cu fontul de sistem până se încarcă, nu lipsește. */
@font-face { font-family: "Onest"; font-style: normal; font-weight: 100 900; font-display: swap; src: url("fonts/onest-cyrillic-ext.woff2") format("woff2"); unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }
@font-face { font-family: "Onest"; font-style: normal; font-weight: 100 900; font-display: swap; src: url("fonts/onest-cyrillic.woff2") format("woff2"); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }
@font-face { font-family: "Onest"; font-style: normal; font-weight: 100 900; font-display: swap; src: url("fonts/onest-latin-ext.woff2") format("woff2"); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Onest"; font-style: normal; font-weight: 100 900; font-display: swap; src: url("fonts/onest-latin.woff2") format("woff2"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }

/* ============================================================================================
   MUD — Modelul Unitar de Design. Tokenurile sistemului RSIC.
   Sursa: RSIC-IMPL-01 Anexa B, extrase din colecțiile Figma „Foundations” la 24.08.2026.

   Trei straturi, în ordinea în care se folosesc:
     1. primitive  — paleta brută. NU se folosește direct în CSS de componentă.
     2. semantic   — rolurile (fundal, text, chenar). Aici se uită componentele obișnuite.
     3. domeniu    — severitate, TLP, termene. Singurul strat pentru stările de domeniu.

   Regula 7 din CLAUDE.md: niciun cod hexazecimal, nicio dimensiune în px și niciun spațiu
   ad-hoc într-o componentă. Dacă lipsește un token, aceea este o constatare de ridicat, nu o
   permisiune de a inventa unul.

   Perechea acestui fișier este `tokens.json`, formatul de schimb cu Figma: aceleași tokenuri, pe
   aceleași patru straturi. Cele două se verifică una pe alta — `DesignTokenTests` eșuează dacă un
   token există într-unul și lipsește din celălalt, sau dacă valorile s-au depărtat. Un export nou din
   Figma se aplică prin `tokens.json`, iar testul arată exact ce mai are de urmat în CSS.
   ============================================================================================ */

/* ── 1. Primitive ─────────────────────────────────────────────────────────────────────────── */
:root {
  --blue-sky-50: #F1F6FD;  --blue-sky-100: #E8F0FB; --blue-sky-150: #D6E5F8; --blue-sky-200: #CCDEF6;
  --blue-sky-300: #99BCED; --blue-sky-400: #669BE4; --blue-sky-500: #3379DB; --blue-sky-600: #0058D2;
  --blue-sky-700: #0046A8; --blue-sky-800: #00357E; --blue-sky-900: #00295A;

  --gray-50: #F7F7F7;  --gray-100: #F5F5F5; --gray-200: #F1F1F1; --gray-250: #D9D9D9;
  --gray-300: #B2B2B2; --gray-350: #8A8A8A; --gray-400: #757575; --gray-500: #616161;
  --gray-600: #444444; --gray-700: #383838; --gray-800: #2C2C2C; --gray-900: #1E1E1E;

  --red-25: #FEFAFA;  --red-50: #FEEFEE;  --red-100: #FEE4E2; --red-200: #FECDC9;
  --red-300: #FDA19B; --red-400: #F97066; --red-500: #F04438; --red-600: #D92D20;
  --red-700: #B32318; --red-800: #912018; --red-900: #7A271A;

  --apricot-25: #FEF8F4;  --apricot-50: #FEF5DD;  --apricot-100: #FEEFC6; --apricot-200: #FEDF89;
  --apricot-300: #FEC84B; --apricot-400: #FDB022; --apricot-500: #F79009; --apricot-600: #DC6803;
  --apricot-700: #B54708; --apricot-800: #93370D; --apricot-900: #792E0D;

  --green-25: #F0F9F4;  --green-50: #E8F7F1;  --green-100: #E6F5EE; --green-200: #CDEADD;
  --green-300: #9AD6BB; --green-400: #68C199; --green-500: #35AD77; --green-600: #039855;
  --green-700: #027948; --green-800: #05603A; --green-900: #054F31;

  --magenta-600: #AA18CE;
}

/* ── 2. Semantic ──────────────────────────────────────────────────────────────────────────── */
:root {
  --bg-default: #FFFFFF;            --bg-default-hover: var(--gray-100);
  --bg-default-active: var(--gray-250);
  --bg-secondary: var(--gray-100);  --bg-secondary-hover: var(--gray-200);
  --bg-tertiary: var(--gray-200);   --bg-subtle: var(--gray-50);
  --bg-inverse: var(--gray-900);
  --bg-brand: var(--blue-sky-600);  --bg-brand-hover: var(--blue-sky-700);
  --bg-brand-active: var(--blue-sky-800);
  --bg-brand-secondary: var(--blue-sky-100); --bg-brand-subtle: var(--blue-sky-50);
  --bg-positive: var(--green-600);  --bg-positive-secondary: var(--green-100);
  --bg-positive-subtle: var(--green-25);
  --bg-warning: var(--apricot-400); --bg-warning-secondary: var(--apricot-100);
  --bg-warning-subtle: var(--apricot-25);
  --bg-danger: var(--red-600);      --bg-danger-secondary: var(--red-100);
  --bg-danger-subtle: var(--red-25);
  --bg-danger-hover: var(--red-700); --bg-danger-active: var(--red-800);
  --bg-disabled: var(--gray-200);

  /* Stratul de sub o fereastră modală: fundalul invers, semitransparent. Derivat dintr-un token, nu
     scris ca valoare, ca să urmeze fundalul invers dacă acela se schimbă. */
  --bg-backdrop: color-mix(in srgb, var(--bg-inverse) 60%, transparent);

  --border-default: var(--gray-250);   --border-secondary: var(--gray-300);
  --border-tertiary: var(--gray-600);  --border-strong: #000000; --border-subtle: #FFFFFF;
  --border-brand: var(--blue-sky-600); --border-positive: var(--green-700);
  --border-danger: var(--red-600);     --border-disabled: var(--gray-250);

  /* Chenarul controalelor de formular. WCAG 2.2 SC 1.4.11 cere 3:1 pentru marginea unui control față
     de fundal; --border-default (1,4:1) și --border-secondary (2,1:1) nu trec, iar --border-tertiary
     este prea închis pentru un câmp în repaus. gray-350 dă 3,45:1 pe alb. */
  --border-control: var(--gray-350);

  --text-default: #000000;          --text-secondary: var(--gray-700);
  --text-tertiary: var(--gray-400); --text-inverse: #FFFFFF;
  --text-brand: var(--blue-sky-600); --text-visited: var(--magenta-600);
  --text-positive: var(--green-600); --text-warning: var(--apricot-700);
  --text-danger: var(--red-600);    --text-disabled: var(--gray-300);

  /* Variantele „strong”: pentru text mic pe fundalurile secundare ale aceleiași familii.
     --text-positive dă 3,3:1 pe --bg-positive-secondary și 3,7:1 pe alb; --text-danger dă 4,0:1 pe
     --bg-danger-secondary. WCAG 2.2 AA (CNF171) cere 4,5:1: green-700 dă 4,9:1, red-700 dă 5,5:1. */
  --text-positive-strong: var(--green-700);
  --text-danger-strong: var(--red-700);
}

/* ── Tipografie, spațiere, rotunjire ──────────────────────────────────────────────────────── */
:root {
  --font-family: "Onest", system-ui, -apple-system, "Segoe UI", sans-serif;

  /* Familie monospațiată, pentru șirurile în care fiecare caracter este dat, nu ales: vectori CVSS,
     numere de caz, documente CSAF și IODEF. Acolo alinierea coloanelor și distincția dintre 0 și O,
     1 și l, sunt condiții de citire corectă, nu preferință tipografică. Onest nu are variantă
     monospațiată, deci stiva pornește de la fonturile de sistem. */
  --font-family-mono: ui-monospace, "Cascadia Mono", "Consolas", "Liberation Mono", monospace;

  --font-size-10: 0.625rem; --font-size-12: 0.75rem;  --font-size-14: 0.875rem;
  --font-size-16: 1rem;     --font-size-18: 1.125rem; --font-size-20: 1.25rem;
  --font-size-24: 1.5rem;   --font-size-28: 1.75rem;  --font-size-32: 2rem;
  --font-size-36: 2.25rem;  --font-size-40: 2.5rem;   --font-size-48: 3rem;
  --font-size-56: 3.5rem;   --font-size-64: 4rem;

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

  --line-height-12: 0.75rem; --line-height-16: 1rem;   --line-height-20: 1.25rem;
  --line-height-24: 1.5rem;  --line-height-28: 1.75rem; --line-height-32: 2rem;
  --line-height-36: 2.25rem; --line-height-40: 2.5rem;  --line-height-48: 3rem;
  --line-height-56: 3.5rem;  --line-height-64: 4rem;
  /* 80: pasul de afiș („display”) al eroului din portalul public — 64/80 dă 125%, singura pereche
     lizibilă la mărimea 64; adăugat la reproiectarea portalului (§12.3). */
  --line-height-80: 5rem;

  --space-0: 0;        --space-2: 0.125rem; --space-4: 0.25rem;  --space-6: 0.375rem;
  --space-8: 0.5rem;   --space-12: 0.75rem; --space-16: 1rem;    --space-20: 1.25rem;
  --space-24: 1.5rem;  --space-32: 2rem;    --space-40: 2.5rem;  --space-48: 3rem;
  --space-56: 3.5rem;  --space-64: 4rem;    --space-80: 5rem;    --space-96: 6rem;
  --space-120: 7.5rem;

  --radius-0: 0;        --radius-4: 0.25rem; --radius-6: 0.375rem; --radius-8: 0.5rem;
  --radius-12: 0.75rem; --radius-16: 1rem;   --radius-24: 1.5rem;  --radius-32: 2rem;
  --radius-full: 999px;

  --border-width-0-5: 0.5px; --border-width-1: 1px; --border-width-1-5: 1.5px;
  --border-width-2: 2px;     --border-width-3: 3px;

  /* Straturi. Un singur loc unde se decide ce stă peste ce. */
  --z-sticky: 10; --z-drawer: 100; --z-modal: 200; --z-popover: 300; --z-toast: 400;

  /* Durate. CNF171 cere respectarea „prefers-reduced-motion”; a se vedea mud-base.css. */
  --duration-fast: 120ms; --duration-normal: 200ms;

  /* Inelul de focus. CNF171 cere focus vizibil; 2px cu 2px decalaj rămâne vizibil pe orice fundal. */
  --focus-ring-width: 2px;
  --focus-ring-offset: 2px;
  --focus-ring-color: var(--border-brand);

  /* CNF171: ținta minimă de interacțiune este de 24px. */
  --target-size-min: 1.5rem;

  /* Umbre. Culoarea este fundalul invers, atenuat — derivată, nu scrisă. */
  --shadow-popover: 0 0.25rem 1rem color-mix(in srgb, var(--bg-inverse) 16%, transparent);
  --shadow-modal: 0 1rem 3rem color-mix(in srgb, var(--bg-inverse) 28%, transparent);

  /* Umbrele de suprafață, aliniate scării drop-shadow din MUD (100/200/300), traduse în rem și în
     culoarea derivată din fundalul invers: card în repaus, antet lipit la derulare, element ridicat. */
  --shadow-card: 0 0 0.03125rem color-mix(in srgb, var(--bg-inverse) 30%, transparent), 0 0.0625rem 0.1875rem color-mix(in srgb, var(--bg-inverse) 12%, transparent);
  --shadow-sticky: 0 0 0.03125rem color-mix(in srgb, var(--bg-inverse) 18%, transparent), 0 0.1875rem 0.5rem color-mix(in srgb, var(--bg-inverse) 8%, transparent);
  --shadow-raised: 0 0 0.03125rem color-mix(in srgb, var(--bg-inverse) 15%, transparent), 0 0.3125rem 0.75rem color-mix(in srgb, var(--bg-inverse) 10%, transparent);

  /* Spațierea literelor: titlurile mari se strâng ușor (scara MUD), etichetele majuscule se răresc. */
  --letter-spacing-tight: -0.02em;
  --letter-spacing-wide: 0.04em;

  /* Dimensiunile învelișului intern și ale elementelor repetate: o singură sursă pentru bara de sus,
     meniul lateral, panoul lateral de metadate, avatare și pictogramele SVG în linie. */
  --size-topbar: 4rem;
  --size-sidenav: 16rem;
  --size-aside: 22rem;
  --size-avatar-sm: 1.75rem;
  --size-avatar-md: 2.5rem;
  --size-avatar-lg: 3rem;
  --size-icon: 1.125rem;
  --size-icon-sm: 1rem;
}

/* ── 3. Domeniu ───────────────────────────────────────────────────────────────────────────── */
:root {
  /* Severitate. „high” și „medium” nu au voie să arate la fel — constatare din revizuirea de design.
     „critical” și TLP „green” iau varianta „strong” a textului: cea obișnuită nu atinge 4,5:1 pe
     fundalul secundar al insignei (constatare axe, CNF171). */
  --sev-critical-bg: var(--bg-danger-secondary);  --sev-critical-fg: var(--text-danger-strong);
  --sev-critical-border: var(--border-danger);
  --sev-high-bg: var(--bg-warning-secondary);     --sev-high-fg: var(--text-warning);
  --sev-high-border: transparent;
  --sev-medium-bg: var(--bg-brand-secondary);     --sev-medium-fg: var(--text-brand);
  --sev-medium-border: transparent;
  --sev-low-bg: var(--bg-secondary);              --sev-low-fg: var(--text-secondary);
  --sev-low-border: transparent;

  /* TLP 2.0. „clear” nu reia niciodată tratamentul verde: verdele este al lui „green”. */
  --tlp-red-bg: var(--bg-default);                --tlp-red-fg: var(--text-danger);
  --tlp-red-border: var(--border-danger);
  --tlp-amber-bg: var(--bg-warning-secondary);    --tlp-amber-fg: var(--text-warning);
  --tlp-amber-border: transparent;
  --tlp-amber-strict-bg: var(--bg-warning-secondary); --tlp-amber-strict-fg: var(--text-warning);
  --tlp-amber-strict-border: var(--text-warning);
  --tlp-green-bg: var(--bg-positive-secondary);   --tlp-green-fg: var(--text-positive-strong);
  --tlp-green-border: transparent;
  --tlp-clear-bg: var(--bg-secondary);            --tlp-clear-fg: var(--text-secondary);
  --tlp-clear-border: transparent;

  /* Termene */
  --deadline-breached-bg: var(--bg-danger-subtle);
  --deadline-imminent-bg: var(--bg-warning-subtle);

  /*
    CNF184, textual: statutul „Nou” cu text îngroșat; severitatea „Critică” cu text îngroșat roșu.
    Tokenurile există ca regula să fie într-un singur loc, nu redusă la fiecare tabel în parte.
  */
  --row-new-weight: var(--font-weight-bold);
  --row-critical-weight: var(--font-weight-bold);
  --row-critical-fg: var(--text-danger);
}
