/* ANIMATIONS — MOT-4 Texte masque montant + reveals sobres */

.reveal{
  opacity: 0;
  transform: translateY(18px);
  transition: opacity .6s ease, transform .65s cubic-bezier(.2,.7,.2,1);
}
.reveal.in{ opacity: 1; transform: translateY(0); }

.stagger > *{
  opacity: 0;
  transform: translateY(20px);
  transition: opacity .55s ease, transform .55s cubic-bezier(.2,.7,.2,1);
}
.stagger.in > *{ opacity: 1; transform: translateY(0); }
.stagger.in > *:nth-child(1){ transition-delay: 0ms; }
.stagger.in > *:nth-child(2){ transition-delay: 70ms; }
.stagger.in > *:nth-child(3){ transition-delay: 140ms; }
.stagger.in > *:nth-child(4){ transition-delay: 210ms; }
.stagger.in > *:nth-child(5){ transition-delay: 280ms; }
.stagger.in > *:nth-child(6){ transition-delay: 350ms; }
.stagger.in > *:nth-child(7){ transition-delay: 420ms; }

/* MOT-4 — Texte masque montant (clip-path) */
.mask-up{
  display: inline-block;
  overflow: hidden;
  position: relative;
}
.mask-up > span{
  display: inline-block;
  transform: translateY(102%);
  transition: transform .8s cubic-bezier(.2,.7,.2,1);
}
.mask-up.in > span,
.in .mask-up > span,
body.is-loaded .hero .mask-up > span{
  transform: translateY(0);
}
.mask-up--delay-1 > span{ transition-delay: 120ms; }
.mask-up--delay-2 > span{ transition-delay: 240ms; }
.mask-up--delay-3 > span{ transition-delay: 360ms; }

/* Dot pulse */
@keyframes dot-pulse{
  0%, 100%{ box-shadow: 0 0 0 4px rgba(94, 207, 124, 0.22); }
  50%{ box-shadow: 0 0 0 8px rgba(94, 207, 124, 0); }
}
.dot{ animation: dot-pulse 2.4s ease-in-out infinite; }
.dot.is-closed{ animation: none; }

@media (prefers-reduced-motion: reduce){
  .reveal, .stagger > *{ opacity: 1 !important; transform: none !important; }
  .mask-up > span{ transform: none !important; }
  .dot{ animation: none !important; }
}
