/* =============================================================
   ASEC ECOSYSTEM — PRESETS DE ANIMAÇÃO
   Keyframes + estados de reveal usados por todos os sites.
   O disparo do reveal é feito por GSAP/ScrollTrigger (asec-motion.js);
   há fallback CSS via .is-visible caso o JS não carregue.
   ============================================================= */

/* ---------- reveal on scroll (fallback sem JS) ---------- */
.reveal{opacity:0;transform:translateY(34px);transition:opacity .9s cubic-bezier(.16,1,.3,1),transform .9s cubic-bezier(.16,1,.3,1)}
.reveal.is-visible{opacity:1;transform:none}
.reveal[data-d="1"]{transition-delay:.08s}
.reveal[data-d="2"]{transition-delay:.16s}
.reveal[data-d="3"]{transition-delay:.24s}
.reveal[data-d="4"]{transition-delay:.32s}

/* ---------- keyframes ---------- */
@keyframes asec-spin{to{transform:rotate(360deg)}}
@keyframes asec-spin-rev{to{transform:rotate(-360deg)}}
@keyframes asec-pulse{0%{transform:scale(1);opacity:.7}100%{transform:scale(1.4);opacity:0}}
@keyframes asec-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}
@keyframes asec-gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}
@keyframes asec-marq{to{transform:translateX(-50%)}}

/* gradiente animado utilitário (hero ambiente) */
.anim-gradient{
  background-size:240% 240%;
  animation:asec-gradient 14s ease infinite;
}

/* respeita preferências de movimento */
@media(prefers-reduced-motion:reduce){
  *{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important}
  .reveal{opacity:1 !important;transform:none !important}
}
