@mixin ca-animation-pop($duration: $ca-duration-slow, $delay: null) {
  @include ca-animation(pop());
  animation-duration: $duration;
  animation-delay: $delay;
}

@mixin ca-animation-pulsate($duration: $ca-duration-slow, $delay: null) {
  @include ca-animation(pulsate());
  animation-duration: $duration;
  animation-delay: $delay;
}

@mixin ca-animation-fade(
  $state: in,
  $duration: $ca-duration-slow,
  $delay: null,
  $from: 0,
  $to: 1
) {
  @if ($state == out) {
    $from: 1;
    $to: 0;
  }

  @include ca-animation(fade($from: $from, $to: $to));
  animation-duration: $duration;
  animation-delay: $delay;
  animation-fill-mode: forwards;
}

@mixin ca-animation-slide-fade(
  $state: in,
  $duration: $ca-duration-slow,
  $delay: null
) {
  $direction: up;
  $from: 0;
  $to: 1;
  $timing: $ca-bounce-in;

  @if ($state == out) {
    $direction: down;
    $from: 1;
    $to: 0;
    $timing: $ca-bounce-out;
  }

  @include ca-animation(
    fade($from: $from, $to: $to),
    slide($state: out, $direction: $direction)
  );

  @include mui-animation(fade(in));
  animation-duration: $duration;
  animation-delay: $delay;
  animation-fill-mode: forwards;
  animation-timing-function: $timing;
}

@mixin ca-animation-scale-fade(
  $state: in,
  $duration: $ca-duration-slow,
  $delay: null
) {
  $from: 0;
  $to: 1;
  $timing: $ca-bounce-in;

  @if ($state == out) {
    $from: 1;
    $to: 0;
    $timing: $ca-bounce-out;
  }

  @include ca-animation(
    fade($from: $from, $to: $to),
    zoom($from: $from, $to: $to)
  );

  animation-duration: $duration;
  animation-delay: $delay;
  animation-fill-mode: forwards;
  animation-timing-function: $timing;
}
