@use "./../variables" as *;

.loader {
  width: var(--spacer);
  height: var(--spacer);
  display: inline-block;
  position: relative;
  vertical-align: middle;

  &.loader--ring {
    & span {
      box-sizing: border-box;
      display: block;
      position: absolute;
      width: var(--spacer);
      height: var(--spacer);
      border: 2px solid var(--html-color);
      border-radius: var(--border-radius-round);
      animation: ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
      border-color: var(--html-color) transparent transparent transparent;

      &:nth-child(1) {
        animation-delay: -0.45s;
      }

      &:nth-child(2) {
        animation-delay: -0.3s;
      }

      &:nth-child(3) {
        animation-delay: -0.15s;
      }
    }
  }

  &.loader--ellipsis {
    width: calc(var(--spacer) * 2.5);
    height: var(--spacer);

    & span {
      position: absolute;
      top: calc(var(--spacer) * 0.25);
      width: calc(var(--spacer) * 0.5);
      height: calc(var(--spacer) * 0.5);
      border-radius: var(--border-radius-round);
      background: var(--html-color);
      animation-timing-function: cubic-bezier(0, 1, 1, 0);

      &:nth-child(1) {
        left: calc(var(--spacer) * 0.25);
        animation: ellipsis1 0.6s infinite;
      }

      &:nth-child(2) {
        left: calc(var(--spacer) * 0.25);
        animation: ellipsis2 0.6s infinite;
      }

      &:nth-child(3) {
        left: var(--spacer);
        animation: ellipsis2 0.6s infinite;
      }

      &:nth-child(4) {
        left: calc(var(--spacer) * 1.75);
        animation: ellipsis3 0.6s infinite;
      }
    }
  }

  &.loader--large {
    width: calc(var(--spacer) * 2);
    height: calc(var(--spacer) * 2);

    &.loader--ring {
      & span {
        width: calc(var(--spacer) * 2);
        height: calc(var(--spacer) * 2);
        border-width: 4px;
      }
    }

    &.loader--ellipsis {
      width: calc(var(--spacer) * 2.5);
      height: var(--spacer);

      & span {
        &:nth-child(1) {
          left: calc(var(--spacer) * 0.25);
        }

        &:nth-child(2) {
          left: calc(var(--spacer) * 0.25);
        }

        &:nth-child(3) {
          left: var(--spacer);
        }

        &:nth-child(4) {
          left: calc(var(--spacer) * 1.75);
        }
      }
    }
  }

  &.loader--small {
    &.loader--ellipsis {
      & span {
        width: calc(var(--spacer) * 0.25);
        height: calc(var(--spacer) * 0.25);

        &:nth-child(1) {
          left: calc(var(--spacer) * 0.125);
        }

        &:nth-child(2) {
          left: calc(var(--spacer) * 0.125);
          animation: ellipsis2-small 0.6s infinite;
        }

        &:nth-child(3) {
          left: calc(var(--spacer) * 0.5);
          animation: ellipsis2-small 0.6s infinite;
        }

        &:nth-child(4) {
          left: calc(var(--spacer) * 0.875);
        }
      }
    }
  }
}

@keyframes ring {
  0% {
    transform: rotate(0deg);
  }

  100% {
    transform: rotate(360deg);
  }
}

@keyframes ellipsis1 {
  0% {
    transform: scale(0);
  }

  100% {
    transform: scale(1);
  }
}

@keyframes ellipsis2 {
  0% {
    transform: translate(0, 0);
  }

  100% {
    transform: translate(calc(var(--spacer) * 0.75), 0);
  }
}

@keyframes ellipsis3 {
  0% {
    transform: scale(1);
  }

  100% {
    transform: scale(0);
  }
}

@keyframes ellipsis2-small {
  0% {
    transform: translate(0, 0);
  }

  100% {
    transform: translate(calc(var(--spacer) * 0.375), 0);
  }
}
