/* ==========================================================================
   Portfolio — fonts.css · SOURCE UNIQUE des polices de la charte
   --------------------------------------------------------------------------
   Les trois familles (Space Grotesk, Inter Tight, JetBrains Mono) étaient
   servies par fonts.googleapis.com / fonts.gstatic.com : l'adresse IP de
   chaque visiteur partait chez Google avant tout consentement. Les woff2
   vivent désormais dans static/fonts/ et sont servis par le site lui-même :
   zéro requête tierce, zéro transfert de donnée personnelle hors hébergeur.

   Pourquoi un fichier à part de style.css : ces déclarations servent AUSSI à
   des pages qui ne chargent pas la charte du site et restent auto-portantes,
   au premier rang desquelles l'Espace Clients (page de connexion du portail,
   placeholder « site en préparation », console). Ce sont des pages que voit
   un vrai client : elles chargeaient encore Google Fonts alors que
   /confidentialite affirme le contraire. Une seule feuille pour tout le
   monde, d'où les `url()` en chemin ABSOLU (/static/fonts/…) : elles doivent
   résoudre depuis /espace-clients/c/<slug>/ comme depuis la racine.

   Ce sont les fichiers **variables** de Google Fonts (un binaire par famille
   et par sous-ensemble couvre TOUTE la plage de graisses) : Google servait
   déjà exactement ces binaires derrière ses quatre déclarations de Space
   Grotesk, d'où un `@font-face` par famille au lieu de neuf, à poids
   identique (213 ko sur disque, dont ~94 ko seulement de « latin »).

   `unicode-range` reprend les sous-ensembles Google : « latin » couvre tout
   le français (y compris œ/Œ), « latin-ext » n'est téléchargé que si un nom
   étranger (client, prospect) l'exige. `font-display: swap` : le texte reste
   lisible pendant le chargement, comme avant.

   Rafraîchir les binaires (rare : ces fichiers sont figés, seule une montée
   de version Google le justifie) : récupérer la feuille ci-dessous AVEC un
   User-Agent de navigateur récent (sinon Google renvoie du TTF, pas du woff2),
   puis retélécharger les `url()` des blocs « latin » et « latin-ext ».
     https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300..700
       &family=Inter+Tight:wght@100..900&family=JetBrains+Mono:wght@400..800
       &display=swap
   tests/test_fonts.py vérifie ensuite que chaque fichier déclaré ici existe.

   Cette feuille sert aussi les **applications de l'atelier** montées par app.py
   (Casino, Commerce, Mon Entreprise, Site d'entreprise) : elles partagent les
   trois familles de la charte et la chargent en `/static/fonts.css`. Seule
   exception, le Concours : servi aussi sur son hôte dédié
   (concours.ab-azurtech.com) où le middleware d'URL propre préfixe tout chemin
   ne commençant pas par « /concours », `/static/…` y est injoignable. Il reste
   donc sur ses piles de polices système, déjà déclarées dans son CSS.

   Les plages `font-weight` recopient l'axe `wght` RÉEL de chaque binaire (lu
   dans la table fvar : Space Grotesk 300..700, Inter Tight 100..900, JetBrains
   Mono 400..800) et non la plage demandée à Google : ces fichiers variables ne
   sont pas restreints sur l'axe. Une plage plus étroite ferait silencieusement
   plafonner une graisse pourtant disponible (les gabarits de /commerce
   demandent Inter Tight 700, l'admin du Site d'entreprise JetBrains Mono 700).
   ========================================================================== */
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url('/static/fonts/space-grotesk-var-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: 'Space Grotesk';
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url('/static/fonts/space-grotesk-var-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: 'Inter Tight';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/static/fonts/inter-tight-var-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: 'Inter Tight';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/static/fonts/inter-tight-var-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: 400 800;
  font-display: swap;
  src: url('/static/fonts/jetbrains-mono-var-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 800;
  font-display: swap;
  src: url('/static/fonts/jetbrains-mono-var-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;
}
