/* =========================================================================
   JETONS DE STYLE
   =========================================================================

   Une seule declaration des valeurs de design, pour que la refonte a venir
   consiste a changer ces valeurs plutot qu'a repasser dans une dizaine de
   feuilles (admin-dashboard, lk, journey, portal, diagnostic-viewer,
   diagnostic-expert, business...) ou tout est aujourd'hui ecrit en dur.

   Trois regles pour que cette couche serve a quelque chose :

   1. Les noms sont SEMANTIQUES, pas litteraux : `--couleur-danger`, pas
      `--rouge-500`. Une refonte change les valeurs, pas les noms ; un nom qui
      decrit la couleur devient un mensonge des le premier changement de charte.

   2. Les valeurs ci-dessous ne sont pas inventees, elles sont relevees dans le
      code existant. La palette s'est trouvee etre celle de Tailwind, deja
      coherente mais recopiee a la main partout. On la nomme, on ne la remplace
      pas : la bascule ne doit rien changer a l'ecran.

   3. Les feuilles existantes migrent progressivement. Tant qu'une feuille n'est
      pas migree, elle continue de fonctionner : ce fichier n'ecrase rien.

   ========================================================================= */

:root {

    /* --- L'echelle neutre ------------------------------------------------
       La palette, sous les noms de role. Elle est nommee par la CLARTE, jamais
       par un usage, et c'est tout l'interet : le produit a un portail clair et
       des ecrans sombres, si bien que la meme valeur y joue deux roles
       opposes. #f8fafc est le fond du portail, et c'est aussi la couleur du
       texte sur les ecrans sombres. Un jeton appele « surface » qui peint du
       texte rend la bonne couleur et raconte le contraire de ce qui se passe :
       la relecture devient trompeuse, et c'est le seul benefice qu'on
       cherchait ici.

       Les noms de role ci-dessous s'y appuient. Changer un ton de gris se fait
       donc a un seul endroit, et se propage aux deux themes.
       --------------------------------------------------------------------- */
    --white:   #ffffff;
    --ink-50:  #f8fafc;
    --ink-200: #e2e8f0;
    --ink-300: #cbd5e1;
    --ink-400: #94a3b8;
    --ink-600: #334155;
    --ink-900: #111827;

    /* --- Surfaces ------------------------------------------------------- */
    --surface-fond: var(--ink-50);    /* fond de page clair */
    --surface-carte: #ffffff;         /* carte posee sur le fond */
    /* LE FOND DE PAGE SOMBRE. Il alimente `--mimex-bg` (le corps des pages
       du produit), `--portal-bg` et deux degrades : c'est LA valeur du noir,
       pas une parmi d'autres.

       #05080d ET NON #07111f, DECIDE LE 26/08. C'est le noir des pages de
       reference, `boutons-retenus` et `blocs`, qui le portent depuis le debut :
       les surfaces, les filets et leurs dosages ont tous ete arretes en les
       regardant. Le produit jugeait donc ses compositions sur un fond plus
       clair que celui qui avait servi a les choisir. */
    --surface-sombre: #05080d;
    --surface-voile: rgba(18, 27, 43, 0.54);   /* panneau translucide */

    /* --- Texte ---------------------------------------------------------- */
    --texte-fort: var(--ink-900);     /* titres, chiffres */
    --texte-normal: var(--ink-600);
    --texte-discret: var(--ink-400);  /* legendes, mentions */
    --texte-sur-sombre: rgba(255, 255, 255, 0.94);
    --texte-discret-sur-sombre: rgba(255, 255, 255, 0.68);

    /* L encre qui se lit sur un VOILE DE `--white-rgb` : etiquette de valeur
       posee sur une pastille claire, pastille d'un graphique, badge sur fond
       blanc. Elle etait ecrite en dur (`#0B1626`) a cote d'un fond qui, lui,
       suivait la charte : la paire se cassait des que `--white-rgb` changeait.
       La valeur ci-dessous est exactement celle d'avant. */
    --encre-sur-voile: #0b1626;

    /* L encre qui se pose sur un fond QUI NE CHANGE PAS DE THEME : les deux
       boutons dont le degrade est ecrit en dur, la consultation en violet et
       la commande en or. Ces fonds restent sombres a dessein ; leur texte
       lisait `--white-rgb`, qui se retourne, et devenait sombre sur sombre.
       Valeur identique a ce que rendait `rgb(var(--white-rgb))`. */
    --encre-sur-fond-fixe: #ffffff;

    /* --- Traits --------------------------------------------------------- */
    --trait: var(--ink-200);
    --trait-marque: var(--ink-300);
    --trait-sur-sombre: rgba(255, 255, 255, 0.10);

    /* --- Couleurs de sens ----------------------------------------------- */
    /* Chacune a une variante douce, employee en fond d'alerte ou de pastille. */
    /* UNE FAMILLE NOMMEE « ACCENT » QUI VALAIT DU BLEU. Elle habille les etats
       selectionnes, les anneaux de focus, l'`accent-color` des cases et des
       radios, la barre de progression : tout ce qui dit « ceci est
       l'interface ». Tant qu'elle restait bleue, /accompagnement affichait un
       bloc bleu-violet au milieu d'une page cyan, et l'identite se contredisait
       elle-meme sans qu'aucune regle soit fausse.

       ON NE L A BASCULEE QU APRES AVOIR SORTI LA DONNEE. Les canaux R/Y/B/G/M
       du test, la courbe et la pastille du canal B, le bouton « Terminer »
       empruntaient ce meme jeton comme « bleu ». Les laisser dedans aurait fait
       changer de couleur un CANAL, c'est-a-dire un fait, en meme temps qu'un
       habillage. Ils pointent desormais `--blue-rgb` et `--blue-deep`, aux
       memes valeurs qu'avant, donc rien de leur cote n'a bouge.

       La teinte globale habille l'interface, la donnee garde la sienne. */
    --couleur-accent: #00cfea;
    --couleur-accent-doux: #67e8f9;
    /* La version appuyee, pour le survol et l'etat presse. Un survol change
       l'INTENSITE d'une couleur, jamais sa teinte : la couleur d'un bouton
       porte son role, et en changer sous le pointeur annonce une autre action
       que celle qu'on s'apprete a declencher. */
    --couleur-accent-fort: #0096c8;
    --couleur-danger: #ef4444;
    --couleur-danger-doux: #fecaca;

    /* --- LES TROIS ETATS D UNE MESURE ---------------------------------
       Rouge la charge domine, jaune a surveiller, vert l equilibre tient.

       ILS NE BASCULENT PAS AVEC LE THEME, et c est tout leur interet. Le
       theme clair assombrit une grande partie de la palette pour en faire
       des encres lisibles sur du blanc : `--amber-rgb` tombe de 251 191 36
       a 122 82 4, `--gold-bright` de 255 210 90 a 138 106 30. En encre
       c est juste ; en APLAT, le jaune devient brun, et un point d etat
       jaune ne dit plus rien.

       La regle est celle qu on s est donnee : la teinte globale habille
       l interface, la donnee garde la sienne. Ces trois-la peignent de la
       donnee, jamais de l interface. Un accent qui devient bronze en clair
       est un choix ; un etat qui devient brun est une perte.
       ------------------------------------------------------------------ */
    --etat-charge: #ef4444;
    --etat-charge-rgb: 239, 68, 68;
    --etat-vigilance: #facc15;
    --etat-vigilance-rgb: 250, 204, 21;
    --etat-tenu: #22c55e;
    --etat-tenu-rgb: 34, 197, 94;
    --couleur-succes: #22c55e;
    --couleur-succes-doux: #bbf7d0;

    /*
     * Teintes de la landing, exprimees en composantes pour pouvoir moduler
     * l'opacite sans redeclarer la couleur.
     *
     * Sept domaines de pratique, donc SEPT teintes. Il n'y en avait que cinq :
     * le violet servait a la fois la psychologie et l'accompagnement du
     * changement, le vert la nutrition et la prevention. La palette rebouclait,
     * et deux domaines partageaient leur repere avec un autre.
     *
     * Deux bandes de teinte sont interdites ici, parce qu'elles appartiennent
     * a la marque et qu'une pastille ne doit pas s'y confondre :
     *   - l'or (~45 deg), qui annonce les titres de section et les boutons ;
     *   - le cyan de l'accent (~187 deg), qui vit a l'interieur des cartes.
     * Le fitness portait justement l'or, c'est-a-dire l'accent de marque exact.
     *
     * Le vert passe de 170 a 140 degres : a 170 il tirait vers le cyan et
     * flottait pres de l'accent.
     */
    --teinte-bleue: 95, 168, 255;      /* ~215 deg */
    --teinte-violette: 169, 139, 255;  /* ~256 deg */
    --teinte-verte: 110, 214, 148;     /* ~140 deg */
    --teinte-rouge: 248, 113, 113;     /*   ~0 deg */
    --teinte-orange: 247, 152, 94;     /*  ~23 deg */
    --teinte-rose: 240, 132, 196;      /* ~322 deg */
    --teinte-anis: 188, 214, 106;      /*  ~76 deg */

    /* L'or reste declare : il sert la marque, plus aucun domaine. */
    --teinte-or: 242, 190, 99;

    /* --- Rayons --------------------------------------------------------- */
    /* Echelle relevee : 8, 10, 12, 14, 16, 18, 20, 24, et la pilule. */
    --rayon-xs: 8px;
    --rayon-s: 10px;
    --rayon-m: 12px;
    --rayon-l: 14px;
    --rayon-xl: 16px;
    --rayon-xxl: 20px;
    --rayon-carte: 24px;
    --rayon-pilule: 999px;

    /* --- Espacements ---------------------------------------------------- */
    --espace-xs: 4px;
    --espace-s: 8px;
    --espace-m: 12px;
    --espace-l: 16px;
    --espace-xl: 24px;
    --espace-xxl: 32px;
    --espace-section: 64px;

    /* --- Typographie ---------------------------------------------------- */
    /* Le corps courant est a 13-14px, d'ou une echelle serree en bas. */
    --taille-mention: 11px;
    --taille-legende: 12px;
    --taille-corps: 13px;
    --taille-corps-l: 14px;
    --taille-intro: 15px;
    --taille-titre-s: 18px;
    --taille-titre-m: 22px;
    --taille-titre-l: 28px;

    --graisse-normale: 400;
    --graisse-moyenne: 600;
    --graisse-forte: 700;
    --graisse-titre: 800;

    /* --- Ombres --------------------------------------------------------- */
    --ombre-posee: 0 2px 8px rgba(0, 0, 0, 0.18);
    --ombre-flottante: 0 6px 20px rgba(0, 0, 0, 0.30);

    /* --- Mouvement ------------------------------------------------------ */
    --transition: .18s ease;
}

