.beer-bubbles {
  position: fixed;
  inset: 0;
  z-index: 0;
  overflow: hidden;
  pointer-events: none;
}

.bubble {
  position: absolute;
  bottom: 0;
  background: rgba(255, 255, 255, 0.338);
  border-radius: 50%;
  will-change: transform, opacity;
  animation: floatAndDrift linear forwards;
}

@keyframes floatAndDrift {
  0% {
    transform: translate(0, 0);
    opacity: 0.8;
  }
  25% {
    transform: translate(-1px, -25vh);
  }
  50% {
    transform: translate(2px, -50vh);
  }
  75% {
    transform: translate(-1px, -75vh);
  }
  100% {
    transform: translate(1px, -100vh);
    opacity: 0;
  }
}

@keyframes fallAndWobble {
  0% {
    transform: translate(0, 0) rotate(0deg);
    opacity: .8;
  }
  50% {
    transform: translateX(-10px) rotate(180deg);
  }
  100% {
    transform: translateY(100vh) rotate(360deg);
    opacity: 0;
  }
}

.confetti {
  position: absolute;
  top: -20px;
  will-change: transform, opacity;
  animation: fallAndWobble linear forwards;
  opacity: 0.9;
}

/* Shape styles */
.confetti.circle {
  border-radius: 50%;
}

.confetti.square {
  border-radius: 4px;
}

.confetti.triangle {
  width: 0;
  height: 0;
  background: none;
  border-left: 8px solid transparent;
  border-right: 8px solid transparent;
  border-bottom: 14px solid;
}

.confetti.streamer {
  border-radius: 999px;
  transform: rotate(45deg);
}

/* Fall & wobble animation */
@keyframes fallAndWobble {
  0% {
    transform: translate(0, 0) rotate(0deg);
    opacity: 1;
  }
  50% {
    transform: translateX(-10px) rotate(180deg);
  }
  100% {
    transform: translateY(100vh) rotate(360deg);
    opacity: 0;
  }
}

@keyframes burstConfetti {
  0% {
    opacity: 1;
    transform: translate(0, 0) scale(1);
  }
  100% {
    opacity: 0;
    transform: translate(var(--x), var(--y)) scale(0.5);
  }
}
