/* ============================================================
   ANIMA — charte partagée · tokens (B8a, spec 2026-09-23 « Phase 1 — Charte »)
   ------------------------------------------------------------
   CE FICHIER EST LA SEULE SOURCE DE COULEUR DE LA PLATEFORME : tout autre CSS
   (styles.css, css/*.css, atelier-pp.css) ne consomme que des var(--…). Le test
   tests/charte.test.mjs refuse toute couleur littérale hors d'ici ; le test
   tests/palette.test.mjs vérifie la palette (WCAG 2.2 AA + APCA + écarts de
   teinte) dans les deux thèmes.

   Origine : prototype v2 validé par Michaël (~/anima-proto/proto2/css/tokens.css),
   lui-même issu de la grammaire du site projet pédagogique (atelier-pp / Ta Trace) :
   calcaire clair chaud, encre brune, titres Instrument Serif, texte Inter, mono
   système réservé aux dates, horaires et identifiants.

   PORTABILITÉ (site public ~/anima-site) : les sections « Teintes », « Niveaux »,
   « Couleurs dérivées », « Constantes », « Typographie » et « Forme » sont copiables
   telles quelles ; les NOMS ci-dessous sont stables (contrat). La section « Alias de
   compatibilité » est propre à la plateforme (anciens noms de styles.css) : ne pas la
   copier. Aucun @media, aucun bloc imbriqué ici : le validateur lit une cascade plate
   (`:root` + `[data-theme="sombre"]`).

   Thèmes : CLAIR PAR DÉFAUT (:root) ; SOMBRE sous [data-theme="sombre"] — graphite
   neutre, accent pétrole ANIMA, chromas des domaines réservés aux petits repères.
   Toute couleur est dérivée : oklch(var(--l-…) var(--c-…) var(--h-…)).

   Règles de palette :
   · 3 états réservés : --ok (~150°), --alerte (ambre ~70°), --critique (~25°).
     L'ambre n'est JAMAIS un accent : il signale, il ne décore pas.
   · 6 teintes de domaine + accent à ≥ 30° de chaque état, ≥ 25° entre elles.
     Créneaux autorisés : [100-120] ∪ [180-355] → 110 · 185 · 214 · 243 · 272 · 301 · 330.
   · Chaque domaine expose 4 niveaux : --<d> (texte, ≥ 4,5:1 sur les fonds),
     --<d>-fond (lavis de tuile), --<d>-fond2 (lavis appuyé : barre, pastille),
     --<d>-portail (bande pleine largeur, texte --sur-portail).

   Contrat de nommage (stable, copiable) :
     Fonds        --bg-0 (page) · --s1 (carte) · --s2 (champ) · --s3 (encart)
     Encre        --texte · --texte-2 · --texte-3
     Filets       --ligne (16 %) · --ligne-2 (bordure ≥ 3:1) · --ombre
     Accent       --accent · --sur-accent · --accent-fond · --accent-filet · --accent-survol (bouton plein survolé) ·
                  --accent-bande (bande pleine, texte --sur-portail) — css/couleur.css
     Domaines     --equipe · --enfants · --sante · --pedagogie · --logistique · --argent
                  (+ -fond, -fond2, -portail) ; portails de la Bibliothèque :
                  --reglementation-portail · --animer-portail · --diriger-portail
     Moments      --preparer · --vivre · --cloturer (encre vive : texte, filet, numéro) ; -bande (bande pleine,
                  texte --sur-portail) ; -fond (survol) — J-N, prototype « Le journal » v2
     Filets de domaine  --equipe-filet · --enfants-filet · --sante-filet · --pedagogie-filet · --logistique-filet ·
                  --argent-filet (teintes SOURDES : filet + icône seulement, jamais en lavis)
     États        --ok · --alerte · --critique · --info (+ -fond, -filet)
     Voiles       --voile (encre 4 %) · --voile-modal (nuit 55 %, fixe) · --voile-calcaire
     Constantes   --calcaire · --calcaire-2 · --encre · --encre-2 · --nuit (thème-indépendants)
     Impression   --papier · --papier-2 · --encre-papier · --encre-papier-2 · --filet-papier(-2)
     Typographie  --serif · --sans · --mono
     Forme        --r-xs … --r-lg · --sp-0 … --sp-7 · --shadow-* · --ease · --dur*
   ============================================================ */

