/* ══════════════════════════════════════════════════════════
   ALTIRO TECHNOLOGIES — animations.css
   Keyframes + scroll-reveal helper classes
   ══════════════════════════════════════════════════════════ */

@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}
@keyframes blink{0%,100%{opacity:1}50%{opacity:0}}
@keyframes ticker{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes fadeUp{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:translateY(0)}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes waPing{
  0%,100%{box-shadow:0 0 0 2px var(--bg),0 0 0 4px rgba(37,211,102,0)}
  50%{box-shadow:0 0 0 2px var(--bg),0 0 0 8px rgba(37,211,102,.35)}
}
@keyframes flowDash{to{stroke-dashoffset:-32}}
@keyframes fdPulse{0%,100%{opacity:.4;r:5}50%{opacity:1;r:6.5}}
@keyframes fdTravel{from{offset-distance:0%;opacity:0}5%{opacity:1}95%{opacity:1}to{offset-distance:100%;opacity:0}}
@keyframes dmBarGrow{from{height:0}to{height:var(--h)}}

.anim-up{opacity:0;animation:fadeUp .7s ease forwards}
.d1{animation-delay:.1s}
.d2{animation-delay:.2s}
.d3{animation-delay:.3s}
.d4{animation-delay:.4s}
.d5{animation-delay:.5s}
.d6{animation-delay:.6s}

/* Scroll-reveal target: JS toggles opacity/transform via IntersectionObserver */
.anim-target{opacity:0;transform:translateY(28px);transition:opacity .7s ease,transform .7s ease}
.anim-target.in-view{opacity:1;transform:translateY(0)}

@media (prefers-reduced-motion: reduce){
  .anim-up,.anim-target{animation:none!important;transition:none!important;opacity:1!important;transform:none!important}
  .ticker-inner,.fd-line,.fd-pulse,.fd-dot,.timeline-path{animation:none!important}
  .dm-bar{animation:none!important;height:var(--h)!important}
}
