/* Shared loading feedback for forms, navigation actions, and opt-in async work. */
.is-loading {
    cursor: wait !important;
    pointer-events: none;
}

button.is-loading:not(.ui-button)::before,
a.is-loading:not(.ui-button)::before,
summary.is-loading:not(.ui-button)::before {
    content: "";
    display: inline-block;
    width: 0.95em;
    height: 0.95em;
    margin-inline-end: 0.5em;
    border: 2px solid currentColor;
    border-right-color: transparent;
    border-radius: 50%;
    vertical-align: -0.12em;
    animation: ui-loading-spin 0.8s linear infinite;
}

input[type="submit"].is-loading,
input[type="button"].is-loading {
    opacity: 0.72;
}

form[data-is-submitting] button[type="submit"],
form[data-is-submitting] input[type="submit"] {
    cursor: wait;
}

@keyframes ui-loading-spin {
    to {
        transform: rotate(360deg);
    }
}

@media (prefers-reduced-motion: reduce) {
    button.is-loading:not(.ui-button)::before,
    a.is-loading:not(.ui-button)::before,
    summary.is-loading:not(.ui-button)::before {
        animation: none;
        border-style: dotted;
    }
}