/* ---------- Teintes (constantes dans les deux thèmes) ---------- */
:root {
  color-scheme: light;

  --h-fond: 80;            /* calcaire : beige chaud */
  --h-encre: 60;           /* encre brune */
  /* DOMINANTE (retour de Michaël 2026-09-25 : « choisir la couleur dominante ») : UNE teinte d'où dérivent le fond
     profond des volets, l'encre sur profond, l'accent (texte, filets, pastille d'entrée active, boutons pleins, anneau
     de focus). Changer de dominante = changer --h-dominante et, au besoin, les chromas --c-accent / --c-accent-bande
     et la luminosité --l-accent-bande (clair ET sombre). Dominantes validées : js/couleur/dominantes.js
     (tests/palette.test.mjs). Défaut : le pétrole. */
  --h-dominante: 214;      /* pétrole (la « mer » de Ta Trace) */
  --h-accent: var(--h-dominante);
  /* SURVOL CLAIR : une teinte DISTINCTE de la dominante (≥ 60°), hors de la famille bleue et à ≥ 30° des teintes des moments,
     sauf exception NOMMÉE (js/couleur/dominantes.js, EXCEPTIONS_SURVOL) : moutarde FRANC (retours de Michaël
     2026-09-25 : « un jaune un peu plus moutarde, de paire avec le pétrole », puis « moutarde plus franc »). À 13° de
     Vivre/--pal-jaune : exception acceptée par Michaël le 2026-09-25, ΔOKLab mesurés dans dominantes.js. Lavis
     (--survol-fond), encre (--survol-texte), barre et bordure (--survol-filet), bouton plein survolé (--survol-plein,
     encre foncée --survol-plein-encre) ; en sombre, le pétrole remplace la moutarde. Sur un volet profond (css/coque.css) : aucun lavis
     (--survol-fond-profond transparent : un lavis y virait au kaki ou au vert), barre franche
     (--survol-filet-profond) et titre coloré (--survol-texte-profond). */
  --h-survol: 90;          /* moutarde franc */

  --h-equipe: 330;         /* prune */
  --h-enfants: 301;        /* orchidée */
  --h-sante: 185;          /* sarcelle */
  --h-pedagogie: 272;      /* indigo */
  --h-logistique: 110;     /* olive */
  --h-argent: 243;         /* bleu acier */

  /* FAMILLES D'ÉVÉNEMENTS du planning (brique F2, spec planning-sejour § 5) : 5 teintes dans les créneaux autorisés
     [100-120] ∪ [180-355], à ≥ 30° des états, écart moyen ≥ 53° : olive · sarcelle · acier · orchidée · vieux rose.
     Le texte d'un bloc reste --texte : la teinte ne porte que le fond, le filet et le pictogramme. */
  --h-fam-vie: 110;        /* Vie quotidienne : olive (continuité de l'ancienne famille) */
  --h-fam-dehors: 185;     /* Dehors : sarcelle */
  --h-fam-orga: 243;       /* Organisation : acier */
  --h-fam-libres: 301;     /* Temps libres : orchidée */
  --h-fam-anim: 354;       /* Animation : vieux rose (terre cuite sourde) */

  --h-reglementation: var(--h-dominante); /* portail : la dominante */
  --h-animer: 330;         /* portail : prune */
  --h-diriger: 272;        /* portail : indigo */

  --h-ok: 150;
  --h-alerte: 70;
  --h-critique: 25;

  /* Moments du cycle : palette Minéral renforcé. Les couleurs sont des repères courts en sombre. */
  --h-preparer: 202;       /* brume minérale */
  --h-vivre: 76;           /* ambre patiné */
  --h-cloturer: 151;       /* sauge minérale */
  /* Domaines SOURDS (filet + icône des rubriques du séjour) : deux à trois fois moins saturés que les moments. */
  --h-sourd-logistique: 100;  /* mousse */
  --h-sourd-sante: 180;       /* sarcelle */
  --h-sourd-argent: 238;      /* ardoise */
  --h-sourd-pedagogie: 274;   /* lavande grise */
  --h-sourd-enfants: 314;     /* mauve */
  --h-sourd-equipe: 354;      /* vieux rose */

  /* ---------- Niveaux : thème clair (défaut) ---------- */
  --l-bg0: .945;  --c-bg0: .012;       /* calcaire */
  --l-s1: .972;   --c-s1: .008;        /* carte : à peine plus claire */
  --l-s2: .99;    --c-s2: .004;        /* champ de saisie */
  --l-s3: .905;   --c-s3: .02;         /* calcaire-2 : encart, filet épais */

  --l-texte: .17;   --c-texte: .012;
  --l-texte2: .37;  --c-texte2: .02;
  --l-texte3: .49;  --c-texte3: .02;

  --a-ligne: .16;                       /* filet : encre à 16 % */
  --l-ligne2: .58;  --c-ligne2: .02;    /* filet fort (bordure ≥ 3:1) */

  --l-accent: .42;  --c-accent: .08;
  --l-sur-accent: .975; --c-sur-accent: .003;
  --l-accent-survol: .36;              /* couleur.css : survol d'un bouton plein d'accent */
  --l-accent-bande: .33; --c-accent-bande: .075;   /* couleur.css : bande pleine d'accent, texte --sur-portail */

  --l-dom: .42;     --c-dom: .08;       /* teinte de domaine en texte (≥ 4,5:1) */
  --l-dom-fond: .935; --c-dom-fond: .025;  /* lavis de domaine (fond de tuile) */
  --l-dom-fond2: .90; --c-dom-fond2: .04;  /* lavis appuyé (barre, pastille) */
  --l-fam: .42; --c-fam: .08;               /* famille d'événement : encre du pictogramme et de la barre (≥ 4,5:1 sur son lavis) */
  --l-fam-fond: .935; --c-fam-fond: .028;   /* famille d'événement : lavis du bloc */

  --l-portail: .33; --c-portail: .075;  /* bande pleine largeur teintée */
  --l-sur-portail: .955; --c-sur-portail: .005;
  --a-portail-filet: .28;

  --l-etat: .45;    --c-etat: .11;      /* ok */
  --l-alerte: .46;  --c-alerte: .11;    /* ambre → ocre lisible */
  --l-critique: .47; --c-critique: .16; /* brique */
  --l-etat-fond: .93; --c-etat-fond: .03;

  --a-ombre: .10;
  --a-voile: .04;                       /* voile d'encre (tête de tuile, survol) */
  --a-filet-etat: .45;                  /* filet d'état ou d'accent (bordure teintée) */

  --l-mom: .45;                         /* encre sur le calcaire */
  --c-preparer: .075; --c-vivre: .105; --c-cloturer: .08;
  --l-mom-bande: .36; --l-vivre-bande: .43;
  --c-preparer-bande: .07; --c-vivre-bande: .10; --c-cloturer-bande: .075;
  --l-mom-fond: .93; --c-mom-fond: .03;       /* survol d'un onglet */
  --l-sourd: .52; --c-sourd: .035;            /* domaines en repères discrets */

  --l-survol-fond: .935; --c-survol-fond: .06;     /* lavis moutarde clair (ligne, entrée, bouton à trait, onglet) */
  --l-survol-texte: .42; --c-survol-texte: .09;       /* encre de survol (titre, lien) : ≥ 4,5:1 sur le lavis */
  --l-survol-filet: .60; --c-survol-filet: .13;       /* barre d'entrée, bordure survolée : ≥ 3:1 sur la page */
  --l-survol-plein: .80; --c-survol-plein: .155;      /* bouton plein survolé : moutarde franc, encre --survol-plein-encre */
  --l-survol-plein-encre: .22; --c-survol-plein-encre: .02;
  --l-survol-texte-profond: .87; --c-survol-texte-profond: .12;  /* titre survolé sur un volet profond */
  --l-survol-filet-profond: .80; --c-survol-filet-profond: .155; /* barre franche sur un volet profond (= le plein) */
  --l-sur-profond-2: .87; --c-sur-profond-2: .015;    /* encre secondaire sur le fond profond (teinte de la dominante) */
}

