@keyframes half-circle-move {
  0% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(calc(-1 * (var(--circle-diameter) - 4px)));
  }
}

@keyframes logo-hop {
  0% {
    transform: translateY(0px) scale(1.4);
    animation-timing-function: cubic-bezier(0.5, 0, 1, 0.5);
  }
  50% {
    transform: translateY(25px) scale(1.2, 0.9);
    animation-timing-function: cubic-bezier(0, 0.5, 0.5, 1);
  }
  100% {
    transform: translateY(0px) scale(1.4);
  }
}

.loading-spinner {
  --animation-time: 0.65s;
  --speedlo-color: #e86a57;

  --logo-dimensions: 30px;
  --circle-diameter: 60px;
  --circle-weight: 2px;

  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;

  display: grid;
  justify-content: center;
  align-content: center;
  box-sizing: content-box;
}

.loading-spinner .loading-container {
  position: relative;
  transform: translateX(-50%);
}

.loading-spinner .circles-container {
  width: 285px;
  margin: 0 auto;

  overflow: hidden;

  transform-origin: right;
  transform: perspective(40px) translateX(-30px) rotateY(-13deg);
}

.loading-spinner .circles {
  width: 100%;
  height: calc(var(--circle-diameter) / 2);

  margin-left: calc(-1 * var(--circle-diameter) / 2);

  display: grid;
  grid-auto-flow: column;

  animation: half-circle-move var(--animation-time) linear infinite;
}

.loading-spinner .circle-top {
  box-sizing: border-box;
  width: var(--circle-diameter);
  height: var(--circle-diameter);

  border: var(--circle-weight) solid var(--speedlo-color);
  border-radius: 50%;

  margin-left: calc(-1 * var(--circle-weight));
}

.loading-spinner .fade {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}

.loading-spinner .bouncy-logo {
  position: absolute;
  right: -10px;
  bottom: 12px;
  z-index: 2;

  display: grid;
  justify-content: center;
  align-items: center;

  width: var(--logo-dimensions);
  height: var(--logo-dimensions);
  padding: 4px;

  background: #fff;
  border-radius: 50%;

  animation: logo-hop var(--animation-time) linear infinite;
}

.loading-spinner .logo {
  max-width: 100%;
}
