@keyframes fade-up {
    from {
        opacity: 0;
        transform: translateY(18px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.reveal-on-scroll {
    opacity: 0;
    transform: translateY(18px);
}

.reveal-on-scroll.is-visible {
    animation: fade-up 520ms ease forwards;
}

.interactive-card {
    transform-style: preserve-3d;
}

.is-removing {
    opacity: 0;
    transform: translateX(24px);
    transition: opacity 220ms ease, transform 220ms ease;
}

@keyframes vector-float-a {
    0%, 100% {
        transform: translate(0, 0);
    }
    50% {
        transform: translate(8px, -12px);
    }
}

@keyframes vector-float-b {
    0%, 100% {
        transform: translate(0, 0);
    }
    50% {
        transform: translate(-10px, 10px);
    }
}

@keyframes vector-dash {
    to {
        stroke-dashoffset: -260;
    }
}

@keyframes vector-pulse {
    0%, 100% {
        transform: scale(1);
        opacity: 0.9;
    }
    50% {
        transform: scale(1.24);
        opacity: 1;
    }
}

.vector-card-a {
    animation: vector-float-a 5s ease-in-out infinite;
}

.vector-card-b {
    animation: vector-float-b 5.8s ease-in-out infinite;
}

.vector-card-c {
    animation: vector-float-a 6.4s ease-in-out infinite reverse;
}

.vector-loop {
    stroke-dasharray: 18 20;
    animation: vector-dash 5s linear infinite;
}

.vector-dot {
    transform-box: fill-box;
    transform-origin: center;
    animation: vector-pulse 2.2s ease-in-out infinite;
}

.dot-two {
    animation-delay: 0.4s;
}

.dot-three {
    animation-delay: 0.8s;
}

@keyframes market-float-one {
    0%, 100% {
        transform: translate(0, 0) rotate(0deg);
    }
    50% {
        transform: translate(9px, -16px) rotate(1.5deg);
    }
}

@keyframes market-float-two {
    0%, 100% {
        transform: translate(0, 0) rotate(0deg);
    }
    50% {
        transform: translate(-12px, 12px) rotate(-1deg);
    }
}

@keyframes market-ring {
    to {
        stroke-dashoffset: -320;
    }
}

@keyframes market-pulse {
    0%, 100% {
        transform: scale(1);
        opacity: 0.9;
    }
    50% {
        transform: scale(1.18);
        opacity: 1;
    }
}

@keyframes loader-slide {
    0% {
        transform: translateX(-110%);
    }
    100% {
        transform: translateX(280%);
    }
}

.market-card,
.orbit-dot,
.market-spark {
    transform-box: fill-box;
    transform-origin: center;
}

.market-card-one {
    animation: market-float-one 5.2s ease-in-out infinite;
}

.market-card-two {
    animation: market-float-two 5.7s ease-in-out infinite;
}

.market-card-three {
    animation: market-float-one 6.4s ease-in-out infinite reverse;
}

.market-ring {
    stroke-dasharray: 18 16;
    animation: market-ring 5.4s linear infinite;
}

.orbit-dot {
    animation: market-pulse 2.5s ease-in-out infinite;
}

.orbit-dot-two {
    animation-delay: 0.45s;
}

.orbit-dot-three {
    animation-delay: 0.9s;
}

.market-spark {
    animation: market-pulse 3.1s ease-in-out infinite;
}

.spark-two {
    animation-delay: 0.55s;
}