/* ---------- Thème sombre : graphite neutre et accent pétrole ---------- */
[data-theme="sombre"] {
  color-scheme: dark;
  --h-fond: 80;
  --h-encre: 60;
  --h-survol: 214;

  --l-bg0: .16;   --c-bg0: 0;
  --l-s1: .205;   --c-s1: 0;
  --l-s2: .24;    --c-s2: 0;
  --l-s3: .28;    --c-s3: 0;

  --l-texte: .94;   --c-texte: 0;
  --l-texte2: .88;  --c-texte2: 0;
  --l-texte3: .82;  --c-texte3: 0;

  --a-ligne: .16;
  --l-ligne2: .60;  --c-ligne2: 0;

  --l-accent: .82;  --c-accent: .065;
  --l-sur-accent: .16; --c-sur-accent: 0;
  --l-accent-survol: .79;
  --l-accent-bande: .22; --c-accent-bande: 0;

  --l-dom: .82;     --c-dom: .08;
  --l-dom-fond: .205; --c-dom-fond: 0;
  --l-dom-fond2: .24; --c-dom-fond2: 0;
  --l-fam: .88; --c-fam: .07;
  --l-fam-fond: .27; --c-fam-fond: .035;    /* un cran au-dessus du fond de la grille (.24) pour garder la teinte lisible */

  --l-portail: .22; --c-portail: 0;
  --l-sur-portail: .94; --c-sur-portail: .005;
  --a-portail-filet: .16;

  --l-etat: .82;    --c-etat: .10;
  --l-alerte: .82;  --c-alerte: .10;
  --l-critique: .82; --c-critique: .10;
  --l-etat-fond: .24; --c-etat-fond: .015;

  --a-ombre: .35;
  --a-voile: .06;
  --a-filet-etat: .5;

  --l-mom: .82;                         /* teintes gardées pour les petits repères, pas les surfaces */
  --c-preparer: .07; --c-vivre: .10; --c-cloturer: .075;
  --l-mom-bande: .24; --l-vivre-bande: .24;
  --c-preparer-bande: 0; --c-vivre-bande: 0; --c-cloturer-bande: 0;
  --l-mom-fond: .24; --c-mom-fond: 0;
  --l-sourd: .72; --c-sourd: .035;

  --l-survol-fond: .28; --c-survol-fond: 0;
  --l-survol-texte: .82; --c-survol-texte: .065;
  --l-survol-filet: .72; --c-survol-filet: .065;
  --l-survol-plein: .79; --c-survol-plein: .065;
  --l-survol-plein-encre: .22; --c-survol-plein-encre: .02;
  --l-survol-texte-profond: .82; --c-survol-texte-profond: .065;
  --l-survol-filet-profond: .72; --c-survol-filet-profond: .065;
  --l-sur-profond-2: .87; --c-sur-profond-2: .015;
}

