/* Polices hébergées ici, et plus chez Google (30/08/2026, audit G-01).
 *
 * ── Ce que ce fichier répare ────────────────────────────────────────────────
 *
 * Quatre pages chargeaient leurs polices depuis fonts.googleapis.com :
 * l'application, /betainfo, /dl et le centre d'administration. Le navigateur y
 * envoyait l'adresse IP, l'en-tête User-Agent et le Referer — AVANT toute action
 * de l'utilisateur, et sans consentement possible puisque c'est le premier octet
 * de la page.
 *
 * C'est le cas de figure de la décision LG München de janvier 2022, et il figure
 * dans les recommandations de plusieurs autorités européennes. Surtout :
 * Google Fonts ne figurait PAS au registre des traitements, qui déclare pourtant
 * jusqu'au webhook Discord recevant une adresse IP en cas de tentatives
 * répétées. L'oubli était d'autant plus visible que le reste est minutieux.
 *
 * ── Ce que ça change, en dehors du droit ───────────────────────────────────
 *
 * Un DNS et une poignée de main TLS en moins avant le premier rendu, sur le
 * chemin critique. Les quatre fichiers pèsent 92 Ko au total — moins que
 * l'aller-retour qu'ils remplacent — et le service worker les précharge déjà
 * (`globPatterns` couvre woff2), donc ils sont là hors ligne.
 *
 * ── Pourquoi des polices VARIABLES ─────────────────────────────────────────
 *
 * Un seul fichier par famille et par sous-ensemble couvre TOUTES les graisses
 * (400 à 800). En statique il en aurait fallu huit, et il aurait fallu penser à
 * en ajouter un le jour où quelqu'un utilise une graisse de plus.
 *
 * ── Pourquoi `unicode-range` ────────────────────────────────────────────────
 *
 * C'est lui qui fait que `latin-ext` n'est téléchargé QUE si la page contient un
 * caractère qui l'exige. Sans ces déclarations, les deux sous-ensembles
 * partiraient à chaque visite. Les plages sont celles que Google sert lui-même,
 * reprises telles quelles.
 *
 * ── Comment les remplacer ──────────────────────────────────────────────────
 *
 * Les fichiers viennent de fonts.gstatic.com, familles Plus Jakarta Sans (v12),
 * JetBrains Mono (v24) et Instrument Sans (v4), sous-ensembles latin et
 * latin-ext. Toutes trois sont sous SIL Open Font License 1.1, qui autorise
 * explicitement l'hébergement.
 *
 * ── Instrument Sans, ajoutée le 12/09/2026 ─────────────────────────────────
 *
 * La direction « Redesign avec bouton maison » la demande, et la charge depuis
 * `fonts.googleapis.com` — c'est-à-dire exactement ce que ce fichier a retiré
 * treize jours plus tôt. Une maquette ne peut pas savoir ça ; elle est écrite
 * pour s'afficher dans un navigateur, pas pour tenir le RGPD d'un produit.
 * Reprendre ses deux `<link>` tels quels aurait renvoyé l'adresse IP de chaque
 * famille à Google dès le premier octet, sans consentement possible, et remis
 * hors registre un traitement qu'on avait déclaré éteint.
 *
 * Elle est donc hébergée ici, comme les deux autres. Coût : 41 Ko pour les deux
 * sous-ensembles, précachés par le service worker, zéro requête tierce.
 * Pour les mettre à jour : récupérer le CSS de Google avec un User-Agent
 * moderne, en extraire les URL woff2 des sous-ensembles latin, et regénérer ce
 * fichier.
 */

@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 400 800;
  /* `swap` : le texte s'affiche tout de suite dans la police de repli, puis
     bascule. Un titre invisible pendant 300 ms est pire qu'un titre qui change. */
  font-display: swap;
  src: url('/fonts/plus-jakarta-sans-latin.woff2') format('woff2');
  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';
  font-style: normal;
  font-weight: 400 600;
  /* `swap` : le texte s'affiche tout de suite dans la police de repli, puis
     bascule. Un titre invisible pendant 300 ms est pire qu'un titre qui change. */
  font-display: swap;
  src: url('/fonts/jetbrains-mono-latin.woff2') format('woff2');
  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';
  font-style: normal;
  font-weight: 400 600;
  /* `swap` : le texte s'affiche tout de suite dans la police de repli, puis
     bascule. Un titre invisible pendant 300 ms est pire qu'un titre qui change. */
  font-display: swap;
  src: url('/fonts/jetbrains-mono-latin-ext.woff2') format('woff2');
  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;
}

@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 400 800;
  /* `swap` : le texte s'affiche tout de suite dans la police de repli, puis
     bascule. Un titre invisible pendant 300 ms est pire qu'un titre qui change. */
  font-display: swap;
  src: url('/fonts/plus-jakarta-sans-latin-ext.woff2') format('woff2');
  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;
}

/* Instrument Sans — la police de texte depuis le 12/09/2026.
   Variable 400→700 : la direction n'utilise plus de graisse 800, ses titres
   sont en 600. Un seul fichier par sous-ensemble couvre donc tout. */
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 400 700;
  /* `swap` : le texte s'affiche tout de suite dans la police de repli, puis
     bascule. Un titre invisible pendant 300 ms est pire qu'un titre qui change. */
  font-display: swap;
  src: url('/fonts/instrument-sans-latin.woff2') format('woff2');
  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: 'Instrument Sans';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/fonts/instrument-sans-latin-ext.woff2') format('woff2');
  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;
}
