#spinLoader {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(255, 255, 255, 0.8);
  z-index: 999999 !important;
  /* Use opacity instead of display for Safari paint reliability */
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  -webkit-transform: translateZ(0);
  transform: translateZ(0);
}

#spinLoader.active {
  display: block !important;
  opacity: 1 !important;
  visibility: visible !important;
  pointer-events: auto;
}

#spinLoader::after {
  content: "";
  display: block;
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: #f00;
  -webkit-animation: spinLoaderSpin 1s linear infinite, spinLoaderColor 4s linear infinite;
  animation: spinLoaderSpin 1s linear infinite, spinLoaderColor 4s linear infinite;
}

@-webkit-keyframes spinLoaderSpin {
  0% {
    -webkit-transform: translate(-50%, -50%) rotate(0deg);
    transform: translate(-50%, -50%) rotate(0deg);
  }
  100% {
    -webkit-transform: translate(-50%, -50%) rotate(360deg);
    transform: translate(-50%, -50%) rotate(360deg);
  }
}

@keyframes spinLoaderSpin {
  0% {
    -webkit-transform: translate(-50%, -50%) rotate(0deg);
    transform: translate(-50%, -50%) rotate(0deg);
  }
  100% {
    -webkit-transform: translate(-50%, -50%) rotate(360deg);
    transform: translate(-50%, -50%) rotate(360deg);
  }
}

@-webkit-keyframes spinLoaderColor {
  0%, 100% {
    border-top-color: #f00;
  }
  20% {
    border-top-color: #fa0;
  }
  40% {
    border-top-color: #ff0;
  }
  60% {
    border-top-color: #080;
  }
  80% {
    border-top-color: #00f;
  }
}

@keyframes spinLoaderColor {
  0%, 100% {
    border-top-color: #f00;
  }
  20% {
    border-top-color: #fa0;
  }
  40% {
    border-top-color: #ff0;
  }
  60% {
    border-top-color: #080;
  }
  80% {
    border-top-color: #00f;
  }
}
