/* zs-fontes-maison.css · z/S SYSTEMS · 18 septembre 2026
   ==========================================================================
   LES DEUX FAMILLES DU GABARIT, SERVIES PAR LA MAISON
   --------------------------------------------------------------------------
   ⛔ LE FAIT, VU AU NAVIGATEUR ET PAS DÉDUIT · une fois sur plusieurs
      chargements, la console rend « Access to font at
      fonts.bunny.net/lora/files/lora-latin-400-normal.woff2 from origin
      zoesagan.com has been blocked by CORS policy ». Le serveur de bunny
      répond pourtant `access-control-allow-origin: *` quand on le lui demande
      en ligne de commande · le défaut est donc dans le CACHE du réseau de
      diffusion, qui garde parfois une réponse mise en cache SANS l'entête, et
      la sert ensuite à une demande qui, elle, en a besoin. On ne répare pas le
      cache de quelqu'un d'autre · on cesse d'en dépendre.
   ⛔ CE QUE LA MAISON UTILISE VRAIMENT, MESURÉ · sur l'accueil et sur
      /oracle-analyse/, Lora sert ZÉRO nœud et Fira Sans en sert cinq à sept.
      La DA est Fraunces, Newsreader, JetBrains Mono · ces deux familles là
      viennent du gabarit Rune, pas de nous. On ne les retire pas pour autant ·
      retirer une fonte qu'un gabarit demande, c'est changer une DA par la
      bande. On la SERT, simplement, depuis notre propre origine.
   ⭐ LA FEUILLE ARRIVE APRÈS CELLE DU GABARIT, DONC ELLE GAGNE · à descripteurs
      égaux, la dernière déclaration l'emporte. Si jamais elle ne gagnait pas,
      il ne se passerait rien · c'est une réparation qui ne peut pas casser.
   ⛔ `font-display:swap` · jamais un texte invisible en attendant une fonte.
   ========================================================================== */
@font-face{font-family:'Fira Sans';font-style:normal;font-weight:400;font-display:swap;
  src:url('https://zoesagan-oracle-v2.vercel.app/g2/fontes/fira-sans-latin-400-normal.woff2') format('woff2')}
@font-face{font-family:'Fira Sans';font-style:normal;font-weight:500;font-display:swap;
  src:url('https://zoesagan-oracle-v2.vercel.app/g2/fontes/fira-sans-latin-500-normal.woff2') format('woff2')}
@font-face{font-family:'Fira Sans';font-style:normal;font-weight:600;font-display:swap;
  src:url('https://zoesagan-oracle-v2.vercel.app/g2/fontes/fira-sans-latin-600-normal.woff2') format('woff2')}
@font-face{font-family:'Lora';font-style:normal;font-weight:400;font-display:swap;
  src:url('https://zoesagan-oracle-v2.vercel.app/g2/fontes/lora-latin-400-normal.woff2') format('woff2')}
@font-face{font-family:'Lora';font-style:normal;font-weight:700;font-display:swap;
  src:url('https://zoesagan-oracle-v2.vercel.app/g2/fontes/lora-latin-700-normal.woff2') format('woff2')}

/* --------------------------------------------------------------------------
   ⛔ ET CE N'ÉTAIT PAS QUE LORA · vu au navigateur le 18 septembre au soir, la
      console rend aussi « Access to font at
      fonts.bunny.net/jetbrains-mono/files/jetbrains-mono-latin-400-normal.woff2
      blocked by CORS policy ». JetBrains Mono, c'est 293 nœuds sur l'accueil ·
      une des trois fontes cardinales de la maison, servie par un cache qui perd
      son entête une fois sur quatre. Fraunces et Newsreader, elles, sont déjà
      reprises plus bas dans la tête par Google Fonts · elles ne risquent rien.
   ⭐ LES SEIZE FACES LATINES D'ANTON, INTER ET JETBRAINS MONO PASSENT DONC CHEZ
      NOUS AUSSI, avec LEUR `unicode-range` D'ORIGINE · un signe hors de ces
      plages retombe sur la déclaration du gabarit, exactement comme avant. On
      ne change pas une lettre de la DA · on change qui la sert.
   -------------------------------------------------------------------------- */
@font-face { font-family: 'Anton'; font-style: normal; font-weight: 400; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/anton-latin-400-normal.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: 'Anton'; font-style: normal; font-weight: 400; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/anton-latin-ext-400-normal.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'; font-style: normal; font-weight: 400; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/inter-latin-400-normal.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'; font-style: normal; font-weight: 400; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/inter-latin-ext-400-normal.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'; font-style: normal; font-weight: 500; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/inter-latin-500-normal.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'; font-style: normal; font-weight: 500; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/inter-latin-ext-500-normal.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'; font-style: normal; font-weight: 600; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/inter-latin-600-normal.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'; font-style: normal; font-weight: 600; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/inter-latin-ext-600-normal.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'; font-style: normal; font-weight: 700; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/inter-latin-700-normal.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'; font-style: normal; font-weight: 700; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/inter-latin-ext-700-normal.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; }
/* L342 · 24 septembre 2026 · JETBRAINS MONO DEVIENT VARIABLE · les six faces fixes (400, 500, 700 en
   latin et latin étendu) deviennent deux faces à plage, graisse 100 à 800. Fichiers pris au paquet
   @fontsource-variable/jetbrains-mono 5.3.0 (licence OFL 1.1, voir fontes/LICENCES-OFL-FONTES-VARIABLES.txt),
   axe wght vérifié dans la table fvar avant la pose. Mêmes unicode-range qu’avant, au caractère près. */
@font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 100 800; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/jetbrains-mono-latin-variable-normal.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 800; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/jetbrains-mono-latin-ext-variable-normal.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; }

