@keyframes status-pulsate-main {
  40% {
    transform: scale(1.25, 1.25);
  }
  60% {
    transform: scale(1.25, 1.25);
  }
}

@keyframes status-pulsate-secondary {
  10% {
    transform: scale(1, 1)
  }
  30% {
    transform: scale(3, 3)
  }
  80% {
    transform: scale(3, 3)
  }
  100% {
    transform: scale(1, 1)
  }
}

@keyframes status-pulsate-tertiary {
  25% {
    transform: scale(1, 1);
  }
  80% {
    transform: scale(3, 3);
    opacity: 0;
  }
  100% {
    transform: scale(3, 3);
    opacity: 0;
  }
}

//
// Status
//
.status {
  --#{$prefix}status-height: #{$status-height};
  --#{$prefix}status-color: #{$text-muted};
  --#{$prefix}status-color-rgb: #{to-rgb($text-muted)};

  display: inline-flex;
  align-items: center;
  height: var(--#{$prefix}status-height);
  padding: .25rem .75rem;
  gap: .5rem;
  color: var(--#{$prefix}status-color);
  background: rgba(var(--#{$prefix}status-color-rgb), .1);
  font-size: $font-size-base;
  text-transform: none;
  letter-spacing: normal;
  border-radius: $border-radius-pill;
  font-weight: var(--#{$prefix}font-weight-medium);
  line-height: 1;
  margin: 0;

  .status-dot {
    background: var(--#{$prefix}status-color);
  }

  .icon {
    font-size: 1.25rem;
  }
}

.status-lite {
  border: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color) !important;
  background: transparent !important;
  color: var(--#{$prefix}body-color) !important;
}

@each $name, $color in $theme-colors {
  .status-#{$name} {
    --#{$prefix}status-color: #{$color};
    --#{$prefix}status-color-rgb: #{to-rgb($color)};
  }
}

//
// Status dot
//
.status-dot {
  --#{$prefix}status-dot-color: var(--#{$prefix}status-color, #{$text-muted});
  --#{$prefix}status-size: #{$status-dot-size};
  position: relative;
  display: inline-block;
  width: var(--#{$prefix}status-size);
  height: var(--#{$prefix}status-size);
  background: var(--#{$prefix}status-dot-color);
  border-radius: $border-radius-pill;
}

.status-dot-animated {
  &:before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 0;
    background: inherit;
    border-radius: inherit;
    opacity: .6;
    animation: 1s linear 2s backwards infinite status-pulsate-tertiary;
  }
}

//
// Status indicator
//
.status-indicator {
  --#{$prefix}status-indicator-size: 2.5rem;
  --#{$prefix}status-indicator-color: var(--#{$prefix}status-color, #{$text-muted});
  display: block;
  position: relative;
  width: var(--#{$prefix}status-indicator-size);
  height: var(--#{$prefix}status-indicator-size);
}

.status-indicator-circle {
  --#{$prefix}status-circle-size: .75rem;
  position: absolute;
  left: 50%;
  top: 50%;
  margin: calc(var(--#{$prefix}status-circle-size) / -2) 0 0 calc(var(--#{$prefix}status-circle-size) / -2);
  width: var(--#{$prefix}status-circle-size);
  height: var(--#{$prefix}status-circle-size);
  border-radius: $border-radius-pill;
  background: var(--#{$prefix}status-color);

  &:nth-child(1) {
    z-index: 3;
  }

  &:nth-child(2) {
    z-index: 2;
    opacity: .1;
  }

  &:nth-child(3) {
    z-index: 1;
    opacity: .3;
  }
}

.status-indicator-animated {
  .status-indicator-circle {
    &:nth-child(1) {
      animation: 2s linear 1s infinite backwards status-pulsate-main;
    }

    &:nth-child(2) {
      animation: 2s linear 1s infinite backwards status-pulsate-secondary;
    }

    &:nth-child(3) {
      animation: 2s linear 1s infinite backwards status-pulsate-tertiary;
    }
  }
}