/* Контейнер для снегопада */
.b-ny-snow-container {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    pointer-events: none; /* Снежинки не мешают взаимодействию с контентом */
    z-index: 9999;
    overflow: hidden;
    font-size: 0; /* Убираем лишние пробелы от инлайновых элементов */
}

/* Элемент снежинки (основной) */
.b-ny-snowflake {
    position: absolute;
    top: 0; /* Стартовая позиция на краю экрана */
    left: var(--snow-x);
    width: var(--snow-size);
    height: var(--snow-size);
    
    will-change: transform; /* Подсказка браузеру для аппаратного ускорения */
    opacity: 0; /* Изначально невидимы */
    
    /* Анимация 1: Только падение и вращение */
    animation: b-ny-fall linear infinite; 
    animation-duration: var(--snow-duration); 
    animation-delay: var(--snow-delay); /* Отрицательная задержка для мгновенного старта */
    
    color: var(--snowflake-color, #87cefa); /* Цвет снежинок */
}

/* Вложенный элемент для покачивания (разделяет transform) */
.b-ny-sway-wrapper {
    width: 100%; /* Занимает всю ширину родителя */
    height: 100%; /* Занимает всю высоту родителя */
    
    will-change: transform; /* Подсказка браузеру для аппаратного ускорения */
    
    /* Анимация 2: Только покачивание по горизонтали */
    animation: 
        b-ny-sway ease-in-out infinite alternate; 

    animation-duration: var(--snow-sway-duration); 
    animation-delay: var(--snow-sway-delay); /* Отрицательная задержка для мгновенного старта */
}

/* 1. Анимация падения и вращения (FALL) */
@keyframes b-ny-fall {
    0% {
        opacity: 0;
        /* Только Y и Z для translate3d */
        transform: translate3d(0, 0, 0) rotate(0deg);
    }
    20% { /* Прозрачность нарастает по мере входа в кадр */
        opacity: var(--snow-initial-opacity);
    }
    80% { 
        opacity: var(--snow-initial-opacity);
    }
    100% {
        opacity: 0;
        /* Конечная позиция по Y и вращение */
        transform: translate3d(0, 120vh, 0) rotate(var(--snow-rotation));
    }
}

/* 2. Анимация Покачивания (SWAY) - дает идеально плавную синусоиду по X */
@keyframes b-ny-sway {
    0% {
        transform: translateX(0); 
    }
    100% {
        transform: translateX(var(--snow-sway-amount)); /* Движение до заданной амплитуды */
    }
}