/* ========================================================
   动画关键帧
   ======================================================== */

/* 打字机光标闪烁 */
@keyframes blink {
    0%, 50% { opacity: 1; }
    51%, 100% { opacity: 0; }
}

/* 光斑浮动 */
@keyframes floatOrb1 {
    0%, 100% { transform: translate(0, 0) scale(1); }
    33% { transform: translate(40px, -30px) scale(1.1); }
    66% { transform: translate(-30px, 20px) scale(0.95); }
}

@keyframes floatOrb2 {
    0%, 100% { transform: translate(0, 0) scale(1); }
    50% { transform: translate(-50px, 40px) scale(1.15); }
}

/* 滚动指示点 */
@keyframes scrollDot {
    0% { transform: translateY(0); opacity: 0; }
    30% { opacity: 1; }
    100% { transform: translateY(16px); opacity: 0; }
}

/* 渐变流动（标题背景） */
@keyframes gradientShift {
    0%, 100% { background-position: 0% 50%; }
    50% { background-position: 100% 50%; }
}

/* 脉冲光晕 */
@keyframes pulseGlow {
    0%, 100% {
        box-shadow: 0 0 18px rgba(255, 107, 53, 0.45),
                    0 0 40px rgba(255, 107, 53, 0.2);
    }
    50% {
        box-shadow: 0 0 28px rgba(255, 107, 53, 0.7),
                    0 0 60px rgba(255, 107, 53, 0.35);
    }
}

/* 淡入 */
@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

/* 淡入上移 */
@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(30px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* 旋转扫描线 */
@keyframes scanLine {
    0% { transform: translateY(-100%); }
    100% { transform: translateY(100%); }
}

/* 旋转 */
@keyframes spin {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
}

/* 呼吸 */
@keyframes breathe {
    0%, 100% { opacity: 0.6; }
    50% { opacity: 1; }
}
