#snow-overlay {
  position: fixed;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
  z-index: 8;
}

#snow-overlay .snowflake {
  position: absolute;
  top: -12vh;
  left: 0;
  width: calc(var(--size) * 1px);
  height: calc(var(--size) * 1px);
  border-radius: 50%;
  opacity: 0;
  background: radial-gradient(
    circle at 30% 30%,
    rgba(255, 255, 255, 0.95) 0%,
    rgba(255, 255, 255, 0.82) 35%,
    rgba(255, 255, 255, 0.20) 70%,
    rgba(255, 255, 255, 0) 100%
  );
  filter: drop-shadow(0 0 6px rgba(255, 255, 255, 0.28));
  will-change: transform, opacity;
  animation-name: snowfall;
  animation-timing-function: linear;
  animation-iteration-count: infinite;
  animation-duration: calc(var(--duration) * 1s);
  animation-delay: calc(var(--delay) * -1s);
}

@keyframes snowfall {
  0% {
    transform: translate3d(0, -12vh, 0);
    opacity: 0;
  }

  15% {
    opacity: var(--opacity);
  }

  100% {
    transform: translate3d(calc(var(--drift) * 1px), 110vh, 0);
    opacity: 0;
  }
}

@media (prefers-reduced-motion: reduce) {
  #snow-overlay {
    display: none !important;
  }
}

/* reduce forced recoloring in some in-app browsers */
:root {
  color-scheme: dark;
}

#snow-overlay,
#snow-overlay .snowflake {
  forced-color-adjust: none;
}
