/* âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   THÃME CLAIR â V-Storm (23/08/2026)
   âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   ActivÃ© par <html data-theme="clair"> (posÃ© AVANT le premier rendu par
   js/vs-theme.js, sinon la page clignote en sombre au chargement).

   â ï¸ POURQUOI CE FICHIER EST LONG : il n'y a PAS de palette unique dans le
   dashboard. Chaque page a Ã©tÃ© Ã©crite avec son propre dialecte de variables
   (--ink / --cp-ink / --p-ink / --dimâ¦) et environ 2 200 couleurs sont Ã©crites
   EN DUR dans les pages. On redÃ©finit donc :
     1. les 2 palettes globales (style.css et vs-system.css),
     2. le dialecte de CHAQUE page,
     3. les surfaces en dur du chÃ¢ssis commun (nav, cartes, champsâ¦),
        parce qu'un rgba(255,255,255,.04) devient invisible sur du blanc.

   â ï¸ RÃGLE : on ne touche JAMAIS au blanc posÃ© SUR du violet (texte des
   boutons pleins, logo) â il doit rester blanc dans les deux thÃ¨mes.
   âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */

:root[data-theme="clair"] {
  color-scheme: light;

  /* ââ Palette de rÃ©fÃ©rence du thÃ¨me clair âââââââââââââââââââââââââââââ
     Fond lÃ©gÃ¨rement teintÃ© plutÃ´t que blanc pur : moins fatigant, et Ã§a
     laisse les cartes blanches ressortir. */
  --vsc-bg:        #f4f3f9;
  --vsc-bg-2:      #eceaf4;
  --vsc-card:      #ffffff;
  --vsc-card-2:    #faf9fd;
  --vsc-card-3:    #f2f0f8;
  --vsc-hair:      rgba(23, 20, 43, .09);
  --vsc-hair-2:    rgba(23, 20, 43, .16);
  --vsc-ink:       #17142b;
  --vsc-ink-2:     #45405c;
  /* â ï¸ Ces deux teintes ont Ã©tÃ© ASSOMBRIES le 23/08 aprÃ¨s un second audit,
     plus strict (seuil 4:1 au lieu de 3:1) : Ã  #6b6584 / #8d87a3 les
     Ã©tiquettes, en-tÃªtes de tableau et lÃ©gendes tombaient Ã  3,4:1 â
     lisibles Ã  l'Åil sur une grande police, pÃ©nibles en 10-11 px. */
  --vsc-ink-3:     #5a5474;
  --vsc-ink-4:     #726c8a;
  /* Violet assombri : le #8c66ff de la maison passe en dessous du contraste
     minimum sur fond blanc pour du texte. Les aplats gardent le violet clair. */
  --vsc-vio:       #6a3eef;
  --vsc-vio-2:     #5a2ee5;
  /* â ï¸ Le violet Â« soft Â» de la marque (#8c66ff) est un violet de FOND
     sombre : posÃ© en TEXTE sur blanc il plafonne Ã  3,8:1. Les pages qui
     s'en servent pour des Ã©tiquettes (Compta, Publier) devenaient molles. */
  --vsc-vio-soft:  #7048e8;
  --vsc-vio-tint:  rgba(106, 62, 239, .10);
  --vsc-vio-tint2: rgba(106, 62, 239, .18);
  --vsc-ok:        #12854f;
  --vsc-ok-soft:   rgba(18, 133, 79, .12);
  --vsc-warn:      #a15c00;
  --vsc-warn-soft: rgba(161, 92, 0, .12);
  --vsc-err:       #c8324f;
  --vsc-err-soft:  rgba(200, 50, 79, .10);
  --vsc-info:      #1f6fd0;
  --vsc-pop:       #4a7000;              /* le vert citron est illisible sur blanc */
  --vsc-pop-soft:  rgba(93, 140, 0, .13);
  --vsc-shadow:    0 1px 2px rgba(23,20,43,.05), 0 8px 24px rgba(23,20,43,.07);
  --vsc-shadow-pop:0 24px 60px rgba(23,20,43,.18);

  /* ââ 1a. Palette globale de style.css âââââââââââââââââââââââââââââââ */
  --bg:            var(--vsc-bg);
  --bg-elevated:   var(--vsc-card-2);
  --surface:       var(--vsc-card);
  --surface-hover: var(--vsc-card-3);
  --border:        var(--vsc-hair);
  --border-strong: var(--vsc-hair-2);
  --accent:        var(--vsc-vio);
  --accent-hover:  var(--vsc-vio-2);
  --accent-light:  #7c4ddb;
  --accent-glow:   rgba(106, 62, 239, .22);
  --accent-soft:   var(--vsc-vio-tint);
  --accent-border: rgba(106, 62, 239, .25);
  --text:          var(--vsc-ink);
  --text-secondary:var(--vsc-ink-2);
  --text-muted:    var(--vsc-ink-4);
  --success:       var(--vsc-ok);
  --error:         var(--vsc-err);
  --warning:       var(--vsc-warn);
  --gradient-hero: radial-gradient(ellipse 80% 60% at 50% 0%, rgba(106,62,239,.10) 0%, transparent 60%);
  --gradient-card: linear-gradient(135deg, rgba(106,62,239,.05) 0%, transparent 100%);
  --shadow-glow:   0 0 60px rgba(106,62,239,.14);
  --shadow-card:   var(--vsc-shadow);
  --shadow-lg:     var(--vsc-shadow-pop);

  /* ââ 1b. Palette globale de vs-system.css âââââââââââââââââââââââââââ */
  --vs-bg:          var(--vsc-bg);
  --vs-card:        var(--vsc-card);
  --vs-card-2:      var(--vsc-card-2);
  --vs-card-hi:     var(--vsc-card-3);
  --vs-overlay:     rgba(23, 20, 43, .38);
  --vs-border:      var(--vsc-hair);
  --vs-border-hi:   var(--vsc-hair-2);
  --vs-border-vio:  rgba(106, 62, 239, .45);
  --vs-violet:      var(--vsc-vio);
  --vs-violet-2:    var(--vsc-vio-2);
  --vs-violet-soft: var(--vsc-vio-soft);
  --vs-violet-light:#7c4ddb;
  --vs-violet-tint: var(--vsc-vio-tint);
  --vs-violet-tint2:var(--vsc-vio-tint2);
  --vs-text:        var(--vsc-ink);
  --vs-text-2:      var(--vsc-ink-2);
  --vs-text-mute:   var(--vsc-ink-3);
  --vs-text-dim:    var(--vsc-ink-4);
  --vs-text-faint:  #a8a3bb;
  --vs-ok:          var(--vsc-ok);
  --vs-ok-soft:     var(--vsc-ok-soft);
  --vs-warn:        var(--vsc-warn);
  --vs-warn-soft:   var(--vsc-warn-soft);
  --vs-err:         var(--vsc-err);
  --vs-err-soft:    var(--vsc-err-soft);
  --vs-info:        var(--vsc-info);
  --vs-shadow-card: var(--vsc-shadow);
  --vs-shadow-pop:  var(--vsc-shadow-pop);
  --vs-glow-violet: 0 0 0 1px rgba(106,62,239,.30), 0 8px 28px rgba(106,62,239,.18);
  --vs-inset-violet:inset 0 0 0 1px rgba(106,62,239,.16), inset 0 24px 48px rgba(106,62,239,.03);

  /* ââ 2. Dialectes des pages âââââââââââââââââââââââââââââââââââââââââââ
     MÃªmes rÃ´les, noms diffÃ©rents selon la page. On les redÃ©finit tous ici
     plutÃ´t que page par page : une seule source pour le thÃ¨me. */

  /* dashboard, colis, notes, publier (variantes --hair2/--ink2 sans tiret) */
  --panel:      var(--vsc-card);
  --panel-2:    var(--vsc-card-2);
  --hair:       var(--vsc-hair);
  --hair-2:     var(--vsc-hair-2);
  --hair2:      var(--vsc-hair-2);
  --ink:        var(--vsc-ink);
  --ink-2:      var(--vsc-ink-2);
  --ink-3:      var(--vsc-ink-3);
  --ink-4:      var(--vsc-ink-4);
  --ink2:       var(--vsc-ink-2);
  --ink3:       var(--vsc-ink-3);
  --ink4:       var(--vsc-ink-4);
  --vio:        var(--vsc-vio);
  --vio-tint:   var(--vsc-vio-tint);
  --viot:       var(--vsc-vio-tint);
  --ok:         var(--vsc-ok);
  --err:        var(--vsc-err);
  --errs:       var(--vsc-err-soft);
  --err-soft:   var(--vsc-err-soft);
  --pop:        var(--vsc-pop);
  --pop-soft:   var(--vsc-pop-soft);
  --prim:       var(--vsc-vio);
  --beta:       var(--vsc-vio);
  --add:        var(--vsc-ok);
  --amber:      var(--vsc-warn);
  --amber-soft: var(--vsc-warn-soft);
  --amber-tint: var(--vsc-warn-soft);
  --amber-line: rgba(161, 92, 0, .30);
  --mint:       var(--vsc-ok);
  --mint-soft:  var(--vsc-ok-soft);
  --blue:       var(--vsc-info);
  --bluet:      rgba(31, 111, 208, .12);
  --gray:       var(--vsc-ink-4);
  --pink:       #b8397a;
  --c:          var(--vsc-card);
  --sc:         var(--vsc-card-2);
  --p:          var(--vsc-card);
  --pc:         var(--vsc-card);
  --bn-bg:      var(--vsc-bg);

  /* dashboard-central (messagerie) */
  --card:       var(--vsc-card);
  --card2:      var(--vsc-card-2);
  --card3:      var(--vsc-card-3);
  --border-hi:  var(--vsc-hair-2);
  --dim:        var(--vsc-ink-3);
  /* â ï¸â ï¸ MON ERREUR, corrigÃ©e le 23/08 : `--lime` de la Messagerie NE VAUT
     PAS du vert â la page l'a redÃ©fini Ã  #8c66ff, c'est le VIOLET de la
     marque, le nom est restÃ© d'une version antÃ©rieure. Je l'avais mappÃ© sur
     --vsc-pop (olive) : le bouton Â« Faire une offre Â» et l'onglet actif
     passaient de violet Ã  vert. Ne jamais mapper une variable sur la foi de
     son NOM â lire la valeur que la page lui donne. */
  --lime:       var(--vsc-vio);
  --lime-dim:   var(--vsc-vio-tint);
  --border-lime:rgba(106, 62, 239, .30);
  --fav:        #c9861a;
  --lien:       var(--vsc-info);
  --lit:        var(--vsc-err);
  --litige:     var(--vsc-err);
  --litige-dim: var(--vsc-err-soft);
  --litige-bd:  rgba(200, 50, 79, .30);

  /* dashboard-compta (--cp-*) */
  --cp-panel:     var(--vsc-card);
  --cp-panel2:    var(--vsc-card-2);
  --cp-hair:      var(--vsc-hair);
  --cp-hair2:     var(--vsc-hair-2);
  --cp-ink:       var(--vsc-ink);
  --cp-ink2:      var(--vsc-ink-2);
  --cp-ink3:      var(--vsc-ink-3);
  --cp-ink4:      var(--vsc-ink-4);
  --cp-vio:       var(--vsc-vio);
  --cp-pop:       var(--vsc-vio-soft);
  --cp-amber:     var(--vsc-warn);
  --cp-amber-tint:var(--vsc-warn-soft);
  --cp-amber-line:rgba(161, 92, 0, .30);
  --cp-err:       var(--vsc-err);
  --cp-err-soft:  var(--vsc-err-soft);

  /* dashboard-billing (--fb-*) â palette OUBLIÃE lors de la 1Ê³áµ passe.
     â ï¸ Elle n'Ã©tait pas visible Ã  l'audit de contraste : les CARTES Ã©taient
     dÃ©jÃ  blanches (section 3 les cible en dur), seuls les TEXTES restaient
     calibrÃ©s sombre. Le contrÃ´le fiable est la liste des prÃ©fixes :
     `grep -oE '\-\-[a-z]{2,4}-[a-z0-9-]+: *#'` sur chaque page,
     confrontÃ©e aux prÃ©fixes prÃ©sents ici. */
  --fb-panel:     var(--vsc-card);
  --fb-panel-2:   var(--vsc-card-2);
  --fb-hair:      var(--vsc-hair);
  --fb-hair-2:    var(--vsc-hair-2);
  --fb-ink:       var(--vsc-ink);
  --fb-ink-2:     var(--vsc-ink-2);
  --fb-ink-3:     var(--vsc-ink-3);
  --fb-ink-4:     var(--vsc-ink-4);
  --fb-vio:       var(--vsc-vio);
  --fb-vio-tint:  var(--vsc-vio-tint);
  --fb-vio-line:  rgba(106, 62, 239, .30);
  --fb-pop:       var(--vsc-vio-soft);
  --fb-pop-tint:  var(--vsc-vio-tint);
  --fb-blue:      var(--vsc-info);
  --fb-blue-tint: rgba(31, 111, 208, .12);
  --fb-blue-line: rgba(31, 111, 208, .30);
  --fb-err:       var(--vsc-err);
  --fb-err-soft:  var(--vsc-err-soft);

  /* dashboard-affiliate (--af-*) */
  --af-panel:     var(--vsc-card);
  --af-panel-2:   var(--vsc-card-2);
  --af-hair:      var(--vsc-hair);
  --af-hair-2:    var(--vsc-hair-2);
  --af-ink:       var(--vsc-ink);
  --af-ink-2:     var(--vsc-ink-2);
  --af-ink-3:     var(--vsc-ink-3);
  --af-ink-4:     var(--vsc-ink-4);
  --af-vio:       var(--vsc-vio);
  --af-vio-tint:  var(--vsc-vio-tint);
  --af-vio-line:  rgba(106, 62, 239, .30);
  --af-pop:       var(--vsc-vio-soft);
  --af-pop-soft:  var(--vsc-vio-tint);
  --af-blue:      var(--vsc-info);
  --af-blue-soft: rgba(31, 111, 208, .12);

  /* dashboard-employes (--ge-*) */
  --ge-panel:      var(--vsc-card);
  --ge-panel-2:    var(--vsc-card-2);
  --ge-card-2:     var(--vsc-card-2);
  --ge-card-3:     var(--vsc-card-3);
  --ge-hair:       var(--vsc-hair);
  --ge-hair-2:     var(--vsc-hair-2);
  --ge-ink:        var(--vsc-ink);
  --ge-ink-2:      var(--vsc-ink-2);
  --ge-ink-3:      var(--vsc-ink-3);
  --ge-ink-4:      var(--vsc-ink-4);
  --ge-faint:      var(--vsc-ink-4);
  --ge-vio:        var(--vsc-vio);
  --ge-vio-soft:   var(--vsc-vio-soft);
  --ge-vio-2:      var(--vsc-vio-2);
  --ge-vio-tint:   var(--vsc-vio-tint);
  --ge-vio-line:   rgba(106, 62, 239, .30);
  --ge-pop:        var(--vsc-vio-soft);
  --ge-pop-soft:   var(--vsc-vio-tint);
  --ge-blue:       var(--vsc-info);
  --ge-blue-tint:  rgba(31, 111, 208, .12);
  --ge-blue-line:  rgba(31, 111, 208, .30);
  --ge-red:        var(--vsc-err);
  --ge-red-tint:   var(--vsc-err-soft);
  --ge-red-border: rgba(200, 50, 79, .28);

  /* dashboard-settings (--p-*) */
  --p-panel:    var(--vsc-card);
  --p-hair:     var(--vsc-hair);
  --p-hair2:    var(--vsc-hair-2);
  --p-ink:      var(--vsc-ink);
  --p-ink2:     var(--vsc-ink-2);
  --p-ink3:     var(--vsc-ink-3);
  --p-ink4:     var(--vsc-ink-4);
  --p-err:      var(--vsc-err);
  --p-err-soft: var(--vsc-err-soft);

  /* barre mobile (vs-mobile.css) */
  --vsm-bg:       var(--vsc-bg);
  --vsm-card:     var(--vsc-card);
  --vsm-ink:      var(--vsc-ink);
  --vsm-ink-2:    var(--vsc-ink-3);
  --vsm-hair:     var(--vsc-hair);
  --vsm-accent:   var(--vsc-vio);
  --vsm-accent-2: var(--vsc-vio-2);
}

