/* ==========================================================================
   ANIMATIONS — all GPU-accelerated (transform / opacity only)
   ========================================================================== */

@keyframes fadeIn{ from{ opacity:0; } to{ opacity:1; } }
@keyframes slideUp{ from{ opacity:0; transform:translate3d(0,32px,0); } to{ opacity:1; transform:translate3d(0,0,0); } }
@keyframes slideUpSm{ from{ opacity:0; transform:translate3d(0,14px,0); } to{ opacity:1; transform:translate3d(0,0,0); } }
@keyframes floatY{ 0%,100%{ transform:translate3d(0,0,0); } 50%{ transform:translate3d(0,-16px,0); } }
@keyframes floatYSlow{ 0%,100%{ transform:translate3d(0,0,0) rotate(0deg); } 50%{ transform:translate3d(0,-22px,0) rotate(3deg); } }
@keyframes meshDrift{
  0%{ transform:translate3d(0,0,0) scale(1); }
  50%{ transform:translate3d(-2%,2%,0) scale(1.06); }
  100%{ transform:translate3d(0,0,0) scale(1); }
}
@keyframes spinSlow{ to{ transform:rotate(360deg); } }
@keyframes pulseGlow{ 0%,100%{ opacity:.5; } 50%{ opacity:1; } }
@keyframes ticker{ from{ transform:translate3d(0,0,0); } to{ transform:translate3d(-50%,0,0); } }
@keyframes reflectSweep{ from{ transform:translate3d(-140%,0,0) skewX(-12deg);} to{ transform:translate3d(180%,0,0) skewX(-12deg);} }

/* ---- Scroll reveal (JS toggles .is-visible via IntersectionObserver) ---- */
[data-reveal]{
  opacity:0;
  transform:translate3d(0,32px,0);
  transition:opacity .8s var(--ease-soft), transform .8s var(--ease-soft);
  will-change:transform, opacity;
}
[data-reveal].is-visible{ opacity:1; transform:translate3d(0,0,0); }
[data-reveal="fade"]{ transform:none; }
[data-reveal].is-visible[data-reveal="fade"]{ transform:none; }

/* staggered children */
[data-reveal-group] > *{
  opacity:0; transform:translate3d(0,26px,0);
  transition:opacity .7s var(--ease-soft), transform .7s var(--ease-soft);
}
[data-reveal-group].is-visible > *{ opacity:1; transform:translate3d(0,0,0); }
[data-reveal-group].is-visible > *:nth-child(1){ transition-delay:.05s; }
[data-reveal-group].is-visible > *:nth-child(2){ transition-delay:.14s; }
[data-reveal-group].is-visible > *:nth-child(3){ transition-delay:.23s; }
[data-reveal-group].is-visible > *:nth-child(4){ transition-delay:.32s; }
[data-reveal-group].is-visible > *:nth-child(5){ transition-delay:.41s; }
[data-reveal-group].is-visible > *:nth-child(6){ transition-delay:.5s; }

/* ---- floating decorative shapes -----------------------------------------*/
.floating-shape{
  position:absolute; border-radius:50%; pointer-events:none;
  filter:blur(2px);
  animation:floatY 7s ease-in-out infinite;
  will-change:transform;
}
.floating-shape.slow{ animation:floatYSlow 11s ease-in-out infinite; }

/* ---- animated mesh gradient background ------------------------------------*/
.bg-mesh{
  position:absolute; inset:-10%;
  background:var(--grad-bg-mesh);
  animation:meshDrift 18s ease-in-out infinite;
  will-change:transform;
  pointer-events:none;
}

/* ---- glass reflection sweep (hero card) ------------------------------------*/
.reflect-sweep{ position:absolute; inset:0; overflow:hidden; pointer-events:none; border-radius:inherit; }
.reflect-sweep::before{
  content:''; position:absolute; top:0; bottom:0; width:36%;
  background:linear-gradient(100deg, transparent, rgba(255,255,255,.10), transparent);
  animation:reflectSweep 6.5s ease-in-out infinite;
  animation-delay:2s;
}

/* ---- entrance on load ------------------------------------------------------*/
.enter-fade{ animation:fadeIn 1s var(--ease-soft) both; }
.enter-up{ animation:slideUp .9s var(--ease-soft) both; }
.enter-up-sm{ animation:slideUpSm .7s var(--ease-soft) both; }
.d-1{ animation-delay:.08s; } .d-2{ animation-delay:.18s; } .d-3{ animation-delay:.28s; }
.d-4{ animation-delay:.38s; } .d-5{ animation-delay:.48s; }