/*
 * Compatibilite : portal.css declarait deja ses propres variables `--portal-*`.
 * Elles pointent desormais sur les jetons, ce qui unifie les deux couches sans
 * toucher aux centaines d'usages existants. Elles disparaitront quand portal.css
 * aura ete migre, ce que la refonte de la vitrine fera de toute facon.
 */
:root {
    --portal-bg: var(--surface-sombre);
    --portal-panel: var(--surface-voile);
    --portal-border: var(--trait-sur-sombre);
    --portal-text: var(--texte-sur-sombre);
    --portal-muted: var(--texte-discret-sur-sombre);
    --portal-gold-rgb: var(--teinte-or);
    --portal-blue-rgb: var(--teinte-bleue);
    --portal-purple-rgb: var(--teinte-violette);
    --portal-green-rgb: var(--teinte-verte);
    --portal-red-rgb: var(--teinte-rouge);
    --portal-orange-rgb: var(--teinte-orange);
    --portal-rose-rgb: var(--teinte-rose);
    --portal-anis-rgb: var(--teinte-anis);

    /*
     * DEUX ACCENTS, et la regle qui dit lequel va ou.
     *
     *   L'OR    ANNONCE ou APPELLE : les intitules de section, la marque,
     *           les boutons et les controles de formulaire.
     *   LE BLEU vit A L'INTERIEUR : titres de cartes, legendes de groupe,
     *           chiffres, rangs, puces, liseres, liens.
     *
     * Un titre de carte n'est pas un titre de section, meme s'il en a la
     * fonction a son echelle : il est dedans, donc il est bleu.
     *
     * L'or existait deja comme teinte du domaine « fitness ». Le declarer une
     * seconde fois n'aurait servi a rien : c'est le meme jeton, employe pour
     * deux roles qui ne se croisent pas a l'ecran.
     *
     * Le bleu vaut le cyan du trace du logo, releve sur le degrade du fichier
     * source : de rgb(0,194,206) en haut a rgb(0,240,255) en bas. La valeur
     * retenue est la teinte mediane, lisible en texte sur fond sombre.
     */
    --portal-gold-clair-rgb: 255, 232, 159;
    --portal-accent-rgb: 0, 207, 234;
    --portal-accent-clair-rgb: 0, 240, 255;
    --portal-accent-fonce-rgb: 0, 150, 200;
}

