/* =====================================================================
   Harmonisation de l'interface — couche commune à toutes les pages
   =====================================================================

   Chargée par writehead() (fonctions_menu.php) APRÈS toutes les feuilles du
   produit et AVANT theme_custom.css.php : elle tranche les écarts qui
   restaient entre écrans, et un thème d'instance garde le dernier mot sur la
   couleur.

   Ce que cette feuille fait — et seulement cela :
   1. une échelle de jetons (tailles de texte, rayons, hauteurs de contrôle,
      espacements) à employer dans tout CSS nouveau. Le banc
      scripts/test_ui_jetons_cliquet.php refuse qu'une valeur codée en dur de
      plus apparaisse dans les feuilles du produit ;
   2. les boutons : la couleur primaire suit --eb-primary (sans thème, les
      .btn-primary restaient au bleu de Bootstrap #0D6EFD, à côté du bleu du
      produit #2563EB), une taille de texte et un rayon pour tous ;
   3. les champs : listes déroulantes et champs texte à la même hauteur, au
      même rayon et à la même taille de texte ;
   4. les libellés de formulaire : une seule typographie ;
   5. l'état « sélectionné » des tuiles de compteurs : couleur primaire, et
      non plus le fond rouge des alertes, qui se lisait comme une erreur ;
   6. les interrupteurs : un seul dessin, à la couleur primaire ;
      6 bis      pastilles et alertes restées hors palette ;
      6 quinquies états au pointeur et au clavier (survol, focus) ;
      6 quater   barres de filtres : tout à la hauteur du champ ;
      6 ter      tableaux : un seul en-tête ;
   7. la liste vide sans carte d'état vide ; 8. l'impression.

   Spécificité : les règles communes restent à une spécificité de CLASSE.
   Ne jamais nommer un identifiant dans un :not() ou un :is() d'une règle
   commune (écrire [id="…"]) : il donne sa spécificité à toute la règle, qui
   passe alors devant les règles à identifiant des écrans.

   Mesuré écran par écran avant/après (styles calculés et captures), voir le
   message du commit qui l'introduit.
   ===================================================================== */

/* ---------------------------------------------------------------------
   1. Jetons
   --------------------------------------------------------------------- */
:root {
  /* Texte */
  --eb-fs-xs: 11px;
  --eb-fs-sm: 12px;
  --eb-fs-base: 13px;
  --eb-fs-md: 14px;
  --eb-fs-lg: 16px;
  --eb-fs-xl: 20px;
  --eb-fs-2xl: 28px;

  /* Rayons (--eb-radius-sm/md/lg et --eb-radius existent déjà dans
     color-scheme.css : 8 / 10 / 16 et 12 px) */
  --eb-radius-xs: 4px;
  --eb-radius-pill: 999px;
  --eb-radius-control: var(--eb-radius-sm, 8px);

  /* Hauteurs de contrôle : champ, bouton de barre d'outils, bouton compact */
  --eb-control-h: 40px;
  --eb-btn-h: 36px;
  --eb-control-h-sm: 32px;

  /* Espacements */
  --eb-space-1: 4px;
  --eb-space-2: 8px;
  --eb-space-3: 12px;
  --eb-space-4: 16px;
  --eb-space-5: 24px;
  --eb-space-6: 32px;

  /* Seuils de largeur — les media queries ne lisent pas les variables :
     écrire les valeurs en toutes lettres, mais SEULEMENT celles-ci
     (Bootstrap 5) : 576px, 768px, 992px, 1200px, 1400px. */
}

/* Anciens jetons de couleur (color-scheme.css, numérotés) qui portaient le
   bleu de la marque sous six teintes voisines (#007BFF, #3699FF, #2196F3,
   #1875D8, #187DE4, #3085D6) : ils suivent désormais --eb-primary, donc le
   thème d'instance. Avant, un thème violet laissait bleus les interrupteurs
   (.slider), les liens de documents, les pastilles « auto », les boutons du
   calendrier… En sombre, color-scheme.css garde ses propres valeurs. */
:root:not(.dark) {
  --txt-color21: var(--eb-primary);
  --txt-color24: var(--eb-primary);
  --txt-color26: var(--eb-primary);
  --txt-color101: var(--eb-primary);
  --txt-color93: var(--eb-primary-hover);
  --bkg-color8: var(--eb-primary);
  --bkg-color53: var(--eb-primary);
  --bkg-color75: var(--eb-primary);
  --bkg-color86: var(--eb-primary);
  --bkg-color14: var(--eb-primary-hover);
  --bkg-color99: var(--eb-primary-hover);
  --bkg-color140: var(--eb-primary-hover);
  --bor-color11: var(--eb-primary);
  --bor-color25: var(--eb-primary);
  --bor-color36: var(--eb-primary-hover);
}

/* ---------------------------------------------------------------------
   2. Boutons
   --------------------------------------------------------------------- */

/* Primaire : même règle que celle de .btn-success (dashboard-modern.css),
   et même spécificité que la règle du thème d'instance, chargé après : le
   thème garde la main. En sombre, :root.dark .btn-primary
   (dashboard-modern.css) l'emporte déjà par sa spécificité. */
