@mixin chainable-anim-in($anim) {
    animation-name: $anim;

    &.shake {
        animation-name: $anim, shake-in;

        &.horizontally {
            animation-name: $anim, shake-horizontally-in;
        }

        &.vertically {
            animation-name: $anim, shake-vertically-in;
        }
    }

    &.pulsate {
        animation-name: $anim, pulsate-in;
    }

    &.flash {
        animation-name: $anim, flash-in;
    }

    &.wave {
        animation-name: $anim, wave-in;
    }
}

@mixin chainable-anim-out($anim) {
    animation-name: $anim;

    &.shake {
        animation-name: shake-out, $anim;

        &.horizontally {
            animation-name: shake-horizontally-out, $anim;
        }

        &.vertically {
            animation-name: shake-vertically-out, $anim;
        }
    }

    &.pulsate {
        animation-name: pulsate-out, $anim;
    }

    &.flash {
        animation-name: flash-out, $anim;
    }

    &.wave {
        animation-name: wave-out, $anim;
    }
}

@mixin chainable(
    $firstDuration,
    $firstTimingFunction,
    $secondDuration,
    $secondTimingFunction
) {
    animation-duration: $firstDuration, $secondDuration;
    animation-delay: 0s, $firstDuration;
    animation-timing-function: $firstTimingFunction, $secondTimingFunction;
}
