/* HTMX loading indicators */
.htmx-indicator {
  opacity: 0;
  transition: opacity 200ms ease-in;
}
.htmx-request .htmx-indicator,
.htmx-request.htmx-indicator {
  opacity: 1;
}

/* Suppress flash during swap */
.htmx-swapping {
  opacity: 0;
  transition: opacity 100ms ease-out;
}

/* Fade in after settle */
.htmx-settling {
  opacity: 0;
  transition: opacity 100ms ease-in;
}

/* Expiring soon pulse animation */
@keyframes expiry-pulse {
  0%, 100% { opacity: 1; }
  50%       { opacity: 0.6; }
}
.status-expiring-soon {
  animation: expiry-pulse 2s ease-in-out infinite;
}
