.festive-snow {
    position: fixed;
    inset: 0;
    overflow: hidden;
    pointer-events: none;
    user-select: none;
    z-index: 1030;
}
.festive-snowflake {
    position: absolute;
    top: -64px;
    left: var(--snow-left);
    font: var(--snow-size)/1 Arial, sans-serif;
    color: var(--snow-color, #ffffff);
    opacity: var(--snow-opacity, .65);
    text-shadow: 0 1px 2px rgba(23, 63, 50, .4);
    animation: festive-snowfall var(--snow-duration) var(--snow-delay) linear infinite;
}
.festive-snow[hidden] { display: none; }
.festive-snow.is-paused .festive-snowflake { animation-play-state: paused; }
@keyframes festive-snowfall {
    from { transform: translate3d(0, -32px, 0) rotate(0deg); }
    to { transform: translate3d(var(--snow-drift), calc(100vh + 64px), 0) rotate(180deg); }
}
@media (max-width: 575.98px) {
    .festive-snowflake:nth-child(even) { display: none; }
}
.festive-snow[data-wind-gusts="true"] .festive-snowflake { animation: festive-snowfall var(--snow-duration) var(--snow-delay) linear infinite, festive-wind-pulse var(--gust-period, 12s) ease-in-out infinite; }
@keyframes festive-wind-pulse {
    0%, 25%, 100% { translate: 0 0; }
    55%, 65% { translate: calc(var(--snow-drift) * var(--gust-intensity, .5) * .6) 0; }
}
.festive-snow.is-paused .festive-snowflake { animation-play-state: paused; }
@media (prefers-reduced-motion: reduce) {
    .festive-snow, .festive-snow-control { display: none; }
    .festive-snow .festive-snowflake { animation: none !important; }
}
