@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(14px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes pulseBorder {
    0%, 100% {
        box-shadow: 0 0 0 0 rgba(57, 169, 0, 0.2);
    }
    50% {
        box-shadow: 0 0 0 8px rgba(57, 169, 0, 0);
    }
}

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

.panel,
.quick-card,
.hero-panel,
.page-header,
.auth-card,
.kpi-card,
.alert-item {
    animation: fadeInUp 0.38s ease both;
}

.hero-pill img,
.quick-card img,
.kpi-card img {
    animation: floatIcon 2.4s ease-in-out infinite;
}

.btn-primary {
    animation: pulseBorder 2.8s infinite;
}

@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation: none !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
}