/* ---------- Couleurs dérivées (les seules consommées par les feuilles) ---------- */
:root {
  --bg-0: oklch(var(--l-bg0) var(--c-bg0) var(--h-fond));
  --s1: oklch(var(--l-s1) var(--c-s1) var(--h-fond));
  --s2: oklch(var(--l-s2) var(--c-s2) var(--h-fond));
  --s3: oklch(var(--l-s3) var(--c-s3) var(--h-fond));

  --texte: oklch(var(--l-texte) var(--c-texte) var(--h-encre));
  --texte-2: oklch(var(--l-texte2) var(--c-texte2) var(--h-encre));
  --texte-3: oklch(var(--l-texte3) var(--c-texte3) var(--h-encre));

  --ligne: oklch(var(--l-texte) var(--c-texte) var(--h-encre) / var(--a-ligne));
  --ligne-2: oklch(var(--l-ligne2) var(--c-ligne2) var(--h-encre));
  --ombre: oklch(0.1 0.01 60 / var(--a-ombre));
  --voile: oklch(var(--l-texte) var(--c-texte) var(--h-encre) / var(--a-voile));

  --accent: oklch(var(--l-accent) var(--c-accent) var(--h-accent));
  --sur-accent: oklch(var(--l-sur-accent) var(--c-sur-accent) var(--h-fond));
  --accent-fond: oklch(var(--l-dom-fond) var(--c-dom-fond) var(--h-accent));
  --accent-fond2: oklch(var(--l-dom-fond2) var(--c-dom-fond2) var(--h-accent));
  --accent-filet: oklch(var(--l-accent) var(--c-accent) var(--h-accent) / var(--a-filet-etat));
  --accent-survol: oklch(var(--l-accent-survol) var(--c-accent) var(--h-accent));
  --accent-bande: oklch(var(--l-accent-bande) var(--c-accent-bande) var(--h-accent));
  --sur-profond-2: oklch(var(--l-sur-profond-2) var(--c-sur-profond-2) var(--h-dominante));

  --survol-fond: oklch(var(--l-survol-fond) var(--c-survol-fond) var(--h-survol));
  --survol-texte: oklch(var(--l-survol-texte) var(--c-survol-texte) var(--h-survol));
  --survol-filet: oklch(var(--l-survol-filet) var(--c-survol-filet) var(--h-survol));
  --survol-plein: oklch(var(--l-survol-plein) var(--c-survol-plein) var(--h-survol));
  --survol-plein-encre: oklch(var(--l-survol-plein-encre) var(--c-survol-plein-encre) var(--h-survol));
  --survol-fond-profond: transparent;   /* sur un volet profond, pas de lavis : barre, filet et titre suffisent */
  --survol-texte-profond: oklch(var(--l-survol-texte-profond) var(--c-survol-texte-profond) var(--h-survol));
  --survol-filet-profond: oklch(var(--l-survol-filet-profond) var(--c-survol-filet-profond) var(--h-survol));

  /* Familles d'événements du planning : une paire lavis / encre (+ filet) par famille. */
  --fam-vie: oklch(var(--l-fam) var(--c-fam) var(--h-fam-vie));
  --fam-vie-fond: oklch(var(--l-fam-fond) var(--c-fam-fond) var(--h-fam-vie));
  --fam-vie-filet: oklch(var(--l-fam) var(--c-fam) var(--h-fam-vie) / var(--a-filet-etat));
  --fam-libres: oklch(var(--l-fam) var(--c-fam) var(--h-fam-libres));
  --fam-libres-fond: oklch(var(--l-fam-fond) var(--c-fam-fond) var(--h-fam-libres));
  --fam-libres-filet: oklch(var(--l-fam) var(--c-fam) var(--h-fam-libres) / var(--a-filet-etat));
  --fam-anim: oklch(var(--l-fam) var(--c-fam) var(--h-fam-anim));
  --fam-anim-fond: oklch(var(--l-fam-fond) var(--c-fam-fond) var(--h-fam-anim));
  --fam-anim-filet: oklch(var(--l-fam) var(--c-fam) var(--h-fam-anim) / var(--a-filet-etat));
  --fam-dehors: oklch(var(--l-fam) var(--c-fam) var(--h-fam-dehors));
  --fam-dehors-fond: oklch(var(--l-fam-fond) var(--c-fam-fond) var(--h-fam-dehors));
  --fam-dehors-filet: oklch(var(--l-fam) var(--c-fam) var(--h-fam-dehors) / var(--a-filet-etat));
  --fam-orga: oklch(var(--l-fam) var(--c-fam) var(--h-fam-orga));
  --fam-orga-fond: oklch(var(--l-fam-fond) var(--c-fam-fond) var(--h-fam-orga));
  --fam-orga-filet: oklch(var(--l-fam) var(--c-fam) var(--h-fam-orga) / var(--a-filet-etat));

  --equipe: oklch(var(--l-dom) var(--c-dom) var(--h-equipe));
  --enfants: oklch(var(--l-dom) var(--c-dom) var(--h-enfants));
  --sante: oklch(var(--l-dom) var(--c-dom) var(--h-sante));
  --pedagogie: oklch(var(--l-dom) var(--c-dom) var(--h-pedagogie));
  --logistique: oklch(var(--l-dom) var(--c-dom) var(--h-logistique));
  --argent: oklch(var(--l-dom) var(--c-dom) var(--h-argent));

  --equipe-fond: oklch(var(--l-dom-fond) var(--c-dom-fond) var(--h-equipe));
  --enfants-fond: oklch(var(--l-dom-fond) var(--c-dom-fond) var(--h-enfants));
  --sante-fond: oklch(var(--l-dom-fond) var(--c-dom-fond) var(--h-sante));
  --pedagogie-fond: oklch(var(--l-dom-fond) var(--c-dom-fond) var(--h-pedagogie));
  --logistique-fond: oklch(var(--l-dom-fond) var(--c-dom-fond) var(--h-logistique));
  --argent-fond: oklch(var(--l-dom-fond) var(--c-dom-fond) var(--h-argent));

  --equipe-fond2: oklch(var(--l-dom-fond2) var(--c-dom-fond2) var(--h-equipe));
  --enfants-fond2: oklch(var(--l-dom-fond2) var(--c-dom-fond2) var(--h-enfants));
  --sante-fond2: oklch(var(--l-dom-fond2) var(--c-dom-fond2) var(--h-sante));
  --pedagogie-fond2: oklch(var(--l-dom-fond2) var(--c-dom-fond2) var(--h-pedagogie));
  --logistique-fond2: oklch(var(--l-dom-fond2) var(--c-dom-fond2) var(--h-logistique));
  --argent-fond2: oklch(var(--l-dom-fond2) var(--c-dom-fond2) var(--h-argent));

  --equipe-portail: oklch(var(--l-portail) var(--c-portail) var(--h-equipe));
  --enfants-portail: oklch(var(--l-portail) var(--c-portail) var(--h-enfants));
  --sante-portail: oklch(var(--l-portail) var(--c-portail) var(--h-sante));
  --pedagogie-portail: oklch(var(--l-portail) var(--c-portail) var(--h-pedagogie));
  --logistique-portail: oklch(var(--l-portail) var(--c-portail) var(--h-logistique));
  --argent-portail: oklch(var(--l-portail) var(--c-portail) var(--h-argent));
  --reglementation-portail: oklch(var(--l-portail) var(--c-portail) var(--h-reglementation));
  --animer-portail: oklch(var(--l-portail) var(--c-portail) var(--h-animer));
  --diriger-portail: oklch(var(--l-portail) var(--c-portail) var(--h-diriger));
  --sur-portail: oklch(var(--l-sur-portail) var(--c-sur-portail) var(--h-fond));
  --portail-filet: oklch(var(--l-sur-portail) var(--c-sur-portail) var(--h-fond) / var(--a-portail-filet));

  --preparer: oklch(var(--l-mom) var(--c-preparer) var(--h-preparer));
  --vivre: oklch(var(--l-mom) var(--c-vivre) var(--h-vivre));
  --cloturer: oklch(var(--l-mom) var(--c-cloturer) var(--h-cloturer));
  --preparer-bande: oklch(var(--l-mom-bande) var(--c-preparer-bande) var(--h-preparer));
  --vivre-bande: oklch(var(--l-vivre-bande) var(--c-vivre-bande) var(--h-vivre));
  --cloturer-bande: oklch(var(--l-mom-bande) var(--c-cloturer-bande) var(--h-cloturer));
  --preparer-fond: oklch(var(--l-mom-fond) var(--c-mom-fond) var(--h-preparer));
  --vivre-fond: oklch(var(--l-mom-fond) var(--c-mom-fond) var(--h-vivre));
  --cloturer-fond: oklch(var(--l-mom-fond) var(--c-mom-fond) var(--h-cloturer));

  --equipe-filet: oklch(var(--l-sourd) var(--c-sourd) var(--h-sourd-equipe));
  --enfants-filet: oklch(var(--l-sourd) var(--c-sourd) var(--h-sourd-enfants));
  --sante-filet: oklch(var(--l-sourd) var(--c-sourd) var(--h-sourd-sante));
  --pedagogie-filet: oklch(var(--l-sourd) var(--c-sourd) var(--h-sourd-pedagogie));
  --logistique-filet: oklch(var(--l-sourd) var(--c-sourd) var(--h-sourd-logistique));
  --argent-filet: oklch(var(--l-sourd) var(--c-sourd) var(--h-sourd-argent));

  --ok: oklch(var(--l-etat) var(--c-etat) var(--h-ok));
  --alerte: oklch(var(--l-alerte) var(--c-alerte) var(--h-alerte));
  --critique: oklch(var(--l-critique) var(--c-critique) var(--h-critique));
  --info: var(--texte-2);
  --ok-fond: oklch(var(--l-etat-fond) var(--c-etat-fond) var(--h-ok));
  --alerte-fond: oklch(var(--l-etat-fond) var(--c-etat-fond) var(--h-alerte));
  --critique-fond: oklch(var(--l-etat-fond) var(--c-etat-fond) var(--h-critique));
  --ok-filet: oklch(var(--l-etat) var(--c-etat) var(--h-ok) / var(--a-filet-etat));
  --alerte-filet: oklch(var(--l-alerte) var(--c-alerte) var(--h-alerte) / var(--a-filet-etat));
  --critique-filet: oklch(var(--l-critique) var(--c-critique) var(--h-critique) / var(--a-filet-etat));


  /* Surfaces « fond profond et cartes » (css/surfaces.css, grill couleur 2026-09-25, GO de Michaël) : palette de
     SIGNES (filets, anneaux, aplats de survol). -texte : même teinte assombrie, ≥ 4,6:1 sur la carte ; -sur : encre
     posée sur l'aplat (≥ 4,5:1) ; -survol : aplat du jaune, un cran plus clair. Fond de page : profond. */
  --pal-cerulean: #477C83;  --pal-cerulean-texte: #3D7077;  --pal-cerulean-sur: #FBF8F3;
  --pal-cyan: #259AA1;      --pal-cyan-texte: #19676C;      --pal-cyan-sur: #2A241F;
  --pal-jaune: #B37B3B;     --pal-jaune-texte: #90622B;     --pal-jaune-sur: #17191A;  --pal-jaune-survol: #C99A60;
  --pal-vermillon: #DA3931; --pal-vermillon-texte: #B32720; --pal-vermillon-sur: #FBF8F3; --pal-vermillon-plein: #D52E26;
  --pal-sauge: #648D6E;     --pal-sauge-texte: #547A5E;     --pal-sauge-sur: #17191A;
  --pal-mineral-sombre-preparer: #80ADB3;
  --pal-mineral-sombre-vivre: #D0A067;
  --pal-mineral-sombre-cloturer: #83AD8F;
  --pal-grege: #6B635A;     --pal-grege-sur: #FBF8F3;
  --pal-carte: #FBF9F6;
  --pal-fond-profond: #173F4D;
  --pal-sur-profond: #F3EEE6;  --pal-sur-profond-2: var(--sur-profond-2);  --pal-accent-sur-profond: #8FD0D6;

  /* ---------- Constantes thème-indépendantes ----------
     Le DOCUMENT projet pédagogique (atelier-pp, page publique #/p/, impression) est un
     objet imprimé : il garde le calcaire quel que soit le thème de l'app, et
     js/atelier-pp/theme.js dérive ses teintes de rupture contre ce calcaire. Les
     voiles modaux restent sombres dans les deux thèmes. */
  --calcaire: oklch(.945 .012 80);
  --calcaire-2: oklch(.905 .02 80);
  --encre: oklch(.17 .012 60);
  --encre-2: oklch(.37 .02 60);
  --nuit: oklch(.17 .012 60);
  --filet-encre: oklch(.17 .012 60 / .16);
  --filet-calcaire: oklch(.945 .012 80 / .18);
  --voile-modal: oklch(.17 .012 60 / .55);
  --voile-calcaire: oklch(.975 .005 80 / .2);
  /* Sur une bande NUIT fixe (barre d'atelier) : accent et alerte aux niveaux du thème sombre. */
  --accent-sur-nuit: oklch(.82 .08 var(--h-dominante));
  --alerte-sur-nuit: oklch(.82 .10 70);
  /* États du DOCUMENT (calcaire fixe) : niveaux du thème clair, quel que soit le thème de l'app. */
  --doc-accent: oklch(.42 .08 214);
  --doc-ok: oklch(.45 .11 150);
  --doc-alerte: oklch(.46 .11 70);
  --doc-critique: oklch(.47 .16 25);
  --doc-ok-fond: oklch(.93 .03 150);
  --doc-critique-filet: oklch(.47 .16 25 / .35);
  /* Récit PUBLIC du parcours (CV récit #/cv/<jeton>, css/parcours-cv.css) : voiles posés SUR une photo (nuit à 80 %
     et 20 %, encre calcaire secondaire), ombre de tirage, et le fond chaud sombre de « Ce que je veux construire »
     quand il n'a pas de photo (brun de braise + lueur de --pal-jaune) — fixes dans les deux thèmes. */
  --voile-nuit: oklch(.17 .012 60 / .8);
  --voile-nuit-leger: oklch(.17 .012 60 / .2);
  --voile-nuit-moyen: oklch(.17 .012 60 / .55);
  --ombre-tirage: oklch(.17 .012 60 / .5);
  --calcaire-sur-photo: oklch(.945 .012 80 / .84);
  --nuit-chaude: oklch(.27 .04 58);
  --lueur-chaude: oklch(.774 .148 76.7 / .32);

  /* ---------- Impression (documents A4 : budget, comptes, évaluation, formel) ---------- */
  --papier: #FFFFFF;
  --papier-2: #F2F2F2;
  --encre-papier: #000000;
  --encre-papier-2: #555555;
  --filet-papier: #999999;
  --filet-papier-2: #CCCCCC;
  --voile-papier: rgba(0, 0, 0, .14);

  /* Profil public gratuit : identité stable, indépendante du thème du titulaire. */
  --profil-public-fond: #F7F7F4;
  --profil-public-papier: #FFFFFF;
  --profil-public-texte: #1D2928;
  --profil-public-secondaire: #56625F;
  --profil-public-filet: #D9DFDC;
  --profil-public-accent: #075F6C;

  /* ---------- Typographie ---------- */
  --serif: 'Instrument Serif', Georgia, 'Times New Roman', serif;
  --sans: 'Inter', -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
  --mono: ui-monospace, 'SF Mono', Menlo, Consolas, monospace;

  /* ---------- Forme ---------- */
  --r-xs: 2px;
  --r-sm: 3px;
  --r-md: 4px;
  --r-lg: 6px;

  --sp-0: 4px;
  --sp-1: 6px;
  --sp-2: 10px;
  --sp-3: 14px;
  --sp-4: 18px;
  --sp-5: 24px;
  --sp-6: 32px;
  --sp-7: 48px;

  --shadow-card: 0 1px 2px var(--ombre);
  --shadow-card-hover: 0 4px 12px var(--ombre);
  --shadow-elevated: 0 14px 34px -14px var(--ombre);
  --shadow-modal: 0 24px 60px var(--ombre);
  --shadow-accent: 0 0 0 1px var(--accent-filet);

  --ease: cubic-bezier(.2, .8, .2, 1);
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
  --dur: 220ms;
  --dur-fast: 120ms;
  --dur-base: 200ms;
  --dur-slow: 320ms;

  --gutter: clamp(1rem, 4vw, 3rem);
  --header-h: 62px;
  --nav-h: 56px;
  --sidebar-w: 220px;
  --wrap-max: 1340px;
}

