:root {
    /* ── GEOVIX dark liquid-glass identity (source of truth) ── */
    --gv-black: #0d0a10;
    --gv-dark: rgba(24, 18, 24, 0.72);
    --gv-dark-2: rgba(255, 255, 255, 0.055);
    --gv-dark-3: rgba(255, 255, 255, 0.095);
    --gv-primary: #541533;
    --gv-primary-light: #7a2550;
    --gv-primary-dark: #3d0f26;
    --gv-gradient: linear-gradient(135deg, #541533 0%, #2a0b1a 50%, #0d0a10 100%);
    --gv-gradient-h: linear-gradient(90deg, #541533 0%, #3d0f26 50%, #1a1418 100%);
    --gv-gradient-card: linear-gradient(145deg, rgba(255, 255, 255, 0.075) 0%, rgba(255, 255, 255, 0.028) 100%);
    --gv-text: #ece7ec;
    --gv-text-muted: #bfb2bd;
    --gv-border: rgba(255, 255, 255, 0.10);
    --gv-success: #34c759;
    --gv-danger: #ff5c6c;
    --gv-warning: #ffcc4d;
    --gv-info: #4dc3d9;
    --gv-accent-text: #f0a8c4;
    --gv-chart-line: rgba(255, 255, 255, 0.09);

    /* ── Semantic aliases shared by all components ── */
    --bg-page: var(--gv-black);
    --bg-surface: var(--gv-dark);
    --bg-surface-elevated: var(--gv-dark-2);
    --bg-glass: rgba(22, 16, 21, 0.62);
    --text-primary: var(--gv-text);
    --text-secondary: var(--gv-text-muted);
    --border-subtle: var(--gv-border);
    --brand-primary: var(--gv-primary);
    --brand-secondary: var(--gv-primary-light);
    --focus-ring: rgba(196, 64, 128, 0.32);
    --shadow-surface: 0 20px 55px rgba(0, 0, 0, 0.45), 0 2px 10px rgba(0, 0, 0, 0.3);
    --glass-blur: 22px;

    /* ── Liquid glass material tokens (dark = smoky plum glass) ── */
    --glass-bg: linear-gradient(145deg, rgba(255, 255, 255, 0.08) 0%, rgba(255, 255, 255, 0.03) 100%);
    --glass-bg-strong: rgba(30, 23, 29, 0.86);
    --glass-bg-input: rgba(255, 255, 255, 0.05);
    --glass-border: rgba(255, 255, 255, 0.10);
    --glass-edge: rgba(255, 255, 255, 0.16);
    --glass-inner: inset 0 1px 0 rgba(255, 255, 255, 0.09);
    --glass-shadow: 0 20px 55px rgba(0, 0, 0, 0.42), 0 2px 10px rgba(0, 0, 0, 0.28);
    --glass-shadow-hover: 0 26px 65px rgba(84, 21, 51, 0.32), 0 4px 16px rgba(0, 0, 0, 0.35);
    --glass-pop: rgba(255, 255, 255, 0.06);
    --radius-card: 18px;
    --radius-ctl: 12px;
    --ease-glass: cubic-bezier(0.22, 1, 0.36, 1);
    color-scheme: dark;
}

* { box-sizing: border-box; }

body {
    background-color: var(--gv-black);
    color: var(--gv-text);
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
    margin: 0;
    padding: 0;
    min-height: 100vh;
}

/* Dark-mode atmosphere — smoky plum / violet glows under the glass */
body::before {
    content: "";
    position: fixed;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    background:
        radial-gradient(54rem 38rem at 6% -14%, rgba(122, 37, 80, 0.34), transparent 60%),
        radial-gradient(48rem 36rem at 106% 6%, rgba(96, 60, 158, 0.20), transparent 62%),
        radial-gradient(42rem 30rem at 82% 72%, rgba(196, 64, 128, 0.10), transparent 60%),
        radial-gradient(64rem 46rem at 40% 118%, rgba(84, 21, 51, 0.30), transparent 62%);
}

a { color: var(--gv-accent-text); text-decoration: none; }
a:hover { color: #ffc9dd; }
html[data-theme="light"] a:hover { color: var(--gv-primary-dark); }

/* ─── AUTH PAGES ─── */
.auth-wrapper {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, rgba(84, 21, 51, 0.45), rgba(42, 11, 26, 0.25) 55%, transparent);
    padding: 2rem;
}

.auth-card {
    background: var(--gv-dark);
    border: 1px solid var(--gv-border);
    border-radius: 16px;
    padding: 3rem;
    width: 100%;
    max-width: 480px;
    box-shadow: 0 20px 60px rgba(84, 21, 51, 0.3);
}

.auth-card .logo {
    text-align: center;
    margin-bottom: 2rem;
}

.auth-card .logo h1 {
    font-size: 2.5rem;
    font-weight: 800;
    background: linear-gradient(135deg, #c44080, #541533);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
    margin: 0;
    letter-spacing: 2px;
}

.auth-card .logo p {
    color: var(--gv-text-muted);
    font-size: 0.9rem;
    margin-top: 0.5rem;
}

/* ─── FORM CONTROLS ─── */
.gv-form-group { margin-bottom: 1.25rem; }

.gv-form-group label {
    display: block;
    color: var(--gv-text-muted);
    font-size: 0.85rem;
    margin-bottom: 0.4rem;
    font-weight: 500;
}

.gv-input {
    width: 100%;
    padding: 0.75rem 1rem;
    background: var(--gv-dark-2);
    border: 1px solid var(--gv-border);
    border-radius: 8px;
    color: var(--gv-text);
    font-size: 0.95rem;
    transition: border-color 0.3s, box-shadow 0.3s;
}

.gv-input:focus {
    outline: none;
    border-color: var(--gv-primary);
    box-shadow: 0 0 0 3px rgba(84, 21, 51, 0.3);
}

.gv-input::placeholder { color: #a5949f; }

.gv-select {
    width: 100%;
    padding: 0.6rem 2.2rem 0.6rem 0.85rem;
    background: var(--gv-dark-2);
    border: 1px solid var(--gv-border);
    border-radius: 8px;
    color: var(--gv-text);
    font-size: 0.88rem;
    font-family: inherit;
    font-weight: 500;
    appearance: none;
    -webkit-appearance: none;
    cursor: pointer;
    line-height: 1.5;
    min-height: 40px;
    transition: border-color 0.2s, box-shadow 0.2s;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='%23888' viewBox='0 0 16 16'%3E%3Cpath d='M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 10px center;
}

.gv-select:focus {
    outline: none;
    border-color: var(--gv-primary);
    box-shadow: 0 0 0 3px rgba(84, 21, 51, 0.3);
}

.gv-select option {
    background: var(--gv-dark-2);
    color: var(--gv-text);
    padding: 8px;
}

/* ─── LIQUID GLASS CUSTOM SELECT ─── */
.gv-dd { position: relative; display: inline-block; }

.gv-dd-btn {
    display: inline-flex; align-items: center; justify-content: space-between; gap: 0.7rem;
    width: 100%; padding: 0.6rem 0.75rem 0.6rem 0.85rem;
    background: var(--glass-bg-input, var(--gv-dark-2));
    border: 1px solid var(--gv-border);
    border-radius: 10px; color: var(--gv-text);
    font-size: 0.85rem; font-family: inherit; font-weight: 500;
    line-height: 1.5; min-height: 40px; cursor: pointer;
    transition: border-color 0.2s, box-shadow 0.2s, background 0.2s;
}
.gv-dd-btn:hover { border-color: rgba(122, 31, 74, 0.45); }
.gv-dd-btn:focus-visible {
    outline: none; border-color: var(--gv-primary);
    box-shadow: 0 0 0 3px var(--focus-ring, rgba(84, 21, 51, 0.3));
}
.gv-dd.open .gv-dd-btn {
    border-color: var(--gv-primary);
    box-shadow: 0 0 0 3px var(--focus-ring, rgba(84, 21, 51, 0.3));
}
.gv-dd-label { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.gv-dd-caret { font-size: 0.68rem; color: var(--gv-text-muted); transition: transform 0.18s; }
.gv-dd.open .gv-dd-caret { transform: rotate(180deg); }

.gv-dd-menu {
    position: absolute; top: calc(100% + 6px); right: 0; min-width: 100%;
    margin: 0; padding: 0.35rem; list-style: none;
    background: var(--glass-bg-strong, var(--gv-dark));
    border: 1px solid var(--glass-border, var(--gv-border));
    border-top-color: var(--glass-edge, var(--gv-border));
    border-radius: 14px;
    -webkit-backdrop-filter: blur(30px) saturate(170%);
    backdrop-filter: blur(30px) saturate(170%);
    box-shadow: var(--glass-inner, none), var(--glass-shadow, 0 12px 40px rgba(0,0,0,0.5));
    z-index: 1100; max-height: 280px; overflow-y: auto;
    animation: gv-dd-in 0.16s ease;
}
.gv-dd-item {
    display: flex; align-items: center; justify-content: space-between; gap: 1.2rem;
    padding: 0.5rem 0.7rem; border-radius: 9px;
    font-size: 0.82rem; color: var(--gv-text); cursor: pointer;
    transition: background 0.12s, color 0.12s;
}
.gv-dd-item.is-active,
.gv-dd-item:hover { background: rgba(122, 31, 74, 0.24); }
.gv-dd-item.is-selected {
    color: var(--gv-primary-light); font-weight: 600;
    background: rgba(122, 31, 74, 0.16);
}
.gv-dd-check { opacity: 0; font-size: 0.85rem; flex-shrink: 0; }
.gv-dd-item.is-selected .gv-dd-check { opacity: 1; }
.gv-dd-item:focus-visible { outline: none; }

@keyframes gv-dd-in {
    from { opacity: 0; transform: translateY(-4px) scale(0.98); }
    to   { opacity: 1; transform: none; }
}

html[data-theme="light"] .gv-dd-item.is-active,
html[data-theme="light"] .gv-dd-item:hover { background: rgba(122, 37, 80, 0.08); }
html[data-theme="light"] .gv-dd-item.is-selected { background: rgba(122, 37, 80, 0.10); }

/* ─── BUTTONS ─── */
.gv-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    padding: 0.75rem 1.5rem;
    border: none;
    border-radius: 8px;
    font-size: 0.95rem;
    font-weight: 600;
    cursor: pointer;
    transition: all 0.3s;
    text-decoration: none;
}

.gv-btn-primary {
    background: linear-gradient(135deg, #541533, #7a2550);
    color: #fff;
}
.gv-btn-primary:hover {
    background: linear-gradient(135deg, #7a2550, #541533);
    box-shadow: 0 4px 20px rgba(84, 21, 51, 0.5);
    transform: translateY(-1px);
    color: #fff;
}

.gv-btn-outline {
    background: transparent;
    border: 1px solid var(--gv-primary);
    color: var(--gv-accent-text);
}
.gv-btn-outline:hover {
    background: var(--gv-primary-dark);
    color: #fff;
}

.gv-btn-danger {
    background: var(--gv-danger);
    color: #fff;
}
.gv-btn-danger:hover { opacity: 0.9; }

.gv-btn-sm { padding: 0.4rem 0.9rem; font-size: 0.85rem; }
.gv-btn-block { width: 100%; }

/* ─── LAYOUT ─── */
.gv-layout {
    display: flex;
    min-height: 100vh;
}

/* ─── SIDEBAR ─── */
.gv-sidebar {
    width: 260px;
    height: 100vh;
    background: var(--gv-dark);
    border-right: 1px solid var(--gv-border);
    display: flex;
    flex-direction: column;
    position: fixed;
    top: 0;
    left: 0;
    z-index: 1000;
    transition: transform 0.3s;
}

.gv-sidebar-brand {
    padding: 1.5rem;
    border-bottom: 1px solid var(--gv-border);
    text-align: center;
}

.gv-sidebar-brand h2 {
    font-size: 1.5rem;
    font-weight: 800;
    background: linear-gradient(135deg, #c44080, #541533);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
    margin: 0;
    letter-spacing: 2px;
}

.gv-sidebar-brand small {
    color: var(--gv-text-muted);
    font-size: 0.7rem;
    display: block;
    margin-top: 2px;
}

.gv-sidebar-logo {
    max-width: 100%;
    max-height: 55px;
    object-fit: contain;
    border-radius: 6px;
}

.gv-sidebar-nav {
    flex: 1;
    min-height: 0;
    padding: 1rem 0;
    overflow-y: auto;
}
.gv-sidebar-nav::-webkit-scrollbar {
    width: 4px;
}
.gv-sidebar-nav::-webkit-scrollbar-track {
    background: transparent;
}
.gv-sidebar-nav::-webkit-scrollbar-thumb {
    background: rgba(255,255,255,0.1);
    border-radius: 4px;
}
.gv-sidebar-nav::-webkit-scrollbar-thumb:hover {
    background: rgba(255,255,255,0.2);
}

.gv-nav-section {
    padding: 0.5rem 1.5rem;
    font-size: 0.7rem;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    color: var(--gv-text-muted);
    margin-top: 0.5rem;
}

.gv-nav-item {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 0.7rem 1.5rem;
    color: var(--gv-text-muted);
    font-size: 0.9rem;
    transition: all 0.2s;
    border-left: 3px solid transparent;
}

.gv-nav-item:hover {
    color: var(--gv-text);
    background: var(--gv-dark-2);
    border-left-color: var(--gv-primary);
}

.gv-nav-item.active {
    color: #fff;
    background: linear-gradient(90deg, rgba(84, 21, 51, 0.3), transparent);
    border-left-color: var(--gv-primary-light);
}

.gv-nav-item i { font-size: 1.1rem; width: 20px; text-align: center; }

.gv-sidebar-footer {
    padding: 1rem 1.5rem;
    border-top: 1px solid var(--gv-border);
}

.gv-user-info {
    display: flex;
    align-items: center;
    gap: 0.75rem;
}

.gv-user-avatar {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: var(--gv-gradient);
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    font-size: 0.85rem;
    color: #fff;
}

.gv-user-details { flex: 1; overflow: hidden; }
.gv-user-details .name { font-size: 0.85rem; font-weight: 600; color: var(--gv-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.gv-user-details .role { font-size: 0.7rem; color: var(--gv-text-muted); text-transform: capitalize; }

/* ─── MAIN CONTENT ─── */
.gv-main {
    flex: 1;
    margin-left: 260px;
    min-height: 100vh;
}

/* ─── TOPBAR ─── */
.gv-topbar {
    height: 64px;
    background: var(--gv-dark);
    border-bottom: 1px solid var(--gv-border);
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 2rem;
    position: sticky;
    top: 0;
    z-index: 500;
}

.gv-topbar-title { font-size: 1.15rem; font-weight: 600; }

.gv-topbar-actions {
    display: flex;
    align-items: center;
    gap: 1rem;
}

.gv-topbar-btn {
    background: transparent;
    border: none;
    color: var(--gv-text-muted);
    font-size: 1.2rem;
    cursor: pointer;
    padding: 0.4rem;
    border-radius: 6px;
    transition: all 0.2s;
    position: relative;
}

.gv-topbar-btn:hover { color: var(--gv-text); background: var(--gv-dark-2); }

.gv-badge {
    position: absolute;
    top: -2px;
    right: -2px;
    width: 16px;
    height: 16px;
    background: var(--gv-danger);
    border-radius: 50%;
    font-size: 0.6rem;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #fff;
    font-weight: 700;
}

/* ─── CONTENT AREA ─── */
.gv-content { padding: 2rem; }

/* ─── CARDS ─── */
.gv-card {
    background: var(--gv-gradient-card);
    border: 1px solid var(--gv-border);
    border-radius: 12px;
    padding: 1.5rem;
    transition: all 0.3s;
}

.gv-card:hover {
    border-color: var(--gv-primary-dark);
    box-shadow: 0 4px 20px rgba(84, 21, 51, 0.15);
}

.gv-card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 1rem;
}

.gv-card-title {
    font-size: 0.85rem;
    color: var(--gv-text-muted);
    text-transform: uppercase;
    letter-spacing: 1px;
    font-weight: 600;
}

.gv-card-value {
    font-size: 2rem;
    font-weight: 700;
    color: var(--gv-text);
}

.gv-card-change {
    font-size: 0.8rem;
    font-weight: 600;
    margin-top: 0.25rem;
}

.gv-card-change.positive { color: var(--gv-success); }
.gv-card-change.negative { color: var(--gv-danger); }
.gv-card-change.neutral { color: var(--gv-text-muted); }

/* ─── EXECUTION SCORE ─── */
.gv-score-ring {
    width: 160px;
    height: 160px;
    border-radius: 50%;
    background: conic-gradient(var(--gv-primary-light) calc(var(--score) * 3.6deg), var(--gv-dark-3) 0deg);
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 0 auto;
    position: relative;
}

.gv-score-ring::before {
    content: '';
    width: 120px;
    height: 120px;
    border-radius: 50%;
    background: var(--gv-dark);
    position: absolute;
}

.gv-score-value {
    position: relative;
    z-index: 1;
    font-size: 2.5rem;
    font-weight: 800;
    background: linear-gradient(135deg, #c44080, #541533);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
}

/* ─── CATEGORY TABS ─── */
.gv-tabs {
    display: flex;
    gap: 0.5rem;
    margin-bottom: 1.5rem;
    flex-wrap: wrap;
}

.gv-tab {
    padding: 0.5rem 1rem;
    border-radius: 20px;
    font-size: 0.85rem;
    font-weight: 500;
    color: var(--gv-text-muted);
    background: var(--gv-dark-2);
    border: 1px solid var(--gv-border);
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}

.gv-tab:hover { border-color: var(--gv-primary); color: var(--gv-text); }

.gv-tab.active {
    background: linear-gradient(135deg, #541533, #7a2550);
    color: #fff;
    border-color: transparent;
}

.gv-tab .count {
    display: inline-block;
    background: rgba(255,255,255,0.15);
    padding: 0.1rem 0.5rem;
    border-radius: 10px;
    font-size: 0.75rem;
    margin-left: 0.3rem;
}

/* ─── TOOL CARDS ─── */
.gv-tool-card {
    background: var(--gv-gradient-card);
    border: 1px solid var(--gv-border);
    border-radius: 12px;
    padding: 1.5rem;
    transition: all 0.3s;
    height: 100%;
    display: flex;
    flex-direction: column;
}

.gv-tool-card:hover {
    border-color: var(--gv-primary);
    box-shadow: 0 8px 30px rgba(84, 21, 51, 0.2);
    transform: translateY(-2px);
}

.gv-tool-card.connected { border-color: var(--gv-success); }

.gv-tool-icon {
    width: 48px;
    height: 48px;
    border-radius: 12px;
    background: var(--gv-gradient);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.3rem;
    color: #fff;
    margin-bottom: 1rem;
}

.gv-tool-name { font-size: 1.05rem; font-weight: 600; margin-bottom: 0.25rem; }
.gv-tool-category { font-size: 0.75rem; color: var(--gv-accent-text); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 0.5rem; }
.gv-tool-desc { font-size: 0.82rem; color: var(--gv-text-muted); line-height: 1.5; flex: 1; }
.gv-tool-kpi-count { font-size: 0.8rem; color: var(--gv-text-muted); margin-top: 0.75rem; padding-top: 0.75rem; border-top: 1px solid var(--gv-border); }
.gv-tool-actions { margin-top: 1rem; }

/* ─── AI CHAT ─── */
.gv-ai-container { max-width: 900px; margin: 0 auto; }

.gv-ai-header {
    text-align: center;
    padding: 2rem 0;
}

.gv-ai-header h2 {
    font-size: 1.5rem;
    background: linear-gradient(135deg, #c44080, #541533);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
}

.gv-ai-messages {
    max-height: 500px;
    overflow-y: auto;
    padding: 1rem 0;
}

.gv-ai-message {
    padding: 1rem 1.5rem;
    margin-bottom: 1rem;
    border-radius: 12px;
    font-size: 0.9rem;
    line-height: 1.6;
}

.gv-ai-message.user {
    background: linear-gradient(135deg, rgba(84, 21, 51, 0.4), rgba(84, 21, 51, 0.2));
    border: 1px solid rgba(84, 21, 51, 0.3);
    margin-left: 3rem;
}

.gv-ai-message.assistant {
    background: var(--gv-dark-2);
    border: 1px solid var(--gv-border);
    margin-right: 3rem;
}

.gv-ai-input-bar {
    display: flex;
    gap: 0.75rem;
    padding: 1rem 0;
    position: sticky;
    bottom: 0;
    background: var(--gv-black);
}

.gv-ai-input-bar input {
    flex: 1;
    padding: 0.85rem 1.25rem;
    background: var(--gv-dark-2);
    border: 1px solid var(--gv-border);
    border-radius: 25px;
    color: var(--gv-text);
    font-size: 0.95rem;
}

.gv-ai-input-bar input:focus {
    outline: none;
    border-color: var(--gv-primary);
    box-shadow: 0 0 0 3px rgba(84, 21, 51, 0.3);
}

/* ─── TABLE ─── */
.gv-table {
    width: 100%;
    border-collapse: collapse;
}

.gv-table th {
    text-align: left;
    padding: 0.75rem 1rem;
    font-size: 0.8rem;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: var(--gv-text-muted);
    border-bottom: 1px solid var(--gv-border);
    font-weight: 600;
}

.gv-table td {
    padding: 0.75rem 1rem;
    font-size: 0.9rem;
    border-bottom: 1px solid var(--gv-border);
}

.gv-table tbody tr:hover { background: var(--gv-dark-2); }

/* ─── STATUS BADGES ─── */
.gv-status {
    display: inline-block;
    padding: 0.2rem 0.6rem;
    border-radius: 12px;
    font-size: 0.75rem;
    font-weight: 600;
}

.gv-status-connected { background: rgba(40, 167, 69, 0.2); color: var(--gv-success); }
.gv-status-disconnected { background: rgba(220, 53, 69, 0.2); color: var(--gv-danger); }
.gv-status-pending { background: rgba(255, 193, 7, 0.2); color: var(--gv-warning); }

/* ─── GRID HELPERS ─── */
.gv-grid { display: grid; gap: 1.5rem; }
.gv-grid-2 { grid-template-columns: repeat(2, 1fr); }
.gv-grid-3 { grid-template-columns: repeat(3, 1fr); }
.gv-grid-4 { grid-template-columns: repeat(4, 1fr); }
.gv-grid-5 { grid-template-columns: repeat(5, 1fr); }
.gv-grid-6 { grid-template-columns: repeat(6, 1fr); }

/* ─── ALERT MESSAGES ─── */
.gv-alert {
    padding: 0.75rem 1.25rem;
    border-radius: 8px;
    margin-bottom: 1rem;
    font-size: 0.9rem;
    border-left: 4px solid;
}

.gv-alert-success { background: rgba(40, 167, 69, 0.1); border-color: var(--gv-success); color: var(--gv-success); }
.gv-alert-danger { background: rgba(220, 53, 69, 0.1); border-color: var(--gv-danger); color: var(--gv-danger); }
.gv-alert-warning { background: rgba(255, 193, 7, 0.1); border-color: var(--gv-warning); color: var(--gv-warning); }
.gv-alert-info { background: rgba(23, 162, 184, 0.1); border-color: var(--gv-info); color: var(--gv-info); }

/* ─── DROPDOWN (Modernized) ─── */
.dropdown-menu {
    background: #141418 !important;
    border: 1px solid rgba(255,255,255,0.08) !important;
    border-radius: 12px !important;
    box-shadow: 0 12px 48px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.03) inset !important;
    padding: 5px !important;
    min-width: 190px;
    animation: gvDropIn 0.18s cubic-bezier(0.16, 1, 0.3, 1);
    z-index: 1060;
}
.dropdown-menu .dropdown-item {
    color: #ccc !important;
    border-radius: 8px;
    padding: 9px 14px;
    font-size: 0.84rem;
    font-weight: 500;
    transition: all 0.12s ease;
    display: flex;
    align-items: center;
    gap: 4px;
    line-height: 1.4;
}
.dropdown-menu .dropdown-item:hover,
.dropdown-menu .dropdown-item:focus {
    background: rgba(84,21,51,0.25) !important;
    color: #e8a0b8 !important;
}
.dropdown-menu .dropdown-item:active {
    background: rgba(84,21,51,0.4) !important;
    color: #fff !important;
}
.dropdown-menu .dropdown-item i {
    font-size: 0.9rem;
    width: 18px;
    text-align: center;
    flex-shrink: 0;
}
.dropdown-menu .dropdown-divider {
    border-color: rgba(255,255,255,0.06) !important;
    margin: 4px 6px;
}
.dropdown-menu .dropdown-header {
    color: #666;
    font-size: 0.68rem;
    text-transform: uppercase;
    letter-spacing: 0.8px;
    font-weight: 600;
    padding: 8px 14px 4px;
}
@keyframes gvDropIn {
    from { opacity: 0; transform: translateY(-8px) scale(0.96); }
    to { opacity: 1; transform: translateY(0) scale(1); }
}

/* Select / native dropdown override */
select.gv-input,
select.form-select,
select.form-control {
    appearance: none;
    -webkit-appearance: none;
    background-color: var(--gv-dark-2, #1a1a1e) !important;
    color: var(--gv-text, #e0e0e0) !important;
    border: 1px solid var(--gv-border, rgba(255,255,255,0.08)) !important;
    border-radius: 8px !important;
    font-size: 0.88rem;
    font-family: inherit;
    font-weight: 500;
    padding: 0.55rem 2.2rem 0.55rem 0.85rem !important;
    line-height: 1.5;
    min-height: 40px;
    cursor: pointer;
    transition: border-color 0.2s, box-shadow 0.2s;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='%23888' viewBox='0 0 16 16'%3E%3Cpath d='M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z'/%3E%3C/svg%3E") !important;
    background-repeat: no-repeat !important;
    background-position: right 10px center !important;
    background-size: 12px !important;
}
select.gv-input:focus,
select.form-select:focus,
select.form-control:focus {
    border-color: var(--gv-primary) !important;
    box-shadow: 0 0 0 3px rgba(84,21,51,0.25) !important;
    outline: none;
}
select.gv-input option,
select.form-select option,
select.form-control option,
.gv-select option {
    background: #1a1a1e;
    color: #e0e0e0;
    padding: 8px;
}

/* Ensure card containers don't clip dropdowns */
.gv-card { overflow: visible; }
.gv-card:hover { overflow: visible; }

/* ─── MODAL ─── */
.gv-modal-content {
    background: var(--gv-dark) !important;
    border: 1px solid var(--gv-border) !important;
    border-radius: 12px !important;
    color: var(--gv-text);
}

.gv-modal-content .modal-header { border-bottom-color: var(--gv-border); }
.gv-modal-content .modal-footer { border-top-color: var(--gv-border); }
.gv-modal-content .btn-close { filter: invert(1); }

/* ─── SCROLLBAR ─── */
::-webkit-scrollbar { width: 6px; }
::-webkit-scrollbar-track { background: var(--gv-dark); }
::-webkit-scrollbar-thumb { background: var(--gv-primary-dark); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--gv-primary); }

/* ─── RESPONSIVE ─── */
@media (max-width: 1200px) {
    .gv-grid-4, .gv-grid-5 { grid-template-columns: repeat(3, 1fr); }
    .gv-grid-6 { grid-template-columns: repeat(3, 1fr); }
}

@media (max-width: 992px) {
    .gv-grid-3, .gv-grid-4, .gv-grid-5 { grid-template-columns: repeat(2, 1fr); }
    .gv-grid-6 { grid-template-columns: repeat(2, 1fr); }
    .gv-sidebar { transform: translateX(-100%); }
    .gv-sidebar.open { transform: translateX(0); }
    .gv-main { margin-left: 0; }
}

@media (max-width: 768px) {
    .gv-grid-2, .gv-grid-3, .gv-grid-4, .gv-grid-5, .gv-grid-6 { grid-template-columns: 1fr; }
    .gv-content { padding: 1rem; }
    .auth-card { padding: 2rem 1.5rem; }
}

/* ── Billing Integrity components (dark theme) ─────────────────── */

/* Sidebar nav groups */
.gv-nav-parent { display:flex; align-items:center; gap:0.6rem; width:100%; background:none; border:none; cursor:pointer; font:inherit; text-align:left; }
.gv-nav-parent .gv-nav-caret { margin-left:auto; font-size:0.65rem; transition:transform 0.2s; }
.gv-nav-parent[aria-expanded="true"] .gv-nav-caret { transform:rotate(180deg); }
.gv-nav-sub { padding-left:1rem; }
.gv-nav-sub .gv-nav-item { font-size:0.8rem; padding:0.4rem 0.75rem; }

/* Page header */
.bi-head { display:flex; flex-wrap:wrap; align-items:flex-start; justify-content:space-between; gap:1rem; margin-bottom:1.4rem; }
.bi-head h1 { font-size:1.45rem; font-weight:800; margin:0 0 0.25rem; }
.bi-head .bi-sub { color:var(--gv-text-muted); font-size:0.85rem; margin:0; }
.bi-actions { display:flex; flex-wrap:wrap; gap:0.6rem; align-items:center; }
.bi-breadcrumb { font-size:0.75rem; color:var(--gv-text-muted); margin-bottom:0.6rem; }
.bi-breadcrumb a { color:var(--gv-text-muted); }
.bi-breadcrumb a:hover { color:var(--gv-accent-text); }

/* Stat cards (grid handled by gv-grid-4) */
.bi-stat-icon { width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:1rem;flex-shrink:0; }
.bi-stat-icon.blue { background:rgba(122,37,80,0.25); color:#e8a0b8; }
.bi-stat-icon.amber { background:rgba(255,193,7,0.15); color:var(--gv-warning); }
.bi-stat-icon.green { background:rgba(40,167,69,0.15); color:var(--gv-success); }
.bi-stat-icon.red { background:rgba(220,53,69,0.15); color:var(--gv-danger); }
.bi-stat-icon.info { background:rgba(23,162,184,0.15); color:var(--gv-info); }

/* Tables */
.bi-table-wrap { overflow-x:auto; }
.bi-table { width:100%; border-collapse:collapse; font-size:0.84rem; min-width:560px; }
.bi-table th { text-align:left; padding:0.7rem 1rem; font-size:0.68rem; font-weight:600; text-transform:uppercase; letter-spacing:0.06em; color:var(--gv-text-muted); border-bottom:1px solid var(--gv-border); white-space:nowrap; }
.bi-table td { padding:0.7rem 1rem; border-bottom:1px solid var(--gv-border); vertical-align:middle; }
.bi-table tbody tr:last-child td { border-bottom:none; }
.bi-table tr.bi-row-link { cursor:pointer; transition:background 0.12s; }
.bi-table tr.bi-row-link:hover { background:var(--gv-dark-2); }
.bi-table tr.selected { background:rgba(122,37,80,0.18); box-shadow:inset 3px 0 0 var(--gv-primary-light); }
.bi-table .muted { color:var(--gv-text-muted); font-size:0.78rem; }

/* Status badges */
.bi-badge { display:inline-flex; align-items:center; gap:0.3rem; font-size:0.7rem; font-weight:600; padding:0.2rem 0.65rem; border-radius:20px; white-space:nowrap; }
.bi-badge.open        { background:rgba(255,193,7,0.15);  color:#ffc107; }
.bi-badge.in_review   { background:rgba(23,162,184,0.15); color:#0dcaf0; }
.bi-badge.approved    { background:rgba(122,37,80,0.3);   color:#e8a0b8; }
.bi-badge.resolved    { background:rgba(40,167,69,0.15);  color:#28a745; }
.bi-badge.dismissed   { background:rgba(136,136,136,0.15);color:#999; }
.bi-badge.active      { background:rgba(40,167,69,0.15);  color:#28a745; }
.bi-badge.superseded  { background:rgba(136,136,136,0.15);color:#999; }
.bi-badge.archived    { background:rgba(220,53,69,0.12);  color:#dc3545; }
.bi-badge.uploaded,
.bi-badge.running     { background:rgba(23,162,184,0.15); color:#0dcaf0; }
.bi-badge.needs_review{ background:rgba(255,193,7,0.15);  color:#ffc107; }
.bi-badge.processed   { background:rgba(40,167,69,0.15);  color:#28a745; }
.bi-badge.failed      { background:rgba(220,53,69,0.15);  color:#dc3545; }
.bi-badge.pending     { background:rgba(255,193,7,0.15);  color:#ffc107; }
.bi-badge.fulfilled   { background:rgba(40,167,69,0.15);  color:#28a745; }
.bi-badge.cancelled   { background:rgba(136,136,136,0.15);color:#999; }
.bi-badge.completed   { background:rgba(40,167,69,0.15);  color:#28a745; }
.bi-badge.high        { background:rgba(220,53,69,0.15);  color:#dc3545; }
.bi-badge.medium      { background:rgba(255,193,7,0.15);  color:#ffc107; }
.bi-badge.low         { background:rgba(136,136,136,0.15);color:#999; }
.bi-badge.demo        { background:rgba(23,162,184,0.15); color:#0dcaf0; }

/* Two/three-column BI layouts */
.bi-cols-wide { display:grid; grid-template-columns:minmax(0,2fr) minmax(0,1fr); gap:1.4rem; align-items:start; }
.bi-cols-narrow { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,2fr); gap:1.4rem; align-items:start; }
.bi-cols-3 { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:1.4rem; align-items:start; }
@media (max-width:1100px) {
    .bi-cols-wide, .bi-cols-narrow, .bi-cols-3 { grid-template-columns:1fr; }
}

/* Inline editable cells (extraction review) */
.bi-cell-input { width:100%; height:30px; border-radius:8px; border:1px solid var(--gv-border); background:var(--gv-dark-3); color:var(--gv-text); padding:0 0.5rem; font-size:0.78rem; }
.bi-cell-input:disabled { border-color:transparent; background:transparent; padding:0; height:auto; color:var(--gv-text); }
.bi-cell-input:focus { border-color:var(--gv-primary-light); outline:none; box-shadow:0 0 0 2px rgba(122,37,80,0.35); }
.bi-hidden { display:none !important; }

/* Filter pills */
.bi-pills { display:flex; flex-wrap:wrap; gap:0.5rem; }
.bi-pill { display:inline-flex; align-items:center; gap:0.35rem; padding:0.35rem 0.9rem; border-radius:20px; font-size:0.8rem; font-weight:500; color:var(--gv-text-muted); background:var(--gv-dark-2); border:1px solid var(--gv-border); text-decoration:none; transition:all 0.15s; }
.bi-pill:hover { color:var(--gv-text); border-color:var(--gv-primary-light); }
.bi-pill.active { background:linear-gradient(135deg,#c44080,#541533); color:#fff; border-color:transparent; }
.bi-pill .cnt { font-size:0.68rem; opacity:0.75; }

/* Cards */
.bi-card { background:var(--gv-dark-2); border:1px solid var(--gv-border); border-radius:14px; }
.bi-card-h { padding:0.9rem 1.25rem; border-bottom:1px solid var(--gv-border); display:flex; align-items:center; justify-content:space-between; }
.bi-card-h h3 { margin:0; font-size:0.9rem; font-weight:700; }
.bi-card-b { padding:1.25rem; }

/* Auditor split view: list + side detail panel */
.bi-split { display:grid; grid-template-columns:1fr; gap:1rem; align-items:start; }
.bi-split.has-panel { grid-template-columns:minmax(0,1fr) 400px; }
@media (min-width:1400px) { .bi-split.has-panel { grid-template-columns:minmax(0,1fr) 430px; } }
.bi-flag-panel { position:sticky; top:calc(64px + 1rem); }
.bi-flag-panel.closed { display:none; }
.bi-flag-panel .bi-card { max-height:calc(100vh - 96px); overflow-y:auto; display:flex; flex-direction:column; }
tr.excluded td { opacity:0.4; }
@media (max-width:1100px) {
    .bi-split.has-panel { grid-template-columns:1fr; }
    .bi-flag-panel:not(.closed) { position:fixed; inset:auto 0 0 0; top:15%; z-index:1050; padding:0 0.5rem; }
    .bi-flag-panel:not(.closed) .bi-card { max-height:none; height:100%; border-radius:14px 14px 0 0; }
}

/* Forms */
.bi-label { display:block; font-size:0.75rem; font-weight:600; margin-bottom:0.35rem; }
.bi-req { color:var(--gv-danger); }
.bi-help { font-size:0.7rem; color:var(--gv-text-muted); margin-top:0.3rem; }
.bi-check { display:flex; align-items:center; gap:0.5rem; font-size:0.84rem; }
.bi-check input { accent-color:var(--gv-primary-light); }

/* Extraction review */
.bi-steps { display:flex; align-items:center; gap:0.75rem; margin-bottom:1.4rem; }
.bi-step { display:flex; align-items:center; gap:0.45rem; font-size:0.78rem; color:var(--gv-text-muted); }
.bi-step .n { width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:0.68rem;font-weight:700;background:var(--gv-dark-3);border:1px solid var(--gv-border); }
.bi-step.done .n, .bi-step.done { color:var(--gv-success); }
.bi-step.done .n { border-color:var(--gv-success); }
.bi-step.now .n, .bi-step.now { color:#e8a0b8; font-weight:600; }
.bi-step.now .n { border-color:var(--gv-primary-light); background:rgba(122,37,80,0.3); }
.bi-step-sep { flex:0 0 18px; height:1px; background:var(--gv-border); }
.bi-doc-preview { border:1px solid var(--gv-border); border-radius:10px; background:#fff; width:100%; height:460px; }

/* Chart */
.bi-chart { height:220px; }

/* Demo banner */
.bi-demo-banner { display:flex; align-items:center; gap:0.5rem; background:rgba(23,162,184,0.1); border:1px solid rgba(23,162,184,0.3); color:#0dcaf0; border-radius:10px; padding:0.6rem 1rem; font-size:0.8rem; margin-bottom:1rem; }

/* Empty state */
.bi-empty { text-align:center; padding:2.5rem 1rem; color:var(--gv-text-muted); }
.bi-empty i { font-size:1.8rem; display:block; margin-bottom:0.6rem; color:var(--gv-accent-text); }
.bi-empty .t { font-weight:700; color:var(--gv-text); font-size:0.9rem; }
.bi-empty .m { font-size:0.8rem; margin-top:0.3rem; }

/* ══════════════════════════════════════════════════════════════════
   LIGHT MODE — iPhone-inspired glass, GEOVIX burgundy/purple
   Dark mode above is untouched; this block re-tokenizes --gv-* vars
   so every existing component re-skins automatically, then layers
   glass treatments on shared chrome and surfaces.
   ══════════════════════════════════════════════════════════════════ */

html[data-theme="light"] {
    --gv-black: #f5f2f8;
    --gv-dark: rgba(255, 255, 255, 0.60);
    --gv-dark-2: rgba(255, 255, 255, 0.68);
    --gv-dark-3: rgba(122, 37, 80, 0.06);
    --gv-text: #2a1a24;
    --gv-text-muted: #77627a;
    --gv-border: rgba(122, 37, 80, 0.14);

    --gv-primary: #541533;
    --gv-primary-light: #7a2550;
    --gv-primary-dark: #3d0f26;
    --gv-accent-text: #7a2550;
    --gv-gradient-card: linear-gradient(145deg, rgba(255,255,255,0.82), rgba(255,255,255,0.58));

    --gv-success: #15803d;
    --gv-danger: #be123c;
    --gv-warning: #b45309;
    --gv-info: #0e7490;

    --bg-page: #f5f2f8;
    --bg-surface: rgba(255, 255, 255, 0.60);
    --bg-surface-elevated: rgba(255, 255, 255, 0.85);
    --bg-glass: rgba(255, 255, 255, 0.55);
    --text-primary: #2a1a24;
    --text-secondary: #77627a;
    --border-subtle: rgba(122, 37, 80, 0.14);
    --focus-ring: rgba(122, 37, 80, 0.24);
    --shadow-surface: 0 20px 55px rgba(122, 37, 80, 0.13), 0 2px 10px rgba(122, 37, 80, 0.06);
    --glass-blur: 26px;
    --gv-chart-line: rgba(84, 21, 51, 0.15);

    /* Liquid glass material — pearl/blush surfaces */
    --glass-bg: linear-gradient(150deg, rgba(255, 255, 255, 0.78) 0%, rgba(255, 255, 255, 0.55) 100%);
    --glass-bg-strong: rgba(255, 255, 255, 0.86);
    --glass-bg-input: rgba(255, 255, 255, 0.6);
    --glass-border: rgba(255, 255, 255, 0.72);
    --glass-edge: rgba(255, 255, 255, 0.95);
    --glass-inner: inset 0 1px 0 rgba(255, 255, 255, 0.85);
    --glass-shadow: 0 20px 55px rgba(122, 37, 80, 0.13), 0 2px 10px rgba(122, 37, 80, 0.06);
    --glass-shadow-hover: 0 26px 65px rgba(122, 37, 80, 0.18), 0 4px 16px rgba(122, 37, 80, 0.08);
    --glass-pop: rgba(122, 37, 80, 0.05);
    color-scheme: light;
}

html[data-theme="light"] body {
    background-color: var(--gv-black);
    color: var(--gv-text);
}
html[data-theme="light"] body::before {
    content: "";
    position: fixed;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    background:
        radial-gradient(62rem 44rem at -12% -16%, rgba(196, 64, 128, 0.18), transparent 60%),
        radial-gradient(56rem 42rem at 110% 6%, rgba(139, 92, 246, 0.15), transparent 62%),
        radial-gradient(38rem 28rem at 78% 60%, rgba(240, 168, 196, 0.14), transparent 62%),
        radial-gradient(52rem 48rem at 42% 116%, rgba(122, 37, 80, 0.12), transparent 60%);
}

html[data-theme="light"] .gv-sidebar,
html[data-theme="light"] .gv-topbar {
    background: var(--bg-glass);
    -webkit-backdrop-filter: blur(26px) saturate(160%);
    backdrop-filter: blur(26px) saturate(160%);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.7), var(--shadow-surface);
}
html[data-theme="light"] .gv-sidebar { border-right-color: rgba(84,21,51,0.10); }
html[data-theme="light"] .gv-sidebar-brand,
html[data-theme="light"] .gv-sidebar-footer,
html[data-theme="light"] .gv-ws-switcher { border-color: rgba(84,21,51,0.10) !important; }

html[data-theme="light"] .gv-card,
html[data-theme="light"] .gv-tool-card,
html[data-theme="light"] .bi-card,
html[data-theme="light"] .auth-card {
    background: var(--gv-gradient-card);
    -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(140%);
    backdrop-filter: blur(var(--glass-blur)) saturate(140%);
    border: 1px solid rgba(255, 255, 255, 0.65);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.75), var(--shadow-surface);
}

html[data-theme="light"] .dropdown-menu,
html[data-theme="light"] .notif-dropdown,
html[data-theme="light"] .gv-modal-content,
html[data-theme="light"] #gvConfirmModal > div,
html[data-theme="light"] .bi-flag-panel .bi-card {
    background: rgba(255, 255, 255, 0.88) !important;
    -webkit-backdrop-filter: blur(28px) saturate(160%);
    backdrop-filter: blur(28px) saturate(160%);
    border: 1px solid rgba(255, 255, 255, 0.7) !important;
    box-shadow: 0 16px 48px rgba(84, 21, 51, 0.18), inset 0 1px 0 rgba(255,255,255,0.8) !important;
}
html[data-theme="light"] .dropdown-menu .dropdown-item { color: #3a2a36 !important; }
html[data-theme="light"] .dropdown-menu .dropdown-item:hover,
html[data-theme="light"] .dropdown-menu .dropdown-item:focus {
    background: rgba(84, 21, 51, 0.09) !important;
    color: var(--gv-primary) !important;
}
html[data-theme="light"] .dropdown-menu .dropdown-item:active {
    background: rgba(84, 21, 51, 0.16) !important;
    color: var(--gv-primary-dark) !important;
}
html[data-theme="light"] .dropdown-menu .dropdown-divider { border-color: rgba(84,21,51,0.10) !important; }
html[data-theme="light"] .dropdown-menu .dropdown-header { color: #8a7585; }

html[data-theme="light"] .gv-nav-item { color: #6f5a6d; }
html[data-theme="light"] .gv-nav-item:hover { color: var(--gv-primary-dark); background: rgba(84,21,51,0.06); }
html[data-theme="light"] .gv-nav-item.active {
    color: var(--gv-primary);
    background: linear-gradient(90deg, rgba(84, 21, 51, 0.13), rgba(84, 21, 51, 0.02));
    border-left-color: var(--gv-primary-light);
}
html[data-theme="light"] .gv-sidebar-nav::-webkit-scrollbar-thumb { background: rgba(84,21,51,0.18); }

html[data-theme="light"] .gv-input,
html[data-theme="light"] .gv-select,
html[data-theme="light"] select.gv-input,
html[data-theme="light"] select.form-select,
html[data-theme="light"] select.form-control {
    background-color: rgba(255, 255, 255, 0.65) !important;
    border-color: rgba(84, 21, 51, 0.18) !important;
    color: var(--gv-text) !important;
}
html[data-theme="light"] .gv-input::placeholder { color: #a48ca0; }
html[data-theme="light"] .gv-input:focus,
html[data-theme="light"] .gv-select:focus,
html[data-theme="light"] select.gv-input:focus,
html[data-theme="light"] select.form-select:focus,
html[data-theme="light"] select.form-control:focus {
    border-color: var(--gv-primary-light) !important;
    box-shadow: 0 0 0 3px var(--focus-ring) !important;
}
html[data-theme="light"] select.gv-input option,
html[data-theme="light"] select.form-select option,
html[data-theme="light"] select.form-control option,
html[data-theme="light"] .gv-select option { background: #fff; color: var(--gv-text); }

html[data-theme="light"] .gv-btn-outline {
    color: var(--gv-primary);
    border-color: rgba(84, 21, 51, 0.35);
    background: rgba(255, 255, 255, 0.5);
}
html[data-theme="light"] .gv-btn-outline:hover { background: rgba(84, 21, 51, 0.08); color: var(--gv-primary-dark); }

html[data-theme="light"] .bi-card:has(.bi-table-wrap),
html[data-theme="light"] .bi-card:has(.gv-table) {
    background: rgba(255, 255, 255, 0.82);
}
html[data-theme="light"] .bi-table tr.selected { background: rgba(122, 37, 80, 0.10); }
html[data-theme="light"] .bi-table tr.bi-row-link:hover,
html[data-theme="light"] .gv-table tbody tr:hover { background: rgba(84, 21, 51, 0.05); }
html[data-theme="light"] .bi-cell-input { background: rgba(255,255,255,0.7); color: var(--gv-text); }
html[data-theme="light"] .bi-cell-input:disabled { background: transparent; }

html[data-theme="light"] .bi-badge.open,
html[data-theme="light"] .bi-badge.needs_review,
html[data-theme="light"] .bi-badge.medium,
html[data-theme="light"] .bi-badge.pending { background: rgba(217,119,6,0.14); color: #b45309; }
html[data-theme="light"] .bi-badge.in_review,
html[data-theme="light"] .bi-badge.uploaded,
html[data-theme="light"] .bi-badge.running,
html[data-theme="light"] .bi-badge.demo { background: rgba(14,116,144,0.12); color: #0e7490; }
html[data-theme="light"] .bi-badge.approved { background: rgba(122,37,80,0.14); color: #7a2550; }
html[data-theme="light"] .bi-badge.resolved,
html[data-theme="light"] .bi-badge.active,
html[data-theme="light"] .bi-badge.processed,
html[data-theme="light"] .bi-badge.fulfilled,
html[data-theme="light"] .bi-badge.completed { background: rgba(21,115,71,0.12); color: #157347; }
html[data-theme="light"] .bi-badge.dismissed,
html[data-theme="light"] .bi-badge.superseded,
html[data-theme="light"] .bi-badge.cancelled,
html[data-theme="light"] .bi-badge.inactive,
html[data-theme="light"] .bi-badge.low { background: rgba(111,90,109,0.12); color: #6f5a6d; }
html[data-theme="light"] .bi-badge.archived,
html[data-theme="light"] .bi-badge.failed,
html[data-theme="light"] .bi-badge.high { background: rgba(185,28,28,0.12); color: #b91c1c; }

html[data-theme="light"] .gv-alert-success { background: rgba(21,115,71,0.08); }
html[data-theme="light"] .gv-alert-danger { background: rgba(185,28,28,0.08); }
html[data-theme="light"] .gv-alert-warning { background: rgba(217,119,6,0.08); }
html[data-theme="light"] .gv-alert-info { background: rgba(14,116,144,0.08); }
html[data-theme="light"] .alert-success { background: rgba(21,115,71,0.10); border-color: rgba(21,115,71,0.3); color: #157347; }
html[data-theme="light"] .alert-danger { background: rgba(185,28,28,0.08); border-color: rgba(185,28,28,0.3); color: #b91c1c; }
html[data-theme="light"] .alert-warning { background: rgba(217,119,6,0.10); border-color: rgba(217,119,6,0.3); color: #92400e; }
html[data-theme="light"] .alert-info { background: rgba(14,116,144,0.10); border-color: rgba(14,116,144,0.3); color: #0e7490; }

html[data-theme="light"] .bi-demo-banner {
    background: rgba(14,116,144,0.10);
    border-color: rgba(14,116,144,0.25);
    color: #0e7490;
}

html[data-theme="light"] .bi-stat-icon.blue { background: rgba(122,37,80,0.12); color: #7a2550; }
html[data-theme="light"] .bi-stat-icon.amber { background: rgba(217,119,6,0.14); color: #b45309; }
html[data-theme="light"] .bi-stat-icon.green { background: rgba(21,115,71,0.12); color: #157347; }
html[data-theme="light"] .bi-stat-icon.red { background: rgba(185,28,28,0.12); color: #b91c1c; }
html[data-theme="light"] .bi-stat-icon.info { background: rgba(14,116,144,0.12); color: #0e7490; }

html[data-theme="light"] .bi-pill { background: rgba(255,255,255,0.6); border-color: rgba(84,21,51,0.15); }
html[data-theme="light"] .bi-pill:hover { color: var(--gv-primary-dark); border-color: var(--gv-primary-light); }
html[data-theme="light"] .bi-step .n { background: rgba(255,255,255,0.6); }
html[data-theme="light"] .bi-step.now .n { background: rgba(122,37,80,0.15); color: #7a2550; }
html[data-theme="light"] .bi-step.now { color: #7a2550; }
html[data-theme="light"] .bi-step-sep { background: rgba(84,21,51,0.15); }

html[data-theme="light"] .notif-dd-item:hover,
html[data-theme="light"] .notif-dd-item.unread { background: rgba(84,21,51,0.06); }
html[data-theme="light"] .notif-dd-mark-all { color: var(--gv-primary-light); }
html[data-theme="light"] .notif-dd-mark-all:hover { background: rgba(84,21,51,0.08); }
html[data-theme="light"] .notif-dd-item-icon.sev-info { background: rgba(14,116,144,0.12); }
html[data-theme="light"] .notif-dd-item-icon.sev-warning { background: rgba(217,119,6,0.14); }
html[data-theme="light"] .notif-dd-item-icon.sev-danger { background: rgba(185,28,28,0.12); }

html[data-theme="light"] .gv-topbar-btn { color: #6f5a6d; }
html[data-theme="light"] .gv-topbar-btn:hover { color: var(--gv-primary-dark); background: rgba(84,21,51,0.07); }

html[data-theme="light"] #gvConfirmModal h5 { color: var(--gv-text) !important; }
html[data-theme="light"] #gvConfirmModal p { color: var(--gv-text-muted) !important; }
html[data-theme="light"] #gvConfirmCancel { border-color: rgba(84,21,51,0.25) !important; color: var(--gv-text-muted) !important; }
html[data-theme="light"] #gvConfirmCancel:hover { border-color: var(--gv-primary) !important; color: var(--gv-primary) !important; }

html[data-theme="light"] .gv-modal-content .btn-close { filter: none; }
html[data-theme="light"] .modal-backdrop.show { opacity: 0.35; }

html[data-theme="light"] .gv-ai-input-bar { background: var(--gv-black); }
html[data-theme="light"] .gv-ai-message.user { background: rgba(84,21,51,0.08); border-color: rgba(84,21,51,0.15); }
html[data-theme="light"] .gv-ai-message.assistant { background: rgba(255,255,255,0.7); }
html[data-theme="light"] .gv-ai-input-bar input { background: rgba(255,255,255,0.75); }

html[data-theme="light"] .gv-score-ring::before { background: rgba(255,255,255,0.85); }
html[data-theme="light"] .gv-score-ring { background: conic-gradient(var(--gv-primary-light) calc(var(--score) * 3.6deg), rgba(84,21,51,0.10) 0deg); }

html[data-theme="light"] .auth-wrapper { background: transparent; }
html[data-theme="light"] .auth-card { box-shadow: 0 20px 60px rgba(84,21,51,0.18); }

.page-link {
    background: var(--gv-dark-2);
    border-color: var(--gv-border);
    color: var(--gv-text);
}
.page-link:hover { background: var(--gv-dark-3); color: var(--gv-text); border-color: var(--gv-border); }
.page-item.active .page-link {
    background: linear-gradient(135deg, #541533, #7a2550);
    border-color: transparent;
    color: #fff;
}
.page-item.disabled .page-link {
    background: var(--gv-dark);
    color: var(--gv-text-muted);
    border-color: var(--gv-border);
}
html[data-theme="light"] .page-link { background: rgba(255,255,255,0.65); }
html[data-theme="light"] .page-link:hover { background: rgba(84,21,51,0.07); color: var(--gv-primary); }
html[data-theme="light"] .page-item.disabled .page-link { background: rgba(255,255,255,0.4); }

.gv-nav-item:focus-visible, .gv-topbar-btn:focus-visible, .bi-pill:focus-visible,
.gv-btn:focus-visible, .dropdown-item:focus-visible, .gv-theme-item:focus-visible {
    outline: 2px solid var(--gv-primary-light);
    outline-offset: -2px;
}
html[data-theme="light"] :is(.gv-nav-item, .gv-topbar-btn, .bi-pill, .gv-btn, .dropdown-item, .gv-theme-item):focus-visible {
    outline-color: #541533;
    outline-offset: 1px;
}

.gv-theme-menu {
    position: absolute; top: calc(100% + 8px); right: 0; min-width: 170px;
    background: var(--gv-dark-2);
    border: 1px solid var(--gv-border);
    border-radius: 12px;
    box-shadow: 0 12px 40px rgba(0,0,0,0.45);
    padding: 5px; z-index: 1060; display: none;
}
.gv-theme-menu.open { display: block; animation: gvDropIn 0.18s cubic-bezier(0.16,1,0.3,1); }
.gv-theme-item {
    display: flex; align-items: center; gap: 0.6rem; width: 100%;
    background: none; border: none; border-radius: 8px;
    padding: 8px 12px; font-size: 0.84rem; font-weight: 500;
    color: var(--gv-text); cursor: pointer; text-align: left;
}
.gv-theme-item:hover { background: rgba(84,21,51,0.25); color: #e8a0b8; }
.gv-theme-item .check { margin-left: auto; color: var(--gv-accent-text); visibility: hidden; }
.gv-theme-item[aria-checked="true"] .check { visibility: visible; }
html[data-theme="light"] .gv-theme-menu {
    background: rgba(255,255,255,0.88);
    -webkit-backdrop-filter: blur(28px) saturate(160%);
    backdrop-filter: blur(28px) saturate(160%);
    border-color: rgba(255,255,255,0.7);
    box-shadow: 0 16px 48px rgba(84,21,51,0.18);
}
html[data-theme="light"] .gv-theme-item:hover { background: rgba(84,21,51,0.09); color: var(--gv-primary); }
html[data-theme="light"] .gv-theme-item .check { color: var(--gv-primary); }

@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
    html[data-theme="light"] {
        --gv-dark: #fbf9fc;
        --gv-dark-2: #fdfbfe;
        --gv-gradient-card: linear-gradient(145deg, #ffffff, #faf8fc);
    }
    html[data-theme="light"] .dropdown-menu,
    html[data-theme="light"] .notif-dropdown,
    html[data-theme="light"] .gv-modal-content,
    html[data-theme="light"] .bi-flag-panel .bi-card,
    html[data-theme="light"] .gv-theme-menu { background: #ffffff !important; }
}
@media (prefers-reduced-transparency: reduce) {
    html[data-theme="light"] {
        --gv-dark: #fbf9fc;
        --gv-dark-2: #fdfbfe;
        --gv-gradient-card: linear-gradient(145deg, #ffffff, #faf8fc);
    }
    html[data-theme="light"] .gv-sidebar, html[data-theme="light"] .gv-topbar,
    html[data-theme="light"] .gv-card, html[data-theme="light"] .bi-card,
    html[data-theme="light"] .dropdown-menu, html[data-theme="light"] .notif-dropdown,
    html[data-theme="light"] .gv-modal-content, html[data-theme="light"] .gv-theme-menu {
        -webkit-backdrop-filter: none;
        backdrop-filter: none;
    }
}
@media (prefers-reduced-motion: reduce) {
    html[data-theme] *, html[data-theme] *::before, html[data-theme] *::after {
        animation-duration: 0.01ms !important;
        transition-duration: 0.01ms !important;
    }
}
html[data-theme] body, html[data-theme] .gv-sidebar, html[data-theme] .gv-topbar,
html[data-theme] .bi-card, html[data-theme] .gv-card {
    transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}

/* ══════════════════════════════════════════════════════════════════
   UI POLISH — unified metrics, utilities, responsive fixes
   Single scale for controls, content canvas, and shared BI utilities
   that replace per-page inline patterns.
   ══════════════════════════════════════════════════════════════════ */

:root {
    --gv-ctl-h: 38px;
    --gv-ctl-h-sm: 32px;
    --gv-page-max: 1520px;
}

/* Content canvas — consistent width, no ultrawide sprawl */
.gv-content {
    max-width: var(--gv-page-max);
    margin: 0 auto;
    padding: 1.75rem 2rem 3rem;
}

/* One control height across inputs, selects and buttons */
.gv-input:not(textarea) {
    height: var(--gv-ctl-h);
    padding: 0 0.8rem;
    font-size: 0.88rem;
}
textarea.gv-input { padding: 0.6rem 0.8rem; font-size: 0.88rem; line-height: 1.5; }
select.gv-input,
.gv-select {
    height: var(--gv-ctl-h);
    min-height: var(--gv-ctl-h);
    padding: 0 2rem 0 0.8rem;
    font-size: 0.85rem;
}
input[type="checkbox"].gv-input,
input[type="radio"].gv-input,
input[type="file"].gv-input { width: auto; height: auto; }
.gv-btn {
    min-height: var(--gv-ctl-h);
    padding: 0 1.15rem;
    font-size: 0.88rem;
    white-space: nowrap;
}
.gv-btn-sm { min-height: var(--gv-ctl-h-sm); padding: 0 0.8rem; font-size: 0.8rem; }
/* Compact control variant for dense filter/mapping rows */
.gv-input.gv-input-sm:not(textarea),
select.gv-input.gv-input-sm,
.gv-select.gv-select-sm {
    height: var(--gv-ctl-h-sm);
    min-height: var(--gv-ctl-h-sm);
    font-size: 0.78rem;
    padding-top: 0;
    padding-bottom: 0;
}
.gv-btn:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }
.gv-btn:disabled, .gv-btn[disabled] { opacity: 0.5; cursor: not-allowed; transform: none !important; box-shadow: none !important; }

/* KPI value — responsive balance, never oversized */
.gv-card-value { font-size: clamp(1.45rem, 1.9vw, 1.9rem); font-variant-numeric: tabular-nums; }

/* ── Shared BI utilities (replace repeated inline patterns) ── */
.bi-num  { text-align: right; font-weight: 600; white-space: nowrap; font-variant-numeric: tabular-nums; }
.bi-r    { text-align: right; }
.bi-stack { display: flex; flex-direction: column; gap: 1rem; }
.bi-table th.bi-num, .bi-table td.bi-num { text-align: right; }
.bi-table th.bi-num { font-weight: 600; }
.bi-meta    { font-size: 0.75rem; color: var(--gv-text-muted); }
.bi-meta-sm { font-size: 0.72rem; color: var(--gv-text-muted); }
.bi-el   { min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bi-minw { min-width: 0; }
.bi-flex1 { flex: 1; min-width: 0; }
.bi-chip {
    display: inline-block; background: var(--gv-dark-3); border: 1px solid var(--gv-border);
    border-radius: 6px; padding: 0.1rem 0.45rem; font-size: 0.68rem; white-space: nowrap;
    max-width: 100%; overflow: hidden; text-overflow: ellipsis; vertical-align: middle;
}
.bi-li {
    display: flex; align-items: center; justify-content: space-between; gap: 0.75rem;
    padding: 0.7rem 0; border-bottom: 1px solid var(--gv-border); min-width: 0;
}
.bi-li:last-child { border-bottom: none; }
.bi-ibtn { background: none; border: none; color: var(--gv-text-muted); cursor: pointer; padding: 0.25rem; border-radius: 6px; line-height: 1; }
.bi-ibtn:hover { color: var(--gv-text); background: var(--gv-dark-3); }
.bi-ibtn:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 1px; }

/* Workspace switcher — shared chrome instead of inline styles/JS hover */
.gv-ws-switcher { padding: 0.5rem 0.75rem; border-bottom: 1px solid var(--gv-border); }
.gv-ws-btn {
    background: var(--gv-dark-2); border: 1px solid var(--gv-border); border-radius: 8px;
    padding: 0.45rem 0.6rem; color: var(--gv-text); cursor: pointer; transition: background 0.15s, border-color 0.15s;
}
.gv-ws-btn:hover { background: var(--gv-dark-3); }
.gv-ws-btn:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 1px; }
.gv-ws-icon { width: 26px; height: 26px; border-radius: 6px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: 0.75rem; }
.gv-ws-name { font-size: 0.78rem; font-weight: 600; }
.gv-ws-cap { font-size: 0.6rem; color: var(--gv-text-muted); }
.gv-ws-menu { background: var(--gv-dark-2); border-color: var(--gv-border); padding: 0.3rem; }
.gv-ws-item { color: var(--gv-text); border-radius: 6px; padding: 0.4rem 0.5rem; font-size: 0.78rem; width: 100%; }
.gv-ws-item:hover { background: var(--gv-dark-3); color: var(--gv-text); }
.gv-ws-item.active { background: var(--gv-dark-3); }
.gv-ws-divider { border-color: var(--gv-border); margin: 0.3rem 0; }
.gv-user-info { text-decoration: none; color: inherit; display: flex; align-items: center; gap: 0.6rem; transition: opacity 0.15s; }
.gv-user-info:hover { opacity: 0.8; color: inherit; }
.gv-user-details { min-width: 0; }
.gv-user-details .name, .gv-user-details .role { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* Validation states */
.gv-input.is-invalid, .gv-select.is-invalid { border-color: var(--gv-danger); }
.gv-input.is-invalid:focus, .gv-select.is-invalid:focus { border-color: var(--gv-danger); box-shadow: 0 0 0 3px rgba(220,53,69,0.25); }
.gv-field-error { color: var(--gv-danger); font-size: 0.75rem; margin-top: 0.3rem; line-height: 1.4; }

/* Filter/action bars that wrap naturally */
.bi-filter { display: flex; flex-wrap: wrap; align-items: center; gap: 0.8rem; margin-bottom: 1rem; }
.bi-filter form { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; }
.bi-filter .gv-input, .bi-filter .gv-select { width: auto; }
.bi-filter .gv-input[type="search"] { width: 220px; max-width: 100%; }

/* Tables — numeric rhythm, contained horizontal scroll, long text wraps */
.bi-table { font-variant-numeric: tabular-nums; }
.bi-table td { overflow-wrap: anywhere; }
.bi-table-wrap {
    scrollbar-width: thin;
    scrollbar-color: var(--gv-dark-3) transparent;
    -webkit-overflow-scrolling: touch;
}
.bi-table-wrap::-webkit-scrollbar { height: 8px; width: 8px; }
.bi-table-wrap::-webkit-scrollbar-track { background: transparent; }
.bi-table-wrap::-webkit-scrollbar-thumb { background: var(--gv-dark-3); border-radius: 4px; }
.bi-card > .bi-table-wrap { border-radius: 0 0 13px 13px; }

/* Cards used as links get a clear hover affordance */
a.bi-card { display: block; text-decoration: none; color: inherit; transition: border-color 0.15s, box-shadow 0.15s, transform 0.15s; }
a.bi-card:hover { border-color: var(--gv-primary-light); box-shadow: 0 4px 18px rgba(84, 21, 51, 0.22); color: inherit; }
a.bi-card:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }

/* Head row + actions column stay compact */
.bi-card-h { gap: 0.75rem; }
.bi-card-h > * { min-width: 0; }

/* Topbar — no overlap at small widths */
.gv-topbar-title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
.gv-page-title { font-size: 1.15rem; font-weight: 600; margin: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.gv-tenant-label { color: var(--gv-text-muted); font-size: 0.8rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 220px; }
@media (max-width: 768px) {
    .gv-topbar { padding: 0 0.9rem; }
    .gv-topbar-title, .gv-page-title { font-size: 1rem; }
    .gv-topbar-actions { gap: 0.4rem; }
    .gv-tenant-label { display: none; }
    .gv-content { padding: 1rem 0.9rem 2.5rem; }
}
@media (min-width: 769px) and (max-width: 1024px) {
    .gv-content { padding: 1.4rem 1.4rem 2.75rem; }
}

/* Notification dropdown never overflows the viewport */
.notif-dropdown { width: min(360px, calc(100vw - 20px)); }

/* Confirm modal — cap height, scroll internally, keep footer pinned */
#gvConfirmModal > div {
    max-width: min(400px, calc(100vw - 32px));
    max-height: min(85vh, 640px);
    display: flex; flex-direction: column;
}
#gvConfirmModal > div > div:first-child { overflow-y: auto; min-height: 0; }
#gvConfirmModal > div > div:last-child { flex-shrink: 0; }
#gvConfirmOk:focus-visible, #gvConfirmCancel:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }

/* Document preview — shorter on small screens */
@media (max-width: 768px) {
    .bi-doc-preview, #bi-doc-preview { height: 320px !important; }
}

/* Pagination footer inside cards */
.bi-card-foot { border-top: 1px solid var(--gv-border); padding: 0.8rem 1.25rem; }

/* Legacy .gv-table (root + non-BI pages) — same rhythm as .bi-table */
.gv-table { font-variant-numeric: tabular-nums; }
.gv-table th { font-size: 0.72rem; letter-spacing: 0.06em; white-space: nowrap; }
.gv-table td { overflow-wrap: anywhere; font-size: 0.86rem; }
.table-responsive { scrollbar-width: thin; }

/* Root/legacy pages declare ad-hoc column grids inline — collapse them on mobile */
@media (max-width: 768px) {
    .gv-grid[style*="grid-template-columns"] { grid-template-columns: 1fr !important; }
    .gv-grid > [style*="grid-column"] { grid-column: auto !important; }
    .gv-btn { white-space: normal; }
    .gv-card { padding: 1.1rem; }
}

/* ══ Light-theme contrast fixes for status colors ══ */
html[data-theme="light"] .bi-badge.open,
html[data-theme="light"] .bi-badge.needs_review,
html[data-theme="light"] .bi-badge.pending,
html[data-theme="light"] .bi-badge.medium { color: var(--gv-warning); }
html[data-theme="light"] .bi-badge.in_review,
html[data-theme="light"] .bi-badge.running,
html[data-theme="light"] .bi-badge.uploaded,
html[data-theme="light"] .bi-badge.demo { color: var(--gv-info); }
html[data-theme="light"] .bi-badge.resolved,
html[data-theme="light"] .bi-badge.active,
html[data-theme="light"] .bi-badge.processed,
html[data-theme="light"] .bi-badge.fulfilled,
html[data-theme="light"] .bi-badge.completed { color: var(--gv-success); }
html[data-theme="light"] .bi-badge.failed,
html[data-theme="light"] .bi-badge.archived,
html[data-theme="light"] .bi-badge.high { color: var(--gv-danger); }
html[data-theme="light"] .bi-badge.approved { color: var(--gv-accent-text); }
html[data-theme="light"] .bi-badge.dismissed,
html[data-theme="light"] .bi-badge.superseded,
html[data-theme="light"] .bi-badge.cancelled,
html[data-theme="light"] .bi-badge.low { color: var(--gv-text-muted); }
html[data-theme="light"] .bi-stat-icon.blue { color: var(--gv-accent-text); }
html[data-theme="light"] .bi-step.now, html[data-theme="light"] .bi-step.now .n { color: var(--gv-accent-text); }

/* ══════════════════════════════════════════════════════════════════
   MOTION & ILLUSTRATION — reveals, feedback, skeletons, SVG scenes
   All long-running animation is .gv-anim (paused offscreen) and every
   rule is covered by the global prefers-reduced-motion block above.
   ══════════════════════════════════════════════════════════════════ */

/* Scroll reveal — armed by JS only, so no-JS/no-IO never hides content */
[data-reveal].gv-armed { opacity:0; transform:translateY(10px); transition:opacity .3s ease, transform .3s ease; }
[data-reveal].gv-armed.gv-in { opacity:1; transform:none; }

/* Flash/feedback — server-rendered alerts only animate once on load */
@keyframes gvRise { from { opacity:0; transform:translateY(-6px); } to { opacity:1; transform:none; } }
@keyframes gvPop { 0% { transform:scale(.96); opacity:0; } 70% { transform:scale(1.01); } 100% { transform:scale(1); opacity:1; } }
.gv-alert { animation:gvRise .25s ease; }
.gv-alert-success { animation:gvPop .3s cubic-bezier(.16,1,.3,1); }

/* Genuine processing spin — only rendered while status is processing */
@keyframes gvSpin { to { transform:rotate(360deg); } }
.gv-spin { display:inline-block; animation:gvSpin 1s linear infinite; }

/* Skeleton loading (real async loads only) */
@keyframes gvShimmer { to { background-position:-200% 0; } }
.gv-skeleton { position:relative; overflow:hidden; background:var(--gv-dark-2); border-radius:6px; }
.gv-skeleton::after { content:''; position:absolute; inset:0; background:linear-gradient(90deg,transparent,rgba(122,37,80,.12),transparent); background-size:200% 100%; animation:gvShimmer 1.4s infinite; }
.gv-skel-line { height:11px; margin-bottom:0.7rem; }
html[data-theme="light"] .gv-skeleton { background:#efe4ea; }
html[data-theme="light"] .gv-skeleton::after { background:linear-gradient(90deg,transparent,rgba(255,255,255,.7),transparent); background-size:200% 100%; }

/* Table row scan-ability + panel-opened row state */
.bi-table tbody tr { transition:background .12s; }
.bi-table tbody tr:hover { background:rgba(122,37,80,.05); }
.bi-table tbody tr.selected { background:rgba(122,37,80,.09); }
html[data-theme="light"] .bi-table tbody tr:hover { background:rgba(122,37,80,.045); }
html[data-theme="light"] .bi-table tbody tr.selected { background:rgba(122,37,80,.07); }

/* Hover lift for KPI/interactive cards — opt-in class only */
.gv-hover-lift { transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease; }
.gv-hover-lift:hover { transform:translateY(-2px); box-shadow:0 10px 26px -12px rgba(0,0,0,.45); border-color:rgba(122,37,80,.35); }

/* Expandable evidence/details chevron */
.bi-details summary { list-style:none; cursor:pointer; display:flex; align-items:center; gap:0.35rem; }
.bi-details summary .bi-chevron-right { transition:transform .15s; font-size:.62rem; }
.bi-details[open] > summary .bi-chevron-right { transform:rotate(90deg); }

/* Decorative illustration scenes — never look like controls */
.gv-ill { color:var(--gv-primary-light); }
.gv-ill .acc { stroke:var(--gv-accent-text); }
.gv-ill .soft { fill:rgba(196,64,128,.12); stroke:none; }
.bi-empty .gv-ill { display:block; margin:0 auto .9rem; }

@keyframes gvBob { 0%,100% { transform:translateY(0); } 50% { transform:translateY(-4px); } }
@keyframes gvSweep { 0%,100% { transform:translateX(0); } 50% { transform:translateX(8px); } }
@keyframes gvSlideBox { 0% { transform:translateX(0); opacity:0; } 12% { opacity:1; } 88% { opacity:1; } 100% { transform:translateX(96px); opacity:0; } }
.gv-anim .bob { animation:gvBob 3.2s ease-in-out infinite; }
.gv-anim .sweep { animation:gvSweep 3s ease-in-out infinite; }
.gv-anim .slidebox { animation:gvSlideBox 5s ease-in-out infinite; }
.gv-anim.gv-paused *, .gv-anim.gv-paused { animation-play-state:paused !important; }

/* Chart line draw-in — real values, animates once on render */
@keyframes gvDraw { to { stroke-dashoffset: 0; } }
.gv-chart-draw { stroke-dasharray:1200; stroke-dashoffset:1200; animation:gvDraw 1.1s ease-out .15s forwards; }

/* Processing/running badges — gentle pulse, real backend status only */
@keyframes gvPulse { 0%,100% { opacity:1; } 50% { opacity:.55; } }
.bi-badge.processing, .bi-badge.running { animation:gvPulse 1.6s ease-in-out infinite; }
.gv-hover-lift.gv-in:hover { transform:translateY(-2px); box-shadow:0 10px 26px -12px rgba(0,0,0,.45); }

/* ══════════════════════════════════════════════════════════════════
   BOOTSTRAP ↔ GEOVIX TOKEN BRIDGE
   Bootstrap utilities/components read --bs-* vars; mapping them to the
   theme tokens makes text-muted, form controls, alerts, modals and
   outline buttons follow the active theme in one place.
   ══════════════════════════════════════════════════════════════════ */
:root {
    --bs-body-color: var(--gv-text);
    --bs-body-bg: var(--gv-black);
    --bs-secondary-color: var(--gv-text-muted);
    --bs-tertiary-color: var(--gv-text-muted);
    --bs-tertiary-bg: var(--gv-dark-3);
    --bs-emphasis-color: var(--gv-text);
    --bs-heading-color: var(--gv-text);
    --bs-border-color: var(--gv-border);
    --bs-border-color-translucent: var(--gv-border);
    --bs-link-color: var(--gv-accent-text);
    --bs-link-color-rgb: 122, 37, 80;
    --bs-link-hover-color: #c44080;
    --bs-link-hover-color-rgb: 196, 64, 128;
    --bs-form-valid-color: var(--gv-success);
    --bs-form-valid-border-color: var(--gv-success);
    --bs-form-invalid-color: var(--gv-danger);
    --bs-form-invalid-border-color: var(--gv-danger);
}
html[data-theme="light"] {
    --bs-link-color: var(--gv-primary);
    --bs-link-color-rgb: 84, 21, 51;
    --bs-link-hover-color: var(--gv-primary-light);
    --bs-link-hover-color-rgb: 122, 37, 80;
}

/* Themed form controls (Bootstrap class variants used outside .gv-input) */
.form-control,
.input-group-text {
    background-color: var(--gv-dark-2);
    border-color: var(--gv-border);
    color: var(--gv-text);
}
.form-control:focus {
    background-color: var(--gv-dark-2);
    border-color: var(--gv-primary);
    color: var(--gv-text);
    box-shadow: 0 0 0 3px var(--focus-ring);
}
.form-control::placeholder { color: var(--gv-text-muted); opacity: 0.65; }
.form-control:disabled,
.form-control[readonly] {
    background-color: var(--gv-dark-3);
    color: var(--gv-text-muted);
    border-color: var(--gv-border);
}
.form-select {
    background-color: var(--gv-dark-2);
    border-color: var(--gv-border);
    color: var(--gv-text);
}
.form-check-input {
    background-color: var(--gv-dark-2);
    border-color: var(--gv-border);
}
.form-check-input:checked {
    background-color: var(--gv-primary-light);
    border-color: var(--gv-primary-light);
}

/* Outline-secondary button — muted border, readable hover in both themes */
.btn-outline-secondary {
    --bs-btn-color: var(--gv-text-muted);
    --bs-btn-border-color: var(--gv-border);
    --bs-btn-hover-color: var(--gv-text);
    --bs-btn-hover-bg: var(--gv-dark-3);
    --bs-btn-hover-border-color: var(--gv-primary-light);
    --bs-btn-active-color: var(--gv-text);
    --bs-btn-active-bg: var(--gv-dark-3);
    --bs-btn-active-border-color: var(--gv-primary);
    --bs-btn-disabled-color: var(--gv-text-muted);
    --bs-btn-disabled-border-color: var(--gv-border);
}

/* Bootstrap alerts match .gv-alert palette */
.alert-success   { --bs-alert-color: var(--gv-success);   --bs-alert-bg: rgba(40,167,69,0.12);   --bs-alert-border-color: rgba(40,167,69,0.35); }
.alert-danger    { --bs-alert-color: var(--gv-danger);    --bs-alert-bg: rgba(220,53,69,0.10);   --bs-alert-border-color: rgba(220,53,69,0.35); }
.alert-warning   { --bs-alert-color: var(--gv-warning);   --bs-alert-bg: rgba(255,193,7,0.10);   --bs-alert-border-color: rgba(255,193,7,0.35); }
.alert-info      { --bs-alert-color: var(--gv-info);      --bs-alert-bg: rgba(23,162,184,0.10);  --bs-alert-border-color: rgba(23,162,184,0.35); }
.alert-secondary { --bs-alert-color: var(--gv-text-muted); --bs-alert-bg: var(--gv-dark-3);       --bs-alert-border-color: var(--gv-border); }
.alert { border-width: 1px; }

/* Generic modal chrome — pages that skip .gv-modal-content still theme */
.modal-content {
    background-color: var(--gv-dark);
    color: var(--gv-text);
    border-color: var(--gv-border);
}
.modal-header, .modal-footer { border-color: var(--gv-border); }
.modal-content .btn-close { filter: invert(1) grayscale(100%) brightness(200%); }
html[data-theme="light"] .modal-content {
    background-color: rgba(255, 255, 255, 0.92);
    -webkit-backdrop-filter: blur(28px) saturate(160%);
    backdrop-filter: blur(28px) saturate(160%);
}
html[data-theme="light"] .modal-content .btn-close,
html[data-theme="light"] .btn-close-white { filter: none; }

/* Bootstrap tables: follow theme if any page drops .gv-table */
.table {
    --bs-table-color: var(--gv-text);
    --bs-table-bg: transparent;
    --bs-table-border-color: var(--gv-border);
    --bs-table-hover-color: var(--gv-text);
    --bs-table-hover-bg: rgba(122,37,80,0.05);
    --bs-table-striped-color: var(--gv-text);
    --bs-table-striped-bg: var(--gv-dark-3);
    --bs-table-active-color: var(--gv-text);
    --bs-table-active-bg: var(--gv-dark-3);
}

/* ══ Light mode: rescue legacy hardcoded bright colors to AA-safe tones ══ */
/* Class-based fixes */
html[data-theme="light"] .pi-class-exceptional { color: #157347; }
html[data-theme="light"] .pi-class-on_track { color: #0369a1; }
html[data-theme="light"] .pi-insight-icon-high,
html[data-theme="light"] .pi-sev-badge-high { color: #b91c1c; }
html[data-theme="light"] .pi-performer-row:hover,
html[data-theme="light"] .pi-insight-item:hover { background: rgba(84,21,51,0.05); }

/* Inline-style rescues — catches one-off status hexes that bypass classes */
html[data-theme="light"] [style*="color:#ef4444"],
html[data-theme="light"] [style*="color: #ef4444"],
html[data-theme="light"] [style*="color:#ff6b7a"],
html[data-theme="light"] [style*="color:#f87171"],
html[data-theme="light"] [style*="color: #f87171"],
html[data-theme="light"] [style*="color:#dc2626"],
html[data-theme="light"] [style*="color: #dc2626"] { color: #b91c1c !important; }
html[data-theme="light"] [style*="color:#f59e0b"],
html[data-theme="light"] [style*="color: #f59e0b"],
html[data-theme="light"] [style*="color:#d97706"],
html[data-theme="light"] [style*="color: #d97706"],
html[data-theme="light"] [style*="color:#ffc107"],
html[data-theme="light"] [style*="color: #ffc107"] { color: #b45309 !important; }
html[data-theme="light"] [style*="color:#10b981"],
html[data-theme="light"] [style*="color: #10b981"],
html[data-theme="light"] [style*="color:#6fcf97"],
html[data-theme="light"] [style*="color: #6fcf97"],
html[data-theme="light"] [style*="color:#4cdf8b"],
html[data-theme="light"] [style*="color: #4cdf8b"] { color: #157347 !important; }
html[data-theme="light"] [style*="color:#3b82f6"],
html[data-theme="light"] [style*="color: #3b82f6"],
html[data-theme="light"] [style*="color:#0dcaf0"],
html[data-theme="light"] [style*="color: #0dcaf0"] { color: #0369a1 !important; }
html[data-theme="light"] [style*="color:#8b5cf6"],
html[data-theme="light"] [style*="color: #8b5cf6"] { color: #6d28d9 !important; }
html[data-theme="light"] [style*="color:#e8a0b8"],
html[data-theme="light"] [style*="color: #e8a0b8"] { color: var(--gv-accent-text) !important; }

/* Link hover depth in light mode */
html[data-theme="light"] a:hover { color: var(--gv-primary-dark); }

/* ══ Card & table rhythm — shared BI/legacy standards ══ */
/* Stacked cards separate automatically; inline margins still win */
.bi-card { margin-bottom: 1.25rem; }
/* Grids/panels manage their own gaps — don't double-space children */
.bi-cols-wide > *, .bi-cols-narrow > *, .bi-cols-3 > *,
.bi-split > *, .bi-stack > .bi-card, .gv-grid .bi-card, .row .bi-card { margin-bottom: 0; }

/* Align table edges with card header padding (1.25rem) */
.bi-table th:first-child, .bi-table td:first-child { padding-left: 1.25rem; }
.bi-table th:last-child,  .bi-table td:last-child  { padding-right: 1.25rem; }
/* Same alignment for legacy .gv-table inside .gv-card (1.5rem padding) */
.gv-card .gv-table th:first-child, .gv-card .gv-table td:first-child { padding-left: 1.5rem; }
.gv-card .gv-table th:last-child,  .gv-card .gv-table td:last-child  { padding-right: 1.5rem; }
.table-responsive > .gv-table th:first-child,
.table-responsive > .gv-table td:first-child { padding-left: 0.25rem; }

/* Consistent empty-state rows across all BI tables */
.bi-table td.bi-table-empty {
    padding: 2rem 1.25rem;
    text-align: center;
    color: var(--gv-text-muted);
    font-size: 0.83rem;
}

/* First content column never squishes below its content */
.bi-table td.bi-col-fixed, .bi-table th.bi-col-fixed { white-space: nowrap; width: 1%; }

/* ══════════════════════════════════════════════════════════════════
   LIQUID GLASS DESIGN SYSTEM — unified material layer
   Reads --glass-* tokens so dark (smoky plum) and light (pearl) themes
   share one component implementation.
   ══════════════════════════════════════════════════════════════════ */

/* ── Glass surfaces: cards, panels, tools, auth ── */
.gv-card, .bi-card, .gv-tool-card, .auth-card {
    background: var(--glass-bg);
    -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(150%);
    backdrop-filter: blur(var(--glass-blur)) saturate(150%);
    border: 1px solid var(--glass-border);
    border-top-color: var(--glass-edge);
    border-radius: var(--radius-card);
    box-shadow: var(--glass-inner), var(--glass-shadow);
}
.gv-card:hover {
    border-color: rgba(196, 64, 128, 0.30);
    border-top-color: var(--glass-edge);
    box-shadow: var(--glass-inner), var(--glass-shadow-hover);
    transform: translateY(-2px);
}
.gv-tool-card:hover {
    border-color: rgba(196, 64, 128, 0.30);
    box-shadow: var(--glass-inner), var(--glass-shadow-hover);
}
.bi-card-h { border-bottom-color: var(--glass-border); }

/* ── App chrome: frosted sidebar + topbar ── */
.gv-sidebar {
    background: var(--bg-glass);
    -webkit-backdrop-filter: blur(30px) saturate(170%);
    backdrop-filter: blur(30px) saturate(170%);
    border-right: 1px solid var(--glass-border);
    box-shadow: var(--glass-inner);
}
.gv-topbar {
    background: var(--bg-glass);
    -webkit-backdrop-filter: blur(30px) saturate(170%);
    backdrop-filter: blur(30px) saturate(170%);
    border-bottom: 1px solid var(--glass-border);
    box-shadow: var(--glass-inner);
}
.gv-sidebar-footer, .gv-sidebar-brand, .gv-ws-switcher { border-color: var(--glass-border) !important; }

/* ── Navigation: soft pills, burgundy active wash ── */
.gv-sidebar-nav { padding: 1rem 10px; }
.gv-nav-section { padding: 0.5rem 0.7rem; }
.gv-nav-item {
    margin: 1px 0;
    padding: 0.52rem 0.7rem;
    border-radius: 10px;
    border-left: none;
    transition: background 0.18s var(--ease-glass), color 0.18s var(--ease-glass);
}
.gv-nav-item:hover { background: var(--glass-pop); }
.gv-nav-item.active {
    background: linear-gradient(90deg, rgba(122, 37, 80, 0.38), rgba(122, 37, 80, 0.10));
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.07), inset 3px 0 0 var(--gv-primary-light);
    color: #fff;
}
.gv-nav-parent.gv-nav-item { width: 100%; }
.gv-nav-sub { padding-left: 1.1rem; }
.gv-nav-sub .gv-nav-item { padding: 0.4rem 0.7rem; }
html[data-theme="light"] .gv-nav-item.active {
    color: var(--gv-primary);
    background: linear-gradient(90deg, rgba(122, 37, 80, 0.15), rgba(122, 37, 80, 0.04));
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.6), inset 3px 0 0 var(--gv-primary-light);
}

/* ── Buttons: pill geometry, glossy primary, glass outline ── */
.gv-btn { border-radius: var(--radius-ctl); transition: all 0.18s var(--ease-glass); }
.gv-btn:active { transform: translateY(0.5px) scale(0.985); }
.gv-btn-primary {
    background: linear-gradient(135deg, #71204a 0%, #541533 55%, #3d0f26 100%);
    border: 1px solid rgba(232, 160, 184, 0.22);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.16), 0 6px 20px rgba(84, 21, 51, 0.40);
}
.gv-btn-primary:hover {
    transform: translateY(-1px);
    filter: brightness(1.09);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22), 0 10px 28px rgba(84, 21, 51, 0.5);
}
.gv-btn-outline {
    background: var(--glass-bg-input);
    border: 1px solid var(--glass-border);
    -webkit-backdrop-filter: blur(10px);
    backdrop-filter: blur(10px);
}
.gv-btn-outline:hover {
    border-color: var(--gv-primary-light);
    background: rgba(122, 37, 80, 0.18);
    transform: translateY(-1px);
}
.gv-btn-danger { border-radius: var(--radius-ctl); }
.btn-outline-secondary { border-radius: var(--radius-ctl); }

/* ── Form controls: frosted fields, luminous focus ── */
.gv-input, .gv-select, .bi-cell-input, .form-control, .form-select, .input-group-text {
    border-radius: var(--radius-ctl);
    background: var(--glass-bg-input);
    border-color: var(--glass-border);
    transition: border-color 0.2s var(--ease-glass), box-shadow 0.2s var(--ease-glass), background 0.2s var(--ease-glass);
}
.gv-input:focus, .gv-select:focus, .bi-cell-input:focus,
.form-control:focus, .form-select:focus {
    border-color: var(--gv-primary-light);
    box-shadow: 0 0 0 3px var(--focus-ring), inset 0 1px 0 rgba(255, 255, 255, 0.07);
}
.gv-input:hover:not(:focus), .gv-select:hover:not(:focus) { border-color: rgba(196, 64, 128, 0.28); }
option { background: #1c151a; color: var(--gv-text); }
html[data-theme="light"] option,
html[data-theme="light"] .gv-input option,
html[data-theme="light"] .gv-select option,
html[data-theme="light"] .form-select option,
html[data-theme="light"] .form-control option { background: #ffffff; color: var(--gv-text); }
.form-check-input { background-color: var(--glass-bg-input); border-color: var(--glass-border); }
.form-check-input:checked { background-color: var(--gv-primary-light); border-color: var(--gv-primary-light); }
.form-check-input:focus { box-shadow: 0 0 0 3px var(--focus-ring); }

/* ── Tabs & filter pills ── */
.gv-tab, .bi-pill {
    border-radius: 999px;
    -webkit-backdrop-filter: blur(10px);
    backdrop-filter: blur(10px);
    transition: all 0.18s var(--ease-glass);
}
.gv-tab.active {
    background: linear-gradient(135deg, rgba(122, 37, 80, 0.85), rgba(84, 21, 51, 0.75));
    color: #fff;
    border-color: rgba(232, 160, 184, 0.30);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.14), 0 4px 14px rgba(84, 21, 51, 0.35);
}
.bi-pill.active {
    background: linear-gradient(135deg, rgba(196, 64, 128, 0.85), rgba(84, 21, 51, 0.8));
    border-color: transparent;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.16), 0 4px 14px rgba(84, 21, 51, 0.35);
}
html[data-theme="light"] .gv-tab.active,
html[data-theme="light"] .bi-pill.active {
    background: linear-gradient(135deg, #7a2550, #541533);
    color: #fff;
    border-color: transparent;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18), 0 4px 14px rgba(122, 37, 80, 0.3);
}

/* ── Tables: hairline dividers, glass hover wash ── */
.bi-table th, .gv-table th {
    font-size: 0.66rem;
    letter-spacing: 0.09em;
    color: var(--gv-text-muted);
    border-bottom-color: var(--glass-border);
}
.bi-table td, .gv-table td, .table > :not(caption) > * > * { border-bottom-color: var(--glass-border); }
.bi-table tbody tr:hover, .gv-table tbody tr:hover { background: var(--glass-pop); }
html[data-theme="light"] .bi-table tbody tr:hover,
html[data-theme="light"] .gv-table tbody tr:hover { background: rgba(122, 37, 80, 0.045); }
.bi-table tr.selected { background: rgba(122, 37, 80, 0.22); }
html[data-theme="light"] .bi-table tr.selected { background: rgba(122, 37, 80, 0.10); }

/* ── Status badges: translucent tint + hairline edge ── */
.bi-badge { border: 1px solid rgba(255, 255, 255, 0.09); letter-spacing: 0.015em; }
html[data-theme="light"] .bi-badge { border-color: rgba(122, 37, 80, 0.12); }

/* ── Alerts & banners: frosted tint ── */
.gv-alert, .alert {
    border-radius: var(--radius-ctl);
    -webkit-backdrop-filter: blur(14px) saturate(140%);
    backdrop-filter: blur(14px) saturate(140%);
}
.bi-demo-banner { border-radius: var(--radius-ctl); -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px); }

/* ── Floating layers: dropdowns, menus, notifications ── */
.dropdown-menu, .notif-dropdown, .gv-ws-menu, .gv-theme-menu {
    background: var(--glass-bg-strong);
    -webkit-backdrop-filter: blur(30px) saturate(170%);
    backdrop-filter: blur(30px) saturate(170%);
    border: 1px solid var(--glass-border);
    border-top-color: var(--glass-edge);
    border-radius: 14px;
    box-shadow: var(--glass-inner), var(--glass-shadow);
}
.dropdown-menu .dropdown-item, .gv-ws-item { border-radius: 8px; }
.dropdown-menu .dropdown-item:hover, .dropdown-menu .dropdown-item:focus,
.gv-ws-item:hover { background: var(--glass-pop); }
html[data-theme="light"] .dropdown-menu .dropdown-item:hover,
html[data-theme="light"] .dropdown-menu .dropdown-item:focus,
html[data-theme="light"] .gv-ws-item:hover { background: rgba(122, 37, 80, 0.07); }
.dropdown-menu .dropdown-divider, .gv-ws-divider { border-color: var(--glass-border); }


/* -- Modals & dialogs: deep frosted panels -- */
.gv-modal-content, .modal-content {
    background: var(--glass-bg-strong) !important;
    -webkit-backdrop-filter: blur(32px) saturate(170%);
    backdrop-filter: blur(32px) saturate(170%);
    border: 1px solid var(--glass-border) !important;
    border-top-color: var(--glass-edge) !important;
    border-radius: var(--radius-card) !important;
    box-shadow: var(--glass-inner), var(--glass-shadow) !important;
}
.modal-header, .modal-footer { border-color: var(--glass-border); }
#gvConfirmModal { backdrop-filter: blur(12px) saturate(140%); -webkit-backdrop-filter: blur(12px) saturate(140%); }
#gvConfirmModal > div {
    background: var(--glass-bg-strong) !important;
    border: 1px solid var(--glass-border) !important;
    border-top-color: var(--glass-edge) !important;
    border-radius: var(--radius-card) !important;
    box-shadow: var(--glass-inner), var(--glass-shadow) !important;
}
html[data-theme="light"] .gv-modal-content,
html[data-theme="light"] .modal-content { background: rgba(255, 255, 255, 0.88) !important; }

/* -- Extraction steps: glass step nodes -- */
.bi-step .n {
    background: var(--glass-bg-input);
    border-color: var(--glass-border);
    box-shadow: var(--glass-inner);
}
.bi-step.now .n {
    background: rgba(122, 37, 80, 0.4);
    border-color: var(--gv-primary-light);
    box-shadow: 0 0 0 4px rgba(122, 37, 80, 0.14);
}
.bi-step-sep { background: var(--glass-border); }

/* -- Pagination -- */
.page-link {
    background: var(--glass-bg-input);
    border-color: var(--glass-border);
    border-radius: 10px;
    transition: all 0.15s var(--ease-glass);
}
.page-item.active .page-link {
    background: linear-gradient(135deg, #7a2550, #541533);
    border-color: rgba(232, 160, 184, 0.3);
    box-shadow: 0 4px 14px rgba(84, 21, 51, 0.35);
}
html[data-theme="light"] .page-link { background: rgba(255, 255, 255, 0.6); }

/* -- Workspace switcher -- */
.gv-ws-btn {
    background: var(--glass-bg-input);
    border-color: var(--glass-border);
    border-radius: 10px;
}
.gv-ws-btn:hover { background: var(--glass-pop); border-color: rgba(196, 64, 128, 0.28); }
html[data-theme="light"] .gv-ws-btn:hover { background: rgba(122, 37, 80, 0.06); }

/* -- Chips & inline lists -- */
.bi-chip { background: var(--glass-bg-input); border-color: var(--glass-border); border-radius: 8px; }
.bi-li { border-bottom-color: var(--glass-border); }
.bi-ibtn:hover { background: var(--glass-pop); }

/* -- AI chat bubbles -- */
.gv-ai-message.assistant {
    background: var(--glass-bg-input);
    border: 1px solid var(--glass-border);
    border-radius: 14px;
}

/* -- KPI typography refinement -- */
.gv-card-value { letter-spacing: -0.02em; }
.bi-head h1 { letter-spacing: -0.01em; }

/* -- Scrollbars: slimmer translucent -- */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: rgba(122, 37, 80, 0.4); border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: rgba(122, 37, 80, 0.6); }
html[data-theme="light"] ::-webkit-scrollbar-thumb { background: rgba(122, 37, 80, 0.22); }
html[data-theme="light"] ::-webkit-scrollbar-thumb:hover { background: rgba(122, 37, 80, 0.38); }

/* -- Focus visibility (keyboard nav) -- */
.gv-nav-item:focus-visible, .gv-tab:focus-visible, .bi-pill:focus-visible,
.dropdown-item:focus-visible, a:focus-visible {
    outline: 2px solid var(--focus-ring);
    outline-offset: 2px;
}

/* -- Reduced transparency: opaque fallbacks for BOTH themes -- */
@media (prefers-reduced-transparency: reduce) {
    :root {
        --gv-dark: #1a1419;
        --gv-dark-2: #211a20;
        --gv-dark-3: #2a2128;
        --gv-gradient-card: #1e171d;
        --bg-glass: #1a1419;
        --glass-bg: #1e171d;
        --glass-bg-strong: #221a20;
        --glass-bg-input: #211a20;
        --glass-blur: 0px;
    }
    html[data-theme="light"] {
        --gv-dark: #ffffff;
        --gv-dark-2: #ffffff;
        --gv-dark-3: #f4eef4;
        --gv-gradient-card: #ffffff;
        --bg-glass: #ffffff;
        --glass-bg: #ffffff;
        --glass-bg-strong: #ffffff;
        --glass-bg-input: #ffffff;
        --glass-blur: 0px;
    }
    * { -webkit-backdrop-filter: none !important; backdrop-filter: none !important; }
}

/* ══════════════════════════════════════════════════════════════════
   LIQUID GLASS ATMOSPHERE — floating orbs & glass bubbles
   Rendered by layouts/partials/orbs.blade.php behind all content.
   Big blurred glow blobs for depth + crisp-edged glass spheres.
   ══════════════════════════════════════════════════════════════════ */

.gv-orbs {
    position: fixed;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    overflow: hidden;
}
.gv-orb {
    position: absolute;
    border-radius: 50%;
    will-change: transform;
}

/* ── Dark theme: smoky plum / violet / blush glow ── */
.gv-orb-1 { /* oversized burgundy mass — upper left */
    width: 640px; height: 640px; top: -14%; left: -12%;
    background: radial-gradient(circle at 50% 50%, rgba(122, 37, 80, 0.55), rgba(84, 21, 51, 0.28) 55%, transparent 72%);
    filter: blur(60px);
    animation: gvOrbDriftA 26s ease-in-out infinite alternate;
}
.gv-orb-2 { /* violet wash — upper right */
    width: 480px; height: 480px; top: -6%; right: -10%;
    background: radial-gradient(circle at 50% 50%, rgba(139, 92, 246, 0.32), rgba(96, 60, 158, 0.16) 58%, transparent 74%);
    filter: blur(70px);
    animation: gvOrbDriftB 32s ease-in-out infinite alternate;
}
.gv-orb-3 { /* blush glow — mid left, behind content */
    width: 360px; height: 360px; top: 42%; left: 26%;
    background: radial-gradient(circle at 50% 50%, rgba(196, 64, 128, 0.30), rgba(196, 64, 128, 0.10) 60%, transparent 72%);
    filter: blur(55px);
    animation: gvOrbDriftC 22s ease-in-out infinite alternate;
}
.gv-orb-4 { /* deep plum base — bottom center-right */
    width: 720px; height: 720px; bottom: -28%; right: 8%;
    background: radial-gradient(circle at 50% 50%, rgba(84, 21, 51, 0.55), rgba(61, 15, 38, 0.30) 55%, transparent 72%);
    filter: blur(90px);
    animation: gvOrbDriftA 38s ease-in-out infinite alternate-reverse;
}
.gv-orb-5 { /* crisp glass sphere — upper right quadrant */
    width: 230px; height: 230px; top: 22%; right: 10%;
    background: radial-gradient(circle at 32% 28%,
        rgba(255, 255, 255, 0.16), rgba(232, 160, 184, 0.10) 34%,
        rgba(122, 37, 80, 0.18) 68%, rgba(84, 21, 51, 0.28));
    border: 1px solid rgba(255, 255, 255, 0.15);
    box-shadow: inset 0 2px 18px rgba(255, 255, 255, 0.10),
                inset 0 -12px 28px rgba(84, 21, 51, 0.35),
                0 18px 50px rgba(0, 0, 0, 0.30);
    filter: blur(1.5px);
    animation: gvOrbDriftB 20s ease-in-out infinite alternate;
}
.gv-orb-6 { /* smaller glass sphere — lower left */
    width: 140px; height: 140px; bottom: 16%; left: 8%;
    background: radial-gradient(circle at 30% 26%,
        rgba(255, 255, 255, 0.14), rgba(196, 64, 128, 0.10) 38%,
        rgba(84, 21, 51, 0.24) 78%);
    border: 1px solid rgba(255, 255, 255, 0.13);
    box-shadow: inset 0 2px 12px rgba(255, 255, 255, 0.09),
                0 14px 36px rgba(0, 0, 0, 0.28);
    filter: blur(1px);
    animation: gvOrbDriftC 24s ease-in-out infinite alternate-reverse;
}
.gv-orb-7 { /* tiny accent sphere — center right */
    width: 90px; height: 90px; top: 58%; right: 30%;
    background: radial-gradient(circle at 30% 28%,
        rgba(255, 255, 255, 0.18), rgba(139, 92, 246, 0.12) 45%,
        rgba(96, 60, 158, 0.22) 80%);
    border: 1px solid rgba(255, 255, 255, 0.14);
    box-shadow: inset 0 1px 8px rgba(255, 255, 255, 0.10);
    animation: gvOrbDriftA 18s ease-in-out infinite alternate;
}

@keyframes gvOrbDriftA { from { transform: translate3d(0, 0, 0); } to { transform: translate3d(26px, -30px, 0) scale(1.04); } }
@keyframes gvOrbDriftB { from { transform: translate3d(0, 0, 0); } to { transform: translate3d(-30px, 22px, 0) scale(1.05); } }
@keyframes gvOrbDriftC { from { transform: translate3d(0, 0, 0); } to { transform: translate3d(18px, 26px, 0) scale(0.97); } }

/* ── Light theme: blush / lavender / plum bubbles over pearl ── */
html[data-theme="light"] .gv-orb-1 {
    background: radial-gradient(circle at 50% 50%, rgba(196, 64, 128, 0.32), rgba(196, 64, 128, 0.14) 55%, transparent 72%);
    filter: blur(65px);
}
html[data-theme="light"] .gv-orb-2 {
    background: radial-gradient(circle at 50% 50%, rgba(139, 92, 246, 0.30), rgba(178, 146, 240, 0.16) 58%, transparent 74%);
    filter: blur(72px);
}
html[data-theme="light"] .gv-orb-3 {
    background: radial-gradient(circle at 50% 50%, rgba(240, 168, 196, 0.42), rgba(240, 168, 196, 0.16) 60%, transparent 72%);
    filter: blur(50px);
}
html[data-theme="light"] .gv-orb-4 {
    background: radial-gradient(circle at 50% 50%, rgba(122, 37, 80, 0.26), rgba(122, 37, 80, 0.10) 55%, transparent 72%);
    filter: blur(88px);
}
html[data-theme="light"] .gv-orb-5 {
    background: radial-gradient(circle at 32% 28%,
        rgba(255, 255, 255, 0.9), rgba(250, 230, 240, 0.55) 34%,
        rgba(232, 160, 184, 0.28) 68%, rgba(196, 64, 128, 0.22));
    border-color: rgba(255, 255, 255, 0.85);
    box-shadow: inset 0 2px 18px rgba(255, 255, 255, 0.85),
                inset 0 -12px 28px rgba(196, 64, 128, 0.15),
                0 22px 55px rgba(122, 37, 80, 0.16);
}
html[data-theme="light"] .gv-orb-6 {
    background: radial-gradient(circle at 30% 26%,
        rgba(255, 255, 255, 0.85), rgba(196, 64, 128, 0.16) 42%,
        rgba(122, 37, 80, 0.20) 80%);
    border-color: rgba(255, 255, 255, 0.8);
    box-shadow: inset 0 2px 12px rgba(255, 255, 255, 0.75),
                0 16px 42px rgba(122, 37, 80, 0.14);
}
html[data-theme="light"] .gv-orb-7 {
    background: radial-gradient(circle at 30% 28%,
        rgba(255, 255, 255, 0.9), rgba(178, 146, 240, 0.30) 45%,
        rgba(139, 92, 246, 0.24) 80%);
    border-color: rgba(255, 255, 255, 0.85);
    box-shadow: inset 0 1px 8px rgba(255, 255, 255, 0.8),
                0 12px 30px rgba(139, 92, 246, 0.16);
}

/* Orbs never intercept clicks or show on print */
@media print { .gv-orbs { display: none; } }

/* ══════════════════════════════════════════════════════════════════
   TABULATOR GLASS THEME — skins vendored Tabulator 6.x onto tokens
   ══════════════════════════════════════════════════════════════════ */

.gv-grid.tabulator {
    background: transparent;
    border: none;
    font-size: 0.84rem;
    color: var(--gv-text);
}
.gv-grid.tabulator .tabulator-header {
    background: transparent;
    border-bottom: 1px solid var(--glass-border);
    color: var(--gv-text-muted);
}
.gv-grid.tabulator .tabulator-header .tabulator-col {
    background: transparent;
    border-right: none;
    font-size: 0.66rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.09em;
    color: var(--gv-text-muted);
    transition: color 0.15s var(--ease-glass), background 0.15s var(--ease-glass);
}
.gv-grid.tabulator .tabulator-header .tabulator-col:hover { background: var(--glass-pop); color: var(--gv-text); }
.gv-grid.tabulator .tabulator-header .tabulator-col .tabulator-col-title { font-weight: inherit; }
.gv-grid.tabulator .tabulator-header .tabulator-col .tabulator-col-sorter { color: var(--gv-primary-light); }
.gv-grid.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-title,
.gv-grid.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-title { color: var(--gv-accent-text); }
.gv-grid.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input {
    background: var(--glass-bg-input);
    border: 1px solid var(--glass-border);
    border-radius: 8px;
    color: var(--gv-text);
    font-size: 0.75rem;
    padding: 3px 8px;
    margin-top: 4px;
}
.gv-grid.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input:focus {
    outline: none; border-color: var(--gv-primary-light); box-shadow: 0 0 0 2px var(--focus-ring);
}
.gv-grid.tabulator .tabulator-tableholder { background: transparent; }
.gv-grid.tabulator .tabulator-tableholder .tabulator-table { background: transparent; }
.gv-grid.tabulator .tabulator-tableholder .tabulator-table [class*="tabulator-row"] {
    background: transparent;
    border-bottom: 1px solid var(--glass-border);
    transition: background 0.15s var(--ease-glass);
}
.gv-grid.tabulator .tabulator-tableholder .tabulator-table [class*="tabulator-row"]:hover { background: var(--glass-pop); }
.gv-grid.tabulator .tabulator-tableholder .tabulator-table [class*="tabulator-row"].tabulator-selected,
.gv-grid.tabulator .tabulator-tableholder .tabulator-table [class*="tabulator-row"].selected {
    background: rgba(122, 37, 80, 0.22);
    box-shadow: inset 3px 0 0 var(--gv-primary-light);
}
.gv-grid.tabulator .tabulator-tableholder .tabulator-table [class*="tabulator-row"] .tabulator-cell {
    border-right: none;
    padding: 0.7rem 1rem;
}
.gv-grid.tabulator .tabulator-tableholder .tabulator-table [class*="tabulator-row"] .tabulator-cell:first-child { padding-left: 1.25rem; }
.gv-grid.tabulator .tabulator-tableholder .tabulator-table [class*="tabulator-row"] .tabulator-cell:last-child { padding-right: 1.25rem; }
.gv-grid.tabulator .tabulator-footer { background: transparent; border-top: 1px solid var(--glass-border); color: var(--gv-text-muted); }
.gv-grid.tabulator .tabulator-footer .tabulator-page {
    background: var(--glass-bg-input); border: 1px solid var(--glass-border); border-radius: 8px;
    color: var(--gv-text); transition: all 0.15s;
}
.gv-grid.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { background: var(--glass-pop); border-color: var(--gv-primary-light); }
.gv-grid.tabulator .tabulator-footer .tabulator-page.active { background: linear-gradient(135deg, #7a2550, #541533); color: #fff; }
.gv-grid.tabulator .tabulator-footer .tabulator-page-size { background: var(--glass-bg-input); border-color: var(--glass-border); color: var(--gv-text); border-radius: 8px; }
.gv-grid .tabulator-alert .tabulator-alert-msg { background: var(--glass-bg-strong); border: 1px solid var(--glass-border); border-radius: 12px; color: var(--gv-text); }
.gv-grid.tabulator .tabulator-placeholder .tabulator-placeholder-msg,
.gv-grid.tabulator .tabulator-placeholder span { color: var(--gv-text-muted); background: transparent; }

/* Grid toolbar + empty state + skipped colspan rows */
.gv-grid { margin: 0 -0.25rem; }
.gv-grid-tools { display: flex; align-items: center; gap: 0.6rem; padding: 0.7rem 1.25rem; border-bottom: 1px solid var(--glass-border); flex-wrap: wrap; }
.gv-grid-tools .gv-grid-search { max-width: 240px; }
.gv-grid-colwrap { position: relative; }
.gv-grid-colmenu {
    position: absolute; top: calc(100% + 6px); right: 0; z-index: 1050; min-width: 190px;
    background: var(--glass-bg-strong); border: 1px solid var(--glass-border); border-top-color: var(--glass-edge);
    border-radius: 12px; padding: 0.35rem; box-shadow: var(--glass-inner), var(--glass-shadow);
    -webkit-backdrop-filter: blur(28px) saturate(160%); backdrop-filter: blur(28px) saturate(160%);
}
.gv-grid-colmenu-item {
    display: flex; align-items: center; gap: 0.5rem; width: 100%; padding: 0.45rem 0.6rem;
    background: none; border: none; border-radius: 8px; color: var(--gv-text);
    font-size: 0.8rem; cursor: pointer; text-align: left; transition: background 0.15s;
}
.gv-grid-colmenu-item:hover { background: var(--glass-pop); }
.gv-grid-colmenu-item i { color: var(--gv-accent-text); }
.gv-grid-empty { padding: 2.5rem 1rem; text-align: center; color: var(--gv-text-muted); }
.gv-grid-empty i { font-size: 1.8rem; display: block; margin-bottom: 0.5rem; color: var(--gv-accent-text); }
.gv-grid-empty .t { font-weight: 700; color: var(--gv-text); font-size: 0.9rem; }
.gv-grid-empty .m { font-size: 0.8rem; margin-top: 0.25rem; }
.gv-grid-skiprow td, .gv-grid-skiprow { display: block; padding: 1rem 1.25rem; color: var(--gv-text-muted); text-align: center; }
.gv-grid-skiprow td { display: table-cell; }
.gv-grid.tabulator .tabulator-tableholder .tabulator-table [class*="tabulator-row"].excluded { opacity: 0.5; }
.gv-grid.tabulator .tabulator-tableholder .tabulator-table [class*="tabulator-row"][data-flag-url] { cursor: pointer; }
.gv-grid.tabulator .tabulator-tableholder .tabulator-table [class*="tabulator-row"][data-flag-url]:focus-visible {
    outline: 2px solid var(--gv-primary-light); outline-offset: -2px;
}

/* ── Grid contrast hardening: explicit text colors beat vendored #333/#555 ── */
.gv-grid.tabulator .tabulator-tableholder .tabulator-table { color: var(--gv-text); }
.gv-grid.tabulator .tabulator-tableholder .tabulator-table [class*="tabulator-row"] .tabulator-cell { color: var(--gv-text); }
.gv-grid.tabulator .tabulator-tableholder .tabulator-table [class*="tabulator-row"] .tabulator-cell.muted { color: var(--gv-text-muted); font-size: 0.78rem; }
.gv-grid.tabulator .tabulator-tableholder .tabulator-table [class*="tabulator-row"] .tabulator-cell.bi-num { font-variant-numeric: tabular-nums; }
.gv-grid.tabulator a { color: var(--gv-accent-text); font-weight: 600; }
.gv-grid.tabulator a:hover { color: #ffc9dd; }
html[data-theme="light"] .gv-grid.tabulator a:hover { color: var(--gv-primary-dark); }
.gv-grid.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents { color: var(--gv-text-muted); }
.gv-grid.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { color: var(--gv-text-muted); }
.gv-grid.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover { background: var(--glass-pop); }
.gv-grid.tabulator .tabulator-footer .tabulator-paginator { color: var(--gv-text-muted); }
.gv-grid.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { color: var(--gv-text); }
.gv-grid-tools .gv-input-sm::placeholder { color: #a5949f; }
html[data-theme="light"] .gv-grid-tools .gv-input-sm::placeholder { color: #a48ca0; }

/* Sort arrows are CSS triangles — the triangle color is border-color, not color */
.gv-grid.tabulator .tabulator-header .tabulator-col .tabulator-col-sorter .tabulator-arrow { border-bottom-color: var(--gv-text-muted); }
.gv-grid.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="descending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { border-top-color: var(--gv-accent-text); }
.gv-grid.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="ascending"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { border-bottom-color: var(--gv-accent-text); }
.gv-grid.tabulator .tabulator-header .tabulator-col .tabulator-col-sorter .tabulator-arrow:hover { border-bottom-color: var(--gv-accent-text); border-top-color: var(--gv-accent-text); }
