/**
 * UltimateSaas — styles communs à tous les layouts (Materialize, Nexsas, …).
 * Chargé via asset('assets_all/styles.css') dans chaque layout racine.
 */

/* —— Bandeau RGPD / cookies —— */
.us-rgpd-banner {
  --us-primary: #666cff;
  --us-primary-rgb: 102, 108, 255;
  --us-primary-contrast: #fff;

  position: fixed;
  z-index: 1080;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 0.75rem 1rem calc(0.75rem + env(safe-area-inset-bottom, 0px));
  pointer-events: none;
  opacity: 0;
  transform: translateY(100%);
  transition: opacity 0.35s ease, transform 0.35s ease;
}

.us-rgpd-banner.is-visible {
  pointer-events: auto;
  opacity: 1;
  transform: translateY(0);
}

.us-rgpd-banner.is-hidden {
  display: none !important;
}

.us-rgpd-banner__inner {
  max-width: 72rem;
  margin: 0 auto;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem 1.25rem;
  padding: 1rem 1.25rem;
  border-radius: 0.75rem;
  background: #fff;
  border: 1px solid rgba(var(--us-primary-rgb), 0.22);
  box-shadow:
    0 4px 24px rgba(15, 23, 42, 0.12),
    0 0 0 1px rgba(15, 23, 42, 0.04);
}

.us-rgpd-banner__text {
  flex: 1 1 16rem;
  margin: 0;
  font-size: 0.875rem;
  line-height: 1.55;
  color: #3b4256;
}

.us-rgpd-banner__actions {
  flex: 0 0 auto;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem 0.75rem;
}

.us-rgpd-banner__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 2.5rem;
  padding: 0.5rem 1.25rem;
  border-radius: 0.5rem;
  font-size: 0.875rem;
  font-weight: 600;
  line-height: 1.25;
  cursor: pointer;
  border: none;
  text-decoration: none;
  transition: background-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, transform 0.15s ease;
}

.us-rgpd-banner__btn:active {
  transform: scale(0.98);
}

.us-rgpd-banner__btn--primary {
  background: var(--us-primary);
  color: var(--us-primary-contrast);
  box-shadow: 0 2px 8px rgba(var(--us-primary-rgb), 0.35);
}

.us-rgpd-banner__btn--primary:hover {
  filter: brightness(1.06);
  box-shadow: 0 4px 14px rgba(var(--us-primary-rgb), 0.4);
}

.us-rgpd-banner__btn--ghost {
  background: rgba(var(--us-primary-rgb), 0.08);
  color: var(--us-primary);
}

.us-rgpd-banner__btn--ghost:hover {
  background: rgba(var(--us-primary-rgb), 0.14);
}

@media (max-width: 575.98px) {
  .us-rgpd-banner__inner {
    flex-direction: column;
    align-items: stretch;
  }

  .us-rgpd-banner__actions {
    width: 100%;
    flex-direction: column;
  }

  .us-rgpd-banner__btn {
    width: 100%;
  }
}

/* —— Topbar « impersonation » (connexion déléguée) —— */
/* Sticky en tête de <body> : pousse le contenu vers le bas ET reste visible au scroll. */
.us-impersonation-banner {
  position: sticky;
  top: 0;
  z-index: 1090;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem 1rem;
  flex-wrap: wrap;
  padding: 0.5rem 1rem;
  background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
  color: #fff;
  font-size: 0.875rem;
  line-height: 1.4;
  box-shadow: 0 2px 10px rgba(15, 23, 42, 0.25);
}

.us-impersonation-banner__info {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  min-width: 0;
}

.us-impersonation-banner__icon {
  flex: 0 0 auto;
  font-size: 1.15rem;
  line-height: 1;
}

.us-impersonation-banner__text {
  min-width: 0;
}

.us-impersonation-banner__text strong {
  font-weight: 700;
}

.us-impersonation-banner__email {
  opacity: 0.85;
}

.us-impersonation-banner__form {
  margin: 0;
  flex: 0 0 auto;
}

.us-impersonation-banner__btn {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.35rem 0.9rem;
  border: none;
  border-radius: 0.4rem;
  background: rgba(255, 255, 255, 0.95);
  color: #b45309;
  font-size: 0.8125rem;
  font-weight: 600;
  line-height: 1.2;
  cursor: pointer;
  white-space: nowrap;
  transition: background-color 0.15s ease, transform 0.1s ease, box-shadow 0.15s ease;
}

.us-impersonation-banner__btn:hover {
  background: #fff;
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.2);
  transform: translateY(-1px);
}

.us-impersonation-banner__btn:active {
  transform: translateY(0);
}

@media (max-width: 575.98px) {
  .us-impersonation-banner__email {
    display: none;
  }
}

