/* Form Loading States CSS */

/* Button loading state */
.btn-loading {
    position: relative;
    pointer-events: none;
    opacity: 0.7;
}

.btn-loading .btn-text {
    opacity: 0;
}

.btn-loading::after {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    width: 16px;
    height: 16px;
    margin: -8px 0 0 -8px;
    border: 2px solid transparent;
    border-top: 2px solid currentColor;
    border-radius: 50%;
    animation: btn-loading-spin 1s linear infinite;
}

@keyframes btn-loading-spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

/* Form loading overlay */
.form-loading {
    position: relative;
    pointer-events: none;
}

.form-loading::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(255, 255, 255, 0.8);
    z-index: 10;
    border-radius: 4px;
}

.form-loading::after {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    width: 20px;
    height: 20px;
    margin: -10px 0 0 -10px;
    border: 2px solid #ccc;
    border-top: 2px solid #007bff;
    border-radius: 50%;
    animation: form-loading-spin 1s linear infinite;
    z-index: 11;
}

@keyframes form-loading-spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

/* Disabled state for forms */
.form-disabled {
    pointer-events: none;
    opacity: 0.6;
}

/* Loading text animation */
.loading-text::after {
    content: '';
    animation: loading-dots 1.5s infinite;
}

@keyframes loading-dots {
    0%, 20% { content: ''; }
    40% { content: '.'; }
    60% { content: '..'; }
    80%, 100% { content: '...'; }
}

/* Spinner variations */
.spinner-border-sm {
    width: 1rem;
    height: 1rem;
    border-width: 0.125em;
}

.spinner-grow-sm {
    width: 1rem;
    height: 1rem;
}

/* Button with spinner */
.btn-with-spinner {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}

.btn-with-spinner .spinner {
    display: none;
}

.btn-with-spinner.loading .spinner {
    display: inline-block;
}

.btn-with-spinner.loading .btn-text {
    display: none;
}

/* Rate limit warning */
.rate-limit-warning {
    background: #fff3cd;
    border: 1px solid #ffeaa7;
    color: #856404;
    padding: 12px;
    border-radius: 4px;
    margin-bottom: 15px;
    display: none;
}

.rate-limit-warning.show {
    display: block;
}

/* Cooldown timer */
.cooldown-timer {
    font-weight: bold;
    color: #dc3545;
}

/* Form validation states during loading */
.form-loading .form-control:focus {
    box-shadow: none;
    border-color: #ced4da;
}

.form-loading .is-invalid {
    border-color: #ced4da;
}

.form-loading .is-valid {
    border-color: #ced4da;
}