/* Loading states and animations */
.loading-overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  z-index: 9999;
  display: flex;
  justify-content: center;
  align-items: center;
  backdrop-filter: blur(2px);
}

.loading-card {
  animation: fadeInUp 0.3s ease-out;
}

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

/* Button loading states */
.btn.loading {
  pointer-events: none;
  opacity: 0.8;
}

.btn.loading .spinner-border-sm {
  width: 0.8rem;
  height: 0.8rem;
  border-width: 0.1em;
}

/* Pulse animation for loading buttons */
.btn.loading {
  animation: pulse 1.5s infinite;
}

@keyframes pulse {
  0% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.02);
  }
  100% {
    transform: scale(1);
  }
}

/* Custom loading spinner colors */
.spinner-border-primary {
  border-color: #0d6efd;
  border-right-color: transparent;
}

/* Loading text animation */
.loading-text {
  animation: loadingDots 1.5s infinite;
}

@keyframes loadingDots {
  0% { content: ''; }
  25% { content: '.'; }
  50% { content: '..'; }
  75% { content: '...'; }
  100% { content: ''; }
}