/* =========================================================================
   LES CINQ ETAPES DU PARCOURS

   Dans le parcours, la couleur designe l'ETAPE, pas l'etat : c'est le badge
   qui dit « effectue » ou « a venir ». Deux etapes achevees ne se ressemblent
   donc pas, et c'est voulu, chaque etape gardant son identite d'un ecran a
   l'autre.

   CES VALEURS VIVAIENT DANS journey.css, ET C'ETAIT LE DEFAUT. La messagerie,
   les actualites et le tableau de bord lisent l'accent d'etape, mais le
   gabarit ne charge pas journey.css : hors du parcours, la variable etait
   vide, la propriete ignoree, et le bouton « Envoyer » se retrouvait sans
   fond. Un systeme d'identite doit vivre dans la charte, chargee partout, pas
   dans la feuille d'un seul ecran.

   Turquoise a l'ouverture, vert a la fermeture : le parcours commence et finit
   par un test, et la parente des deux teintes le dit sans legende.
   ========================================================================= */
:root {
    --journey-demo-rgb: 99, 215, 196;          /* test d'entrainement */
    --journey-demo-solid: #63D7C4;

    --journey-testing-rgb: var(--teinte-bleue);      /* test principal */
    --journey-testing-solid: rgb(var(--teinte-bleue));

    --journey-results-rgb: var(--teinte-violette);   /* consultation */
    --journey-results-solid: rgb(var(--teinte-violette));

    --journey-course-rgb: var(--teinte-or);          /* programmes */
    --journey-course-solid: rgb(var(--teinte-or));

    --journey-retesting-rgb: 119, 214, 122;    /* test de suivi */
    --journey-retesting-solid: #77D67A;

    /* Hors du parcours il n'y a pas d'etape en cours, donc aucune raison
       d'emprunter la couleur de l'une d'elles : l'accent retombe sur celui du
       produit. C'est journey.css qui le redefinit, ecran par ecran. */
    --journey-accent-rgb: var(--portal-accent-rgb);
    --journey-accent-solid: rgb(var(--portal-accent-rgb));
}

