/* =========================================
   ADVANCED ANIMATIONS & TRANSITIONS
   ========================================= */

/* Smooth Easing Functions */
:root {
    --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
    --ease-out-back: cubic-bezier(0.34, 1.56, 0.64, 1);
    --transition-slow: 1.2s var(--ease-out-expo);
    --transition-medium: 0.8s var(--ease-out-expo);
}

/* Base Reveal Clases */
.reveal, .reveal-left, .reveal-right, .reveal-scale, .reveal-blur {
    opacity: 0;
    will-change: transform, opacity, filter;
}

/* Fade Up */
.reveal {
    transform: translateY(40px);
    transition: opacity var(--transition-slow), transform var(--transition-slow);
}

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

/* Fade from Left */
.reveal-left {
    transform: translateX(-60px);
    transition: opacity var(--transition-slow), transform var(--transition-slow);
}

.reveal-left.active {
    opacity: 1;
    transform: translateX(0);
}

/* Fade from Right */
.reveal-right {
    transform: translateX(60px);
    transition: opacity var(--transition-slow), transform var(--transition-slow);
}

.reveal-right.active {
    opacity: 1;
    transform: translateX(0);
}

/* Scale Up (Great for cards and images) */
.reveal-scale {
    transform: scale(0.92);
    transition: opacity var(--transition-slow), transform var(--transition-slow);
}

.reveal-scale.active {
    opacity: 1;
    transform: scale(1);
}

/* Blur Reveal (Cinematic effect for text) */
.reveal-blur {
    transform: translateY(20px);
    filter: blur(10px);
    transition: opacity var(--transition-slow), transform var(--transition-slow), filter var(--transition-slow);
}

.reveal-blur.active {
    opacity: 1;
    transform: translateY(0);
    filter: blur(0);
}

/* Staggered Delays */
.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; }

/* Image Hover Effects (Smooth Zoom) */
.img-hover-zoom {
    overflow: hidden;
    position: relative;
}

.img-hover-zoom img {
    transition: transform 1.5s var(--ease-out-expo);
    will-change: transform;
}

.img-hover-zoom:hover img {
    transform: scale(1.08);
}

/* Project Card Hover Animation */
.project-card {
    transition: transform 0.6s var(--ease-out-expo), box-shadow 0.6s var(--ease-out-expo), border-color 0.4s ease;
}

.project-card:hover {
    transform: translateY(-10px);
    box-shadow: 0 25px 50px rgba(0, 0, 0, 0.15);
    border-color: var(--primary-color);
}

/* Parallax Wrapper */
.parallax-bg {
    background-attachment: fixed;
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;
}

/* Image overlay sweep */
.sweep-overlay::before {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 50%;
    height: 100%;
    background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.2) 50%, rgba(255,255,255,0) 100%);
    transform: skewX(-25deg);
    transition: all 0.8s;
    z-index: 2;
}

.img-hover-zoom:hover .sweep-overlay::before {
    left: 200%;
    transition: all 1s var(--ease-out-expo);
}