/* âââ 3. Surfaces Ã©crites EN DUR dans le chÃ¢ssis commun ââââââââââââââââââ
   Un rgba(255,255,255,.03) est invisible sur du blanc : ces rÃ¨gles ne sont
   pas du zÃ¨le, sans elles les barres, champs et cartes disparaissent. */

:root[data-theme="clair"] body,
:root[data-theme="clair"] .stage {
  background: var(--vsc-bg) !important;
  color: var(--vsc-ink);
}
/* Le ciel Ã©toilÃ© n'a aucun sens sur fond clair (points blancs sur blanc). */
:root[data-theme="clair"] .stars { display: none !important; }

/* Barre de navigation haute
   â ï¸ OPAQUE, pas translucide. Le .82 d'origine laissait dÃ©filer le contenu
   DERRIÃRE la barre : Â« on voit Ã  travers la barre en haut Â» (Bill, 24/08).
   Sur fond sombre Ã§a passait (le contenu sombre se fondait) ; sur du blanc,
   chaque carte qui passe dessous se voit. Une barre collante doit masquer. */
:root[data-theme="clair"] .nav,
:root[data-theme="clair"] .dash-topnav {
  background: #fff !important;
  border-bottom: 1px solid var(--vsc-hair);
}
:root[data-theme="clair"] .pills,
:root[data-theme="clair"] .nav__search,
:root[data-theme="clair"] .seg,
:root[data-theme="clair"] .ghost,
:root[data-theme="clair"] .qtile,
:root[data-theme="clair"] .mini {
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair) !important;
}
:root[data-theme="clair"] .ghost:hover,
:root[data-theme="clair"] .seg button.on {
  background: var(--vsc-card-3) !important;
  color: var(--vsc-ink) !important;
}
/* Onglet actif : pastille sombre sur fond clair (l'inverse du thÃ¨me sombre) */
:root[data-theme="clair"] .pill.on {
  background: var(--vsc-ink) !important;
  color: #fff !important;
}
:root[data-theme="clair"] .pill:hover { color: var(--vsc-vio) !important; }

/* Menu profil / popovers */
:root[data-theme="clair"] .pmenu,
:root[data-theme="clair"] .csel-menu,
:root[data-theme="clair"] .modal,
:root[data-theme="clair"] .drw,
:root[data-theme="clair"] .sheet {
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair) !important;
  box-shadow: var(--vsc-shadow-pop);
  color: var(--vsc-ink);
}
:root[data-theme="clair"] .pitem:hover,
:root[data-theme="clair"] .csel-menu .opt:hover {
  background: var(--vsc-card-3) !important;
}

/* Champs de saisie */
:root[data-theme="clair"] input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] textarea,
:root[data-theme="clair"] select {
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair-2) !important;
  color: var(--vsc-ink) !important;
}
:root[data-theme="clair"] input::placeholder,
:root[data-theme="clair"] textarea::placeholder { color: var(--vsc-ink-4) !important; }

/* Cartes et sÃ©parateurs gÃ©nÃ©riques */
:root[data-theme="clair"] .panel,
:root[data-theme="clair"] .card,
:root[data-theme="clair"] .box {
  background: var(--vsc-card);
  border-color: var(--vsc-hair);
  box-shadow: var(--vsc-shadow);
}

/* Le bouton plein violet garde son texte blanc â ne pas Â« corriger Â». */
:root[data-theme="clair"] .btn-primary,
:root[data-theme="clair"] .brand,
:root[data-theme="clair"] .planb__btn { color: #fff !important; }

/* Les images et logos ne sont jamais retouchÃ©s par le thÃ¨me. */
:root[data-theme="clair"] img,
:root[data-theme="clair"] canvas { filter: none !important; }


/* âââ 4. DÃ©fauts relevÃ©s Ã  l'Ã©cran sur la Vue d'ensemble âââââââââââââââââ
   TrouvÃ©s en listant, sur la page rendue, tout texte dont la couleur
   calculÃ©e est quasi blanche alors que le fond est clair. MÃ©thode Ã 
   refaire pour chaque page convertie â c'est plus fiable que relire le CSS. */

/* Les grands chiffres des KPI sont peints avec un dÃ©gradÃ© blanc â lavande
   dÃ©coupÃ© sur le texte (background-clip). Sur fond blanc, le chiffre
   disparaÃ®t purement et simplement. â ï¸ Il ne suffit pas de changer color :
   tant que -webkit-text-fill-color reste transparent, rien ne s'affiche. */
:root[data-theme="clair"] .kpi__v {
  background-image: none !important;
  -webkit-text-fill-color: var(--vsc-ink) !important;
  color: var(--vsc-ink) !important;
}

/* Onglet actif (Tableau de bord / Statistiques) : il Ã©tait blanc sur un
   violet Ã  20 % â illisible. On passe le violet en aplat plein. */
:root[data-theme="clair"] .tab2.on {
  background: var(--vsc-vio) !important;
  color: #fff !important;
}
:root[data-theme="clair"] .tab2.on .lb { color: #fff !important; }

/* Nom du compte dans le menu profil, et panneau des notifications :
   textes Ã©crits en blanc en dur. */
:root[data-theme="clair"] .pmenu__id .n,
:root[data-theme="clair"] .vs-notif-head span,
:root[data-theme="clair"] .vs-notif-item .t { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .vs-notif-panel {
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair) !important;
  box-shadow: var(--vsc-shadow-pop);
}
:root[data-theme="clair"] .vs-notif-item:hover { background: var(--vsc-card-3) !important; }

/* Configuration : le menu dÃ©roulant de choix du compte a un fond #16161d
   EN DUR â il restait noir, avec des encres devenues sombres dedans.
   â ï¸ TrouvÃ© par le balayage Â« surfaces restÃ©es sombres Â», qui force les
   Ã©lÃ©ments masquÃ©s Ã  s'afficher : un menu fermÃ© n'est jamais auditÃ©. */
:root[data-theme="clair"] .acctsel__menu {
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair-2) !important;
  box-shadow: var(--vsc-shadow-pop) !important;
}

/* Autres surfaces de CONTENU restÃ©es noires (fond Ã©crit en dur), qui ne
   s'affichent qu'aprÃ¨s un clic : la fenÃªtre de choix de catÃ©gorie (Publier)
   et le cadre photo d'un article sans image (Messagerie).
   â ï¸ Les VOILES de modale (`.catmodal`, `.prep__bg`, `.qr-modal`, `.mod`,
   `.pmodal`) restent volontairement sombres : c'est leur rÃ´le. */
:root[data-theme="clair"] .catbox {
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair-2) !important;
}
:root[data-theme="clair"] .art__ph { background: var(--vsc-card-3) !important; }
:root[data-theme="clair"] .catbox .chhd span { color: var(--vsc-ink) !important; }
/* Facturation : l'en-tÃªte et le pied de la fenÃªtre Â« Changer de plan Â»
   gardaient un fond sombre translucide alors que son corps Ã©tait blanc. */
:root[data-theme="clair"] .modal__hd,
:root[data-theme="clair"] .modal__ft {
  background: var(--vsc-card-2) !important;
  border-color: var(--vsc-hair) !important;
}

/* Menu profil : le nom du plan (Â« AccÃ¨s illimitÃ© Â») est en blanc en dur, et
   Â« Se dÃ©connecter Â» en rouge pÃ¢le â deux Ã©tats qui n'apparaissent qu'une
   fois le menu OUVERT. */
