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

@keyframes cortex-progress {
  from { transform: translateX(-100%); }
  to { transform: translateX(300%); }
}

@keyframes cortex-pulse {
  0%, 100% { opacity: 0.5; }
  50% { opacity: 1; }
}

.loading-showcase {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-5);
}

.spinner {
  display: inline-grid;
  width: 28px;
  height: 28px;
  place-items: center;
}

.spinner__mark {
  width: 20px;
  height: 20px;
  border: 2px solid var(--color-grid);
  border-top-color: var(--color-match);
  border-radius: 50%;
  animation: cortex-spin 800ms linear infinite;
}

.progress-line {
  display: block;
  width: min(100%, 260px);
  height: 4px;
  overflow: hidden;
  border-radius: var(--radius-pill);
  background: var(--color-grid);
}

.progress-line span {
  display: block;
  width: 34%;
  height: 100%;
  border-radius: inherit;
  background: var(--color-match);
  animation: cortex-progress 1.4s ease-in-out infinite;
}

.running-indicator {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  color: var(--color-pending);
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: 700;
}

.running-indicator > span {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: currentcolor;
  animation: cortex-pulse 1.2s ease-in-out infinite;
}

.skeleton-stack {
  display: grid;
  width: 100%;
  gap: var(--space-2);
}

.skeleton-line {
  display: block;
  width: 100%;
  height: 12px;
  border-radius: var(--radius-1);
  background: linear-gradient(90deg, var(--color-grid), var(--color-bench), var(--color-grid));
  background-size: 200% 100%;
  animation: cortex-pulse 1.4s ease-in-out infinite;
}

.skeleton-line--short {
  width: 62%;
}

@media (prefers-reduced-motion: reduce) {
  .spinner__mark,
  .progress-line span,
  .running-indicator > span,
  .skeleton-line {
    animation: none;
  }
}
