/* ═══════════════════════════════════════════════════════════════════════════
   LES TROIS POLICES DE LA MAQUETTE, SERVIES PAR NOUS
   ───────────────────────────────────────────────────────────────────────────
   Archivo (titres), Public Sans (texte), JetBrains Mono (chiffres).

   ⚠️ AUCUNE REQUETE NE SORT. La maquette les chargeait depuis
   fonts.googleapis.com ; en production cela ferait appeler Google par chaque
   personne qui ouvre UNITOOLS, donc lui transmettre son adresse IP. C'est
   l'ecart RGPD n°3, deja ferme le 31/07/2026 sur l'application de Franck en
   auto-hebergeant ses quatre bibliotheques JS. On ne le rouvre pas ici.

   ⚠️ CE FICHIER EST UNE FEUILLE A PART, ET C'EST LA RAISON. Les URL d'une
   feuille externe se resolvent par rapport A ELLE. Le meme fichier sert donc
   la maquette (unitools/index.html) et l'application (app/assets/), qui n'ont
   pas la meme base — ecrit dans le <style> en ligne, il aurait fallu deux
   chemins, donc une reecriture dans construire.py, donc deux verites.

   ⚠️ CE SONT DES POLICES VARIABLES : un seul fichier par famille et par
   sous-ensemble couvre toute la plage de graisses. Google rend le MEME fichier
   pour 500 et pour 800 — verifie, octet pour octet — et la table `fvar` est
   bien la. Declarer une graisse fixe ferait telecharger quatre fois le meme
   fichier ; declarer la plage sur un fichier statique rendrait toutes les
   graisses identiques, sans un mot. Les deux se verifient a l'ecran.

   6 fichiers, 152 Ko. Le cyrillique, le grec et le vietnamien ne sont pas
   telecharges : personne ici n'ecrit dans ces alphabets, et c'etait les deux
   tiers du poids.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Le sous-ensemble latin-ext porte l'oe lie, les capitales accentuees et les
   caracteres rares des noms propres. Le navigateur ne le telecharge que si la
   page en contient : c'est a cela que sert unicode-range. */

@font-face{
  font-family:'Archivo'; font-style:normal; font-weight:100 900; font-display:swap;
  src:url('archivo-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:'Archivo'; font-style:normal; font-weight:100 900; font-display:swap;
  src:url('archivo-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:'Public Sans'; font-style:normal; font-weight:100 900; font-display:swap;
  src:url('public-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;
}
@font-face{
  font-family:'Public Sans'; font-style:normal; font-weight:100 900; font-display:swap;
  src:url('public-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:100 900; font-display:swap;
  src:url('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:'JetBrains Mono'; font-style:normal; font-weight:100 900; font-display:swap;
  src:url('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;
}
