snowfall {
    position: fixed;
    inset: 0;
    z-index: 50000000;
    display: block;
    overflow: hidden;
    pointer-events: none;
}

    /* para poder apagar desde backend si quieres */
    snowfall.snow-disabled {
        display: none !important;
    }

    snowfall snowflake {
        position: absolute;
        top: -10vh;
        left: 0;
        width: 100px;
        height: 100px;
        display: flex;
        justify-content: center;
        align-items: center;
        transform: scale(var(--scale, 1));
        animation-name: snow-fall;
        animation-timing-function: linear;
        animation-iteration-count: infinite;
        animation-duration: var(--duration, 12s);
        animation-delay: var(--delay, 0s);
    }

        snowfall snowflake img {
            width: 20px;
            height: 20px;
            opacity: var(--opacity, 0.6);
        }

/* caída + giro 3D */
@keyframes snow-fall {
    0% {
        transform: translate3d(0, -10vh, 0) scale(var(--scale, 1)) rotate3d(var(--rx, 0), var(--ry, 0), var(--rz, 1), var(--rotStart, 0deg));
    }

    100% {
        transform: translate3d(var(--drift, 30px), 110vh, 0) scale(var(--scale, 1)) rotate3d(var(--rx, 0), var(--ry, 0), var(--rz, 1), var(--rotEnd, 360deg));
    }
}

@media (max-width: 768px) {
    snowfall {
        display: none;
    }
}
