/* ============================================================
   Bonjour la toile — Tokens : polices, échelle mauve, mesures.
   ============================================================
   Ce fichier ne décrit AUCUN composant. Il pose les polices
   auto-hébergées et les valeurs brutes ; `blt.css`, chargée
   juste après, en tire les tokens sémantiques et dessine tout
   le reste.

   ⚠️ IL A PORTÉ 500 LIGNES QUI NE SERVAIENT PLUS À RIEN. Elles
   venaient de l'ancien annuaire (archivé) : une palette de 50
   « niches », une échelle de rayons jusqu'à 24 px, quatre
   niveaux d'ombres, et des classes `.text-*` qui imposaient un
   serif à tout `<h1>` sans classe. Le site actuel est à angle
   droit, sans ombre, et ses titres sont en monospace : pas une
   seule de ces règles n'était appelée, et celle sur `<h1>`
   n'attendait qu'un titre écrit sans classe pour sortir en
   Times. Retiré le 2026-09-01 avec le passage au « bloc ».

   RÈGLE : une valeur n'entre ici que si quelque chose la lit.
   ============================================================ */

@font-face {
  font-family: "Instrument Serif";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("fonts/InstrumentSerif-Regular.ttf") format("truetype");
}
@font-face {
  font-family: "Instrument Serif";
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url("fonts/InstrumentSerif-Italic.ttf") format("truetype");
}
@font-face {
  font-family: "Geist";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("fonts/Geist-Regular.ttf") format("truetype");
}
@font-face {
  font-family: "Geist";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("fonts/Geist-Medium.ttf") format("truetype");
}
@font-face {
  font-family: "Geist";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("fonts/Geist-SemiBold.ttf") format("truetype");
}
@font-face {
  font-family: "Geist";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("fonts/Geist-Bold.ttf") format("truetype");
}
@font-face {
  font-family: "Geist Mono";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("fonts/GeistMono-Regular.ttf") format("truetype");
}
@font-face {
  font-family: "Geist Mono";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("fonts/GeistMono-Medium.ttf") format("truetype");
}

:root {
  /* ---------- Échelle mauve ----------
     Le mauve n'est plus un accent posé sur du gris : il est une
     SURFACE. Les valeurs qui comptent sont donc celles du
     milieu de l'échelle (600 à 800), pas les teintes pâles :
     l'ancienne échelle en comptait onze, il en reste cinq. */
  --mauve-100: oklch(96%   0.022 305);
  --mauve-300: oklch(86%   0.080 305);
  --mauve-600: oklch(48%   0.190 305); /* L'APLAT */
  --mauve-700: oklch(40%   0.170 305);
  --mauve-800: oklch(31%   0.130 305);

  /* ---------- Encre et papier ----------
     Le neutre penche vers 300 : c'est le mauve qui le tiédit,
     pas un gris ramassé au hasard. Le papier n'est pas blanc
     et l'encre n'est pas noire. */
  --papier:    oklch(96.5% 0.009 300);
  --papier-2:  oklch(99%   0.004 300);
  --encre:     oklch(15%   0.015 300);
  --encre-2:   oklch(38%   0.020 300);
  --encre-3:   oklch(55%   0.022 300);
  --encre-4:   oklch(84%   0.015 300); /* le filet fin des écrans denses */

  /* ---------- États ---------- */
  --success:      oklch(48% 0.140 150);
  --success-soft: oklch(95% 0.035 150);
  --warning:      oklch(58% 0.130 70);
  --warning-soft: oklch(95% 0.045 70);
  --danger:       oklch(52% 0.180 25);
  --danger-soft:  oklch(95% 0.035 25);

  /* ---------- Typographie ----------
     Trois rôles, trois familles, et aucune n'est décorative :
     le monospace porte les titres, la grotesque le texte
     courant, le serif la seule marque. */
  --font-display: "Instrument Serif", Georgia, serif;
  --font-sans:    "Geist", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
  --font-mono:    "Geist Mono", ui-monospace, "SF Mono", Menlo, monospace;

  /* ⚠️ DEUX EXCEPTIONS ASSUMÉES À LA RÈGLE « RIEN QUI NE SOIT LU ».
     Les échelles numériques (`--fs-*`, `--sp-*`) restent ENTIÈRES même quand
     un cran n'est appelé nulle part : une échelle trouée pousse le suivant à
     écrire une valeur en dur. Et `--warning-soft` reste avec ses deux sœurs :
     un trio d'états dépareillé se répare toujours de travers. */
  --fs-12: 0.75rem;
  --fs-13: 0.8125rem;
  --fs-14: 0.875rem;
  --fs-15: 0.9375rem;
  --fs-16: 1rem;
  --fs-18: 1.125rem;
  --fs-20: 1.25rem;
  --fs-24: 1.5rem;
  --fs-32: 2rem;
  --fs-44: 2.75rem;

  --lh-normal:  1.45;
  --lh-relaxed: 1.6;

  --tracking-snug: -0.01em;
  --tracking-caps:  0.09em;

  /* ---------- Espacement (échelle 4 px) ---------- */
  --sp-1: 4px;
  --sp-2: 8px;
  --sp-3: 12px;
  --sp-4: 16px;
  --sp-5: 20px;
  --sp-6: 24px;
  --sp-8: 32px;
  --sp-10: 40px;
  --sp-12: 48px;
  --sp-16: 64px;
  --sp-20: 80px;
  --sp-24: 96px;

  /* ---------- Mouvement ----------
     Une seule durée. Le site ne s'anime pas : il change d'état. */
  --dur: 120ms;
}
