.mocean-perspective {
  perspective: 600px;
}

.mocean-show {
  visibility: visible;
}

.mocean-modal-wrap {
  position: fixed;
  max-width: 320px;
  width: 100%;
  z-index: 2000;
  visibility: hidden;
  backface-visibility: hidden;
  width: 100%;
  margin: auto;
}

.mocean-modal-overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  visibility: hidden;
  opacity: 0;
  transition-duration: 500ms;
  background: #0D47A1;
}

.mocean-show.mocean-modal-wrap {
  visibility: visible;
}
.mocean-show.mocean-modal-wrap ~ .mocean-modal-overlay {
  visibility: visible;
  opacity: 1;
}

.mocean-modal {
  transition-property: all;
  transition-duration: 500ms;
  transition-timing-function: cubic-bezier(0.4, 0, 0, 1.5);
  animation-duration: 1000ms;
  animation-fill-mode: forwards;
  animation-timing-function: cubic-bezier(0.4, 0, 0, 1.5);
}

.flip-horizontal-3D {
  perspective: 600px;
}

.flip-horizontal-3D .mocean-content {
  transform: rotateY(-70deg);
  transform-style: preserve-3d;
  opacity: 0;
}

.mocean-show.flip-horizontal-3D .mocean-content {
  transform: rotateY(0deg);
  opacity: 1;
}

.flip-vertical-3D {
  perspective: 600px;
}

.flip-vertical-3D .mocean-content {
  transform: rotateX(-70deg);
  transform-style: preserve-3d;
  opacity: 0;
}

.mocean-show.flip-vertical-3D .mocean-content {
  transform: rotateX(0deg);
  opacity: 1;
}

.sign-3D {
  perspective: 600px;
}

.sign-3D .mocean-content {
  transform: rotateX(-60deg);
  transform-origin: 50% 0;
  transform-style: preserve-3d;
  opacity: 0;
}

.mocean-show.sign-3D .mocean-content {
  transform: rotateX(0deg);
  opacity: 1;
}

.slit-3D {
  perspective: 600px;
}

.slit-3D .mocean-content {
  transform: translateZ(-3000px) rotateY(90deg);
  transform-style: preserve-3d;
  opacity: 0;
}

.mocean-show.slit-3D .mocean-content {
  animation: modalSlit 0.7s forwards ease-out;
}

@keyframes modalSlit {
  50% {
    transform: translateZ(-250px) rotateY(89deg);
    opacity: 0.75;
    animation-timing-function: ease-in;
  }
  100% {
    transform: translateZ(0) rotateY(0deg);
    opacity: 1;
  }
}
.rotate-from-bottom-3D {
  perspective: 600px;
}

.rotate-from-bottom-3D .mocean-content {
  transform: translateY(100%) rotateX(90deg);
  transform-style: preserve-3d;
  transform-origin: 0 100%;
  opacity: 0;
}

.mocean-show.rotate-from-bottom-3D .mocean-content {
  transform: translateY(0%) rotateX(0deg);
  opacity: 1;
}

.rotate-from-left-3D {
  perspective: 600px;
}

.rotate-from-left-3D .mocean-content {
  transform: translateZ(100px) translateX(-30%) rotateY(90deg);
  transform-style: preserve-3d;
  transform-origin: 0 100%;
  opacity: 0;
}

.mocean-show.rotate-from-left-3D .mocean-content {
  transform: translateZ(0px) translateX(0%) rotateY(0deg);
  opacity: 1;
}

.newspaper .mocean-content {
  transform: scale(0.5) rotate(720deg);
  opacity: 0;
}

.mocean-show.newspaper .mocean-content {
  transform: scale(1) rotate(0deg);
  opacity: 1;
}

.side-fall {
  perspective: 600px;
  transform-style: preserve-3d;
}

.side-fall .mocean-content {
  transition-timing-function: ease-out;
  transform: translateZ(600px) translateX(30%) rotate(10deg);
  opacity: 0;
}

.mocean-show.side-fall .mocean-content {
  transition-timing-function: ease-in;
  transform: translateZ(0) translateX(0) rotate(0deg);
  opacity: 1;
}

.tilt-fall .mocean-content {
  transform: translateY(100%) rotate(-25deg);
  opacity: 0;
}

.shake .mocean-content {
  opacity: 0;
}