/* =========================================================================
   LES ANCRES SE REJOIGNENT EN GLISSANT

   Un saut instantane fait perdre le fil : on ne sait pas si la page a change
   ou si elle a defile, et il faut relire pour se resituer. Le glissement dit
   le trajet, donc la distance parcourue.

   `scroll-margin-top` reserve la place du bandeau : sans lui, l'ancre se cale
   en haut de la fenetre, c'est-a-dire DERRIERE le bandeau fixe, et le titre
   qu'on venait chercher est le seul qu'on ne voit pas.

   Sous `prefers-reduced-motion`, le saut reprend : quelqu'un qui demande moins
   de mouvement demande aussi ce mouvement-la.
   ========================================================================= */
html {
    scroll-behavior: smooth;
}

:target,
[id] {
    scroll-margin-top: 104px;
}

@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
}

/* =========================================================================
   LES COULEURS DE ROLE DU VISUALISEUR

   Elles etaient ecrites en dur, 527 fois dans une seule feuille. Nommees ici,
   elles deviennent modifiables en un seul endroit et lisibles a la relecture.

   Elles sont en TRIPLET et non en hexadecimal : la plupart servent avec une
   transparence variable, et `rgba(var(--x), 0.3)` exige un triplet.

   Aucune valeur n'a bouge en les nommant. Ce sont exactement les couleurs qui
   etaient deja a l'ecran.
   ========================================================================= */
