/* ==========================================================================
   Animations & Transitions
   ========================================================================== */

/* Fade-in on scroll — use opacity only, no translateY to avoid CLS */
.fade-in {
    opacity: 0;
    /* Use transform on GPU-composited layer only — no layout-triggering props */
    transform: translateY(12px);
    transition: opacity 0.6s ease-out, transform 0.6s ease-out;
    will-change: opacity, transform;
    /* Prevent element from contributing to layout before visible */
    contain: content;
}

.fade-in.visible {
    opacity: 1;
    transform: translateY(0);
    will-change: auto;
    contain: none;
}

/* Stagger children for grid layouts */
.stagger-1 { transition-delay: 80ms; }
.stagger-2 { transition-delay: 160ms; }
.stagger-3 { transition-delay: 240ms; }
.stagger-4 { transition-delay: 320ms; }

/* Image loading skeleton animation */
@keyframes loading-pulse {
    0% { background-color: var(--clr-surface-container); }
    50% { background-color: var(--clr-surface-container-high, #e0e2e0); }
    100% { background-color: var(--clr-surface-container); }
}

.skeleton-loading {
    animation: loading-pulse 1.5s infinite ease-in-out;
}

/* Hero content reveal — composited GPU animation */
.hero-content {
    animation: fadeUp 0.8s ease-out forwards;
    will-change: opacity, transform;
}

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

/* Hamburger menu open/close — composited only */
.mobile-menu {
    transition: transform 0.4s cubic-bezier(0.77, 0, 0.175, 1);
    will-change: transform;
}

/* Checkmark draw */
@keyframes drawCheck {
    to {
        stroke-dashoffset: 0;
    }
}

/* Lightbox Fade */
.lightbox-fade {
    animation: fadeIn 0.3s ease-out forwards;
}

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

/* Respect reduced-motion preferences */
@media (prefers-reduced-motion: reduce) {
    .fade-in,
    .hero-content,
    .mobile-menu,
    .lightbox-fade {
        animation: none;
        transition: none;
        opacity: 1;
        transform: none;
    }
}
