/* ============================================================================
 * RÉGLETTE — apps/shared/css/fonts.css
 * ============================================================================
 * Les @font-face du produit, et le SEUL fichier avec tokens.css §3 autorisé à
 * écrire un nom de fonte. Une règle de composant qui écrit `font-family:
 * Archivo` viole la charte même si le rendu est identique : l'identité
 * typographique vit dans --font-display et --font-text, nulle part ailleurs.
 *
 * UNE superfamille, DEUX chasses. Archivo (Omnibus-Type, licence SIL OFL) est
 * une grotesque variable sur deux axes : graisse 100-900, chasse 62-125. Le
 * titrage prend la chasse étendue, le texte la chasse normale. Les deux voix se
 * reconnaissent comme un système et non comme un mariage.
 *
 * Un seul fichier par sous-ensemble porte les deux chasses : « Archivo
 * Expanded » n'est pas une seconde fonte, c'est le même woff2 dont le
 * descripteur `font-stretch: 125%` fige l'instance. Deux familles déclarées,
 * deux requêtes réseau au total.
 *
 * AUTO-HÉBERGÉ, et c'est le point : le <link> Fontshare était une requête
 * tierce bloquante sur une page que le client final ouvre depuis un e-mail,
 * souvent en 4G. Ici tout est same-origin, servi par
 * apps/api/src/server.js (staticPlugin, prefix /static/shared/).
 *
 * Deux sous-ensembles : latin et latin-ext. Ils couvrent dix des treize locales
 * du produit — le TURC COMPRIS, et sans rien ajouter : les douze glyphes turcs
 * sont là, ç Ç ö Ö ü Ü ı dans `latin`, ş Ş ğ Ğ İ dans `latin-ext`, et Archivo
 * déclare le système de langue TRK. Une seule conséquence : `ş` et `ğ` sont
 * dans presque toutes les phrases turques, donc TOUTE page turque tire les DEUX
 * fichiers (176 ko au lieu de 90), dont le second n'est pas préchargé. Le
 * polonais est déjà exactement dans ce cas ; le turc double ce défaut, il ne le
 * crée pas.
 * Le japonais, le chinois et l'arabe tombent sur le repli système déclaré dans
 * tokens.css §3 (:root:lang(ja) / :lang(zh) / :lang(ar)) — un idéogramme ne
 * tient pas dans la boîte d'une grotesque latine, et charger 4 Mo de CJK pour
 * l'éviter coûterait plus cher que le défaut qu'il corrige. L'arabe est le seul
 * des trois dont l'auto-hébergement soit à portée (un woff2 de 40 à 60 ko) : il
 * est écrit et prêt en bas de ce fichier, il n'attend que le fichier.
 *
 * `font-display: swap` : le texte s'affiche immédiatement dans le repli, puis
 * bascule. Sur une page de suivi ouverte en mobilité, un titre invisible
 * pendant 300 ms est un défaut plus grave qu'un titre qui change de fonte.
 * ========================================================================== */

/* --- Texte : chasse normale (100 %) ---------------------------------------
 * On n'étend jamais du texte courant. */

