/* ============================================================
   动画效果
   ============================================================ */

/* ---------- 淡入上移 ---------- */
.fade-up {
    opacity: 0;
    transform: translateY(30px);
    transition: opacity 0.6s ease, transform 0.6s ease;
}

.fade-up.visible {
    opacity: 1;
    transform: translateY(0);
}

/* ---------- 淡入左移 ---------- */
.fade-left {
    opacity: 0;
    transform: translateX(-30px);
    transition: opacity 0.6s ease, transform 0.6s ease;
}

.fade-left.visible {
    opacity: 1;
    transform: translateX(0);
}

/* ---------- 淡入右移 ---------- */
.fade-right {
    opacity: 0;
    transform: translateX(30px);
    transition: opacity 0.6s ease, transform 0.6s ease;
}

.fade-right.visible {
    opacity: 1;
    transform: translateX(0);
}

/* ---------- 缩放淡入 ---------- */
.fade-scale {
    opacity: 0;
    transform: scale(0.9);
    transition: opacity 0.5s ease, transform 0.5s ease;
}

.fade-scale.visible {
    opacity: 1;
    transform: scale(1);
}

/* ---------- 滑入关键帧 ---------- */
@keyframes slideInLeft {
    from { opacity: 0; transform: translateX(-40px); }
    to { opacity: 1; transform: translateX(0); }
}

@keyframes slideInRight {
    from { opacity: 0; transform: translateX(40px); }
    to { opacity: 1; transform: translateX(0); }
}

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

/* ---------- 弹跳效果 ---------- */
@keyframes bounce {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-8px); }
}

.bounce {
    animation: bounce 0.5s ease;
}

/* ---------- 脉冲效果 ---------- */
@keyframes pulse {
    0% { box-shadow: 0 0 0 0 rgba(46,139,87,0.4); }
    70% { box-shadow: 0 0 0 10px rgba(46,139,87,0); }
    100% { box-shadow: 0 0 0 0 rgba(46,139,87,0); }
}

.pulse {
    animation: pulse 2s infinite;
}

/* ---------- 旋转加载 ---------- */
@keyframes spin {
    to { transform: rotate(360deg); }
}

.spin {
    animation: spin 1s linear infinite;
}

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

.breathe {
    animation: breathe 3s ease-in-out infinite;
}

/* ---------- 页面切换效果 ---------- */
.page-transition {
    animation: fadeInPage 0.4s ease;
}

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

/* ---------- 延迟动画 ---------- */
.delay-100 { transition-delay: 100ms; }
.delay-200 { transition-delay: 200ms; }
.delay-300 { transition-delay: 300ms; }
.delay-400 { transition-delay: 400ms; }
.delay-500 { transition-delay: 500ms; }

/* ---------- 滚动触发动画 ---------- */
.scroll-animate {
    opacity: 0;
    transform: translateY(40px);
    transition: opacity 0.8s ease, transform 0.8s ease;
}

.scroll-animate.visible {
    opacity: 1;
    transform: translateY(0);
}
