/* Indicateurs d'attente (A-246) */
.busy-overlay { position: fixed; inset: 0; z-index: 10000; display: grid; place-items: center; background: rgba(30, 35, 22, .45); opacity: 0; visibility: hidden; transition: opacity .15s; cursor: progress; }
.busy-overlay.is-on { opacity: 1; visibility: visible; }
.busy-big { width: 56px; height: 56px; border: 5px solid rgba(255, 255, 255, .35); border-top-color: #fff; border-radius: 50%; animation: busy-rot .8s linear infinite; }
.busy-spin { display: inline-block; width: 1em; height: 1em; margin-right: .5em; vertical-align: -.15em; border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%; animation: busy-rot .7s linear infinite; }
@keyframes busy-rot { to { transform: rotate(360deg); } }
button.is-busy, input.is-busy { cursor: progress; opacity: .8; pointer-events: none; }
a.is-busy { cursor: progress; }
@media (prefers-reduced-motion: reduce) { .busy-big, .busy-spin { animation-duration: 2s; } }
