/* Pendova Panel: shared UI behaviours that apply on every page (login and panel). */

/* ---------- Button loader ----------
   ui.js adds .pd-loading to the button that started a request and removes it when the
   request ends. The label keeps its space (no layout jump); a spinner sits on top. */
.pd-loading { position: relative !important; color: transparent !important; pointer-events: none !important; cursor: progress !important; }
.pd-loading > * { visibility: hidden !important; }
.pd-loading::after {
  content: ""; position: absolute; left: 50%; top: 50%; width: 18px; height: 18px; margin: -9px 0 0 -9px;
  border-radius: 50%; border: 2.4px solid rgba(255, 255, 255, .45); border-top-color: #fff;
  animation: pd-spin .7s linear infinite; visibility: visible !important;
}
/* light / outline buttons get a dark spinner */
.btn-light.pd-loading::after, .btn-default.pd-loading::after, .btn-secondary.pd-loading::after, .btn-link.pd-loading::after,
[class*="btn-outline-"].pd-loading::after, .pd-loading.pd-loading-dark::after {
  border-color: rgba(28, 22, 51, .2); border-top-color: #1C1633;
}
.btn-sm.pd-loading::after { width: 14px; height: 14px; margin: -7px 0 0 -7px; border-width: 2px; }
@keyframes pd-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .pd-loading::after { animation-duration: 1.6s; } }