@font-face {
  font-family: "Archivo";
  font-style: normal;
  font-weight: 400 700;
  font-stretch: 100%;
  font-display: swap;
  src: url("/static/shared/fonts/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: "Archivo";
  font-style: normal;
  font-weight: 400 700;
  font-stretch: 100%;
  font-display: swap;
  src: url("/static/shared/fonts/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;
}

/* --- Titrage : chasse étendue (125 %) --------------------------------------
 * Le descripteur ne déclare qu'une valeur, donc une demande de chasse normale
 * est ramenée dessus : la famille EST l'instance étendue. C'est ce qui permet
 * à --font-display de n'être qu'un nom, sans une seule déclaration
 * font-stretch dans les feuilles de surface. */

@font-face {
  font-family: "Archivo Expanded";
  font-style: normal;
  font-weight: 400 700;
  font-stretch: 125%;
  font-display: swap;
  src: url("/static/shared/fonts/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: "Archivo Expanded";
  font-style: normal;
  font-weight: 400 700;
  font-stretch: 125%;
  font-display: swap;
  src: url("/static/shared/fonts/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;
}

/* Le faux gras et la fausse italique sont interdits : une graisse absente doit
 * se voir comme une erreur, pas se faire synthétiser en silence. Archivo
 * couvre 400-700 en variable, donc rien de légitime n'est refusé ici. */
:root {
  font-synthesis: none;
}

/* ============================================================================
 * L'ARABE AUTO-HÉBERGÉ — écrit, mesuré, prêt, ET DÉLIBÉRÉMENT INACTIF.
 * ============================================================================
 * CE QUI MANQUE : le fichier, et rien d'autre. `apps/shared/fonts/` ne contient
 * que les deux woff2 latins ; télécharger une fonte n'entre pas dans ce qu'un
 * agent fait sans accord explicite. Les quatre règles ci-dessous ne sont donc
 * pas commentées « au cas où » : elles sont la moitié du travail qui ne peut
 * pas se faire ici, posée à l'endroit exact où elle s'exécutera, plutôt que
 * décrite dans un document que personne ne relira au moment utile.
 *
 * ACTIVER, EN QUATRE GESTES (docs/_geo/POLICE-ARABE.md §10 et §11) :
 *
 *   1. Récupérer Noto Sans Arabic variable (OFL 1.1, sans Reserved Font Name)
 *      depuis fonts.google.com ou github.com/googlefonts/noto-fonts, et la
 *      SONDER avant toute décision — la valeur qui commande tout le reste est
 *      la hauteur du ه (heh) : c'est elle qui donne le size-adjust réel.
 *
 *   2. Sous-ensembler SANS AUCUN CHIFFRE, et surtout sans perdre les formes
 *      contextuelles :
 *        pyftsubset NotoSansArabic[wdth,wght].ttf --flavor=woff2 \
 *          --output-file=noto-arabic.woff2 \
 *          --unicodes=U+0600-065F,U+066A-06EF,U+06FA-06FF,U+0750-077F,\
 * U+0870-088E,U+0890-0891,U+0898-08E1,U+08E3-08FF,U+200C-200F,U+2010-2011,\
 * U+204F,U+2E41,U+FB50-FDFF,U+FE70-FEFF \
 *          --layout-features+=kern,ccmp,init,medi,fina,isol,liga,rlig,mark,mkmk
 *      CE POINT TUE EN SILENCE S'IL EST RATÉ. L'arabe est une écriture
 *      contextuelle : sans init/medi/fina/isol, chaque lettre rend dans sa
 *      forme isolée et le texte devient un chapelet de lettres détachées.
 *      pyftsubset ne les garde pas toutes par défaut. Contrôle : rendre مرحبا
 *      et vérifier que les lettres se LIENT.
 *
 *   3. Décommenter les deux @font-face, déposer le woff2 dans
 *      apps/shared/fonts/ — et y déposer aussi OFL.txt, qui manque déjà pour
 *      Archivo (l'OFL 1.1 demande que la licence accompagne la fonte).
 *
 *   4. OUVRIR LA BOÎTE DANS tokens.css. C'est la seule conséquence hors de ce
 *      fichier, et elle n'est pas facultative : le bloc :root:lang(ar) porte
 *      aujourd'hui --box-13/15/17: 22/26/30px, calibrés sur l'encre NUE d'une
 *      naskh système (1,242 em → 16,1 px à 13 px, soit 2,9 px de blanc par
 *      côté). Sous size-adjust: 112 %, la même encre monte à 18,1 px et il ne
 *      reste plus qu'UN pixel sous les jambages : le م toucherait le filet du
 *      dessous, dans un système qui s'appelle Réglette. Les valeurs deviennent
 *      alors 24/28/32px — celles du bloc CJK, à l'identique, pour la même cause.
 *
 * POURQUOI CE MONTAGE ET PAS UNE TROISIÈME FAMILLE. La famille CSS n'est pas un
 * fichier : c'est un ensemble de @font-face qui se partagent un nom et se
 * répartissent les points de code. L'arabe entre comme TROISIÈME TRANCHE des
 * deux familles existantes, exactement comme latin-ext y est déjà entré. Les
 * deux tokens de tokens.css §3 ne bougent pas d'un octet, aucune règle de
 * composant n'apprend un nom de fonte, et la pile arabe du bloc :lang(ar)
 * devient un simple filet de sécurité (le @font-face prime sur une fonte
 * système du même nom).
 *
 * LES CHIFFRES NE SONT PAS DANS LA PLAGE, et c'est une défense en profondeur :
 * U+0660-0669 (arabo-indiens) et U+06F0-06F9 (persans) en sont exclus, donc un
 * chiffre arabo-indien qui échapperait à `ar-u-nu-latn` tombe sur un repli
 * système, SE VOIT, et se corrige — au lieu de se composer joliment en faisant
 * danser une colonne tabulaire que personne ne rattachera à sa cause.
 *
 * UN SEUL FICHIER TÉLÉCHARGÉ malgré les deux déclarations : même URL, le cache
 * la sert une fois. Le contrat « deux familles » survit ; une page arabe fait
 * trois requêtes de fonte, pas six.
 *
 * size-adjust : le corps arabe (ه) fait 0,409 em contre 0,526 em pour l'x
 * latin. 112 % est la moyenne géométrique des deux harmonisations possibles
 * (corps 129 %, hautes 97 %), qui sont à 33 points l'une de l'autre et qu'on ne
 * peut pas satisfaire ensemble. À CONFIRMER À L'ŒIL sur la fonte réelle : les
 * garde-fous 98-108 % du brief valent pour une substitution latine, pas pour
 * un ajout d'écriture. Le +4 points du display est tout le contraste de chasse
 * que l'arabe peut recevoir.
 * ------------------------------------------------------------------------- */

/*
@font-face {
  font-family: "Archivo";
  font-style: normal;
  font-weight: 400 700;
  font-stretch: 100%;
  font-display: swap;
  size-adjust: 112%;
  src: url("/static/shared/fonts/noto-arabic.woff2") format("woff2");
  unicode-range: U+0600-065F, U+066A-06EF, U+06FA-06FF, U+0750-077F,
                 U+0870-088E, U+0890-0891, U+0898-08E1, U+08E3-08FF,
                 U+200C-200F, U+2010-2011, U+204F, U+2E41,
                 U+FB50-FDFF, U+FE70-FEFF;
}

@font-face {
  font-family: "Archivo Expanded";
  font-style: normal;
  font-weight: 400 700;
  font-stretch: 125%;
  font-display: swap;
  size-adjust: 116%;
  src: url("/static/shared/fonts/noto-arabic.woff2") format("woff2");
  unicode-range: U+0600-065F, U+066A-06EF, U+06FA-06FF, U+0750-077F,
                 U+0870-088E, U+0890-0891, U+0898-08E1, U+08E3-08FF,
                 U+200C-200F, U+2010-2011, U+204F, U+2E41,
                 U+FB50-FDFF, U+FE70-FEFF;
}
*/
