/**
 * Settings
 */

$sal-animation-duration: 0.2s !default;
$sal-animation-delay: 0s !default;
$sal-slide-offset: 20% !default;
$sal-zoom-in-scale: 0.5 !default;
$sal-zoom-out-scale: 1.1 !default;
$sal-flip-rotate: 91deg !default;

/**
  * Easings
  */

$sal-easings: (linear: linear,
    ease: ease,
    ease-in: ease-in,
    ease-out: ease-out,
    ease-in-out: ease-in-out,

    ease-in-cubic: cubic-bezier(.55, .055, .675, .19),
    ease-out-cubic: cubic-bezier(.215, .61, .355, 1),
    ease-in-out-cubic: cubic-bezier(.645, .045, .355, 1),

    ease-in-circ: cubic-bezier(.6, .04, .98, .335),
    ease-out-circ: cubic-bezier(.075, .82, .165, 1),
    ease-in-out-circ: cubic-bezier(.785, .135, .15, .86),

    ease-in-expo: cubic-bezier(.95, .05, .795, .035),
    ease-out-expo: cubic-bezier(.19, 1, .22, 1),
    ease-in-out-expo: cubic-bezier(1, 0, 0, 1),

    ease-in-quad: cubic-bezier(.55, .085, .68, .53),
    ease-out-quad: cubic-bezier(.25, .46, .45, .94),
    ease-in-out-quad: cubic-bezier(.455, .03, .515, .955),

    ease-in-quart: cubic-bezier(.895, .03, .685, .22),
    ease-out-quart: cubic-bezier(.165, .84, .44, 1),
    ease-in-out-quart: cubic-bezier(.77, 0, .175, 1),

    ease-in-quint: cubic-bezier(.755, .05, .855, .06),
    ease-out-quint: cubic-bezier(.23, 1, .32, 1),
    ease-in-out-quint: cubic-bezier(.86, 0, .07, 1),

    ease-in-sine: cubic-bezier(.47, 0, .745, .715),
    ease-out-sine: cubic-bezier(.39, .575, .565, 1),
    ease-in-out-sine: cubic-bezier(.445, .05, .55, .95),

    ease-in-back: cubic-bezier(.6, -.28, .735, .045),
    ease-out-back: cubic-bezier(.175, .885, .32, 1.275),
    ease-in-out-back: cubic-bezier(.68, -.55, .265, 1.55));

/**
  * Core
  */

[data-sal] {
    transition-duration: $sal-animation-duration;
    transition-delay: $sal-animation-delay;
    transition-duration: var(--sal-duration, $sal-animation-duration);
    transition-delay: var(--sal-delay, $sal-animation-delay);
    transition-timing-function: var(--sal-easing, map-get($sal-easings, 'ease'));
}

@for $i from 4 through 40 {
    [data-sal][data-sal-duration='#{$i * 50}'] {
        transition-duration: #{$i * 0.05}s;
    }
}

@for $i from 1 through 20 {
    [data-sal][data-sal-delay='#{$i * 50}'] {
        transition-delay: #{$i * 0.05}s;
    }
}

@each $key,
$value in $sal-easings {
    [data-sal][data-sal-easing='#{$key}'] {
        transition-timing-function: $value;
    }
}

/**
  * Animations
  */

// Fade
[data-sal|='fade'] {
    opacity: 0;
    transition-property: opacity;
}

[data-sal|='fade'].sal-animate,
body.sal-disabled [data-sal|='fade'] {
    opacity: 1;
}

// Slide
[data-sal|='slide'] {
    opacity: 0;
    transition-property: opacity, transform;
}

[data-sal='slide-up'] {
    transform: translateY($sal-slide-offset);
}

[data-sal='slide-down'] {
    transform: translateY(-$sal-slide-offset);
}

[data-sal='slide-left'] {
    transform: translateX($sal-slide-offset);
}

[data-sal='slide-right'] {
    transform: translateX(-$sal-slide-offset);
}

[data-sal|='slide'].sal-animate,
body.sal-disabled [data-sal|='slide'] {
    opacity: 1;
    transform: none;
}

// Zoom
[data-sal|='zoom'] {
    opacity: 0;
    transition-property: opacity, transform;
}

[data-sal='zoom-in'] {
    transform: scale($sal-zoom-in-scale);
}

[data-sal='zoom-out'] {
    transform: scale($sal-zoom-out-scale);
}

[data-sal|='zoom'].sal-animate,
body.sal-disabled [data-sal|='zoom'] {
    opacity: 1;
    transform: none;
}

// Flip
[data-sal|='flip'] {
    backface-visibility: hidden;
    transition-property: transform;
}

[data-sal='flip-left'] {
    transform: perspective(2000px) rotateY(-$sal-flip-rotate);
}

[data-sal='flip-right'] {
    transform: perspective(2000px) rotateY($sal-flip-rotate);
}

[data-sal='flip-up'] {
    transform: perspective(2000px) rotateX(-$sal-flip-rotate);
}

[data-sal='flip-down'] {
    transform: perspective(2000px) rotateX($sal-flip-rotate);
}

[data-sal|='flip'].sal-animate,
body.sal-disabled [data-sal|='flip'] {
    transform: none;
}