/* ================================================
   SHARED KEYFRAMES & MOTION UTILITIES
================================================ */
@keyframes sweep {
    to {
        background-position: 220% center;
    }
}

@keyframes fade-in-up {
    from {
        opacity: 0;
        transform: translateY(28px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes spin-slow {
    to {
        transform: rotate(360deg);
    }
}

/* Blinking glow on the "com a Bytrix" deadline badges (48h, Sprints
   Quinzenais, 30 dias) so the commitments read as active/live. */
@keyframes badge-pulse {

    0%,
    100% {
        box-shadow: 0 0 0 rgba(59, 130, 246, 0);
    }

    50% {
        box-shadow: 0 0 14px rgba(59, 130, 246, .6);
    }
}

.compare-metric {
    animation: badge-pulse 2.2s ease-in-out infinite;
}

/* GSAP hooks: elements start hidden via inline style set by scrollReveal.js,
   this class is a safety net if the script fails to load */
.gsap-fallback-hidden {
    opacity: 0;
}

@media (prefers-reduced-motion: reduce) {

    .chrome-grad,
    .orb,
    .hero-badge i,
    .sp-fill,
    .compare-card-good-wrap,
    .compare-arrow-ring,
    .compare-metric {
        animation: none !important;
    }

    .gsap-fallback-hidden {
        opacity: 1;
    }
}
