/* =============================================
   ANIMATIONS & SHARED EFFECTS
============================================= */
@keyframes slideUp {
    from { opacity: 0; transform: translateY(28px); }
    to   { opacity: 1; transform: translateY(0); }
}
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }

@keyframes drift {
    0%,100% { transform: translate(0,0) scale(1); }
    33% { transform: translate(20px,-28px) scale(1.07); }
    66% { transform: translate(-14px,20px) scale(0.95); }
}

@keyframes glow-pulse {
    0%,100% { text-shadow: 0 0 8px rgba(0,200,255,1), 0 0 18px rgba(0,200,255,0.85), 0 0 40px rgba(0,200,255,0.6), 0 0 80px rgba(0,200,255,0.3); }
    50%      { text-shadow: 0 0 14px rgba(0,200,255,1), 0 0 30px rgba(0,200,255,0.95), 0 0 65px rgba(0,200,255,0.75), 0 0 130px rgba(0,200,255,0.4); }
}

@keyframes scroll-drop {
    0%   { transform: scaleY(0); transform-origin: top; opacity: 0; }
    30%  { opacity: 1; }
    60%  { transform: scaleY(1); transform-origin: top; }
    61%  { transform: scaleY(1); transform-origin: bottom; }
    100% { transform: scaleY(0); transform-origin: bottom; opacity: 0; }
}

/* Neon glow text */
.neon {
    color: var(--blue);
    text-shadow: 0 0 8px rgba(0,200,255,1), 0 0 18px rgba(0,200,255,0.85), 0 0 40px rgba(0,200,255,0.6), 0 0 80px rgba(0,200,255,0.3);
    animation: glow-pulse 3.5s ease-in-out infinite;
}

/* Scroll reveal */
.reveal { opacity: 0; transform: translateY(30px); transition: opacity 0.75s ease, transform 0.75s ease; }
.reveal.visible { opacity: 1; transform: translateY(0); }

/* Orbs */
.orb { position: absolute; border-radius: 50%; filter: blur(90px); pointer-events: none; }
