/* ==========================================================================
   ANIMATIONS — keyframes + scroll-reveal utility
   Restrained by design: 150–700ms, no constant motion, no parallax.
   ========================================================================== */

.reveal{
  opacity: 0;
  /* translate (not transform) so baked rotations like card tilts survive */
  translate: 0 18px;
  transition: opacity .6s var(--ease-out), translate .6s var(--ease-out);
}
.reveal.is-visible{ opacity: 1; translate: 0 0; }

/* floating header drops into place on load */
@keyframes header-drop{
  from{ opacity: 0; transform: translateY(-14px); }
  to{ opacity: 1; transform: translateY(0); }
}
.site-header{ animation: header-drop .7s var(--ease-out) both; }

/* hero load-in — a short, staggered rise. Uses `translate` so elements
   that already carry a rotate() keep their baked-in tilt. */
@keyframes rise-in{
  from{ opacity: 0; translate: 0 18px; }
  to{ opacity: 1; translate: 0 0; }
}
.hero-copy > *, .hero-visual > *{
  animation: rise-in .7s var(--ease-out) both;
}
.hero-copy > *:nth-child(1){ animation-delay: .05s; }
.hero-copy > *:nth-child(2){ animation-delay: .15s; }
.hero-copy > *:nth-child(3){ animation-delay: .25s; }
.hero-copy > *:nth-child(4){ animation-delay: .35s; }
.hero-copy > *:nth-child(5){ animation-delay: .45s; }
.hero-copy > *:nth-child(6){ animation-delay: .55s; }
.hero-copy > *:nth-child(7){ animation-delay: .65s; }
.hero-visual > *:nth-child(1){ animation-delay: .3s; }
.hero-visual > *:nth-child(2){ animation-delay: .45s; }
.hero-visual > *:nth-child(3){ animation-delay: .58s; }

@keyframes underline-in{ to{ transform: scaleX(1); } }

@keyframes pulse{ 0%, 100%{ opacity: 1; } 50%{ opacity: .45; } }

@keyframes blink{ 50%{ opacity: 0; } }
