body {
    text-align: center;
    margin: 0;
}

/*
 * Jigglupuff animations
 *
*/

@keyframes bgcolor {
    0% {
        background-color: #45a3e5
    }

    30% {
        background-color: #66bf39
    }

    60% {
        background-color: #eb670f
    }

    90% {
        background-color: #f35
    }

    100% {
        background-color: #864cbf
    }
}

body {
    -webkit-animation: bgcolor 40s infinite;
    animation: bgcolor 20s infinite;
    -webkit-animation-direction: alternate;
    animation-direction: alternate;
}

.x, .y {
    width: 100px;
    height: 100px;
}

.x {
    animation: x 13s linear infinite alternate;
}

.y {
    animation: y 7s linear infinite alternate-reverse;
}

@keyframes x {
    100% {
        transform: translateX( calc(100vw - 100px));
    }
}

@keyframes y {
    100% {
        transform: rotate(90deg) translateY( calc(100vh - 100px));
    }
}


@keyframes firework {
  0% {
    transform: translate(-50%, 60vh);
    width: 0.5vmin;
    opacity: 1;
  }
  50% {
    width: 0.5vmin;
    opacity: 1;
  }
  100% {
    width: 45vmin;
    opacity: 0;
  }
}

.firework,
.firework::before,
.firework::after {
  --top: 60vh;
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 0.5vmin;
  aspect-ratio: 1;
  background:
    /* random backgrounds */
    radial-gradient(circle, #ff0 0.2vmin, #0000 0) 50% 00%,
    radial-gradient(circle, #ff0 0.3vmin, #0000 0) 00% 50%,
    radial-gradient(circle, #ff0 0.5vmin, #0000 0) 50% 99%,
    radial-gradient(circle, #ff0 0.2vmin, #0000 0) 99% 50%,
    radial-gradient(circle, #ff0 0.3vmin, #0000 0) 80% 90%,
    radial-gradient(circle, #ff0 0.5vmin, #0000 0) 95% 90%,
    radial-gradient(circle, #ff0 0.5vmin, #0000 0) 10% 60%,
    radial-gradient(circle, #ff0 0.2vmin, #0000 0) 31% 80%,
    radial-gradient(circle, #ff0 0.3vmin, #0000 0) 80% 10%,
    radial-gradient(circle, #ff0 0.2vmin, #0000 0) 90% 23%,
    radial-gradient(circle, #ff0 0.3vmin, #0000 0) 45% 20%,
    radial-gradient(circle, #ff0 0.5vmin, #0000 0) 13% 24%
    ;
  background-size: 0.5vmin 0.5vmin;
  background-repeat: no-repeat;
  animation: firework 2s infinite;
}

.firework::before {
  transform: translate(-50%, -50%) rotate(25deg) !important;
}

.firework::after {
  transform: translate(-50%, -50%) rotate(-37deg) !important;
}
