/* ==========================================================================
   LES POLICES — auto-hébergées, jamais un CDN
   --------------------------------------------------------------------------
   `CLAUDE.md` interdit les dépendances externes, et l'adresse IP de chaque
   visiteur n'a rien à faire chez Google pour dessiner un titre. Les six
   fichiers pèsent 176 Ko en tout, et une page n'en charge que ce qu'elle emploie.

   `font-display: swap` : le texte s'affiche tout de suite dans la police de
   secours et se redessine quand la vraie arrive. Une page qui attend sa police
   pour montrer du texte est une page blanche.

   LES ADRESSES SONT ABSOLUES (`/polices/…`) et non relatives. Ce fichier est
   RECOPIÉ dans le `<style>` de l'application : une adresse relative s'y
   résoudrait par rapport à la PAGE, pas par rapport au fichier, et
   `demo-console.phonodesk.fr/phonodesk.php` irait chercher les polices à côté
   de lui.

   LES `unicode-range` FONT LE TRI. Le sous-jeu étendu (85 Ko pour Inter) ne part
   que si la page contient un caractère qui s'y trouve. Une page française n'en
   charge jamais un octet.
   (Prompt 119 : « œ », U+0153, était dans les DEUX sous-jeux, et le second
   déclaré gagnait. Un avis client qui écrivait « coup d'œil » faisait partir
   85 Ko de plus sur l'accueil. Le sous-jeu étendu ne couvre plus U+0152-0153.)

   Inter est VARIABLE : un seul fichier porte 400 à 600, d'où `font-weight` en
   intervalle. Poppins ne l'est pas : une déclaration par graisse.

   SIL Open Font License 1.1 — le texte est dans `polices/`, et il doit y rester.
   ========================================================================== */

