/* 基础动画 */
:root {
    --transition-fast: 0.2s;
    --transition-normal: 0.3s;
    --transition-slow: 0.5s;
    --easing-default: ease-in-out;
}

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

.fade-in {
    animation: fadeIn var(--transition-normal) var(--easing-default);
}

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

.fade-in-up {
    animation: fadeInUp var(--transition-normal) var(--easing-default);
}

/* 下移淡入 */
@keyframes fadeInDown {
    from {
        opacity: 0;
        transform: translateY(-20px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.fade-in-down {
    animation: fadeInDown var(--transition-normal) var(--easing-default);
}

/* 缩放动画 */
@keyframes scale {
    from { transform: scale(0.9); }
    to { transform: scale(1); }
}

.scale {
    animation: scale var(--transition-normal) var(--easing-default);
}

/* 悬停效果 */
.hover-scale {
    transition: transform var(--transition-normal) var(--easing-default);
}

.hover-scale:hover {
    transform: scale(1.05);
}

/* 内容载入动画 */
.loading {
    position: relative;
}

.loading:before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 30px;
    height: 30px;
    margin: -15px 0 0 -15px;
    border: 3px solid rgba(139, 69, 19, 0.3);
    border-radius: 50%;
    border-top-color: var(--color-primary);
    animation: spin 1s linear infinite;
}

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