/* AURUM — tokens v2 (remplace 2-CLAUDE-CODE-Sessions/tokens.css) — source unique, aucune couleur hors de ce fichier */
:root{
/* surfaces */
--bg:#0A0A0F;--bg2:#111118;--bg3:#1A1A24;--bg4:#22222E;--border:#1F1F2E;--border2:#2A2A38;
/* marque — jamais une donnée */
--gold:#C9A84C;--gold-dark:#8B6914;--gold-dim:#3D2E0A;--gold-wash:rgba(201,168,76,.08);
/* texte */
--text:#F2F0E9;--text2:#9A988F;--text3:#66655E;
/* argent & direction UNIQUEMENT */
--green:#22C55E;--red:#EF4444;--green-wash:rgba(34,197,94,.12);--red-wash:rgba(239,68,68,.12);
/* états intermédiaires */
--orange:#F59E0B;--orange-wash:rgba(245,158,11,.13);--gray:#6B7280;--gray-wash:rgba(107,114,128,.14);
/* identité moteur — sigil + filet 2px seulement */
--cockpit:#C9A84C;--shield:#2FA37F;--sword:#4E9CD0;--carry:#34D399;
/* typo — TROIS RÔLES, TROIS FACES (SPEC-ONE-TYPE-1, 29.08).
   mots → --font-ui · valeurs → --font-data · sceau → --font-seal.

   ⚠ LES TROIS JETONS v1 RESTENT DÉCLARÉS ET INCHANGÉS, et ce n'est PAS une seconde
   grammaire pour le même rôle : c'est le vocabulaire de l'AUTRE surface. MESURÉ :
   `public/app/index.html` charge CE fichier (:481) et `aurum-ui.css` (:482) APRÈS son
   propre `:root`, ne déclare NULLE PART `--mono` (seule déclaration du dépôt : ligne
   suivante) alors qu'il l'utilise 5 fois, et charge JetBrains depuis son PROPRE lien
   CDN (:487) — jamais Plex. Les repointer vers Plex repeindrait le shell d'accès legacy
   dans une police qu'il ne télécharge pas : body en system-ui, les 5 sites mono en
   monospace UA. La frontière est le FICHIER — `one.css` (chargé par /one SEUL) ne parle
   que les rôles, /app ne parle que les jetons v1 — et elle est TESTÉE (zéro var(--mono) /
   var(--font) / var(--cinzel) résiduel dans one.css), jamais seulement affirmée.
   D1 les épingle par ailleurs comme non-supprimables (« addition pure »). */
--cinzel:'Cinzel',serif;--font:'DM Sans',system-ui,sans-serif;--mono:'JetBrains Mono',ui-monospace,monospace;
--font-ui:'IBM Plex Sans',system-ui,sans-serif;
--font-data:'IBM Plex Mono',ui-monospace,monospace;
/* le sceau EST le Cinzel de la marque — un seul visage, deux noms de rôle, et
   l'indirection le PROUVE au lieu de le promettre. */
--font-seal:var(--cinzel);
/* plancher de contraste des MOTS. 7,61:1 sur --bg. Déclaré ICI et nulle part ailleurs
   (deux greps DoD interdisent tout hex/rgba hors de ce fichier).
   ⚠ NE PAS re-teinter --text3 à la place : d5-login-shell §6.2 exige r3 < 4.5 et
   sword-signal-1 §3.10 est un contrôle NÉGATIF qui distingue text3-le-défaut de
   text2-le-correctif. --text2 (6,83:1) est déjà conforme et NE BOUGE PAS. */
--c-label:#9BA1AC;
/* échelle typo — desktop. PLANCHER 13px (SPEC-ONE-TYPE-1), UNE exception nommée.
   ⚠ `--fs-eyebrow` est la SEULE valeur sous le plancher DANS CETTE FEUILLE, et c'est la
   spec elle-même qui la pose (`.eyebrow{font: 600 11.5px/1 …}`) — elle se contredisait
   donc, et la contradiction est tranchée EN FAVEUR DU 11,5 PAR LA MESURE : à 13px +
   majuscules, `#space-vue .attr-head` (flex SANS wrap, ancêtre overflow:hidden, AUCUNE
   ellipse) déborde de 8,8px à 320px et le premier sacrifié est le chip
   `attribution_partielle` — l'aveu que Σ des parts ne couvre pas le capital, effacé EN
   SILENCE. Un plancher typographique qui efface un marqueur d'honnêteté est le pire
   échange de ce dépôt. Un eyebrow est SCANNÉ, pas lu ; le plancher garde les mots qu'on LIT.
   ⚠ Les quatre jetons dont la valeur passait sous le plancher (--fs-cardh 10, --fs-sec 11,
   --fs-meta 10, --fs-label 12) restent DÉCLARÉS — D1 les épingle par le NOM — et sont
   DÉRIVÉS du plancher ou de l'eyebrow : un seul nombre à changer.
   ⚠ `--fs-meta` suit l'EYEBROW, pas le plancher, et c'est une SECONDE exception NOMMÉE :
   il habille la méta d'en-tête de carte (`.c-h .ct/.fresh/.sys-note` — « il y a 3 min »,
   « 2 W. », « USD »), qui est le VOISIN direct du titre d'en-tête. Ce titre est un
   eyebrow à 11,5px : mettre sa méta à 13px les désaccorde dans le MÊME registre, et
   c'est MESURÉ — à 13px la grappe droite `.c-h .r` rend 303px pour une boîte de 278 à
   320px, et l'en-tête ne peut pas se replier (sa hauteur de 42px est TRIPLE-épinglée).
   Un en-tête de carte est UN registre : le titre et sa méta partagent la taille. */
--fs-floor:13px;--fs-eyebrow:11.5px;
--fs-brand:15px;--fs-sec:var(--fs-eyebrow);--fs-cardh:var(--fs-eyebrow);--fs-hero:32px;--fs-num-l:20px;--fs-num:var(--fs-floor);--fs-body:14px;--fs-label:var(--fs-floor);--fs-meta:var(--fs-eyebrow);
/* espacement (base 4) */
--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:20px;--s6:24px;--s8:32px;
/* forme */
--radius:12px;--radius-inner:8px;--radius-chip:5px;
--sh1:0 1px 2px rgba(0,0,0,.4);--sh2:0 8px 24px rgba(0,0,0,.45);--sh3:0 24px 80px rgba(0,0,0,.6);
--focus:0 0 0 2px rgba(201,168,76,.45);
/* chrome iOS — les QUATRE insets. D4 a ajouté --safe-l/--safe-r : en PAYSAGE, un
   téléphone à encoche pose des insets LATÉRAUX (48px mesurés), et c'est l'axe que
   personne ne teste — le dernier chip du header (« santé ») se peignait sous le coin
   arrondi sur les 6 surfaces. Un inset sans token, c'est un `env()` recopié dans
   chaque règle : la valeur vit ici, une seule fois, comme les couleurs. */
--safe-t:env(safe-area-inset-top,0px);--safe-b:env(safe-area-inset-bottom,0px);
--safe-l:env(safe-area-inset-left,0px);--safe-r:env(safe-area-inset-right,0px);
}
/* Le registre mobile FABRIQUAIT deux valeurs sous le plancher (--fs-brand 12,
   --fs-sec 10) : desktop conforme, téléphone non. Corrigé DANS LE MÊME GESTE.
   ⚠ Ce bloc doit RESTER (d2-grammaire vérifie que tokens.css ET aurum-ui.css portent
   encore `@media(max-width:899px)`), même si son contenu typographique se réduit. */
