@mixin keyframes($name) {
  @-webkit-keyframes #{$name} {
    @content;
  }
  @-moz-keyframes #{$name} {
    @content;
  }
  @keyframes #{$name} {
    @content;
  }
}

// *******************************************************************************
// * Loader

.la-ball-fall,
.la-ball-fall > div {
  position: relative;
  box-sizing: border-box;
}

.la-ball-fall {
  display: block;
  color: #fff;
  font-size: 0;
}

.la-ball-fall.la-dark {
  color: #333;
}

.la-ball-fall > div {
  display: inline-block;
  float: none;
  border: 0 solid currentColor;
  background-color: currentColor;
}

.la-ball-fall {
  width: 3.375rem;
  height: 1.125rem;
}

.la-ball-fall > div {
  margin: .25rem;
  width: .625rem;
  height: .625rem;
  border-radius: 100%;
  opacity: 0;
  animation: ball-fall 1s ease-in-out infinite;
}

.la-ball-fall > div:nth-child(1) {
  animation-delay: -200ms;
}

.la-ball-fall > div:nth-child(2) {
  animation-delay: -100ms;
}

.la-ball-fall > div:nth-child(3) {
  animation-delay: 0ms;
}

.la-ball-fall.la-sm {
  width: 1.625rem;
  height: .5rem;
}

.la-ball-fall.la-sm > div {
  margin: .125rem;
  width: .25rem;
  height: .25rem;
}

.la-ball-fall.la-2x {
  width: 6.75rem;
  height: 2.25rem;
}

.la-ball-fall.la-2x > div {
  margin: .5rem;
  width: 1.25rem;
  height: 1.25rem;
}

.la-ball-fall.la-3x {
  width: 10.125rem;
  height: 3.375rem;
}

.la-ball-fall.la-3x > div {
  margin: .75rem;
  width: 1.875rem;
  height: 1.875rem;
}

// *******************************************************************************
// * Keyframes

@include keyframes(ball-fall) {
  0% {
    opacity: 0;
    transform: translateY(-145%);
  }
  10% {
    opacity: .5;
  }
  20% {
    opacity: 1;
    transform: translateY(0);
  }
  80% {
    opacity: 1;
    transform: translateY(0);
  }
  90% {
    opacity: .5;
  }
  100% {
    opacity: 0;
    transform: translateY(145%);
  }
}

@include keyframes(showSweetAlert) {
  0% {
    transform: scale(.7);
  }
  45% {
    transform: scale(1.05);
  }
  80% {
    transform: scale(.95);
  }
  100% {
    transform: scale(1);
  }
}

@include keyframes(hideSweetAlert) {
  0% {
    transform: scale(1);
  }
  100% {
    transform: scale(.5);
  }
};

@include keyframes(slideFromTop) {
  0% {
    top: 0;
  }
  100% {
    top: 50%;
  }
};

@include keyframes(slideToTop) {
  0% {
    top: 50%;
  }
  100% {
    top: 0;
  }
};

@include keyframes(slideFromBottom) {
  0% {
    top: 70%;
  }
  100% {
    top: 50%;
  }
}

@include keyframes(slideToBottom) {
  0% {
    top: 50%;
  }
  100% {
    top: 70%;
  }
}

@include keyframes(animateSuccessTip) {
  0% {
    top: 1.1875rem;
    left: .0625rem;
    width: 0;
  }
  54% {
    top: 1.1875rem;
    left: .0625rem;
    width: 0;
  }
  70% {
    top: 2.3125rem;
    left: -.5rem;
    width: 3.125rem;
  }
  84% {
    top: 3rem;
    left: 1.3125rem;
    width: 1.0625rem;
  }
  100% {
    top: 2.8125rem;
    left: .875rem;
    width: 1.5625rem;
  }
}

