/* ------------------------------------------------------------------ *
 * THÈME SOMBRE — S1 (02/10, décision de Fred, docs/specs/theme-sombre.md).
 *
 * 100% var() : aucune couleur en dur ici — tokens.css reste l'unique source (hygiene.test.js
 * §23 balaie cette feuille comme les autres, sans exemption). Les valeurs sombres vivent dans
 * tokens.css (`:root[data-theme="dark"]`) ; cette feuille ne fait que DIRE QUI LES LIT.
 *
 * DEUX ARCHITECTURES, selon qui porte la règle de départ :
 *
 * 1. ea-app.css / mobile.css (chargées, STATIQUEMENT, AVANT cette feuille dans index.html) —
 *    un jeton D'ENCRE PAR RÔLE qui vaut --marine en clair et --ink en sombre (tokens.css, les
 *    deux blocs), consommé par UNE SEULE RÈGLE, SANS CONDITION DE THÈME : en clair, le jeton
 *    vaut --marine, rien ne change ; en sombre, il vaut --ink, lisible. Pas de media/attribut
 *    à dupliquer (arbitrage de la tour, 02/10, après un premier jet à 9,4 Ko).
 *
 * 2. bu.css / nego.css (injectées EN JS, donc APRÈS cette feuille dans le DOM) — l'astuce du
 *    jeton ne suffit pas : à spécificité égale, c'est l'ORDRE D'ARRIVÉE qui tranche, et bu.css
 *    arrivera toujours après. Ces règles restent donc scopées sous :root[data-theme="dark"] /
 *    :root:not([data-theme="light"]), plus spécifique que les sélecteurs nus qu'elles
 *    surchargent — gagne quel que soit l'ordre. Deux voies d'activation, mêmes sélecteurs,
 *    recopiés (jamais une valeur) pour qu'ils ne divergent pas en silence.
 *
 * RÈGLE D'INVERSION (principe 3) : « CRÈME PARTOUT » — décision de Fred, S2, 03/10 (via la
 * tour), qui tranche l'hésitation laissée ouverte le 02/10 (Siège restait marine, le reste
 * déjà crème). TOUT aplat marine du thème clair devient crème à texte TOUJOURS marine
 * `#0F1729` (condition b de Fred) en sombre — `.aplat-marine` (bande KPI), `.bu-pipe-etape`
 * de base (« Du pipe à l'acte » ; PAS `.e1`/`.e2`, gardées par décision de Fred du 28/09,
 * encodée par aplats.test.js), `.bu-tdb .panel.bu-marine` (panneau « Entrées de mandats »,
 * en-tête de tableau compris), et depuis S2 : `.card.feat` (Siège, cartes « Actes signés » /
 * « Projection ») et la famille `.topbtn` (bouton « Rapport (PPTX) » compris). Leurs
 * descendants qui lisent `--sur-marine*` le relisent aussi, par la cascade des propriétés
 * personnalisées — aucune règle de bu.css n'est éditée.
 */

/* ==== 1. ea-app.css / mobile.css — jeton d'encre, sans condition de thème ================= */
.cloche-alertes:hover,
.signal-mode-btn:hover,
.reglages .reg-actions .signal-mode-btn:hover,
.demo.neutre,
.etat h2,
.devlog h1,
.cmp-tete h2,
.kpisection-tete h3,
.msg-fil-tete h3,
.reserve .sc,
.reserve dd,
.devlog button.compte .n,
.phstat .rv,
.signals .sh,
.tablepanel tbody th,
.tablepanel td .bn,
.tablepanel td b,
.tabs button:hover:not([aria-selected="true"]),
.tablepanel th.triable:hover,
.repligne .rn,
.mediane .mv,
.kpicompteur .n,
.kpicarte-lib,
.kpirevue-compteur,
.cmp-corps td.gagnant,
.cmp-corps th.cmp-total-col,
.cmp-corps td.cmp-total-col,
.gr-loupe:hover,
.gr-loupe:focus-visible,
.tablepanel tr.fort>*,
.coef-titre b,
.coef-champ input,
.msg-chip,
.alertes-libelle,
.msg-titre,
.depuis-visite .dv-faits,
.scen-nom,
.scen-jeton,
.scen-gros,
.sim-gros,
.sim-split b,
.rap-table th[scope="row"],
.aff-table th[scope="row"],
.aff-annuel:hover,
.aff-deplier,
.aff-expert summary,
.aff-gros,
.qs-phrase,
.qs-form label,
.tabrow button[aria-pressed="true"]{color:var(--encre-forte);}