:root {
    /* Le blanc, et le noir des ombres. Ils ne sont pas « une surface » ni
       « un texte » : ils servent aux deux, dilues. */
    --white-rgb: 255, 255, 255;
    --black-rgb: 0, 0, 0;

    /* LES MEMES EN APLAT. Trois teintes n'existaient qu'en triplet, et servent
       pourtant aussi pleines : leur hexadecimal etait alors recopie a la main
       vingt et une fois, hors de portee du jour ou la teinte change. */
    --black: #000000;
    --slate: #0f172a;
    --portal-accent: #00cfea;

    /* Le fond ardoise des panneaux et des champs, sous le fond vivant. */
    --slate-rgb: 15, 23, 42;

    /* Le gris de bordure et de texte secondaire du produit. */
    --slate-light-rgb: 148, 163, 184;

    /* LES MEMES QU'AU-DESSUS, SOUS LEUR FORME DILUABLE.

       Ces dix teintes sont declarees en hexadecimal plus haut, parce qu'elles
       servent d'abord en aplat. Mais on les dilue aussi, et `rgba()` ne sait
       pas lire un hexadecimal : faute de cette forme, leur triplet etait
       recopie a la main cent trente-deux fois dans les feuilles, hors de
       portee du jour ou la teinte change.

       Meme paire que `--white` / `--white-rgb`, qui sert de modele. */
    --ink-200-rgb: 226, 232, 240;
    --ink-300-rgb: 203, 213, 225;
    --ink-50-rgb: 248, 250, 252;
    --ink-600-rgb: 51, 65, 85;
    --ink-900-rgb: 17, 24, 39;
    --surface-sombre-rgb: 5, 8, 13;
    --couleur-accent-doux-rgb: 103, 232, 249;
    --couleur-accent-fort-rgb: 0, 150, 200;
    --couleur-succes-doux-rgb: 187, 247, 208;
    --couleur-danger-doux-rgb: 254, 202, 202;

    /* LE PARTAGE. Le vert profond remplit, le vert clair contourne : c'est le
       contour qui porte l'etat, la surface ne fait que l'appuyer. */
    --share-fill-rgb: 16, 122, 87;
    --share-line-rgb: 52, 211, 153;
    --share-bright-rgb: 34, 197, 94;

    /*
     * CE QUI EST ACHETE : le meme vert, tire vers le jaune.
     *
     * Il reste dans la famille du partage, donc il ne promet pas autre chose,
     * et il s'en distingue au premier coup d'oeil. Teintes mesurees : le vert
     * du partage est a 155 degres, celui-ci a 68, assez loin pour ne pas se
     * confondre, assez proche pour rester du vert.
     */
    --achat-fill-rgb: 122, 138, 22;
    --achat-line-rgb: 190, 214, 96;

    /* L'attente et l'alerte. */
    --amber-rgb: 251, 191, 36;
    --amber-deep-rgb: 245, 158, 11;
    --red-rgb: 239, 68, 68;
    --red-light-rgb: 248, 113, 113;

    /* Le bleu d'information, distinct du cyan de l'outil. */
    --blue-rgb: 59, 130, 246;
    --blue-light-rgb: 96, 165, 250;

    /* LE VIOLET DE LA CONSULTATION. Il porte le moment ou le praticien
       et son client regardent ensemble : la banniere « consultation
       active » et le bouton qui l'ouvre. Il etait ecrit en dur, donc
       muet ; nomme, il peut relier ce qui appartient a ce moment-la. */
    --consultation-rgb: 168, 85, 247;
    /* Le cyan de la planche des boutons, entre le vert et le bleu. */
    --cyan-rgb: 103, 232, 249;
}

