/* ============================================================
   CORE, primitivi non cromatici
   Questo file non cambia mai tra progetti né tra temi.
   Il colore vive interamente in themes/*.css
   ============================================================ */

:root {
  /* ---------- SPAZI ----------
     Base 4, nominati per pixel (tecnica: Geist, Stack Overflow).
     Scala CHIUSA: nessun valore fuori da questa lista. */
  --sp-0:    0;
  --sp-1:    max(1px, 0.0625rem);  /* hairline protetto (tecnica: Primer) */
  --sp-2:    2px;
  --sp-4:    4px;
  --sp-6:    6px;
  --sp-8:    8px;
  --sp-12:   12px;
  --sp-16:   16px;
  --sp-20:   20px;
  --sp-24:   24px;
  --sp-32:   32px;
  --sp-48:   48px;
  --sp-64:   64px;
  --sp-96:   96px;
  --sp-128:  128px;

  /* ---------- TIPOGRAFIA ----------
     8 taglie. Il buco 32→64 di Aalto è colmato con 40. */
  --fs-12:   0.75rem;
  --fs-14:   0.875rem;
  --fs-16:   1rem;
  --fs-20:   1.25rem;
  --fs-24:   1.5rem;
  --fs-32:   2rem;
  --fs-40:   2.5rem;
  --fs-56:   3.5rem;

  /* Line-height unitless: si adatta alla densità (divergenza da Aalto) */
  --lh-tight:   1.1;    /* display */
  --lh-snug:    1.25;   /* titoli */
  --lh-normal:  1.5;    /* corpo */
  --lh-relaxed: 1.7;    /* testo lungo */

  /* Tre pesi. Vedi rules/typography: il corpo usa solo il primo. */
  --fw-normal: 400;
  --fw-medium: 500;
  --fw-bold:   700;

  /* Tracking negativo sopra i 32px */
  --ls-normal:  0;
  --ls-tight:   -0.01em;
  --ls-tighter: -0.02em;

  /* Misura di riga per il testo lungo */
  --measure: 68ch;

  /* ---------- RAGGI ----------
     Più generosi di Primer/Geist: "moderno" oggi implica morbidezza. */
  --r-sm:   6px;
  --r-md:   10px;
  --r-lg:   16px;
  --r-xl:   24px;
  --r-full: 9999px;

  /* ---------- MOTION ----------
     Durate brevi: è un'interfaccia di lavoro, non un sito promozionale.
     (tecnica: Atlassian) */
  --dur-instant: 60ms;
  --dur-fast:    120ms;
  --dur-normal:  200ms;
  --dur-slow:    320ms;

  --ease-out:    cubic-bezier(0.2, 0.8, 0.3, 1);
  --ease-in-out: cubic-bezier(0.5, 0, 0.2, 1);
  --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1); /* supera l'1: rimbalzo */

  /* ---------- TRASPARENZE DI STATO ----------
     8 valori coprono hover/active/selected su QUALSIASI tema.
     (tecnica: Aalto) */
  --alpha-dark-1:  rgb(0 0 0 / 0.05);
  --alpha-dark-2:  rgb(0 0 0 / 0.09);
  --alpha-dark-3:  rgb(0 0 0 / 0.14);
  --alpha-dark-4:  rgb(0 0 0 / 0.40);
  --alpha-light-1: rgb(255 255 255 / 0.07);
  --alpha-light-2: rgb(255 255 255 / 0.12);
  --alpha-light-3: rgb(255 255 255 / 0.18);
  --alpha-light-4: rgb(255 255 255 / 0.40);

  /* ---------- DENSITÀ ----------
     scaled = si comprime · static = non si comprime mai
     (tecnica: Cloudscape. L'anello di focus non deve MAI comprimersi.) */
  --control-h:        40px;
  --control-pad-x:    var(--sp-16);
  --scaled-inset:     var(--sp-16);   /* padding interno contenitori */
  --scaled-stack:     var(--sp-24);   /* tra blocchi */
  --scaled-section:   var(--sp-64);   /* tra sezioni */

  --static-focus-ring:   2px;         /* mai comprimere */
  --static-focus-offset: 2px;         /* mai comprimere */
  --static-hairline:     var(--sp-1);
}

[data-density="compact"] {
  --control-h:      32px;
  --control-pad-x:  var(--sp-12);
  --scaled-inset:   var(--sp-12);
  --scaled-stack:   var(--sp-16);
  --scaled-section: var(--sp-48);
}

/* ---------- MOTION RIDOTTO ---------- */
@media (prefers-reduced-motion: reduce) {
  :root {
    --dur-instant: 0ms;
    --dur-fast:    0ms;
    --dur-normal:  0ms;
    --dur-slow:    0ms;
  }
}
