.th-interface body.th-is-loading { overflow: hidden; }
/* Indicadores de carga compartidos. active conserva la compatibilidad con los flujos existentes. */
.th-loading { position: fixed; inset: 0; z-index: 1080; display: flex; align-items: center; justify-content: center; padding: var(--th-space-4); background: rgba(8,15,33,.54); backdrop-filter: blur(3px); visibility: hidden; opacity: 0; pointer-events: none; transition: opacity var(--th-motion-fast), visibility var(--th-motion-fast); }
.th-loading.active { visibility: visible; opacity: 1; pointer-events: auto; }
.th-loading-panel { position: relative; isolation: isolate; overflow: hidden; display: flex; flex-direction: column; align-items: center; gap: var(--th-space-5); width: min(100%,26rem); max-height: calc(100dvh - 2rem); overflow-y: auto; padding: 2rem var(--th-space-6); border: 1px solid rgba(169,194,239,.35); border-radius: var(--th-radius-dialog); background: radial-gradient(ellipse at top left,rgba(89,116,218,.25),transparent 65%),linear-gradient(110deg,var(--th-color-dark-start),var(--th-color-dark-end)); box-shadow: var(--th-shadow-dialog); color: var(--th-color-on-dark); text-align: center; }
.th-loading-panel::after { content: ''; position: absolute; inset: 0; z-index: -1; background: linear-gradient(110deg,transparent 30%,rgba(216,231,255,.15) 49%,transparent 68%); transform: translateX(-120%); pointer-events: none; }
.th-loading.active .th-loading-panel::after { animation: th-loading-sheen 1s ease-out both; }
.th-loading-spinner { display: block; width: 3.25rem; height: 3.25rem; flex-shrink: 0; border: .25rem solid rgba(181,205,255,.2); border-top-color: #a9d4ff; border-right-color: #cbb5ff; border-radius: 50%; animation: th-loading-spin .9s linear infinite; }
.th-loading-message { font-size: var(--th-text-base); font-weight: var(--th-weight-semibold); line-height: 1.5; overflow-wrap: anywhere; }
.th-loading-progress { width: 100%; accent-color: #a9d4ff; height: .625rem; }
.th-loading-progress-label { color: var(--th-color-muted-on-dark); font-size: var(--th-text-sm); }
@keyframes th-loading-spin { to { transform: rotate(360deg); } }
@keyframes th-loading-sheen { to { transform: translateX(120%); } }
@media (prefers-reduced-motion: reduce) { .th-loading { transition: none; } .th-loading-spinner, .th-loading.active .th-loading-panel::after { animation: none; } }
