/* ============================================================
   ANIMATIONS – Float, Reveal, Hover effects
============================================================ */

/* ── Float animations ── */
@keyframes floatY {
  0%, 100% { transform: translateX(-50%) translateY(0px); }
  50%       { transform: translateX(-50%) translateY(-14px); }
}

@keyframes floatYSlow {
  0%, 100% { transform: translateY(0px); }
  50%       { transform: translateY(-10px); }
}

@keyframes floatYMed {
  0%, 100% { transform: translateY(0px); }
  50%       { transform: translateY(-12px); }
}

.float-y      { animation: floatY     4.5s ease-in-out infinite; }
.float-y-slow { animation: floatYSlow 6s   ease-in-out infinite; }
.float-y-med  { animation: floatYMed  5s   ease-in-out infinite 0.8s; }

/* ── Reveal animations ── */
.reveal-up {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.65s ease, transform 0.65s ease;
  transition-delay: var(--delay, 0ms);
}

.reveal-right {
  opacity: 0;
  transform: translateX(32px);
  transition: opacity 0.7s ease, transform 0.7s ease;
}

.reveal-up.visible,
.reveal-right.visible {
  opacity: 1;
  transform: translate(0, 0);
}

/* ── Shimmer on cards ── */
@keyframes shimmer {
  from { background-position: -200% center; }
  to   { background-position: 200% center; }
}

/* ── Pulse ring ── */
@keyframes pulseRing {
  0%   { box-shadow: 0 0 0 0 rgba(64,224,208,0.4); }
  70%  { box-shadow: 0 0 0 10px rgba(64,224,208,0); }
  100% { box-shadow: 0 0 0 0 rgba(64,224,208,0); }
}

/* ── Gradient shift ── */
@keyframes gradShift {
  0%   { background-position: 0% 50%; }
  50%  { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

/* ── Spin slow ── */
@keyframes spinSlow {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

/* ── Fade in up (for staggered items) ── */
@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ── Scale in ── */
@keyframes scaleIn {
  from { opacity: 0; transform: scale(0.9); }
  to   { opacity: 1; transform: scale(1); }
}

/* ── Slide in left ── */
@keyframes slideInLeft {
  from { opacity: 0; transform: translateX(-24px); }
  to   { opacity: 1; transform: translateX(0); }
}

/* ── Number count up (visual only) ── */
.hstat-num {
  display: inline-block;
  transition: transform 0.3s ease;
}

/* ── Card hover lift ── */
.svc-card,
.pcard,
.price-card,
.tcard {
  will-change: transform;
}

/* ── Gradient text animation ── */
.title-gradient {
  background-size: 200% auto;
  animation: gradShift 4s ease infinite;
}

/* ── Loader ── */
@keyframes loaderFill {
  0%   { width: 0%; }
  60%  { width: 80%; }
  100% { width: 100%; }
}

/* ── Toast entrance ── */
.hv-toast--1 { animation: slideInLeft 0.6s ease 0.8s both; }
.hv-toast--2 { animation: slideInLeft 0.6s ease 1.2s both; }

/* ── Terminal lines stagger ── */
.tline:nth-child(1) { animation: fadeInUp 0.4s ease 0.2s both; }
.tline:nth-child(2) { animation: fadeInUp 0.4s ease 0.4s both; }
.tline:nth-child(3) { animation: fadeInUp 0.4s ease 0.6s both; }
.tline:nth-child(4) { animation: fadeInUp 0.4s ease 0.7s both; }
.tline:nth-child(5) { animation: fadeInUp 0.4s ease 0.8s both; }
.tline:nth-child(6) { animation: fadeInUp 0.4s ease 0.9s both; }
.tline:nth-child(7) { animation: fadeInUp 0.4s ease 1.0s both; }

/* ── Reduced motion ── */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
