/* FinovaTrust — keyframes & motion utilities */

@keyframes float {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-10px);
  }
}

@keyframes pulse-glow {
  0%,
  100% {
    opacity: 0.45;
    filter: blur(0);
  }
  50% {
    opacity: 0.85;
    filter: blur(1px);
  }
}

@keyframes marquee {
  0% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(-50%);
  }
}

@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(28px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes bounce-arrow {
  0%,
  100% {
    transform: translateY(0);
    opacity: 0.85;
  }
  50% {
    transform: translateY(8px);
    opacity: 1;
  }
}

@keyframes grid-drift {
  0% {
    background-position: 0 0, 0 0;
  }
  100% {
    background-position: 80px 80px, -40px -40px;
  }
}

@keyframes particle-float {
  0%,
  100% {
    transform: translate(0, 0) scale(1);
    opacity: 0.35;
  }
  33% {
    transform: translate(12px, -18px) scale(1.05);
    opacity: 0.6;
  }
  66% {
    transform: translate(-10px, 10px) scale(0.98);
    opacity: 0.45;
  }
}

.animate-float {
  animation: float 6s ease-in-out infinite;
}

.animate-pulse-glow {
  animation: pulse-glow 5s ease-in-out infinite;
}

.animate-marquee {
  animation: marquee 36s linear infinite;
}

.animate-bounce-arrow {
  animation: bounce-arrow 2s ease-in-out infinite;
}

.hero-grid-bg {
  animation: grid-drift 28s linear infinite;
}

.reveal.is-visible {
  animation: fadeInUp 0.65s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
