/* Floating dots animation */
.floating-dots-container {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    min-height: 100vh;
    pointer-events: none;
    z-index: 0;
    overflow: hidden;
}

.floating-dot {
    position: absolute;
    width: 3px;
    height: 3px;
    background: rgba(255, 255, 255, 0.7);
    border-radius: 50%;
    opacity: 0;
    pointer-events: none;
    will-change: transform, opacity;
}

.floating-dot.active {
    animation: floatAcross var(--duration) cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

@keyframes floatAcross {
    0% {
        opacity: 0;
        transform: translate(var(--start-x), var(--start-y)) scale(0.5);
    }
    10% {
        opacity: 1;
        transform: translate(var(--start-x), var(--start-y)) scale(1);
    }
    25% {
        opacity: 1;
        transform: translate(
            calc(var(--start-x) + var(--curve1-x)), 
            calc(var(--start-y) + var(--curve1-y))
        ) scale(1.1);
    }
    50% {
        opacity: 1;
        transform: translate(
            calc(var(--start-x) + var(--mid-x)), 
            calc(var(--start-y) + var(--mid-y))
        ) scale(0.9);
    }
    75% {
        opacity: 1;
        transform: translate(
            calc(var(--start-x) + var(--curve2-x)), 
            calc(var(--start-y) + var(--curve2-y))
        ) scale(1.1);
    }
    90% {
        opacity: 1;
        transform: translate(var(--end-x), var(--end-y)) scale(1);
    }
    100% {
        opacity: 0;
        transform: translate(var(--end-x), var(--end-y)) scale(0.5);
    }
}

/* Subtle variation sizes */
.floating-dot.size-small {
    width: 2px;
    height: 2px;
}

.floating-dot.size-medium {
    width: 3px;
    height: 3px;
}

.floating-dot.size-large {
    width: 4px;
    height: 4px;
}
