@keyframes blob-drift-1 {
    0%   { transform: translate(0, 0) scale(1); }
    50%  { transform: translate(6vmax, 4vmax) scale(1.12); }
    100% { transform: translate(-3vmax, 7vmax) scale(0.96); }
}

@keyframes blob-drift-2 {
    0%   { transform: translate(0, 0) scale(1); }
    50%  { transform: translate(-7vmax, -5vmax) scale(1.15); }
    100% { transform: translate(4vmax, -8vmax) scale(0.95); }
}

@keyframes blob-drift-3 {
    0%   { transform: translate(0, 0) scale(1); }
    100% { transform: translate(-9vmax, 5vmax) scale(1.2); }
}

@keyframes beam-sway {
    0%   { transform: rotate(18deg) translateX(-4vmax); opacity: 0.04; }
    100% { transform: rotate(18deg) translateX(5vmax); opacity: 0.09; }
}

@keyframes particle-float {
    0%   { transform: translate(0, 0); }
    100% { transform: translate(14px, -26px); }
}

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

@keyframes ring-pulse {
    0%, 100% { opacity: 0.4; transform: scale(0.96); }
    50%      { opacity: 0.65; transform: scale(1.05); }
}

@keyframes dot-pulse {
    0%, 100% { box-shadow: 0 0 0 0 rgba(52, 211, 153, 0.55); }
    50%      { box-shadow: 0 0 0 7px rgba(52, 211, 153, 0); }
}

@keyframes card-float {
    0%, 100% { transform: translateY(0); }
    50%      { transform: translateY(-8px); }
}

@keyframes hint-bounce {
    0%, 100% { transform: translateY(0); opacity: 0.5; }
    50%      { transform: translateY(5px); opacity: 1; }
}

@keyframes gradient-pan {
    0%   { background-position: 0% 50%; }
    50%  { background-position: 100% 50%; }
    100% { background-position: 0% 50%; }
}

@keyframes sheen-sweep {
    0%   { transform: translateX(-130%) skewX(-18deg); }
    100% { transform: translateX(240%) skewX(-18deg); }
}