/* ---------- Alias de compatibilité (plateforme seulement, NE PAS copier) ----------
   Anciens noms de styles.css / css/*.css, tous redirigés vers le contrat ci-dessus.
   À résorber au fil des briques (B8b+) ; aucune valeur ici, uniquement des var(). */
:root {
  --bg-1: var(--bg-0);
  --bg-2: var(--bg-0);
  --bg: var(--bg-0);
  --surface: var(--s1);
  --surface-2: var(--s2);   /* ordre d'élévation d'origine conservé : surface < surface-2 (plus clair) */
  --surface-3: var(--s2);
  --surface-hi: var(--s2);
  --glass: var(--s1);
  --glass-from: var(--s1);
  --glass-to: var(--s1);
  --glass-soft-from: var(--voile);

  --line: var(--ligne);
  --line-2: var(--ligne-2);
  --border: var(--ligne);

  --text: var(--texte);
  --text-1: var(--texte);
  --text-2: var(--texte-2);
  --text-3: var(--texte-3);
  --txt-1: var(--texte);
  --txt-2: var(--texte-2);
  --txt-muted: var(--texte-3);
  --muted: var(--texte-3);

  --accent-2: var(--accent);
  --accent-deep: var(--accent);
  --accent-bg: var(--accent-fond);
  --accent-glow: var(--accent-filet);
  --gold: var(--accent);
  --amber: var(--accent);
  --warm: var(--accent);
  --warm-bg: var(--accent-fond);
  --warm-deep: var(--accent);

  --warn: var(--alerte);
  --crit: var(--critique);
  --danger: var(--critique);
  --ok-bg: var(--ok-fond);
  --warn-bg: var(--alerte-fond);
  --crit-bg: var(--critique-fond);
  --ok-line: var(--ok-filet);
  --warn-line: var(--alerte-filet);
  --crit-line: var(--critique-filet);

  --font-display: var(--serif);
  --font-sans: var(--sans);
  --font-mono: var(--mono);
  --rad-md: var(--r-md);
  --rad-lg: var(--r-lg);
  --shadow-glass: var(--shadow-card);
}

/* Les grandes surfaces sombres restent neutres, y compris les volets profonds.
   Les couleurs de cycle et de domaine restent disponibles pour de petits repères. */
:root[data-theme="sombre"] {
  --pal-carte: var(--s1);
  --pal-fond-profond: var(--accent-bande);
  --pal-sur-profond: var(--texte);
  --pal-sur-profond-2: var(--texte-2);
  --pal-accent-sur-profond: var(--accent);
}