:root[data-theme="clair"] .pmenu__plan .pt .a { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .pitem.red,
:root[data-theme="clair"] .bulkdel { color: var(--vsc-err) !important; }

/* Cloche : l'icÃ´ne Ã©tait en violet trÃ¨s clair sur une pastille claire. */
:root[data-theme="clair"] .vs-bell {
  color: var(--vsc-vio) !important;
  background: var(--vsc-vio-tint) !important;
}


/* âââ 5. IntÃ©rieur des pages â corrections MESURÃES au contraste ââââââââââ
   Chaque rÃ¨gle ci-dessous rÃ©pare un dÃ©faut relevÃ© par un audit de contraste
   rÃ©el (ratio calculÃ© entre la couleur du texte et son fond effectif), pas
   par relecture du CSS. MÃ©thode : injecter le thÃ¨me sur la page, parcourir
   tous les nÅuds de texte visibles, garder ceux dont le ratio est < 3:1.
   â ï¸ Refaire cet audit page par page aprÃ¨s toute Ã©volution d'Ã©cran.        */

/* ââ ChÃ¢ssis commun : nav et fond de page ââââââââââââââââââââââââââââââââ
   Les liens de nav sont en rgba(255,255,255,.65) EN DUR : invisibles sur
   clair. Et le fond du chÃ¢ssis restait sombre SOUS le contenu. */
:root[data-theme="clair"] .dash-topnav a,
:root[data-theme="clair"] .dash-topnav .nav-label,
:root[data-theme="clair"] .navdrop__menu a,
:root[data-theme="clair"] .navdrop__btn,
:root[data-theme="clair"] .dash-topnav-links a,
:root[data-theme="clair"] .navdrop__menu > a { color: var(--vsc-ink-2) !important; }
:root[data-theme="clair"] .dash-topnav a.active,
:root[data-theme="clair"] .dash-topnav a.active .nav-label { color: var(--vsc-vio) !important; }
:root[data-theme="clair"] .navdrop__menu > a:hover {
  color: var(--vsc-vio) !important;
  background: var(--vsc-card-3) !important;
}
:root[data-theme="clair"] .dash-top-layout,
:root[data-theme="clair"] .dash-top-content { background: var(--vsc-bg) !important; }

/* Boutons sombres en dur (tri, menus dÃ©roulants, repli de nav) */
:root[data-theme="clair"] .tbtn,
:root[data-theme="clair"] .bdrop__btn,
:root[data-theme="clair"] .navcollapse {
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair) !important;
  color: var(--vsc-ink-2) !important;
}
:root[data-theme="clair"] .tbtn *,
:root[data-theme="clair"] .bdrop__btn * { color: inherit !important; }

/* â ï¸ MÃME PIÃGE QUE LES KPI : les titres de page sont peints par un dÃ©gradÃ©
   dÃ©coupÃ© sur le texte. Changer `color` ne suffit pas tant que
   -webkit-text-fill-color reste transparent â le titre reste invisible. */
:root[data-theme="clair"] .wrap h1,
:root[data-theme="clair"] .head h1 {
  background-image: none !important;
  -webkit-text-fill-color: var(--vsc-ink) !important;
  color: var(--vsc-ink) !important;
}

/* Le violet clair de la maison passe trÃ¨s bien sur fond sombre et disparaÃ®t
   sur blanc dÃ¨s qu'il sert de couleur de TEXTE. */
:root[data-theme="clair"] .b,
:root[data-theme="clair"] button.g,
:root[data-theme="clair"] .lk,
:root[data-theme="clair"] a.lk { color: var(--vsc-vio) !important; }

