/* =====================================================================
   ENSO Loader — préchargeur plein écran (site entier)  v1.1.0
   Entrée en douceur du contenu + sorties fluides au choix.
   ===================================================================== */

#enso-loader{
  position: fixed; inset: 0; z-index: var(--enso-z, 999999);
  display: grid; place-items: center;
  background: var(--enso-bg, #ffffff);
  transition:
    opacity   var(--enso-fade, 700ms) var(--enso-exit-ease, cubic-bezier(.7,0,.2,1)),
    transform var(--enso-fade, 700ms) var(--enso-exit-ease, cubic-bezier(.7,0,.2,1)),
    clip-path var(--enso-fade, 700ms) var(--enso-exit-ease, cubic-bezier(.7,0,.2,1)),
    filter    var(--enso-fade, 700ms) var(--enso-exit-ease, cubic-bezier(.7,0,.2,1));
  will-change: transform, opacity, clip-path;
}
#enso-loader.enso-hidden{ pointer-events: none; }

.enso-loader-inner{ position: relative; z-index: 2; display: grid; place-items: center; gap: 22px; text-align: center; }

.enso-loader-media{ width: min(var(--enso-size, 140px), 42vw); height: auto; display: block; }
.enso-loader-img{ width: 100%; height: auto; display: block; }

.enso-loader-count{
  font-family: var(--enso-font, ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace);
  font-weight: var(--enso-count-weight, 400);
  font-style: var(--enso-count-style, normal);
  font-size: var(--enso-count-size, 13px); letter-spacing: var(--enso-count-ls, .4em); text-transform: uppercase;
  color: var(--enso-count, #16130F); display: inline-flex; gap: .6em; align-items: center;
}
.enso-loader-count b{ font-weight: 500; color: var(--enso-accent, #C0402E); }

html.enso-lock, body.enso-lock{ overflow: hidden !important; }

/* ---------------- ANIMATION DE L'IMAGE (pendant le chargement) ---------------- */
.enso-anim-spin .enso-loader-media{ animation: enso-spin var(--enso-speed, 1600ms) linear infinite; animation-direction: var(--enso-dir, normal); }
@keyframes enso-spin{ to{ transform: rotate(360deg); } }
.enso-anim-pulse .enso-loader-media{ animation: enso-pulse var(--enso-speed, 1600ms) ease-in-out infinite; }
@keyframes enso-pulse{ 0%,100%{ transform: scale(.9); } 50%{ transform: scale(1.06); } }
.enso-anim-breathe .enso-loader-media{ animation: enso-breathe var(--enso-speed, 1600ms) ease-in-out infinite; }
@keyframes enso-breathe{ 0%,100%{ opacity: .35; } 50%{ opacity: 1; } }
.enso-anim-fade-rotate .enso-loader-media{ animation: enso-fadrot var(--enso-speed, 2200ms) ease-in-out infinite; animation-direction: var(--enso-dir, normal); }
@keyframes enso-fadrot{ 0%{ opacity: .3; transform: rotate(-14deg); } 50%{ opacity: 1; } 100%{ opacity: .3; transform: rotate(14deg); } }
.enso-anim-draw .enso-loader-media{ animation: enso-spin calc(var(--enso-speed, 1600ms) * 2.4) linear infinite; animation-direction: var(--enso-dir, normal); }
.enso-draw-ready.enso-anim-draw .enso-loader-media{ animation: none; }

/* ---------------- ANIMATION D'ENTRÉE (apparition du contenu) ---------------- */
.enso-in-fade  .enso-loader-inner{ animation: enso-in-fade  var(--enso-in, 700ms) var(--enso-in-ease, cubic-bezier(.2,.7,.2,1)) both; }
.enso-in-rise  .enso-loader-inner{ animation: enso-in-rise  var(--enso-in, 700ms) var(--enso-in-ease, cubic-bezier(.2,.7,.2,1)) both; }
.enso-in-zoom  .enso-loader-inner{ animation: enso-in-zoom  var(--enso-in, 700ms) var(--enso-in-ease, cubic-bezier(.2,.7,.2,1)) both; }
@keyframes enso-in-fade{ from{ opacity: 0; } to{ opacity: 1; } }
@keyframes enso-in-rise{ from{ opacity: 0; transform: translateY(16px); } to{ opacity: 1; transform: none; } }
@keyframes enso-in-zoom{ from{ opacity: 0; transform: scale(.82); } to{ opacity: 1; transform: none; } }

/* ---------------- SORTIES FLUIDES (au masquage) ---------------- */
/* Fondu */
#enso-loader.enso-exit-fade.enso-hidden{ opacity: 0; }
/* Glissé vers le haut (révèle la page) */
#enso-loader.enso-exit-slide-up.enso-hidden{ transform: translateY(-100%); }
/* Glissé vers le bas */
#enso-loader.enso-exit-slide-down.enso-hidden{ transform: translateY(100%); }
/* Zoom + fondu */
#enso-loader.enso-exit-zoom.enso-hidden{ opacity: 0; transform: scale(1.12); }
/* Flou + fondu */
#enso-loader.enso-exit-blur.enso-hidden{ opacity: 0; filter: blur(22px); }
/* Cercle qui se referme au centre */
#enso-loader.enso-exit-circle{ clip-path: circle(150% at 50% 50%); }
#enso-loader.enso-exit-circle.enso-hidden{ clip-path: circle(0% at 50% 50%); }
/* Balayage vers le haut (la page se dévoile du bas vers le haut) */
#enso-loader.enso-exit-reveal-up{ clip-path: inset(0 0 0 0); }
#enso-loader.enso-exit-reveal-up.enso-hidden{ clip-path: inset(0 0 100% 0); }
/* Pour les sorties par transformation, le contenu s'efface un peu avant */
#enso-loader.enso-exit-slide-up.enso-hidden .enso-loader-inner,
#enso-loader.enso-exit-slide-down.enso-hidden .enso-loader-inner,
#enso-loader.enso-exit-circle.enso-hidden .enso-loader-inner,
#enso-loader.enso-exit-reveal-up.enso-hidden .enso-loader-inner{
  opacity: 0; transition: opacity calc(var(--enso-fade, 700ms) * .45) ease;
}

/* ---------------- RIDEAU (deux panneaux qui s'écartent) ---------------- */
.enso-panels{ position: absolute; inset: 0; display: none; z-index: 1; }
#enso-loader.enso-exit-curtain{ background: transparent; }
#enso-loader.enso-exit-curtain .enso-panels{ display: block; }
.enso-panel{
  position: absolute; left: 0; right: 0; height: 50.2%; background: var(--enso-bg, #ffffff);
  transition: transform var(--enso-fade, 700ms) var(--enso-exit-ease, cubic-bezier(.7,0,.2,1));
}
.enso-panel-t{ top: 0; }
.enso-panel-b{ bottom: 0; }
#enso-loader.enso-exit-curtain.enso-hidden .enso-panel-t{ transform: translateY(-100%); }
#enso-loader.enso-exit-curtain.enso-hidden .enso-panel-b{ transform: translateY(100%); }
#enso-loader.enso-exit-curtain.enso-hidden .enso-loader-inner{
  opacity: 0; transition: opacity calc(var(--enso-fade, 700ms) * .4) ease;
}

@media (prefers-reduced-motion: reduce){
  .enso-loader-media, .enso-loader-inner{ animation: none !important; }
  #enso-loader{ transition: opacity 200ms linear !important; }
  #enso-loader.enso-hidden{ opacity: 0 !important; transform: none !important; clip-path: none !important; }
}
