/**
 * Module: Bounce
 * Filename: ca__Bounce.css
 */

.bounceX {
  animation-name: bounceX;
}

@keyframes bounceX {
  0%,
  25%,
  55%,
  85%,
  100% {
    animation-timing-function: ease-out;
    transform: scale3d(1, 1, 1);
  }

  41%,
  44% {
    animation-timing-function: ease-in;
    transform: scale3d(1.8, 1, 1);
  }

  70% {
    animation-timing-function: ease-in;
    transform: scale3d(1.5, 1, 1);
  }

  90% {
    transform: scale3d(1.1, 1, 1);
  }
}

.bounceY {
  animation-name: bounceY;
}

@keyframes bounceY {
  0%,
  25%,
  55%,
  85%,
  100% {
    animation-timing-function: ease-out;
    transform: scale3d(1, 1, 1);
  }

  41%,
  44% {
    animation-timing-function: ease-in;
    transform: scale3d(1, 2, 1);
  }

  70% {
    animation-timing-function: ease-in;
    transform: scale3d(1, 1.5, 1);
  }

  90% {
    transform: scale3d(1, 1.1, 1);
  }
}

.bounceZoomOut {
  animation-name: bounceZoomOut;
}

@keyframes bounceZoomOut {
  0%,
  25%,
  55%,
  85%,
  100% {
    animation-timing-function: ease-out;
    transform: scale(1);
  }

  41%,
  44% {
    animation-timing-function: ease-in;
    transform: scale(0.3);
  }

  70% {
    animation-timing-function: ease-in;
    transform: scale(0.5);
  }

  90% {
    transform: scale(0.9);
  }
}

.spring {
  animation: spring var(--spring-duration, 0.6s) cubic-bezier(0.34, 1.56, 0.64, 1) infinite;
}

@keyframes spring {
  0%,
  100% {
    transform: translateY(0);
  }

  50% {
    transform: translateY(calc(var(--spring-height, 1rem) * -1));
  }
}

.boing {
  animation: boing var(--boing-duration, 0.9s) cubic-bezier(0.28, 1.5, 0.68, 1) infinite;
}

@keyframes boing {
  0%,
  100% {
    transform: translateY(0);
  }

  30% {
    transform: translateY(calc(var(--boing-height, 1rem) * -1.1));
  }

  50% {
    transform: translateY(calc(var(--boing-height, 1rem) * 0.3));
  }

  70% {
    transform: translateY(calc(var(--boing-height, 1rem) * -0.5));
  }

  90% {
    transform: translateY(calc(var(--boing-height, 1rem) * 0.15));
  }
}

.hop {
  animation: hop var(--hop-duration, 0.5s) ease-out infinite;
}

@keyframes hop {
  0%,
  100% {
    transform: translateY(0);
  }

  40% {
    transform: translateY(calc(var(--hop-height, 0.8rem) * -1));
  }
}

.lift {
  animation: lift var(--lift-duration, 1.2s) ease-in-out infinite;
}

@keyframes lift {
  0%,
  100% {
    transform: translateY(0);
  }

  50% {
    transform: translateY(calc(var(--lift-height, 10px) * -1));
  }
}

.popUp {
  animation: popUp var(--popUp-duration, 0.5s) ease-out both;
}

@keyframes popUp {
  0% {
    transform: scale(0.95) translateY(0);
    opacity: 0;
  }

  60% {
    transform: scale(1.05) translateY(calc(var(--popUp-height, 8px) * -1));
    opacity: 1;
  }

  80% {
    transform: scale(0.98) translateY(calc(var(--popUp-height, 8px) * -0.3));
  }

  100% {
    transform: scale(1) translateY(0);
  }
}

.rebound {
  animation: rebound var(--rebound-duration, 0.7s) ease-in-out infinite;
}

@keyframes rebound {
  0%,
  100% {
    transform: translateY(0);
  }

  20% {
    transform: translateY(calc(var(--rebound-height, 1rem) * -1));
  }

  40% {
    transform: translateY(calc(var(--rebound-height, 1rem) * 0.5));
  }

  60% {
    transform: translateY(calc(var(--rebound-height, 1rem) * -0.3));
  }
}