/* ââ Stock âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */
:root[data-theme="clair"] .it__p { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .it__ph { background: var(--vsc-card-3) !important; }
:root[data-theme="clair"] .stat__num { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .n { color: var(--vsc-ink-3) !important; }
:root[data-theme="clair"] .seg2 .on,
:root[data-theme="clair"] .tabs .on,
:root[data-theme="clair"] .pill2.on { background: var(--vsc-vio) !important; color: #fff !important; }
:root[data-theme="clair"] .pill2.on *,
:root[data-theme="clair"] .tabs .on * { color: #fff !important; }

/* Pastilles de plateforme : teintes pensÃ©es pour du fond sombre. Sur clair,
   on assombrit le TEXTE et on opacifie la pastille â sinon on lit du
   turquoise pÃ¢le sur du lavande pÃ¢le. Les couleurs de marque sont gardÃ©es,
   juste amenÃ©es Ã  un niveau lisible. */
:root[data-theme="clair"] .it__plat.vtd  { color: #0d6d74 !important; background: rgba(13,109,116,.12) !important; }
:root[data-theme="clair"] .it__plat.lbc  { color: #a34608 !important; background: rgba(163,70,8,.12) !important; }
:root[data-theme="clair"] .it__plat.both { color: #5a2ee5 !important; background: rgba(90,46,229,.12) !important; }
:root[data-theme="clair"] .it__noph      { color: var(--vsc-ink-4) !important; }
:root[data-theme="clair"] .skuchip { color: var(--vsc-ink-3) !important; background: var(--vsc-card-3) !important; }

/* ââ Messagerie ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */
:root[data-theme="clair"] .cv__msg,
:root[data-theme="clair"] .kpi__l,
:root[data-theme="clair"] .msg__t { color: var(--vsc-ink-3) !important; }
:root[data-theme="clair"] .cv__n { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .qr,
:root[data-theme="clair"] .qr--fav,
:root[data-theme="clair"] .via,
:root[data-theme="clair"] .plink { color: var(--vsc-vio) !important; }
/* Le pseudo du compte est posÃ© SUR une pastille violette : il reste blanc. */
:root[data-theme="clair"] .cv__acct .n,
:root[data-theme="clair"] [style*="8c66ff"] .n { color: #fff !important; }
:root[data-theme="clair"] .thr-prof__stars { color: #8a6100 !important; }
/* â ï¸ 27/08/2026 â `.cv__b` / `.cv__hd` RETIRÃS de cette liste, et `.kpi` retirÃ© de la
   rÃ¨gle des surfaces plus haut. Ce sont des ENFANTS d'une carte (ou de simples
   compteurs), TRANSPARENTS en thÃ¨me sombre â mesurÃ©. Leur donner Ã  leur tour un fond
   blanc opaque dessinait un rectangle blanc franc : Ã  l'intÃ©rieur des cartes de
   conversation, et autour des compteurs Â« 1000 conversations / 1 non lue / 6 comptes Â».
   C'est le Â« rectangle blanc bizarre Â» signalÃ© par Bill le 27/08.
   RÃGLE : ne poser un fond que sur l'Ã©lÃ©ment qui EST la surface ; un enfant hÃ©rite. */
:root[data-theme="clair"] .cv,
:root[data-theme="clair"] .cv.plat-vinted,
:root[data-theme="clair"] .thr,
:root[data-theme="clair"] .thr__hd { background: var(--vsc-card) !important; }
:root[data-theme="clair"] .cv:hover,
:root[data-theme="clair"] .cv.on { background: var(--vsc-card-3) !important; }
:root[data-theme="clair"] .quick button,
:root[data-theme="clair"] .quick .qr { color: var(--vsc-vio) !important; }
:root[data-theme="clair"] .quick .qr,
:root[data-theme="clair"] .quick .qr--fav,
:root[data-theme="clair"] button.qr--fav {
  color: #5a2ee5 !important;
  background: rgba(90,46,229,.10) !important;
}
:root[data-theme="clair"] .cxl,
:root[data-theme="clair"] .cxl span { color: var(--vsc-ink-3) !important; }
:root[data-theme="clair"] .ftabs button.on { background: var(--vsc-vio) !important; }
/* Boutons pleins violets dont le libellÃ© est Ã©crit en presque-noir (#111406,
   hÃ©ritÃ© de l'Ã©poque oÃ¹ le fond Ã©tait vert citron) : sur violet il faut du
   blanc, dans les deux thÃ¨mes. */
:root[data-theme="clair"] .cxb--main,
:root[data-theme="clair"] .cxb--main svg { color: #fff !important; }
/* Pastille de pays sur un message : fond gris ardoise en dur (#2a2a33). */
/* Barre de sÃ©lection de la messagerie : le bouton Â« Mettre de cÃ´tÃ© Â» est
   blanc sur --vio-soft, un violet trop clair pour porter du blanc. */
:root[data-theme="clair"] .selbar__b[data-sa="aside"] { background: var(--vsc-vio) !important; }
:root[data-theme="clair"] .flagb {
  background: var(--vsc-card-3) !important;
  color: var(--vsc-ink-2) !important;
  border-color: var(--vsc-hair-2) !important;
}
:root[data-theme="clair"] .ftabs button.on,
:root[data-theme="clair"] .ftabs button.on * { color: #fff !important; }

/* â ï¸ MÃTHODE QUI A TROUVÃ CES QUATRE-LÃ (Ã  refaire pour toute page neuve) :
   au lieu de parcourir les ÃLÃMENTS, Ã©numÃ©rer toutes les propriÃ©tÃ©s
   personnalisÃ©es dÃ©finies par la page et calculer leur contraste sur blanc.
   Celles qui sont claires ET qui ne nomment pas une surface
   (bg / card / panel / surface) sont forcÃ©ment des couleurs de TEXTE
   restÃ©es calibrÃ©es pour le fond sombre. C'est ce balayage qui a sorti
   --vio-light, --mute, --fav et --vs-text-faint, qu'aucun audit d'Ã©lÃ©ment
   n'avait signalÃ©s. */
:root[data-theme="clair"] {
  --vio-light:      var(--vsc-vio);
  --mute:           var(--vsc-ink-3);
  --fav:            #8a6100;
  --vs-text-faint:  var(--vsc-ink-4);
}
/* Le sous-titre de page : `.head p` le peint en --vio-light sur plusieurs
   Ã©crans. MÃªme sans la variable, on le fixe explicitement. */
:root[data-theme="clair"] .head p,
:root[data-theme="clair"] .head .sub { color: var(--vsc-ink-2) !important; }

/* â ï¸â ï¸ PIÃGE DE CASCADE â Ã VÃRIFIER SUR TOUTE NOUVELLE PAGE.
   Â« Publier Â» ne dÃ©finit PAS sa palette sur :root mais sur son conteneur
   `.pub-wrap`. Une redÃ©finition posÃ©e sur un CONTENEUR l'emporte, pour tout
   son sous-arbre, sur n'importe quelle correspondance faite au niveau :root
   â quelle que soit la spÃ©cificitÃ© du sÃ©lecteur :root. Il faut donc remapper
   le conteneur lui-mÃªme.
   â ï¸ LE TEST DOIT ÃTRE MULTILIGNE. Un grep ligne Ã  ligne rate les palettes
   dont la premiÃ¨re variable est sur la ligne SUIVANTE â c'est ainsi que
   `.dash-top-content.aff` (Affiliation) et `.dash-top-content` (Gestion
   employÃ©) m'ont Ã©chappÃ© au premier balayage. Le bon test cherche tout bloc
   `sÃ©lecteur { â¦ --x: â¦ }` en mode DOTALL, hors :root :
     re.finditer(r'([^{}\n;]{1,120}?)\{([^{}]*--[a-z0-9-]+\s*:[^{}]*)\}', s, re.S)
   RÃ©sultat sur les 15 Ã©crans : .pub-wrap, .dash-top-content.aff,
   .dash-top-content (employÃ©s). Les trois sont remappÃ©s ci-dessous. */
:root[data-theme="clair"] .pub-wrap {
  --panel: var(--vsc-card);
  --hair:  var(--vsc-hair);
  --hair2: var(--vsc-hair-2);
  --ink:   var(--vsc-ink);
  --ink2:  var(--vsc-ink-2);
  --ink3:  var(--vsc-ink-3);
  --ink4:  var(--vsc-ink-4);
  --vio:   var(--vsc-vio);
  --viot:  var(--vsc-vio-tint);
  --ok:    var(--vsc-ok);
  --blue:  var(--vsc-info);
  --bluet: rgba(31, 111, 208, .12);
  --err:   var(--vsc-err);
  --errs:  var(--vsc-err-soft);
}
/* Affiliation et Gestion employÃ© posent LEUR palette sur `.dash-top-content`
   (avec ou sans `.aff`) : mÃªme piÃ¨ge, mÃªme remÃ¨de. Les valeurs sont celles
   du bloc :root plus haut, rÃ©pÃ©tÃ©es ici parce qu'une variable redÃ©finie sur
   un conteneur ne peut Ãªtre corrigÃ©e que sur ce conteneur. */
:root[data-theme="clair"] .dash-top-content.aff {
  --af-panel: var(--vsc-card);   --af-panel-2: var(--vsc-card-2);
  --af-hair:  var(--vsc-hair);   --af-hair-2:  var(--vsc-hair-2);
  --af-ink:   var(--vsc-ink);    --af-ink-2:   var(--vsc-ink-2);
  --af-ink-3: var(--vsc-ink-3);  --af-ink-4:   var(--vsc-ink-4);
  --af-vio:   var(--vsc-vio);    --af-vio-tint: var(--vsc-vio-tint);
  --af-vio-line: rgba(106, 62, 239, .30);
  --af-pop:   var(--vsc-vio-soft); --af-pop-soft: var(--vsc-vio-tint);
  --af-blue:  var(--vsc-info);   --af-blue-soft: rgba(31, 111, 208, .12);
}
:root[data-theme="clair"] .dash-top-content {
  --ge-panel: var(--vsc-card);   --ge-panel-2: var(--vsc-card-2);
  --ge-card-2: var(--vsc-card-2);--ge-card-3:  var(--vsc-card-3);
  --ge-hair:  var(--vsc-hair);   --ge-hair-2:  var(--vsc-hair-2);
  --ge-ink:   var(--vsc-ink);    --ge-ink-2:   var(--vsc-ink-2);
  --ge-ink-3: var(--vsc-ink-3);  --ge-ink-4:   var(--vsc-ink-4);
  --ge-faint: var(--vsc-ink-4);
  --ge-vio:   var(--vsc-vio);    --ge-vio-soft: var(--vsc-vio-soft);
  --ge-vio-2: var(--vsc-vio-2);  --ge-vio-tint: var(--vsc-vio-tint);
  --ge-vio-line: rgba(106, 62, 239, .30);
  --ge-pop:   var(--vsc-vio-soft); --ge-pop-soft: var(--vsc-vio-tint);
  --ge-blue:  var(--vsc-info);   --ge-blue-tint: rgba(31, 111, 208, .12);
  --ge-blue-line: rgba(31, 111, 208, .30);
  --ge-red:   var(--vsc-err);    --ge-red-tint: var(--vsc-err-soft);
  --ge-red-border: rgba(200, 50, 79, .28);
}
/* Boutons de partage de l'affiliation. Les verts et bleus de marque
   (WhatsApp #1faf54, Telegram #2aabee) ne portent du blanc qu'Ã  2,9:1 et
   2,6:1 â c'est vrai aussi sur le thÃ¨me sombre, mais l'Ã©cran clair le rend
   flagrant. On garde la teinte de marque, une nuance plus foncÃ©e. */
:root[data-theme="clair"] .sbtn.wa { background: #0f8a41 !important; }
:root[data-theme="clair"] .sbtn.tg { background: #1a7fb5 !important; }
:root[data-theme="clair"] .sbtn.mail {
  color: var(--vsc-ink-2) !important;
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair-2) !important;
}
:root[data-theme="clair"] .sbtn.x { background: #1a1a1f !important; color: #fff !important; }

/* Gestion employÃ© : une permission cochÃ©e s'Ã©crit en BLANC sur une simple
   teinte violette (--ge-vio-tint), qui devient trÃ¨s pÃ¢le en clair. La case
   cochÃ©e garde le violet plein â c'est elle qui porte le signal. */
:root[data-theme="clair"] .perm.on { color: var(--vsc-vio) !important; }
:root[data-theme="clair"] .perm.on .box { color: #fff !important; }

/* Les trois grands compteurs de Publier sont en #fff EN DUR (pas une
   variable) â invisibles sur la carte blanche. */
:root[data-theme="clair"] .cell__v { color: var(--vsc-ink) !important; }
/* â ï¸ La barre d'action flottante `.bar` vit HORS de `.pub-wrap` (elle est
   posÃ©e sur le <body> pour rester fixe) : elle n'hÃ©rite donc pas du remappage
   ci-dessus. Son fond rgba(18,18,24,.92) traÃ§ait une rÃ©glette NOIRE en travers
   d'une page blanche. â ï¸ Ce n'est pas un toast passager mais une barre
   PERMANENTE : on l'Ã©claircit donc pour de bon, en remappant ses variables
   plutÃ´t qu'en forÃ§ant des couleurs â les boutons qu'elle contient suivent
   alors d'eux-mÃªmes, sans rÃ¨gle par bouton Ã  maintenir. */
:root[data-theme="clair"] .bar {
  background: rgba(255, 255, 255, .94) !important;
  border-color: var(--vsc-hair-2) !important;
  box-shadow: 0 18px 44px rgba(23, 20, 43, .16) !important;
  --ink:   var(--vsc-ink);
  --ink2:  var(--vsc-ink-2);
  --ink3:  var(--vsc-ink-3);
  --vio:   var(--vsc-vio);
  --hair2: var(--vsc-hair-2);
  --panel: var(--vsc-card);
  --card:  var(--vsc-card);
}
:root[data-theme="clair"] .bar .info .t { color: var(--vsc-ink) !important; }

/* Compta : la pastille de statut d'une vente prend sa couleur d'une PALETTE JS
   (STATUT_COLOR), Ã©crite en ligne â 10 teintes pensÃ©es pour du fond sombre,
   impossibles Ã  rattraper une par une et amenÃ©es Ã  Ã©voluer.
   On neutralise donc le TEXTE et on laisse la couleur au point et au liserÃ© :
   le codage visuel du statut survit, le libellÃ© redevient lisible. */
:root[data-theme="clair"] .stbadge { color: var(--vsc-ink) !important; }

/* Vue d'ensemble : le nom de la plateforme sous chaque compte est peint Ã  la
   couleur de MARQUE (turquoise Vinted, orange Leboncoin). Ces teintes sont
   faites pour un fond sombre : 2,6:1 et 2,3:1 sur blanc. On garde la teinte,
   on descend la luminositÃ© â exactement comme pour les pastilles du Stock. */
:root[data-theme="clair"] .bacct__hd span { color: #0d6d74 !important; }
:root[data-theme="clair"] .bacct.is-lbc .bacct__hd span { color: #a34608 !important; }

/* Messagerie : les 3 couleurs d'Ã©tat (--ok / --warn / --err) de la page sont
   calibrÃ©es pour du fond sombre. L'ambre #ffc857 d'une offre Â« en attente Â»
   tombe Ã  1,5:1 sur blanc â le montant restait lisible, pas son statut.
   â ï¸ TrouvÃ© seulement au 2áµ passage : il faut une offre EN ATTENTE Ã 
   l'Ã©cran pour que la rÃ¨gle s'applique. Un audit sur une page Â« au repos Â»
   ne voit jamais les Ã©tats conditionnels. */
:root[data-theme="clair"] .thr,
:root[data-theme="clair"] .cv,
:root[data-theme="clair"] .wrap,
:root[data-theme="clair"] body {
  --ok:   var(--vsc-ok);
  --warn: #8a6100;
  --err:  var(--vsc-err);
}
:root[data-theme="clair"] .ibtn.on {
  color: #8a6100 !important;
  border-color: rgba(138,97,0,.40) !important;
  background: rgba(138,97,0,.12) !important;
}

/* Configuration : la lÃ©gende sous le tÃ©lÃ©phone de dÃ©monstration. */
:root[data-theme="clair"] .preview-cap { color: var(--vsc-ink-2) !important; }
:root[data-theme="clair"] .preview-cap b { color: var(--vsc-vio) !important; }

/* â ï¸ L'ÃCRAN DU TÃLÃPHONE est une MAQUETTE de l'app Vinted, pas une surface
   du dashboard : son fond reste noir dans les deux thÃ¨mes. Il ne doit donc
   PAS hÃ©riter des encres claires â sinon on lit du presque-noir sur du noir.
   On lui rend un jeu d'encres sombres, localement. */
:root[data-theme="clair"] .phone,
:root[data-theme="clair"] .screen {
  --ink:   #f4f2fb;
  --ink2:  #c9c3dd;
  --ink-2: #c9c3dd;
  --ink3:  #9a94b0;
  --ink-3: #9a94b0;
  --mute:  #9a94b0;
  color: #e9e7f0;
}
:root[data-theme="clair"] .vo-strike,
:root[data-theme="clair"] .vi-box { color: #9a94b0 !important; }

/* ââ Compta / Publier ââââââââââââââââââââââââââââââââââââââââââââââââââââ */
:root[data-theme="clair"] .pcard__v { color: var(--vsc-vio) !important; }
:root[data-theme="clair"] .catpick__v,
:root[data-theme="clair"] .vssel-val,
:root[data-theme="clair"] .wrap h2,
:root[data-theme="clair"] .drw h2 { color: var(--vsc-ink) !important; }
/* Journal des annonces (dashboard-publier) : lignes .svrow codees en dur en sombre */
:root[data-theme="clair"] .svrow { background: var(--vsc-card-3); border-color: var(--vsc-hair); }
:root[data-theme="clair"] .svrow__t { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .svrow__s { color: var(--vsc-ink-3); }
:root[data-theme="clair"] .tico { color: var(--vsc-vio-soft); }
:root[data-theme="clair"] .jrnpill { color: var(--vsc-ink-3); background: rgba(23,20,43,.07); box-shadow: inset 0 0 0 1px rgba(23,20,43,.14); }
:root[data-theme="clair"] .acctbar__lbl,
:root[data-theme="clair"] .card b,
:root[data-theme="clair"] .sec b { color: var(--vsc-ink-2) !important; }
:root[data-theme="clair"] .head .sub b { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .subhead h2,
:root[data-theme="clair"] .pub-wrap h2 { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .art,
:root[data-theme="clair"] .art.open,
:root[data-theme="clair"] .catpick,
:root[data-theme="clair"] .vssel-trg {
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair) !important;
}
:root[data-theme="clair"] .art__hd .nm { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .art__hd .pill { color: var(--vsc-ink-3) !important; background: var(--vsc-card-3) !important; }
:root[data-theme="clair"] .dz,
:root[data-theme="clair"] .dz .s { color: var(--vsc-ink-3) !important; }
:root[data-theme="clair"] .platflags label span { color: var(--vsc-ink-2) !important; }
:root[data-theme="clair"] .platflags label.vtd span,
:root[data-theme="clair"] .platflags label.on span { color: var(--vsc-ink) !important; }

/* ââ Colis âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */
:root[data-theme="clair"] .bdx-tab { color: var(--vsc-ink-3) !important; }
:root[data-theme="clair"] .bdx-tab.on,
:root[data-theme="clair"] .bdx-tab.on *,
:root[data-theme="clair"] button.on.bdx-tab { color: #fff !important; background: var(--vsc-vio) !important; }
:root[data-theme="clair"] .bdx-lotbadge { color: #8a5a00 !important; background: rgba(138,90,0,.12) !important; }
:root[data-theme="clair"] .bdx-row button,
:root[data-theme="clair"] .bdx-acct button { color: var(--vsc-ink-2) !important; }
/* â ï¸ MON ERREUR, corrigÃ©e le 23/08 : j'avais forcÃ© Â« Obtenir bordereaux Â»
   en BLANC en croyant Ã  un bouton plein. C'est un bouton fantÃ´me
   (fond rgba(255,255,255,.04)) â blanc sur blanc, libellÃ© invisible. */
:root[data-theme="clair"] .btn-pdf,
:root[data-theme="clair"] .btn-pdf * { color: var(--vsc-ink-2) !important; }
:root[data-theme="clair"] .btn-pdf {
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair-2) !important;
}
:root[data-theme="clair"] .btn-pdf:hover { background: var(--vsc-card-3) !important; }

/* ââ Segments, boutons fantÃ´mes et petites pastilles (partout) âââââââââââ */
:root[data-theme="clair"] .seg { background: var(--vsc-card-3) !important; border-color: var(--vsc-hair) !important; }
:root[data-theme="clair"] .seg > button { color: var(--vsc-ink-3) !important; background: transparent !important; }
:root[data-theme="clair"] .seg > button.on,
:root[data-theme="clair"] .seg > button.on * { color: #fff !important; background: var(--vsc-vio) !important; }
:root[data-theme="clair"] .vbtn.ghost,
:root[data-theme="clair"] .btn.ghost,
:root[data-theme="clair"] button.ghost {
  color: var(--vsc-ink-2) !important;
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair-2) !important;
}
/* â ï¸â ï¸ ÃTATS AU SURVOL â signalÃ©s par Bill, et mon audit ne pouvait PAS les
   voir : il Ã©carte tout Ã©lÃ©ment dont l'opacitÃ© cumulÃ©e est < 0,1, or une
   infobulle au repos est justement en `opacity:0`. Il faut les rendre
   visibles de force pour les tester (cf. la passe Â« Ã©lÃ©ments masquÃ©s Â»).
   Ici l'infobulle du graphe de la Vue d'ensemble a un fond #1c1c26 EN DUR :
   le texte passait Ã  l'encre sombre, la bulle restait noire. */
:root[data-theme="clair"] .tip,
:root[data-theme="clair"] .trend__tip {
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair-2) !important;
  box-shadow: var(--vsc-shadow-pop) !important;
  color: var(--vsc-ink) !important;
}
:root[data-theme="clair"] .tip .d,
:root[data-theme="clair"] .trend__tip .d { color: var(--vsc-ink-3) !important; }
:root[data-theme="clair"] .tip .r,
:root[data-theme="clair"] .tip .r b,
:root[data-theme="clair"] .trend__tip .r { color: var(--vsc-ink) !important; }
/* â ï¸ Les pastilles `.sw` gardent leurs couleurs en ligne : ce sont celles des
   COURBES du graphe, elles doivent rester identiques pour qu'on relie la
   ligne Ã  sa valeur. */

:root[data-theme="clair"] .opt-row .mono { color: #0f7a4d !important; }
:root[data-theme="clair"] .tt .l span { color: #5a2ee5 !important; background: rgba(90,46,229,.10) !important; }

/* ââ ParamÃ¨tres / Bloc-note ââââââââââââââââââââââââââââââââââââââââââââââ */
:root[data-theme="clair"] .card div[style*="background"],
:root[data-theme="clair"] #mcpCard div,
:root[data-theme="clair"] .acct-line { color: var(--vsc-ink-2) !important; }
:root[data-theme="clair"] #emailLinkList div { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] #emailLinkList div div { color: var(--vsc-ink-3) !important; }
:root[data-theme="clair"] .note { background: var(--vsc-card) !important; border-color: var(--vsc-hair) !important; }
:root[data-theme="clair"] .note__txt { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .note__badge { color: var(--vsc-vio) !important; }
:root[data-theme="clair"] .plday-name { color: var(--vsc-ink-2) !important; }
/* â ï¸ Les pastilles d'initiales `.av` portent du blanc sur une couleur
   ATTRIBUÃE PAR COMPTE en JS (ACOL) : certaines de ces couleurs sont trop
   claires pour du blanc, et on ne peut pas les assombrir sans changer
   l'identitÃ© visuelle de chaque compte. On garantit la lisibilitÃ© par une
   ombre portÃ©e, seule solution qui marche quelle que soit la teinte.
   â ï¸ L'auditeur de contraste ne sait pas mesurer une ombre : il continuera
   de signaler ces pastilles. C'est un faux positif connu. */
:root[data-theme="clair"] .av { text-shadow: 0 1px 2px rgba(0,0,0,.55); }
:root[data-theme="clair"] .nsel__btn,
:root[data-theme="clair"] .nsel__btn span { color: var(--vsc-ink) !important; }
/* ParamÃ¨tres : les bandeaux de confirmation / d'erreur (vert et rose pÃ¢les,
   pensÃ©s pour du fond sombre). Ils n'apparaissent qu'APRÃS une action. */
:root[data-theme="clair"] .alert.success {
  color: var(--vsc-ok) !important;
  background: var(--vsc-ok-soft) !important;
  border-color: rgba(18, 133, 79, .28) !important;
}
:root[data-theme="clair"] .alert.error {
  color: var(--vsc-err) !important;
  background: var(--vsc-err-soft) !important;
  border-color: rgba(200, 50, 79, .28) !important;
}

/* ââ Facturation / Affiliation âââââââââââââââââââââââââââââââââââââââââââ */
:root[data-theme="clair"] .plan__tag,
:root[data-theme="clair"] .cyhint,
:root[data-theme="clair"] .meter__hd .k,
:root[data-theme="clair"] .meter__hd .v,
:root[data-theme="clair"] .px,
:root[data-theme="clair"] .card .d,
:root[data-theme="clair"] .sechd p,
:root[data-theme="clair"] .card p,
:root[data-theme="clair"] #payBody div,
:root[data-theme="clair"] #meterMax { color: var(--vsc-ink-3) !important; }
:root[data-theme="clair"] .plan__price .eq,
:root[data-theme="clair"] #planEq { color: var(--vsc-vio) !important; }
:root[data-theme="clair"] .wsm .v,
:root[data-theme="clair"] .estbox .v,
:root[data-theme="clair"] #refUrl,
:root[data-theme="clair"] .big { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .slhd .k,
:root[data-theme="clair"] .tabs .tab { color: var(--vsc-ink-3) !important; }
:root[data-theme="clair"] .tabs .tab.on { color: #fff !important; }
:root[data-theme="clair"] .soon,
:root[data-theme="clair"] .df { color: #1256a3 !important; background: rgba(18,86,163,.10) !important; }
/* SÃ©lecteur Mensuel / Trimestriel / Annuel : le violet du segment actif est
   Ã©crit en dur (#8c66ff) â trop clair pour porter du blanc. */
:root[data-theme="clair"] .cyseg > button { color: var(--vsc-ink-3) !important; }
:root[data-theme="clair"] .cyseg > button.on { background: var(--vsc-vio) !important; color: #fff !important; }

/* ââ Guide âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */
:root[data-theme="clair"] .sg__n,
:root[data-theme="clair"] .prog__hd span { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .sg,
:root[data-theme="clair"] .sg__h { background: var(--vsc-card) !important; }
/* â ï¸ Ces deux-lÃ  ne se voient QU'UNE FOIS UN ARTICLE OUVERT â la page
   d'accueil du guide est propre. C'est exactement la leÃ§on des Â« Ã©tats
   profonds Â» : ouvrir, dÃ©rouler, cliquer, sinon on ne teste que la faÃ§ade. */
:root[data-theme="clair"] .sb__home { color: var(--vsc-ink-2) !important; }
/* Mon serveur : sous-titre des lignes, et le rouge de la page (--red) qui
   sert aux actions destructrices. */
:root[data-theme="clair"] .rb__ph .s,
:root[data-theme="clair"] .stage .s { color: var(--vsc-ink-3) !important; }
/* â ï¸ MÃªme principe que l'Ã©cran du tÃ©lÃ©phone : `.cl-load` est l'Ã©cran d'attente
   DU NAVIGATEUR DISTANT (fond #0b0b11 volontaire). Il garde des encres
   claires â la rÃ¨gle gÃ©nÃ©rique ci-dessus le repeindrait en sombre sur sombre. */
:root[data-theme="clair"] .cl-load { color: #e9e7f0 !important; }
:root[data-theme="clair"] .cl-load .s { color: #b9b3cf !important; }
/* Mon serveur : le menu de choix de session (#16161f en dur, comme celui de
   la Configuration) et les deux couleurs du bandeau d'accueil. */
:root[data-theme="clair"] .sessmenu {
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair-2) !important;
  box-shadow: var(--vsc-shadow-pop) !important;
}
:root[data-theme="clair"] .sessmenu button:hover { background: var(--vsc-card-3) !important; }
:root[data-theme="clair"] .cl-hero p { color: var(--vsc-ink-2) !important; }
:root[data-theme="clair"] .cl-hero p b { color: var(--vsc-vio) !important; }
:root[data-theme="clair"] .cl-etat.off { color: var(--vsc-ink-3) !important; }
/* LibellÃ©s de la fenÃªtre Â« crÃ©er une session Â» : ils utilisent l'encre la
   plus pÃ¢le (--ink-4), correcte pour un texte d'appoint mais pas pour
   l'Ã©tiquette d'un champ qu'on doit lire pour saisir. */
/* â ï¸ Ces fenÃªtres (`.cl-modal`) sont posÃ©es sur le <body>, PAS dans `.stage` :
   un sÃ©lecteur ancrÃ© sur la page ne les atteint pas. Et leur fond #15151f est
   Ã©crit en dur â d'oÃ¹ un texte sombre sur un panneau sombre tant que la
   SURFACE n'est pas corrigÃ©e elle aussi. C'est le rappel qu'il faut toujours
   traiter le couple fond + encre, jamais l'encre seule. */
:root[data-theme="clair"] .cl-modal {
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair-2) !important;
}
:root[data-theme="clair"] .cl-modal h3,
:root[data-theme="clair"] .cl-vide h3 { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .cl-modal .sub { color: var(--vsc-ink-3) !important; }

/* Boutons de la page Mon serveur : `.cl-btn` est un bouton FANTÃME
   (fond rgba(255,255,255,.04)) avec un libellÃ© blanc â invisible sur clair.
   â ï¸ `.cl-btn--open` est un vrai bouton PLEIN (dÃ©gradÃ© violet) : son blanc
   reste blanc, d'oÃ¹ le `:not()`. MÃªme piÃ¨ge que Â« Obtenir bordereaux Â». */
:root[data-theme="clair"] .cl-btn:not(.cl-btn--open) {
  background: var(--vsc-card-3) !important;
  border-color: var(--vsc-hair-2) !important;
  color: var(--vsc-ink) !important;
}
:root[data-theme="clair"] .cl-btn--del { color: var(--vsc-err) !important; }
:root[data-theme="clair"] .cl-modal input {
  background: var(--vsc-card-3) !important;
  border-color: var(--vsc-hair-2) !important;
  color: var(--vsc-ink) !important;
}
:root[data-theme="clair"] .cl-modal .row .no {
  background: var(--vsc-card-3) !important;
  color: var(--vsc-ink-2) !important;
}
:root[data-theme="clair"] .cl-warn {
  background: rgba(255, 190, 80, .20) !important;
  border-color: rgba(160, 110, 0, .38) !important;
  color: #7a5500 !important;
}
:root[data-theme="clair"] .cl-err { color: var(--vsc-err) !important; }
:root[data-theme="clair"] .cl-modal label,
:root[data-theme="clair"] .cl-modal p.sub,
:root[data-theme="clair"] .stage label,
:root[data-theme="clair"] .stage p.sub { color: var(--vsc-ink-3) !important; }
:root[data-theme="clair"] .stage,
:root[data-theme="clair"] body { --red: var(--vsc-err); }
:root[data-theme="clair"] .mono { color: var(--vsc-vio) !important; }


/* âââ 6. RÃ´les de texte partagÃ©s par plusieurs pages ââââââââââââââââââââââ
   Quatre classes reviennent partout comme Â« titre Â», Â« secondaire Â» ou
   Â« Ã©tiquette Â». Les traiter une fois ici Ã©vite de rÃ©pÃ©ter la mÃªme rÃ¨gle
   dans chaque section â et couvre les Ã©crans pas encore auditÃ©s.          */
:root[data-theme="clair"] .panel .t,
:root[data-theme="clair"] .card .t,
:root[data-theme="clair"] .name,
:root[data-theme="clair"] .email,
:root[data-theme="clair"] .pt { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .panel .d,
:root[data-theme="clair"] .card .d,
:root[data-theme="clair"] .lbl,
:root[data-theme="clair"] .pd,
:root[data-theme="clair"] .panel p,
:root[data-theme="clair"] .wrap > p { color: var(--vsc-ink-3) !important; }
:root[data-theme="clair"] .tag-actif  { color: #1256a3 !important; background: rgba(18,86,163,.10) !important; }
:root[data-theme="clair"] .tag-invite { color: #8a5a00 !important; background: rgba(138,90,0,.12) !important; }
:root[data-theme="clair"] .btn-retire { color: #b3223c !important; }
:root[data-theme="clair"] .btn-amber,
:root[data-theme="clair"] .btn-amber span {
  color: #8a5a00 !important;
  background: rgba(138,90,0,.12) !important;
  border-color: rgba(138,90,0,.30) !important;
}
:root[data-theme="clair"] .btn-ghost,
:root[data-theme="clair"] .btn-ghost span { color: var(--vsc-ink-2) !important; }
:root[data-theme="clair"] .btn-ghost {
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair-2) !important;
}


/* âââ 7. Couleurs Ã©crites EN LIGNE par du JS ââââââââââââââââââââââââââââââ
   Le Panel admin (et quelques blocs ailleurs) est construit en innerHTML
   avec des style="color:#â¦". Un !important de feuille de style l'emporte
   sur un style en ligne SANS !important : on les rattrape donc par
   sÃ©lecteur d'attribut.
   â ï¸ Le :not() est indispensable â le blanc posÃ© sur un fond violet ou
   orange en ligne (boutons pleins, dÃ©gradÃ©s) doit rester blanc.           */
:root[data-theme="clair"] [style*="color:#fff"]:not([style*="linear-gradient"]):not([style*="#7a52ff"]),
:root[data-theme="clair"] [style*="color:#e7e0ff"] { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] [style*="color:#8e7ed0"],
:root[data-theme="clair"] [style*="color:#b8afd0"],
:root[data-theme="clair"] [style*="color:#cdbff0"],
:root[data-theme="clair"] [style*="color:#5a5478"] { color: var(--vsc-ink-3) !important; }
:root[data-theme="clair"] [style*="color:#c4b3ff"],
:root[data-theme="clair"] [style*="color:#c9b8ff"] { color: var(--vsc-vio) !important; }
:root[data-theme="clair"] [style*="color:#ff8a8a"] { color: var(--vsc-err) !important; }
:root[data-theme="clair"] [style*="color:#5be0a0"] { color: var(--vsc-ok) !important; }
:root[data-theme="clair"] .usr-plan {
  background: var(--vsc-card) !important;
  color: var(--vsc-vio) !important;
  border-color: var(--vsc-hair-2) !important;
}

/* ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   8. LA COQUE MOBILE
   ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   â ï¸â ï¸ CETTE SECTION A MANQUÃ AU PREMIER JET, ET LA RAISON VAUT D'ÃTRE ÃCRITE :
   mon auditeur tournait dans un iframe de 1500 px. Or la coque ne se monte
   QU'EN DESSOUS DE 860 px â elle n'existait donc pas au moment du test, et
   les 15 pages sortaient Â« 0 dÃ©faut Â» en toute bonne foi. Un audit menÃ© Ã  une
   seule largeur ne teste qu'un seul des deux dashboards.
   RÃ©sultat Ã  l'Ã©cran : barres noires, et surtout des cartes de menu BLANCHES
   avec un libellÃ© BLANC â des rectangles vides.

   `vs-mobile.css` a sa PROPRE palette (`--vsm-*`), indÃ©pendante du thÃ¨me
   bureau : c'est elle qu'on remappe. On la traite au `:root` pour ne rien
   oublier, puis on REND ses valeurs sombres au studio photo â voir plus bas.
   ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */
@media (max-width: 860px) {

  :root[data-theme="clair"] {
    --vsm-bg:      var(--vsc-bg);
    --vsm-card:    var(--vsc-card);
    --vsm-card-2:  var(--vsc-card-3);
    --vsm-line:    var(--vsc-hair);
    --vsm-line-2:  var(--vsc-hair-2);
    --vsm-txt:     var(--vsc-ink);
    --vsm-dim:     var(--vsc-ink-3);
    /* â ï¸ L'accent descend de #a78bfa (lavande, pensÃ©e pour du noir) au violet
       de marque : il sert Ã  la fois d'ENCRE sur fond clair (onglet actif) et
       de dÃ©gradÃ© sous du blanc (bouton central, avatar). Les deux tiennent
       avec un violet foncÃ© ; l'inverse Ã©tait faux dans un sens sur deux. */
    --vsm-accent:   var(--vsc-vio);
    --vsm-accent-2: var(--vsc-vio-2);
  }

  /* â Barres haute et basse : le fond est Ã©crit en dur (rgba(10,10,15,â¦)),
       aucune variable ne le porte. Elles restent translucides pour garder
       l'effet de dÃ©poli au dÃ©filement. â */
  :root[data-theme="clair"] .vsm-appbar  { background: rgba(255, 255, 255, .88) !important; }
  :root[data-theme="clair"] .vsm-tabbar  { background: rgba(255, 255, 255, .94) !important; }
  :root[data-theme="clair"] .vsm-ico:active { background: rgba(23, 20, 43, .07) !important; }
  /* Le liserÃ© de la pastille de prÃ©sence imite le fond de la barre. */
  :root[data-theme="clair"] .vsm-ico__dot { border-color: #fff !important; }

  /* â Menu plein Ã©cran â */
  :root[data-theme="clair"] .vsm-drawer {
    background: var(--vsc-card) !important;
    box-shadow: 0 -20px 60px rgba(23, 20, 43, .22) !important;
  }
  :root[data-theme="clair"] .vsm-drawer__grab { background: rgba(23, 20, 43, .18) !important; }
  :root[data-theme="clair"] .vsm-grp__t       { color: var(--vsc-ink-3) !important; }

  /* â ï¸ LE DÃFAUT DE LA CAPTURE : `.vsm-mi` prend son fond de `--vsm-card`
     (donc blanc une fois remappÃ©) mais son libellÃ© est en `--vsm-txt`, et
     l'Ã©tat actif force `color:#fff` EN DUR â d'oÃ¹ des cartes blanches vides.
     Le fond suit la variable, l'encre doit suivre aussi. */
  :root[data-theme="clair"] .vsm-mi        { color: var(--vsc-ink) !important; }
  :root[data-theme="clair"] .vsm-mi--big i { color: var(--vsc-ink-3) !important; }
  :root[data-theme="clair"] .vsm-mi.is-on {
    background: var(--vsc-vio-tint) !important;
    border-color: rgba(106, 62, 239, .38) !important;
    color: var(--vsc-vio) !important;
  }
  :root[data-theme="clair"] .vsm-mi--red,
  :root[data-theme="clair"] .vsm-mi--red svg { color: var(--vsc-err) !important; }
  :root[data-theme="clair"] .vsm-mi--red { border-color: rgba(200, 40, 40, .30) !important; }

  /* â ï¸â ï¸ LE STUDIO PHOTO RESTE SOMBRE â ce n'est pas un oubli.
     C'est un Ã©cran d'appareil photo plein cadre : un fond blanc Ã©blouit dans
     la main, fausse le jugement des couleurs de l'article et ferait ressortir
     le vÃªtement d'une faÃ§on qui ne correspond pas au rendu de l'annonce.
     MÃªme raison que l'Ã©cran du tÃ©lÃ©phone de dÃ©monstration en Configuration.
     On lui REND donc les valeurs sombres aprÃ¨s le remappage global. */
  :root[data-theme="clair"] .vsm-studio,
  :root[data-theme="clair"] .vsm-photov {
  /* â ï¸ 27/08/2026 â ces rÃ¨gles forÃ§aient le studio en SOMBRE dans le thÃ¨me
     clair (correctif du 25/08, quand le studio n'avait pas de version claire).
     Bill demande le mode blanc jusque dans la prise de photo : on repeint donc
     en clair au lieu de re-forcer le sombre. Le fond de l'APERÃU reste neutre
     sombre (rÃ¨gle plus bas) â juger une photo sur du blanc fausse la lecture
     de l'exposition. */
  --vsm-bg: #f4f3f9;
  --vsm-card: #ffffff;
  --vsm-card-2: #f0eef8;
  --vsm-line: rgba(23,20,43,.12);
  --vsm-line-2: rgba(23,20,43,.20);
  --vsm-txt: #17142b;
  --vsm-dim: #544f6d;
  background: #f4f3f9;
  color: #17142b;
}
  /* â ï¸â ï¸ RENDRE LES VARIABLES NE SUFFIT PAS.
     La rÃ¨gle gÃ©nÃ©rique Â« Champs de saisie Â» (section 3) pose background / border
     / color EN DUR avec !important sur TOUT `input`, `textarea`, `select`. Elle
     gagne donc contre `.vsm-studio__sku input { background:none }`, et le champ
     Â« nÂ° stock Â» devenait un gros bloc BLANC qui dÃ©bordait de la barre du studio
     (signalÃ© par Bill le 25/08, capture Ã  l'appui).
     Corollaire Ã  retenir : quand on rÃ©-assombrit une surface, il faut rendre les
     variables ET neutraliser les dÃ©clarations directes qui la visent. */
  /* â ï¸ Les `:not()` sont OBLIGATOIRES, ce n'est pas de la dÃ©coration : entre deux
     dÃ©clarations `!important`, c'est la SPÃCIFICITÃ qui tranche. La rÃ¨gle gÃ©nÃ©rique
     vaut (0,4,1) grÃ¢ce Ã  ses deux `:not()` ; sans eux, la nÃ´tre ne pÃ¨se que (0,3,1)
     et perd â mesurÃ© en vrai Ã  390 px : le champ restait blanc. */
  :root[data-theme="clair"] .vsm-studio input:not([type="checkbox"]):not([type="radio"]),
  :root[data-theme="clair"] .vsm-studio textarea,
  :root[data-theme="clair"] .vsm-studio select {
  --vsm-card: #ffffff;
  --vsm-txt: #17142b;
  background: #ffffff;
  color: #17142b;
}
  /* Le textarea de la feuille Â« DÃ©tail Â» a, lui, son propre fond sombre. */
  :root[data-theme="clair"] .vsm-note textarea {
  --vsm-card: #ffffff;
}
  :root[data-theme="clair"] .vsm-studio input::placeholder,
  :root[data-theme="clair"] .vsm-studio textarea::placeholder {
    color: rgba(255, 255, 255, .34) !important;
  }
}

/* ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   9. MODE PERSONNALISATION DE LA VUE D'ENSEMBLE (`vs-board.css` / `vs-stats.css`)
   ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   â ï¸ Encore une famille d'ÃTATS que l'audit n'ouvrait pas : ces Ã©crans
   n'existent que si l'on clique Â« Personnaliser Â». Ils ont leur propre
   palette, dont 5 jetons n'Ã©taient mappÃ©s NULLE PART â `--panel2`, `--vio2`,
   `--vio-tint2`, `--vio-bd`, `--pop-tint`. Ils ne servent qu'ici et dans
   `js/vs-stats3.js` (vÃ©rifiÃ©), donc les mapper au `:root` ne peut rien
   dÃ©border ailleurs.
   ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */
:root[data-theme="clair"] {
  --panel2:    var(--vsc-card-3);
  --vio2:      var(--vsc-vio-2);
  --vio-tint2: rgba(106, 62, 239, .16);
  --vio-bd:    rgba(106, 62, 239, .42);
  --pop-tint:  rgba(74, 112, 0, .14);
}

/* La barre du mode personnalisation : son fond est un DÃGRADÃ Ã©crit en dur
   (#1a1a22 â #131319), aucune variable ne le porte. MÃªme raisonnement que la
   barre d'action de Publier â elle est permanente tant qu'on personnalise,
   donc elle s'Ã©claircit. */
:root[data-theme="clair"] .edbar {
  background: linear-gradient(180deg, #ffffff, var(--vsc-card-2)) !important;
  box-shadow: 0 16px 40px rgba(23, 20, 43, .18) !important;
}

/* â ï¸ Le voile du bas des vignettes d'aperÃ§u (Â« Ajouter des blocs Â») fond vers
   `rgba(18,18,24,.7)` : sur une vignette claire il posait une bande grise en
   travers de chaque aperÃ§u. */
:root[data-theme="clair"] .gcard__prev::after {
  background: linear-gradient(180deg, transparent 55%, rgba(255, 255, 255, .75)) !important;
}
:root[data-theme="clair"] .gcard { background: var(--vsc-card-2) !important; }

/* â ï¸â ï¸ CSS INJECTÃ PAR JAVASCRIPT â la derniÃ¨re cachette.
   `js/vs-ov.js` construit une feuille de style Ã  la volÃ©e : ses rÃ¨gles
   n'apparaissent dans AUCUN fichier .css, donc mes balayages de couleurs en
   dur (qui lisent les fichiers) ne pouvaient pas les voir, et elles ne
   s'appliquent qu'en mode personnalisation. D'oÃ¹ les petits boutons noirs de
   chaque bloc sur la capture.
   â ï¸ Une feuille injectÃ©e arrive APRÃS la nÃ´tre dans l'ordre du document :
   seul `!important` la reprend. */
:root[data-theme="clair"] .pcbar button {
  background: var(--vsc-card-3) !important;
  border-color: var(--vsc-hair-2) !important;
  color: var(--vsc-ink-2) !important;
}
:root[data-theme="clair"] .pcbar button:hover { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .pcbar .sz.on { color: var(--vsc-vio) !important; }
/* Renommage d'un onglet : le champ hÃ©rite d'un `color:#fff` en dur. */
:root[data-theme="clair"] .tab2 input { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .tab2 .tx:hover {
  background: rgba(23, 20, 43, .10) !important;
  color: var(--vsc-ink) !important;
}

/* â ï¸â ï¸ LE FOND DE `<html>` LUI-MÃME â trouvÃ© en mobile, mais le dÃ©faut est GLOBAL.
   `css/style.css` (chargÃ© par les 15 pages) pose `html{background:#08080c}` Â« pour
   Ã©viter tout flash blanc entre deux pages Â», et `dashboard.html` le redouble en
   ligne. Le `body` Ã©tait bien remappÃ© en clair, `html` non.
   Personne ne le voit sur une page pleine â mais dÃ¨s qu'on TIRE l'Ã©cran au-delÃ  du
   contenu (l'Ã©lastique d'iOS/Android, l'overscroll du trackpad), une bande NOIRE
   apparaÃ®t en haut et en bas. C'est la surface la plus grande du site et celle
   qu'aucun audit d'Ã©lÃ©ment ne regarde, parce qu'elle n'appartient Ã  aucun Ã©cran. */
:root[data-theme="clair"] { background: var(--vsc-bg) !important; }

/* ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   10. LES FENÃTRES CONSTRUITES PAR JAVASCRIPT (signalÃ©es par Bill, 24/08)
   ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   â ï¸â ï¸ TROISIÃME FAMILLE D'ANGLE MORT, ET LA PLUS COÃTEUSE.
   Ma passe Â« Ã©lÃ©ments cachÃ©s Â» force l'affichage de ce qui EXISTE dans le DOM
   avec `opacity:0` ou `display:none`. Mais ces fenÃªtres-lÃ  n'existent pas du
   tout tant qu'on ne clique pas : le JS les CRÃE au moment de l'ouverture.
   Aucun balayage du DOM ne peut les voir. Il faut cliquer pour de vrai.
   RÃ©sultat chez Bill : Â« Nouveau modÃ¨le Â» et Â« Nouveau prompt Â» entiÃ¨rement
   noires, et la fenÃªtre Â« Compte de publication Â» claire mais dont les noms
   de comptes Ã©taient invisibles (blanc sur blanc) â on ne voyait que les
   avatars.
   ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */

/* â FenÃªtres de la Configuration (`.mmodal`, fond #16161f en dur) â */
:root[data-theme="clair"] .mmodal {
  background: var(--vsc-card) !important;
  border-color: var(--vsc-hair-2) !important;
  box-shadow: 0 30px 70px rgba(23, 20, 43, .22) !important;
}
:root[data-theme="clair"] .mmodal__h h4 { color: var(--vsc-ink) !important; }
/* â ï¸ Corollaire connu : une fois la fenÃªtre blanche, les champs et boutons
   posÃ©s sur `rgba(255,255,255,.03)` deviennent invisibles Ã  leur tour. */
:root[data-theme="clair"] .fld,
:root[data-theme="clair"] .fta,
:root[data-theme="clair"] .bigseg button {
  background: var(--vsc-card-3) !important;
  border-color: var(--vsc-hair-2) !important;
}
:root[data-theme="clair"] .bigseg button.on {
  background: var(--vsc-vio-tint) !important;
  border-color: rgba(106, 62, 239, .40) !important;
}

/* â FenÃªtre de choix de Publier (compte, catÃ©gorie) : la LIGNE porte un
     `color:#fff` en dur, alors que la fenÃªtre est dÃ©jÃ  claire. C'est le cas
     le plus traÃ®tre : la fenÃªtre a l'air correcte, seul le texte manque. â */
:root[data-theme="clair"] .catrow { color: var(--vsc-ink) !important; }
:root[data-theme="clair"] .catrow:hover { background: var(--vsc-card-3) !important; }
:root[data-theme="clair"] .chsw { border-color: var(--vsc-hair-2) !important; }

/* â Survol d'une carte de compte (Vue d'ensemble) : `#16161d` en dur.
     Un Ã©tat :hover n'apparaÃ®t sur AUCUNE capture d'audit â il n'existe que
     sous le curseur. C'est la carte noire de la capture de Bill. â */
:root[data-theme="clair"] .acct:hover { background: var(--vsc-card-2) !important; }



/* âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   11. SURCOUCHES TRANSLUCIDES BLANCHES â la famille entiÃ¨re, d'un coup
   âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   Tout le dashboard emploie `rgba(255,255,255,.03 â .10)` pour POSER une
   surface lÃ©gÃ¨rement plus claire sur un fond sombre : onglet actif, pastille
   Ã©teinte, bouton fantÃ´me, rail d'interrupteur. Sur du blanc, ces couches
   ne posent RIEN â elles disparaissent purement et simplement.

   â ï¸ Le cas grave n'est pas le bouton discret, c'est l'ÃTAT ACTIF : un
   onglet Â« sÃ©lectionnÃ© Â» dont la surbrillance est invisible ne dit plus Ã 
   personne oÃ¹ il se trouve dans la page.

   â ï¸ Ces Ã©lÃ©ments Ã©chappaient Ã  l'audit de contraste (leur TEXTE est
   lisible â c'est leur FOND qui manque) et Ã  l'audit des surfaces sombres
   (leur fond n'est pas sombre, il est absent). D'oÃ¹ une sonde dÃ©diÃ©e :
   fond blanc d'opacitÃ© < .16, posÃ© sur une surface claire, sans bordure.

   La transposition est mÃ©canique : blanc translucide sur sombre
   â encre translucide sur clair, Ã  opacitÃ© comparable.                    */

/* Pastilles d'automatisation des cartes de compte (Vue d'ensemble, Stats) */
:root[data-theme="clair"] .tg { background: rgba(23, 20, 43, .05) !important; }
:root[data-theme="clair"] .tg:hover { background: rgba(23, 20, 43, .09) !important; }
/* `.tg.on` est dÃ©jÃ  en teinte violette â ne pas y toucher. */

/* Nav latÃ©rale de la Configuration : l'entrÃ©e COURANTE */
:root[data-theme="clair"] .snav:hover { background: rgba(23, 20, 43, .05) !important; }
:root[data-theme="clair"] .snav.on { background: rgba(23, 20, 43, .07) !important; }

/* Onglets et filtres actifs â Colis et Bloc-note */
:root[data-theme="clair"] .seg button.on,
:root[data-theme="clair"] .hsort button.on,
:root[data-theme="clair"] .viewseg button.on,
:root[data-theme="clair"] .agmode button.on,
:root[data-theme="clair"] .filt.on { background: rgba(23, 20, 43, .08) !important; }

/* Rail d'un interrupteur ÃTEINT : sans fond, on ne voit plus qu'il existe */
:root[data-theme="clair"] .sw { background: rgba(23, 20, 43, .08) !important; }

/* Boutons fantÃ´mes au survol */
:root[data-theme="clair"] .btn-ghost:hover,
:root[data-theme="clair"] .btn-pdf:hover,
:root[data-theme="clair"] .undo:hover,
:root[data-theme="clair"] .gbtn.stop:hover,
:root[data-theme="clair"] .btn-reset:hover,
:root[data-theme="clair"] .bacct__cfg:hover,
:root[data-theme="clair"] .acct__cfg:hover,
:root[data-theme="clair"] .histtoggle:hover .histchev { background: rgba(23, 20, 43, .06) !important; }



/* âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   12. SURVOLS PEINTS EN NOIR EN DUR â la famille que RIEN ne peut voir
   âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   Les grandes tuiles cliquables du dashboard (carte de compte, raccourci,
   mini-chiffre, tuile de stat) s'Ã©clairent au survol en passant Ã  `#16161d`.
   Sur un fond blanc, la tuile devient NOIRE sous le curseur et son texte
   sombre disparaÃ®t. C'est la carte de compte noire des captures de Bill.

   â ï¸ POURQUOI AUCUN AUDIT NE POUVAIT LES TROUVER : un `:hover` n'existe
   que sous le curseur. Il n'apparaÃ®t sur aucune capture, aucune passe DOM
   ne le dÃ©clenche, et la sonde des surcouches translucides ne le voit pas
   non plus (ce n'est pas du blanc translucide, c'est un noir opaque).
   La seule mÃ©thode qui les sort : grepper les rÃ¨gles `:hover` qui posent
   un `background` dont la LUMINANCE est basse.

   â ï¸ Faux positifs Ã©cartÃ©s : les `#2b0207` de la messagerie sont des
   couleurs de TEXTE posÃ©es sur de l'ambre plein (Ã©tats Â« litige Â») â elles
   restent justes en clair. Ne pas les Â« corriger Â».                        */

:root[data-theme="clair"] a.mini:hover,
:root[data-theme="clair"] .qtile:hover,
:root[data-theme="clair"] .acct:hover,
:root[data-theme="clair"] a.bacct:hover,
:root[data-theme="clair"] .bacct:hover,
:root[data-theme="clair"] .acct--add:hover,
:root[data-theme="clair"] .bacct--add:hover,
:root[data-theme="clair"] .stat:hover,
:root[data-theme="clair"] .vsw .acct:hover,
:root[data-theme="clair"] .vsw .acct--add:hover,
:root[data-theme="clair"] .vsw .qtile:hover { background: var(--vsc-card-3) !important; }

/* Les deux tuiles Â« + Â» gardent leur intention : le survol vire au violet */
:root[data-theme="clair"] .acct--add:hover,
:root[data-theme="clair"] .bacct--add:hover,
:root[data-theme="clair"] .vsw .acct--add:hover { color: var(--vsc-vio) !important; }

/* ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   13. TEXTES PEINTS PAR UN DÃGRADÃ DÃCOUPÃ â la famille entiÃ¨re
   ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   SignalÃ© par Bill (24/08) : Â« le 69 on le voit Ã  peine Â». C'est le grand
   compteur de Â« Total fiches gÃ©nÃ©rÃ©es Â» (Statistiques), peint par
   `linear-gradient(180deg, #fff 40%, #c4b3ff)` dÃ©coupÃ© sur le texte. Sur du
   blanc, la moitiÃ© haute du chiffre est littÃ©ralement invisible.

   â ï¸â ï¸ POURQUOI MES SONDES NE LE VOYAIENT PAS, ET C'EST STRUCTUREL :
   un texte en dÃ©gradÃ© dÃ©coupÃ© a `-webkit-text-fill-color: transparent`. Mes
   auditeurs lisaient cette valeur, la trouvaient Â« transparente Â», donc
   invisible, et l'Ã©cartaient comme du contenu masquÃ© â exactement le mÃªme
   filtre anti-bruit qui m'avait dÃ©jÃ  cachÃ© les infobulles. Le texte est
   pourtant bien Ã  l'Ã©cran : il est peint par le `background-image`, que la
   sonde ne sait pas mesurer.
   **RÃ¨gle de sonde : `text-fill-color` transparent + `background-clip: text`
   ne signifie pas "invisible", Ã§a signifie "peint par le dÃ©gradÃ© â Ã 
   vÃ©rifier Ã  la main".** Ne plus jamais l'Ã©carter silencieusement.

   â ï¸ Il ne suffit JAMAIS de poser `color` : tant que `-webkit-text-fill-color`
   reste transparent, la couleur n'est pas utilisÃ©e. Il faut les trois :
   couper le dÃ©gradÃ© (`background-image: none`), rendre le fill opaque, et
   poser `color` pour les navigateurs sans prÃ©fixe.

   RecensÃ© par `grep -rn "background-clip"` sur tout le dÃ©pÃ´t â la leÃ§on des
   Â« 3 gÃ©nÃ©rateurs de hashtags qui divergent Â» : on traite la famille, pas
   l'occurrence signalÃ©e. `.kpi__v` Ã©tait dÃ©jÃ  couvert (Â§4), les autres non.
   Les pages publiques (landing-v2/3/4) restent sombres : hors pÃ©rimÃ¨tre.  */

:root[data-theme="clair"] .big .n,
:root[data-theme="clair"] .vsw .big .n,
:root[data-theme="clair"] .metric-value,
:root[data-theme="clair"] .gradient-text {
  background-image: none !important;
  -webkit-text-fill-color: var(--vsc-ink) !important;
  color: var(--vsc-ink) !important;
}

/* Variante texte du sigle (pages publiques) : mÃªme procÃ©dÃ©, on garde la
   couleur de marque plutÃ´t que l'encre â c'est un logo, il reste violet. */
:root[data-theme="clair"] .nav-brand-mark {
  background-image: none !important;
  -webkit-text-fill-color: var(--vsc-vio) !important;
  color: var(--vsc-vio) !important;
}

/* ââ LOGO DE LA BARRE DU HAUT ââââââââââââââââââââââââââââââââââââââââââââ
   `assets/logo-light.png` a le Â« V Â» en BLANC (il est fait pour un fond
   sombre) : sur fond blanc, la premiÃ¨re lettre de la marque disparaÃ®t, il ne
   reste que Â« STORM Â». `assets/logo-dark.png` est exactement le mÃªme dessin
   avec le V en noir â il existait dÃ©jÃ  dans le dÃ©pÃ´t, il n'Ã©tait simplement
   jamais servi. Une seule rÃ¨gle couvre les 18 pages : toutes utilisent
   `.dash-brand img`.
   â ï¸ On ne peut pas changer un attribut `src` en CSS ; `content: url()` sur
   une balise <img> remplace bien l'image rendue (Chrome/Safari/Firefox). Le
   chemin est relatif Ã  CE fichier (css/), d'oÃ¹ le `../`. */
:root[data-theme="clair"] .dash-topnav .dash-brand img,
:root[data-theme="clair"] .dash-brand img {
  content: url("../assets/logo-dark.png");
  width: 149px;
}
/* Nouveau dessin (28/08) plus large (rocket + texte) : largeur fixee
   pour ne pas elargir la barre du haut (auto-largeur suivait le ratio
   de l'image, plus plat que l'ancienne, et debordait). */
@media (max-width: 860px) {
  :root[data-theme="clair"] .dash-topnav .dash-brand img { width: 114px; }
}

/* ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   14. LIBELLÃS RESTÃS BLANCS SUR LES ÃTATS ACTIFS
   ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   â ï¸â ï¸ CE DÃFAUT, C'EST MOI QUI L'AI CRÃÃ, EN Â§11. En transformant les
   surcouches `rgba(255,255,255,.08)` en encre translucide `rgba(23,20,43,.08)`,
   j'ai rendu l'onglet actif visibleâ¦ mais son TEXTE Ã©tait blanc, calibrÃ© pour
   l'ancien fond sombre. RÃ©sultat mesurÃ© en prod : Â« Ã imprimer Â» (Colis) et
   Â« Note Â» (Bloc-note) en blanc sur un gris Ã  95 % de clartÃ© â illisibles.
   C'est mot pour mot la leÃ§on dÃ©jÃ  Ã©crite ce mois-ci : **traiter le COUPLE
   fond + encre, jamais l'un sans l'autre.** Changer un fond oblige Ã  relire la
   couleur du texte posÃ© dessus, dans les deux sens.

   TrouvÃ© par la sonde Â« texte quasi blanc sur fond clair Â», relancÃ©e sur les
   15 pages APRÃS le correctif Â§11 â pas avant. Une correction de surface se
   re-audite ; elle dÃ©place le problÃ¨me plus souvent qu'elle ne le supprime.

   â ï¸ Faux positifs Ã©cartÃ©s Ã  la mesure, NE PAS Â« corriger Â» :
   Â· `.it__dots` (Stock, 470 occurrences) â blanc sur pastille sombre
     translucide posÃ©e SUR la photo : parfaitement lisible ;
   Â· `.btn-primary`, boutons d'action â fond en dÃ©gradÃ© violet (`background-image`),
     que la sonde ne lit pas dans `backgroundColor` ;
   Â· `.av` / `.avatar` / `.fav` â initiales sur couleur gÃ©nÃ©rÃ©e par compte,
     dÃ©jÃ  documentÃ©. */
:root[data-theme="clair"] .snav.on,
:root[data-theme="clair"] .seg button.on,
:root[data-theme="clair"] .hsort button.on,
:root[data-theme="clair"] .viewseg button.on,
:root[data-theme="clair"] .agmode button.on,
:root[data-theme="clair"] .bdx-tab.on,
:root[data-theme="clair"] .filt.on { color: var(--vsc-ink) !important; }

/* Compteurs des barres de progression (Mission Control) : `<b>` blanc posÃ©
   directement sur la carte blanche, sans aucun fond Ã  lui. */
:root[data-theme="clair"] .bmeta,
:root[data-theme="clair"] .bmeta b { color: var(--vsc-ink) !important; }

/* ============================================================
   15. TEXTES CALIBRES POUR LE SOMBRE (27/08/2026)
   ------------------------------------------------------------
   Trouves par une sonde de contraste qui OUVRE les blocs caches
   dont le parent est visible : les bannieres contextuelles ne
   s affichent que dans un etat precis (contexte employe) et
   echappaient donc a tous les audits precedents.
   â ï¸ Une couleur ecrite EN DUR dans un attribut style= ne peut
   pas etre corrigee par une feuille : il faut passer par une
   variable cote HTML. Les blocs ci-dessous fournissent la
   valeur claire ; le fallback du HTML reste la valeur sombre.
   ============================================================ */
:root[data-theme="clair"]{
  /* Banniere Â« Tu travailles pour X Â» (Publier, contexte employe) :
     mesure a 1.09:1 sur fond clair â invisible. */
  --vs-ban-bg: rgba(46,110,200,.10);
  --vs-ban-bd: rgba(46,110,200,.30);
  --vs-ban-ink: #234a7d;
  --vs-ban-str: #14304f;
  /* Boutons de mode des Statistiques (vs-stats3.js) : violet clair
     sur violet pale = 1.23:1. */
  --vs3-on-bg: rgba(140,102,255,.20);
  --vs3-on-ink: #4a2fb0;
  --vs3-off-ink: #5a5474;
}
/* Â« Mon serveur Â» : le quota etait ecrit en blanc sur une carte blanche. */
:root[data-theme="clair"] .cl-quota .v{ color: var(--vsc-ink-1,#17142b); }
/* Offres : prix barre et note de facturation, encre trop pale (3.08:1). */
:root[data-theme="clair"] .price .was,
:root[data-theme="clair"] .billnote{ color: #5a5474; }
/* Pastille de la cloche : blanc sur rouge vif = 2.97:1 en clair. */
:root[data-theme="clair"] .vs-bell-badge{ background: #cf2036; }
/* Stock : etiquettes d etat, toutes juste sous le seuil (3.76 a 4). */
:root[data-theme="clair"] .it__badge.b-sold{ color:#5b32a8; }
:root[data-theme="clair"] .it__badge.b-online{ color:#0c6b3d; }
:root[data-theme="clair"] .it__repub{ color:#a81b3c; }

/* ------------------------------------------------------------
   ZONES VOLONTAIREMENT SOMBRES â contrÃ´les natifs
   â ï¸ Le thÃ¨me clair pose Â« color-scheme: light Â» sur la racine.
   Le systeme repeint alors les elements NATIFS (curseur de saisie,
   surbrillance de selection, barres de defilement, fonds de
   champs sur iOS) en clair â y compris DANS le studio photo, qui
   reste noir. C est ce qui rend Â« le mode photo bizarre Â» sur
   telephone alors que tout est correct sur ordinateur : Chrome
   bureau ne rend presque aucun de ces controles.
   Meme levier que Â« select { color-scheme: dark } Â» de style.css.
   â ï¸ Ne pas retirer : sans lui le defaut ne se voit QUE sur mobile.
   ------------------------------------------------------------ */
:root[data-theme="clair"] .vsm-studio,
:root[data-theme="clair"] .vsm-note,
:root[data-theme="clair"] .vsm-photov,
:root[data-theme="clair"] .cl-load{ color-scheme: dark; }

/* ------------------------------------------------------------
   ENCRE DES PETITS LIBELLES (27/08/2026)
   Mesure : les intitules de champs (NÂ° STOCK, COMPLEMENT, COMPTE,
   PUBLIER SUR, TEMPLATE...) et les placeholders sortaient a 4.97:1.
   C est au-dessus du seuil AA, mais ils sont rendus en 9-10 px, en
   CAPITALES espacees : a cette taille le rendu est pale et fatigant
   (Â« presque illisible Â» â retour de Bill sur telephone).
   Une seule variable porte tout ce petit texte dans le dashboard.
   â ï¸ Ne concerne QUE le theme clair : le sombre garde sa valeur.
   ------------------------------------------------------------ */
:root[data-theme="clair"]{ --vsc-ink-4: #544f6d; }   /* 4.97:1 â ~6.9:1 */

/* ------------------------------------------------------------
   GRILLES A SEPARATEURS (27/08/2026) â Â« rectangles blancs chelous Â»
   Mecanisme mesure : .kpis / .minis / .accts / .qa sont des grilles
   dont le CONTENEUR fait la couleur des separateurs (rgba(23,20,43,.09))
   et dont les CELLULES (.kpi .mini .bacct .qtile) sont pleines, sans
   arrondi ni bordure. En sombre, cellule #121218 sur conteneur a peine
   teinte = ecart imperceptible : la grille se fond dans la page. En
   clair, cellule BLANCHE sur gris a 9 % = 32 points d ecart â bandes
   blanches franches. C est exactement ce que Bill voit.
   â ï¸ On ne touche PAS aux cellules : le blanc est la surface de
   lecture. C est le LIANT qui etait trop marque.
   ------------------------------------------------------------ */
:root[data-theme="clair"] .kpis,
:root[data-theme="clair"] .minis,
:root[data-theme="clair"] .accts,
:root[data-theme="clair"] .qa { background: rgba(23,20,43,.045); }
