@keyframes spin { to { transform: rotate(360deg); } }
@keyframes fadeUp { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: translateY(0); } }
@keyframes fadeDown { from { opacity: 0; transform: translateY(-24px); } to { opacity: 1; transform: translateY(0); } }
@keyframes fadeLeft { from { opacity: 0; transform: translateX(-34px); } to { opacity: 1; transform: translateX(0); } }
@keyframes fadeRight { from { opacity: 0; transform: translateX(34px); } to { opacity: 1; transform: translateX(0); } }
@keyframes zoomIn { from { opacity: 0; transform: scale(.94); } to { opacity: 1; transform: scale(1); } }
@keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-14px); } }
@keyframes drift { 0%, 100% { transform: translate3d(0, 0, 0) rotate(0); } 50% { transform: translate3d(18px, -22px, 0) rotate(10deg); } }
@keyframes ripple { to { transform: scale(4); opacity: 0; } }

.reveal {
  opacity: 0;
  transition: opacity .72s ease, transform .72s ease;
  will-change: opacity, transform;
}
.fade-up { transform: translateY(32px); }
.fade-down { transform: translateY(-32px); }
.fade-left { transform: translateX(-42px); }
.fade-right { transform: translateX(42px); }
.zoom-in { transform: scale(.94); }
.reveal.visible { opacity: 1; transform: translate(0, 0) scale(1); }
.floating-card { animation: float 5.8s ease-in-out infinite; }
.metric-two { animation-delay: -2s; }
.image-zoom { overflow: hidden; }
.image-zoom img { transition: transform .45s ease; }
.image-zoom:hover img { transform: scale(1.06); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
    transition-duration: .001ms !important;
  }
  .reveal { opacity: 1; transform: none; }
}
