[data-reveal] {
  opacity: 0;
  transform: translateY(26px);
  transition: opacity 650ms ease, transform 650ms ease;
}

[data-reveal].is-visible {
  opacity: 1;
  transform: translateY(0);
}

[data-reveal="left"] {
  transform: translateX(-28px);
}

[data-reveal="right"] {
  transform: translateX(28px);
}

[data-reveal="zoom"] {
  transform: scale(0.96);
}

[data-reveal="left"].is-visible,
[data-reveal="right"].is-visible,
[data-reveal="zoom"].is-visible {
  transform: none;
}

.floating-badge {
  animation: floatBadge 5s ease-in-out infinite;
}

.floating-badge:nth-child(2n) {
  animation-duration: 6.2s;
}

.floating-badge:nth-child(3n) {
  animation-duration: 5.5s;
}

.btn,
.btn-outline {
  position: relative;
  overflow: hidden;
}

.btn::after,
.btn-outline::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(120deg, transparent 0%, rgba(255, 255, 255, 0.42) 48%, transparent 100%);
  transform: translateX(-140%);
  transition: transform 700ms ease;
}

.btn:hover::after,
.btn-outline:hover::after {
  transform: translateX(140%);
}

.tilt-card {
  transform-style: preserve-3d;
  will-change: transform;
}

.pulse {
  animation: pulseGlow 2.1s ease-in-out infinite;
}

@keyframes floatBadge {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-10px);
  }
}

@keyframes pulseGlow {
  0%,
  100% {
    box-shadow: 0 18px 36px rgba(22, 163, 74, 0.34);
  }
  50% {
    box-shadow: 0 18px 42px rgba(22, 163, 74, 0.52);
  }
}
