.root-initial-loader {
    position: fixed; inset: 0; display: grid; place-items: center;
    background: var(--crm-bg, #fcfcfd); z-index: 100000;
}
.crm-startup { display: grid; place-items: center; }
.crm-startup-spinner {
    display: block; width: 50px; height: 50px; margin: auto; border-radius: 50%;
    background: conic-gradient(from 0deg, transparent 0 205deg,
        color-mix(in srgb, var(--crm-primary, #202124) 18%, transparent) 250deg,
        var(--crm-primary, #202124) 360deg);
    -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 4px), #000 0);
    mask: radial-gradient(farthest-side, transparent calc(100% - 4px), #000 0);
    filter: drop-shadow(0 0 5px color-mix(in srgb, var(--crm-primary, #202124) 22%, transparent));
    animation: crm-startup-spin .95s linear infinite;
}
@keyframes crm-startup-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .crm-startup-spinner { animation: none; } }
.crm-progress-track { height: 3px; overflow: hidden; background: var(--crm-accent-soft, #f0edff); }
.crm-progress-track > span {
    display: block; width: 100%; height: 100%; background: var(--crm-accent, #5b4bd8); opacity: .45;
}
.crm-route-progress { position: fixed; inset: 0 0 auto; z-index: 100000; pointer-events: none; }
.crm-global-loading .ngx-spinner-overlay { background: transparent !important; }
.crm-global-loading .ngx-spinner-overlay > div:not(.loading-text) { top: 0 !important; left: 0 !important; width: 100%; transform: none !important; }
.crm-global-loading .ngx-spinner-overlay .loading-text { top: 8px; left: auto; right: 16px; transform: none; max-width: calc(100% - 32px); padding: 4px 8px; color: var(--crm-text, #27272a); background: var(--crm-surface, #fff); font: 500 14px/1.5 system-ui, sans-serif; }
.crm-global-loading .loading-text p { margin: 0; }
.crm-global-loading:has(.ngx-spinner-overlay) ~ .crm-route-progress { display: none; }

.crm-load-region { position: relative; }
.crm-load-ui { position: absolute; inset: 0; z-index: 5; display: grid; place-items: center; min-width: 0; pointer-events: auto; background: var(--crm-surface, #fff); }
.crm-load-ui[hidden] { display: none !important; }
.crm-dual-arc { position: absolute; top: var(--crm-load-spinner-top, 50%); left: 50%; margin: -14px 0 0 -14px; display: block; width: 28px; height: 28px; color: var(--crm-muted, #5f6368); animation: crm-data-spin 1s linear infinite; }
@keyframes crm-data-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .crm-dual-arc { animation: none; } }
:is(.crm-load-initial, .crm-load-updating) .crm-load-region > .crm-load-ui { display: none; }
.crm-load-initial, .crm-load-empty-error { min-height: 180px; }
.crm-load-initial[data-load-layout="detail"], .crm-load-empty-error[data-load-layout="detail"] { min-height: 440px; }
.crm-load-initial[data-load-layout="control"], .crm-load-empty-error[data-load-layout="control"] { min-height: 40px; }
.crm-load-empty-error > :not(.crm-load-ui) { visibility: hidden; }
.crm-load-failed .p-datatable-emptymessage { visibility: hidden; }
