/* ============================================
   ANIMATIONS — Reveal, transitions, motion premium
   ============================================ */

/* ===== REVEAL ANIMATIONS — Base ===== */
/* IMPORTANTE: opacity 0 via CSS apenas, nunca via JS (regra KOP) */
.rv {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 700ms var(--ease-premium),
              transform 700ms var(--ease-premium);
  will-change: opacity, transform;
}

.rv.vis {
  opacity: 1;
  transform: translateY(0);
}

/* ===== STAGGER — delay por posição ===== */
.rv--d1.vis { transition-delay: 80ms; }
.rv--d2.vis { transition-delay: 180ms; }
.rv--d3.vis { transition-delay: 280ms; }
.rv--d4.vis { transition-delay: 380ms; }
.rv--d5.vis { transition-delay: 480ms; }
.rv--d6.vis { transition-delay: 580ms; }

/* ===== FADE simples (sem translate) ===== */
.rv-fade {
  opacity: 0;
  transition: opacity 900ms var(--ease-premium);
  will-change: opacity;
}

.rv-fade.vis {
  opacity: 1;
}

/* ===== SCALE (entrada com leve zoom) ===== */
.rv-scale {
  opacity: 0;
  transform: scale(0.96);
  transition: opacity 900ms var(--ease-premium),
              transform 900ms var(--ease-premium);
  will-change: opacity, transform;
}

.rv-scale.vis {
  opacity: 1;
  transform: scale(1);
}

/* ===== SLIDE (entrada da lateral) ===== */
.rv-slide-r {
  opacity: 0;
  transform: translateX(40px);
  transition: opacity 800ms var(--ease-premium),
              transform 800ms var(--ease-premium);
  will-change: opacity, transform;
}

.rv-slide-r.vis {
  opacity: 1;
  transform: translateX(0);
}

.rv-slide-l {
  opacity: 0;
  transform: translateX(-40px);
  transition: opacity 800ms var(--ease-premium),
              transform 800ms var(--ease-premium);
  will-change: opacity, transform;
}

.rv-slide-l.vis {
  opacity: 1;
  transform: translateX(0);
}

/* ===== CLIP REVEAL (tipo cinema, corte de baixo pra cima) ===== */
.rv-clip {
  clip-path: inset(0 0 100% 0);
  opacity: 0;
  transition: clip-path 1100ms var(--ease-premium),
              opacity 600ms var(--ease-premium);
  will-change: clip-path, opacity;
}

.rv-clip.vis {
  clip-path: inset(0 0 0 0);
  opacity: 1;
}

/* ===== BLUR IN (entrada com desfoque cinematográfico) ===== */
.rv-blur {
  opacity: 0;
  filter: blur(12px);
  transition: opacity 900ms var(--ease-premium),
              filter 900ms var(--ease-premium);
  will-change: opacity, filter;
}

.rv-blur.vis {
  opacity: 1;
  filter: blur(0);
}

/* ===== RESPEITO A prefers-reduced-motion (acessibilidade KOP) ===== */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }

  .rv, .rv-fade, .rv-scale, .rv-slide-r, .rv-slide-l, .rv-clip, .rv-blur {
    opacity: 1 !important;
    transform: none !important;
    clip-path: none !important;
    filter: none !important;
  }
}