@include keyframes(animateSuccessLong) {
  0% {
    top: 3.375rem;
    right: 2.875rem;
    width: 0;
  }
  65% {
    top: 3.375rem;
    right: 2.875rem;
    width: 0;
  }
  84% {
    top: 2.1875rem;
    right: 0;
    width: 3.4375rem;
  }
  100% {
    top: 2.375rem;
    right: .5rem;
    width: 2.9375rem;
  }
}

@include keyframes(rotatePlaceholder) {
  0% {
    transform: rotate(-45deg);
  }
  5% {
    transform: rotate(-45deg);
  }
  12% {
    transform: rotate(-405deg);
  }
  100% {
    transform: rotate(-405deg);
  }
}

@include keyframes(animateErrorIcon) {
  0% {
    opacity: 0;
    transform: rotateX(100deg);
  }
  100% {
    opacity: 1;
    transform: rotateX(0deg);
  }
}

@include keyframes(animateXMark) {
  0% {
    margin-top: 1.625rem;
    opacity: 0;
    transform: scale(.4);
  }
  50% {
    margin-top: 1.625rem;
    opacity: 0;
    transform: scale(.4);
  }
  80% {
    margin-top: -.375rem;
    transform: scale(1.15);
  }
  100% {
    margin-top: 0;
    opacity: 1;
    transform: scale(1);
  }
}

@include keyframes(pulseWarning) {
  0% {
    border-color: #f8d486;
  }
  100% {
    border-color: #f8bb86;
  }
}

@include keyframes(pulseWarningIns) {
  0% {
    background-color: #f8d486;
  }
  100% {
    background-color: #f8bb86;
  }
}

