/* =============================================================
   ANIMATIONS — All @keyframes and utility animation classes
   ============================================================= */

/* ── Keyframes ─────────────────────────────────────────────── */

@keyframes fadeInUp {
    from { opacity: 0; transform: translateY(30px); }
    to   { opacity: 1; transform: translateY(0); }
}

@keyframes fadeInUpHero {
    from { opacity: 0; transform: translateY(35px); }
    to   { opacity: 1; transform: translateY(0); }
}

@keyframes kenBurns {
    0%   { transform: scale(1); }
    100% { transform: scale(1.12); }
}

@keyframes cascadeUp {
    from { opacity: 0; transform: translateY(40px); }
    to   { opacity: 1; transform: translateY(0); }
}

@keyframes portfolioUp {
    from { opacity: 0; transform: translateY(40px); }
    to   { opacity: 1; transform: translateY(0); }
}

@keyframes testimonialUp {
    from { opacity: 0; transform: translateY(40px); }
    to   { opacity: 1; transform: translateY(0); }
}

@keyframes ctaFadeUp {
    from { opacity: 0; transform: translateY(40px); }
    to   { opacity: 1; transform: translateY(0); }
}

@keyframes hoverFloat {
    0%   { transform: translateY(0); }
    50%  { transform: translateY(-10px); }
    100% { transform: translateY(0); }
}

@keyframes pulse {
    0%   { transform: scale(1);   opacity: 1; }
    50%  { transform: scale(1.1); opacity: 0.8; }
    100% { transform: scale(1);   opacity: 1; }
}

@keyframes shine {
    100% { left: 125%; }
}

@keyframes goldShimmer {
    to { background-position: 200% center; }
}

@keyframes linePulse {
    0%, 100% { opacity: 0.3; width: 40px; }
    50%       { opacity: 1;   width: 80px; }
}

@keyframes dotPulse {
    0%   { transform: scale(1); opacity: 1; }
    100% { transform: scale(3); opacity: 0; }
}

/* ── Utility Classes ───────────────────────────────────────── */

.fade-in-up {
    animation-name: fadeInUp;
    animation-duration: 1s;
    animation-fill-mode: both;
    animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

.hover-float {
    animation: hoverFloat 4s infinite ease-in-out;
}

.animation-pulse {
    animation: pulse 2s infinite ease-in-out;
}

.animation-shine {
    position: relative;
    overflow: hidden;
}
.animation-shine::before {
    content: "";
    position: absolute;
    top: 0;
    left: -150%;
    width: 100%;
    height: 100%;
    background: linear-gradient(120deg, transparent, rgba(255,255,255,0.4), transparent);
    animation: shine 2s infinite linear;
}

/* Staggered delay helpers */
.animation-delay-1 { animation-delay: 0.2s; }
.animation-delay-2 { animation-delay: 0.4s; }
.animation-delay-3 { animation-delay: 0.6s; }
.animation-delay-4 { animation-delay: 0.8s; }

/* Hero animate class */
.animate-hero {
    opacity: 0;
    animation: fadeInUpHero 1.2s cubic-bezier(0.25, 1, 0.5, 1) forwards;
}

.animate-quote {
    animation: fadeInUpHero 1.5s cubic-bezier(0.25, 1, 0.5, 1) forwards;
}

/* Cascade (services grid) */
.animate-cascade {
    opacity: 0;
    animation: cascadeUp 1s cubic-bezier(0.25, 1, 0.5, 1) forwards;
}

/* Portfolio */
.animate-portfolio {
    opacity: 0;
    animation: portfolioUp 1s cubic-bezier(0.25, 1, 0.5, 1) forwards;
}

/* Testimonials */
.animate-testimonial {
    opacity: 0;
    animation: testimonialUp 0.9s cubic-bezier(0.25, 1, 0.5, 1) forwards;
}

/* CTA */
.animate-cta {
    opacity: 0;
    animation: ctaFadeUp 1.2s cubic-bezier(0.25, 1, 0.5, 1) forwards;
}
