/*
 * WiColis — design tokens du back-office.
 *
 * Source de vérité : Charte_graphique_WiColis.md § 18.1 et docs/architecture/03-conventions.md § 7.
 * C'est le SEUL fichier de ce module autorisé à contenir une valeur de couleur littérale.
 * Toute autre feuille de style n'utilise que var(--wicolis-*).
 *
 * Polices vendorées dans static/fonts/ : aucun appel à un CDN, la CSP l'interdit (D10).
 *
 * COUVERTURE DE CARACTÈRES — `unicode-range`, et pourquoi il est déclaré.
 *
 * Les cinq fichiers sont les sous-ensembles `latin` d'Inter et de Poppins (le nom de fichier le
 * porte : `*-latin-*`). Sans `unicode-range`, un caractère hors de ce sous-ensemble faisait
 * silencieusement retomber le rendu sur une fonte système — c'est ainsi que huit repères de
 * section, deux repères d'indicateur, trois marqueurs de tri et un marqueur d'avertissement
 * rendaient un carré vide (tofu) sur un poste sans cette couverture, et aucune garde ne le voyait.
 *
 * Ce que la déclaration rend OPPOSABLE : hors de cet intervalle, le navigateur n'emploie PAS la
 * face vendorée. La couverture cesse donc d'être un pari et devient une frontière écrite, que
 * CouvertureDePoliceTest confronte aux caractères RÉELLEMENT rendus — gabarits empaquetés et
 * catalogues de messages — et qui échoue en nommant le point de code fautif.
 *
 * Ce que la déclaration NE prouve PAS, et il vaut mieux le dire : que la `cmap` du fichier soit
 * aussi large que l'intervalle annoncé. Un woff2 est un flux Brotli, sa `cmap` est inatteignable
 * sans décompresseur, et aucune dépendance Brotli n'existe au réacteur — l'ajouter passerait par le
 * POM parent, qui n'appartient pas à ce module. Ce qui EST mesuré à la place : la présence d'une
 * table `cmap` non triviale et un plancher de nombre de glyphes, lus dans l'annuaire de tables du
 * woff2, qui n'est pas compressé (CouvertureDePoliceTest).
 *
 * L'intervalle est IDENTIQUE sur les cinq faces, et c'est gardé : cinq valeurs divergentes
 * feraient rendre le même caractère dans deux graisses différentes selon la face retenue.
 */

