/* Shared request state; component shapes, variants and tokens stay area-owned. */
.bt-submit-pending { display: inline-flex; align-items: center; justify-content: center; gap: .5rem; cursor: wait; }
.bt-submit-pending::after { display: none !important; }
.bt-submit-spinner { display: inline-block; flex: 0 0 14px; width: 14px; height: 14px; box-sizing: border-box; border: 2px solid currentColor; border-block-start-color: transparent; border-radius: 50%; animation: bt-submit-spin .7s linear infinite; }
[data-native-submit-scope] [aria-disabled="true"].bt-submit-pending { opacity: .75; }
.bt-submit-status:empty { display: none; }
/* Existing specialized controllers may use aria-busy without the shared helper. */
.ov-btn[aria-busy="true"]:not(.bt-submit-pending)::after,
[data-finance-v2] .btn[aria-busy="true"]:not(.bt-submit-pending)::after { content: ''; display: inline-block; width: 14px; height: 14px; margin-inline-start: .5rem; border: 2px solid currentColor; border-block-start-color: transparent; border-radius: 50%; animation: bt-submit-spin .7s linear infinite; }
@keyframes bt-submit-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
  .bt-submit-spinner, .button[aria-busy="true"]::after,
  .ov-btn[aria-busy="true"]::after, [data-finance-v2] .btn[aria-busy="true"]::after { animation: none !important; }
}
