/* =====================================================================
   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 : la couleur primaire partout.

   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 : seuls les bords extérieurs sont arrondis. */
body.eb-has-topbar-v2 .btn-group > .btn:not(:last-child):not(.dropdown-toggle),
body.eb-has-topbar-v2 .btn-group > .btn-group:not(:last-child) > .btn,
body.eb-has-topbar-v2 .input-group > .btn:not(:last-child) {
  border-top-right-radius: 0 !important;
  border-bottom-right-radius: 0 !important;
}
body.eb-has-topbar-v2 .btn-group > .btn:nth-child(n + 2),
body.eb-has-topbar-v2 .btn-group > :not(.btn-check) + .btn,
body.eb-has-topbar-v2 .btn-group > .btn-group:not(:first-child) > .btn,
body.eb-has-topbar-v2 .input-group > :not(:first-child).btn {
  border-top-left-radius: 0 !important;
  border-bottom-left-radius: 0 !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;
}

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

/* ---------------------------------------------------------------------
   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);
}

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