/* =========================================================================
   LA BARRE DE DEFILEMENT, PARTOUT LA MEME

   Elle etait traitee cent neuf fois, dans six feuilles, conteneur par
   conteneur, et jamais pour la page elle-meme : la barre principale restait
   celle du navigateur, claire, sur une interface sombre. C'est celle qu'on
   voit le plus, et c'etait la seule qu'aucune regle ne couvrait.

   DEUX NIVEAUX, ET LE PREMIER FAIT L'ESSENTIEL.

   `color-scheme: dark` declare a la racine que le document est sombre. Le
   navigateur en tire lui-meme les consequences : barres de defilement, menus
   de <select>, selecteurs de date, champs natifs. Sans cette declaration, il
   suppose un fond clair et dessine en clair, quelle que soit la couleur qu'on
   peint derriere. Plusieurs feuilles la posaient deja, mais sur des champs
   isoles, ce qui reglait le symptome et jamais la cause.

   Les regles qui suivent affinent l'apparence : le defaut sombre reste epais
   et contraste, alors qu'une barre est une commande secondaire. Un pouce
   discret qui s'affirme au survol, une piste transparente qui laisse voir le
   fond.

   Les feuilles gardent leurs propres regles, plus specifiques, donc
   prioritaires ; elles emploient deja cette teinte. Ce bloc rattrape tout le
   reste, a commencer par la page.
   ========================================================================= */
:root {
    color-scheme: dark;

    --barre-pouce: rgba(var(--white-rgb), 0.22);
    --barre-pouce-survol: rgba(var(--white-rgb), 0.38);
    --barre-piste: transparent;
    --barre-epaisseur: 10px;
}

/* La propriete standard s'herite, mais on la pose aussi sur `*` : un
   conteneur qui redefinit sa palette ne doit pas retrouver la barre du
   systeme. */
html,
* {
    scrollbar-width: thin;
    scrollbar-color: var(--barre-pouce) var(--barre-piste);
}

/* Le rendu WebKit, pour les versions anterieures a la propriete standard. */
::-webkit-scrollbar {
    width: var(--barre-epaisseur);
    height: var(--barre-epaisseur);
}

::-webkit-scrollbar-track {
    background: var(--barre-piste);
}

/* La bordure transparente amincit le pouce sans reduire la zone qu'on attrape
   a la souris : il reste discret et se saisit aussi facilement. */
::-webkit-scrollbar-thumb {
    background: var(--barre-pouce);
    border-radius: 999px;
    border: 3px solid transparent;
    background-clip: padding-box;
}

::-webkit-scrollbar-thumb:hover {
    background: var(--barre-pouce-survol);
    background-clip: padding-box;
}

/* L'angle entre une barre verticale et une horizontale : sans cette regle il
   reste un carre gris, le seul endroit ou le systeme repasse devant. */
::-webkit-scrollbar-corner {
    background: transparent;
}

/* =========================================================================
   LE FOCUS CLAVIER, PARTOUT, PAR DEFAUT

   Douze regles du produit posaient `outline: none` sans rien mettre a la
   place. A la souris on ne s'en apercoit jamais : le defaut ne se revele qu'en
   naviguant a la tabulation, ou l'on perd alors toute trace de l'endroit ou
   l'on se trouve. Ce n'est pas une gene, c'est une perte de reperes complete.

   `:focus-visible` et non `:focus` : le navigateur ne le declenche que pour une
   navigation clavier, jamais pour un clic a la souris. C'est ce qui permet de
   donner un contour franc sans le faire apparaitre a chaque clic.

   `body :focus-visible` et non `:focus-visible` seul : les regles fautives
   ciblent des classes, donc a specificite egale c'est l'ordre de chargement qui
   trancherait, et cette feuille est chargee en premier. Le descendant ajoute ce
   qu'il faut pour l'emporter, sans ecraser les focus deja definis ailleurs qui
   sont, eux, plus specifiques.
   ========================================================================= */
body :focus-visible {
    outline: 2px solid rgba(var(--portal-accent-rgb), 0.85);
    outline-offset: 2px;
}

