/* ═══════════════════════════════════════════════════════════════════════════════
   POLICES — 100 % LOCALES. Aucun CDN, aucune requête sortante.

   POURQUOI CE FICHIER EXISTE (mesure du 30/07/2026, au navigateur) :
   les trois gabarits appelaient `fonts.googleapis.com` à CHAQUE chargement de page —
   `index.html:38-40`, `login.html:12-13`, `brand_preview.html:9-10`. Conséquences réelles :
     · Google recevait l'adresse IP et l'heure d'ouverture du dashboard de chacune des
       agences, à chaque page ;
     · sans Internet, la police ne chargeait pas ;
     · et `SECURITY_LOCAL_ONLY.md` promettait un fonctionnement en boucle locale stricte.
   Inter était DÉJÀ locale (`polish.css`, police variable) : le lien Google était donc, pour
   elle, un pur reliquat. Seule Sora manquait.

   POURQUOI UN FICHIER À PART, et pas `polish.css` :
   `polish.css` porte 274 règles de style qui arbitrent sidebar, cartes, tables, boutons.
   Le charger sur l'écran de connexion pour y récupérer une police l'aurait restylé au
   passage. Ce fichier ne déclare QUE des polices : on peut le charger partout sans risque.
   La déclaration d'Inter y est reprise à l'identique (même fichier `.woff2`, même plage de
   graisses) ; celle de `polish.css` reste en place et ne gêne pas — deux `@font-face`
   identiques ne se contredisent pas.

   Sora sert au wordmark (`tokens.css:84`, `--font-display`). Les deux fichiers ci-dessous
   couvrent les graisses 700 ET 800 : Sora est une police variable, Google la sert en deux
   tranches Unicode (latin / latin-ext), pas en deux graisses.
   Récupérés le 30/07/2026 depuis fonts.gstatic.com, Sora v17.
   ═══════════════════════════════════════════════════════════════════════════════ */

/* ── Inter — le corps de texte ──────────────────────────────────────────────── */
@font-face {
  font-family: 'Inter';
  src: url('/static/fonts/InterVariable.woff2') format('woff2-variations');
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}

/* ── IBM Plex Mono — TOUT CE QUI EST MESURÉ ────────────────────────────────────
   Ajoutée le 07/08. `--mono` valait `'Cascadia Code','Consolas','Monaco',monospace` :
   AUCUNE police web, une pile système. Consolas sur le PC de production, Monaco sur le
   Mac, Courier chez une agence qui n'a ni l'un ni l'autre — trois dessins et trois
   largeurs pour la colonne la plus regardée du produit, donc des colonnes de chiffres
   qui ne s'alignent pas pareil selon la machine.

   Trois graisses, parce que le produit en emploie trois : 400 (donnée de tableau),
   500 (compteurs et grands chiffres), 600 (étiquettes de section en capitales).
   Sous-ensemble latin, 14,8 / 15,0 / 15,7 Ko — à comparer aux 352 Ko d'Inter.

   RÈGLE QUI VA AVEC, et c'est elle qui compte : tout ce qui est MESURÉ se compose ici
   (compteur, durée, montant, identifiant, horodatage, pourcentage), toujours avec
   `font-variant-numeric: tabular-nums`. Tout ce qui est DIT reste en Inter. ── */
@font-face {
  font-family: 'IBM Plex Mono';
  src: url('/static/fonts/IBMPlexMono-400.woff2') format('woff2');
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: 'IBM Plex Mono';
  src: url('/static/fonts/IBMPlexMono-500.woff2') format('woff2');
  font-weight: 500; font-style: normal; font-display: swap;
}
@font-face {
  font-family: 'IBM Plex Mono';
  src: url('/static/fonts/IBMPlexMono-600.woff2') format('woff2');
  font-weight: 600; font-style: normal; font-display: swap;
}

/* ── Sora — le wordmark. latin ──────────────────────────────────────────────── */
@font-face {
  font-family: 'Sora';
  src: url('/static/fonts/Sora-latin.woff2') format('woff2');
  /* ÉTAIT « 700 800 », ET LE FICHIER EN CONTIENT PLUS — corrigé le 03/08.
     Sora-latin.woff2 est une police VARIABLE : son axe wght va de 400 à 800 (lu dans la table
     fvar du fichier). Le @font-face l'écrêtait à 700-800, donc demander 400 ou 500 rendait 700.
     Mesuré au navigateur, largeur d'un même mot à 40 px : wght 100 à 700 rendaient TOUS
     392,77 px — un seul dessin. En forçant l'axe par-dessus le CSS : 400 -> 383,48 px,
     500 -> 386,69 px, 600 -> 389,72 px. Trois dessins réels, présents, inatteignables.
     Conséquence directe : le produit ne pouvait titrer qu'en très gras, et le très gras sur un
     titre est le marqueur le plus reconnaissable d'une interface générée. La référence donnée
     par le fondateur (hilead.co) titre à 52 px en graisse 500 — cette graisse-là était sur
     notre disque depuis le début. Deux lignes, aucun fichier à télécharger. */
  font-weight: 400 800;
  font-style: normal;
  font-display: swap;
  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;
}

/* ── Sora — latin étendu (accents rares, symboles monétaires) ───────────────── */
@font-face {
  font-family: 'Sora';
  src: url('/static/fonts/Sora-latin-ext.woff2') format('woff2');
  /* ÉTAIT « 700 800 », ET LE FICHIER EN CONTIENT PLUS — corrigé le 03/08.
     Sora-latin.woff2 est une police VARIABLE : son axe wght va de 400 à 800 (lu dans la table
     fvar du fichier). Le @font-face l'écrêtait à 700-800, donc demander 400 ou 500 rendait 700.
     Mesuré au navigateur, largeur d'un même mot à 40 px : wght 100 à 700 rendaient TOUS
     392,77 px — un seul dessin. En forçant l'axe par-dessus le CSS : 400 -> 383,48 px,
     500 -> 386,69 px, 600 -> 389,72 px. Trois dessins réels, présents, inatteignables.
     Conséquence directe : le produit ne pouvait titrer qu'en très gras, et le très gras sur un
     titre est le marqueur le plus reconnaissable d'une interface générée. La référence donnée
     par le fondateur (hilead.co) titre à 52 px en graisse 500 — cette graisse-là était sur
     notre disque depuis le début. Deux lignes, aucun fichier à télécharger. */
  font-weight: 400 800;
  font-style: normal;
  font-display: swap;
  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;
}
