/* Innove — scroll reveal (movimento suave inspirado no site XERF)
   Easing assinatura do XERF: cubic-bezier(.5,0,0,1). Fade + slide vertical.
   Estado inicial aplicado só sob html.innv-anim (setado no <head>) → sem flash. */

html.innv-anim .elementor-widget-heading,
html.innv-anim .elementor-widget-text-editor,
html.innv-anim .elementor-widget-image,
html.innv-anim .elementor-widget-button,
html.innv-anim .elementor-widget-icon-box,
html.innv-anim .elementor-widget-icon-list,
html.innv-anim .elementor-widget-video {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity 1s cubic-bezier(.5, 0, 0, 1),
              transform 1s cubic-bezier(.5, 0, 0, 1);
  will-change: opacity, transform;
}

html.innv-anim .elementor-widget-heading.is-visible,
html.innv-anim .elementor-widget-text-editor.is-visible,
html.innv-anim .elementor-widget-image.is-visible,
html.innv-anim .elementor-widget-button.is-visible,
html.innv-anim .elementor-widget-icon-box.is-visible,
html.innv-anim .elementor-widget-icon-list.is-visible,
html.innv-anim .elementor-widget-video.is-visible {
  opacity: 1;
  transform: none;
}

/* Segurança: se o JS marcar concluído (timeout/fallback), mostra tudo sem animar */
html.innv-anim-done .elementor-widget-heading,
html.innv-anim-done .elementor-widget-text-editor,
html.innv-anim-done .elementor-widget-image,
html.innv-anim-done .elementor-widget-button,
html.innv-anim-done .elementor-widget-icon-box,
html.innv-anim-done .elementor-widget-icon-list,
html.innv-anim-done .elementor-widget-video {
  opacity: 1 !important;
  transform: none !important;
  transition: none !important;
}

/* Acessibilidade: respeita quem prefere menos movimento */
@media (prefers-reduced-motion: reduce) {
  html.innv-anim [class*="elementor-widget-"] {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
}
