.stb-animate-fade-up,
.stb-animate-fade-in,
.stb-animate-slide-in,
.stb-animate-scale-in,
.stb-reveal {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity var(--stb-reveal-duration, 320ms) ease, transform var(--stb-reveal-duration, 320ms) ease;
}

.stb-animate-fade-in {
  transform: none;
}

.stb-animate-slide-in {
  transform: translateX(-18px);
}

.stb-animate-scale-in {
  transform: scale(0.98);
}

.stb-reveal-visible,
.stb-animate-fade-up.is-visible,
.stb-animate-fade-in.is-visible,
.stb-animate-slide-in.is-visible,
.stb-animate-scale-in.is-visible {
  opacity: 1;
  transform: none;
}

.stb-status-pulse {
  animation: stb-status-pulse var(--stb-pulse-duration, 2100ms) ease-in-out infinite;
}

.stb-dashboard-float {
  animation: stb-dashboard-float var(--stb-float-duration, 6000ms) ease-in-out infinite;
}

.stb-gradient-shift {
  background-size: 200% 200%;
  animation: stb-gradient-shift var(--stb-gradient-duration, 8000ms) ease infinite;
}

@keyframes stb-status-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(0, 174, 239, 0.00); }
  50% { box-shadow: 0 0 0 8px rgba(0, 174, 239, 0.10); }
}

@keyframes stb-dashboard-float {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-8px); }
}

@keyframes stb-gradient-shift {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

@media (prefers-reduced-motion: reduce) {
  .stb-animate-fade-up,
  .stb-animate-fade-in,
  .stb-animate-slide-in,
  .stb-animate-scale-in,
  .stb-reveal {
    opacity: 1;
    transform: none;
    transition: none;
  }

  .stb-status-pulse,
  .stb-dashboard-float,
  .stb-gradient-shift {
    animation: none;
  }
}
