/* ============================================
   GenerujWWW — Animations
   AOS-style (data-aos="fade-up")
   ============================================ */

/* ── Keyframes ── */
@keyframes gwww-fade-in-up {
    from { opacity: 0; transform: translateY(30px); }
    to   { opacity: 1; transform: translateY(0); }
}
@keyframes gwww-slide-up {
    from { opacity: 0; transform: translateY(60px); }
    to   { opacity: 1; transform: translateY(0); }
}
@keyframes gwww-scale-up {
    from { opacity: 0; transform: scale(0.92); }
    to   { opacity: 1; transform: scale(1); }
}
@keyframes gwww-fade-in {
    from { opacity: 0; }
    to   { opacity: 1; }
}
@keyframes gwww-glow-pulse {
    0%, 100% { box-shadow: 0 0 20px var(--gwww-accent-glow); }
    50%      { box-shadow: 0 0 40px var(--gwww-accent-glow); }
}
@keyframes gwww-gradient-shift {
    0%   { background-position: 0% 50%; }
    50%  { background-position: 100% 50%; }
    100% { background-position: 0% 50%; }
}
@keyframes gwww-line-grow {
    from { transform: scaleY(0); }
    to   { transform: scaleY(1); }
}

/* ── data-animate initial hidden ── */
[data-animate] {
    opacity: 0;
    will-change: transform, opacity;
    transition: opacity 0.6s cubic-bezier(0.4, 0, 0.2, 1), transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}
[data-animate="fade-in-up"] { transform: translateY(30px); }
[data-animate="slide-up"] { transform: translateY(60px); }
[data-animate="scale-up"] { transform: scale(0.92); }
[data-animate="fade-in"] { transform: none; }

/* ── Animated state ── */
.gwww-animated[data-animate="fade-in-up"] { animation: gwww-fade-in-up var(--gwww-transition-slow) forwards; }
.gwww-animated[data-animate="slide-up"] { animation: gwww-slide-up var(--gwww-transition-slow) forwards; }
.gwww-animated[data-animate="scale-up"] { animation: gwww-scale-up var(--gwww-transition-slow) forwards; }
.gwww-animated[data-animate="fade-in"] { animation: gwww-fade-in var(--gwww-transition-slow) forwards; }
.gwww-animated[style*="--animate-delay"] { animation-delay: var(--animate-delay); }

/* ── AOS-style data-aos — BetterStack uses data-aos="fade-up" with delays ── */
[data-aos] {
    opacity: 0;
    will-change: transform, opacity;
    transition: opacity 0.7s ease, transform 0.7s ease;
}
[data-aos="fade-up"] { transform: translateY(40px); }
[data-aos="fade-in"] { transform: none; }
[data-aos="scale-up"] { transform: scale(0.9); }
[data-aos="fade-right"] { transform: translateX(-30px); }
[data-aos="fade-left"] { transform: translateX(30px); }

[data-aos].aos-animate {
    opacity: 1;
    transform: translateY(0) translateX(0) scale(1);
}

/* ── Hover effects ── */
.gwww-hover-lift { transition: transform var(--gwww-transition), box-shadow var(--gwww-transition); }
.gwww-hover-lift:hover { transform: translateY(-4px); box-shadow: var(--gwww-shadow-lg); }
.gwww-hover-glow { transition: box-shadow var(--gwww-transition); }
.gwww-hover-glow:hover { box-shadow: var(--gwww-shadow-glow); }
.gwww-hover-scale { transition: transform var(--gwww-transition); }
.gwww-hover-scale:hover { transform: scale(1.01); }

/* ── Count-up ── */
.gwww-count-up { display: inline-block; font-variant-numeric: tabular-nums; }

/* ── Gradient animation for hero ── */
.gwww-gradient-animated { background-size: 200% 200%; animation: gwww-gradient-shift 8s ease infinite; }

/* ── Line grow ── */
.gwww-line-grow { transform-origin: top; transform: scaleY(0); }
.gwww-line-grow.gwww-animated { animation: gwww-line-grow 1s ease forwards; }

/* ── prefers-reduced-motion ── */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
    [data-animate], [data-aos] { opacity: 1; transform: none; }
    .gwww-gradient-animated { animation: none; }
    .gwww-logo-scroll__track { animation: none; }
    html { scroll-behavior: auto; }
}
