/* Propzora loading system (shared by every page).
   One animated logomark is the loading indicator everywhere: on buttons while an action runs,
   in empty areas while data loads, and as the replacement for older spinners.
   It follows the surrounding text colour, so it works on blue buttons, light buttons and dark mode. */
:root { --pz-mark: url("data:image/png;base64,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"); }

.pz-mark { display: inline-block; width: 1.15em; height: 1.15em; flex: none; vertical-align: -0.2em; background: currentColor;
  -webkit-mask: var(--pz-mark) center / contain no-repeat; mask: var(--pz-mark) center / contain no-repeat;
  animation: pz-mark-pulse 1.25s ease-in-out infinite; }
.pz-mark--lg { width: 44px; height: 44px; background: var(--pz-blue, #1e40af); }
[data-theme="dark"] .pz-mark--lg { background: #cbd5e1; }
@keyframes pz-mark-pulse { 0%, 100% { opacity: .35; transform: scale(.88); } 50% { opacity: 1; transform: scale(1); } }
@media (prefers-reduced-motion: reduce) { .pz-mark { animation: none; opacity: .75; } }

/* Button while its action runs */
.pz-busy { cursor: progress !important; pointer-events: none; }
.pz-busy[disabled], .pz-busy[aria-disabled="true"] { opacity: .9 !important; }
.pz-busy > .pz-mark { margin-right: .55em; }
.pz-busy > .pz-mark:only-child { margin-right: 0; }

/* Centred loader for an area waiting on data */
.pz-load-area { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; min-height: 96px; padding: 28px 12px; color: var(--pz-muted, #64748b); font-size: .8125rem; text-align: center; }

/* Older spinners across the platform now show the logomark instead */
.spinner { display: inline-block !important; width: 1.15em !important; height: 1.15em !important; border: 0 !important; border-radius: 0 !important; background: currentColor !important;
  -webkit-mask: var(--pz-mark) center / contain no-repeat; mask: var(--pz-mark) center / contain no-repeat; animation: pz-mark-pulse 1.25s ease-in-out infinite !important; vertical-align: -0.2em; }
i.fa-spinner.fa-spin, i.fa-circle-notch.fa-spin, i.fa-spinner.fa-pulse { animation: none !important; font-size: inherit; }
i.fa-spinner.fa-spin::before, i.fa-circle-notch.fa-spin::before, i.fa-spinner.fa-pulse::before { content: "" !important; display: inline-block; width: 1.1em; height: 1.1em; vertical-align: -0.2em; background: currentColor;
  -webkit-mask: var(--pz-mark) center / contain no-repeat; mask: var(--pz-mark) center / contain no-repeat; animation: pz-mark-pulse 1.25s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) { .spinner, i.fa-spinner.fa-spin::before, i.fa-circle-notch.fa-spin::before { animation: none !important; opacity: .75; } }

/* Thin progress line while the browser moves to another page */
.pz-topbar { position: fixed; left: 0; top: 0; width: 100%; height: 3px; z-index: 100000; overflow: hidden; pointer-events: none; opacity: 0; transition: opacity .15s; }
.pz-topbar.on { opacity: 1; }
.pz-topbar::before { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, transparent, var(--pz-blue, #1e40af), transparent); animation: pz-topbar 1.1s ease-in-out infinite; }
@keyframes pz-topbar { from { transform: translateX(-100%); } to { transform: translateX(100%); } }
@media (prefers-reduced-motion: reduce) { .pz-topbar::before { animation: none; } }

/* Placeholder shapes for lists and cards while their data loads */
:root { --pz-skel-a: #eef2f7; --pz-skel-b: #e2e8f0; }
[data-theme="dark"] { --pz-skel-a: #1e293b; --pz-skel-b: #2a3a52; }
.pz-skel { display: inline-block; height: .9em; min-width: 3em; border-radius: 6px; vertical-align: middle; background: linear-gradient(90deg, var(--pz-skel-a) 25%, var(--pz-skel-b) 50%, var(--pz-skel-a) 75%); background-size: 200% 100%; animation: pz-skel-shimmer 1.4s ease-in-out infinite; }
.pz-skel--block { display: block; width: 100%; }
.pz-skel-rows { display: grid; gap: 10px; padding: 4px 0; }
.pz-skel-list { display: grid; }
.pz-skel-row { display: flex; align-items: center; gap: 12px; padding: 12px 0; }
.pz-skel-dot { width: 40px; height: 40px; min-width: 40px; border-radius: 50%; padding: 0; }
.pz-skel-lines { flex: 1; display: grid; gap: 8px; }
@keyframes pz-skel-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
@media (prefers-reduced-motion: reduce) { .pz-skel { animation: none; } }
.pz-error-state { text-align: center; padding: 24px 12px; }

/* Waiting for the server to confirm a payment (outcome not known yet) */
.pz-pending { display: flex; flex-direction: column; align-items: center; gap: 12px; text-align: center; padding: 24px 8px; }
.pz-pending h4 { margin: 0; font-size: 1.0625rem; font-weight: 700; }
.pz-pending p { margin: 0; font-size: .8125rem; color: var(--pz-muted, #64748b); line-height: 1.5; max-width: 30ch; }

/* Page-specific spinners (admin, staff login, verification, uploads) show the same logomark loader */
.ap-spinner, .ap-btn .ap-spinner, .sl-spinner, .badge-spinner, .vr-loading__spin, .pz-inline-spinner, .upload-preview__loader {
  border: 0 !important; border-radius: 0 !important; background: currentColor !important;
  -webkit-mask: var(--pz-mark) center / contain no-repeat !important; mask: var(--pz-mark) center / contain no-repeat !important;
  animation: pz-mark-pulse 1.25s ease-in-out infinite !important; }
.badge-spinner, .vr-loading__spin { background: var(--pz-blue, #1e3a8a) !important; }
@media (prefers-reduced-motion: reduce) { .ap-spinner, .sl-spinner, .badge-spinner, .vr-loading__spin, .pz-inline-spinner { animation: none !important; opacity: .75; } }

/* Cards, tiles and icon buttons: content dims and the logomark pulses over it */
.pz-busy--overlay > * { opacity: .28; transition: opacity .12s; }
.pz-busy--overlay::after { content: ""; position: absolute; left: 50%; top: 50%; width: 1.6rem; height: 1.6rem; margin: -.8rem 0 0 -.8rem; background: currentColor;
  -webkit-mask: var(--pz-mark) center / contain no-repeat; mask: var(--pz-mark) center / contain no-repeat; animation: pz-mark-pulse 1.25s ease-in-out infinite; pointer-events: none; }
@media (prefers-reduced-motion: reduce) { .pz-busy--overlay::after { animation: none; opacity: .75; } }