@keyframes fadeIn {
  0% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}

@keyframes fadeIn06 {
  0% {
    opacity: 0;
  }
  100% {
    opacity: 0.6;
  }
}

@keyframes fadeInFromBottom {
  0% {
    opacity: 0;
    transform: translateY(-5px);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeInCircles {
  0% {
    opacity: 0.2;
    transform: translate(-20px, 0);
  }
  10% {
    opacity: 1;
  }
  90% {
    opacity: 1;
  }
  100% {
    opacity: 0.2;
    transform: translate(20px, 0);
  }
}

@keyframes fadeInCirclesLoop {
  0% {
    opacity: 0.2;
  }
  40% {
    opacity: 0.4;
  }
  50% {
    opacity: 1;
  }
  80% {
    opacity: 0.4;
  }
  100% {
    opacity: 0.2;
  }
}

@keyframes pulse1 {
  0% {
    opacity: 0.3;
  }
  50% {
    opacity: 0.5;
  }
  100% {
    opacity: 0.3;
  }
}

@keyframes fadeOut {
  0% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}

@keyframes fadeOutWithHeight {
  0% {
    opacity: 1;
  }
  80% {
    height: 100%;
  }
  100% {
    opacity: 0;
    height: 0%;
  }
}

@keyframes fadeOutUp {
  0% {
    opacity: 1;
  }
  100% {
    opacity: 0;
    height: 0;
  }
}

@keyframes fadeOutDown {
  0% {
    opacity: 1;
    transform: translateY(0);
  }
  100% {
    opacity: 0;
    transform: translateY(20px);
  }
}

@keyframes fadeInDown {
  0% {
    opacity: 0;
    transform: translateY(-20px);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeInUp {
  0% {
    opacity: 0;
    transform: translateY(20px);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeInUp2 {
  0% {
    opacity: 0;
    transform: translateY(20px);
  }
  50% {
    opacity: 0.3;
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

$bounce-amount: 2px;

@keyframes bounceInLeft {
  0% {
    opacity: 0;
    transform: translateX(-200px);
  }
  60% {
    transform: translateX($bounce-amount);
  }
  80% {
    transform: translateX(-$bounce-amount);
  }
  100% {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes bounceInRight {
  0% {
    opacity: 0;
    transform: translateX(200px);
  }
  60% {
    transform: translateX($bounce-amount);
  }
  80% {
    transform: translateX(-$bounce-amount);
  }
  100% {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes bounceInDown {
  0% {
    opacity: 0;
    transform: translateY(-200px);
  }
  60% {
    transform: translateY($bounce-amount);
  }
  80% {
    transform: translateY(-$bounce-amount);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideFromRight {
  0% {
    opacity: 0;
    transform: translateX(200px);
  }
  100% {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes slideFromLeft {
  0% {
    opacity: 0;
    transform: translateX(-200px);
  }
  100% {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes appearFromTop {
  0% {
    opacity: 0;
    transform: translateY(-10px);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeOutRight {
  0% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}

@mixin keyframes($animation-name) {
  @-webkit-keyframes #{$animation-name} {
    @content;
  }
  @-moz-keyframes #{$animation-name} {
    @content;
  }
  @keyframes #{$animation-name} {
    @content;
  }
}

@include keyframes(indeterminate) {
  0% {
    left: -35%;
    right: 100%;
  }
  60% {
    left: 100%;
    right: -90%;
  }
  100% {
    left: 100%;
    right: -90%;
  }
}

@include keyframes(indeterminate-short) {
  0% {
    left: -200%;
    right: 100%;
  }
  60% {
    left: 107%;
    right: -8%;
  }
  100% {
    left: 107%;
    right: -8%;
  }
}

.fadeInAnimation {
  animation-name: fadeIn;
  animation-duration: 0.3s;
  animation-fill-mode: both;
  animation-timing-function: ease-in;
}

.slideInAnimation.left {
  animation: slideFromLeft;
  animation-duration: 0.3s;
  animation-fill-mode: both;
  animation-timing-function: ease-out;
}

.slideInAnimation.right {
  animation: slideFromRight;
  animation-duration: 0.3s;
  animation-fill-mode: both;
  animation-timing-function: ease-out;
}

.bounceInAnimation.left {
  animation: bounceInLeft;
  animation-duration: 0.6s;
  animation-fill-mode: both;
  animation-timing-function: ease-out;
}

.bounceInAnimation.right {
  animation: bounceInRight;
  animation-duration: 0.6s;
  animation-fill-mode: both;
  animation-timing-function: ease-out;
}
