/*
 * Polices auto-hébergées — AUCUN appel à fonts.googleapis.com / fonts.gstatic.com.
 * Un appel externe transmettrait l'IP du visiteur à Google : non conforme RGPD sans consentement.
 * Instrument Sans (titres) et IBM Plex Sans (courant) sont sous licence SIL Open Font License 1.1.
 * Généré depuis l'API Google Fonts, sous-ensembles latin + latin-ext uniquement.
 */
/* instrument-sans · 400 700 · latin-ext */
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 400 700;
  font-stretch: 100%;
  font-display: swap;
  src: url('./instrument-sans-400-700-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 · 400 700 · latin */
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 400 700;
  font-stretch: 100%;
  font-display: swap;
  src: url('./instrument-sans-400-700-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;
}

/* ibm-plex-sans · 400 · latin-ext */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url('./ibm-plex-sans-400-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;
}

/* ibm-plex-sans · 400 · latin */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url('./ibm-plex-sans-400-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;
}

/* ibm-plex-sans · 500 · latin-ext */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url('./ibm-plex-sans-500-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;
}

/* ibm-plex-sans · 500 · latin */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url('./ibm-plex-sans-500-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;
}

/* ibm-plex-sans · 600 · latin-ext */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 600;
  font-stretch: 100%;
  font-display: swap;
  src: url('./ibm-plex-sans-600-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;
}

/* ibm-plex-sans · 600 · latin */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 600;
  font-stretch: 100%;
  font-display: swap;
  src: url('./ibm-plex-sans-600-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;
}

/* ibm-plex-mono · 400 · latin */
@font-face {
  font-display: swap;
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  src: url('./ibm-plex-mono-400-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;
}

/* ibm-plex-mono · 500 · latin */
@font-face {
  font-display: swap;
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  src: url('./ibm-plex-mono-500-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;
}

/* ═══════════════════════════════════════════════════════════════════
   GLYPHES SCIENTIFIQUES — grec, indices, exposants, opérateurs

   Posés le 01/09/2026, après mesure. Deux défauts distincts, et il fallait
   les deux corrections :

   1. INSTRUMENT SANS NE PORTE PAS « ± », « ² » ni « µ ». Ce n'est pas un
      sous-ensemble trop étroit — les codes sont dans la plage U+0000-00FF
      déjà déclarée : la police ne les dessine pas. Mesuré par comparaison de
      chasse contre deux replis très différents (Zapfino et Courier New) :
      chasses identiques aux deux, donc le caractère vient du repli.
   2. AUCUNE DES TROIS POLICES NE PORTE LE GREC, ni « ≈ », ni « ‰ », et les
      INDICES (U+2080-2089) sont dans les fichiers IBM Plex mais HORS des
      plages déclarées — U+2000-206F s'arrête vingt caractères trop tôt. Un
      glyphe présent mais hors plage n'est jamais employé.

   Ce que ça donnait en page : le « κ » du kappa de Fleiss et le « ± » de
   « 0 ± 0 px » — les unités des deux chiffres les plus en vue de la fiche
   BioCellvia, composés à 25 et 38 px — rendus par la police système. Sur une
   machine sans police de secours, c'est un carré.

   La parade : un sous-ensemble MINIMAL d'IBM Plex (16 Ko pour cinq graisses,
   généré par l'API Google Fonts avec le paramètre « text= »), déclaré sous
   les TROIS familles avec une plage étroite. Aucun appel externe au runtime —
   les fichiers sont ici, comme les autres.

   ⚠️ La plage EXCLUT « = » « ° » « · » « × » « ÷ » « ¹ » « ³ » : les polices
   maison les portent, et les emprunter à une autre casserait la lettre au
   milieu d'une phrase. Elle n'emprunte que ce qui manque.

   ⚠️ Pour Instrument Sans, « ± ² µ » viennent donc d'IBM Plex. Deux
   grotesques différentes pour trois symboles géométriques : l'écart est
   invisible là où ils servent (une unité à côté d'un nombre), et infiniment
   préférable à un repli système qui varie d'une machine à l'autre.

   Régénérer : voir docs/10-charte-graphique.md.
   ═══════════════════════════════════════════════════════════════════ */

/* Instrument Sans — le grec et les opérateurs, PLUS ± ² µ qu'elle n'a pas. */
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('./sci-plex-sans-600.woff2') format('woff2');
  unicode-range: U+00B1, U+00B2, U+00B5, U+0338, U+03A9, U+03B1-03B4, U+03BA-03BC, U+03C0-03C1, U+03C3, U+2030, U+2032-2033, U+2070, U+207B, U+2080-2089, U+2190, U+2192, U+2194, U+219A-219B, U+21AE, U+223C, U+2241, U+2248-2249, U+2260, U+2264-2265, U+2270-2271;
}

/* IBM Plex Sans — même fonte, donc raccord invisible. Trois graisses. */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./sci-plex-sans-400.woff2') format('woff2');
  unicode-range: U+0338, U+03A9, U+03B1-03B4, U+03BA-03BC, U+03C0-03C1, U+03C3, U+2030, U+2032-2033, U+2070, U+207B, U+2080-2089, U+2190, U+2192, U+2194, U+219A-219B, U+21AE, U+223C, U+2241, U+2248-2249, U+2260, U+2264-2265, U+2270-2271;
}

@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./sci-plex-sans-500.woff2') format('woff2');
  unicode-range: U+0338, U+03A9, U+03B1-03B4, U+03BA-03BC, U+03C0-03C1, U+03C3, U+2030, U+2032-2033, U+2070, U+207B, U+2080-2089, U+2190, U+2192, U+2194, U+219A-219B, U+21AE, U+223C, U+2241, U+2248-2249, U+2260, U+2264-2265, U+2270-2271;
}

@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./sci-plex-sans-600.woff2') format('woff2');
  unicode-range: U+0338, U+03A9, U+03B1-03B4, U+03BA-03BC, U+03C0-03C1, U+03C3, U+2030, U+2032-2033, U+2070, U+207B, U+2080-2089, U+2190, U+2192, U+2194, U+219A-219B, U+21AE, U+223C, U+2241, U+2248-2249, U+2260, U+2264-2265, U+2270-2271;
}

/* IBM Plex Mono — le relevé chiffré et les légendes d'échelle. */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./sci-plex-mono-400.woff2') format('woff2');
  unicode-range: U+0338, U+03A9, U+03B1-03B4, U+03BA-03BC, U+03C0-03C1, U+03C3, U+2030, U+2032-2033, U+2070, U+207B, U+2080-2089, U+2190, U+2194, U+219A-219B, U+21AE, U+223C, U+2241, U+2248-2249, U+2260, U+2264-2265, U+2270-2271;
}

@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./sci-plex-mono-500.woff2') format('woff2');
  unicode-range: U+0338, U+03A9, U+03B1-03B4, U+03BA-03BC, U+03C0-03C1, U+03C3, U+2030, U+2032-2033, U+2070, U+207B, U+2080-2089, U+2190, U+2194, U+219A-219B, U+21AE, U+223C, U+2241, U+2248-2249, U+2260, U+2264-2265, U+2270-2271;
}
