/* =========================================================================
   animations.css — apparitions au défilement, lueurs, images-clés
   ========================================================================= */

/* Apparition au défilement (pilotée par IntersectionObserver) */
.reveal {
  opacity: 0;
  transform: translateY(26px);
  transition:
    opacity .9s var(--ease-out) var(--reveal-delay, 0ms),
    transform .9s var(--ease-out) var(--reveal-delay, 0ms),
    filter .9s var(--ease-out) var(--reveal-delay, 0ms);
  filter: blur(6px);
  will-change: opacity, transform;
}
.reveal--scale { transform: translateY(30px) scale(.965); }
.reveal.is-visible {
  opacity: 1;
  transform: none;
  filter: blur(0);
}

/* Le JS n'est pas disponible : on affiche tout */
.no-js .reveal { opacity: 1; transform: none; filter: none; }

/* Lueur discrète sur les titres au survol de la section */
.section__title { position: relative; }

@keyframes drift-a {
  from { transform: translate3d(0,0,0) scale(1); }
  to   { transform: translate3d(-6vw, 5vh, 0) scale(1.12); }
}
@keyframes drift-b {
  from { transform: translate3d(0,0,0) scale(1.05); }
  to   { transform: translate3d(7vw, -6vh, 0) scale(.94); }
}
@keyframes scroll-cue {
  0%   { transform: translateY(0);   opacity: 0; }
  35%  { opacity: 1; }
  100% { transform: translateY(14px); opacity: 0; }
}
@keyframes pulse-soft {
  0%, 100% { opacity: .35; }
  50%      { opacity: .9; }
}
@keyframes book-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}

.fb.is-ready { animation: book-in 1.1s var(--ease-out) both; }

/* Repli mouvement réduit : pas de dérive de fond, pas de flou */
@media (prefers-reduced-motion: reduce) {
  .aurora__blob { animation: none; }
  .reveal { opacity: 1; transform: none; filter: none; }
  .fb.is-ready { animation: none; }
}

@keyframes spin { to { transform: rotate(360deg); } }
