/* ── Shared loading states ──────────────────────────────────────────── */

/* Navigation progress bar — shown on page load, hidden by JS */
.nav-progress {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    height: 3px;
    z-index: 9999;
    overflow: hidden;
    background: rgba(34, 211, 238, .15);
}

.nav-progress-bar {
    height: 100%;
    background: linear-gradient(90deg, #22D3EE, #a78bfa, #22D3EE);
    background-size: 200% 100%;
    animation: nav-slide 1.2s ease-in-out infinite;
    width: 100%;
}

.nav-progress.done {
    opacity: 0;
    transition: opacity .3s;
}

@keyframes nav-slide {
    0%   { background-position: 100% 0; }
    100% { background-position: -100% 0; }
}

/* Tab loading spinner */
.tab-loading {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 48px 0;
    gap: 12px;
    color: var(--ink3, #8296B4);
    font: 400 13px var(--f-mono, ui-monospace, monospace);
}

.spinner {
    width: 22px;
    height: 22px;
    border: 2.5px solid rgba(34, 211, 238, .18);
    border-top-color: #22D3EE;
    border-radius: 50%;
    animation: spin .7s linear infinite;
}

@keyframes spin {
    to { transform: rotate(360deg); }
}

/* Page-level loading */
.page-loading {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 80px 0;
    gap: 14px;
    color: var(--ink3, #8296B4);
    font: 400 14px var(--f-mono, ui-monospace, monospace);
}

.page-loading .spinner {
    width: 28px;
    height: 28px;
}
