.mv-action-busy { cursor:progress !important; position:relative; }
.mv-action-busy::after {
  content:''; display:inline-block; box-sizing:border-box; flex:0 0 14px;
  width:14px; height:14px; margin-inline-start:8px; vertical-align:-2px;
  border:2px solid currentColor; border-right-color:transparent; border-radius:50%;
  animation:mv-action-spin .7s linear infinite; pointer-events:none;
}
.mv-action-icon-busy > :is(i,svg,img), .mv-action-icon-busy::before { opacity:0; }
.mv-action-icon-busy::after {
  position:absolute; left:50%; top:50%; margin: -7px 0 0 -7px;
}
.mv-app-action.mv-action-busy { background:rgba(255,255,255,.24); }
.mv-app-action.mv-action-busy::after { margin-inline-start:auto; }
.mv-action-progress {
  position:fixed; inset:0 0 auto; height:3px; z-index:2147483640;
  opacity:0; pointer-events:none; overflow:hidden; background:rgba(148,163,184,.2);
}
.mv-action-progress::before {
  content:''; display:block; width:35%; height:100%; background:var(--mv-primary,#04b84a);
  transform:translateX(-110%);
}
.mv-action-progress.is-active { opacity:1; }
.mv-action-progress.is-active::before { animation:mv-action-travel 1s ease-in-out infinite; }
.mv-action-progress-label { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }
@keyframes mv-action-spin { to { transform:rotate(360deg); } }
@keyframes mv-action-travel { to { transform:translateX(390%); } }
@media(prefers-reduced-motion:reduce) {
  .mv-action-busy::after { animation:none; border-style:dotted; }
  .mv-action-progress.is-active::before { animation:none; transform:none; width:100%; }
}
