.spinner {
  @apply .h-4 .relative .bg-transparent;
  pointer-events: none;

  &.spinner-xl {
    @apply .h-16;
  }

  &:after {
    @apply .border-2 .border-neutral-400 .absolute .block .h-4 .w-4 .rounded-full;
    animation: spinners--spin 500ms infinite linear;
    border-top-color: transparent !important;
    border-right-color: transparent !important;
    content: '';
    left: calc(50% - (1em / 2));
  }

  &.spinner-relative:after {
    @apply .relative;
  }

  &.spinner-xl:after {
    @apply .h-16 .w-16;
    left: calc(50% - (4rem / 2));
  }

  /**
   * Speeds
   */
  &.spin-slow:after {
    animation: spinners--spin 1200ms infinite linear;
  }

  /**
   * Spinner Colors
   */
  &.blue:after, &.text-blue:after {
    @apply .border-primary-500;
  }

  &.white:after, &.text-white:after {
    @apply .border-white;
  }

  &.spinner-thick:after {
    @apply .border-4;
  }
}

@keyframes spinners--spin {
  from {
    transform: rotate(0deg);
  }

  to {
    transform: rotate(360deg);
  }
}

.spinner-circle {
  @apply .w-8 .h-8;
  border: 3px solid hsla(211, 12%, 43%, 0.2);
  border-top-color: hsl(211, 12%, 43%);
  border-radius: 50%;
  animation: spin 1s cubic-bezier(0.55, 0.25, 0.25, 0.70) infinite;

  &.spinner-sm {
    @apply .w-4 .h-4 .border-2;
  }

  &.spinner-lg {
    @apply .w-16 .h-16;
    border-width: 6px;
  }

  &.spinner-blue {
    border-style: solid;
    border-color: hsla(212, 92%, 43%, 0.2);
    border-top-color: hsl(212, 92%, 43%);
  }

  &.spinner-white {
    border-style: solid;
    border-color: rgba(255, 255, 255, 0.2);
    border-top-color: rgb(255, 255, 255);
  }
}

@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
