.raif-loader {
  transform: rotateZ(45deg);
  perspective: 1000px;
  border-radius: 50%;
  width: 25px;
  height: 25px;
  color: #3874ff;
  display: inline-block;
}

.raif-loader:before,
.raif-loader:after {
  content: '';
  display: block;
  position: absolute;
  top: 0;
  left: 0;
  width: inherit;
  height: inherit;
  border-radius: 50%;
  transform: rotateX(70deg);
  animation: 1s spin linear infinite;
}

.raif-loader:after {
  color: #25b003;
  transform: rotateY(70deg);
  animation-delay: .4s;
}

// Streaming cursor - a simple blinking cursor
.raif-streaming-cursor {
  display: inline-block;
  width: 2px;
  height: 1.1em;
  margin-bottom: -2px;
  background-color: currentColor;
  animation: blink 1s infinite;
  transform: none;
  border-radius: 0;
  position: relative;
}

.raif-streaming-cursor:before,
.raif-streaming-cursor:after {
  display: none;
}

@keyframes blink {
  0%, 50% {
    opacity: 1;
  }
  51%, 100% {
    opacity: 0;
  }
}

@keyframes rotate {
  0% {
    transform: translate(-50%, -50%) rotateZ(0deg);
  }

  100% {
    transform: translate(-50%, -50%) rotateZ(360deg);
  }
}

@keyframes rotateccw {
  0% {
    transform: translate(-50%, -50%) rotate(0deg);
  }

  100% {
    transform: translate(-50%, -50%) rotate(-360deg);
  }
}

@keyframes spin {
  0%,
  100% {
    box-shadow: .3em 0px 0 0px currentcolor;
  }

  12% {
    box-shadow: .3em .3em 0 0 currentcolor;
  }

  25% {
    box-shadow: 0 .3em 0 0px currentcolor;
  }

  37% {
    box-shadow: -.3em .3em 0 0 currentcolor;
  }

  50% {
    box-shadow: -.3em 0 0 0 currentcolor;
  }

  62% {
    box-shadow: -.3em -.3em 0 0 currentcolor;
  }

  75% {
    box-shadow: 0px -.3em 0 0 currentcolor;
  }

  87% {
    box-shadow: .3em -.3em 0 0 currentcolor;
  }
}