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

.vis-flake {
  position: absolute;
  top: -60px;
  left: 0;
  width: 24px;
  height: 24px;
  opacity: 0.8;
  will-change: transform;
  filter: drop-shadow(0 1px 1px rgba(0,0,0,0.08));
}

@keyframes vis-fall {
  0%   { transform: translate3d(var(--x), -60px, 0) rotate(var(--rot0)); }
  100% { transform: translate3d(calc(var(--x) + var(--drift)), calc(100vh + 80px), 0) rotate(var(--rot1)); }
}

@keyframes vis-wiggle {
  0%, 100% { margin-left: 0; }
  50%      { margin-left: var(--wiggle); }
}

.vis-anim {
  animation:
    vis-fall var(--fallDur) linear forwards,
    vis-wiggle var(--wiggleDur) ease-in-out infinite;
}

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