.confetti-button {
  cursor: pointer;
  position: relative;
  --confetti-color: var(--vp-c-brand);
  --text-color: 0 0 0;
}

.dark .confetti-button {
  --confetti-color: var(--vp-c-brand-dark);
  --text-color: 255 255 255;
}
.confetti-button:before,
.confetti-button:after {
  position: absolute;
  content: '';
  display: block;
  width: 140%;
  max-width: 160px;
  height: 100%;
  left: -20%;
  z-index: -1000;
  transition: all ease-in-out 0.5s;
  background-repeat: no-repeat;
  font-size: 14px;
}

.confetti-button:before {
  content: attr(data-confetti-text);
  letter-spacing: 1px;
  font-weight: bold;
  transform: rotate(-8deg);
  color: rgb(var(--text-color) / 1);
  display: none;
  top: -85%;
  background-image: radial-gradient(circle, var(--confetti-color) 20%, transparent 20%),
    radial-gradient(circle, transparent 20%, var(--confetti-color) 20%, transparent 30%),
    radial-gradient(circle, var(--confetti-color) 20%, transparent 20%),
    radial-gradient(circle, var(--confetti-color) 20%, transparent 20%),
    radial-gradient(circle, transparent 10%, var(--confetti-color) 15%, transparent 20%),
    radial-gradient(circle, var(--confetti-color) 20%, transparent 20%),
    radial-gradient(circle, var(--confetti-color) 20%, transparent 20%),
    radial-gradient(circle, var(--confetti-color) 20%, transparent 20%),
    radial-gradient(circle, var(--confetti-color) 20%, transparent 20%);
  background-size:
    10% 10%,
    20% 20%,
    15% 15%,
    20% 20%,
    18% 18%,
    10% 10%,
    15% 15%,
    10% 10%,
    18% 18%;
}

.confetti-button:after {
  display: none;
  bottom: -75%;
  background-image: radial-gradient(circle, var(--confetti-color) 20%, transparent 20%),
    radial-gradient(circle, var(--confetti-color) 20%, transparent 20%),
    radial-gradient(circle, transparent 10%, var(--confetti-color) 15%, transparent 20%),
    radial-gradient(circle, var(--confetti-color) 20%, transparent 20%),
    radial-gradient(circle, var(--confetti-color) 20%, transparent 20%),
    radial-gradient(circle, var(--confetti-color) 20%, transparent 20%),
    radial-gradient(circle, var(--confetti-color) 20%, transparent 20%);
  background-size:
    15% 15%,
    20% 20%,
    18% 18%,
    20% 20%,
    15% 15%,
    10% 10%,
    20% 20%;
}

.confetti-button.animate:before {
  display: block;
  animation: topBubbles ease-in-out 1s forwards;
}
.confetti-button.animate:after {
  display: block;
  animation: bottomBubbles ease-in-out 1s forwards;
}

@keyframes topBubbles {
  0% {
    color: rgb(var(--text-color) / 0);
    background-position:
      5% 90%,
      10% 90%,
      10% 90%,
      15% 90%,
      25% 90%,
      25% 90%,
      40% 90%,
      55% 90%,
      70% 90%;
  }
  30% {
    color: rgb(var(--text-color) / 1);
  }
  50% {
    background-position:
      0% 80%,
      0% 20%,
      10% 40%,
      20% 0%,
      30% 30%,
      22% 50%,
      50% 50%,
      65% 20%,
      90% 30%;
  }
  100% {
    background-position:
      0% 70%,
      0% 10%,
      10% 30%,
      20% -10%,
      30% 20%,
      22% 40%,
      50% 40%,
      65% 10%,
      90% 20%;
    background-size:
      0% 0%,
      0% 0%,
      0% 0%,
      0% 0%,
      0% 0%,
      0% 0%;
    color: rgb(var(--text-color) / 0);
  }
}
@keyframes bottomBubbles {
  0% {
    background-position:
      10% -10%,
      30% 10%,
      55% -10%,
      70% -10%,
      85% -10%,
      70% -10%,
      70% 0%;
  }
  50% {
    background-position:
      0% 80%,
      20% 80%,
      45% 60%,
      60% 100%,
      75% 70%,
      95% 60%,
      105% 0%;
  }
  100% {
    background-position:
      0% 90%,
      20% 90%,
      45% 70%,
      60% 110%,
      75% 80%,
      95% 70%,
      110% 10%;
    background-size:
      0% 0%,
      0% 0%,
      0% 0%,
      0% 0%,
      0% 0%,
      0% 0%;
  }
}
