.pulse-bg {
  animation: pulse-bg 3s infinite;
  color: #0000;
}

@keyframes pulse-bg {
  50% {
    background: var(--primary-color-active);
    opacity: .5;
  }
}

.spin {
  color: #0000;
  position: relative;

  &:after {
    content: '';
    border: 2px solid var(--color-button-text);
    border-top-color: #0000;
    border-bottom-color: #0000;
    border-radius: 100%;
    display: inline-block;
    width: .75em;
    height: .75em;
    animation: spin 2s infinite linear;
    position: absolute;
    left: calc(50% - .5em);
    top: calc(50% - .5em);
  }
}

@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

.ripple {
  overflow: hidden;
  position: relative;

  &:before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: var(--color-bg);
  }

  &:after {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    background: radial-gradient(circle at 50%, #0000 30%, var(--primary-color) 50%, #0000 70%);
    transform: translate(-50%, -50%);
    animation: ripple 2s infinite cubic-bezier(1, 0, .5, 0);
  }
}

@keyframes ripple {
  0% {
    width: 0;
    height: 0;
  }
  100% {
    width: 200vw;
    height: 200vw;
  }
}
 