/* ═══════════════════════════════════════════════════════════════
   griot/fonts.css — LE point de bascule typographique (S5.1, 2026-07-28)
   ───────────────────────────────────────────────────────────────
   ★ POUR CHANGER UNE POLICE, C'EST ICI — ET NULLE PART AILLEURS.

   Créé sur demande opérateur (2026-07-28) : « gardons l'option que je
   pourrai faire des modifications sur la police plus tard ». Sans ce
   fichier, un changement de police imposerait d'éditer le <head> de
   CHAQUE page ; avec lui, les pages ne bougent jamais.

   Satisfait aussi SoT §5 — « polices auto-hébergées » — que nous
   violions : les faces venaient de cdn.jsdelivr.net. Elles sont
   maintenant dans `griot/fonts/`, servies en same-origin.
   Bénéfices mesurés du passage en self-host :
     · SoT §5 respecté (c'était une contrainte dure, pas une préférence)
     · une dépendance tierce en moins sur le chemin critique du rendu
     · 88 Ko au total pour TOUTES les graisses des deux familles

   ⚠ `font-src` de `_headers` N'A PAS été resserré à 'self', volontairement :
   les pages encore en thème sombre chargent toujours leurs polices depuis
   cdn.jsdelivr.net, et le resserrer maintenant les casserait. À faire à la
   purge S5.5, quand plus aucune page n'utilisera le CDN.

   ── PROCÉDURE DE REMPLACEMENT ────────────────────────────────────
   1. Déposer le(s) .woff2 dans `griot/fonts/`. Préférer une police
      VARIABLE (un fichier = tout l'axe de graisse). Une police
      statique impose un @font-face PAR graisse — sinon le navigateur
      synthétise un faux gras, défaut mesuré ici le 2026-07-28.
   2. Remplacer le bloc @font-face correspondant ci-dessous.
   3. Mettre à jour `--font-ui` / `--font-data` dans `style-v2.css`.
   4. Bump du `?v=` sur `fonts.css` ET `style-v2.css` dans les pages
      (memory `static_cachebust`).
   5. Re-vérifier dans le navigateur :
        [...document.fonts].map(f => `${f.family} | ${f.weight}`)
      L'axe doit couvrir toutes les graisses utilisées (400→700).
      « La police est chargée » ≠ « la police rend ».
   ⚠ Ne PAS remplacer la mono sans re-vérifier l'alignement tabulaire :
   toute donnée du produit en dépend (`font-variant-numeric: tabular-nums`).
   ═══════════════════════════════════════════════════════════════ */

/* ── UI / titres — Figtree Variable, axe wght 300-900 ────────────
   Candidat nommé SoT §2 (« sans géométrique humaniste »). Choisi comme
   équivalent libre le plus proche de la Sofia Pro de cgdev.org.        */

@font-face {
  font-family: 'Figtree Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 300 900;
  src: url('/fonts/figtree-latin-wght-normal.woff2') format('woff2-variations');
  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;
}

@font-face {
  font-family: 'Figtree Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 300 900;
  src: url('/fonts/figtree-latin-ext-wght-normal.woff2') format('woff2-variations');
  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;
}

/* ── Données — JetBrains Mono Variable, axe wght 100-800 ─────────
   Mono tabular pour TOUTE donnée (SoT §2, vérifié sur les 7 frames).
   C'est la pièce la plus structurante du système : les colonnes de la
   table d'évidence, les montants et les stamps en dépendent.           */

@font-face {
  font-family: 'JetBrains Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url('/fonts/jetbrains-mono-latin-wght-normal.woff2') format('woff2-variations');
  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;
}

@font-face {
  font-family: 'JetBrains Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url('/fonts/jetbrains-mono-latin-ext-wght-normal.woff2') format('woff2-variations');
  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;
}
