/* Zyvanto Animations */
@keyframes float {
  0%,100%{transform:translateY(0)}
  50%{transform:translateY(-12px)}
}
@keyframes pulse-ring {
  0%{transform:scale(.9);opacity:1}
  100%{transform:scale(1.4);opacity:0}
}
@keyframes spin-slow {
  from{transform:rotate(0deg)}
  to{transform:rotate(360deg)}
}
@keyframes shimmer {
  0%{background-position:-200% 0}
  100%{background-position:200% 0}
}
@keyframes count-up {
  from{opacity:0;transform:translateY(20px)}
  to{opacity:1;transform:translateY(0)}
}
@keyframes text-rotate {
  0%,20%{transform:translateY(0);opacity:1}
  25%,45%{transform:translateY(-100%);opacity:0}
  50%,70%{transform:translateY(-200%);opacity:0}
  5%{transform:translateY(-100%)}
  55%{transform:translateY(-200%)}
}
@keyframes gradient-shift {
  0%{background-position:0% 50%}
  50%{background-position:100% 50%}
  100%{background-position:0% 50%}
}
@keyframes bounce-in {
  0%{transform:scale(0.8);opacity:0}
  60%{transform:scale(1.05);opacity:1}
  100%{transform:scale(1);opacity:1}
}
@keyframes slide-up-appear {
  from{transform:translateY(40px);opacity:0}
  to{transform:translateY(0);opacity:1}
}
@keyframes nav-reveal {
  from{transform:translateY(-100%);opacity:0}
  to{transform:translateY(0);opacity:1}
}

.float-anim { animation: float 4s ease-in-out infinite; }
.float-anim-delayed { animation: float 4s ease-in-out 1s infinite; }
.pulse-ring {
  position:absolute; inset:-8px;
  border-radius:inherit;
  border:2px solid var(--accent);
  animation:pulse-ring 2s ease-out infinite;
  pointer-events:none;
}
.gradient-animated {
  background-size:200% 200%;
  animation:gradient-shift 4s ease infinite;
}

/* Service highlight rotator */
.rotating-text { display:inline-block; overflow:hidden; height:1.2em; vertical-align:bottom; }
.rotating-text-inner { display:flex; flex-direction:column; transition:transform .5s cubic-bezier(.4,0,.2,1); }

/* Shimmer loader */
.shimmer {
  background: linear-gradient(90deg, #f0f4f8 25%, #e0e8f5 50%, #f0f4f8 75%);
  background-size:200% 100%;
  animation:shimmer 1.5s infinite;
}

/* Page load animation */
.page-load { animation: slide-up-appear .8s ease both; }
.page-load-delayed { animation: slide-up-appear .8s .2s ease both; }
.page-load-delayed-2 { animation: slide-up-appear .8s .4s ease both; }

/* Hover lift */
.hover-lift { transition: transform .3s ease, box-shadow .3s ease; }
.hover-lift:hover { transform: translateY(-4px); box-shadow: 0 16px 40px rgba(15,30,61,.15); }

/* Animated underline link */
.underline-link {
  position:relative;
  display:inline-block;
}
.underline-link::after {
  content:'';
  position:absolute;
  left:0; bottom:-2px;
  width:0; height:2px;
  background:var(--accent);
  transition:width .3s ease;
}
.underline-link:hover::after { width:100%; }

/* Button pulse */
.btn-pulse {
  position:relative;
  overflow:visible;
}
.btn-pulse::before {
  content:'';
  position:absolute;
  inset:-4px;
  border-radius:inherit;
  background:var(--accent);
  opacity:.3;
  animation:pulse-ring 2.5s ease-out 1s infinite;
}

/* Counter animation */
.counter-wrap { display:inline-block; }

/* Parallax utility */
.parallax-element { will-change:transform; }

/* Progress bar animation */
.progress-bar-animated {
  width:0;
  transition:width 1.5s ease;
}
.progress-bar-animated.animate { width:var(--target-width, 80%); }
