/* ============================================================================
   tokens.css — LA SOURCE DE VÉRITÉ DES COULEURS
   Chargé AVANT dm.css / player.css / display.css par les trois pages.

   Règle : aucune valeur hexadécimale en dur dans les feuilles de vue. Si une
   couleur manque ici, on l'ajoute ici — on ne l'écrit pas sur place.

   Ce fichier ne contient QUE des déclarations. Aucun sélecteur, aucune règle :
   il ne peut donc rien casser visuellement par lui-même.
   ========================================================================= */

:root {
    /* ===== ENCRES — l'échelle de fond, du plus sombre au plus clair =====
       Chaque vue pioche les échelons qui lui vont : la vue MJ descend jusqu'à
       ink-950 pour son paravent, la fiche joueur vit plutôt vers 800/700. */
    --ink-950: #0c0e1a;
    --ink-900: #12142a;
    --ink-800: #181b33;
    --ink-700: #1f2340;
    --ink-600: #2a2f52;

    /* ===== BLEUS HISTORIQUES =====
       Plus saturés que l'échelle d'encre, hérités de la première version et
       conservés : ils font partie de l'identité du produit. */
    --blue-900: #16213e;   /* panneau */
    --blue-800: #0f3460;   /* puits de saisie, cartes de liste */
    --blue-600: #1f4287;   /* bordure de saisie */

    --felt:     #0a0c16;   /* la table de jeu, sous la carte */

    /* ===== FILETS ET PLIURES ===== */
    --rule:        rgba(190, 205, 255, 0.11);
    --rule-strong: rgba(190, 205, 255, 0.20);
    --crease:      rgba(0, 0, 0, 0.55);

    /* ===== ACCENTS — un ton par rôle, pas trois variantes du même =====
       Avant extraction le projet portait 3 oranges, 2 verts et 2 jaunes
       quasi identiques. Une seule valeur par rôle désormais. */

    /* Rouge de marque. Emplois restreints : élément actif, action primaire,
       repère « écran de table ». Le danger a son propre ton ci-dessous. */
    --crimson:      #e94560;
    --crimson-dim:  #b8324a;
    --crimson-wash: rgba(233, 69, 96, 0.12);
    /* Le crimson de base ne tient pas le seuil AA en TEXTE sur les fonds les
       plus clairs de l'application (4,0 sur --ink-700). Cette variante est
       celle que les survols de boutons emploient déjà en dur un peu partout ;
       la nommer permet de la reprendre là où le crimson devient du texte. */
    --crimson-clair: #f2586f;
    /* Le SYMÉTRIQUE de --crimson-clair : le crimson tient 4,15 en texte sur un
       fond sombre, mais il ne tient que 3,83 quand il DEVIENT le fond sous du
       texte blanc (bouton primaire, pastille, bouton du portrait). Assombri
       juste ce qu'il faut, le blanc y vaut 4,60 — la teinte et la saturation
       sont inchangées, seule la luminosité descend.
       LE SURVOL DOIT ASSOMBRIR, JAMAIS ÉCLAIRCIR. Les deux feuilles posaient
       #f2586f au survol : sur un aplat, le blanc y tombe à 3,28, donc le
       bouton devenait MOINS lisible au moment précis où on le vise. */
    --crimson-fond:       #d33d55;
    --crimson-fond-actif: #c02e44;

    /* Ce qui part vers la table, ce qui va bien, ce qui est vivant.
       (remplace #51cf66 et #4ec97f) */
    --jade:      #4ec97f;
    --jade-wash: rgba(78, 201, 127, 0.12);

    /* Attention, information, valeur intermédiaire.
       (remplace #ff9f43, #f5a623 et #f0a63c) */
    --amber: #f0a63c;

    /* Le texte posé SUR un aplat d'ambre, et l'ambre survolé. Nommés pour que
       les styles de la fiche les redéfinissent : leur ambre est une encre
       sombre, et le texte sombre d'ici y tombait à 2:1. */
    --amber-texte: #2a1a00;
    --amber-actif: #f5b95c;

    /* Dés, mise en avant ponctuelle. (remplace #ffd43b et #ffd54a) */
    --gold: #ffd43b;
    /* Le survol d'une cible de la carte vivante (porte, coffre, lumière) :
       l'or du focus, en voile, pour ne pas masquer ce qu'on vise. */
    --gold-wash: rgba(255, 212, 59, 0.18);

    /* Destruction, perte, état critique — distinct du rouge de marque. */
    --danger: #ff4757;

    /* Le geste magique : lancer un sort. Ne sert qu'à ça. À ne pas confondre
       avec les couleurs des huit écoles de magie, qui sont de la DONNÉE et
       vivent dans lib/spells.js. (remplace le #8e44ad en dur du grimoire) */
    --arcane: #8e44ad;
    /* Le texte posé SUR le violet du geste magique. Un jeton à part, que les
       styles de la fiche ne redéfinissent pas : `--text` y devient une encre
       sombre (Tarot, Billets), illisible sur ce violet — 2,8 contre 6,5. */
    --arcane-texte: #ffffff;

    /* ===== TEXTE — trois niveaux, pas davantage =====
       (remplace #9aa7c7 et #a8aec8, qui coexistaient sans raison) */
    --text:     #e8eaf4;
    --text-mid: #a8aec8;
    /* Relevé de #757c9a : le troisième niveau tombait sous le seuil AA sur les
       trois fonds où il sert — 4,4 sur --ink-900, 4,1 sur --ink-800, et il
       n'atteignait pas 4,5 non plus sur --blue-900. Il reste le ton le plus
       discret des trois ; il cesse seulement d'être illisible sous une lumière
       tamisée. Mesuré : 5,2 / 4,9 / 4,6. */
    --text-dim: #8189a6;
    /* Le deuxième niveau de texte, en voile. Même convention que --crimson-wash
       et --jade-wash : une couleur d'habillage translucide se nomme ici, elle ne
       s'écrit pas en rgba dans une feuille de vue. Sert aux repères statistiques
       du graphique de dés (bande de fluctuation et son liseré). */
    --text-mid-voile:  rgba(168, 174, 200, 0.30);
    --text-mid-trait:  rgba(168, 174, 200, 0.55);

    /* ===== LES STYLES DE LA FICHE =====
       Trois mondes en plus du style Standard (celui de ce fichier). Chacun
       REDÉFINIT les jetons ci-dessus à l'intérieur des cartes (player.css,
       « Les styles de la fiche ») : les composants ne savent rien des styles.
       Contrastes mesurés pour le texte sur le fond de sa carte. */

    /* Tarot : carton de jeu, trait gravé, aplats au pochoir. */
    --tarot-carton:      #efe3c8;
    --tarot-carton-creux:#e3d3ae;   /* puits de saisie, plaques */
    --tarot-encre:       #1d1812;   /* 13,8 sur le carton */
    --tarot-encre-mid:   #4d4234;   /* 7,7 */
    --tarot-vermillon:   #b4281f;   /* 5,1 — et le carton sur lui : 5,1 */
    --tarot-cobalt:      #2a4592;   /* le carton sur lui : 7,0 */
    --tarot-jaune:       #e2ad2f;   /* l'encre sur lui : 8,6 */
    --tarot-ocre:        #7d5200;   /* l'ambre, lisible sur le carton : 5,4 */
    --tarot-vert:        #2f6b3f;   /* le jade, idem : 5,0 */
    --tarot-ocre-actif:  #5f3e00;   /* le survol assombrit : le carton sur lui, 7,6 */
    --tarot-filet:       rgba(29, 24, 18, 0.22);
    --tarot-filet-fort:  rgba(29, 24, 18, 0.40);
    --tarot-vermillon-voile: rgba(180, 40, 31, 0.12);
    --tarot-vert-voile:      rgba(47, 107, 63, 0.14);

    /* Tapisserie : laine teinte, trame visible, fil d'or. */
    --tap-nuit:     #241d38;
    --tap-indigo:   #23305c;
    --tap-garance:  #5a1f24;
    --tap-gaude:    #4b3f16;
    /* Minima mesurés sur les quatre panneaux (la gaude est le plus clair). */
    --tap-laine:    #ece2cc;        /* 8,1 au moins */
    --tap-laine-mid:#cbbc9c;        /* 5,5 au moins */
    --tap-or:       #f0d68a;        /* 7,2 au moins */
    --tap-fil:      rgba(236, 226, 204, 0.45);
    --tap-fil-doux: rgba(236, 226, 204, 0.18);
    --tap-puits:    rgba(0, 0, 0, 0.28);
    --tap-or-voile: rgba(240, 214, 138, 0.12);
    /* La trame : fils de chaîne clairs, fils de trame sombres. */
    --tap-chaine:   rgba(255, 255, 255, 0.045);
    --tap-trame:    rgba(0, 0, 0, 0.16);

    /* Pochette de billets : coupons, carbone violet, tampon rouge. */
    --billet-papier:  #f6f3ea;
    --billet-creux:   #e9e4d4;
    --billet-marine:  #1c2b5a;      /* 12,3 sur le papier, et le papier sur lui */
    --billet-mid:     #4f5a80;      /* 6,1 */
    --billet-rouge:   #b30d29;      /* 6,3 */
    --billet-carbone: #4b2e85;      /* 9,3 */
    --billet-filet:   #9aa3bd;
    --billet-ocre:    #7d4f00;      /* 6,3 */
    --billet-vert:    #1f6b3a;      /* 5,9 */
    --billet-ocre-actif: #5f3c00;   /* le papier sur lui : 8,9 */
    --billet-filet-doux:  rgba(28, 43, 90, 0.18);
    --billet-rouge-voile: rgba(179, 13, 41, 0.10);
    --billet-vert-voile:  rgba(31, 107, 58, 0.12);

    /* Espace (Nostos) : l'espace est cousu, et la carte est un plan de lignes.
       Panneaux de bord sur le vide ; chaque carte est une LIGNE du Réseau, de
       sa couleur, et son titre une station. Le texte est un blanc de papier,
       pas un néon. Contrastes mesurés sur la coque. */
    --espace-coque:      #131628;   /* le panneau */
    --espace-puits:      #0b0d1b;   /* les champs */
    --espace-bord:       #2c3252;
    --espace-papier:     #ece3cf;   /* 14,0 */
    --espace-papier-mid: #aaa6b9;   /* 7,6 */
    --espace-papier-bas: #8b899f;   /* 5,3 */
    --espace-cuivre:     #e3a35f;   /* le fil : 8,2 */
    --espace-cuivre-clair:#f0bd83;
    --espace-cuivre-voile: rgba(227, 163, 95, 0.12);
    --espace-couture:    rgba(227, 163, 95, 0.32);
    /* Les cinq lignes du Réseau. Des traits et des anneaux, jamais du texte
       courant : 3:1 suffit, la plus basse (signal) tient 6,5. */
    --espace-ligne-cuivre: #e3a35f;
    --espace-ligne-lueur:  #8fb8e8;
    --espace-ligne-jade:   #6fcf97;
    --espace-ligne-signal: #ef7a62;
    --espace-ligne-mauve:  #b79cf0;
    /* La police des panneaux de signalisation : Bahnschrift est sous Windows,
       DIN sous iOS et macOS. Pile système, comme les autres. */
    /* Le ciel d'Espace : six etoiles et deux nebuleuses (player.css). */
    --espace-etoile-1: rgba(255, 255, 255, 0.55);
    --espace-etoile-2: rgba(214, 228, 255, 0.45);
    --espace-etoile-3: rgba(255, 232, 200, 0.55);
    --espace-etoile-4: rgba(255, 255, 255, 0.35);
    --espace-etoile-5: rgba(200, 220, 255, 0.50);
    --espace-etoile-6: rgba(255, 255, 255, 0.40);
    --espace-nebuleuse-mauve:  rgba(122, 96, 186, 0.10);
    --espace-nebuleuse-cuivre: rgba(227, 163, 95, 0.06);
    --espace-reflet: rgba(255, 255, 255, 0.03);   /* le liseré haut d'un panneau */
    --font-signal: 'Bahnschrift', 'DIN Alternate', 'DIN Condensed', 'Roboto Condensed', 'Arial Narrow', var(--font);

    /* La TABLE sous les cartes : la page change de teinte avec le style. Ce
       sont les encres et les bleus de ce fichier, tournés vers une autre
       teinte À CLARTÉ ÉGALE (OKLab) — les contrastes de la page ne bougent
       donc pas, seule la couleur change. Dans l'ordre : ink-950 à 600, puis
       blue-900, 800, 600, puis les deux textes secondaires et le filet. */
    /* Tarot : le tapis de lecture, un velours lie-de-vin. */
    --tarot-table-950: #170b0f;  --tarot-table-900: #240e17;  --tarot-table-800: #2d151e;
    --tarot-table-700: #381b27;  --tarot-table-600: #492634;
    --tarot-table-panneau: #351724;  --tarot-table-puits: #522036;  --tarot-table-bord: #712749;
    --tarot-table-texte-mid: #c2a7b0;  --tarot-table-texte-dim: #9f818b;
    --tarot-table-filet: rgba(243, 190, 209, 0.11);  --tarot-table-filet-fort: rgba(243, 190, 209, 0.20);
    /* Tapisserie : le chêne de la grand-salle, où pend la tenture. */
    --tap-table-950: #140d09;  --tap-table-900: #20130b;  --tap-table-800: #281a11;
    --tap-table-700: #322216;  --tap-table-600: #422d20;
    --tap-table-panneau: #2f1e12;  --tap-table-puits: #492c18;  --tap-table-bord: #643b1c;
    --tap-table-texte-mid: #bbaca2;  --tap-table-texte-dim: #98867b;
    --tap-table-filet: rgba(230, 200, 181, 0.11);  --tap-table-filet-fort: rgba(230, 200, 181, 0.20);
    /* Pochette de billets : le cuir vert bouteille de la pochette. */
    --billet-table-950: #08120c;  --billet-table-900: #071b11;  --billet-table-800: #0d2318;
    --billet-table-700: #122c1f;  --billet-table-600: #1b3a2a;
    --billet-table-panneau: #0d291b;  --billet-table-puits: #0b3e28;  --billet-table-bord: #005535;
    --billet-table-texte-mid: #a1b5a9;  --billet-table-texte-dim: #799183;
    --billet-table-filet: rgba(177, 218, 195, 0.11);  --billet-table-filet-fort: rgba(177, 218, 195, 0.20);

    /* Espace : le vide, plus profond que le Standard — on n'a pas tourné la
       teinte, on a descendu la clarté. Le texte de la page y gagne. */
    --espace-table-950: #05060c;  --espace-table-900: #090a14;  --espace-table-800: #0c0e1b;
    --espace-table-700: #141729;  --espace-table-600: #1d2138;
    --espace-table-panneau: #131628;  --espace-table-puits: #161a30;  --espace-table-bord: #2f3658;
    --espace-table-texte-mid: #aaa6b9;  --espace-table-texte-dim: #8b899f;
    --espace-table-filet: rgba(236, 227, 207, 0.10);  --espace-table-filet-fort: rgba(236, 227, 207, 0.18);
    /* Le rivet des panneaux de bord : un ton au-dessus du bord, à peine. */
    --espace-rivet: #434b78;

    /* Le DÉCOR du style Espace, vu dans les gouttières entre les panneaux
       (player.css, body[data-style="espace"]::before / ::after). Des dessins
       et non des images hébergées : quelques centaines d'octets chacun, et
       leurs couleurs sont celles du style — l'anneau est cousu de cuivre, le
       Réseau reprend les lignes et les stations des cartes. Rangés ici parce
       qu'ils portent des couleurs, et qu'aucune n'entre en dur dans une
       feuille de vue. `%23` est le `#` d'une couleur dans une URL. */
    --espace-decor-planete: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 400 400'%3E%3Cdefs%3E%3CradialGradient id='g' cx='34%25' cy='28%25' r='80%25'%3E%3Cstop offset='0' stop-color='%23463d7e'/%3E%3Cstop offset='.55' stop-color='%231f1b42'/%3E%3Cstop offset='1' stop-color='%23090816'/%3E%3C/radialGradient%3E%3CclipPath id='f'%3E%3Crect x='0' y='200' width='400' height='200'/%3E%3C/clipPath%3E%3C/defs%3E%3Cg transform='rotate(-16 200 200)'%3E%3Cellipse cx='200' cy='200' rx='186' ry='40' fill='none' stroke='%23e3a35f' stroke-opacity='.2' stroke-width='5'/%3E%3Ccircle cx='200' cy='200' r='118' fill='url(%23g)'/%3E%3Ccircle cx='200' cy='200' r='118' fill='none' stroke='%238fb8e8' stroke-opacity='.18' stroke-width='2'/%3E%3Cg clip-path='url(%23f)' fill='none' stroke='%23e3a35f' stroke-linecap='round'%3E%3Cellipse cx='200' cy='200' rx='186' ry='40' stroke-opacity='.25' stroke-width='5'/%3E%3Cellipse cx='200' cy='200' rx='170' ry='34' stroke-opacity='.6' stroke-width='2' stroke-dasharray='9 7'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
    --espace-decor-vaisseau: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 280 130'%3E%3Cpath d='M4 124 C74 112 146 84 206 52' fill='none' stroke='%23e3a35f' stroke-opacity='.55' stroke-width='2' stroke-dasharray='7 6' stroke-linecap='round'/%3E%3Cg transform='translate(226 42) rotate(-27)'%3E%3Cellipse cx='-31' cy='0' rx='16' ry='5' fill='%238fb8e8' opacity='.45'/%3E%3Cellipse cx='-27' cy='0' rx='7' ry='2.5' fill='%23eaf2ff' opacity='.9'/%3E%3Cpath d='M-8 -6 L-20 -19 L-1 -6 Z' fill='%237b84a8'/%3E%3Cpath d='M-8 6 L-20 19 L-1 6 Z' fill='%237b84a8'/%3E%3Cpath d='M-24 -6 L16 -4 L32 0 L16 4 L-24 6 Z' fill='%23c9d0e6'/%3E%3Crect x='-18' y='-1' width='22' height='2' fill='%23e3a35f'/%3E%3Cellipse cx='14' cy='0' rx='6' ry='2.2' fill='%238fb8e8'/%3E%3C/g%3E%3C/svg%3E");
    --espace-decor-reseau: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 240 170'%3E%3Cg fill='none' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round' opacity='.5'%3E%3Cpath d='M12 152 L62 102 L136 102 L186 52 L228 52' stroke='%238fb8e8'/%3E%3Cpath d='M136 102 L136 160' stroke='%236fcf97'/%3E%3Cpath d='M62 102 L62 30 L110 30' stroke='%23b79cf0'/%3E%3C/g%3E%3Cg fill='%230b0d1b' stroke='%23ece3cf' stroke-width='2' opacity='.6'%3E%3Ccircle cx='12' cy='152' r='4'/%3E%3Ccircle cx='62' cy='102' r='6'/%3E%3Ccircle cx='136' cy='102' r='6'/%3E%3Ccircle cx='186' cy='52' r='4'/%3E%3Ccircle cx='228' cy='52' r='4'/%3E%3Ccircle cx='136' cy='160' r='4'/%3E%3Ccircle cx='110' cy='30' r='4'/%3E%3Ccircle cx='62' cy='30' r='4'/%3E%3C/g%3E%3C/svg%3E");
    --espace-decor-scintille: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='331' height='331'%3E%3Cg fill='%23ffffff'%3E%3Ccircle cx='40' cy='62' r='1.3'/%3E%3Ccircle cx='212' cy='28' r='1.1'/%3E%3Ccircle cx='266' cy='196' r='1.4'/%3E%3Ccircle cx='118' cy='251' r='1.2'/%3E%3Ccircle cx='178' cy='137' r='.9'/%3E%3Ccircle cx='301' cy='296' r='1'/%3E%3C/g%3E%3Cpath d='M92 143 L93.2 149 L99 150 L93.2 151 L92 157 L90.8 151 L85 150 L90.8 149 Z' fill='%23ffffff' opacity='.85'/%3E%3Cpath d='M246 89 L247 94 L252 95 L247 96 L246 101 L245 96 L240 95 L245 94 Z' fill='%23ffe3b8' opacity='.8'/%3E%3Cpath d='M28 300 L28.8 304 L33 305 L28.8 306 L28 310 L27.2 306 L23 305 L27.2 304 Z' fill='%23d6e4ff' opacity='.75'/%3E%3C/svg%3E");

    /* ===== GRAPHIQUES DE L'ADMINISTRATION (admin.css, js/admin/02-charts.js) =====
       Les accents de l'app (--jade, --amber, --crimson) sont calibrés pour des
       badges, pas pour porter une donnée. Ces huit teintes sont la palette
       catégorielle du skill dataviz, pas sombre, VALIDÉE par son
       validate_palette.js sur --ink-900 : bande de clarté, chroma, séparation
       daltonisme (pire voisin ΔE 8,4), vision normale (19,3), contraste ≥ 3:1.
       L'ORDRE EST LE MÉCANISME de lisibilité : on ne le permute pas, et une
       neuvième série se replie dans « Autres », jamais une teinte inventée. */
    --serie-1: #3987e5;   /* bleu */
    --serie-2: #d95926;   /* orange */
    --serie-3: #199e70;   /* aqua */
    --serie-4: #c98500;   /* jaune */
    --serie-5: #d55181;   /* magenta */
    --serie-6: #008300;   /* vert */
    --serie-7: #9085e9;   /* violet */
    --serie-8: #e66767;   /* rouge */
    --serie-autre: #5d6380;
    /* Divergent — l'écart à l'espérance d'un jet de dé. Bleu/ambre et non
       vert/rouge : ce dernier couple a été REJETÉ par le validateur
       (deutéranopie ΔE 3,5). Milieu neutre : la piste, ni chaude ni froide. */
    --chart-div-pos: #0980ff;
    --chart-div-neg: #ce7600;

    /* ===== RYTHME ===== */
    --s1: 4px;  --s2: 8px;  --s3: 12px; --s4: 16px;
    --s5: 24px; --s6: 32px; --s7: 48px;

    --r-sm: 3px;  --r-md: 5px;  --r-lg: 8px;

    /* ===== TYPOGRAPHIE =====
       Piles système : l'application tourne à la table, une police distante qui
       ne charge pas en séance est un défaut, pas un détail. */
    --font:      'Segoe UI', system-ui, -apple-system, sans-serif;
    --font-num:  ui-monospace, 'SF Mono', 'Cascadia Mono', 'Segoe UI Mono', monospace;
    --font-sheet:'Helvetica Neue', Helvetica, Arial, sans-serif;  /* fiche joueur + impression A4 */
    /* Styles de la fiche. Des piles SYSTÈME, comme les autres : une police
       distante qui ne charge pas en séance est un défaut. Palatino et Book
       Antiqua portent le romain gravé des cartes ; Courier, la frappe au
       carbone d'un billet. */
    --font-gravure: 'Palatino Linotype', 'Book Antiqua', Palatino, Georgia, serif;
    --font-carbone: 'Courier New', Courier, monospace;

    /* ===== OMBRES — toujours un décalage ET un flou ===== */
    --shadow-lift: 0 2px 4px rgba(0,0,0,.35), 0 8px 24px rgba(0,0,0,.30);
    --shadow-pop:  0 4px 8px rgba(0,0,0,.40), 0 20px 50px rgba(0,0,0,.50);
}