/* --color-scheme : les contrôles NATIFS (date, select, barres de défilement) suivent le thème
 * effectif. Base "light dark" : suit l'appareil quand rien n'est choisi, comme le reste de la
 * page. Un choix explicite (data-theme) la force — pas de media à dupliquer, le choix de
 * l'utilisateur est posé une fois sur <html> (shell.js / loginScreen.js), ici on ne fait que
 * la décliner pour les contrôles du système.
 */
:root{color-scheme:light dark;}
:root[data-theme="light"]{color-scheme:light;}
:root[data-theme="dark"]{color-scheme:dark;}

/* CHAMPS NATIFS NON HABILLÉS (point 2, tour 02/10 — spec S1, jeton --input-bg) : TOUT champ du
 * portail qui n'a pas sa propre couleur de fond (ex. `.bu-fn-form input`, bu.css, qui ne pose
 * que des largeurs) prend --input-bg, jamais le blanc natif du navigateur. Spécificité minimale
 * (le sélecteur SEUL) : une règle plus précise déjà écrite ailleurs (`.coef-champ input` etc.,
 * déjà sur --surface) continue de l'emporter, peu importe l'ordre de chargement — il n'y a rien
 * à concurrencer là où rien n'était posé avant.
 */
input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]),
select,
textarea{background:var(--input-bg);border-color:var(--input-bordure);color:var(--ink);}

/*
 * CHOIX ACTIF D'UN SEGMENT, PRESQUE INVISIBLE EN SOMBRE (passe Chrome du 02/10 : HT, k€,
 * Sombre). `.seg button[aria-pressed="true"]{background:var(--marine)}` (ea-app.css) :
 * --marine ne bascule plus, et sur un fond lui-même sombre l'un se distingue à peine de
 * l'autre. Règle d'inversion (principe 3) : --aplat-fort vaut --marine en clair (rien ne
 * change, ea-app.css est chargée avant cette feuille) et crème en sombre — sans condition de
 * thème, comme --encre-forte.
 *
 * S2 (03/10, passe prod) : MÊME défaut sur l'onglet sélectionné d'Administration —
 * `.tabs button[aria-selected="true"]{background:var(--marine);color:var(--surface)}`
 * (ea-app.css) : --surface vaut #111A2E en sombre, quasi identique à --marine (#0F1729) ≈
 * 1:1, l'onglet « Utilisateurs » devient illisible. Même reprise, mêmes jetons (15,51:1
 * mesuré, texte #0F1729 sur fond #F3EEE9).
 */
.seg button[aria-pressed="true"],
.tabs button[aria-selected="true"]{background:var(--aplat-fort);color:var(--aplat-fort-texte);}
/* Contre-passe du 05/10 (Négociateurs › « Fiches de l'équipe ») : même reprise pour le filtre
   Tous/Actifs/Archivés (fond --marine ≈ --surface, 1,03:1) et le disque d'initiale de la fiche
   (idem) — jetons --aplat-fort, donc clair identique (--aplat-fort = --marine). */
.pillbar button[aria-pressed="true"],.pillbar .actif{background:var(--aplat-fort);border-color:var(--aplat-fort);color:var(--aplat-fort-texte);}
.bu-fn-visage{background:var(--aplat-fort);color:var(--aplat-fort-texte);}
.bu-marq-dir{background:var(--aplat-fort);color:var(--aplat-fort-texte);}

/*
 * S2 (03/10, décision de Fred : crème partout) — SIÈGE (`.card.feat`) et le bouton
 * « Rapport (PPTX) » / sa famille (`.topbtn`…, ea-app.css) : voir les paires SCOPÉES,
 * plus bas (même raison que `.aplat-marine`/`.bu-tdb .panel.bu-marine` — PAS ici, sans
 * condition de thème : redéfinir --sur-marine EN --aplat-fort-texte, alors que
 * --aplat-fort-texte vaut LUI-MÊME var(--sur-marine) en clair, boucle la propriété sur
 * elle-même — invalide à la valeur calculée, donc le texte retombe sur l'HÉRITÉ, pas sur
 * ce qu'écrit la règle. Trouvé à la capture : clair différait d'un pixel sur le libellé
 * des cartes, sans qu'aucune COULEUR n'ait changé. Scopée, la boucle n'existe plus : en
 * sombre --aplat-fort-texte est un hex littéral, --sur-marine ne se redéfinit jamais lui-
 * même). */