.btn-primary,
.btn-primary:not(:disabled):not(.disabled) {
  --bs-btn-bg: var(--eb-primary-fill, var(--eb-primary, #2563EB));
  --bs-btn-border-color: var(--eb-primary-fill, var(--eb-primary, #2563EB));
  --bs-btn-hover-bg: var(--eb-primary-hover, #1D4ED8);
  --bs-btn-hover-border-color: var(--eb-primary-hover, #1D4ED8);
  --bs-btn-active-bg: var(--eb-primary-hover, #1D4ED8);
  --bs-btn-active-border-color: var(--eb-primary-hover, #1D4ED8);
  --bs-btn-disabled-bg: var(--eb-primary-fill, var(--eb-primary, #2563EB));
  --bs-btn-disabled-border-color: var(--eb-primary-fill, var(--eb-primary, #2563EB));
  background-color: var(--eb-primary-fill, var(--eb-primary, #2563EB)) !important;
  border-color: var(--eb-primary-fill, var(--eb-primary, #2563EB)) !important;
  color: #fff !important;
}
@media (hover: hover) {
  .btn-primary:hover {
    background-color: var(--eb-primary-hover, #1D4ED8) !important;
    border-color: var(--eb-primary-hover, #1D4ED8) !important;
  }
}

/* Texte « primaire » de Bootstrap (#0D6EFD) : la couleur du produit. */
.text-primary {
  color: var(--eb-primary, #2563EB) !important;
}

/* Taille de texte et rayon : un bouton sans classe de taille prenait 16 px
   (Bootstrap) à côté de ses voisins à 13 px, et son rayon variait de 0 à
   10 px selon l'écran. Les tuiles de compteurs (.btn-flex), les pastilles
   rondes (.btn-circle) et les boutons-icônes gardent leur dessin. */
body.eb-has-topbar-v2 .btn:not(.btn-flex):not(.btn-circle):not(.btn-icon):not(.btn-link):not(.btn-lg):not(.btn-xs):not(.swal2-styled) {
  font-size: var(--eb-fs-base) !important;
}
body.eb-has-topbar-v2 .btn:not(.btn-flex):not(.btn-circle):not(.btn-link):not(.rounded-pill):not(.rounded-circle) {
  border-radius: var(--eb-radius-control) !important;
}
/* Groupes de boutons accolés : seuls les bords extérieurs sont arrondis.
   « Accolé » = un contrôle segmenté (.btn-group[role="group"], ou .gap-0) ou
   un bouton collé à un champ (.input-group). Un .btn-group sans rôle sert
   aussi, dans le produit, de simple rangée de boutons espacés (main.css :
   `.btn-group { gap: .25em }`) : ceux-là gardent leurs quatre coins.
   Chaque sélecteur reprend la chaîne de :not() de la règle du rayon
   ci-dessus : sans elle il lui cédait (0,5,1 contre 0,7,1) et rien n'était
   accolé — c'est ce qui obligeait les bascules Ouvrir/Fermé et
   Mensuel/Annuel à porter leur rayon en ligne. .inscriptionBtnGroup a son
   propre dessin (dashboard-modern.css : cadre arrondi, débord masqué). */
body.eb-has-topbar-v2 .btn-group:is([role="group"], .gap-0):not(.inscriptionBtnGroup, .bootstrap-select) {
  gap: 0;
}
body.eb-has-topbar-v2 .btn-group:is([role="group"], .gap-0):not(.inscriptionBtnGroup) > .btn:not(:last-child):not(.dropdown-toggle):not(.btn-action):not(.btn-flex):not(.btn-circle):not(.btn-link):not(.rounded-pill):not(.rounded-circle),
body.eb-has-topbar-v2 .input-group > .btn:not(:last-child):not(.btn-flex):not(.btn-circle):not(.btn-link):not(.rounded-pill):not(.rounded-circle) {
  border-top-right-radius: 0 !important;
  border-bottom-right-radius: 0 !important;
}
body.eb-has-topbar-v2 .btn-group:is([role="group"], .gap-0):not(.inscriptionBtnGroup) > .btn:nth-child(n + 2):not(.btn-action):not(.btn-flex):not(.btn-circle):not(.btn-link):not(.rounded-pill):not(.rounded-circle),
body.eb-has-topbar-v2 .btn-group:is([role="group"], .gap-0):not(.inscriptionBtnGroup) > :not(.btn-check) + .btn:not(.btn-action):not(.btn-flex):not(.btn-circle):not(.btn-link):not(.rounded-pill):not(.rounded-circle),
body.eb-has-topbar-v2 .input-group > :not(:first-child).btn:not(.btn-flex):not(.btn-circle):not(.btn-link):not(.rounded-pill):not(.rounded-circle) {
  border-top-left-radius: 0 !important;
  border-bottom-left-radius: 0 !important;
}

/* Gabarit : UN bouton, deux tailles. Le modèle est le bouton de la barre
   d'actions (#band-container.bandResponsive .btn, dashboard-modern.css) :
   36 px de haut, 13 px en graisse 500, rayon de contrôle, trait de 1 px,
   pas d'ombre au repos. Relevé du 11/11/2026 sur 50 écrans : hors de la
   barre, un .btn ordinaire mesurait 34, 36, 38, 40 ou 42 px selon la feuille
   de l'écran, et un .btn-sm 26, 28, 30 ou 32 px.
     .btn      36 px  (--eb-btn-h)         marges 7 × 16 px
     .btn-sm   32 px  (--eb-control-h-sm)  marges 5 × 12 px — la taille du
               bouton-icône .btn-action, à côté duquel il vit dans les tableaux
   Ne sont PAS des boutons ordinaires, et gardent leur dessin : le bouton-icône
   (.btn-action, .btn-icon, .btn-circle, .btn-xs), la tuile de compteur
   (.btn-flex), le lien (.btn-link), le déclencheur d'une liste déroulante
   (c'est un champ : § 3), les boutons d'une swal, la bascule segmentée
   .inscriptionBtnGroup (Activé / Désactivé, dashboard-modern.css), et les
   liens de navigation latérale d'une fiche qui portent .btn par héritage.
   Six familles de boutons bâties sur .btn sans être .btn-action restent
   écartées nommément dans la seconde liste de :not() — le gabarit à marges
   de 16 px les écraserait : le bouton rond « S'inscrire » du widget
   d'activités, l'œil des grades (tenu hors .btn-action à dessein), les
   actions de la carte SITAC (28 px), les + / − accolés à un champ de la
   fiche, les actions du bandeau de la fiche (38 px, avec libellés) et le
   repère #addActivity du planning (décoratif).
   La hauteur vient des marges et de l'interligne, pas d'un display : un
   bouton .d-none, .d-flex ou .w-100 reste ce qu'il est. Dans un .input-group
   ou collé à un champ, le bouton s'étire à la hauteur du champ (40 px). */
body.eb-has-topbar-v2 .btn:not(.btn-action, .btn-flex, .btn-circle, .btn-icon, .btn-link, .btn-lg, .btn-xs, .swal2-styled, .lienCardPersonnel, .fc-button):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]) {
  min-height: var(--eb-btn-h) !important;
  padding: 7px var(--eb-space-4) !important;
  line-height: 20px !important;
}
/* Le trait de 1 px remplace l'ombre portée de main.css — mais seulement sur
   les variantes dont la couleur de bordure est définie ci-dessous : main.css
   annule la bordure de Bootstrap (`.btn, button { border: 0 }`), et la
   rétablir sur un bouton sans variante ferait apparaître un trait de la
   couleur du texte. Un bouton sans variante (.btn seul : « Brouillon »,
   « Annulé »…) garde donc son ombre, qui est tout ce qui le dessine. */
body.eb-has-topbar-v2 .btn:is(.btn-primary, .btn-secondary, .btn-success, .btn-danger, .btn-warning, .btn-default, .btn-light, .btn-white, [class*="btn-outline-"]):not(.btn-action, .btn-flex, .btn-circle, .btn-icon, .btn-link, .btn-xs, .swal2-styled, .eb-view-btn, .lienCardPersonnel):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]) {
  border-width: 1px !important;
  border-style: solid !important;
}
/* L'ombre n'est retirée qu'HORS focus clavier : posée sur la règle ci-dessus,
   elle l'emportait sur l'anneau de focus (spécificité 0,7,1 contre 0,3,1) et
   un bouton atteint à la touche Tab ne montrait plus rien — relevé au
   clavier, Playwright, sur le banc de composants. */
body.eb-has-topbar-v2 .btn:is(.btn-primary, .btn-secondary, .btn-success, .btn-danger, .btn-warning, .btn-default, .btn-light, .btn-white, [class*="btn-outline-"]):not(.btn-action, .btn-flex, .btn-circle, .btn-icon, .btn-link, .btn-xs, .swal2-styled, .eb-view-btn, .lienCardPersonnel):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]):not(:focus-visible) {
  box-shadow: none !important;
}
body.eb-has-topbar-v2 .btn.btn-sm:not(.btn-action, .btn-flex, .btn-circle, .btn-icon, .btn-link, .swal2-styled, .lienCardPersonnel, .fc-button):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]),
body.eb-has-topbar-v2 .btn-group-sm > .btn:not(.btn-action, .btn-flex, .btn-circle, .btn-icon, .btn-link):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]) {
  min-height: var(--eb-control-h-sm) !important;
  padding: 5px var(--eb-space-3) !important;
}
/* Au doigt (même seuil que les règles tactiles de main.css) : le bouton
   ordinaire prend la cible tactile du produit, --eb-tap-target (44 px). C'était
   déjà la hauteur de la majorité des boutons au téléphone (relevé : 105 sur
   175), à côté de boutons de 28 à 42 px. Le bouton compact reste à 32 px : il
   vit dans des cartes et des lignes serrées. */
@media (max-width: 991.98px) {
  body.eb-has-topbar-v2 .btn:not(.btn-sm, .btn-action, .btn-flex, .btn-circle, .btn-icon, .btn-link, .btn-lg, .btn-xs, .swal2-styled, .lienCardPersonnel, .fc-button, .affiner-btn):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]):not(.btn-group-sm > .btn) {
    min-height: var(--eb-tap-target, 44px) !important;
    /* 12 px sur les côtés, comme avant au téléphone : à 16 px, un libellé
       logé dans une cellule étroite (« Réinitialiser », Configuration)
       passait sur deux lignes. */
    padding: 11px var(--eb-space-3) !important;
  }
}
body.eb-has-topbar-v2 .btn:focus-visible {
  outline: none !important;
  box-shadow: var(--eb-shadow-focus) !important;
}
body.eb-has-topbar-v2 .btn:disabled,
body.eb-has-topbar-v2 .btn.disabled,
body.eb-has-topbar-v2 fieldset:disabled .btn {
  opacity: 0.65 !important;
  box-shadow: none !important;
}

/* Couleurs : celles de la barre d'actions, pour tout le produit. Hors de la
   barre, .btn-secondary avait quatre allures (blanc sans trait, blanc cerné,
   deux gris), .btn-warning l'orange #FFA800 d'avant les jetons, les
   .btn-outline-* et .btn-danger les teintes de Bootstrap.
   Les déclencheurs de menu d'un tableau (colonnes, lignes par page) portent
   .btn-secondary mais ouvrent une liste : ils gardent l'allure blanche et
   cernée d'une liste déroulante. */
body.eb-has-topbar-v2 .btn-secondary:not(.btn-action, .btn-flex, .swal2-styled, .eb-view-btn):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]) {
  background: var(--eb-bg, #f1f5f9) !important;
  border-color: var(--eb-border, #e2e8f0) !important;
  color: var(--eb-text, #0f172a) !important;
}
/* En sombre, --eb-bg est le fond de page, plus foncé que la carte : le
   bouton secondaire y devenait un pavé noir. Il prend le gris relevé
   (--eb-surface-hover), dans la barre d'actions comme ailleurs. */
:root.dark body.eb-has-topbar-v2 .btn-secondary:not(.btn-action, .btn-flex, .swal2-styled, .eb-view-btn):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]),
:root.dark body.eb-has-topbar-v2 #band-container.bandResponsive .btn-secondary {
  background: var(--eb-surface-hover, #252525) !important;
}
body.eb-has-topbar-v2 .bootstrap-table .fixed-table-toolbar .columns .btn-secondary.dropdown-toggle,
body.eb-has-topbar-v2 .bootstrap-table .fixed-table-pagination .page-list .btn-secondary.dropdown-toggle,
body.eb-has-topbar-v2 .btn-default:not(.btn-action, .btn-flex):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]),
body.eb-has-topbar-v2 .btn-light:not(.btn-action, .btn-flex):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]),
body.eb-has-topbar-v2 .btn-white:not(.btn-action, .btn-flex, .btn-circle, .btn-icon):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]) {
  background: var(--eb-surface, #ffffff) !important;
  border-color: var(--eb-border, #e2e8f0) !important;
  color: var(--eb-text, #0f172a) !important;
}
body.eb-has-topbar-v2 .btn-danger:not(.btn-action, .btn-flex, .swal2-styled) {
  background: var(--eb-danger-fill, var(--eb-danger, #ef4444)) !important;
  border-color: var(--eb-danger-fill, var(--eb-danger, #ef4444)) !important;
  color: #fff !important;
}
body.eb-has-topbar-v2 .btn-warning:not(.btn-action, .btn-flex, .swal2-styled) {
  background: var(--eb-warning-fill, var(--eb-warning, #f97316)) !important;
  border-color: var(--eb-warning-fill, var(--eb-warning, #f97316)) !important;
  color: #fff !important;
}
body.eb-has-topbar-v2 .btn-outline-primary {
  border-color: var(--eb-primary, #2563eb) !important;
  color: var(--eb-primary, #2563eb) !important;
  background: transparent !important;
}
body.eb-has-topbar-v2 .btn-outline-secondary {
  border-color: var(--eb-border, #e2e8f0) !important;
  color: var(--eb-text-secondary, #64748b) !important;
  background: transparent !important;
}
body.eb-has-topbar-v2 .btn-outline-success {
  border-color: var(--eb-success, #10b981) !important;
  color: var(--eb-success, #10b981) !important;
  background: transparent !important;
}
body.eb-has-topbar-v2 .btn-outline-danger {
  border-color: var(--eb-danger, #ef4444) !important;
  color: var(--eb-danger, #ef4444) !important;
  background: transparent !important;
}
body.eb-has-topbar-v2 .btn-outline-warning {
  border-color: var(--eb-warning, #f97316) !important;
  color: var(--eb-warning, #f97316) !important;
  background: transparent !important;
}
@media (hover: hover) {
  body.eb-has-topbar-v2 .btn-secondary:not(.btn-action, .btn-flex, .swal2-styled, .eb-view-btn):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]):hover,
  :root.dark body.eb-has-topbar-v2 .btn-secondary:not(.btn-action, .btn-flex, .swal2-styled, .eb-view-btn):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]):hover,
  :root.dark body.eb-has-topbar-v2 #band-container.bandResponsive .btn-secondary:hover {
    background: var(--eb-border, #e2e8f0) !important;
  }
  body.eb-has-topbar-v2 .bootstrap-table .fixed-table-toolbar .columns .btn-secondary.dropdown-toggle:hover,
  body.eb-has-topbar-v2 .bootstrap-table .fixed-table-pagination .page-list .btn-secondary.dropdown-toggle:hover,
  body.eb-has-topbar-v2 .btn-default:not(.btn-action, .btn-flex):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]):hover,
  body.eb-has-topbar-v2 .btn-light:not(.btn-action, .btn-flex):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]):hover,
  body.eb-has-topbar-v2 .btn-white:not(.btn-action, .btn-flex, .btn-circle, .btn-icon):not(.bootstrap-select > .dropdown-toggle, .inscriptionBtnGroup .btn, [data-w-function="show_events"] .btn-success, .eb-grade-eye, .sitac-inter-actions .btn, .mc-field-control .input-group-append .btn, .mc-hero-quickactions .btn, [id="addActivity"]):hover {
    background: var(--eb-bg, #f1f5f9) !important;
  }
  body.eb-has-topbar-v2 .btn-danger:not(.btn-action, .btn-flex, .swal2-styled):hover {
    background: var(--eb-danger-fill-hover, var(--eb-danger-hover, #dc2626)) !important;
    border-color: var(--eb-danger-fill-hover, var(--eb-danger-hover, #dc2626)) !important;
  }
  body.eb-has-topbar-v2 .btn-warning:not(.btn-action, .btn-flex, .swal2-styled):hover {
    background: var(--eb-warning-fill-hover, var(--eb-warning-hover, #d97706)) !important;
    border-color: var(--eb-warning-fill-hover, var(--eb-warning-hover, #d97706)) !important;
  }
  body.eb-has-topbar-v2 .btn-outline-primary:hover {
    background: var(--eb-primary, #2563eb) !important;
    color: #fff !important;
  }
  body.eb-has-topbar-v2 .btn-outline-secondary:hover {
    background: var(--eb-bg, #f1f5f9) !important;
    color: var(--eb-text, #0f172a) !important;
  }
  body.eb-has-topbar-v2 .btn-outline-success:hover {
    background: var(--eb-success-fill, var(--eb-success, #10b981)) !important;
    border-color: var(--eb-success-fill, var(--eb-success, #10b981)) !important;
    color: #fff !important;
  }
  body.eb-has-topbar-v2 .btn-outline-danger:hover {
    background: var(--eb-danger-fill, var(--eb-danger, #ef4444)) !important;
    border-color: var(--eb-danger-fill, var(--eb-danger, #ef4444)) !important;
    color: #fff !important;
  }
  body.eb-has-topbar-v2 .btn-outline-warning:hover {
    background: var(--eb-warning-fill, var(--eb-warning, #f97316)) !important;
    border-color: var(--eb-warning-fill, var(--eb-warning, #f97316)) !important;
    color: #fff !important;
  }
}

/* ---------------------------------------------------------------------
   3. Champs
   --------------------------------------------------------------------- */

/* Liste déroulante (bootstrap-select) : même texte (13 px) et même rayon
   que .form-control. La fiche agent l'écrivait en 14,4 px, ce qui la
   rendait plus haute (42 px) que les champs voisins (40 px). La hauteur
   n'est PAS imposée : les listes compactes logées dans un tableau
   (Habilitations, pagination) gardent la leur. */
body.eb-has-topbar-v2 .bootstrap-select:not(.input-group-btn) > .dropdown-toggle:not(.btn-sm):not(.btn-xs) {
  font-size: var(--eb-fs-base) !important;
  border-radius: var(--eb-radius-control) !important;
}

/* Liste déroulante native restée sans classe (ni .form-control, ni
   .form-select, ni .selectpicker) : dashboard-modern.css n'habille que les
   deux premières, et main.css lui laissait 24 px de haut et un rayon de 5 px.
   Elle prend le gabarit du champ. Les listes à plusieurs lignes (multiple,
   size) et celles des bibliothèques (calendriers, swal) gardent le leur. */
/* :not() en chaîne et non en liste : le banc modules/ia/test/textarea_hauteur_figee_test.php
   découpe les sélecteurs sur les virgules et prenait « .form-select » pour une cible. */
body.eb-has-topbar-v2 select:not(.form-control):not(.form-select):not(.selectpicker):not([multiple]):not([size]):not(.swal2-select):not(.flatpickr-monthDropdown-months):not(.eb-field-error):not(.alert-red-fade):not(.bootstrap-select select):not(.datepicker select):not(.ui-datepicker select):not(.tox select) {
  height: auto !important;
  min-height: 38px;
  padding: 9px 12px !important;
  border-radius: var(--eb-radius-control) !important;
  font-size: var(--eb-fs-base) !important;
  color: var(--eb-text, #0f172a) !important;
  background-color: var(--eb-surface, #ffffff) !important;
  box-shadow: none !important;
}
body.eb-has-topbar-v2 select:not(.form-control, .form-select, .selectpicker, [multiple], [size], .swal2-select, .flatpickr-monthDropdown-months, .eb-field-error, .alert-red-fade, .is-invalid):not(.bootstrap-select select, .datepicker select, .ui-datepicker select, .tox select) {
  border: 1px solid var(--eb-border, #e2e8f0) !important;
}
body.eb-has-topbar-v2 select:not(.selectpicker, .swal2-select):not(.bootstrap-select select):focus {
  border-color: var(--eb-primary, #3b82f6) !important;
  box-shadow: var(--eb-shadow-focus) !important;
  outline: none !important;
}

/* Champ sans classe .form-control : même hauteur que les autres. Bootstrap
   fait hériter l'interligne aux <input> ; celui de <body> (24 px) donnait un
   champ de 44 px à côté des .form-control de 40 px. */
body.eb-has-topbar-v2 input:is([type="text"], [type="email"], [type="tel"], [type="number"], [type="password"], [type="url"], [type="search"], [type="date"], [type="time"]):not(.form-control, .swal2-input, .search-menu, .numInput, .flatpickr-input) {
  line-height: 1.5;
}

/* Champ désactivé : il se lit comme tel. Sous le thème, un champ `disabled`
   gardait le fond blanc et le texte foncé d'un champ ordinaire (le gabarit
   commun pose fond et couleur en !important) : rien ne le distinguait d'un
   champ à remplir. Mêmes sélecteurs que le gabarit de dashboard-modern.css
   (bloc P0.3), suivis de :disabled, pour passer devant lui. Un champ en
   lecture seule ne change pas : les champs de date le sont tous, pour forcer
   le calendrier. */
body.eb-has-topbar-v2 .form-control:not(textarea):not(.bootstrap-select):not(.alert-red-fade):not(.eb-field-error):disabled,
body.eb-has-topbar-v2 input[type="text"]:not(.flatpickr-input):not(.swal2-input):not(.alert-red-fade):not(.eb-field-error):not(.search-menu):disabled,
body.eb-has-topbar-v2 input[type="email"]:not(.alert-red-fade):not(.eb-field-error):disabled,
body.eb-has-topbar-v2 input[type="tel"]:not(.alert-red-fade):not(.eb-field-error):disabled,
body.eb-has-topbar-v2 input[type="number"]:not(.numInput):not(.alert-red-fade):not(.eb-field-error):disabled,
body.eb-has-topbar-v2 input[type="password"]:not(.alert-red-fade):not(.eb-field-error):disabled,
body.eb-has-topbar-v2 input[type="url"]:not(.alert-red-fade):not(.eb-field-error):disabled,
body.eb-has-topbar-v2 input[type="search"]:not(.alert-red-fade):not(.eb-field-error):disabled,
body.eb-has-topbar-v2 input[type="date"]:not(.alert-red-fade):not(.eb-field-error):disabled,
body.eb-has-topbar-v2 input[type="time"]:not(.alert-red-fade):not(.eb-field-error):disabled,
body.eb-has-topbar-v2 select.form-control:not(.alert-red-fade):not(.eb-field-error):disabled,
body.eb-has-topbar-v2 select.form-select:not(.alert-red-fade):not(.eb-field-error):disabled,
body.eb-has-topbar-v2 textarea:not(.alert-red-fade):not(.eb-field-error):disabled,
body.eb-has-topbar-v2 select:not(.form-control, .form-select, .selectpicker, [multiple], [size], .swal2-select, .flatpickr-monthDropdown-months, .eb-field-error, .alert-red-fade):not(.bootstrap-select select, .datepicker select, .ui-datepicker select, .tox select):disabled,
body.eb-has-topbar-v2 .bootstrap-select.disabled > .dropdown-toggle,
body.eb-has-topbar-v2 .bootstrap-select > .dropdown-toggle.disabled,
body.eb-has-topbar-v2 .bootstrap-select > .dropdown-toggle:disabled {
  background-color: var(--eb-surface-hover, #f8fafc) !important;
  color: var(--eb-text-secondary, #64748b) !important;
  cursor: not-allowed;
  opacity: 1 !important;
}

/* Capuchon d'un champ (.input-group-text : @, unité, icône de recherche,
   indicatif) : la hauteur du champ qu'il coiffe et le rayon du contrôle sur
   son bord extérieur. main.css le figeait à 36 px et 5 px de rayon, à côté
   d'un champ de 40 px et 8 px. La fiche personnel a ses propres capuchons,
   plus spécifiques (upd_personnel_modern.css), déjà à ces mesures. */
body.eb-has-topbar-v2 .input-group > .input-group-text,
body.eb-has-topbar-v2 .input-group > .input-group-text-end {
  height: auto !important;
  font-size: var(--eb-fs-base);
}
body.eb-has-topbar-v2 .input-group > .input-group-text:first-child {
  border-radius: var(--eb-radius-control) 0 0 var(--eb-radius-control) !important;
}
body.eb-has-topbar-v2 .input-group > .input-group-text:last-child,
body.eb-has-topbar-v2 .input-group > .input-group-text-end:last-child {
  border-radius: 0 var(--eb-radius-control) var(--eb-radius-control) 0 !important;
}
body.eb-has-topbar-v2 .input-group > .input-group-text:not(:first-child):not(:last-child) {
  border-radius: 0 !important;
}

/* Cases à cocher et boutons radio : 16 px et la couleur primaire, comme
   dans les tableaux de paramétrage (dashboard-modern.css, .newTableAll) et
   .form-check-input. Ailleurs la case native faisait 13 px, à la couleur du
   navigateur. La taille est posée à spécificité NULLE (:where) : toute règle
   qui dimensionne déjà une case — l'<input> invisible d'un interrupteur,
   étiré sur tout le libellé — garde la main. */
:where(body.eb-has-topbar-v2 input[type="checkbox"], body.eb-has-topbar-v2 input[type="radio"]) {
  width: 16px;
  height: 16px;
}
body.eb-has-topbar-v2 input[type="checkbox"],
body.eb-has-topbar-v2 input[type="radio"] {
  accent-color: var(--eb-primary, #2563eb);
}

/* Lignes d'un menu : UNE ligne pour tous les menus — celui d'une liste
   déroulante (bootstrap-select), d'un bouton à menu, d'un tri de tableau, de
   l'indicatif téléphonique. Relevé : 3 px de marge verticale dans les listes
   (25 px par ligne), 8 px dans les menus (36 px), 4 × 16 px sans rayon ni
   couleur du produit pour les indicatifs, 14 px de texte pour « lignes par
   page », 12 px dans le menu Message d'une liste. Retenu : 13 px, marges
   6 × 12 px (ligne de 32 px, la hauteur du contrôle compact), rayon 6 px ;
   ligne choisie en couleur primaire sur fond --eb-bg, graisse 600. */
body.eb-has-topbar-v2 .dropdown-menu:not(.inner) .dropdown-item,
body.eb-has-topbar-v2 .bootstrap-select .dropdown-menu li a {
  padding: 6px var(--eb-space-3) !important;
  font-size: var(--eb-fs-base) !important;
  border-radius: 6px !important;
}
body.eb-has-topbar-v2 .dropdown-menu:not(.inner) .dropdown-item:not(.active, .selected, .disabled, [class*="text-"]) {
  color: var(--eb-text, #0f172a) !important;
}
body.eb-has-topbar-v2 .dropdown-menu:not(.inner) .dropdown-item.active,
body.eb-has-topbar-v2 .dropdown-menu:not(.inner) .dropdown-item.selected,
body.eb-has-topbar-v2 .bootstrap-select .dropdown-menu li.selected > a,
body.eb-has-topbar-v2 .bootstrap-select .dropdown-menu li.active > a {
  background: var(--eb-bg, #f1f5f9) !important;
  color: var(--eb-primary, #3b82f6) !important;
  font-weight: 600 !important;
}
/* En sombre, dashboard-modern.css repose la couleur du texte sur toutes les
   lignes d'une liste : la ligne choisie y perdait sa couleur primaire, alors
   qu'elle la gardait dans les autres menus. */
:root.dark body.eb-has-topbar-v2 .bootstrap-select .dropdown-menu li.selected > a,
:root.dark body.eb-has-topbar-v2 .bootstrap-select .dropdown-menu li.active > a,
:root.dark body.eb-has-topbar-v2 .bootstrap-select .dropdown-menu li > a.active,
:root.dark body.eb-has-topbar-v2 .bootstrap-select .dropdown-menu li > a.selected {
  color: var(--eb-primary, #3b82f6) !important;
}
:root.dark body.eb-has-topbar-v2 .dropdown-menu:not(.inner) .dropdown-item.active,
:root.dark body.eb-has-topbar-v2 .dropdown-menu:not(.inner) .dropdown-item.selected,
:root.dark body.eb-has-topbar-v2 .bootstrap-select .dropdown-menu li.selected > a,
:root.dark body.eb-has-topbar-v2 .bootstrap-select .dropdown-menu li.active > a {
  background: var(--eb-primary-light, #1e3a5f) !important;
}
/* Au doigt : une ligne de 40 px (elle faisait 25 px dans les listes). */
@media (max-width: 991.98px) {
  body.eb-has-topbar-v2 .dropdown-menu:not(.inner) .dropdown-item,
  body.eb-has-topbar-v2 .bootstrap-select .dropdown-menu li a {
    padding-top: 10px !important;
    padding-bottom: 10px !important;
  }
}
@media (hover: hover) {
  body.eb-has-topbar-v2 .dropdown-menu:not(.inner) .dropdown-item:not(.disabled, :disabled):hover {
    background: var(--eb-bg, #f1f5f9) !important;
    color: var(--eb-primary, #3b82f6) !important;
  }
}
/* Une ligne indisponible se lit comme telle (elle gardait la couleur du texte
   ordinaire), et une ligne d'action destructrice garde son rouge (la couleur
   commune l'effaçait). */
body.eb-has-topbar-v2 .dropdown-menu:not(.inner) .dropdown-item.disabled,
body.eb-has-topbar-v2 .dropdown-menu:not(.inner) .dropdown-item:disabled {
  color: var(--eb-text-muted, #94a3b8) !important;
  background: transparent !important;
  pointer-events: none;
}
body.eb-has-topbar-v2 .dropdown-menu:not(.inner) .dropdown-item.text-danger:not(.disabled) {
  color: var(--eb-danger, #ef4444) !important;
}
/* Titre de groupe et séparateur : un seul dessin (ils sortaient en 13 ou
   14 px, au gris de Bootstrap). */
body.eb-has-topbar-v2 .dropdown-menu .dropdown-header {
  padding: 6px var(--eb-space-3) !important;
  font-size: var(--eb-fs-sm) !important;
  font-weight: 600 !important;
  color: var(--eb-text-muted, #94a3b8) !important;
}

/* ---------------------------------------------------------------------
   4. Libellés de formulaire
   --------------------------------------------------------------------- */

/* La fiche agent (body.mon-compte-modern) écrivait ses libellés en petites
   capitales grises de 11,8 px ; tous les autres formulaires du produit les
   écrivent en 13 px, graisse 500, casse normale. Une seule typographie :
   la plus lisible, déjà la plus répandue. */
body.mon-compte-modern .mc-field-label {
  font-size: var(--eb-fs-base) !important;
  text-transform: none !important;
  letter-spacing: normal !important;
}

/* ---------------------------------------------------------------------
   5. Tuiles de compteurs : état sélectionné
   --------------------------------------------------------------------- */
.stats-container-new > .nav-item > a.btn-active-danger.active,
.stats-container-new > .nav-item > .btn-active-danger.active {
  background: var(--eb-primary-light, #EFF6FF) !important;
  border-color: var(--eb-primary, #2563EB) !important;
}

/* ---------------------------------------------------------------------
   6. Interrupteurs : un seul dessin
   ---------------------------------------------------------------------
   Deux interrupteurs coexistaient : `.switch > .slider.round` (main.css,
   45 × 20 px, pastille de 12 px, fond éteint #CCC) dans les fiches et les
   formulaires, et `.switchconfig > .slider.config` (44 × 20 px, pastille de
   14 px ombrée, fond éteint --eb-border) dans Configuration et Paramétrage.
   Le premier prend le dessin du second, qui est bâti sur les jetons. */
body.eb-has-topbar-v2 .switch {
  width: 44px;
}
body.eb-has-topbar-v2 .switch .slider:not(.config) {
  background-color: var(--eb-border, #e2e8f0);
  border-radius: var(--eb-radius-pill);
  transition: background-color 0.25s ease;
}
body.eb-has-topbar-v2 .switch .slider:not(.config)::before {
  height: 14px;
  width: 14px;
  left: 3px;
  bottom: 3px;
  background-color: #fff;
  border-radius: 50%;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.08);
  transition: transform 0.25s ease;
}
body.eb-has-topbar-v2 .switch input:checked + .slider:not(.config) {
  background-color: var(--eb-primary, #2563eb);
}
body.eb-has-topbar-v2 .switch input:checked + .slider:not(.config)::before {
  transform: translateX(24px);
}

/* ---------------------------------------------------------------------
   6 bis. Pastilles et alertes : variantes restées hors de la palette
   ---------------------------------------------------------------------
   Le gabarit de la pastille (.badge) et de l'alerte (.alert) est posé par
   dashboard-modern.css, avec les couleurs de primary / success / warning /
   danger / secondary / info. Restaient hors palette :
   - .badge.bg-light : texte blanc sur fond presque blanc, illisible ;
     .badge.badge-light : aucune règle, donc le bleu plein de .badge ;
   - .alert.alert-green (turquoise plein), .alert.alert-blue (bleu plein),
     .alert.alert-secondary / -light / -grey (gris plein, sans trait).
   Ces mêmes classes de couleur posées sur une PASTILLE (.badge.alert-green…)
   ne sont pas touchées : elles ont leurs règles dans main.css. En sombre,
   color-scheme.css garde ses valeurs. */
body.eb-has-topbar-v2 .badge.bg-light,
body.eb-has-topbar-v2 .badge.badge-light {
  background: var(--eb-bg, #f1f5f9) !important;
  color: var(--eb-text-secondary, #64748b) !important;
}
:root:not(.dark) body.eb-has-topbar-v2 .alert.alert-green:not(.badge) {
  background: rgba(16, 185, 129, 0.10) !important;
  border-color: rgba(16, 185, 129, 0.25) !important;
  color: #065f46 !important;
}
:root:not(.dark) body.eb-has-topbar-v2 .alert.alert-blue:not(.badge) {
  background: rgba(59, 130, 246, 0.10) !important;
  border-color: rgba(59, 130, 246, 0.25) !important;
  color: var(--eb-primary) !important;
}
:root:not(.dark) body.eb-has-topbar-v2 .alert.alert-secondary:not(.badge),
:root:not(.dark) body.eb-has-topbar-v2 .alert.alert-light:not(.badge),
:root:not(.dark) body.eb-has-topbar-v2 .alert.alert-grey:not(.badge) {
  background: var(--eb-bg, #f1f5f9) !important;
  border-color: var(--eb-border, #e2e8f0) !important;
  color: var(--eb-text-secondary, #64748b) !important;
}

/* ---------------------------------------------------------------------
   6 quinquies. États au pointeur et au clavier
   ---------------------------------------------------------------------
   Relevé au pointeur réel et à la touche Tab (Playwright) sur le banc de
   composants, 78 éléments :
   - .btn-primary et .btn-success ne changeaient PAS au survol : leur règle
     de repos (`:not(:disabled):not(.disabled)`, 0,3,0, !important) battait
     leur règle de survol (0,2,0). Les autres variantes changeaient ;
   - aucun champ ne montrait le focus : le gabarit commun pose
     `box-shadow: none` et la bordure grise en !important à une spécificité
     (0,6,1 à 0,8,2) que la règle de focus de dashboard-modern.css (0,3,1)
     n'atteint pas. Mêmes sélecteurs que le gabarit, suivis de :focus. Un
     champ en erreur garde sa bordure rouge au focus. */
@media (hover: hover) {
  body.eb-has-topbar-v2 .btn-primary:not(:disabled):not(.disabled):not(.btn-action):hover {
    background-color: var(--eb-primary-fill-hover, var(--eb-primary-hover, #1d4ed8)) !important;
    border-color: var(--eb-primary-fill-hover, var(--eb-primary-hover, #1d4ed8)) !important;
  }
  /* Pagination en sombre : la règle sombre du lien de page (dashboard-modern.css),
     écrite après la règle de survol à spécificité égale, l'annulait. */
  :root.dark body.eb-has-topbar-v2 .pagination .page-item:not(.active):not(.disabled) .page-link:hover {
    background: var(--eb-surface-hover, #252525) !important;
    color: var(--eb-primary, #3b82f6) !important;
  }
  body.eb-has-topbar-v2 .btn-success:not(:disabled):not(.disabled):not(.btn-action):hover {
    background-color: var(--eb-success-fill-hover, var(--eb-success-hover, #059669)) !important;
    border-color: var(--eb-success-fill-hover, var(--eb-success-hover, #059669)) !important;
  }
}
body.eb-has-topbar-v2 .form-control:not(textarea):not(.bootstrap-select):not(.alert-red-fade):not(.eb-field-error):not(.is-invalid):focus,
body.eb-has-topbar-v2 input[type="text"]:not(.flatpickr-input):not(.swal2-input):not(.alert-red-fade):not(.eb-field-error):not(.search-menu):not(.is-invalid):focus,
body.eb-has-topbar-v2 input[type="email"]:not(.alert-red-fade):not(.eb-field-error):not(.is-invalid):focus,
body.eb-has-topbar-v2 input[type="tel"]:not(.alert-red-fade):not(.eb-field-error):not(.is-invalid):focus,
body.eb-has-topbar-v2 input[type="password"]:not(.alert-red-fade):not(.eb-field-error):not(.is-invalid):focus,
body.eb-has-topbar-v2 input[type="url"]:not(.alert-red-fade):not(.eb-field-error):not(.is-invalid):focus,
body.eb-has-topbar-v2 input[type="search"]:not(.alert-red-fade):not(.eb-field-error):not(.is-invalid):focus,
body.eb-has-topbar-v2 input[type="date"]:not(.alert-red-fade):not(.eb-field-error):not(.is-invalid):focus,
body.eb-has-topbar-v2 input[type="time"]:not(.alert-red-fade):not(.eb-field-error):not(.is-invalid):focus,
body.eb-has-topbar-v2 input[type="number"]:not(.numInput):not(.alert-red-fade):not(.eb-field-error):not(.is-invalid):focus,
body.eb-has-topbar-v2 select.form-control:not(.alert-red-fade):not(.eb-field-error):not(.is-invalid):focus,
body.eb-has-topbar-v2 select.form-select:not(.alert-red-fade):not(.eb-field-error):not(.is-invalid):focus,
body.eb-has-topbar-v2 textarea:not(.alert-red-fade):not(.eb-field-error):not(.is-invalid):focus,
body.eb-has-topbar-v2 input.flatpickr-input.form-control:not(.alert-red-fade):not(.eb-field-error):not(.is-invalid):focus {
  border-color: var(--eb-primary, #3b82f6) !important;
  box-shadow: var(--eb-shadow-focus) !important;
  outline: none !important;
}

/* ---------------------------------------------------------------------
   6 quater. Barres de filtres : tout à la hauteur du champ
   ---------------------------------------------------------------------
   La barre d'une liste (.fixed-table-toolbar, #toolbar, .filter-area) a la
   même structure partout (rangée souple, 6 px d'écart). Dedans, listes et
   recherche font 40 px (--eb-control-h) ; le déclencheur « colonnes », le
   bouton Favoris et les boutons d'action faisaient 36 px, décalés de 2 px
   dans la rangée. Un bouton de barre prend la hauteur du champ. Au
   téléphone, main.css pose déjà la cible tactile (44 px). L'id est écrit en
   sélecteur d'attribut pour rester à une spécificité de classe. */
@media (min-width: 992px) {
  body.eb-has-topbar-v2 :is(.fixed-table-toolbar, [id="toolbar"], .filter-area) .btn:not(.btn-sm, .btn-action, .btn-flex, .btn-circle, .btn-icon, .btn-link, .btn-xs, .affiner-btn):not(.bootstrap-select > .dropdown-toggle, .dropdown-menu .btn) {
    min-height: var(--eb-control-h) !important;
    padding-top: 9px !important;
    padding-bottom: 9px !important;
  }
}
/* Champ de période d'une barre : le trait des autres champs (il gardait le
   gris #E9ECEF de Bootstrap sur certains écrans). */
body.eb-has-topbar-v2 :is(.fixed-table-toolbar, [id="toolbar"], .filter-area) .eb-daterange-input:not(.is-invalid, .eb-field-error) {
  border-color: var(--eb-border, #e2e8f0) !important;
}

/* ---------------------------------------------------------------------
   6 ter. Tableaux : un seul en-tête
   ---------------------------------------------------------------------
   L'en-tête des listes (.table thead th, dashboard-modern.css bloc P1.4 :
   12 px en capitales, graisse 600, gris secondaire sur fond --eb-border)
   est le même sur tous les tableaux de données relevés. Deux familles n'y
   avaient pas droit : les .newTableAll qui portent de vrais <th>
   (compétences de garde, méthodes de connexion, erreurs d'import, une table
   de la fiche personnel) et les <table> sans classe — leurs en-têtes
   sortaient en capitales noires sans fond. */
body.eb-has-topbar-v2 table.newTableAll th,
body.eb-has-topbar-v2 table:not([class]) > thead > tr > th {
  background: var(--eb-border, #e2e8f0) !important;
  color: var(--eb-text-secondary, #64748b) !important;
  border-top: none;
  border-bottom: 1px solid var(--eb-border, #e2e8f0);
  font-weight: 600 !important;
  font-size: var(--eb-fs-sm) !important;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  padding: 12px 16px;
}
:root.dark body.eb-has-topbar-v2 table.newTableAll th,
:root.dark body.eb-has-topbar-v2 table:not([class]) > thead > tr > th {
  background: var(--eb-surface-hover, #252525) !important;
  border-bottom-color: rgba(255, 255, 255, 0.08);
}
body.eb-has-topbar-v2 table:not([class]) {
  border-spacing: 0;
  overflow: hidden;
}
body.eb-has-topbar-v2 table:not([class]) > tbody > tr > td {
  padding: 12px 16px;
  font-size: var(--eb-fs-base);
  border-top: 1px solid var(--eb-border, #e2e8f0);
  vertical-align: middle;
}

/* ---------------------------------------------------------------------
   7. Liste vide sans carte d'état vide
   ---------------------------------------------------------------------
   Les listes chargées par l'adresse de BootstrapTablePerso remplacent une
   liste vide par la carte de no_result_card() (icône, titre, texte). Celles
   qui passent par une fonction maison (setAjaxFunction : Formulaire, Entraide,
   Questionnaire de satisfaction, historiques d'organisateur, signatures…) ne
   la reçoivent pas : il restait l'en-tête et une ligne « Aucun résultat » de
   13 px, collée sous les titres de colonnes. Cette ligne prend l'allure de la
   carte — même icône de boîte, mêmes jetons de couleur, place pour respirer.
   La vue carte mobile garde sa propre règle (dashboard-modern.css). */
body.eb-has-topbar-v2 table:not(.cards) > tbody > tr.no-records-found > td {
  padding: var(--eb-space-6) var(--eb-space-4) !important;
  text-align: center !important;
  color: var(--eb-text-secondary, #64748b) !important;
  font-size: var(--eb-fs-md) !important;
  background: var(--eb-surface, #fff) !important;
}
body.eb-has-topbar-v2 table:not(.cards) > tbody > tr.no-records-found > td::before {
  content: "\f01c"; /* fa-inbox, l'icône de no_result_card() sans filtre */
  font-family: "Font Awesome 6 Free", "Font Awesome 5 Free", FontAwesome;
  font-weight: 900;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  margin: 0 auto var(--eb-space-3);
  border-radius: var(--eb-radius-lg, 16px);
  background: var(--eb-surface-hover, #f1f5f9);
  color: var(--eb-text-muted, #94a3b8);
  font-size: var(--eb-fs-xl);
}
/* La boîte ci-dessus suffit : l'illustration que bootstrap-table-ebrigade.js
   ajoute à une recherche sans résultat en faisait deux, l'une sur l'autre
   (liste des véhicules, du matériel…). Le titre, le texte et « Tout
   afficher » restent. */
body.eb-has-topbar-v2 table:not(.cards) > tbody > tr.no-records-found > td .eb-empty-demo {
  display: none;
}

/* Bouton généré par write_button() dont le libellé doit rester lisible sur
   téléphone : dans une fenêtre à deux boutons (« Fermer » / « Sauver »),
   « Sauver » réduit à son icône côtoyait « Fermer » en toutes lettres. */
.btn.eb-btn-libelle-mobile .hide_mobile {
  display: inline !important;
}

/* ---------------------------------------------------------------------
   8. Impression : le cadre de l'application ne s'imprime pas
   ---------------------------------------------------------------------
   Ctrl+P ou un bouton « Imprimer » sur un écran ordinaire (liste du
   personnel, planning, fiche véhicule…) imprimait la barre latérale fixe
   PAR-DESSUS le contenu (240 px masqués à gauche de chaque page), la barre
   du haut et les bulles d'information. Les écrans qui ont leur propre mise en
   page d'impression (fiche activité ?print=1, tableau de garde) la gardent :
   ces règles ne font que retirer le cadre. */
@media print {
  #ebSidebar,
  #ebSidebarOverlay,
  header.eb-topbar,
  #eb-toast-stack,
  .test-label-container,
  .eb-tab-search-container,
  .onboarding-checklist,
  .onboarding-welcome-modal {
    display: none !important;
  }
  #space-left,
  .space-left {
    margin-left: 0 !important;
    padding-top: 0 !important;
    width: auto !important;
  }
  /* <html> porte un dégradé bleu nuit sur ses 240 premiers pixels, qui
     préfigure la barre latérale à l'écran : sans elle, il restait imprimé
     en bande sombre sur le bord gauche. */
  html,
  :root.light,
  body {
    background: #fff !important;
  }
}
