@mixin motion-common($duration: var(--motion-duration-base)) {
  animation-duration: $duration;
  animation-fill-mode: both;
}

@mixin motion-common-leave($duration: var(--motion-duration-base)) {
  animation-duration: $duration;
  animation-fill-mode: both;
}

@mixin make-motion(
  $className,
  $keyframeName,
  $duration: var(--motion-duration-base)
) {
  .#{$className}-enter,
  .#{$className}-appear {
    @include motion-common($duration);
    animation-play-state: paused;
  }
  .#{$className}-leave {
    @include motion-common-leave($duration);
    animation-play-state: paused;
  }
  .#{$className}-enter.#{$className}-enter-active,
  .#{$className}-appear.#{$className}-appear-active {
    animation-name: #{$keyframeName}In;
    animation-play-state: running;
  }
  .#{$className}-leave.#{$className}-leave-active {
    animation-name: #{$keyframeName}Out;
    animation-play-state: running;
    pointer-events: none;
  }
}
