/* ============================================================
   DESIGN SYSTEM v6 — PRIMITIVES
   ============================================================
   Le vocabulaire brut du système : des valeurs, et un nom pour chacune.
   Rien ici ne décrit un usage — « indigo 600 », pas « la couleur des
   boutons ». C'est ce qui permet à un thème de redéfinir une intention
   sans toucher au vocabulaire.

   Ces valeurs sont les SEULES du projet à être écrites littéralement.
   Partout ailleurs, une couleur est un var() vers l'une d'elles ; la
   règle stylelint no-literal-colors-outside-primitives le vérifie.

   Ce fichier est universel : aucun thème ne le remplace. Un thème qui a
   besoin de couleurs absentes d'ici les apporte dans sa propre section 0,
   sous un préfixe qui lui est propre (--cc-*, --base-solaire-*…).

   Polices : 100 % système, aucune requête réseau.

   Chargement : ce fichier D'ABORD, puis defaults.css.
   Voir documentation/ARCHITECTURE-CSS.md.
   ============================================================ */


/* ============================================================
   0. PRIMITIVES — valeurs brutes, communes à tous les thèmes
   ============================================================ */
:root {
  /* ── Palette neutre (Slate) ──
     925 : cran intermédiaire (fond « sunken » du mode sombre) ;
     1000 : noir pur (voile de backdrop, extrêmes du thème Puissant). */
  --base-neutral-0: #ffffff;
  --base-neutral-50: #f8fafc;
  --base-neutral-100: #f1f5f9;
  --base-neutral-200: #e2e8f0;
  --base-neutral-300: #cbd5e1;
  --base-neutral-400: #94a3b8;
  --base-neutral-500: #64748b;
  --base-neutral-600: #475569;
  --base-neutral-700: #334155;
  --base-neutral-800: #1e293b;
  --base-neutral-900: #0f172a;
  --base-neutral-925: #0a0e1a;
  --base-neutral-950: #020617;
  --base-neutral-1000: #000000;

  /* ── Primary (Indigo) ── */
  --base-primary-50: #eef2ff;
  --base-primary-100: #e0e7ff;
  --base-primary-200: #c7d2fe;
  --base-primary-300: #a5b4fc;
  --base-primary-400: #818cf8;
  --base-primary-500: #6366f1;
  --base-primary-600: #4f46e5;
  --base-primary-700: #4338ca;
  --base-primary-800: #3730a3;
  --base-primary-900: #312e81;

  /* ── Accent (Violet) ── */
  --base-accent-50: #f5f3ff;
  --base-accent-100: #ede9fe;
  --base-accent-200: #ddd6fe;
  --base-accent-300: #c4b5fd;
  --base-accent-400: #a78bfa;
  --base-accent-500: #8b5cf6;
  --base-accent-600: #7c3aed;
  --base-accent-700: #6d28d9;
  --base-accent-800: #5b21b6;
  --base-accent-900: #4c1d95;

  /* ── Statuts — universels, ne changent PAS avec le thème ──
     (le sens « succès = vert », « danger = rouge » ne doit
     jamais être réinterprété par un thème de marque) */
  --base-success-50: #ecfdf5;
  --base-success-100: #d1fae5;
  --base-success-200: #a7f3d0;
  --base-success-300: #6ee7b7;
  --base-success-400: #34d399;
  --base-success-500: #10b981;
  --base-success-600: #059669;
  --base-success-700: #047857;

  --base-warning-50: #fffbeb;
  --base-warning-100: #fef3c7;
  --base-warning-200: #fde68a;
  --base-warning-300: #fcd34d;
  --base-warning-400: #fbbf24;
  --base-warning-500: #f59e0b;
  --base-warning-600: #d97706;
  --base-warning-700: #b45309;

  --base-error-50: #fff1f2;
  --base-error-100: #ffe4e6;
  --base-error-200: #fecdd3;
  --base-error-300: #fda4af;
  --base-error-400: #fb7185;
  --base-error-500: #f43f5e;
  --base-error-600: #e11d48;
  --base-error-700: #be123c;

  --base-info-50: #f0f9ff;
  --base-info-100: #e0f2fe;
  --base-info-200: #bae6fd;
  --base-info-300: #7dd3fc;
  --base-info-400: #38bdf8;
  --base-info-500: #0ea5e9;
  --base-info-600: #0284c7;
  --base-info-700: #0369a1;

  /* ── Font stacks système (Modern Font Stacks — modernfontstacks.com) ──
     Aucune police téléchargée : rendu instantané, zéro layout shift,
     zéro dépendance réseau. Chaque nom de police "aspirationnel" en
     tête de liste est un fallback gracieux vers l'équivalent système
     si la police n'est pas installée sur la machine de l'utilisateur. */

  /* Texte courant */
  --base-font-system-ui: system-ui, sans-serif;
  --base-font-transitional: Charter, 'Bitstream Charter', 'Sitka Text', Cambria, serif;
  --base-font-old-style: 'Iowan Old Style', 'Palatino Linotype', 'URW Palladio L', P052, serif;
  --base-font-humanist: Seravek, 'Gill Sans Nova', Ubuntu, Calibri, 'DejaVu Sans', source-sans-pro, sans-serif;
  --base-font-geo-humanist: Avenir, Montserrat, Corbel, 'URW Gothic', source-sans-pro, sans-serif;
  --base-font-classical: Optima, Candara, 'Noto Sans', source-sans-pro, sans-serif;
  --base-font-neo-grotesque: Inter, Roboto, 'Helvetica Neue', 'Arial Nova', 'Nimbus Sans', Arial, sans-serif;

  /* Monospace */
  --base-font-mono-slab: 'Nimbus Mono PS', 'Courier New', monospace;
  --base-font-mono-code: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace;

  /* Display */
  --base-font-industrial: Bahnschrift, 'DIN Alternate', 'Franklin Gothic Medium', 'Nimbus Sans Narrow', sans-serif-condensed, sans-serif;
  --base-font-rounded: ui-rounded, 'Hiragino Maru Gothic ProN', Quicksand, Comfortaa, Manjari, 'Arial Rounded MT', 'Arial Rounded MT Bold', Calibri, source-sans-pro, sans-serif;
  --base-font-slab: Rockwell, 'Rockwell Nova', 'Roboto Slab', 'DejaVu Serif', 'Sitka Small', serif;
  --base-font-antique: Superclarendon, 'Bookman Old Style', 'URW Bookman', 'URW Bookman L', 'Georgia Pro', Georgia, serif;
  --base-font-didone: Didot, 'Bodoni MT', 'Noto Serif Display', 'URW Palladio L', P052, Sylfaen, serif;
  --base-font-handwritten: 'Segoe Print', 'Bradley Hand', Chilanka, TSCu_Comic, casual, cursive;

  /* ── Échelle typographique (fluide) ── */
  --base-text-xs: clamp(0.694rem, 0.66vi + 0.53rem, 0.75rem);
  --base-text-sm: clamp(0.8rem, 0.8vi + 0.6rem, 0.875rem);
  --base-text-base: clamp(0.875rem, 1vi + 0.65rem, 1rem);
  --base-text-md: clamp(1rem, 1.2vi + 0.7rem, 1.125rem);
  --base-text-lg: clamp(1.125rem, 1.5vi + 0.75rem, 1.25rem);
  --base-text-xl: clamp(1.25rem, 2vi + 0.8rem, 1.5rem);
  --base-text-2xl: clamp(1.5rem, 2.5vi + 0.9rem, 1.875rem);
  --base-text-3xl: clamp(1.875rem, 3vi + 1rem, 2.25rem);
  --base-text-4xl: clamp(2.25rem, 4vi + 1rem, 3rem);
  --base-text-5xl: clamp(3rem, 5vi + 1rem, 3.75rem);
  --base-text-6xl: clamp(3.75rem, 6vi + 1rem, 4.5rem);

  /* ── Graisses ── */
  --base-weight-light: 300;
  --base-weight-regular: 400;
  --base-weight-medium: 500;
  --base-weight-semi: 600;
  --base-weight-bold: 700;
  --base-weight-extra: 800;
  --base-weight-black: 900;

  /* ── Interlignage ── */
  --base-leading-none: 1;
  --base-leading-tight: 1.25;
  --base-leading-snug: 1.375;
  --base-leading-normal: 1.5;
  --base-leading-relaxed: 1.625;
  --base-leading-loose: 2;

  /* ── Interlettrage ── */
  --base-tracking-tighter: -0.05em;
  --base-tracking-tight: -0.025em;
  --base-tracking-normal: 0em;
  --base-tracking-wide: 0.025em;
  --base-tracking-wider: 0.05em;
  --base-tracking-widest: 0.1em;

  /* ── Échelle d'espacement brute ── */
  --base-space-0: 0;
  --base-space-px: 1px;
  --base-space-0\.5: 0.125rem;
  --base-space-1: 0.25rem;
  --base-space-1\.5: 0.375rem;
  --base-space-2: 0.5rem;
  --base-space-2\.5: 0.625rem;
  --base-space-3: 0.75rem;
  --base-space-4: 1rem;
  --base-space-5: 1.25rem;
  --base-space-6: 1.5rem;
  --base-space-7: 1.75rem;
  --base-space-8: 2rem;
  --base-space-10: 2.5rem;
  --base-space-12: 3rem;
  --base-space-14: 3.5rem;
  --base-space-16: 4rem;
  --base-space-20: 5rem;
  --base-space-24: 6rem;
  --base-space-32: 8rem;
  --base-space-40: 10rem;
  --base-space-48: 12rem;
  --base-space-64: 16rem;

  /* ── Échelle de rayons brute ── */
  --base-radius-none: 0;
  --base-radius-sm: 0.25rem;
  --base-radius-md: 0.375rem;
  --base-radius-lg: 0.5rem;
  --base-radius-xl: 0.75rem;
  --base-radius-2xl: 1rem;
  --base-radius-3xl: 1.5rem;
  --base-radius-full: 9999px;

  /* ── Échelle d'ombres brute ── */
  --base-shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --base-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
  --base-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
  --base-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
  --base-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
  --base-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
  --base-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.06);
  --base-shadow-glow-pri: 0 0 20px rgb(99 102 241 / 0.4), 0 0 40px rgb(99 102 241 / 0.15);
  --base-shadow-glow-acc: 0 0 20px rgb(139 92 246 / 0.4), 0 0 40px rgb(139 92 246 / 0.15);
  --base-shadow-glow-ok: 0 0 20px rgb(16 185 129 / 0.4), 0 0 40px rgb(16 185 129 / 0.15);
  --base-shadow-glow-err: 0 0 20px rgb(244 63 94 / 0.4), 0 0 40px rgb(244 63 94 / 0.15);

  /* Piles d'élévation « Moderne » (teinte froide) — primitives
     brutes ; la famille sémantique 4 (--shadow-elev-*) pointe
     dessus, en light comme en dark. */
  /* light-dark() ne prend que des couleurs, jamais une pile d'ombres
     entière. Or les géométries sont identiques d'un mode à l'autre :
     seules la teinte et l'opacité changent. On factorise donc les
     TEINTES — qui, elles, basculent avec light-dark() — et la pile
     s'écrit une seule fois. */
  --base-shadow-tint-1: light-dark(hsl(220 3% 15%/0.1), hsl(220 40% 2%/0.36));
  --base-shadow-tint-2: light-dark(hsl(220 3% 15%/0.11), hsl(220 40% 2%/0.4));
  --base-shadow-tint-3: light-dark(hsl(220 3% 15%/0.13), hsl(220 40% 2%/0.47));
  --base-shadow-tint-4: light-dark(hsl(220 3% 15%/0.17), hsl(220 40% 2%/0.6));

  --base-shadow-elev-low: 0.3px 0.5px 0.7px var(--base-shadow-tint-1), 0.4px 0.8px 1px var(--base-shadow-tint-1);
  --base-shadow-elev-mid: 0.3px 0.5px 0.7px var(--base-shadow-tint-2), 0.8px 1.6px 2px var(--base-shadow-tint-2), 2px 4px 5px var(--base-shadow-tint-2);
  --base-shadow-elev-high: 0.3px 0.5px 0.7px var(--base-shadow-tint-1), 1.5px 2.9px 3.7px var(--base-shadow-tint-3), 5px 10px 12.6px var(--base-shadow-tint-4);

  /* ── Easings / durées brutes ── */
  --base-ease: cubic-bezier(0.4, 0, 0.2, 1);
  --base-ease-in: cubic-bezier(0.4, 0, 1, 1);
  --base-ease-out: cubic-bezier(0, 0, 0.2, 1);
  --base-ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
  --base-ease-spring: cubic-bezier(0.22, 1.3, 0.36, 1);
  --base-duration-fast: 150ms;
  --base-duration-normal: 250ms;
  --base-duration-slow: 400ms;
  --base-duration-slower: 600ms;

  /* ── Z-index brut ── */
  --base-layer-behind: -1;
  --base-layer-base: 0;
  --base-layer-raised: 10;
  --base-layer-dropdown: 100;
  --base-layer-sticky: 200;
  --base-layer-overlay: 300;
  --base-layer-modal: 400;
  --base-layer-popover: 500;
  --base-layer-toast: 600;
  --base-layer-tooltip: 700;
  --base-layer-max: 9999;

  /* ── Largeurs de conteneur brutes ── */
  --base-width-xs: 384px;
  --base-width-sm: 640px;
  --base-width-md: 768px;
  --base-width-lg: 1024px;
  --base-width-xl: 1280px;
  --base-width-2xl: 1536px;

  /* ── Dégradés ── */
  --base-gradient-primary: linear-gradient(135deg, var(--base-primary-500), var(--base-accent-500));
  --base-gradient-primary-vivid: linear-gradient(135deg, var(--base-primary-400), var(--base-accent-600));
  --base-gradient-warm: linear-gradient(135deg, #f97316, #ef4444, #ec4899);
  --base-gradient-cool: linear-gradient(135deg, #06b6d4, #6366f1, #8b5cf6);
  --base-gradient-aurora: linear-gradient(135deg, #10b981, #3b82f6, #8b5cf6);
  --base-gradient-sunset: linear-gradient(135deg, #fbbf24, #f97316, #ef4444);
  --base-gradient-mesh: radial-gradient(at 20% 80%, var(--base-primary-300) 0, transparent 50%),
    radial-gradient(at 80% 20%, var(--base-accent-300) 0, transparent 50%),
    radial-gradient(at 50% 50%, var(--base-info-200) 0, transparent 70%);
}
