/* Overlay preserves the original label, icons, event handlers and feature-specific disabled state. */
button.save-feedback-busy {
  position: relative !important;
  color: transparent !important;
  cursor: progress !important;
  white-space: nowrap;
}
button.save-feedback-busy > * { visibility: hidden !important; }
button.save-feedback-busy::after {
  content: attr(data-save-label);
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding-left: 20px;
  color: var(--save-feedback-ink);
  font: inherit;
  white-space: nowrap;
  pointer-events: none;
}
button.save-feedback-busy::before {
  content: '';
  position: absolute;
  left: 12px;
  top: calc(50% - 7px);
  width: 14px;
  height: 14px;
  box-sizing: border-box;
  border: 2px solid var(--save-feedback-ink);
  border-right-color: transparent;
  border-radius: 50%;
  animation: save-feedback-spin .8s linear infinite;
  pointer-events: none;
}
@keyframes save-feedback-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
  button.save-feedback-busy::before { animation: none; }
}
