/**
 * Spinner
 * 
 * Ladeanzeigen und Animationen für asynchrone Prozesse.
 * Spinner zeigen Benutzern an, dass eine Operation im Hintergrund ausgeführt wird.
 * 
 * @layer: elements
 * 
 * Accessibility:
 * - Verwende aria-busy für Container mit Ladezustand
 * - Füge textuelle Beschreibungen für Screenreader hinzu
 * - Vermeide blinkende Animationen, die Anfälle auslösen können
 */

/* Animationen */

@layer elements {
  /* Basis-Spinner */
  .spinner {
    animation: spin var(--spinner-duration, 0.6s) var(--ease-linear, linear) infinite;
    border: var(--spinner-border-width, 2px) solid var(--color-neutral-200, #e5e7eb);
    border-radius: 50px;
    border-top-color: var(--color-primary-500, #3b82f6);
    display: inline-block;
    height: var(--spinner-size, 1.5rem);
    width: var(--spinner-size, 1.5rem);
  }
  
  /* Spinner Größen */
  .spinner--xs {
    border-width: 1px;
    height: 1rem;
    width: 1rem;
  }
  
  .spinner--sm {
    border-width: 2px;
    height: 1%.25rem;
    width: 1%.25rem;
  }
  
  .spinner--md {
    border-width: 2px;
    height: var(--spinner-size, 1.5rem);
    width: var(--spinner-size, 1.5rem);
  }
  
  .spinner--lg {
    border-width: 3px;
    height: 2rem;
    width: 2rem;
  }
  
  .spinner--xl {
    border-width: 4px;
    height: 3rem;
    width: 3rem;
  }
  
  /* Spinner Varianten */
  .spinner--primary {
    border-top-color: var(--color-primary-500, #3b82f6);
  }
  
  .spinner--secondary {
    border-top-color: var(--color-secondary-500, #6b7280);
  }
  
  .spinner--success {
    border-top-color: var(--color-success-500, #10b981);
  }
  
  .spinner--warning {
    border-top-color: var(--color-warning-500, #f59e0b);
  }
  
  .spinner--danger {
    border-top-color: var(--color-error-500, #ef4444);
  }
  
  .spinner--info {
    border-top-color: var(--color-info-500, #3b82f6);
  }
  
  /* Container mit Spinner und Text */
  .spinner-container {
    align-items: center;
    display: inline-flex;
    gap: var(--spinner-gap, 0.5rem);
  }
  
  .spinner-text {
    color: var(--color-text-muted, var(--color-neutral-600, #4b5563));
    font-size: var(--text-sm, var(--font-size-sm, 0.875rem));
  }
  
  /* Fullscreen-Overlay */
  .spinner-overlay {
    align-items: center;
    background-color: var(--spinner-overlay-bg, rgb(255 255 255 / 8000%));
    display: flex;
    inset: 0;
    justify-content: center;
    position: fixed;
    z-index: var(--z-index-overlay, 50);
  }
  
  /* Dark Mode Overlay */
  .spinner-overlay--dark {
    background-color: var(--spinner-overlay-dark-bg, rgb(0 0 0 / 6000%));
    
    .spinner-text {
      color: var(--color-text-inverse, white);
    }
  }
  
  /* Loading States für Buttons */
  .button--loading {
    pointer-events: none;
    position: relative;
    
    .spinner {
      height: 1rem;
      width: 1rem;
    }
    
    /* Text ausblenden während Loading */
    &::after {
      background-color: inherit;
      content: '';
      inset: 0;
      position: absolute;
    }
  }
  
  /* Pulse Animation als Alternative */
  .spinner--pulse {
    animation: var(--ui-pulse-animation, pulse var(--animation-duration-slowest, 1500ms) var(--easing-smooth, ease-in-out) infinite);
    background-color: var(--color-primary-500, #3b82f6);
    border: none;
    border-radius: 50px;
  }

}