/* Revelado al entrar en pantalla. Solo se oculta con JS; .no-anim es el fallback si el módulo falla. */
.js [data-reveal] {
  opacity: 0; transform: translateY(36px);
  transition: opacity .9s var(--ease), transform .9s var(--ease);
  transition-delay: calc(var(--i, 0) * 110ms);
}
.js [data-reveal='left'] { transform: translateX(-48px); }
.js [data-reveal='right'] { transform: translateX(48px); }
.js [data-reveal].is-visible { opacity: 1; transform: none; }
.no-anim [data-reveal] { opacity: 1 !important; transform: none !important; }

/* En móvil no entran de lado: evita desborde horizontal. */
@media (max-width: 959px) {
  .js [data-reveal='left'], .js [data-reveal='right'] { transform: translateY(36px); }
  .js [data-reveal].is-visible { transform: none; }
}

@media (prefers-reduced-motion: reduce) {
  .js [data-reveal] { opacity: 1; transform: none; transition: none; }
  .js [data-hero-in], .js .bubble { opacity: 1; transform: none; }
  .js .w__i { transform: none; }
  .js [data-split]:not(.is-split) { visibility: visible; }
  .js .about__photo { clip-path: none; }
}
