/* base.css — socle de style T-20.
 *
 * PERIMETRE VOLONTAIREMENT MINCE. Les tokens de couleur, d'espacement et de
 * densite viennent de T-21 (design/DESIGN-SYSTEM.md, 3 couches, un seul
 * fichier). Ce fichier-ci ne pose donc AUCUNE couleur : rien a defaire pour
 * l'agent T-21. Il ne fait que deux choses :
 *   1. declarer Sora, servie depuis notre propre serveur ;
 *   2. garantir que la page reste lisible si Sora ne charge pas.
 *
 * LOI 25 : aucune URL absolue ici. Les `src` pointent vers `../polices/`,
 * c'est-a-dire /static/polices/, servi par notre Flask. Le garde
 * tests/test_zero_appel_sortant.py echoue si une URL externe reapparait.
 */

/* --------------------------------------------------------------- Sora ---
 * Fichiers VARIABLES (axe wght 100-800) : un seul fichier couvre toutes les
 * graisses, donc une seule requete locale au lieu de trois.
 *
 * `font-display: swap` : le texte s'affiche IMMEDIATEMENT dans la police de
 * repli et bascule sur Sora quand elle arrive. Si le .woff2 manque ou est
 * corrompu, l'app reste lisible — c'est l'exigence de DESIGN-SYSTEM.md §4.
 *
 * Deux faces avec `unicode-range` : le navigateur ne telecharge
 * `latin-ext` que si la page contient reellement un caractere de cette plage.
 * Les accents francais (U+00C0-U+00FF) sont dans `latin`.
 */
@font-face {
  font-family: "Sora";
  font-style: normal;
  font-weight: 100 800;
  font-display: swap;
  src: url("../polices/sora-variable-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: "Sora";
  font-style: normal;
  font-weight: 100 800;
  font-display: swap;
  src: url("../polices/sora-variable-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;
}

/* ------------------------------------------------------ pile de repli ---
 * DESIGN-SYSTEM.md §4 impose ce repli mot pour mot. Toutes les familles
 * nommees apres "Sora" sont installees par le systeme : aucune ne declenche
 * de requete reseau.
 */
:root {
  --police-interface: "Sora", "Segoe UI", system-ui, sans-serif;
}

html {
  font-family: var(--police-interface);
  /* 12,5 px = la base tableur de DESIGN-SYSTEM.md §4. Les tailles par role
     (11 / 14 / 16 / 19 px) arriveront avec les tokens T-21. */
  font-size: 12.5px;
  line-height: 1.45;
}

/* G-61 t2 : l'ancien `padding: 1.5rem` saute a la source. La barre
   d'application (composants.css) va bord a bord ; chaque zone pose sa
   propre gouttiere. */
body {
  margin: 0;
}

/* G-61 t2 : `hidden` DOIT GAGNER, partout. La feuille du navigateur pose
   `[hidden] { display: none }`, mais une regle d'auteur passe avant elle :
   `.avis`, `.refus-champ` ou `.rangee` (composants.css) posent un `display`
   et rendaient VISIBLE un avis que le script cache (mesure :
   tests/test_g59_navigateur.py, la fiche « projet ferme » restait affichee).
   Meme defaut que master.css avait deja regle pour son seul ecran. */
[hidden] {
  display: none !important;
}

/* Chiffres a chasse fixe : DESIGN-SYSTEM.md §4, pour que les colonnes de
   montants s'alignent. Pose des maintenant, la grille Master (T-22) en depend. */
table,
.nombre {
  font-variant-numeric: tabular-nums;
}

/* Le focus doit rester visible partout — F-40 etape 9 le verifie au clavier.
   Poser le principe ici evite qu'un reset ulterieur le supprime en silence. */
:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: var(--focus-decalage, 1px);
}

.pied {
  margin-top: 2rem;
  font-size: 11px;
}

/* Rendu de la sonde de police (voir js/app.js) : sans JS, la ligne reste
   affichee avec son texte "non mesure" — jamais de page cassee. */
#sonde-police {
  font-size: 11px;
}
