/* Button Loading States */
button.loading,
.btn.loading,
input[type="submit"].loading {
    position: relative;
    pointer-events: none;
    opacity: 0.7;
    cursor: not-allowed !important;
}

button.loading *,
.btn.loading * {
    pointer-events: none;
}

/* Spinner animation */
.spinner-border-sm {
    width: 1rem;
    height: 1rem;
    border-width: 0.15em;
    animation: spinner-border 0.75s linear infinite;
}

.spinner-border {
    display: inline-block;
    width: 2rem;
    height: 2rem;
    vertical-align: text-bottom;
    border: 0.25em solid currentColor;
    border-right-color: transparent;
    border-radius: 50%;
    animation: spinner-border 0.75s linear infinite;
}

@keyframes spinner-border {
    to {
        transform: rotate(360deg);
    }
}

/* Prevent double-click on all buttons */
button:disabled,
.btn:disabled,
input[type="submit"]:disabled,
input[type="button"]:disabled {
    cursor: not-allowed !important;
    opacity: 0.6;
}

/* Loading state for form buttons */
form:has(button.loading) {
    pointer-events: none;
}

form:has(button.loading) * {
    pointer-events: none;
}
