/* =========================================================
   animations.css — premium reveal + shine (safe)
   ========================================================= */

.reveal{
  opacity:0;
  transform: translateY(18px);
  transition:
    opacity .85s ease,
    transform .85s cubic-bezier(.2,.9,.2,1);
  will-change: transform, opacity;
}
.reveal.in{opacity:1; transform: translateY(0);}

/* Never hide hero content even if JS fails */
.hero .reveal{
  opacity:1;
  transform:none;
}

.shine{position:relative; overflow:hidden}
.shine::after{
  content:"";
  position:absolute; inset:-30% -60%;
  background: linear-gradient(120deg, transparent 30%, rgba(255,255,255,.18), transparent 70%);
  transform: translateX(-70%) rotate(10deg);
  animation: shine 4.4s ease-in-out infinite;
  pointer-events:none;
}
@keyframes shine{
  0%{ transform: translateX(-70%) rotate(10deg); opacity:0}
  18%{opacity:1}
  55%{opacity:1}
  100%{ transform: translateX(70%) rotate(10deg); opacity:0}
}

@media (prefers-reduced-motion: reduce){
  .reveal{transition:none; transform:none; opacity:1}
  .shine::after{animation:none}
}
