/* ===================================================================
   ANIMATIONS - scroll reveals, hover micro-interactions, page-load
   =================================================================== */

@keyframes fadeUp{
  from{opacity:0; transform:translateY(28px);}
  to{opacity:1; transform:translateY(0);}
}
@keyframes fadeIn{
  from{opacity:0;} to{opacity:1;}
}
@keyframes drawLine{
  from{stroke-dashoffset:1000;} to{stroke-dashoffset:0;}
}
@keyframes float{
  0%,100%{transform:translateY(0);} 50%{transform:translateY(-8px);}
}
@keyframes spinSlow{
  from{transform:rotate(0deg);} to{transform:rotate(360deg);}
}

.hero-content > *{
  animation:fadeUp .8s var(--ease) both;
}
.hero-content > *:nth-child(1){animation-delay:.05s;}
.hero-content > *:nth-child(2){animation-delay:.15s;}
.hero-content > *:nth-child(3){animation-delay:.25s;}
.hero-content > *:nth-child(4){animation-delay:.35s;}
.hero-content > *:nth-child(5){animation-delay:.45s;}

/* stagger helper for grids: add data-stagger to a container, children get delay */
[data-stagger] > *.reveal.is-visible{transition-delay:calc(var(--i, 0) * 90ms);}

.icon-float{animation:float 5s ease-in-out infinite;}

/* link underline sweep */
.sweep{position:relative; overflow:hidden;}
.sweep::after{
  content:""; position:absolute; left:0; bottom:0; height:1px; width:100%;
  background:var(--orange); transform:scaleX(0); transform-origin:left;
  transition:transform .3s var(--ease);
}
.sweep:hover::after{transform:scaleX(1);}


/* ---------- Typewriter word swap ---------- */
.typewriter-text{
  display:inline;
}

@media (prefers-reduced-motion: reduce){
  .hero-content > *{animation:none; opacity:1;}
  .icon-float, .sweep::after{animation:none;}
}
