.reveal {
  animation: fadeUp 600ms var(--pgsx-easing-emphasised) both;
}

.reveal--d1 {
  animation-delay: 100ms;
}

.reveal--d2 {
  animation-delay: 200ms;
}

.reveal--d3 {
  animation-delay: 300ms;
}

.reveal--d4 {
  animation-delay: 400ms;
}

@keyframes fadeUp {
  from {
    opacity: 0;
    transform: translateY(6px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes pulse {
  0%,
  100% {
    opacity: 0.3;
    transform: scale(0.7);
  }
  50% {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes pulse-slow {
  0%,
  100% {
    opacity: 0.4;
  }
  50% {
    opacity: 1;
  }
}

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

/* Minimal native spinner — replaces PrimeNG <p-progressSpinner> on auth
   states. Inline-block so it can sit inline-with or above adjacent text. */
.spinner {
  display: inline-block;
  width: 32px;
  height: 32px;
  border: 3px solid color-mix(in srgb, var(--pgsx-accent) 25%, transparent);
  border-top-color: var(--pgsx-accent);
  border-radius: 50%;
  animation: pgsx-spin 800ms linear infinite;
}