/*
 * ITEM ACTIF DU RAIL SANS FILET CORAIL EN SOMBRE (spec, --rail-actif) : .nav a.active
 * (ea-app.css) n'a jamais eu de bordure — on en ajoute une, par ombre portée pour ne rien
 * déplacer, transparente en clair (rien ne change), corail en sombre. --corail-12 lui-même
 * est corrigé dans tokens.css (principe : rgba(232,114,92,.18) en sombre, pas de filet là).
 */
:root{--nav-actif-filet:transparent;}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--nav-actif-filet:var(--corail);}}
:root[data-theme="dark"]{--nav-actif-filet:var(--corail);}
.nav a.active{box-shadow:inset 2px 0 0 0 var(--nav-actif-filet);}

/* ==== 2. bu.css / nego.css — injectées en JS, spécificité requise ========================= */
@media (prefers-color-scheme: dark){
:root:not([data-theme="light"]) .bu-fn-form legend,
:root:not([data-theme="light"]) .bu-nv-badge.b-nouveau_bx,
:root:not([data-theme="light"]) .bu-conv.bu-fleche{color:var(--encre-forte);}
/* Point 2 (passe Chrome 02/10) : « À valider », le détail en évidence (mark) reste sur
   --corail-voile (bu.css, fixe dans les deux thèmes) — seule l'encre doit s'y adapter. */
:root:not([data-theme="light"]) .bu-av-quoi mark{color:var(--aplat-fort-texte);}
/* Point 3 : la pastille d'initiales (colonne Négos) — fond --line devenu un voile presque
   invisible en sombre ; un fond plein, lisible, la distingue de nouveau. */
:root:not([data-theme="light"]) .bu-avatar{background:var(--marine-2);color:var(--ink);}
/* Contre-passe du 05/10 : .chip.comp (--marine-2 sur voile blanc 6 %) 1,60:1 et .chip.ok (--vert)
   2,96:1 en sombre. --ink-2 et --vert-sur-marine (déjà posé, « hausse sur marine ») : scopés,
   car leurs valeurs claires diffèrent de --marine-2/--vert. */
/* Contre-passe 05/10 (suite) : contour au repos des filtres (--line 1,21:1 → --muted) et pastille
   « Directeur » (fond --marine ≈ --surface → --aplat-fort). Sélecteurs de COMPOSANT (.pillbar,
   .bu-marq-dir, .chip), pas d'écran. :not() : le filtre sélectionné garde son contour --aplat-fort. */
:root:not([data-theme="light"]) .chip.comp{color:var(--ink-2);}
:root:not([data-theme="light"]) .chip.ok{color:var(--vert-sur-marine);}
:root:not([data-theme="light"]) .pillbar button:not([aria-pressed="true"]):not(.actif){border-color:var(--muted);}
/* Point 5 : le point « changements Immofacile » (bu-p-if) est marine sur un panneau --surface
   tout aussi sombre — invisible. Même traitement que l'encre forte. */
:root:not([data-theme="light"]) .bu-p-if{background:var(--encre-forte);}
/* Passe Chrome v2 (02/10) : pastille d'initiales « apport », colonne Négos de Ventes — voir
   tokens.css, --pastille-fond/-texte (jetons de la spec, test dédié dans sombreCss.test.js). */
:root:not([data-theme="light"]) .bu-init.a{background:var(--pastille-fond);color:var(--pastille-texte);}
/* S2 (03/10) : lien de référence de dossier (.bu-av-ref, bande « À valider ») jamais habillé
   (bu.css) — couleur de LIEN par défaut du navigateur, lavande #9E9EFF sous color-scheme:dark,
   hors charte. --accent-texte (tokens.css, « liens, montants » — documenté depuis S1, jamais
   posé) : 8,68:1 sur --surface. Élément (a.) et non la classe seule : exclut .bu-av-ref.nd
   (« Vente hors de la vue », un <span>, pas un lien — reste en --muted via .nd, ea-app.css). */
:root:not([data-theme="light"]) a.bu-av-ref{color:var(--accent-texte);}
/* S2 (03/10, réserve 1 de la passe du train commun) : la bulle d'une mention KPI (.note-bulle,
   ea-app.css) partage le fond de la carte qui la porte (--surface, #111A2E) — le filet --line
   (7% blanc) ne suffit pas à la distinguer, surtout une fois que .card reste statique au repos
   (position:relative seulement au survol). Scopée (pas de condition de thème possible : le
   clair reste sur --surface/--line/--ombre-modale, inchangé) : --surface-2 un cran au-dessus,
   --border-strong pour le filet, --ombre pour une ombre qui creuse au lieu de s'estomper
   (--ombre-modale reste noir à 8% quelle que soit la page — invisible sur un fond déjà sombre).
   Mesuré : voir sombreCss.test.js. */
:root:not([data-theme="light"]) .note-bulle{background:var(--surface-2);border-color:var(--border-strong);box-shadow:0 12px 40px var(--ombre);}
:root:not([data-theme="light"]) .bu-etape:not(.stade)[aria-selected="true"],
:root:not([data-theme="light"]) .bu-fcase.courant i,
:root:not([data-theme="light"]) .bu-fbtn:hover,
:root:not([data-theme="light"]) .nego-onglet.actif{border-color:var(--encre-forte);}
:root:not([data-theme="light"]) .bu-etape:not(.stade)[aria-selected="true"],
:root:not([data-theme="light"]) .nego-onglet.actif{box-shadow:inset 0 0 0 1px var(--encre-forte);}
:root:not([data-theme="light"]) .bu-etape:not(.stade)[aria-selected="true"]::after{border-left-color:var(--encre-forte);border-bottom-color:var(--encre-forte);}
:root:not([data-theme="light"]) .bu-phase-liste:not(.stade):not(.sorties):not(.verifier){border-color:var(--encre-forte);}
/* S2 (03/10) : survol de .topbtn/.cmp-flottant — voir le commentaire au-dessus de la règle
   nue, section 1 : --marine-2 bascule déjà tout seul, mais pas assez (1,93:1 en sombre une
   fois le texte redevenu marine). Scopé pour ne RIEN changer en clair.
   S2 (03/10, passe préprod) : `:not(.topbtn-sec)` — sans lui, cette règle (spécificité
   :root:not() + classe + :hover) bat MÊME la règle secondaire d'ea-app.css
   (.topbtn.topbtn-sec:hover, deux classes + :hover, ligne 314), qui ne s'imposait que par sa
   propre spécificité dans le fichier d'origine. « Exporter » (.topbtn.topbtn-sec) en prenait
   la couleur au survol. */
:root:not([data-theme="light"]) .topbtn:not(.topbtn-sec):hover,
:root:not([data-theme="light"]) .cmp-flottant:hover{background:var(--aplat-fort);border-color:var(--aplat-fort);filter:brightness(.92);}
/* S2 (03/10, décision de Fred : « crème partout », UNE SEULE règle au niveau des jetons plutôt
   que des surcharges par écran) — tout aplat FORT à descendants (Siège .card.feat, « Rapport
   (PPTX) »/sa famille, les trois blocs approuvés le 02/10) partage la MÊME reprise --aplat-fort
   + la même redéfinition de --sur-marine*, regroupés ici en un seul bloc plutôt que trois
   presque identiques. Un sélecteur qui n'a pas de descendant lisant -2/-12/-07/-36 hérite ces
   jetons sans effet — rien ne les y consomme, poser l'union ne coûte rien et évite une
   quatrième reprise le jour où il leur en faudra un.
   `:not(.topbtn-sec)`/`:not(.sec)`, MÊME RAISON que le survol ci-dessus (passe préprod, 03/10) :
   .topbtn/.coef-actions button/.etat .act a ont chacun une variante SECONDAIRE (.topbtn-sec,
   .sec) qui ne s'impose, dans ea-app.css, que par SA PROPRE spécificité — la nôtre, plus
   spécifique encore (:root:not()), l'aurait battue aussi. « Exporter » en prenait le fond
   crème. .msg-fil-actions button et .kpirevue button RETIRÉS du groupe : dans ea-app.css ces
   deux sélecteurs sont déjà toujours secondaires (même règle, même spécificité que la primaire,
   l'ORDRE du fichier seul les départage) — les y ajouter n'a jamais rien changé en clair, et en
   sombre ça les aurait rendus crème à tort. */
:root:not([data-theme="light"]) .card.feat,
:root:not([data-theme="light"]) .topbtn:not(.topbtn-sec),
:root:not([data-theme="light"]) .coef-actions button:not(.sec),
:root:not([data-theme="light"]) .devlog form button,
:root:not([data-theme="light"]) .cmp-flottant,
:root:not([data-theme="light"]) .etat .act a:not(.sec),
:root:not([data-theme="light"]) .aplat-marine,
:root:not([data-theme="light"]) .bu-tdb .panel.bu-marine{
  background:var(--aplat-fort);border-color:var(--aplat-fort);color:var(--aplat-fort-texte);
  --sur-marine:var(--aplat-fort-texte);--sur-marine-2:var(--aplat-fort-texte-2);
  --sur-marine-12:var(--aplat-fort-voile-12);--sur-marine-07:var(--aplat-fort-voile-07);
  --sur-marine-36:var(--aplat-fort-voile-36);
}
/* S2 (03/10, passe préprod) : sur .card.feat (crème), trois couleurs fixes entre thèmes —
   validées lisibles sur un fond SOMBRE (principe 4), jamais sur un aplat-fort — tombaient sous
   l'AA : --corail (« k€ », deuxième ligne du montant) 2,6:1, --vert (.delta) 4,3:1, --muted
   sombre (.delta.ns) 2,7:1. --aplat-fort-montant existait déjà pour ce rôle (point d'acte,
   spec S1) ; --aplat-fort-vert/-rouge l'imitent (~5:1, marge au-delà du seuil strict). Le gris
   réutilise --sur-marine-2, déjà redéfini juste au-dessus pour ce même sélecteur.
   `.val small`, PAS `.val .u` : vérifié en DOM réel (mesure, pas lecture de source) — Siège
   (« Actes signés »/« Projection ») rend son second chiffre via `kpi.secondaire.affichage`
   (kpiRow.js), un `<small>` sans classe, la grammaire de `.card .val small` (ea-app.css:425).
   `.val .u` existe aussi (unité d'un KPI primaire monétaire, d'autres cartes .feat), gardé en
   plus par prudence — mais l'un sans l'autre aurait laissé le défaut ouvert pour ces deux
   cartes précises, celles citées par la tour. */
:root:not([data-theme="light"]) .card.feat .val .u,
:root:not([data-theme="light"]) .card.feat .val small{color:var(--aplat-fort-montant);}
:root:not([data-theme="light"]) .card.feat .delta{color:var(--aplat-fort-vert);}
:root:not([data-theme="light"]) .card.feat .delta.down{color:var(--aplat-fort-rouge);}
:root:not([data-theme="light"]) .card.feat .delta.ns{color:var(--sur-marine-2);}
/* Ligne N-1 (« 2025 : … ») : --muted sombre tombait à 2,67:1 sur le crème de .card.feat.
   --aplat-fort-texte-2 (8,94:1), le même jeton que le texte de la carte sur crème. */
:root:not([data-theme="light"]) .card.feat .delta-base{color:var(--aplat-fort-texte-2);}
:root:not([data-theme="light"]) .bu-pipe-etape:not(.e1):not(.e2){background:var(--aplat-fort);color:var(--aplat-fort-texte)}
:root:not([data-theme="light"]) .bu-pipe-etape.e1{color:var(--aplat-fort-texte);}
/* 07/10 (retour de production) — le grand chiffre de l'étape COMPROMIS : crème sur corail = 2,6:1 en sombre ; l'encre sombre du rail (--rail, jamais redéfini) donne 5,9:1, au-dessus des 3:1 du grand texte. Vue BU et espace négo : les mêmes classes. */
:root:not([data-theme="light"]) .bu-pipe-etape.e2,:root:not([data-theme="light"]) .bu-pipe-etape.e2 .bu-pipe-n{color:var(--rail);}
:root:not([data-theme="light"]) .bu-nv-seg.s-acte,
:root:not([data-theme="light"]) .bu-barre .s-acte,
:root:not([data-theme="light"]) .bu-leg i.s-acte,
:root:not([data-theme="light"]) .bu-tdb .m3{background:var(--aplat-fort)}
:root:not([data-theme="light"]) .bu-mouv-barre.s-acte{fill:var(--aplat-fort)}
/* S2 (03/10, condition a de Fred) : Actes (ligne ci-dessus) devient crème — le fond pâle
   fixe d'Offres (--corail-voile, #FBE6E2) en devient indiscernable (mesuré : 1,04:1). Un
   CONTOUR seul, sans fond (le filet corail, déjà là, reste ; le fond redevient celui de la
   piste) : reprend la logique DÉJÀ écrite pour le clair (bu.css, commentaire de `.s-offre` —
   « l'aplat le plus clair ne se verrait pas seul, le filet fait le seuil ») plutôt qu'un
   aplat abricot plein (option b de Fred), qui ne ferait que 1,73:1 contre Actes — sous le
   seuil des objets graphiques (3:1, WCAG 1.4.11) alors que le filet corail tient 5,77:1
   contre la piste et qu'un trait vide contre un bloc plein se distingue sans ambiguïté,
   quelle que soit la teinte du voisin. */
:root:not([data-theme="light"]) .bu-nv-seg.s-offre,
:root:not([data-theme="light"]) .bu-barre .s-offre,
:root:not([data-theme="light"]) .bu-leg i.s-offre{background:transparent}
:root:not([data-theme="light"]) .bu-mouv-barre.s-offre{fill:transparent}
:root:not([data-theme="light"]) .nego-c-acte{stroke:var(--aplat-fort);background:var(--aplat-fort)}
:root:not([data-theme="light"]) .sidebar{border-right:1px solid var(--rail-filet)}
/* Tuiles de taux (.bu-taux .t-api / .t-cl, tour 11/10 soir) : --teinte-marine / --teinte-sable sont clairs et fixes ; sous un texte devenu crème
   la valeur disparaissait (1,01:1). En sombre : la surface relevée et le voile corail, jetons déjà posés (contrasteTuiles.test.js). */
:root:not([data-theme="light"]){--st-md:var(--st-md-sombre);--teinte-marine:var(--surface-2);--teinte-sable:var(--corail-12)}
:root:not([data-theme="light"]) .bu-etape[data-etape="acte"],
:root:not([data-theme="light"]) .bu-phase-liste[data-phase="acte"]{
  --st:var(--aplat-fort);--st-e:var(--aplat-fort-texte);--st-m:var(--aplat-fort-montant);
}
:root:not([data-theme="light"]) .bu-etape.verifier{border-color:var(--alerte-bordure);background:var(--alerte-fond);color:var(--alerte-texte);}
/* Passe préprod 05/10 : encart « Proposé par l'import Alicea » (.bu-fn-proposition) — fond fixe
   --corail-voile (rose clair) sous le texte --ink devenu crème = 1,04:1. Version sombre translucide :
   --alerte-fond (spec), le texte hérité reste --ink ; le filet gauche corail est gardé. */
:root:not([data-theme="light"]) .bu-fn-proposition{background:var(--alerte-fond);}
:root:not([data-theme="light"]) .bu-phase-liste.verifier{border-color:var(--alerte-bordure);}
}
:root[data-theme="dark"] .bu-fn-form legend,
:root[data-theme="dark"] .bu-nv-badge.b-nouveau_bx,
:root[data-theme="dark"] .bu-conv.bu-fleche{color:var(--encre-forte);}
:root[data-theme="dark"] .bu-av-quoi mark{color:var(--aplat-fort-texte);}
:root[data-theme="dark"] .bu-avatar{background:var(--marine-2);color:var(--ink);}
:root[data-theme="dark"] .chip.comp{color:var(--ink-2);}
:root[data-theme="dark"] .chip.ok{color:var(--vert-sur-marine);}
:root[data-theme="dark"] .pillbar button:not([aria-pressed="true"]):not(.actif){border-color:var(--muted);}
:root[data-theme="dark"] .bu-p-if{background:var(--encre-forte);}
:root[data-theme="dark"] .bu-init.a{background:var(--pastille-fond);color:var(--pastille-texte);}
:root[data-theme="dark"] a.bu-av-ref{color:var(--accent-texte);}
:root[data-theme="dark"] .note-bulle{background:var(--surface-2);border-color:var(--border-strong);box-shadow:0 12px 40px var(--ombre);}
:root[data-theme="dark"] .bu-etape:not(.stade)[aria-selected="true"],
:root[data-theme="dark"] .bu-fcase.courant i,
:root[data-theme="dark"] .bu-fbtn:hover,
:root[data-theme="dark"] .nego-onglet.actif{border-color:var(--encre-forte);}
:root[data-theme="dark"] .bu-etape:not(.stade)[aria-selected="true"],
:root[data-theme="dark"] .nego-onglet.actif{box-shadow:inset 0 0 0 1px var(--encre-forte);}
:root[data-theme="dark"] .bu-etape:not(.stade)[aria-selected="true"]::after{border-left-color:var(--encre-forte);border-bottom-color:var(--encre-forte);}
:root[data-theme="dark"] .bu-phase-liste:not(.stade):not(.sorties):not(.verifier){border-color:var(--encre-forte);}
:root[data-theme="dark"] .topbtn:not(.topbtn-sec):hover,
:root[data-theme="dark"] .cmp-flottant:hover{background:var(--aplat-fort);border-color:var(--aplat-fort);filter:brightness(.92);}
:root[data-theme="dark"] .card.feat,
:root[data-theme="dark"] .topbtn:not(.topbtn-sec),
:root[data-theme="dark"] .coef-actions button:not(.sec),
:root[data-theme="dark"] .devlog form button,
:root[data-theme="dark"] .cmp-flottant,
:root[data-theme="dark"] .etat .act a:not(.sec),
:root[data-theme="dark"] .aplat-marine,
:root[data-theme="dark"] .bu-tdb .panel.bu-marine{
  background:var(--aplat-fort);border-color:var(--aplat-fort);color:var(--aplat-fort-texte);
  --sur-marine:var(--aplat-fort-texte);--sur-marine-2:var(--aplat-fort-texte-2);
  --sur-marine-12:var(--aplat-fort-voile-12);--sur-marine-07:var(--aplat-fort-voile-07);
  --sur-marine-36:var(--aplat-fort-voile-36);
}
:root[data-theme="dark"] .card.feat .val .u,
:root[data-theme="dark"] .card.feat .val small{color:var(--aplat-fort-montant);}
:root[data-theme="dark"] .card.feat .delta{color:var(--aplat-fort-vert);}
:root[data-theme="dark"] .card.feat .delta.down{color:var(--aplat-fort-rouge);}
:root[data-theme="dark"] .card.feat .delta.ns{color:var(--sur-marine-2);}
:root[data-theme="dark"] .card.feat .delta-base{color:var(--aplat-fort-texte-2);}
:root[data-theme="dark"] .bu-pipe-etape:not(.e1):not(.e2){background:var(--aplat-fort);color:var(--aplat-fort-texte)}
:root[data-theme="dark"] .bu-pipe-etape.e1{color:var(--aplat-fort-texte);}
:root[data-theme="dark"] .bu-pipe-etape.e2,:root[data-theme="dark"] .bu-pipe-etape.e2 .bu-pipe-n{color:var(--rail);}
:root[data-theme="dark"] .bu-nv-seg.s-acte,
:root[data-theme="dark"] .bu-barre .s-acte,
:root[data-theme="dark"] .bu-leg i.s-acte,
:root[data-theme="dark"] .bu-tdb .m3{background:var(--aplat-fort)}
:root[data-theme="dark"] .bu-mouv-barre.s-acte{fill:var(--aplat-fort)}
:root[data-theme="dark"] .bu-nv-seg.s-offre,
:root[data-theme="dark"] .bu-barre .s-offre,
:root[data-theme="dark"] .bu-leg i.s-offre{background:transparent}
:root[data-theme="dark"] .bu-mouv-barre.s-offre{fill:transparent}
:root[data-theme="dark"] .nego-c-acte{stroke:var(--aplat-fort);background:var(--aplat-fort)}
:root[data-theme="dark"] .sidebar{border-right:1px solid var(--rail-filet)}
:root[data-theme="dark"]{--st-md:var(--st-md-sombre);--teinte-marine:var(--surface-2);--teinte-sable:var(--corail-12)}
:root[data-theme="dark"] .bu-etape[data-etape="acte"],
:root[data-theme="dark"] .bu-phase-liste[data-phase="acte"]{
  --st:var(--aplat-fort);--st-e:var(--aplat-fort-texte);--st-m:var(--aplat-fort-montant);
}
:root[data-theme="dark"] .bu-etape.verifier{border-color:var(--alerte-bordure);background:var(--alerte-fond);color:var(--alerte-texte);}
:root[data-theme="dark"] .bu-fn-proposition{background:var(--alerte-fond);}
:root[data-theme="dark"] .bu-phase-liste.verifier{border-color:var(--alerte-bordure);}

/* ==== 3. admin.css — bouton de danger de l'Administration (lot modale, 05/10) =========== */
@media (prefers-color-scheme: dark){
:root:not([data-theme="light"]) .admin-b.danger{color:var(--ink);}
}
:root[data-theme="dark"] .admin-b.danger{color:var(--ink);}