@include keyframes(rotate-loading) {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

// *******************************************************************************
// * Animations

.showSweetAlert {
  animation: showSweetAlert .3s;

  &[data-animation=none] {
    animation: none;
  }

  &[data-animation=slide-from-top] {
    animation: slideFromTop .3s;
  }

  &[data-animation=slide-from-bottom] {
    animation: slideFromBottom .3s;
  }
}

.hideSweetAlert {
  animation: hideSweetAlert .3s;

  &[data-animation=none] {
    animation: none;
  }

  &[data-animation=slide-from-top] {
    animation: slideToTop .3s;
  }

  &[data-animation=slide-from-bottom] {
    animation: slideToBottom .3s;
  }
}

.animateSuccessTip {
  animation: animateSuccessTip .75s;
}

.animateSuccessLong {
  animation: animateSuccessLong .75s;
}

.sa-icon.sa-success.animate::after {
  animation: rotatePlaceholder 4.25s ease-in;
}

.animateErrorIcon {
  animation: animateErrorIcon .5s;
}

.animateXMark {
  animation: animateXMark .5s;
}

.pulseWarning {
  animation: pulseWarning .75s infinite alternate;
}

.pulseWarningIns {
  animation: pulseWarningIns .75s infinite alternate;
}

// *******************************************************************************
// * Styles

body.stop-scrolling {
  overflow: hidden;
  height: 100%;
}

.sweet-overlay {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  display: none;
}

.sweet-alert {
  $width: 29.875rem;
  $padding: 1.0625rem;

  background-color: #fff;
  width: $width;
  padding: $padding;
  text-align: center;
  margin-left: -$width / 2;
  position: fixed;
  left: 50%;
  top: 50%;
  margin-top: -12.5rem;
  overflow: hidden;
  display: none;
  outline: 0 !important;
}

.sweet-alert h2,
.sweet-alert .sa-button-container {
  margin-top: 1.875rem;
}

.sweet-alert .form-group {
  display: none;

  .sa-input-error {
    display: none;
  }
}

.sweet-alert.show-input .form-group {
  display: block;
}

.sweet-alert .sa-confirm-button-container {
  position: relative;
  display: inline-block;
}

.sweet-alert .la-ball-fall {
  position: absolute;
  top: 50%;
  left: 50%;
  visibility: hidden;
  margin-top: -.5625rem;
  margin-left: -1.6875rem;
  opacity: 0;
}

.sweet-alert button {
  &[disabled] {
    opacity: .6;
    cursor: default;
  }

  &.confirm[disabled] {
    color: transparent;
  }

  &.confirm[disabled] ~ .la-ball-fall {
    visibility: visible;
    opacity: 1;
    transition-delay: 0s;
  }
}

// *******************************************************************************
// * Icons

.sweet-alert .sa-icon {
  position: relative;
  box-sizing: content-box;
  margin: 1.25rem auto;
  width: 5rem;
  height: 5rem;
  border: 4px solid gray;
  border-radius: 50%;

  [dir=rtl] & {
    transform: scaleX(-1);
  }
}

// Error icon
.sweet-alert .sa-icon.sa-error {
  .sa-x-mark {
    position: relative;
    display: block;
  }

  .sa-line {
    position: absolute;
    top: 2.3125rem;
    display: block;
    width: 2.9375rem;
    height: .3125rem;
    border-radius: .125rem;

    &.sa-left {
      left: 1.0625rem;
      transform: rotate(45deg);
    }

    &.sa-right {
      right: 1rem;
      transform: rotate(-45deg);
    }
  }
}

// Warning icon
.sweet-alert .sa-icon.sa-warning {
  .sa-body {
    // Exclamation mark body
    position: absolute;
    top: .625rem;
    left: 50%;
    margin-left: -.125rem;
    width: .3125rem;
    height: 2.9375rem;
    border-radius: .125rem;
  }

  .sa-dot {
    // Exclamation mark dot
    position: absolute;
    bottom: .625rem;
    left: 50%;
    margin-left: -.1875rem;
    width: .4375rem;
    height: .4375rem;
    border-radius: 50%;
  }
}

// Info icon
.sweet-alert .sa-icon.sa-info {
  &::before {
    // i-letter body
    content: "";
    position: absolute;
    bottom: 1.0625rem;
    left: 50%;
    margin-left: -.125rem;
    width: .3125rem;
    height: 1.8125rem;
    border-radius: .125rem;
  }

  &::after {
    // i-letter dot
    content: "";
    position: absolute;
    top: 1.1875rem;
    left: 50%;
    margin-left: -.1875rem;
    width: .4375rem;
    height: .4375rem;
    border-radius: 50%;
  }
}

// Success icon
.sweet-alert .sa-icon.sa-success {
  &::before,
  &::after {
    // Emulate moving circular line
    content: '';
    position: absolute;
    width: 3.75rem;
    height: 7.5rem;
    border-radius: 50%;
    background: #fff;
    transform: rotate(45deg);
  }

  &::before {
    top: -.4375rem;
    left: -2.0625rem;
    border-radius: 7.5rem 0 0 7.5rem;
    transform: rotate(-45deg);
    transform-origin: 3.75rem 3.75rem;
  }

  &::after {
    top: -.6875rem;
    left: 1.875rem;
    border-radius: 0 7.5rem 7.5rem 0;
    transform: rotate(-45deg);
    transform-origin: 0 3.75rem;
  }

  .sa-placeholder {
    // Ring
    position: absolute;
    top: -.25rem;
    left: -.25rem;
    z-index: 2;
    box-sizing: content-box;
    width: 5rem;
    height: 5rem;
    border-radius: 50%;
  }

  .sa-fix {
    position: absolute;
    top: .5rem;
    left: 1.75rem;
    z-index: 1;
    width: .3125rem;
    height: 5.625rem;
    background-color: #fff;
    transform: rotate(-45deg);
  }

  .sa-line {
    position: absolute;
    z-index: 2;
    display: block;
    height: .3125rem;
    border-radius: .125rem;

    &.sa-tip {
      top: 2.875rem;
      left: .875rem;
      width: 1.5625rem;
      transform: rotate(45deg);
    }

    &.sa-long {
      top: 2.375rem;
      right: .5rem;
      width: 2.9375rem;
      transform: rotate(-45deg);
    }
  }
}

// Custom icon
.sweet-alert .sa-icon.sa-custom {
  border: none;
  border-radius: 0;
  background-position: center center;
  background-size: contain;
  background-repeat: no-repeat;
}

.default-style {
  @import "../../css/_appwork/include";

  .sweet-alert {
    z-index: $zindex-modal-top;
  }

  .sweet-alert .popover {
    z-index: $zindex-modal-top + 1;
  }

  .sweet-alert .tooltip {
    z-index: $zindex-modal-top + 2;
  }

  .sweet-overlay {
    z-index: $zindex-modal-top - 1;
    background-color: rgba($modal-backdrop-bg, $modal-backdrop-opacity);
  }

  .sweet-alert {
    border-radius: $border-radius;
    box-shadow: $modal-content-box-shadow-xs;

    @media all and (max-width: (map-get($grid-breakpoints, sm) - 1px)) {
      right: ($grid-gutter-width / 2);
      left: ($grid-gutter-width / 2);
      margin-right: 0;
      margin-left: 0;
      width: auto;
    }
  }

  .sweet-alert .sa-icon.sa-error {
    border-color: map-get($theme-colors, danger);

    .sa-line {
      background-color: map-get($theme-colors, danger);
    }
  }

  .sweet-alert .sa-icon.sa-warning {
    border-color: map-get($theme-colors, warning);

    .sa-body {
      // Exclamation mark body
      background-color: map-get($theme-colors, warning);
    }

    .sa-dot {
      // Exclamation mark dot
      background-color: map-get($theme-colors, warning);
    }
  }

  .sweet-alert .sa-icon.sa-info {
    border-color: map-get($theme-colors, info);

    &::before {
      // i-letter body
      background-color: map-get($theme-colors, info);
    }

    &::after {
      // i-letter dot
      background-color: map-get($theme-colors, info);
    }
  }

  .sweet-alert .sa-icon.sa-success {
    border-color: map-get($theme-colors, success);

    .sa-placeholder {
      // Ring
      border: 4px solid rgba(map-get($theme-colors, success), .2);
    }

    .sa-line {
      background-color: map-get($theme-colors, success);
    }
  }
}

.material-style {
  @import "../../css/_appwork/include-material";

  .sweet-alert {
    z-index: $zindex-modal-top;
  }

  .sweet-alert .popover {
    z-index: $zindex-modal-top + 1;
  }

  .sweet-alert .tooltip {
    z-index: $zindex-modal-top + 2;
  }

  .sweet-overlay {
    z-index: $zindex-modal-top - 1;
    background-color: rgba($modal-backdrop-bg, $modal-backdrop-opacity);
  }

  .sweet-alert {
    box-shadow: $modal-content-box-shadow-xs;

    @media all and (max-width: (map-get($grid-breakpoints, sm) - 1px)) {
      right: ($grid-gutter-width / 2);
      left: ($grid-gutter-width / 2);
      margin-right: 0;
      margin-left: 0;
      width: auto;
    }
  }

  .sweet-alert .sa-icon.sa-error {
    border-color: map-get($theme-colors, danger);

    .sa-line {
      background-color: map-get($theme-colors, danger);
    }
  }
  .sweet-alert .sa-icon.sa-warning {
    border-color: map-get($theme-colors, warning);

    .sa-body {
      // Exclamation mark body
      background-color: map-get($theme-colors, warning);
    }
    
    .sa-dot {
      // Exclamation mark dot
      background-color: map-get($theme-colors, warning);
    }
  }
  .sweet-alert .sa-icon.sa-info {
    border-color: map-get($theme-colors, info);

    &::before {
      // i-letter body
      background-color: map-get($theme-colors, info);
    }

    &::after {
      // i-letter dot
      background-color: map-get($theme-colors, info);
    }
  }
  .sweet-alert .sa-icon.sa-success {
    border-color: map-get($theme-colors, success);

    .sa-placeholder {
      // Ring
      border: 4px solid rgba(map-get($theme-colors, success), .2);
    }

    .sa-line {
      background-color: map-get($theme-colors, success);
    }
  }
}
