/* =================================================================
   UX POLISH
   - Loading spinner on async action buttons
   Scoped, additive, prefers-reduced-motion aware.
   ================================================================= */

/* ---- Loading state on async buttons ---- */
.hvb-btn-loading {
    position: relative !important;
    pointer-events: none;
    opacity: 0.72;
}
.hvb-btn-loading::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 15px;
    height: 15px;
    margin: -8px 0 0 -8px;
    border: 2px solid currentColor; /* uses the button's text colour, visible on any button */
    border-top-color: transparent;
    border-radius: 50%;
    opacity: 0.85;
    animation: hvb-uxspin 0.6s linear infinite;
}
@keyframes hvb-uxspin { to { transform: rotate(360deg); } }

@media (prefers-reduced-motion: reduce) {
    .hvb-btn-loading::after { display: none; }
}