/* =========================================================================
   LES TEINTES QUI REVENAIENT SANS NOM
   =========================================================================
   Vingt-deux couleurs etaient recopiees a la main dans les feuilles, entre
   huit et trente-huit fois chacune, soit trois cent quarante-quatre copies au
   total. Aucune n'est nouvelle : elles etaient deja a l'ecran. Ce qui manquait,
   c'est l'endroit unique ou les changer.

   Chacune prolonge une famille en place, et l'echelle se lit dans le nom :
   `-pale` plus clair que `-light`, `-soft` entre les deux, `-bright` plus vif,
   `-deep` plus sombre, `-mid` au milieu.

   Les deux formes vont ensemble : l'aplat pour les textes et les fonds pleins,
   le triplet des qu'on dilue. N'en poser qu'une, c'est ce qui avait fait
   recopier les triplets a la main ailleurs.
   ========================================================================= */
/* =========================================================================
   LE SOCLE RETENU — l'échelle des filets
   =========================================================================

   POURQUOI UNE ECHELLE PLUTOT QUE DES VALEURS.

   Mesure du 24/08 sur les deux maquettes : SEPT opacites de filet cyan
   coexistaient sur la seule page du parcours (0,52 · 0,42 · 0,30 · 0,28 · 0,28
   · 0,24 · plus quatre ombres a 0,04, 0,05, 0,08 et 0,18). Aucune ne reprenait
   la precedente : chacune avait ete choisie au moment ou elle servait.

   C'est le meme motif que les quinze valeurs de flou du `backdrop-filter`.
   Trois valeurs nommees remplacent sept valeurs isolees, et surtout elles
   disent POURQUOI elles different.

   CE QUI FAIT VARIER LA VALEUR : LA SURFACE, PAS LE GOUT.

   Un filet a 0,24 sur une carte de 350 px se lit comme un bord discret. Le
   meme sur un bloc de 1300 px devient une carte franchement cerclee : le trait
   fait quatre fois plus de longueur pour la meme epaisseur, donc quatre fois
   plus de presence. La valeur descend quand la surface monte.

   Le troisieme palier ne suit pas cette regle et c'est voulu : il ne dit pas
   « voici un bord », il dit « ceci appelle un geste ». Il est reserve, et une
   seule chose par page peut le porter.

   L EPAISSEUR EST LA MEME PARTOUT : 1 px. Deux pixels sur le cadre appuye
   faisaient trop pour de l'epure ; c'est l'opacite qui porte la difference, pas
   la matiere.
   ========================================================================= */