.mocean-show.shake .mocean-content {
  opacity: 1;
  animation-name: shake;
  animation-timing-function: ease;
}

@keyframes shake {
  0%, 100% {
    transform: translateX(0);
  }
  10%, 30%, 50%, 70%, 90% {
    transform: translateX(-10px);
  }
  20%, 40%, 60%, 80% {
    transform: translateX(10px);
  }
}
.bounce .mocean-content {
  opacity: 0;
}

.mocean-show.bounce .mocean-content {
  opacity: 1;
  animation-name: bounce;
  animation-timing-function: ease;
}

@keyframes bounce {
  0%, 20%, 50%, 80%, 100% {
    transform: translateY(0);
  }
  40% {
    transform: translateY(-30px);
  }
  60% {
    transform: translateY(-15px);
  }
}
.pulse .mocean-content {
  opacity: 0;
}

.mocean-show.pulse .mocean-content {
  opacity: 1;
  animation-name: pulse;
  animation-timing-function: ease;
}

@keyframes pulse {
  0% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.1);
  }
  100% {
    transform: scale(1);
  }
}
.wobble .mocean-content {
  opacity: 0;
}

.mocean-show.wobble .mocean-content {
  opacity: 1;
  animation-name: wobble;
  animation-timing-function: ease;
}

@keyframes wobble {
  0% {
    transform: translateX(0%);
  }
  15% {
    transform: translateX(-25%) rotate(-5deg);
  }
  30% {
    transform: translateX(20%) rotate(3deg);
  }
  45% {
    transform: translateX(-15%) rotate(-3deg);
  }
  60% {
    transform: translateX(10%) rotate(2deg);
  }
  75% {
    transform: translateX(-5%) rotate(-1deg);
  }
  100% {
    transform: translateX(0%);
  }
}
.swing .mocean-content {
  transform-origin: 50% 0%;
  opacity: 0;
}

.mocean-show.swing .mocean-content {
  opacity: 1;
  animation-name: swing;
  animation-timing-function: ease;
}

@keyframes swing {
  20% {
    transform: rotate(15deg);
  }
  40% {
    transform: rotate(-10deg);
  }
  60% {
    transform: rotate(5deg);
  }
  80% {
    transform: rotate(-5deg);
  }
  100% {
    transform: rotate(0deg);
  }
}
.tada .mocean-content {
  opacity: 0;
}

.mocean-show.tada .mocean-content {
  opacity: 1;
  animation-name: tada;
  animation-timing-function: ease;
}

@keyframes tada {
  0% {
    transform: scale(1);
  }
  10%, 20% {
    transform: scale(0.9) rotate(-3deg);
  }
  30%, 50%, 70%, 90% {
    transform: scale(1.1) rotate(3deg);
  }
  40%, 60%, 80% {
    transform: scale(1.1) rotate(-3deg);
  }
  100% {
    transform: scale(1) rotate(0);
  }
}
.slide-in-top .mocean-content {
  transform: translate3d(0, -100%, 0);
  opacity: 0;
}

.mocean-show.slide-in-top .mocean-content {
  transform: translate3d(0, 0, 0);
  opacity: 1;
}

.slide-in-right .mocean-content {
  transform: translate3d(30%, 0, 0);
  opacity: 0;
}

.mocean-show.slide-in-right .mocean-content {
  transform: translate3d(0, 0, 0);
  opacity: 1;
}

.slide-in-bottom .mocean-content {
  transform: translate3d(0, 30%, 0);
  opacity: 0;
}

.mocean-show.slide-in-bottom .mocean-content {
  transform: translate3d(0, 0, 0);
  opacity: 1;
}

.slide-in-left .mocean-content {
  transform: translate3d(-30%, 0, 0);
  opacity: 0;
}

.mocean-show.slide-in-left .mocean-content {
  transform: translate3d(0, 0, 0);
  opacity: 1;
}

.slide-out-bottom .mocean-content {
  transform: translateY(100%);
  opacity: 0;
}

.slide-out-top .mocean-content {
  transform: translateY(-100%);
  opacity: 0;
}

.slide-out-right .mocean-content {
  transform: translateX(100%);
  opacity: 0;
}

.slide-out-left .mocean-content {
  transform: translateX(-100%);
  opacity: 0;
}