@font-face{
  font-family:"Inter"; font-style:normal; font-weight:400 600; font-display:swap;
  src:url(/polices/inter-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:"Inter"; font-style:normal; font-weight:400 600; font-display:swap;
  src:url(/polices/inter-latin-ext.woff2) format("woff2");
  unicode-range:U+0100-0151, U+0154-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:"Poppins"; font-style:normal; font-weight:600; font-display:swap;
  src:url(/polices/poppins-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;
}
@font-face{
  font-family:"Poppins"; font-style:normal; font-weight:600; font-display:swap;
  src:url(/polices/poppins-600-latin-ext.woff2) format("woff2");
  unicode-range:U+0100-0151, U+0154-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:"Poppins"; font-style:normal; font-weight:700; font-display:swap;
  src:url(/polices/poppins-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;
}
@font-face{
  font-family:"Poppins"; font-style:normal; font-weight:700; font-display:swap;
  src:url(/polices/poppins-700-latin-ext.woff2) format("woff2");
  unicode-range:U+0100-0151, U+0154-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;
}

/* ==========================================================================
   charte.css — LA CHARTE PHONODESK, ET RIEN D'AUTRE
   --------------------------------------------------------------------------
   Prompt 15. Un seul endroit décide d'une couleur, d'une police, d'un rayon,
   d'une ombre. Tout le reste du dépôt écrit `var(--…)`.

   QUI LIT CE FICHIER

     l'application    `styles()` dans `css-atelier.php` en recopie le contenu
                      dans son `<style>` — aucune requête de plus, et une seule
                      source sur le disque
     la vitrine       `<link rel="stylesheet">` dans `vitrine/inc/entete.php`,
                      avant `theme.css` qui en dérive ses cinq thèmes
     la console       `<link>`, comme la vitrine
     les courriels    `courriels/gabarit.php` recopie les valeurs en dur dans
                      des attributs `style=` : aucun client mail ne comprend
                      `var()`. C'est la SEULE duplication permise, et elle est
                      vérifiée par `outils/banc-charte.php`.

   --------------------------------------------------------------------------
   TROIS FAMILLES QUI NE SE MÉLANGENT PAS

     1. LA MARQUE        périwinkle, marine, ciel. Une boutique peut les
                         recouvrir pour SON interface (Réglages › Mon
                         interface) ; tout ce qui appartient à Phonodesk les
                         garde.
     2. LES STATUTS      à faire, en cours, prêt, rendu, SAV, absence, verrou.
                         Ils ne suivent JAMAIS l'accent d'une boutique.
     3. LA SÛRETÉ        erreur, succès, avertissement. Elles ne suivent jamais
                         rien non plus.

   POURQUOI CETTE FRONTIÈRE EST LA CHOSE IMPORTANTE DE CE FICHIER

   Mesuré le 24/09, avant ce prompt : `.s-pret{background:var(--cyan)}`. Le
   statut « prêt » prenait l'ACCENT de la boutique. Une boutique à l'accent
   rouge affichait donc ses appareils prêts en rouge, et ses retards aussi —
   deux sens opposés, la même couleur. `.s-rachat` faisait de même avec
   `var(--blue)`.

   Une couleur de statut est un MOT, pas une décoration : « prêt » doit se lire
   de l'autre bout de l'atelier sans qu'on ait à lire le texte. Une enseigne ne
   négocie pas le vocabulaire.

   --------------------------------------------------------------------------
   LE CYAN NE DISPARAÎT PAS, IL CHANGE DE MÉTIER

   Le prompt 15 dit que le cyan de l'ancien Phonodesk disparaît. Il disparaît
   comme ACCENT : le périwinkle prend sa place partout où il signifiait
   « Phonodesk » ou « cliquez ici ».

   Il reste la couleur du statut « prêt » (`--st-pret`), à la valeur exacte
   qu'il avait. Deux raisons : un réparateur a appris à repérer le prêt à cette
   couleur-là, et la changer le même soir que tout le reste aurait mélangé un
   changement de marque avec un changement de vocabulaire. Il est désormais
   FIXE — c'est le vrai changement, et il est invisible tant qu'on n'a pas
   d'accent personnalisé.
   ========================================================================== */

:root{

  /* ======================================================================
     1. LA MARQUE
     ====================================================================== */

  /* Périwinkle — accent, boutons principaux, onglet actif, liens sur sombre */
  --pd-peri:          #6C6CFF;
  --pd-peri-rgb:      108,108,255;
  --pd-peri-survol:   #5B5BF0;
  --pd-peri-halo:     rgba(108,108,255,.35);

  /* Marine — fond sombre, titres sur fond clair, texte des boutons clairs */
  --pd-marine:        #10103F;
  --pd-marine-rgb:    16,16,63;
  --pd-marine-fond:   #0D0D36;   /* le fond sombre le plus profond */
  --pd-surface:       #171760;   /* cartes et barres sur sombre */
  --pd-surface-2:     #1C1C6B;   /* surfaces surélevées */

  /* Ciel — liens secondaires, accents froids, badges */
  --pd-ciel:          #5AB8FF;
  --pd-ciel-pale:     #BFE6FF;   /* fonds de badge, lignes sur sombre */

  /* Le clair */
  --pd-clair:         #F2F8FD;   /* fond des pages claires */
  --pd-carte:         #FFFFFF;
  --pd-ligne:         #E3E6F0;
  --pd-encre:         #141433;
  /* #6B6F85 DANS LA TABLE DU PROMPT 15, #65697F ICI, ET C'EST ASSUMÉ.
     Mesuré par Lighthouse le 25/09 sur l'accueil : #6B6F85 sur `--fond-doux`
     (#E9F1FA) donne 4,34:1 — sous le seuil AA de 4,5, sur quarante-huit
     éléments de la page. #65697F donne 4,75, et l'œil ne distingue pas les
     deux. L'accessibilité passe avant la fidélité au chiffre. */
  --pd-encre-douce:   #65697F;

  /* Le clair POSÉ SUR DU SOMBRE — le sous-titre d'une page d'entrée, le pied.
     Ce ne sont pas des valeurs de la table du prompt : elles s'y trouvaient
     dans les maquettes, et une valeur qui sert deux fois a sa place ici. */
  --pd-sur-sombre:      #C9D3EE;
  --pd-sur-sombre-doux: #8A95B8;

  /* Les deux voisins du périwinkle : le clair du dégradé de la pastille, et le
     foncé du survol d'un bouton plein. Ils naissent ici parce qu'ils servent
     déjà à deux endroits — une valeur qui sert deux fois n'a plus le droit
     d'être écrite dans une règle. */
  --pd-peri-clair:      #8A8AFF;
  --pd-peri-fonce:      #4A4ADF;

  /* UN LIEN SUR BLANC N'EST PAS UN LIEN SUR MARINE. Le ciel (#5AB8FF) donne
     2,0:1 sur du blanc — illisible. Ce bleu-ci donne 7,4:1, et reste un bleu de
     lien : on le reconnaît sans l'avoir appris. */
  --pd-lien-clair:      #2A4FB0;

  /* Les gris de formulaire : l'icône dans un champ, et le mot « OU » entre deux
     boutons. Ce ne sont pas du texte à lire mais des repères. */
  --pd-gris-icone:      #8A90A6;
  /* LE SÉPARATEUR « OU » EST DU TEXTE, PAS UN TRAIT. #9AA0B4 sur blanc donne
     2,61:1 — Lighthouse l'a signalé sur /connexion. #6B7186 donne 4,85. */
  --pd-gris-doux:       #6B7186;
  /* LA VITRINE — prompt 118 : les teintes que `theme.css` et `style.css`
     écrivaient en dur. Elles deviennent des jetons ; plus aucun hexa ailleurs. */
  --pd-clair-doux:      #E9F1FA;   /* bande douce sur fond clair */
  --pd-peri-pale:       #EFEFFF;   /* fond d'accent sur clair */
  --pd-indigo-charte:   #322F9C;
  --pd-marine-bord:     #2A2878;   /* bord de carte sur marine */
  --pd-marine-doux:     #1E1E6E;
  --pd-erreur:          #D14343;   /* message d'échec d'un formulaire */
  --pd-erreur-doree:    #D1A343;   /* « à confirmer » de l'aide Allo */

  /* ------------------------------------------------------------
     LES AVIS, SUR FOND CLAIR
     ------------------------------------------------------------
     Ce ne sont PAS `--ok` et `--alert`. Ceux-là sont calculés pour se détacher
     d'un fond sombre ; posés sur du blanc ils passent de signal à pastel. Un
     message d'erreur qu'on ne remarque pas est un message d'erreur absent.
     Chaque paire encre/fond est vérifiée : 8,1:1 et 7,4:1. */
  --pd-avis-ko-fond:    #FDECEC;  --pd-avis-ko-bord:  #F3B7B7;
  --pd-avis-ko-encre:   #8E1B1B;
  --pd-avis-ok-fond:    #E8F8F0;  --pd-avis-ok-bord:  #A9E3C6;
  --pd-avis-ok-encre:   #12613C;
  /* ET L'ENTRE-DEUX, ajouté au prompt 16 §2 bis. Il manquait : le contrôle en
     direct de l'adresse d'inscription doit pouvoir dire « c'est possible, mais
     voilà ce que vous perdez » — ni un refus rouge, ni un feu vert. Sans lui
     l'avertissement doux se serait écrit en `--amber` (#FBBF24), qui est
     calculé pour un fond SOMBRE : 1,8:1 sur blanc, c'est-à-dire absent.
     Mesuré : encre 5,93:1 sur blanc, 5,54:1 sur `--pd-clair`, 5,51:1 sur son
     propre fond. */
  --pd-avis-attention-fond:  #FEF6E3;  --pd-avis-attention-bord: #F0DCA8;
  --pd-avis-attention-encre: #8A5A00;

  /* ======================================================================
     2. LES POLICES

     Auto-hébergées (`vitrine/polices/`), jamais un CDN : §4 l'interdit, et
     l'adresse de chaque visiteur n'a rien à faire chez un tiers pour dessiner
     un titre. `system-ui` en tête du repli — une page qui arrive sans sa
     police doit rester lisible.
     ====================================================================== */
  --pd-titre: "Poppins", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --pd-texte: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --pd-mono:  ui-monospace, "SF Mono", Menlo, Consolas, monospace;

  /* ======================================================================
     3. RAYONS, OMBRES, LE FOND À HALOS
     ====================================================================== */
  --pd-rayon-carte:  22px;
  --pd-rayon:        12px;   /* boutons et champs */
  --pd-rayon-pill:   22px;   /* pastilles */

  --pd-ombre-sombre: 0 30px 80px rgba(0,0,0,.45);
  --pd-ombre-clair:  0 12px 30px rgba(16,16,63,.12);
  --pd-ombre-peri:   0 10px 24px rgba(108,108,255,.35);

  /* Le fond « marine à halos » : pages d'entrée, en-têtes de la vitrine,
     cartes de la démo. Écrit une fois, parce qu'il est long et qu'une copie
     approximative se voit tout de suite. */
  --pd-halos:
    radial-gradient(900px 600px at 15% 0%, #2A2A8A 0%, transparent 60%),
    radial-gradient(700px 500px at 90% 100%, #2F5FB8 0%, transparent 55%),
    linear-gradient(160deg, #0D0D36 0%, #10103F 45%, #0B1A4F 100%);

  /* ======================================================================
     4. LES STATUTS DU PLANNING — jamais l'accent d'une boutique

     Valeurs reprises telles quelles de l'ancien CSS : ce prompt les DÉPLACE,
     il ne les redessine pas. Un réparateur les a apprises.
     ====================================================================== */
  --st-preenregistre:     #FACC15;  --st-preenregistre-encre: #241C02;
  /* ======================================================================
     « COMMANDE SPÉCIFIQUE » PASSE EN VIOLET CLAIR — prompt 65 §1
     ----------------------------------------------------------------------
     Le violet plein (#7C3AED) portait une encre presque blanche : une pastille
     sombre et saturée, aussi appuyée qu'un « annulé » rouge. Or une fiche qui
     attend une pièce n'est pas un incident — c'est une attente. Elle doit se
     repérer d'un coup d'œil sans réclamer qu'on s'en occupe tout de suite.

     LA VALEUR N'EST PAS NOUVELLE : c'est `--signal-violet` (167,139,250), le
     violet que le dépôt emploie déjà pour l'étiquette « pièce commandée » de
     l'atelier et pour la rubrique « autre » d'Allo. Un second violet aurait
     fait deux violets à distinguer sur le même écran.

     SON ENCRE EST MESURÉE, PAS CHOISIE : #1A1033 sur #A78BFA donne 6,62:1, et
     `outils/banc-charte.php` refait ce calcul à chaque exécution pour les deux
     thèmes et les cinq accents. Le dépôt n'écrit pas une couleur sans son
     ratio.

     ELLE SUIT LE MOTIF DES AUTRES STATUTS — une encre très sombre TEINTÉE de
     la couleur de la plaque, comme #241C02 sur le jaune et #2A1302 sur
     l'orange. Un gris neutre y aurait fait une tache.

     POURQUOI LE JETON PORTE UN NOM DE SIGNAL ET PAS DE STATUT : la bulle de la
     liste de courses s'en sert aussi, pour son encadré des spécifiques. Deux
     surfaces qui disent la même chose doivent la dire avec la même couleur.
     ====================================================================== */
  --signal-violet-clair:        #A78BFA;
  --signal-violet-clair-encre:  #1A1033;
  --st-commande:          var(--signal-violet-clair);
  --st-commande-encre:    var(--signal-violet-clair-encre);
  --st-encours:           #FB923C;  --st-encours-encre:       #2A1302;
  --st-pret:              #29D3F0;  --st-pret-encre:          #04222B;
  --st-rachat:            #1E3A8A;  --st-rachat-encre:        #DBEAFE;
  --st-rachat-bord:       #3B82F6;
  --st-recupere:          #3C4A5C;  --st-recupere-encre:      #C4D2E2;
  --st-annule:            #EF4444;  --st-annule-encre:        #2A0505;
  --st-absent:            #3C4A5C;  --st-absent-2:            #2C3947;
  --st-sav:               #B8791F;  --st-sav-encre:           #1A1002;
  --st-sav-motif:         #F0DCBC;

  /* ======================================================================
     5. LA SÛRETÉ — elle ne suit rien
     ====================================================================== */
  --ok:     #34D399;
  --amber:  #FBBF24;   /* bac à sable, impersonation : des SIGNAUX */
  --alert:  #F87171;

  /* ======================================================================
     7. LES TEINTES D'ÉTAT — un fond, une bordure, une encre

     Elles existaient dans `css-atelier.php`, écrites en clair, une par
     bandeau : `#a7f3d0` ici, `#9ce9cc` deux lignes plus bas, `#fca5a5` et
     `#fbb4b4` pour deux rouges qu'on croyait identiques. Personne n'avait
     nommé l'intention, donc chacun en inventait une nuance.

     LEURS VALEURS NE CHANGENT PAS. On les nomme, on ne les redessine pas :
     c'est un déménagement, et il doit être invisible à l'écran.
     ====================================================================== */
  --ok-fond:      rgba(52,211,153,.12);   --ok-bord:    rgba(52,211,153,.40);
  --ok-encre:     #9ce9cc;                --ok-vif:     #4ade80;
  --amber-fond:   rgba(251,191,36,.12);   --amber-bord: rgba(251,191,36,.38);
  --amber-encre:  #ffe9b0;                --amber-doux: #fde68a;
  --alert-fond:   rgba(248,113,113,.12);  --alert-bord: rgba(248,113,113,.40);
  --alert-encre:  #fbb4b4;                --alert-doux: #fca5a5;

  /* ======================================================================
     6. LES NOMS QUE L'APPLICATION EMPLOIE

     Ils existaient avant ce prompt et sont écrits dans des centaines de règles.
     On ne renomme que ce qui MENTIRAIT : `--cyan` devenu périwinkle devait
     changer de nom, `--nuit-800` devenu marine reste de la nuit.

     C'est ici que la charte entre dans l'atelier.
     ====================================================================== */
  --nuit-900:     var(--pd-marine-fond);
  --nuit-900-rgb: 13,13,54;
  --nuit-800:     var(--pd-marine);
  --nuit-700:     var(--pd-surface);
  --nuit-600:     var(--pd-surface-2);
  --line:         #2B2B7A;
  --line-2:       #20205E;

  /* L'ACCENT N'EST PAS LISIBLE EN TEXTE, ET C'EST MESURÉ.
     #6C6CFF sur une carte (#171760) donne 3,94:1 — le seuil AA du texte est 4,5.
     Le périwinkle est pourtant clair (71 % en TSL) : c'est sa TEINTE qui coûte
     du contraste, l'œil recevant peu de luminance du bleu (0,0722 dans la
     formule, contre 0,7152 pour le vert).

     Un second jeton sert donc PARTOUT où l'accent est du TEXTE : liens, petits
     libellés, nombres. L'accent lui-même reste #6C6CFF pour les remplissages,
     les onglets actifs et les bordures, où le seuil est 3:1.

     SA VALEUR N'EST PAS CHOISIE À LA MAIN : c'est exactement ce que rend
     `charte_lisible('#6C6CFF')`, qui monte la clarté jusqu'à atteindre 4,5 et
     s'arrête au premier pas qui passe. Une boutique qui personnalise son accent
     obtient le sien, calculé par la même fonction. Deux valeurs écrites
     séparément auraient divergé au premier ajustement. */
  /* ------------------------------------------------------------
     L'APLAT D'ACCENT N'EST PAS LE PÉRIWINKLE DE LA MARQUE, ET C'EST MESURÉ
     ------------------------------------------------------------
     Le blanc sur `--pd-peri` donne 4,02:1 — sous le seuil, et c'est l'encre de
     tous les boutons principaux de l'application. Deux sorties : assombrir le
     texte, ou assombrir l'aplat. Le hub avait tranché au prompt 15 en prenant
     `--pd-peri-survol` pour cette raison exacte, la console a suivi au prompt
     30 ; l'application suit à son tour, pour que la réponse soit la même
     partout dans le produit.

     `--accent-rgb` GARDE LE PÉRIWINKLE : il ne sert qu'aux halos et aux
     plaques translucides, qui ne portent pas de texte. Un halo un ton plus vif
     que son bouton est ce qu'un halo doit être.

     ET `--accent-texte` MONTE D'UN CRAN : #8080FF donnait 4,16 sur une carte
     voilée et 3,83 sur une ligne survolée voilée. Même méthode, même mesure.
  ------------------------------------------------------------ */
  --accent:       var(--accent-plein);
  --accent-texte: #9494FF;

  /* ------------------------------------------------------------
     L'ACCENT QUI NE SUIT PAS LE THÈME — prompt 71 §2
     ------------------------------------------------------------
     Décision cadre 3 : « la barre latérale et le cartouche sont sombres dans
     les DEUX thèmes — c'est la signature ; seul le contenu change. »

     `--accent-texte` ne peut pas servir là : en thème clair il devient
     #4A4ADF, mesuré pour se lire sur du blanc, et il donne 2,1 sur le marine
     de la barre. L'accent de la boutique disparaîtrait de sa propre
     navigation, et un contraste de 2,1 n'est pas un choix de goût.

     CELUI-CI EST DÉCLARÉ ICI ET NULLE PART AILLEURS : il n'est PAS redéfini
     dans le bloc `[data-theme="clair"]`, et c'est tout son intérêt. Une
     surface qui ne change pas de couleur avec le thème a besoin d'une encre
     qui ne change pas non plus.

     `charte_css_de()` en émet la version calculée d'une boutique, dans son
     bloc `:root` seulement — jamais dans son bloc clair.
  ------------------------------------------------------------ */
  --accent-sur-sombre: #9494FF;

  /* L'ACCENT EN REMPLISSAGE SOUS DU TEXTE BLANC.
     Blanc sur #6C6CFF : 4,02:1 — sous le seuil. Blanc sur #5B5BF0 : 5,00:1.
     #5B5BF0 est la valeur que la charte donne déjà pour le survol : on ne sort
     pas de la palette, on s'en sert pour un cas qu'elle n'avait pas prévu.
     Réservé aux surfaces pleines portant du texte de taille normale ; un gros
     bouton (≥ 18,66 px gras) relève du seuil 3:1 et garde #6C6CFF. */
  /* #5B5BF0 est la valeur de survol de la charte, et elle passait sur du
     blanc (5,00) mais pas sur `--fond-doux` (4,39). #5555EC donne 5,39 et 4,73.
     Même raison, même arbitrage. */
  --accent-plein: #5555EC;
  --accent-rgb:   var(--pd-peri-rgb);
  --accent-2:     #4B7BE5;          /* la seconde couleur du dégradé */
  --accent-2-rgb: 75,123,229;
  --sur-accent:   #FFFFFF;          /* l'encre POSÉE SUR l'accent */
  --grad:         linear-gradient(135deg, var(--accent), var(--accent-2));

  --txt:          #EAEAFB;
  --txt-2:        #A8AEDA;
  /* `--txt-3` VALAIT #848AB8, ET IL ÉCHOUAIT : 4,42 sur une ligne survolée,
     3,75 quand un voile la relève encore. Il porte toutes les étiquettes de
     tableau. La valeur ci-dessous est la plus proche de l'ancienne qui passe
     sur les trente-six surfaces sombres réelles.

     Mesuré d'abord dans la console (prompt 30), où il était corrigé sur place ;
     la correction remonte ici, parce que l'application rencontrait le même
     défaut au même endroit — et une règle écrite deux fois est deux règles. */
  --txt-3:        #979CC3;

  /* ======================================================================
     8 bis. LES BLOCS PARTAGÉS ENTRE L'APPLICATION ET LE HUB — prompt 33
     ----------------------------------------------------------------------
     CES NEUF JETONS EXISTENT PARCE QU'UN BLOC A ÉTÉ ÉCRIT DANS LA MAUVAISE
     LANGUE, et que ça ne s'est vu qu'à l'étape 6 d'une inscription.

     `lib-onboarding.php` rend les mêmes blocs à DEUX endroits : Réglages ›
     Tarifs, dans l'application, et les écrans 6 à 11 du tunnel, sur le hub.
     Il les écrivait en jetons de THÈME (`--nuit-700`, `--txt-2`, …). Dans
     l'application, qui pose `data-theme`, ils valent ce qu'il faut. Sur le hub,
     qui n'en pose AUCUN (CHOIX-32 §5), ils gardent leurs valeurs sombres : des
     cartes marine posées sur une carte blanche, avec une encre claire dessus.
     « Oui, je suis agréé » était quasi invisible.

     ------------------------------------------------------------
     POURQUOI DES JETONS ET NON UNE REDÉFINITION LOCALE DANS LE HUB

     Redéfinir `--nuit-700` et `--txt` à l'intérieur de `.carte` aurait marché,
     en huit lignes, et c'était l'autre option. Elle a été écartée pour une
     raison : elle fait dépendre la couleur du texte d'une carte du hub de
     jetons que le hub n'emploie nulle part ailleurs. Un couplage muet de plus,
     dans un fichier où personne n'irait le chercher — et ce dépôt en a déjà
     corrigé six de cette famille.

     UN JETON SÉMANTIQUE DIT CE QU'IL EST, PAS OÙ IL EST. « la surface d'un
     bloc », « son encre secondaire ». Les deux coquilles le posent, chacune
     avec ses valeurs ; le bloc partagé n'a plus à savoir laquelle le rend.

     Et surtout, la règle devient MÉCANIQUE : un fichier partagé ne doit
     contenir AUCUN jeton de thème. `outils/banc-charte.php` le vérifie — il
     cherche la chaîne, pas la règle.

     ICI, EN SOMBRE, ILS VALENT EXACTEMENT CE QUE LES `.ob-*` VALAIENT. Ce
     prompt ne change rien à l'application : il la laisse à l'octet où elle
     était, et ne corrige que le hub. Une correction qui repeint au passage ce
     qui marchait est une correction qu'on ne peut plus relire.
     ====================================================================== */
  --bloc-surface:      var(--nuit-700);   /* la carte d'un choix, au repos */
  --bloc-surface-on:   var(--nuit-600);   /* la même, cochée */
  --bloc-creux:        var(--nuit-800);   /* un champ, un encart en creux */
  --bloc-ligne:        var(--line);
  --bloc-encre:        var(--txt);
  --bloc-encre-2:      var(--txt-2);
  --bloc-encre-3:      var(--txt-3);
  /* ------------------------------------------------------------
     `--accent-texte` ET NON `--accent`, ET C'EST LE BANC QUI L'A IMPOSÉ
     ------------------------------------------------------------
     `--accent-plein` (#5555EC) sur `--nuit-600` (#1C1C6B) donne 2,73:1.

     Ce serait sans importance si la bordure était décorative. Elle ne l'est
     pas : le pas de FOND entre « au repos » (#171760) et « coché » (#1C1C6B)
     vaut 1,08 — autant dire rien. C'est donc la bordure qui porte SEULE le
     signe de l'état, et un signe d'état se tient à 3:1 (WCAG 1.4.11).

     `--accent-texte` est le même périwinkle, éclairci pour se lire sur le
     sombre — la charte l'a déjà mesuré au prompt 13b. 5,56:1. On réemploie une
     valeur mesurée plutôt que d'en inventer une onzième.

     DÉFAUT PRÉEXISTANT, PAS UNE RÉGRESSION DE CE PROMPT : les `.ob-*` ont
     toujours employé `--accent` pour cette bordure. Personne ne l'avait vu
     parce que personne ne mesurait ces paires-là. C'est le banc de ce prompt
     qui les mesure, et il a trouvé en premier ce qu'il venait garder.
  ------------------------------------------------------------ */
  --bloc-accent:       var(--accent-texte); /* la bordure d'un bloc coché */
  --bloc-accent-texte: var(--accent-texte); /* un prix, une mention */

  /* ======================================================================
     9. LE VOILE, LES OMBRES ET LE FOND D'UNE MODALE — prompt 13b
     ----------------------------------------------------------------------
     CE SONT LES TROIS PIÈGES DU THÈME CLAIR, et ils ne se voient pas en
     relisant une règle : ils se voient en basculant.

     LE VOILE. `rgba(255,255,255,.04)` posé sur une carte sombre l'ÉCLAIRCIT
     d'un cran — c'est ainsi qu'une pilule, un rail, une ligne paire se
     détachent sans qu'on leur donne une couleur. Posé sur une carte BLANCHE,
     il ne fait rien du tout : le relief disparaît, et l'écran devient une
     feuille plate. Le voile n'est donc pas « du blanc », c'est « le contraire
     de la surface » — d'où un jeton, et deux valeurs.

     L'OMBRE. Une ombre noire à 50 % sous une carte est juste sur du bleu nuit
     et devient une tache sale sur du blanc cassé. En clair, le relief se fait
     par LA LIGNE, pas par l'ombre : les trois ombres y sont plus courtes, plus
     diluées, et teintées de marine plutôt que de noir.

     TROIS OMBRES, PAS NEUF. L'atelier en portait neuf écritures pour trois
     intentions — `0 12px 34px`, `0 10px 40px`, `0 16px 46px` disaient la même
     chose. On a nommé l'intention, pas la mesure (prompt 16 §5) :

       --ombre-1   ce qui est POSÉ sur la page : bouton flottant, bulle
       --ombre-2   ce qui FLOTTE au-dessus : carte de menu, panneau, popover
       --ombre-3   ce qui COUVRE : modale, dialogue

     LE FOND D'UNE MODALE (`::backdrop`) est le quatrième : en sombre on
     assombrit encore, en clair on pose un voile marine dilué — un noir à 72 %
     derrière une modale blanche donne un écran de cinéma, pas une application.
     ====================================================================== */
  --voile:        255,255,255;
  --ombre-rgb:    0,0,0;
  --ombre-1:      0 6px 20px rgba(var(--ombre-rgb),.35);
  --ombre-2:      0 12px 34px rgba(var(--ombre-rgb),.50);
  --ombre-3:      0 24px 64px rgba(var(--ombre-rgb),.60);
  --fond-modale:  rgba(6,12,22,.72);

  /* ======================================================================
     10. LES SIGNAUX — la teinte reste, l'encre change — prompt 13b
     ----------------------------------------------------------------------
     Un avertissement ambre doit être ambre sur les deux thèmes : c'est la
     teinte qui porte le sens, et la changer ferait mentir l'écran. Mais la
     même plaque translucide — `rgba(var(--signal-ambre),.12)` — donne un brun
     profond sur une carte marine et une crème sur une carte blanche, et
     AUCUNE encre ne se lit sur les deux.

     Les quatre triplets ne bougent donc pas ; leurs quatre encres, si.

     LES ENCRES SONT CALCULÉES, PAS CHOISIES. `charte_lisible()` cherche la
     clarté la plus proche de la teinte qui passe 4,5:1 sur **toutes** les
     plaques possibles — chaque alpha employé par l'atelier (de .07 à .18)
     posé sur chacune des trois surfaces du thème. C'est la plaque la plus
     défavorable qui décide, et elle n'est écrite nulle part : il faut la
     composer pour la connaître.

     `outils/banc-charte.php` REFAIT ce calcul à chaque exécution et refuse le
     dépôt si une valeur a dérivé. On calcule une fois, on vérifie toujours :
     recalculer à chaque requête coûterait cinquante fois par jour une réponse
     qui ne change jamais.
     ====================================================================== */
  --signal-vert:         52,211,153;
  --signal-ambre:        251,191,36;
  --signal-rouge:        239,68,68;
  --signal-violet:       167,139,250;
  --signal-sav:          184,121,31;
  --signal-froid:        125,141,166;

  /* Calculées contre les TRENTE-SIX surfaces sombres réelles : les quatre
     surfaces × les cinq accents de démonstration, nues ET voilées, chacune
     portant la plaque du signal à chacun des quatre alphas employés.

     Ma première version n'en mesurait que trois — celles de Phonodesk, sans
     voile ni charte de boutique — et le banc a trouvé six paires sous 4,5 chez
     la boutique en vert. Une surface qu'on n'a pas composée est une surface
     qu'on n'a pas mesurée. */
  --signal-vert-texte:   #3CD59D;
  --signal-ambre-texte:  #FBBF24;
  --signal-rouge-texte:  #F58F8F;
  --signal-violet-texte: #BDA8FB;
  --signal-sav-texte:    #E1A44D;
  --signal-froid-texte:  #A7B2C3;

  /* ======================================================================
     11. LA BARRE LCD — LA SEULE CHOSE QUI RESTE SOMBRE EN CLAIR
     ----------------------------------------------------------------------
     C'est une signature (CLAUDE.md), et c'est surtout un objet : **un
     afficheur LCD est noir**. Un LCD blanc n'est pas un LCD clair, c'est un
     champ de texte. Ses deux creux, ses deux encres et son halo gardent donc
     les mêmes valeurs dans les deux thèmes.

     EN CLAIR, SON CONTOUR SE FAIT PAR UNE LIGNE ET NON PAR UNE OMBRE : un
     rectangle noir posé sur du blanc cassé n'a besoin de rien pour se
     détacher, et l'ombre qui le creusait sur sombre y ferait un halo sale.

     Les noms viennent du prompt 13b. Ils s'appelaient `--atelier-creux-*` et
     `--atelier-encre*` — des noms qui disaient OÙ, pas QUOI, et les mêmes
     jetons servaient à l'extérieur du LCD, où ils devaient suivre le thème.
     Un jeton employé dans deux contextes ne peut pas changer dans l'un sans
     casser l'autre : c'est exactement ce qui bloquait le thème clair.
     ====================================================================== */
  --lcd-creux-haut:  #050d16;
  --lcd-creux-bas:   #0a1622;
  --lcd-encre:       #d9f6fd;
  --lcd-encre-2:     #bfe9f5;
  /* Les encres de signal DU LCD. Ce sont les valeurs sombres, et elles le
     restent : un message d'erreur sur l'afficheur reste rouge clair sur noir,
     quel que soit le thème de la page autour. */
  --lcd-accent:      #8A8AFF;
  --lcd-ok:          #9ce9cc;
  --lcd-ko:          #fbb4b4;
  --lcd-ambre:       #FBBF24;
  /* Le voile DU LCD est blanc dans les deux thèmes, pour la même raison. */
  --lcd-voile:       255,255,255;
  /* Sombre : il est creusé par une ombre. Clair : il n'a besoin de rien pour
     se détacher d'un fond blanc cassé — un filet suffit, et l'ombre y ferait
     un halo sale. */
  --lcd-ombre:       0 4px 18px rgba(0,0,0,.45);

  /* ======================================================================
     12. LES SEPT COULEURS DE SÉRIE DES GRAPHES — prompt 13b
     ----------------------------------------------------------------------
     Elles portent une courbe, une part de camembert ET sa ligne de légende :
     c'est donc 4,5:1 qu'il leur faut, pas les 3:1 d'un graphique muet.

     CINQ DES SEPT ÉCHOUAIENT SUR UN FOND CLAIR — le cyan à 1,80, le jaune à
     1,67, le vert à 1,92. Elles sont donc recalculées par `charte_lisible()`
     contre la surface la plus défavorable du thème clair, qui DESCEND depuis
     ce prompt. C'est en les lui demandant que le défaut de cette fonction est
     apparu : elle rendait les sept en #FFFFFF, soit sept courbes blanches sur
     du blanc, sans que rien n'avertisse.

     LES TEINTES SONT LES MÊMES DES DEUX CÔTÉS, et c'est ce qui compte : une
     série « violet » reste violette, elle change seulement de clarté.
     ====================================================================== */
  /* Deux d'entre elles ne passaient pas sur une carte SOMBRE non plus : le
     bleu à 4,30 et le violet à 3,73. Elles sont donc recalculées des deux
     côtés, contre les mêmes surfaces réelles que les signaux. */
  --serie-1: #29D3F0;
  --serie-2: #679EF8;
  --serie-3: #AD8CF9;
  --serie-4: #34D399;
  --serie-5: #FBBF24;
  --serie-6: #F472B6;
  --serie-7: #94A3B8;
  /* Le disque d'un point de courbe : la surface sur laquelle il est posé. */
  --serie-creux: var(--nuit-900);   /* 4,75 sur #171760 — mesuré, pas deviné */

  /* ======================================================================
     8. L'ATELIER — LES SURFACES D'AVANT LA CHARTE, ENFIN NOMMEES

     Quatre-vingt-dix-huit litteraux vivaient dans `css-atelier.php` : les
     fonds sombres (`#0d1726`, `#0e1826`, `#050d16`…), leurs gris de texte
     (`#93A9C2`, `#7289A2`, `#6d8299`…) et les encres posees sur les aplats
     vifs. Ils datent d'avant la charte et personne n'avait nomme leur
     intention — d'ou trois nuances de fond pour un seul fond, et trois gris
     pour un seul gris.

     LEURS VALEURS NE CHANGENT PAS, SAUF QUAND DEUX LITTERAUX DISENT LA MEME
     CHOSE. Dans ce cas ils deviennent un seul jeton, et l'ecart percu est
     inscrit a cote : CIEDE2000, ou 2,3 est le seuil au-dela duquel un oeil
     commence a distinguer deux aplats separes dans une page.

     C'EST CE QUI REND LE THEME CLAIR POSSIBLE. Tant que ces valeurs etaient
     dans les regles, un second jeu de valeurs n'aurait repeint que le tiers
     qui passait deja par une variable.
     ====================================================================== */

  /* --- LES FONDS ------------------------------------------------------ */
  /* Le creux : ce qui est ENFONCE dans la planche — l'ecran du LCD, celui de
     la fiche. Un degrade, donc deux jetons : un dessus, un dessous. */
  --atelier-creux-haut:   #050d16;
  --atelier-creux-bas:    #0a1622;
  /* Le bandeau de notifications, qui court en haut de page. */
  --atelier-bandeau-haut: #101c24;
  --atelier-bandeau-bas:  #0b141b;
  /* LA CARTE QUI FLOTTE : menu contextuel, bulle, champ, panneau de visite,
     bouton de quantite. Quatre orthographes pour un seul fond — `#0d1726`,
     `#0D1726`, `#0e1826`, `#0E1826` — et 0,74 d'ecart entre les deux valeurs.
     Personne n'a jamais vu la difference ; elle existait quand meme. */
  --atelier-carte:        #0d1726;
  /* CE QUI SE SOULEVE D'UN CRAN : la ligne d'un panneau, la piste d'un
     interrupteur. `#243347` valait `#1E2E45` a 2,16 pres. */
  --atelier-relief:       #1E2E45;
  /* L'onglet actif d'une fiche. 2,66 du relief : juste au-dessus du seuil, et
     c'est voulu — un onglet qui ne se detache pas de sa barre n'est pas un
     onglet actif. */
  --atelier-onglet-on:    #16283c;
  /* Un rendez-vous INTERNE : ce qui n'est pas un client. */
  --atelier-interne:      #3f4a5c;
  /* Le bandeau du service d'impression, ambre tres sombre. */
  --atelier-imp-haut:     #1a1a10;
  --atelier-imp-bas:      #0f120b;

  /* --- LES ENCRES DE L'ATELIER ---------------------------------------- */
  /* Vive : le LCD, les survols, une puce active. `#e8f6fb` la rejoint
     (ecart 4,85) — c'etait un compteur, ecrit une fois, un ton au-dessus de
     tous les autres nombres de la page sans raison. */
  --atelier-encre:        #d9f6fd;
  /* Secondaire : les libelles, les notifications. */
  --atelier-encre-2:      #bfe9f5;
  /* Le gris bleu qui accompagne. `#8FA6C0` le rejoint (0,99 : invisible). */
  --atelier-gris:         #93A9C2;
  /* Le gris bleu qui structure sans attirer : la strie du reste du, les axes
     d'un graphique, le lisere d'un rendez-vous interne. Trois valeurs pour
     trois endroits, 2,61 et 3,22 d'ecart — trois personnes, trois jours. */
  --atelier-gris-2:       #7289A2;
  /* L'encre FROIDE, celle des rendez-vous internes et des fils : elle n'a pas
     le cyan de l'atelier. `#dbe3ee` rejoint la premiere (2,74). */
  --atelier-froid:        #e8edf5;
  --atelier-froid-2:      #c3cddd;

  /* --- LE « RESTE DU » ------------------------------------------------ */
  /* Une bande rayee, et son encre. Le contraste de cette paire est MESURE
     dans `css-atelier.php` : 8,98 sur la bande, 4,56 sur la strie. On ne
     touche a aucune des trois valeurs sans refaire cette mesure.
     La strie, elle, est `--atelier-gris-2` : c'est le meme gris. */
  --rdu-bande:            #9FC3E8;
  --rdu-encre:            #0f2033;

  /* --- L'ENCRE POSEE SUR UN APLAT ------------------------------------- */
  /* Blanc sur n'importe quel aplat sature. `--sur-accent` dit deja « sur
     l'accent » ; celui-ci vaut pour un fond annule, alerte ou ambre. */
  --sur-plein:            #FFFFFF;
  /* PRESQUE NOIR, ET TEINTE COMME SON APLAT. C'est un choix de dessin, pas
     un hasard : une encre bleutee sur du bleu, verte sur du vert, brune sur
     de l'orange. Les fondre en un seul noir aurait ete repeindre.
     `#06222b` rejoint `#06121f` (meme role : l'encre sur l'accent), et
     `#04240f` + `#03180a` rejoignent `#04220d` (l'encre sur le vert). */
  --sur-accent-sombre:    #06121f;
  --sur-vert-sombre:      #04220d;
  --sur-orange-sombre:    #2b1105;

  /* --- LE PIED DES DEGRADES DE BARRE ---------------------------------- */
  /* Une barre d'histogramme va de sa couleur d'etat vers une version plus
     sourde. Un jeton par ETAT, et non un par couleur.
     `#dc2626` a rejoint `#b91c1c` : deux rouges pour le meme pied de
     degrade, a 7,70 l'un de l'autre. C'est exactement le defaut que ce
     rangement corrige — deux personnes, deux rouges, la meme intention. */
  --accent-fonce:         #2563eb;
  --ok-fonce:             #10b981;
  --amber-fonce:          #f59e0b;
  --alert-fonce:          #b91c1c;
  --annule-fonce:         #f97316;

  /* --- LES BANDEAUX D'AVERTISSEMENT ----------------------------------- */
  /* Administration et demonstration : ambre. Bac a sable : rouge. Ce sont des
     SIGNAUX — ils disent « cette page n'est pas ce qu'elle a l'air d'etre ». */
  --bandeau-ambre:        #7c5a12;
  --bandeau-ambre-bord:   #a97c1a;
  --bandeau-bac:          #6b1720;
  --bandeau-bac-bord:     #9c2330;
  --bandeau-bac-encre:    #ffd9dc;

  /* --- L'AMBRE DE L'ATELIER ------------------------------------------- */
  --sav-piste:            #7A4F12;   /* l'interrupteur « muet », allume */
  --sav-bille:            #FFC463;
  --ambre-encart:         #3a2a10;   /* le fond d'un encart d'avertissement */
  --ambre-encart-encre:   #ffe9c9;
  --ambre-puce:           #FFD08A;   /* une puce ambre dans une liste */

  /* --- LES RUBRIQUES D'ALLO ------------------------------------------- */
  /* Quatre rubriques d'appel, quatre encres. Elles sont claires : elles se
     posent sur un fond translucide de la meme teinte. */
  --rub-devis:            #7FD9EC;
  --rub-achat:            #8FE3C4;
  --rub-revente:          #FBD98A;
  --rub-violet:           #C4B5FD;
  --sms-perime:           #a78bfa;   /* un SMS qui a passe sa date */

  /* --- L'ALERTE DE STOCK ---------------------------------------------- */
  --alerte-haut:          #FFB36B;
  --alerte-bas:           #FF7A5A;
  --alerte-encre:         #FF9A7B;

  /* L'EXCEPTION, ET ELLE EST SEULE : `#000` derriere la video d'une etape de
     visite. Ce n'est pas une couleur de marque, c'est l'absence de signal —
     le noir d'un ecran eteint. Un jeton l'aurait rendu repeignable, et il ne
     doit pas l'etre. */

  --f:            var(--pd-texte);
  --mono:         var(--pd-mono);
}

/* ==========================================================================
   LE THÈME CLAIR — les mêmes noms, un autre jeu de valeurs

   Écrit au prompt 15 pour la console, OUVERT À L'APPLICATION au prompt 13b.

   ------------------------------------------------------------
   CE QU'ON NE REDÉFINIT PAS ICI, ET POURQUOI

   LES STATUTS DU PLANNING (`--st-*`). Un « prêt » doit être le même bleu sur
   les deux thèmes : c'est la couleur qui dit l'état, et un réparateur qui
   change de thème ne doit pas avoir à réapprendre son planning. Chaque statut
   porte DÉJÀ son encre (`--st-*-encre`), calculée pour sa propre pastille :
   la paire est donc indépendante du thème par construction.

   `--signal-violet-clair` ET SON ENCRE SUIVENT CETTE RÈGLE (prompt 65). Le
   cahier demandait le jeton « défini pour les deux thèmes » : il l'est, au
   sens qui compte — la paire plaque/encre est mesurée dans les deux, et
   `outils/banc-charte.php` la vérifie deux fois. Lui donner deux valeurs
   aurait donné deux violets à un même statut, ce que les dix lignes ci-dessus
   refusent justement.

   LES BANDEAUX D'AVERTISSEMENT (`--bandeau-*`). Un bandeau d'impersonation ou
   de bac à sable est rouge ou ambre PLEIN, avec son encre à lui. « Un
   avertissement qui prend les couleurs de la maison cesse d'avertir » (§24) —
   et un avertissement qui change de couleur avec le thème aussi.

   LES ENCRES SUR APLAT (`--sur-plein`, `--sur-accent-sombre`,
   `--sur-vert-sombre`, `--sur-orange-sombre`). Elles se posent sur une couleur
   saturée, pas sur une surface : le thème ne les concerne pas.

   LES COULEURS DE DÉGRADÉ (`--ok-fonce`, `--alert-fonce`, `--annule-fonce`,
   `--alerte-haut/bas`, `--accent-2`, `--accent-fonce`). Ce sont des aplats,
   et ils portent une encre déclarée.

   LA BARRE LCD (`--lcd-*`). Un afficheur LCD est noir — voir la section 11.
   ========================================================================== */
:root[data-theme="clair"]{

  /* ---- les surfaces et l'encre ---- */
  --nuit-900:     var(--pd-clair);
  --nuit-900-rgb: 242,248,253;
  --nuit-800:     var(--pd-carte);
  --nuit-700:     var(--pd-carte);
  --nuit-600:     #E9F1FA;
  --line:         var(--pd-ligne);
  --line-2:       #EDF1F8;

  /* Même mesure qu'en sombre : le blanc sur `--pd-peri` donne 4,02:1, et
     5,00:1 sur `--pd-peri-survol`. L'aplat descend d'un ton, pas l'encre. */
  --accent:       var(--pd-peri-survol);
  --accent-plein: var(--pd-peri-survol);
  --sur-accent:   #FFFFFF;
  /* Sur blanc, le périwinkle donne 3,94:1 lui aussi — la même teinte, l'autre
     bout de l'échelle. Il faut donc l'ASSOMBRIR ici, quand il fallait
     l'éclaircir sur sombre. */
  --accent-texte: #4A4ADF;

  --txt:          var(--pd-encre);
  /* `--pd-encre-douce` (#65697F) donnait 4,22 sur une ligne survolée voilée.
     La valeur ci-dessous est la plus proche qui passe sur les vingt-six
     surfaces claires réelles — les quatre × les cinq accents, voilées ou non. */
  --txt-2:        #5C6074;
  /* `--txt-3` VALAIT #8A90A6, ET IL ÉCHOUAIT : 3,17 sur une carte blanche,
     2,78 sur une ligne survolée (#E9F1FA). Il porte toutes les étiquettes de
     tableau et tous les libellés de pastille. Les deux gris qui gardaient un
     troisième niveau distinct échouaient eux aussi sur la ligne survolée
     (4,37 et 4,25) : on aplatit donc le troisième niveau sur le second, 4,75
     au pire. La hiérarchie reste portée par la taille, la graisse et la
     capitale — qui, elles, se voient. Mesuré au prompt 30, corrigé ici pour
     tout le monde plutôt que dans la console seule. */
  --txt-3:        #5C6074;

  /* LES BLOCS PARTAGÉS, EN CLAIR (voir 8 bis). Ils suivent les jetons du thème
     clair, qui sont mesurés juste au-dessus : il n'y a pas une seule couleur
     nouvelle ici, seulement un nom de plus pour celles qui existent. */
  /* TEINTÉS, ET NON BLANCS. En clair, la carte qui porte ces blocs est blanche
     elle aussi : des blocs blancs dessus ne se détachaient que par un filet à
     1,25:1 — autant dire par rien. Deux choix côte à côte ne faisaient plus
     deux choix. Le pas repos → coché vaut 1,11, et la bordure coché tient
     4,16:1 : c'est elle qui dit l'état, le fond dit seulement « ici un bloc ».
     Mesuré, pas estimé. */
  --bloc-surface:      #F2F6FC;
  --bloc-surface-on:   #E2EBF8;
  --bloc-creux:        #F2F6FC;
  --bloc-ligne:        var(--pd-ligne);
  --bloc-encre:        var(--pd-encre);
  --bloc-encre-2:      #5C6074;
  --bloc-encre-3:      #5C6074;
  --bloc-accent:       var(--pd-peri-survol);
  --bloc-accent-texte: #4A4ADF;

  /* ---- le voile, les ombres, le fond d'une modale (section 9) ---- */
  /* Le voile est le CONTRAIRE de la surface : marine sur du blanc. */
  --voile:        16,16,63;
  --ombre-rgb:    16,16,63;
  /* Plus courtes et plus diluées : en clair le relief se fait par la ligne. */
  --ombre-1:      0 1px 3px rgba(var(--ombre-rgb),.08);
  --ombre-2:      0 4px 14px rgba(var(--ombre-rgb),.10);
  --ombre-3:      0 12px 36px rgba(var(--ombre-rgb),.16);
  --fond-modale:  rgba(16,16,63,.38);

  /* ---- les six encres de signal, recalculées contre les plaques claires ----
     Même méthode qu'en sombre : la clarté la plus proche de la teinte qui
     passe 4,5:1 sur TOUTES les plaques possibles (alphas .07 à .18 posés sur
     les trois surfaces claires). Les triplets, eux, ne bougent pas. */
  /* Même méthode, contre les vingt-six surfaces claires réelles. */
  --signal-vert-texte:   #16674A;
  --signal-ambre-texte:  #7A5802;
  --signal-rouge-texte:  #AA0F0F;
  --signal-violet-texte: #5924F6;
  --signal-sav-texte:    #774E14;
  --signal-froid-texte:  #4B586D;

  /* ---- les anciens noms des signaux suivent leurs encres ----
     `--ok`, `--amber`, `--alert` et leurs déclinaisons sont écrits dans des
     centaines de règles. Ils pointent donc sur les encres ci-dessus plutôt que
     d'être renommés le même soir qu'un changement de valeurs. */
  --ok:            var(--signal-vert-texte);
  --ok-encre:      var(--signal-vert-texte);
  --amber:         var(--signal-ambre-texte);
  --amber-doux:    var(--signal-ambre-texte);
  --amber-encre:   var(--signal-ambre-texte);
  --alert:         var(--signal-rouge-texte);
  --alert-doux:    var(--signal-rouge-texte);
  --alert-encre:   var(--signal-rouge-texte);
  --alert-bord:    rgba(var(--signal-rouge),.45);
  --alert-fond:    rgba(var(--signal-rouge),.10);
  --amber-bord:    rgba(var(--signal-ambre),.50);
  --amber-fond:    rgba(var(--signal-ambre),.16);
  --ok-bord:       rgba(var(--signal-vert),.45);
  --ok-fond:       rgba(var(--signal-vert),.14);
  --alerte-encre:  #A8330F;
  --sms-perime:    var(--signal-violet-texte);

  /* L'encart ambre : un fond sombre devient un fond crème, et son encre suit. */
  --ambre-encart:       #FEF6E3;
  --ambre-encart-encre: var(--signal-ambre-texte);
  --ambre-puce:         var(--signal-ambre-texte);
  /* La piste d'une jauge SAV : c'est un creux, pas un signal. */
  --sav-piste:          #F0E3CC;
  --sav-bille:          #B8791F;

  /* Les quatre rubriques d'Allo : des encres sur plaque teintée. */
  --rub-achat:    var(--signal-vert-texte);
  --rub-revente:  var(--signal-ambre-texte);
  --rub-violet:   var(--signal-violet-texte);
  --rub-devis:    #0E6C85;

  /* ---- les surfaces propres à la coque Atelier ---- */
  --atelier-carte:         var(--pd-carte);
  --atelier-relief:        #E9F1FA;
  --atelier-bandeau-haut:  var(--pd-carte);
  --atelier-bandeau-bas:   var(--pd-clair);
  --atelier-imp-haut:      #FEF6E3;
  --atelier-imp-bas:       #FBEFD2;
  --atelier-onglet-on:     #E3EDF8;
  --atelier-interne:       #DCE3EE;
  --atelier-froid:         #2B3546;
  --atelier-froid-2:       #48566B;
  --atelier-gris:          #8A90A6;
  --atelier-gris-2:        #5A6E86;

  /* ---- les sept séries, recalculées contre #E9F1FA (section 12) ---- */
  --serie-1: #086778;
  --serie-2: #0A57D6;
  --serie-3: #6C31F4;
  --serie-4: #176B4D;
  --serie-5: #7A5802;
  --serie-6: #B90E68;
  --serie-7: #506078;

  /* ---- la barre LCD : seule son OMBRE change (section 11) ---- */
  --lcd-ombre:    0 0 0 1px rgba(var(--ombre-rgb),.12);

  /* ---- le halo de fond de page ---- */
  /* `--pd-halos` est un dégradé de bleus nuit : sur du blanc cassé il ferait
     une tache. En clair, la page n'a pas de halo — elle a une couleur. */
  --pd-halos:     var(--pd-clair);
}
