/* ============================================
   ANIMATIONS — Premium Scroll & Transition FX
   ============================================ */

@keyframes fadeInUp {
    from { opacity:0; transform:translateY(40px) scale(0.98); }
    to { opacity:1; transform:translateY(0) scale(1); }
}
@keyframes fadeInDown {
    from { opacity:0; transform:translateY(-30px); }
    to { opacity:1; transform:translateY(0); }
}
@keyframes fadeInLeft {
    from { opacity:0; transform:translateX(-40px); }
    to { opacity:1; transform:translateX(0); }
}
@keyframes fadeInRight {
    from { opacity:0; transform:translateX(40px); }
    to { opacity:1; transform:translateX(0); }
}
@keyframes scaleIn {
    from { opacity:0; transform:scale(0.85); }
    to { opacity:1; transform:scale(1); }
}
@keyframes slideInBlur {
    from { opacity:0; transform:translateY(30px); filter:blur(8px); }
    to { opacity:1; transform:translateY(0); filter:blur(0); }
}
@keyframes shimmer {
    0% { background-position:-200% center; }
    100% { background-position:200% center; }
}
@keyframes float {
    0%,100% { transform:translateY(0); }
    50% { transform:translateY(-10px); }
}
@keyframes pulseGlow {
    0%,100% { box-shadow:0 0 20px var(--primary-glow); }
    50% { box-shadow:0 0 40px var(--primary-glow); }
}

/* Scroll-triggered reveal */
.animate-on-scroll {
    opacity:0; transform:translateY(36px);
    transition: opacity 0.7s cubic-bezier(0.4,0,0.2,1),
                transform 0.7s cubic-bezier(0.4,0,0.2,1),
                filter 0.7s cubic-bezier(0.4,0,0.2,1);
    filter:blur(4px);
}
.animate-on-scroll.animated {
    opacity:1; transform:translateY(0); filter:blur(0);
}

/* Direction variants */
.animate-left { transform:translateX(-40px); }
.animate-left.animated { transform:translateX(0); }

.animate-right { transform:translateX(40px); }
.animate-right.animated { transform:translateX(0); }

.animate-scale { transform:scale(0.88); }
.animate-scale.animated { transform:scale(1); }

/* Stagger children - delay applied via JS */
.stagger-children > * {
    opacity:0; transform:translateY(24px);
    transition: opacity 0.5s cubic-bezier(0.4,0,0.2,1),
                transform 0.5s cubic-bezier(0.4,0,0.2,1);
}
.stagger-children.animated > * { opacity:1; transform:translateY(0); }

/* Hover micro-interactions */
.hover-lift { transition:var(--transition-bounce); }
.hover-lift:hover { transform:translateY(-5px); }

.hover-glow { transition:var(--transition); }
.hover-glow:hover { box-shadow:0 0 30px var(--primary-glow); }

.hover-scale { transition:var(--transition-bounce); }
.hover-scale:hover { transform:scale(1.03); }

/* Gradient text shimmer effect */
.text-shimmer {
    background:linear-gradient(90deg,var(--primary),var(--accent),var(--primary));
    background-size:200% auto;
    -webkit-background-clip:text; -webkit-text-fill-color:transparent;
    background-clip:text;
    animation:shimmer 4s linear infinite;
}

/* Counter animation */
.stat-item__number { transition:all 0.3s ease; }
.stat-item.animated .stat-item__number { animation:scaleIn 0.6s cubic-bezier(0.34,1.56,0.64,1) forwards; }

/* Smooth link underline */
.link-underline {
    position:relative; display:inline-block;
}
.link-underline::after {
    content:''; position:absolute; bottom:-2px; left:0;
    width:0; height:2px; background:var(--gradient-primary);
    border-radius:2px; transition:width 0.35s cubic-bezier(0.4,0,0.2,1);
}
.link-underline:hover::after { width:100%; }
