/* 淡入动画 */
@keyframes fadeIn {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}

/* 上滑淡入 */
@keyframes slideInUp {
    from {
        transform: translate3d(0, 40px, 0);
        opacity: 0;
    }
    to {
        transform: translate3d(0, 0, 0);
        opacity: 1;
    }
}

/* 缩放淡入 */
@keyframes zoomIn {
    from {
        transform: scale3d(0.3, 0.3, 0.3);
        opacity: 0;
    }
    to {
        transform: scale3d(1, 1, 1);
        opacity: 1;
    }
}

/* 应用动画的类 */
.animate {
    animation-duration: 0.5s;
    animation-fill-mode: both;
}

.animate-slow {
    animation-duration: 0.8s;
}

.animate-fast {
    animation-duration: 0.3s;
}

.fade-in {
    animation-name: fadeIn;
}

.slide-in-up {
    animation-name: slideInUp;
}

.zoom-in {
    animation-name: zoomIn;
}

/* 延迟类 */
.delay-1 {
    animation-delay: 0.1s;
}

.delay-2 {
    animation-delay: 0.2s;
}

.delay-3 {
    animation-delay: 0.3s;
}

/* 悬停动画 */
.hover-grow {
    transition: transform 0.3s ease;
}

.hover-grow:hover {
    transform: scale(1.05);
}

.hover-shadow {
    transition: box-shadow 0.3s ease;
}

.hover-shadow:hover {
    box-shadow: 0 5px 15px rgba(0,0,0,0.1);
}

/* 加载动画 */
.loading {
    display: inline-block;
    width: 30px;
    height: 30px;
    border: 3px solid rgba(0,0,0,0.1);
    border-radius: 50%;
    border-top-color: #337ab7;
    animation: spin 1s ease-in-out infinite;
}

@keyframes spin {
    to {
        transform: rotate(360deg);
    }
} 