@font-face {
  font-family: "Inter";
  src: url("/fonts/inter-latin-400-normal.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  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+2074, U+20AC, U+2122, U+2191, U+2193, U+2212,
    U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Inter";
  src: url("/fonts/inter-latin-500-normal.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  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+2074, U+20AC, U+2122, U+2191, U+2193, U+2212,
    U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Inter";
  src: url("/fonts/inter-latin-600-normal.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  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+2074, U+20AC, U+2122, U+2191, U+2193, U+2212,
    U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Plus Jakarta Sans";
  src: url("/fonts/plus-jakarta-sans-latin-600-normal.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  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+2074, U+20AC, U+2122, U+2191, U+2193, U+2212,
    U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Plus Jakarta Sans";
  src: url("/fonts/plus-jakarta-sans-latin-700-normal.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  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+2074, U+20AC, U+2122, U+2191, U+2193, U+2212,
    U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Plus Jakarta Sans";
  src: url("/fonts/plus-jakarta-sans-latin-800-normal.woff2") format("woff2");
  font-weight: 800;
  font-style: normal;
  font-display: swap;
  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+2074, U+20AC, U+2122, U+2191, U+2193, U+2212,
    U+2215, U+FEFF, U+FFFD;
}

:root {
  /* Couleurs — charte § 18.1, liste exhaustive autorisée */
  --wicolis-navy-900: #001A49;
  --wicolis-navy-700: #0A2C63;
  --wicolis-blue-600: #086CFF;
  --wicolis-blue-400: #14A8FF;
  --wicolis-blue-50: #EAF4FF;
  --wicolis-green-600: #22C55E;
  --wicolis-green-50: #EAF9EF;

  --wicolis-gray-50: #F8FAFC;
  --wicolis-gray-100: #F1F5F9;
  --wicolis-gray-300: #CBD5E1;
  --wicolis-gray-500: #64748B;
  --wicolis-gray-700: #334155;
  --wicolis-gray-900: #0F172A;
  --wicolis-white: #FFFFFF;

  --wicolis-success: #16A34A;
  --wicolis-info: #2563EB;
  --wicolis-warning: #D97706;
  --wicolis-danger: #DC2626;

  /* Rayons */
  --wicolis-radius-sm: 8px;
  --wicolis-radius-md: 12px;
  --wicolis-radius-lg: 16px;
  --wicolis-radius-pill: 999px;

  /* Ombres — valeurs littérales de la charte § 18.1 */
  --wicolis-shadow-sm: 0 2px 8px rgba(0, 26, 73, 0.06);
  --wicolis-shadow-md: 0 4px 16px rgba(0, 26, 73, 0.08);

  /*
   * Anneau de focus — A-02 (arbitrages § 3.2).
   * Ce n'est plus une valeur translucide : l'indicateur est un TRACÉ PLEIN, alias de
   * --wicolis-accent (blue-600). L'ancienne valeur de la charte § 18.2 et de conventions § 7.5 —
   * bleu 600 à 35 pour cent d'opacité — ne vaut que 1,53:1 une fois composée sur blanc : elle
   * échoue WCAG 2.2 1.4.11 et 2.4.11 et disparaît de la base de code. La couleur est déclarée en
   * bas de fichier avec --wicolis-accent ; la GÉOMÉTRIE est ce token-ci.
   *
   * A-08 § 2.3 — token de géométrie associé, HORS table de couleurs : --wicolis-focus-offset appartient
   * à la règle de focus (charte § 18.2, conventions § 7.5) et doit être déclaré dans les DEUX
   * feuilles de tokens web, sans quoi le critère « fichiers identiques » de conventions § 7 reste
   * inatteignable. Il ne compte pas parmi les 26 déclarations d'alias de couleur.
   */
  --wicolis-focus-offset: 2px;

  /* Espacements */
  --wicolis-space-1: 4px;
  --wicolis-space-2: 8px;
  --wicolis-space-3: 12px;
  --wicolis-space-4: 16px;
  --wicolis-space-6: 24px;
  --wicolis-space-8: 32px;
  --wicolis-space-12: 48px;
  --wicolis-space-16: 64px;

  /* Typographie : Poppins pour la marque et les titres, Inter pour les données denses */
  --wicolis-font-brand: "Plus Jakarta Sans", "Segoe UI", system-ui, sans-serif;
  --wicolis-font-data: "Inter", "Segoe UI", system-ui, sans-serif;

  --wicolis-text-display: 48px;
  --wicolis-text-h1: 40px;
  --wicolis-text-h2: 32px;
  --wicolis-text-h3: 24px;
  --wicolis-text-body-lg: 18px;
  --wicolis-text-body: 16px;
  --wicolis-text-small: 14px;
  --wicolis-text-caption: 12px;

  /*
   * Couche d'alias sémantiques — OBLIGATOIRE et FERMÉE.
   * Table définitive : docs/architecture/07-alias-et-contraste.md § 2.3 (A-08), qui remplace la
   * table des 19 noms d'A-01. 22 lignes / 26 DÉCLARATIONS — --wicolis-status-* est une famille de cinq.
   *
   * Règle 10 : la table est exhaustive et fermée. Cette surface n'expose NI MOINS, NI PLUS que les
   * 26 noms ci-dessous. Un alias local, même documenté et même mesuré, est un écart de revue ; il
   * n'y a donc plus de bloc « extensions locales » dans ce fichier.
   *
   * Règle 8 : un alias nomme un RÔLE, jamais une teinte et jamais une localisation. C'est pourquoi
   * --wicolis-surface-sidebar (localisation) est devenu --wicolis-institutional-surface et
   * --wicolis-text-sidebar est devenu --wicolis-text-inverse-muted.
   *
   * Règle 1 (A-01) et règle 15 (A-09) : aucune paire (texte, fond) sous 4,5:1 ne rend du texte,
   * quelle que soit la taille ou la graisse, ET un alias de texte n'est admis que si sa valeur
   * tient 4,5:1 sur la TOTALITÉ des fonds clairs déclarés — --wicolis-surface, --wicolis-surface-app,
   * --wicolis-surface-muted, --wicolis-action-surface, --wicolis-validation-surface. Aucun alias de texte
   * conditionnel : ni au corps de police, ni au conteneur. Le seuil 3:1 de la charte § 14.1 ne vaut
   * que pour les objets NON TEXTUELS (WCAG 1.4.11).
   *
   * Ratios recalculés (formule WCAG 2.x de luminance relative, 07 § 1) — le test
   * ContrasteEtFocusTest les recalcule depuis les hexadécimaux ci-dessus, il ne les lit pas ici.
   *
   *   ENCRES, sur les cinq fonds clairs (surface / app / muted / action-surface / validation-surface)
   *   --wicolis-text-strong        gray-900 .. 17,85 · 17,06 · 16,30 · 16,05 · 16,40   ✓ texte
   *   --wicolis-text-default       gray-700 .. 10,35 ·  9,90 ·  9,45 ·  9,31 ·  9,51   ✓ texte
   *   --wicolis-action / --wicolis-link  info ....  5,17 ·  4,94 ·  4,72 ·  4,65 ·  4,75   ✓ texte
   *
   *   ENCRES sur fond institutionnel (institutional-surface / institutional-raised)
   *   --wicolis-text-inverse       blanc .... 17,39 · 11,21                            ✓ texte
   *   --wicolis-text-inverse-muted gray-300 . 11,72 ·  7,55                            ✓ texte
   *
   *   ENCRE institutionnelle sur fond clair
   *   --wicolis-institutional      navy-900 . 17,39 · 16,62 · 15,88 · 15,64 · 15,98    ✓ texte
   *                            règle 11 : JAMAIS sur --wicolis-institutional-surface (1,00:1) ni sur
   *                            --wicolis-institutional-raised (1,55:1).
   *
   *   OBJETS NON TEXTUELS (seuil 3:1)
   *   --wicolis-border-strong      gray-500 .  4,76 ·  4,55 ·  4,34 ·  4,28           ✓ ≥ 3:1 partout
   *   --wicolis-accent             blue-600 .  3,68 ·  3,52 ·  3,36 ·  3,31 ·  3,38   ✓ ≥ 3:1 partout
   *                            + 4,73 sur institutional-surface, 3,05 sur institutional-raised
   *   --wicolis-border             gray-300 .  1,48  ✗ — filet DÉCORATIF (règle 13), jamais la limite
   *                            d'un champ, d'une case, d'un bouton ou d'un élément sélectionnable
   *   --wicolis-validation         green-600 . 2,28 ✗ sur tout fond clair, 2,09 ✗ sur son propre fond ;
   *                            7,63 / 4,92 sur fond institutionnel. Aplat redondant ≥ 24 × 24 px
   *                            doublé d'un libellé, ou tracé sur fond institutionnel SEULEMENT
   *                            (A-10 § 4.3). Jamais bordure, glyphe, focus ni limite sur fond clair.
   *
   *   TEINTES DE STATUT sur leur FOND ÉPINGLÉ (règle 16, A-10 § 4.2) — un couple non déclaré est
   *   un échec de test, pas une liberté de composition :
   *   --wicolis-status-success  sur --wicolis-validation-surface .. 3,03  ✓   (libellé : 16,40)
   *   --wicolis-status-info     sur --wicolis-action-surface ...... 4,65  ✓   (libellé : 16,05)
   *   --wicolis-status-warning  sur --wicolis-surface ............. 3,19  ✓   (libellé : 17,85)
   *   --wicolis-status-danger   sur --wicolis-surface ............. 4,83  ✓   (libellé : 17,85)
   *   --wicolis-status-neutral  sur --wicolis-surface-muted ....... 4,34  ✓   (libellé : 16,30)
   *   Couples INTERDITS, mesurés sous 3:1 : warning sur surface-muted (2,91), sur action-surface
   *   (2,86), sur validation-surface (2,93) ; success sur action-surface (2,96).
   *
   * Conséquences opposables :
   *   - --wicolis-text-muted est RETIRÉ de la table (A-09). Le nom n'est pas réaffecté : il disparaît.
   *     Tout texte secondaire sur fond clair prend --wicolis-text-default (9,31:1 au pire des cinq
   *     fonds) ; la hiérarchie du secondaire est portée par la TAILLE (--wicolis-text-small 14 px,
   *     --wicolis-text-caption 12 px) et la GRAISSE, jamais par une baisse de contraste. gray-500 ne
   *     survit que dans deux rôles non textuels : --wicolis-border-strong et --wicolis-status-neutral.
   *   - Les cinq --wicolis-status-* ne sont JAMAIS des couleurs de texte, --wicolis-status-danger compris :
   *     danger tient 4,83 sur --wicolis-surface et 4,62 sur --wicolis-surface-app mais seulement 4,41 sur
   *     --wicolis-surface-muted, 4,34 sur --wicolis-action-surface et 4,44 sur --wicolis-validation-surface.
   *     C'est un conditionnement au conteneur, que la règle 15 interdit. Le libellé d'un statut et
   *     le message d'erreur d'un champ restent --wicolis-text-strong ; la tonalité est portée par le
   *     fond, la bordure et le glyphe. En FOND plein sous du blanc, danger reste admis (4,83:1).
   *   - --wicolis-navy-700 a exactement deux rôles (règle 12), aucun n'étant une encre sur fond clair :
   *     --wicolis-action-hover (survol / appui) et --wicolis-institutional-raised (bloc surélevé et filet
   *     dans la bande institutionnelle).
   */
  --wicolis-surface: var(--wicolis-white);
  --wicolis-surface-app: var(--wicolis-gray-50);
  --wicolis-surface-muted: var(--wicolis-gray-100);
  --wicolis-institutional: var(--wicolis-navy-900);
  --wicolis-institutional-surface: var(--wicolis-navy-900);
  --wicolis-institutional-raised: var(--wicolis-navy-700);
  --wicolis-border: var(--wicolis-gray-300);
  --wicolis-border-strong: var(--wicolis-gray-500);
  --wicolis-text-strong: var(--wicolis-gray-900);
  --wicolis-text-default: var(--wicolis-gray-700);
  --wicolis-text-inverse: var(--wicolis-white);
  --wicolis-text-inverse-muted: var(--wicolis-gray-300);
  --wicolis-action: var(--wicolis-info);
  --wicolis-action-text: var(--wicolis-white);
  --wicolis-action-hover: var(--wicolis-navy-700);
  --wicolis-action-surface: var(--wicolis-blue-50);
  --wicolis-validation-surface: var(--wicolis-green-50);
  --wicolis-link: var(--wicolis-action);
  --wicolis-accent: var(--wicolis-blue-600);
  --wicolis-accent-on-institutional: var(--wicolis-blue-400);
  --wicolis-validation: var(--wicolis-green-600);
  --wicolis-focus-ring: var(--wicolis-accent);
  --wicolis-status-success: var(--wicolis-success);
  --wicolis-status-info: var(--wicolis-info);
  --wicolis-status-warning: var(--wicolis-warning);
  --wicolis-status-danger: var(--wicolis-danger);
  --wicolis-status-neutral: var(--wicolis-gray-500);
}