/* —— Interrupteur On / Off des tableaux d'administration ——————————————————
   Un `.form-switch` de Bootstrap fait 2 rem de large et se perd dans un tableau
   dense : partout ou une colonne (ou un coin de carte) n'existe QUE pour cet
   interrupteur, on l'agrandit franchement.

   POURQUOI DANS LE COEUR. La regle vivait en double — `_switch_style.blade.php`
   du module Autoscraper et `spider-agent.css` du module SpiderAgent. Deux copies
   des memes valeurs, c'est la premiere retouche qui ne change la taille que d'une
   moitie des ecrans. Elle est ici, chargee par `commonMaster` sur toutes les pages
   d'admin de tous les deploiements ; un module qui veut ce style n'a plus qu'a
   poser la classe.

   `padding-left: 0` annule le decalage de `.form-check`, prevu pour laisser la
   place a un libelle : ici il n'y en a pas, la case doit rester au centre de sa
   colonne.

   CONVENTION D'USAGE — un etat DURABLE (actif/inactif, en pause) se regle par cet
   interrupteur, dans SA propre colonne a gauche des actions, et ne se redit PAS
   ailleurs sous forme de badge : deux rendus du meme booleen, c'est deux endroits
   a corriger le jour ou il change de sens, et un seul qui le sera. La case ne
   porte aucun `name` : le serveur bascule l'etat courant, il ne le recoit pas —
   poster la valeur affichee laisserait un second onglet reste ouvert sur une page
   perimee ecraser l'etat reel. */
.sw-onoff { padding-left: 0; }
.sw-onoff .form-check-input { width: 3rem; height: 1.6rem; margin: 0; float: none; cursor: pointer; }

/* —— Modale defilante dont le <form> enveloppe header / body / footer ————————
   Bootstrap suppose `.modal-header`, `.modal-body` et `.modal-footer` enfants
   DIRECTS de `.modal-content`, qui est un `flex-direction: column` : c'est ce qui
   donne au corps son `flex: 1 1 auto` et borne sa hauteur, sans quoi son
   `overflow-y: auto` (pose par `.modal-dialog-scrollable`) ne se declenche jamais.

   Des qu'un `<form>` s'intercale — pour poster toute la modale d'un bloc, ce que
   fait la moitie de nos modales d'edition — le corps n'est plus un flex item :
   il grandit librement, et le `overflow: hidden` de `.modal-content` COUPE
   simplement le bas du formulaire. Symptome : sur un ecran court, les derniers
   champs ET le bouton Enregistrer deviennent inatteignables, sans barre de
   defilement nulle part. Aucun message, aucune erreur console.

   On rend donc le formulaire lui-meme colonne flex, en relais de `.modal-content`.
   `min-height: 0` n'est pas decoratif : sans lui un flex item refuse de descendre
   sous la hauteur de son contenu, donc rien ne deborde et rien ne defile.

   POURQUOI DANS LE COEUR. Le defaut est structurel, pas propre a un ecran : il
   frappait 10 modales (roles, plans d'abonnement / de credits / One Shot, et les
   deux modales d'edition du module Email). Corrige ici, il l'est partout, et une
   modale future ecrite avec un form n'aura rien a faire de special. */
.modal-dialog-scrollable .modal-content > form {
  display: flex;
  flex-direction: column;
  flex: 1 1 auto;
  min-height: 0;
  max-height: 100%;
}
.modal-dialog-scrollable .modal-content > form > .modal-body { min-height: 0; }

/* —— Une action INDISPONIBLE sur une ligne garde sa place, grisee ————————————
   Retirer une icone quand elle ne s'applique pas decale TOUTES les suivantes :
   la colonne « Actions » est alignee a droite (`text-end`), donc une icone en
   moins fait glisser la corbeille d'une ligne sous le crayon de la ligne du
   dessus — on supprime en croyant editer, et on ne le decouvre qu'apres.

   Ce n'est volontairement PAS un `<button disabled>` : Bootstrap 5 pose
   `pointer-events: none` sur les boutons desactives, donc l'infobulle — le seul
   endroit qui dit POURQUOI l'action manque — ne s'afficherait jamais. C'est un
   `<span>` portant les memes classes `.btn`, neutralise ici.

   POURQUOI DANS LE COEUR : la meme regle etait deja recopiee dans deux modules
   (`.pe-act-off` cote Email, `.sa-act-off` cote SpiderAgent). Toute nouvelle vue
   utilise `.us-act-off` et le partial `materialize.admin.partials._action_off`. */
.us-act-off {
  opacity: .3;
  cursor: not-allowed;
}

/* Un survol qui repond donne l'illusion d'un bouton : la boite reste, la reaction non. */
.us-act-off:hover,
.us-act-off:focus,
.us-act-off:active {
  background-color: transparent;
  border-color: transparent;
  box-shadow: none;
  opacity: .3;
}