.jump {
  animation: jump var(--jump-duration, 0.6s) ease-in-out infinite;
}

@keyframes jump {
  0%,
  100% {
    transform: translateY(0);
  }

  30% {
    transform: translateY(calc(var(--jump-height, 1.2rem) * -1));
  }
}

.jumping {
  animation: jumping 1.2s ease-in-out infinite;
  transform-origin: bottom center;
}

@keyframes jumping {
  0%,
  100% {
    transform: translateY(0) scale(1);
    opacity: 0.7;
  }

  25% {
    transform: translateY(-20%) scale(1.1);
    opacity: 1;
  }

  50% {
    transform: translateY(0) scale(0.95);
    opacity: 0.8;
  }

  75% {
    transform: translateY(-10%) scale(1.05);
    opacity: 0.9;
  }
}

.launch {
  animation: launch var(--launch-duration, 0.8s) ease-out infinite;
}

@keyframes launch {
  0% {
    transform: translateY(0);
  }

  20% {
    transform: translateY(calc(var(--launch-height, 2rem) * -1.2));
  }

  40% {
    transform: translateY(calc(var(--launch-height, 2rem) * 0.5));
  }

  60% {
    transform: translateY(calc(var(--launch-height, 2rem) * -0.3));
  }

  80% {
    transform: translateY(calc(var(--launch-height, 2rem) * 0.15));
  }

  100% {
    transform: translateY(0);
  }
}

.levitate {
  animation: levitate var(--levitate-duration, 2s) ease-in-out infinite;
}

@keyframes levitate {
  0%,
  100% {
    transform: translateY(0);
  }

  50% {
    transform: translateY(calc(var(--levitate-height, 0.6rem) * -1));
  }
}

.jitterJump {
  animation: jitterJump 1.3s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;
}

@keyframes jitterJump {
  0% {
    transform: translateY(0) scale(1, 1);
  }

  20% {
    transform: translateY(-40px) scale(1.1, 0.9);
  } /* Jump up with squash */

  40% {
    transform: translateY(0) scale(0.9, 1.1);
  } /* Land with stretch */

  60% {
    transform: translateY(-20px) scale(1.05, 0.95);
  } /* Smaller rebound */

  80% {
    transform: translateY(0) scale(0.98, 1.02);
  } /* Settle */

  100% {
    transform: translateY(0) scale(1, 1);
  }
}

.elasticJump {
  animation: elasticJump 1.2s cubic-bezier(0.2, 0.8, 0.3, 1.2) infinite;
  transform-origin: bottom center;
  display: inline-block;
}

@keyframes elasticJump {
  0%,
  100% {
    transform: translateY(0) scaleY(1);
  }

  30% {
    transform: translateY(-40%) scaleY(1.2);
  }

  50% {
    transform: translateY(0) scaleY(0.9);
  }

  70% {
    transform: translateY(-20%) scaleY(1.05);
  }
}

.squishyBounce {
  animation: squishyBounce 1.4s ease-in-out infinite;
  transform-origin: bottom center;
  display: inline-block;
}

@keyframes squishyBounce {
  0%,
  100% {
    transform: translateY(0) scale(1, 1);
  }

  25% {
    transform: translateY(-30%) scale(1.1, 0.9);
  }

  50% {
    transform: translateY(0) scale(0.95, 1.05);
  }

  75% {
    transform: translateY(-15%) scale(1.05, 0.95);
  }
}

.bouncyDrop {
  animation: bouncyDrop 1.5s ease-in-out infinite;
  transform-origin: top center;
  display: inline-block;
}

@keyframes bouncyDrop {
  0% {
    transform: translateY(-100%) scaleY(1.2);
    opacity: 0;
  }

  30% {
    transform: translateY(10%) scaleY(0.8);
    opacity: 1;
  }

  60% {
    transform: translateY(-5%) scaleY(1.1);
  }

  100% {
    transform: translateY(0) scaleY(1);
  }
}
