/* ===== 动画关键帧 ===== */
@keyframes float {
    0%, 100% { transform: translate(0, 0); }
    50% { transform: translate(30px, -30px); }
}

@keyframes floatCard {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-12px); }
}

@keyframes pulse {
    0%, 100% { opacity: 1; transform: scale(1); }
    50% { opacity: 0.5; transform: scale(1.2); }
}

@keyframes pulseRing {
    0% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.7); }
    70% { box-shadow: 0 0 0 16px rgba(16, 185, 129, 0); }
    100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); }
}

@keyframes barGrow {
    from { height: 0; }
}

@keyframes dotPulse {
    0%, 100% { opacity: 0.4; transform: scale(0.8); }
    50% { opacity: 1; transform: scale(1); }
}

@keyframes scrollDown {
    0% { opacity: 1; top: 8px; }
    100% { opacity: 0; top: 20px; }
}

@keyframes scroll {
    from { transform: translateX(0); }
    to { transform: translateX(-50%); }
}

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

@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

/* ===== Reveal 滚动动画 ===== */
.reveal {
    opacity: 0;
    transform: translateY(30px);
    transition: opacity 0.8s ease-out, transform 0.8s ease-out;
}

.reveal.visible {
    opacity: 1;
    transform: translateY(0);
}

.reveal:nth-child(2) { transition-delay: 0.1s; }
.reveal:nth-child(3) { transition-delay: 0.2s; }
.reveal:nth-child(4) { transition-delay: 0.3s; }
.reveal:nth-child(5) { transition-delay: 0.4s; }
.reveal:nth-child(6) { transition-delay: 0.5s; }

/* ===== 响应式设计 ===== */
@media (max-width: 1024px) {
    .hero-inner { grid-template-columns: 1fr; gap: 40px; }
    .hero-visual { height: 380px; max-width: 500px; margin: 0 auto; }
    .service-grid { grid-template-columns: 1fr; }
    .why-grid { grid-template-columns: 1fr; gap: 40px; }
    .why-cards { grid-template-columns: repeat(3, 1fr); }
    .about-grid { grid-template-columns: 1fr; gap: 40px; }
    .about-visual { max-width: 500px; margin: 0 auto; }
    .contact-grid { grid-template-columns: 1fr; }
    .footer-grid { grid-template-columns: 1fr 1fr; gap: 40px; }
}

@media (max-width: 768px) {
    .nav, .nav-cta { display: none; }
    .menu-toggle { display: flex; }
    .nav.open {
        display: flex;
        position: absolute;
        top: var(--header-h);
        left: 0;
        right: 0;
        flex-direction: column;
        background: white;
        padding: 20px;
        box-shadow: var(--shadow-md);
        gap: 0;
    }
    .nav.open .nav-link {
        padding: 12px;
        border-bottom: 1px solid var(--border);
    }
    .nav.open .nav-link:last-child { border-bottom: none; }

    .hero { padding: calc(var(--header-h) + 40px) 0 60px; min-height: auto; }
    .hero-stats { gap: 24px; }
    .stat-num { font-size: 28px; }
    .visual-card { padding: 14px; }
    .card-1, .card-4 { width: 160px; }
    .card-2, .card-3 { width: 150px; }

    .why-cards { grid-template-columns: 1fr; }
    .about-features { gap: 24px; }
    .about-feature strong { font-size: 24px; }
    .footer-grid { grid-template-columns: 1fr; }
    .form-row { grid-template-columns: 1fr; }
    .contact-form-wrap { padding: 24px; }
    .partners-slide { gap: 30px; }
    .partners-slide span { font-size: 18px; }
}

@media (max-width: 480px) {
    .container { padding: 0 16px; }
    .hero-actions { flex-direction: column; width: 100%; }
    .hero-actions .btn { width: 100%; }
    .hero-stats { gap: 16px; }
    .stat-num { font-size: 24px; }
    .stat-label { font-size: 11px; }
    .section-head { margin-bottom: 40px; }
    .services, .why-us, .about, .contact { padding: 60px 0; }
}

/* ===== 减少动效偏好 ===== */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
    .reveal { opacity: 1; transform: none; }
}