@use "../mixins/motion" as *;

@mixin slide-motion(
  $className,
  $keyframeName,
  $duration: var(--motion-duration-base)
) {
  @include make-motion($className, $keyframeName, $duration);
  .#{$className}-enter,
  .#{$className}-appear {
    opacity: 0;
    animation-timing-function: var(--ease-out-quint);
    backface-visibility: hidden;
  }
  .#{$className}-leave {
    animation-timing-function: var(--ease-in-quint);
    backface-visibility: hidden;
  }
}

@include slide-motion(slide-up, slideUp);
@include slide-motion(slide-down, slideDown);
@include slide-motion(slide-left, slideLeft);
@include slide-motion(slide-right, slideRight);

@keyframes slideUpIn {
  0% {
    opacity: 0;
    transform-origin: 0% 0%;
    transform: scaleY(0.8) translateY(-0) translateZ(0);
  }
  100% {
    opacity: 1;
    transform-origin: 0% 0%;
    transform: scaleY(1) translateY(0) translateZ(0);
  }
}

@keyframes slideUpOut {
  0% {
    opacity: 1;
    transform-origin: 0% 0%;
    transform: scaleY(1) translateY(0) translateZ(0);
  }
  100% {
    opacity: 0;
    transform-origin: 0% 0%;
    transform: scaleY(0.8) translateY(-0) translateZ(0);
  }
}

@keyframes slideDownIn {
  0% {
    opacity: 0;
    transform-origin: 100% 100%;
    transform: scaleY(0.8) translateY(0) translateZ(0);
  }
  100% {
    opacity: 1;
    transform-origin: 100% 100%;
    transform: scaleY(1) translateY(0) translateZ(0);
  }
}

@keyframes slideDownOut {
  0% {
    opacity: 1;
    transform-origin: 100% 100%;
    transform: scaleY(1) translateY(0) translateZ(0);
  }
  100% {
    opacity: 0;
    transform-origin: 100% 100%;
    transform: scaleY(0.8) translateY(0) translateZ(0);
  }
}

@keyframes slideLeftIn {
  0% {
    opacity: 0;
    transform-origin: 0% 0%;
    transform: scaleX(0.8) translateX(-0) translateZ(0);
  }
  100% {
    opacity: 1;
    transform-origin: 0% 0%;
    transform: scaleX(1) translateX(0) translateZ(0);
  }
}

@keyframes slideLeftOut {
  0% {
    opacity: 1;
    transform-origin: 0% 0%;
    transform: scaleX(1) translateX(0) translateZ(0);
  }
  100% {
    opacity: 0;
    transform-origin: 0% 0%;
    transform: scaleX(0.8) translateX(-0) translateZ(0);
  }
}

@keyframes slideRightIn {
  0% {
    opacity: 0;
    transform-origin: 100% 0%;
    transform: scaleX(0.8) translateX(0) translateZ(0);
  }
  100% {
    opacity: 1;
    transform-origin: 100% 0%;
    transform: scaleX(1) translateX(0) translateZ(0);
  }
}

@keyframes slideRightOut {
  0% {
    opacity: 1;
    transform-origin: 100% 0%;
    transform: scaleX(1) translateX(0) translateZ(0);
  }
  100% {
    opacity: 0;
    transform-origin: 100% 0%;
    transform: scaleX(0.8) translateX(0) translateZ(0);
  }
}
