/* ── Scroll Reveal ── */
.reveal {
    opacity: 0;
    transform: translateY(28px);
    transition:
        opacity  0.75s cubic-bezier(0.16, 1, 0.3, 1),
        transform 0.75s cubic-bezier(0.16, 1, 0.3, 1);
}
.reveal.in-view {
    opacity: 1;
    transform: translateY(0);
}

/* Delay helpers for staggered children */
.reveal-d1 { transition-delay: 0.08s; }
.reveal-d2 { transition-delay: 0.16s; }
.reveal-d3 { transition-delay: 0.24s; }
.reveal-d4 { transition-delay: 0.32s; }

/* Slide from left/right variants */
.reveal-left {
    opacity: 0;
    transform: translateX(-28px);
    transition:
        opacity  0.75s cubic-bezier(0.16, 1, 0.3, 1),
        transform 0.75s cubic-bezier(0.16, 1, 0.3, 1);
}
.reveal-left.in-view { opacity: 1; transform: translateX(0); }

.reveal-right {
    opacity: 0;
    transform: translateX(28px);
    transition:
        opacity  0.75s cubic-bezier(0.16, 1, 0.3, 1),
        transform 0.75s cubic-bezier(0.16, 1, 0.3, 1);
}
.reveal-right.in-view { opacity: 1; transform: translateX(0); }

/* Animations */
@keyframes float {
    0% { transform: translate(0, 0) scale(1); }
    50% { transform: translate(30px, -30px) scale(1.05); }
    100% { transform: translate(-20px, 20px) scale(0.95); }
}

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

.fade-in-up {
    opacity: 0;
    animation: fadeInUp 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}

/* Shimmer Button Effect */
.shine-effect::after {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 50%;
    height: 100%;
    background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.3) 50%, rgba(255,255,255,0) 100%);
    transform: skewX(-20deg);
    animation: shine 4s infinite;
}

@keyframes shine {
    0% { left: -100%; }
    20% { left: 200%; }
    100% { left: 200%; }
}

@keyframes pulse-glow {
    0% { box-shadow: 0 0 0 0 rgba(75, 150, 207, 0.35); }
    70% { box-shadow: 0 0 0 10px rgba(75, 150, 207, 0); }
    100% { box-shadow: 0 0 0 0 rgba(75, 150, 207, 0); }
}

.pulse {
    animation: pulse-glow 2s infinite;
}