:root {

    /* entre `--slate` et `--slate-light` : le fond des panneaux poses sur le fond (38 fois) */
    --slate-mid: #1e293b;
    --slate-mid-rgb: 30, 41, 59;

    /* le bleu des bordures et des intitules, plus clair que `--blue-light` (32 fois) */
    --blue-pale: #bfdbfe;
    --blue-pale-rgb: 191, 219, 254;
    /* le bleu des textes d'accompagnement (25 fois) */
    --blue-soft: #93c5fd;
    --blue-soft-rgb: 147, 197, 253;
    /* le bleu sature de l'editeur et de l'espace affaires (12 fois) */
    --blue-vivid: #7ea7ff;
    --blue-vivid-rgb: 126, 167, 255;

    /* DEUX BLEUS QUI APPARTIENNENT A LA DONNEE, pas a l'interface. Ils
       reprennent au caractere pres les anciennes valeurs de la famille
       « accent », pour que le canal B du test et le bouton « Terminer » ne
       bougent pas d'un cheveu quand l'accent redevient cyan.
       Voir la regle : la teinte globale habille l'interface, la donnee garde
       la sienne. */
    --blue-deep: #2563eb;
    --blue-deep-rgb: 37, 99, 235;
    --blue-mist: #dbeafe;
    --blue-mist-rgb: 219, 234, 254;

    /* l'ambre vif des mises en garde (20 fois) */
    --amber-bright: #facc15;
    --amber-bright-rgb: 250, 204, 21;
    /* l'ambre des etats en attente (12 fois) */
    --amber-soft: #fcd34d;
    --amber-soft-rgb: 252, 211, 77;
    /* l'ambre pale des fonds d'avertissement (19 fois) */
    --amber-pale: #fde68a;
    --amber-pale-rgb: 253, 230, 138;
    /* l'ambre moyen des pastilles (8 fois) */
    --amber-mid: #eab308;
    --amber-mid-rgb: 234, 179, 8;

    /* l'orange des alertes de second rang (12 fois) */
    --orange: #f97316;
    --orange-rgb: 249, 115, 22;

    /* l'or vif de l'editeur de projet (18 fois) */
    --gold-bright: #ffd25a;
    --gold-bright-rgb: 255, 210, 90;

    /* L OR DE LA DONNEE. `--gold-bright` habille l'interface : le theme clair
       le descend a 138 106 30 pour qu il tienne comme encre sur du blanc.
       Celui-ci ne bouge pas, parce qu il ne peint pas de l interface mais une
       mesure, la reserve de la jauge, et qu une mesure garde sa teinte d un
       theme a l autre. Meme valeur, deux emplois, deux noms. */
    --gold-bright-fixe: #ffd25a;
    --gold-bright-fixe-rgb: 255, 210, 90;
    /* l'or adouci des accents (12 fois) */
    --gold-soft: #f6d365;
    --gold-soft-rgb: 246, 211, 101;

    /* le vert des etats du back-office (20 fois) */
    --green-state: #50be78;
    --green-state-rgb: 80, 190, 120;
    /* le vert plein des confirmations (10 fois) */
    --green: #4ade80;
    --green-rgb: 74, 222, 128;
    /* le vert des textes de reussite (14 fois) */
    --green-soft: #86efac;
    --green-soft-rgb: 134, 239, 172;
    /* le vert des pastilles de reussite (9 fois) */
    --green-mid: #8ce0a6;
    --green-mid-rgb: 140, 224, 166;
    /* le vert pale des fonds de reussite (13 fois) */
    --green-pale: #dcfce7;
    --green-pale-rgb: 220, 252, 231;

    /* le rouge des textes d'erreur (13 fois) */
    --red-soft: #fca5a5;
    --red-soft-rgb: 252, 165, 165;
    /* le rouge profond des fonds d'erreur (13 fois) */
    --red-deep: #7f1d1d;
    --red-deep-rgb: 127, 29, 29;
    /* le rouge des bordures d'erreur (9 fois) */
    --red-mid: #991b1b;
    --red-mid-rgb: 153, 27, 27;

    /* le violet pale des fonds de consultation (11 fois) */
    --violet-pale: #ede9fe;
    --violet-pale-rgb: 237, 233, 254;
    /* le violet des textes de consultation (9 fois) */
    --violet-soft: #c4b5fd;
    --violet-soft-rgb: 196, 181, 253;

    /* le violet plein du bouton de consultation (15 fois) */
    --consultation-deep: #6b28bd;
    --consultation-deep-rgb: 107, 40, 189;
    --filet-large: rgba(var(--portal-accent-rgb), 0.10);
    --filet-petit: rgba(var(--portal-accent-rgb), 0.24);
    --filet-action: rgba(var(--portal-accent-rgb), 0.52);
    --filet-epaisseur: 1px;
    /* LA PART DE CYAN EST UN SEUIL DE CONTRASTE, pas un gout. A 62 % l'aplat
       monte a 0,228 de luminance et le libelle blanc n'y tient que 3,77 :
       mesure sur les cinq boutons qui le portent. A 52 % il rend 4,65, et le
       survol descend a 44 % pour rester franchement plus fonce que le repos --
       c'est le sens de ce survol-la, il FONCE, il n'eclaire pas. En clair
       l'aplat devient un or profond ou le blanc tient 5,05. */
    --accent-aplat: color-mix(in srgb,
        rgb(var(--portal-accent-rgb)) 52%, #0b2a38);
    --accent-aplat-survol: color-mix(in srgb,
        rgb(var(--portal-accent-rgb)) 44%, #0b2a38);
}