@media(max-width:899px){:root{--fs-brand:var(--fs-floor);--fs-hero:26px;--fs-num-l:18px;--fs-body:var(--fs-floor)}}
/* RÈGLES DURES
 · vert/rouge = PnL et direction seulement — jamais décoratif, jamais un bouton « valider »
 · or = marque/nav/action primaire — jamais un chiffre
 · moteur = sigil + filet 2px en tête de carte — jamais la couleur d'un chiffre, jamais une bordure latérale 3px
 · TROIS RÔLES, TROIS FACES : un mot qu'un humain LIT → --font-ui, casse normale · une
   VALEUR (montant, %, compte, horodatage, hash, adresse, id) → --font-data AVEC
   `font-variant-numeric:tabular-nums` · le SCEAU → --font-seal.
   Une cellule MIXTE se coupe : le mot en --font-ui, la valeur dans un <span class="num">.
 · tabular-nums n'est plus incident, il est OBLIGATOIRE : l'alignement des colonnes était
   porté par l'AVANCE d'une monospace, pas par la propriété — 9 règles sur 327 la
   déclaraient. Toute règle qui habille une valeur la porte, sinon la colonne saute EN SILENCE.
 · chiffres nowrap, format compact — la valeur ne casse jamais, c'est le libellé qui cède
 · plancher typo 13px. UNE exception dans cette feuille (--fs-eyebrow, 11,5px, MESURÉE) et
   quatre hors feuille, nommées dans la liste blanche du lot. Un plancher tacite est interdit.
   ⚠ `input,textarea,select` porte un plancher PLUS HAUT (16px, anti-zoom iOS, D4) : on
   l'exempte VERS LE HAUT, on ne le normalise jamais vers le bas.
 · majuscules : `.eyebrow` SEULEMENT. Les 15 `text-transform:none` sont des RESETS et
   survivent. Les libellés en capitales DANS LA DONNÉE (LONG, SHORT, PAPIER, GELÉ, PARTIEL)
   ne sont pas visés — la règle gouverne la feuille, jamais un littéral d'honnêteté.
 · un MOT ne descend pas sous --c-label (7,61:1). Une VALEUR secondaire garde --text2
   (6,83:1). ⚠ --text3 (3,37:1) ne peut plus habiller un mot ; il reste pour les filets et
   le décor, et il n'est PAS re-teinté (deux suites voisines en dépendent).
 · Cinzel = --font-seal : la marque, et le registre de SCEAU (verdict/état). Ce n'est PAS
   un titre de section — le titre de section est un eyebrow.
 · wallet = contexte (chip neutre + ligne de répartition), aucune couleur dédiée
*/
