/* âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
   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; }

/* ⚠️ 31/10/2026 (Bill : « plein d'endroits avec des rectangles blancs, ça fait
   dégueulasse ») — LA REGLE CI-DESSUS PEIGNAIT EN BLANC DES CHAMPS CONCUS TRANSPARENTS.
   Beaucoup de champs de V-Storm ne sont pas des boites : ce sont des zones de saisie
   POSEES DANS une pilule deja stylee (la loupe + le fond teinte + le bord arrondi sont
   portes par le conteneur, et l'input lui-meme est `background:none; border:0`).
   Mesure en direct sur « Rechercher une annonce » du Journal : conteneur `.fld`
   rgb(242,240,248), input force a rgb(255,255,255) avec 0px de bord → un rectangle
   blanc franc au milieu d'une pilule grise.
   On rend donc leur transparence a TOUS ces champs d'un coup. La liste vient du CSS
   lui-meme : ce sont les conteneurs qui declarent deja `background:none` sur leur input
   (`git grep` sur les feuilles du site), pas une liste devinee a l'oeil.
   Les champs autonomes (ceux qui portent leur propre bord) gardent le fond blanc.
   ⚠️ Les deux :not() ne sont PAS decoratifs : la regle globale plus haut en porte deux,
   ce qui lui donne une specificite de (0,4,1). Sans eux, cette regle-ci valait (0,3,1)
   et PERDAIT malgre son !important — teste en direct, le champ restait blanc. */
:root[data-theme="clair"] .amt input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .bn-search input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .box textarea,
:root[data-theme="clair"] .ddsrch input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .dstep input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .ed textarea,
:root[data-theme="clair"] .field input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .fld input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .fld select,
:root[data-theme="clair"] .hsearch input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .hsrch input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .med textarea,
:root[data-theme="clair"] .mp-delai input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .pr input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .rpop__in input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .sb__srch input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .search input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .selpill input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .selpill select,
:root[data-theme="clair"] .srch input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .stp input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .tagadd input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .vs-stepper input:not([type="checkbox"]):not([type="radio"]),
:root[data-theme="clair"] .vsm-studio__sku input:not([type="checkbox"]):not([type="radio"]) {
  background: transparent !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 */
/* 31/10/2026 (Bill : « on voit que le nom des couleurs ») — CETTE REGLE REPEIGNAIT
   TOUTES LES PASTILLES DE COULEUR EN GRIS. `.sw` sert a DEUX choses dans V-Storm :
   l'interrupteur on/off (pas de couleur en ligne) ET la pastille de couleur des
   legendes de graphe et du nuancier de Publier, qui porte sa teinte en style EN LIGNE.
   Avec `!important`, le gris de l'interrupteur gagnait meme contre le style en ligne :
   en theme clair, le nuancier « Couleur(s) » de Publier n'affichait plus que des noms,
   et les legendes des courbes perdaient aussi leur couleur. Le commentaire plus haut
   dans ce fichier disait deja que ces pastilles doivent garder leur couleur.
   On ne peut pas cibler les interrupteurs par [role="switch"] : plusieurs n'en ont pas
   (notifNews, maskSwitch, swBeta, aff-toggle...). On exprime donc la vraie regle :
   une pastille qui porte une couleur en ligne la garde, les autres prennent le gris. */
:root[data-theme="clair"] .sw:not([style*="background"]) { 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,
:root[data-theme="clair"] .vsm-appbar__logo img {
  content: url("../assets/logo-dark.png");
  width: 149px;
}
/* Appbar mobile (hauteur 30px) : largeur proportionnelle — le width:149px ci-dessus etire le logo (ratio 2.49 force en 4.97). */
:root[data-theme="clair"] .vsm-appbar__logo img { width: auto; }
/* 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); }


/* ------------------------------------------------------------
   TEXTES PASTEL SUR FOND CLAIR (01/11/2026) - audit de contraste
   Ces pastilles d'info gardaient en theme clair la couleur pensee
   pour le fond sombre. Posees sur du blanc elles tombaient a
   1,4-1,9:1 : le texte etait la, mais illisible.
   Le theme sombre n'est pas touche.
   ------------------------------------------------------------ */
:root[data-theme="clair"] .pcard__warn{ color:#8a5a00 }      /* 1,4:1 -> 6,4:1 */
:root[data-theme="clair"] .bdx-dl.ok{ color:#0f7a56 }        /* 1,9:1 -> 5,5:1 */
:root[data-theme="clair"] .bdx-dl.urgent{ color:#8a5a00 }
:root[data-theme="clair"] .bdx-dl.late{ color:#b3203a }

/* Survols ecrits en blanc en dur (Stock) : invisibles sur fond clair. */
:root[data-theme="clair"] .freset:hover{ color:var(--vsc-ink) }
:root[data-theme="clair"] .abtn--ghost{ background:rgba(23,20,43,.04) }
:root[data-theme="clair"] .abtn--ghost:hover{ color:var(--vsc-ink); background:rgba(23,20,43,.09) }

/* ------------------------------------------------------------
   CENTRE D'AIDE - BARRE DU HAUT (01/11/2026)
   aide.html garde le dialecte des pages publiques sur sa barre :
   `.nav{--text:#F3F3F8}`. Le theme clair rendait deja la barre
   BLANCHE (plus haut) mais pas son encre : « Tarifs »,
   « Ressources » et « Se deconnecter » etaient ecrits en blanc
   sur blanc - invisibles (1,1:1).
   On ne remappe PAS --text sur .nav : le menu deroulant
   .nav-dd-menu est volontairement sombre (#0f0f16), ses liens
   doivent rester clairs.
   ------------------------------------------------------------ */
:root[data-theme="clair"] .nav .nav-txt,
:root[data-theme="clair"] .nav .nav-dd-btn { color: var(--vsc-ink-2); }
:root[data-theme="clair"] .nav .nav-txt:hover,
:root[data-theme="clair"] .nav .nav-txt.active,
:root[data-theme="clair"] .nav .nav-dd-btn:hover,
:root[data-theme="clair"] .nav .nav-dd.open .nav-dd-btn,
:root[data-theme="clair"] .nav .nav-dd-btn.active { background: rgba(23,20,43,.06); color: var(--vsc-ink); }

/* Meme traitement du logo que la barre du dashboard : le « V » blanc
   de logo-light.png disparait sur fond blanc. */
:root[data-theme="clair"] .nav .brand img.logo { content: url(../assets/logo-dark.png); }
