/* ====================================================
   Arms — Loader plein écran (chargement de page / navigation)
   Voir views/partials/page-loader.php et public/js/page-loader.js.
   L'animation elle-même (.loading svg polyline...) vit dans
   global-search.css — réutilisée telle quelle, pas dupliquée.

   Site public : header et footer restent visibles pendant le chargement
   (le loader ne les recouvre plus) et la page ne scrolle jamais pendant
   ce temps — même mécanisme que les pages d'erreur (voir
   body.error-page-body dans page-error.css) : le loader prend, via flex,
   toute la place du <main> qu'il remplace visuellement (masqué tant
   qu'il est affiché), entre le header (position: fixed, hors du flux) et
   le footer.

   Piloté via la classe .page-ready posée sur <body> par page-loader.js —
   PAS directement via .hidden sur #pageLoader : .hidden ne fait
   qu'amorcer le fondu (transition 0.25s), et .page-ready n'est ajoutée
   qu'une fois ce fondu terminé (voir revealContent() dans page-loader.js).
   Sans ce décalage, le <main> réapparaîtrait brutalement pendant que le
   loader est encore visible en train de s'estomper, ce qui décalerait
   brièvement le contenu sous le header.

   Dashboard (body.dash-body) exclu de ce mécanisme : sa mise en page
   (sidebar + topbar, voir dashboard.css) n'a ni <main> ni <footer> —
   il garde donc l'ancien comportement plein écran ci-dessous.
   ==================================================== */

.page-loader {
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 1;
  visibility: visible;
  transition: opacity 0.25s ease, visibility 0s linear 0s;
}

/* .hidden plutôt que display:none directement : la transition d'opacité
   a besoin que l'élément reste peint le temps du fondu, avant de sortir
   du flux (visibility, avec un délai calé sur la durée du fondu). */
.page-loader.hidden {
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.25s ease, visibility 0s linear 0.25s;
  pointer-events: none;
}

body:not(.dash-body):not(.page-ready) {
  min-height: 100vh;
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
body:not(.dash-body):not(.page-ready) main {
  display: none;
}
body:not(.dash-body):not(.page-ready) .page-loader {
  flex: 1 0 auto;
  padding-top: 100px; /* dégage le header fixe (72px + marge), même valeur que .error-screen */
  background: var(--c-bg);
}

/* Dashboard : ancien comportement, plein écran au-dessus de tout,
   indépendant de .page-ready. */
body.dash-body .page-loader {
  position: fixed;
  inset: 0;
  z-index: 500;
  background: var(--c-bg);
}
