/* ============================================================
   Animations & micro-interactions
   ============================================================ */

/* Hero staggered reveal */
.reveal { opacity: 0; transform: translateY(28px); }
.reveal.in { opacity: 1; transform: translateY(0); transition: opacity .8s var(--ease), transform .8s var(--ease); }
.reveal[data-delay="1"].in { transition-delay: .08s; }
.reveal[data-delay="2"].in { transition-delay: .16s; }
.reveal[data-delay="3"].in { transition-delay: .26s; }
.reveal[data-delay="4"].in { transition-delay: .36s; }
.reveal[data-delay="5"].in { transition-delay: .46s; }

/* Scroll reveal */
.reveal-up { opacity: 0; transform: translateY(40px); transition: opacity .7s var(--ease), transform .7s var(--ease); }
.reveal-up.in { opacity: 1; transform: translateY(0); }
.reveal-up[data-delay="1"] { transition-delay: .08s; }
.reveal-up[data-delay="2"] { transition-delay: .16s; }
.reveal-up[data-delay="3"] { transition-delay: .24s; }
.reveal-up[data-delay="4"] { transition-delay: .32s; }
.reveal-up[data-delay="5"] { transition-delay: .4s; }

/* Typewriter caret blink */
.typewriter { animation: caret .8s step-end infinite; }
@keyframes caret { 50% { border-color: transparent; } }

@keyframes meshFloat {
  0%   { transform: translate(0,0) scale(1); }
  100% { transform: translate(4%, -3%) scale(1.08); }
}

@keyframes scrollDot {
  0% { opacity: 0; transform: translate(-50%, 0); }
  40% { opacity: 1; }
  100% { opacity: 0; transform: translate(-50%, 14px); }
}

@keyframes pulse-dot {
  0%, 100% { box-shadow: 0 0 0 0 rgba(29,158,117,.55); }
  60% { box-shadow: 0 0 0 7px rgba(29,158,117,0); }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
  .reveal, .reveal-up { opacity: 1 !important; transform: none !important; }
}
