/* ============================================================================
   KRIZ OBSERVATORY - ANIMATIONS
   Stunning heavy animations for dark space theme
   ============================================================================ */

/* ============================================================================
   SCROLL TRIGGERED ANIMATIONS
   ============================================================================ */

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

@keyframes fadeInDown {
    from {
        opacity: 0;
        transform: translateY(-40px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes slideInLeft {
    from {
        opacity: 0;
        transform: translateX(-60px);
    }
    to {
        opacity: 1;
        transform: translateX(0);
    }
}

@keyframes slideInRight {
    from {
        opacity: 0;
        transform: translateX(60px);
    }
    to {
        opacity: 1;
        transform: translateX(0);
    }
}

.fade-in-up.active {
    animation: fadeInUp 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

.fade-in-down.active {
    animation: fadeInDown 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

/* Stagger effect for multiple elements */
.fade-in-up:nth-child(1) {
    animation-delay: 0.1s;
}

.fade-in-up:nth-child(2) {
    animation-delay: 0.2s;
}

.fade-in-up:nth-child(3) {
    animation-delay: 0.3s;
}

.fade-in-up:nth-child(4) {
    animation-delay: 0.4s;
}

.fade-in-up:nth-child(5) {
    animation-delay: 0.5s;
}

.fade-in-up:nth-child(6) {
    animation-delay: 0.6s;
}

/* ============================================================================
   TWINKLING STARS
   ============================================================================ */

@keyframes twinkle {
    0%, 100% {
        opacity: 0.3;
    }
    50% {
        opacity: 0.8;
    }
}

@keyframes twinkleSlow {
    0%, 100% {
        opacity: 0.2;
    }
    50% {
        opacity: 1;
    }
}

@keyframes twinkleFast {
    0%, 100% {
        opacity: 0.5;
    }
    50% {
        opacity: 0.9;
    }
}

/* ============================================================================
   GLOWING EFFECTS
   ============================================================================ */

@keyframes glow {
    0%, 100% {
        text-shadow: 0 0 10px rgba(0, 245, 255, 0.5);
    }
    50% {
        text-shadow: 0 0 25px rgba(0, 245, 255, 0.8), 0 0 35px rgba(139, 92, 246, 0.5);
    }
}

@keyframes glowBox {
    0%, 100% {
        box-shadow: 0 0 20px rgba(0, 245, 255, 0.3);
    }
    50% {
        box-shadow: 0 0 40px rgba(0, 245, 255, 0.6), inset 0 0 20px rgba(0, 245, 255, 0.1);
    }
}

@keyframes pulseRing {
    0% {
        box-shadow: 0 0 0 0 rgba(0, 245, 255, 0.7);
    }
    70% {
        box-shadow: 0 0 0 15px rgba(0, 245, 255, 0);
    }
    100% {
        box-shadow: 0 0 0 0 rgba(0, 245, 255, 0);
    }
}

@keyframes pulseDot {
    0%, 100% {
        opacity: 1;
        transform: scale(1);
    }
    50% {
        opacity: 0.6;
        transform: scale(1.2);
    }
}

/* ============================================================================
   FLOATING & DRIFT ANIMATIONS
   ============================================================================ */

@keyframes float {
    0%, 100% {
        transform: translateY(0px);
    }
    50% {
        transform: translateY(-20px);
    }
}

@keyframes floatSlow {
    0%, 100% {
        transform: translateY(0px);
    }
    50% {
        transform: translateY(-30px);
    }
}

@keyframes drift {
    0%, 100% {
        transform: translateX(0px) translateY(0px);
    }
    33% {
        transform: translateX(10px) translateY(-5px);
    }
    66% {
        transform: translateX(-10px) translateY(5px);
    }
}

@keyframes orbit {
    0% {
        transform: rotate(0deg) translateX(30px) rotate(0deg);
    }
    100% {
        transform: rotate(360deg) translateX(30px) rotate(-360deg);
    }
}

/* ============================================================================
   NEBULA & AURORA EFFECTS
   ============================================================================ */

@keyframes nebulaDrift {
    0% {
        background-position: 0% 0%;
    }
    50% {
        background-position: 100% 100%;
    }
    100% {
        background-position: 0% 0%;
    }
}

@keyframes auroraWave {
    0% {
        opacity: 0;
        transform: translateY(100px);
    }
    50% {
        opacity: 0.5;
    }
    100% {
        opacity: 0;
        transform: translateY(-100px);
    }
}

/* ============================================================================
   COUNTER ANIMATIONS
   ============================================================================ */

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

@keyframes numberFlip {
    0% {
        transform: rotateX(90deg);
    }
    100% {
        transform: rotateX(0deg);
    }
}

/* ============================================================================
   BUTTON & INTERACTION ANIMATIONS
   ============================================================================ */

@keyframes buttonHoverGlow {
    0% {
        box-shadow: 0 0 20px rgba(0, 245, 255, 0.4);
    }
    50% {
        box-shadow: 0 0 40px rgba(0, 245, 255, 0.6), 0 0 60px rgba(139, 92, 246, 0.3);
    }
    100% {
        box-shadow: 0 0 20px rgba(0, 245, 255, 0.4);
    }
}

@keyframes shimmer {
    0% {
        background-position: -1000px 0;
    }
    100% {
        background-position: 1000px 0;
    }
}

/* ============================================================================
   GRADIENT ANIMATIONS
   ============================================================================ */

@keyframes gradientShift {
    0% {
        background-position: 0% 50%;
    }
    50% {
        background-position: 100% 50%;
    }
    100% {
        background-position: 0% 50%;
    }
}

@keyframes colorWave {
    0% {
        filter: hue-rotate(0deg);
    }
    100% {
        filter: hue-rotate(360deg);
    }
}

/* ============================================================================
   DATA FLOW ANIMATIONS
   ============================================================================ */

@keyframes flowParticle {
    0% {
        opacity: 1;
        transform: translateX(0) translateY(0) scale(1);
    }
    50% {
        opacity: 1;
    }
    100% {
        opacity: 0;
        transform: translateX(100px) translateY(-20px) scale(0.3);
    }
}

@keyframes flowWave {
    0% {
        offset-distance: 0%;
        opacity: 1;
    }
    100% {
        offset-distance: 100%;
        opacity: 0;
    }
}

@keyframes dotSlide {
    0% {
        offset-distance: 0%;
        opacity: 1;
    }
    90% {
        opacity: 1;
    }
    100% {
        offset-distance: 100%;
        opacity: 0;
    }
}

/* ============================================================================
   BACKGROUND ANIMATIONS
   ============================================================================ */

@keyframes pulseGlow {
    0%, 100% {
        opacity: 0.1;
        transform: scale(1);
    }
    50% {
        opacity: 0.2;
        transform: scale(1.05);
    }
}

@keyframes pulse-bg {
    0%, 100% {
        transform: scale(1);
        opacity: 0;
    }
    50% {
        transform: scale(1.1);
        opacity: 0.5;
    }
}

@keyframes ripple {
    to {
        transform: scale(4);
        opacity: 0;
    }
}

/* ============================================================================
   LOADING ANIMATIONS
   ============================================================================ */

@keyframes spinLoader {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(360deg);
    }
}

@keyframes spinLoaderReverse {
    from {
        transform: rotate(360deg);
    }
    to {
        transform: rotate(0deg);
    }
}

@keyframes pulse {
    0%, 100% {
        opacity: 1;
    }
    50% {
        opacity: 0.5;
    }
}

/* ============================================================================
   PARALLAX & DEPTH ANIMATIONS
   ============================================================================ */

@keyframes parallaxDown {
    0% {
        transform: translateY(-50px) translateZ(-100px);
    }
    100% {
        transform: translateY(50px) translateZ(-100px);
    }
}

@keyframes parallaxUp {
    0% {
        transform: translateY(50px);
    }
    100% {
        transform: translateY(-50px);
    }
}

/* ============================================================================
   MORPHING SHAPES
   ============================================================================ */

@keyframes morphCircle {
    0%, 100% {
        border-radius: 50%;
    }
    50% {
        border-radius: 40%;
    }
}

@keyframes morphWave {
    0%, 100% {
        border-radius: 50% 50% 50% 50%;
    }
    25% {
        border-radius: 60% 40% 30% 70%;
    }
    50% {
        border-radius: 30% 60% 70% 40%;
    }
    75% {
        border-radius: 70% 30% 40% 60%;
    }
}

/* ============================================================================
   ELEMENT-SPECIFIC ANIMATIONS
   ============================================================================ */

/* Counter cards */
.counter-card {
    animation: fadeInUp 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

/* Highlight cards with stagger */
.highlight-card {
    opacity: 0;
    animation: fadeInUp 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

/* Program cards */
.program-card {
    opacity: 0;
    animation: fadeInUp 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

/* Publication items */
.pub-item {
    opacity: 0;
    animation: fadeInUp 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

/* Contact forms */
.form-section {
    opacity: 0;
    animation: fadeInUp 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

/* FAQ items */
.faq-item {
    opacity: 0;
    animation: fadeInUp 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

/* ============================================================================
   MICRO-INTERACTIONS
   ============================================================================ */

/* Link hover glow */
a {
    position: relative;
}

a::before {
    content: '';
    position: absolute;
    bottom: -2px;
    left: 0;
    width: 0;
    height: 2px;
    background: currentColor;
    transition: width 0.3s ease-out;
    box-shadow: 0 0 10px currentColor;
}

a:hover::before {
    width: 100%;
}

/* ============================================================================
   HOVER TRANSFORMS
   ============================================================================ */

@keyframes scaleUp {
    from {
        transform: scale(1);
    }
    to {
        transform: scale(1.05);
    }
}

@keyframes slideUp {
    from {
        transform: translateY(0);
    }
    to {
        transform: translateY(-8px);
    }
}

/* ============================================================================
   TIMELINE ANIMATIONS
   ============================================================================ */

@keyframes timelinePulse {
    0%, 100% {
        box-shadow: 0 0 0 0 rgba(0, 245, 255, 0.7);
    }
    50% {
        box-shadow: 0 0 0 10px rgba(0, 245, 255, 0);
    }
}

.timeline-item {
    opacity: 0;
    animation: fadeInUp 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

/* ============================================================================
   CHART ANIMATIONS
   ============================================================================ */

@keyframes chartBars {
    from {
        opacity: 0;
        transform: scaleY(0);
        transform-origin: bottom;
    }
    to {
        opacity: 1;
        transform: scaleY(1);
        transform-origin: bottom;
    }
}

/* ============================================================================
   RESPONSIVE ADJUSTMENTS
   ============================================================================ */

@media (prefers-reduced-motion: reduce) {
    * {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
}

/* ============================================================================
   INTERSECTION OBSERVER TIMING
   ============================================================================ */

.fade-in-up {
    transition: opacity 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94),
                transform 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

.fade-in-up.active {
    opacity: 1;
    transform: translateY(0);
}
