@-webkit-keyframes v-rotate-360 {
   to {-webkit-transform: rotate(360deg);}
}
@-moz-keyframes v-rotate-360 {
   to {-moz-transform: rotate(360deg);}
}
@-o-keyframes v-rotate-360 {
   to {-o-transform: rotate(360deg);}
}
@keyframes v-rotate-360 {
   to {transform: rotate(360deg);}
}

/**
 * Creates a spinner to be used as a loading indicator. On browsers which do not
 * support CSS animations, an animated GIF image is used as a fallback.
 *
 * @param {size} $size (24px) - the diameter of the spinner, in pixels. Should be divisible by 2, increased by 1px if not
 * @param {size} $thickness (2px) - the thickness or width of the border of the spinner
 * @param {color} $color ($v-focus-color) - the color of the border of the spinner
 * @param {time} $speed (500ms) - the speed of the spinning animation
 */
@mixin valo-spinner ($size: 24px, $thickness: 2px, $color: $v-focus-color, $speed: 500ms) {
  // Make size divisible by 2, so that the rotation won't jiggle
  $size: round($size) + round($size) % 2;
  height: $size !important;
  width: $size !important;
  box-sizing: border-box;
  border: $thickness solid transparentize($color, .8);
  border-top-color: $color;
  border-right-color: $color;
  border-radius: 100%;
  @include animation(v-rotate-360 $speed infinite linear);
  pointer-events: none;
}
















/**
 * The color of the main loading indicator bar.
 * @type color
 */
$v-loading-indicator-color: $v-focus-color !default;

/**
 * The height of the main loading indicator bar.
 *
 * @type size
 */
$v-loading-indicator-bar-height: ceil($v-unit-size/10) !default;

/**
 * The height of the main loading indicator bar when the request to the server
 * is taking longer than usual and the user is notified that they should wait.
 *
 * @type size
 */
$v-loading-indicator-bar-height--wait: ceil($v-unit-size/6) !default;



@include keyframes(v-progress-start) {
  0% { width: 0%; }
  100% { width: 50%; }
}

@include keyframes(v-progress-delay) {
  0% { width: 50%; }
  100% { width: 90%; }
}

@include keyframes(v-progress-wait) {
  0% { width: 90%; height: $v-loading-indicator-bar-height; }
  3% { width: 91%; height: $v-loading-indicator-bar-height--wait; }
  100% { width: 96%; height: $v-loading-indicator-bar-height--wait; }
}

@include keyframes(v-progress-wait-pulse) {
  0% { opacity: 1; }
  50% { opacity: .1; }
  100% { opacity: 1; }
}


/*
 * Outputs the necessary styles to create the main loading indicator bar.
 *
 * @access private
 */
@mixin valo-loading-bar {

  .v-loading-indicator {
    position: fixed !important;
    z-index: 99999;
    left: 0;
    right: auto;
    top: 0;
    width: 50%;
    opacity: 1;
    height: $v-loading-indicator-bar-height;
    background-color: $v-loading-indicator-color;
    //@include linear-gradient(to right, rgba($v-loading-indicator-color,0) 0%, $v-loading-indicator-color 100%);
    pointer-events: none;

    @include transition(none);
    @include animation(v-progress-start 1000ms 200ms both);
    //@include animation-fill-mode(forwards);

    &[style*="none"] {
      // Chrome skips the transitions because it thinks the element is display: none;
      display: block !important;
      width: 100% !important;
      opacity: 0;
      @include animation(none);
      @include transition(opacity 500ms 300ms, width 300ms);
    }
  }

  .v-loading-indicator-delay {
    width: 90%;
    .v-ff & {
      width: 50%;
    }
    @include animation(v-progress-delay 3.8s forwards);
  }

  .v-loading-indicator-wait {
    width: 96%;
    .v-ff & {
      width: 90%;
    }
    @include animation(v-progress-wait 5s forwards, v-progress-wait-pulse 1s 4s infinite backwards);
  }

}
