@keyframes gradientFlow {
    0%, 100% { background-position: 0% 50%; }
    50% { background-position: 100% 50%; }
}

@keyframes floatOrb {
    0%, 100% { transform: translateY(0) translateX(0); }
    50% { transform: translateY(-18px) translateX(12px); }
}

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

@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(18px);
    }

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

@keyframes shineFlow {
    0% { transform: translateX(-120%) skewX(-18deg); }
    100% { transform: translateX(220%) skewX(-18deg); }
}

@keyframes marquee {
    0% { transform: translateX(0); }
    100% { transform: translateX(-50%); }
}

.reveal {
    animation: fadeInUp 0.75s ease both;
}

.glass-card--shine::after {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 40%;
    height: 100%;
    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.34), transparent);
    animation: shineFlow 6s ease-in-out infinite;
    pointer-events: none;
}

body.is-ready .guest-navbar,
body.is-ready .hero-banner,
body.is-ready .announcement-bar {
    animation: fadeInUp 0.6s ease both;
}

.claim-form__submit span,
.login-form__submit {
    position: relative;
    z-index: 1;
}

.hero-banner__slide.is-active .hero-banner__image {
    animation: fadeInUp 0.8s ease both;
}
