html, body { height: 100%; }
body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; }

/* FX */
.fx-resize {
  width: 480px !important;
  height: 320px !important;
}
.fx-spin { animation: spin 6400ms ease-in-out infinite; }
.fx-shadow { position: relative; overflow: visible !important; }
.fx-shadow::before {
  content: "";
  position: absolute;
  display: block;
  width: 100%;
  top: calc(100% - 1px);
  left: 0;
  height: 1px;
  background-color: black;
  border-radius: 50%;
  z-index: -1;
  transform: rotateX(80deg);
  box-shadow: 0px 0px 60px 38px rgb(0 0 0 / 25%);
}
.fx-mirror {
  -webkit-box-reflect: below 0px linear-gradient(to bottom, rgba(0,0,0,0.0), rgba(0,0,0,0.4));
}

@keyframes spin {
  0% {
    transform: perspective(1000px) rotateY(0deg);
    animation-timing-function: ease-in-out;
  }
  10% {
    transform: perspective(1000px) rotateY(0deg);
    animation-timing-function: ease-in-out;
  }
  40% {
    transform: perspective(1000px) rotateY(180deg);
    animation-timing-function: ease-in-out;
  }
  60% {
    transform: perspective(1000px) rotateY(180deg);
    animation-timing-function: ease-in-out;
  }
  90% {
    transform: perspective(1000px) rotateY(359deg);
    animation-timing-function: ease-in-out;
  }
  100% {
    transform: perspective(1000px) rotateY(360deg);
    animation-timing-function: ease-in-out;
  }
}