// Pure CSS Snowfall
// Released by Artimon under MIT license
//
// Source: https://github.com/Artimon/pure-css-snowfall

@use 'sass:math';

$count: 36;
$screenOffset: 0px;
$fallDuration: 12;
$windNoise: 30;
$windSpeed: 4;
$sizeNoise: 40;
$rotation: 360;
$imageSize: 20px;
$fontSize: 40px;

.snowfall {
    z-index: 0;
    display: block;

    font-size: $fontSize;

    overflow: hidden;
    pointer-events: none;

    .snowflake {
        position: relative;
        top: 0;
        left: 0;

        display: flex;
        justify-content: center;

        width: $screenOffset;
        height: $screenOffset;

        span {
            align-self: center;
        }

        img {
            align-self: center;
            width: $imageSize;
        }
    }

    @while ($count > 0) {
        $left: random(100);
        $deltaLeft: math.div(
            random(2 * $windNoise * 10),
            10 - $windNoise + $windSpeed
        );
        $scale: 1 +
            math.div(
                math.div(random(2 * $sizeNoise * 10), 10 - $sizeNoise),
                100
            );

        .snowflake:nth-child(#{$count}) {
            animation: animation-snowflake-#{$count} linear infinite;
            animation-duration: $fallDuration +
                math.div(random($fallDuration * 10), 10) +
                s;
            animation-delay: math.div(random(2 * $fallDuration * 10), 10) -
                (2 * $fallDuration) +
                s;
        }

        @keyframes animation-snowflake-#{$count} {
            0% {
                left: percentage(math.div($left, 100));
                top: calc(0% - #{$screenOffset});
                transform: scale($scale)
                    rotate3d(
                        math.div(random(100), 100),
                        math.div(random(100), 100),
                        math.div(random(100), 100),
                        0deg
                    );
            }
            100% {
                left: percentage(math.div(($left + $deltaLeft), 100));
                top: calc(100% + #{$screenOffset});
                transform: scale($scale)
                    rotate3d(
                        math.div(random(100), 100),
                        math.div(random(100), 100),
                        math.div(random(100), 100),
                        (random($rotation) + $rotation) *
                            ((random(2) - 1) * 2 - 1) + deg
                    );
            }
        }

        $count: $count - 1;
    }
}