/* --------------------------------------------------------------------------
   ⛔⛔ 18 SEPTEMBRE 2026 · FRAUNCES ET NEWSREADER N’ÉTAIENT PAS REPRISES DU TOUT.
      La note du 18 au matin affirme, juste au dessus, qu’elles sont « déjà
      reprises plus bas dans la tête par Google Fonts · elles ne risquent rien ».
      Mesure au navigateur le 18, sur huit chargements et quatre surfaces, une
      fois les deux préchargements retirés · il restait TRENTE TROIS fichiers de
      fonte pris chez bunny, et ils étaient TOUS des Fraunces ou des Newsreader.
      Aucune reprise Google n’existe dans la tête. La note était fausse, et
      c’est elle qui faisait croire le chantier fini.
   ⭐ LES DIX HUIT FACES DE FRAUNCES ET NEWSREADER PASSENT DONC CHEZ NOUS, avec
      LEURS descripteurs et LEURS unicode-range d’origine, copiés au caractère
      près depuis la feuille de bunny · latin, latin-ext ET vietnamien. On ne
      change pas une lettre de la DA, on change qui la sert. Un signe hors de
      ces plages retombe sur la déclaration du gabarit, exactement comme avant.
   ⛔ Le repli .woff est retiré · la maison ne sert que du woff2, comme les
      vingt et une faces posées plus haut, et aucun navigateur servi par ce site
      n’en manque.
   -------------------------------------------------------------------------- */
/* ⛔⛔ L342 · 24 SEPTEMBRE 2026 · FRAUNCES ET NEWSREADER DEVIENNENT VARIABLES, EN LATIN ET LATIN ÉTENDU.
   ⛔ Ce qui a été mesuré · l’accueil servi à 390 px rend Fraunces en 300, 500, 700, et en 600 à 900
      italique, avec font-variation-settings SOFT, WONK et opsz, et Newsreader en 500, 600, 700. Aucune
      de ces graisses n’existait dans les faces fixes d’ici · c’est Google qui les servait, et couper
      Google aurait fait synthétiser un faux gras sur les titres de la page la plus lue.
   ⭐ Les douze faces fixes latines (Fraunces 400, 400 italique, 600 · Newsreader 400, 400 italique,
      500 italique) deviennent huit faces à plage · Fraunces 100 à 900 avec ses quatre axes (opsz 9 à 144,
      wght, SOFT 0 à 100, WONK 0 à 1), Newsreader 200 à 800 avec opsz 6 à 72. Fichiers pris aux paquets
      @fontsource-variable/fraunces (fichiers « full ») et @fontsource-variable/newsreader (fichiers
      « opsz ») 5.3.0, licence OFL 1.1, axes vérifiés dans la table fvar avant la pose.
   ⛔ Les faces vietnamiennes restent fixes, telles quelles · aucune surface ne porte de vietnamien.
   ⛔ Les anciens fichiers fixes restent dans fontes/ · la copie compacte de la tête globale les appelle
      encore tant qu’elle n’a pas été recollée. Rien ne casse pendant la bascule.
   ⛔ Tant qu’une injection de page appelle encore Google, SA déclaration, venue après la tête globale,
      gagne sur celle ci · le retrait des 222 balises Google est l’étape suivante, objet par objet. */
/* latin */ @font-face { font-family: 'Fraunces'; font-style: normal; font-weight: 100 900; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/fraunces-latin-variable-normal.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; }
/* latin-ext */ @font-face { font-family: 'Fraunces'; font-style: normal; font-weight: 100 900; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/fraunces-latin-ext-variable-normal.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; }
/* latin */ @font-face { font-family: 'Fraunces'; font-style: italic; font-weight: 100 900; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/fraunces-latin-variable-italic.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; }
/* latin-ext */ @font-face { font-family: 'Fraunces'; font-style: italic; font-weight: 100 900; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/fraunces-latin-ext-variable-italic.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; }
/* vietnamese */ @font-face { font-family: 'Fraunces'; font-style: italic; font-weight: 400; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/fraunces-vietnamese-400-italic.woff2) format('woff2'); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; }
/* vietnamese */ @font-face { font-family: 'Fraunces'; font-style: normal; font-weight: 400; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/fraunces-vietnamese-400-normal.woff2) format('woff2'); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; }
/* vietnamese */ @font-face { font-family: 'Fraunces'; font-style: normal; font-weight: 600; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/fraunces-vietnamese-600-normal.woff2) format('woff2'); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; }
/* latin */ @font-face { font-family: 'Newsreader'; font-style: normal; font-weight: 200 800; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/newsreader-latin-variable-normal.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; }
/* latin-ext */ @font-face { font-family: 'Newsreader'; font-style: normal; font-weight: 200 800; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/newsreader-latin-ext-variable-normal.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; }
/* latin */ @font-face { font-family: 'Newsreader'; font-style: italic; font-weight: 200 800; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/newsreader-latin-variable-italic.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; }
/* latin-ext */ @font-face { font-family: 'Newsreader'; font-style: italic; font-weight: 200 800; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/newsreader-latin-ext-variable-italic.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; }
/* vietnamese */ @font-face { font-family: 'Newsreader'; font-style: italic; font-weight: 400; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/newsreader-vietnamese-400-italic.woff2) format('woff2'); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; }
/* vietnamese */ @font-face { font-family: 'Newsreader'; font-style: italic; font-weight: 500; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/newsreader-vietnamese-500-italic.woff2) format('woff2'); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; }
/* vietnamese */ @font-face { font-family: 'Newsreader'; font-style: normal; font-weight: 400; font-stretch: 100%; font-display: swap; src: url(https://zoesagan-oracle-v2.vercel.app/g2/fontes/newsreader-vietnamese-400-normal.woff2) format('woff2'); unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; }
