/* ==========================================================================
   Reverse — Pastel Minimal Design System (site.css)
   Single source of truth. Token canon mirrors docs/ui-redesign-pastel-minimal.md §2:
   dark is the default (:root), light overrides under [data-bs-theme="light"].
   Rules: pastel is fill, functional is ink; ONE gradient (--rv-gradient) whitelisted
   to logo / hero headline / .rv-cta-hero only; no glow — soft diffuse shadows.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Design tokens — DARK (default)
   -------------------------------------------------------------------------- */
:root {
	color-scheme: dark;

	/* Neutrals */
	--rv-bg:            #131318;
	--rv-bg-elevated:   #18181f;
	--rv-surface:       #1c1c24;
	--rv-surface-2:     #22222b;
	--rv-surface-3:     #292933;
	--rv-border-muted:  #26262f;
	--rv-border:        #31313c;
	--rv-border-strong: #41414e;
	--rv-border-interactive: #75758a;
	--rv-header-bg:     rgba(19, 19, 24, 0.85);
	--rv-backdrop:      rgba(8, 8, 12, 0.62);
	--rv-field-bg:      #17171e;
	--rv-skeleton:      #252530;

	/* Text ramp */
	--rv-text:          #ececf2;
	--rv-text-soft:     #c8c8d4;
	--rv-text-muted:    #a1a0b2;
	--rv-text-faint:    #70707f;   /* AA-large only: placeholders / decorative */

	/* Accent 1 — lavender (primary) */
	--rv-accent:        #a89bf0;
	--rv-accent-hover:  #bfb5f6;
	--rv-accent-active: #cdc5f9;
	--rv-accent-fill:   #262239;
	--rv-accent-tint:   #1d1a28;
	--rv-accent-soft:   rgba(168, 155, 240, 0.14);
	--rv-accent-line:   rgba(168, 155, 240, 0.38);
	--rv-accent-on:     #1d1830;
	--rv-accent-rgb:    168, 155, 240;

	/* Accent 2 — mint (secondary) */
	--rv-accent-2:      #79dcc8;
	--rv-accent-2-hover:#93e6d6;
	--rv-accent-2-fill: #1d2f2b;
	--rv-accent-2-tint: #182420;
	--rv-accent-2-soft: rgba(121, 220, 200, 0.12);
	--rv-accent-2-on:   #0f2620;

	/* Accent 3 — peach (tertiary) */
	--rv-accent-3:      #f0b39c;
	--rv-accent-3-fill: #332721;
	--rv-accent-3-tint: #241b16;
	--rv-accent-3-soft: rgba(240, 179, 156, 0.12);
	--rv-accent-3-on:   #2f190e;

	/* Semantic */
	--rv-success:       #7ed3a0;
	--rv-success-soft:  rgba(126, 211, 160, 0.12);
	--rv-warning:       #e3b667;
	--rv-warning-soft:  rgba(227, 182, 103, 0.12);
	--rv-warning-text:  #e3b667;
	--rv-warning-fill:  #3a2c15;
	--rv-danger:        #ef8e8e;
	--rv-danger-soft:   rgba(239, 142, 142, 0.12);
	--rv-info:          #8bbcf0;
	--rv-info-soft:     rgba(139, 188, 240, 0.12);

	/* Data-viz (fills/graphics only — labels use the text ramp) */
	--rv-viz-1: #a89bf0;  --rv-viz-2: #79dcc8;  --rv-viz-3: #8ec7f2;  --rv-viz-4: #f0b39c;
	--rv-viz-5: #ef9fc0;  --rv-viz-6: #e3cf8b;  --rv-viz-7: #a4d792;  --rv-viz-8: #a9b6cc;

	/* THE gradient — whitelist: logo mark, hero headline line 2, .rv-cta-hero */
	--rv-gradient: linear-gradient(135deg, #a89bf0 0%, #79dcc8 100%);

	/* Soft diffuse shadows (no glow, no accent-colored shadows) */
	--rv-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.40);
	--rv-shadow-md: 0 4px 14px rgba(0, 0, 0, 0.38);
	--rv-shadow-lg: 0 16px 40px rgba(0, 0, 0, 0.50);

	/* Legacy alias (deprecated — one release): old purple accent maps to lavender */
	--rv-purple: var(--rv-accent);

	/* Typography */
	--rv-font-sans: 'Inter', 'Segoe UI Variable Text', 'Segoe UI', system-ui, -apple-system, Roboto, 'Helvetica Neue', Arial, sans-serif;
	--rv-font-display: 'Inter Display', 'Segoe UI Variable Display', var(--rv-font-sans);
	--rv-font-mono: 'JetBrains Mono', ui-monospace, 'SFMono-Regular', 'Cascadia Mono', Consolas, 'Liberation Mono', Menlo, monospace;

	/* Spacing scale (4px base) */
	--rv-s1: 4px;  --rv-s2: 8px;  --rv-s3: 12px;  --rv-s4: 16px;
	--rv-s5: 24px; --rv-s6: 32px; --rv-s7: 48px;

	/* Radius */
	--rv-r-sm: 6px;  --rv-r-md: 10px;  --rv-r-lg: 14px;  --rv-r-pill: 999px;

	/* Motion */
	--rv-ease: cubic-bezier(0.4, 0, 0.2, 1);
	--rv-dur: 0.18s;

	/* Layout metrics */
	--rv-header-h: 56px;
	--rv-sidebar-w: 250px;
	--rv-panel-w: 460px;
}

/* --------------------------------------------------------------------------
   1b. Design tokens — LIGHT override (warm near-whites; pastel needs dark ink)
   -------------------------------------------------------------------------- */
[data-bs-theme="light"] {
	color-scheme: light;

	--rv-bg:            #faf9f7;
	--rv-bg-elevated:   #fdfcfa;
	--rv-surface:       #ffffff;
	--rv-surface-2:     #f4f2ee;
	--rv-surface-3:     #ece9e4;
	--rv-border-muted:  #eae7e2;
	--rv-border:        #dcd8d2;
	--rv-border-strong: #c3beb6;
	--rv-border-interactive: #837f8b;
	--rv-header-bg:     rgba(253, 252, 250, 0.85);
	--rv-backdrop:      rgba(35, 31, 54, 0.42);
	--rv-field-bg:      #ffffff;
	--rv-skeleton:      #eeece7;

	--rv-text:          #37343f;
	--rv-text-soft:     #56525f;
	--rv-text-muted:    #6a6675;
	--rv-text-faint:    #918d9b;

	--rv-accent:        #6150be;
	--rv-accent-hover:  #5646ab;
	--rv-accent-active: #4b3d93;
	--rv-accent-fill:   #eae6f9;
	--rv-accent-tint:   #f4f1fc;
	--rv-accent-soft:   rgba(97, 80, 190, 0.10);
	--rv-accent-line:   rgba(97, 80, 190, 0.30);
	--rv-accent-on:     #ffffff;
	--rv-accent-rgb:    97, 80, 190;

	--rv-accent-2:      #0f7261;
	--rv-accent-2-hover:#0c6153;
	--rv-accent-2-fill: #e0f4ee;
	--rv-accent-2-tint: #eff9f6;
	--rv-accent-2-soft: rgba(15, 114, 97, 0.10);
	--rv-accent-2-on:   #ffffff;

	--rv-accent-3:      #a94b2a;
	--rv-accent-3-fill: #fceee6;
	--rv-accent-3-tint: #fdf6f1;
	--rv-accent-3-soft: rgba(169, 75, 42, 0.10);
	--rv-accent-3-on:   #ffffff;

	--rv-success:       #1d7a3e;
	--rv-success-soft:  rgba(29, 122, 62, 0.12);
	--rv-warning:       #e8b34c;   /* fill/graphic only — never ink on light */
	--rv-warning-soft:  rgba(232, 179, 76, 0.20);
	--rv-warning-text:  #8a5a00;
	--rv-warning-fill:  #f3d9a4;
	--rv-danger:        #c03b3b;
	--rv-danger-soft:   rgba(192, 59, 59, 0.10);
	--rv-info:          #2e6db4;
	--rv-info-soft:     rgba(46, 109, 180, 0.10);

	--rv-viz-1: #6150be;  --rv-viz-2: #0f7261;  --rv-viz-3: #2e6db4;  --rv-viz-4: #a94b2a;
	--rv-viz-5: #b03a6a;  --rv-viz-6: #8a6d1c;  --rv-viz-7: #3f7d3c;  --rv-viz-8: #5b6b8c;

	--rv-gradient: linear-gradient(135deg, #6150be 0%, #0f7261 100%);

	--rv-shadow-sm: 0 1px 2px rgba(55, 52, 84, 0.06);
	--rv-shadow-md: 0 4px 16px rgba(55, 52, 84, 0.08);
	--rv-shadow-lg: 0 16px 40px rgba(55, 52, 84, 0.12);
}

/* Theme-conditional visibility helpers (theme toggle labels, etc.) */
[data-bs-theme="light"] .rv-when-dark { display: none !important; }
[data-bs-theme="dark"] .rv-when-light { display: none !important; }

/* --------------------------------------------------------------------------
   2. Map Bootstrap variables onto the tokens — one block for both themes
   -------------------------------------------------------------------------- */
[data-bs-theme] {
	--bs-body-bg: var(--rv-bg);
	--bs-body-color: var(--rv-text-soft);
	--bs-emphasis-color: var(--rv-text);
	--bs-secondary-color: var(--rv-text-muted);
	--bs-secondary-bg: var(--rv-surface-2);
	--bs-tertiary-color: var(--rv-text-faint);
	--bs-tertiary-bg: var(--rv-surface-3);
	--bs-primary: var(--rv-accent);
	--bs-primary-rgb: var(--rv-accent-rgb);
	--bs-secondary: var(--rv-text-muted);
	--bs-border-color: var(--rv-border);
	--bs-border-color-translucent: var(--rv-border-muted);
	--bs-link-color: var(--rv-accent);
	--bs-link-color-rgb: var(--rv-accent-rgb);
	--bs-link-hover-color: var(--rv-accent-hover);
	--bs-dropdown-bg: var(--rv-surface);
	--bs-dropdown-border-color: var(--rv-border);
	--bs-dropdown-link-color: var(--rv-text-soft);
	--bs-dropdown-link-hover-color: var(--rv-text);
	--bs-dropdown-link-hover-bg: var(--rv-surface-2);
	--bs-dropdown-link-active-bg: var(--rv-accent-soft);
	--bs-dropdown-link-active-color: var(--rv-accent);
	--bs-list-group-bg: var(--rv-surface);
	--bs-list-group-color: var(--rv-text-soft);
	--bs-list-group-border-color: var(--rv-border);
	--bs-card-bg: var(--rv-surface);
	--bs-card-color: var(--rv-text-soft);
	--bs-card-border-color: var(--rv-border);
	--bs-modal-bg: var(--rv-surface);
	--bs-modal-border-color: var(--rv-border);
	--bs-dark: var(--rv-surface);
}

/* --------------------------------------------------------------------------
   3. Base & typography
   -------------------------------------------------------------------------- */
html {
	position: relative;
	min-height: 100%;
	font-size: 15px;
	scrollbar-color: var(--rv-border-strong) transparent;
}
@media (min-width: 768px) {
	html { font-size: 16px; }
}

body {
	margin: 0;
	padding: 0;
	min-height: 100vh;
	display: flex;
	flex-direction: column;
	font-family: var(--rv-font-sans);
	color: var(--rv-text-soft);
	background-color: var(--rv-bg);
	-webkit-font-smoothing: antialiased;
	text-rendering: optimizeLegibility;
}

main { flex: 1; }

pre, code, kbd, samp { font-family: var(--rv-font-mono); }

h1, h2, h3, h4, h5, h6 { color: var(--rv-text); letter-spacing: -0.015em; }

a { text-decoration: none; }
a:hover { text-decoration: none; }

.text-muted { color: var(--rv-text-muted) !important; }
.text-light { color: var(--rv-text) !important; }

::selection { background: var(--rv-accent-fill); }

::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb {
	background: var(--rv-border-strong);
	border-radius: var(--rv-r-pill);
	border: 2px solid transparent;
	background-clip: padding-box;
}
::-webkit-scrollbar-thumb:hover { background: var(--rv-text-faint); background-clip: padding-box; }

/* Focus ring — one spec for both themes */
.btn:focus-visible, .btn:active:focus,
.form-control:focus, .form-select:focus, .form-check-input:focus,
a:focus-visible, button:focus-visible, [tabindex]:focus-visible {
	outline: 2px solid var(--rv-accent);
	outline-offset: 2px;
	box-shadow: none;
}

/* Inline SVG icons */
.rv-icon { display: inline-block; vertical-align: -0.155em; flex-shrink: 0; }
.rv-logo { display: inline-block; vertical-align: -0.2em; flex-shrink: 0; }

/* --------------------------------------------------------------------------
   4. Buttons
   -------------------------------------------------------------------------- */
.btn {
	--bs-btn-border-radius: var(--rv-r-sm);
	font-weight: 500;
	transition: background-color var(--rv-dur) var(--rv-ease),
	            border-color var(--rv-dur) var(--rv-ease),
	            color var(--rv-dur) var(--rv-ease),
	            transform 0.08s var(--rv-ease);
}
.btn:active { transform: translateY(1px); }

.btn-primary {
	--bs-btn-bg: var(--rv-accent);
	--bs-btn-border-color: var(--rv-accent);
	--bs-btn-color: var(--rv-accent-on);
	--bs-btn-hover-bg: var(--rv-accent-hover);
	--bs-btn-hover-border-color: var(--rv-accent-hover);
	--bs-btn-hover-color: var(--rv-accent-on);
	--bs-btn-active-bg: var(--rv-accent-active);
	--bs-btn-active-border-color: var(--rv-accent-active);
	--bs-btn-active-color: var(--rv-accent-on);
	--bs-btn-disabled-bg: var(--rv-accent);
	--bs-btn-disabled-border-color: var(--rv-accent);
	--bs-btn-disabled-color: var(--rv-accent-on);
	font-weight: 600;
}
/* The ONE gradient button — hero CTA only (gradient whitelist) */
.rv-cta-hero {
	background: var(--rv-gradient);
	border: none;
	color: var(--rv-accent-on);
	font-weight: 650;
	padding: 10px 24px;
	border-radius: var(--rv-r-md);
}
.rv-cta-hero:hover { filter: brightness(1.06); color: var(--rv-accent-on); }

.btn-outline-primary, .btn-outline-info {
	--bs-btn-color: var(--rv-accent);
	--bs-btn-border-color: var(--rv-border-interactive);
	--bs-btn-hover-bg: var(--rv-accent-soft);
	--bs-btn-hover-border-color: var(--rv-accent-line);
	--bs-btn-hover-color: var(--rv-accent-hover);
}
.btn-outline-light {
	--bs-btn-color: var(--rv-text-soft);
	--bs-btn-border-color: transparent;
	--bs-btn-hover-bg: var(--rv-surface-2);
	--bs-btn-hover-border-color: transparent;
	--bs-btn-hover-color: var(--rv-text);
}
.btn-outline-secondary {
	--bs-btn-color: var(--rv-text-muted);
	--bs-btn-border-color: var(--rv-border);
	--bs-btn-hover-bg: var(--rv-surface-2);
	--bs-btn-hover-border-color: var(--rv-border-strong);
	--bs-btn-hover-color: var(--rv-text);
}
.btn-outline-success {
	--bs-btn-color: var(--rv-success);
	--bs-btn-border-color: var(--rv-border-interactive);
	--bs-btn-hover-bg: var(--rv-success-soft);
	--bs-btn-hover-border-color: var(--rv-success);
	--bs-btn-hover-color: var(--rv-success);
}
.btn-secondary {
	--bs-btn-bg: var(--rv-surface-3);
	--bs-btn-border-color: var(--rv-border-strong);
	--bs-btn-color: var(--rv-text-soft);
	--bs-btn-hover-bg: var(--rv-surface-2);
	--bs-btn-hover-border-color: var(--rv-border-strong);
	--bs-btn-hover-color: var(--rv-text);
}
.btn-danger {
	--bs-btn-bg: var(--rv-danger);
	--bs-btn-border-color: var(--rv-danger);
	--bs-btn-color: #fff;
	--bs-btn-hover-bg: var(--rv-danger);
	--bs-btn-hover-border-color: var(--rv-danger);
	--bs-btn-hover-color: #fff;
}
.btn-warning {
	--bs-btn-bg: var(--rv-warning-fill);
	--bs-btn-border-color: transparent;
	--bs-btn-color: var(--rv-warning-text);
	--bs-btn-hover-bg: var(--rv-warning-fill);
	--bs-btn-hover-color: var(--rv-warning-text);
}
/* Quiet ghost button (nav, icon-only utilities) */
.rv-btn-ghost {
	background: transparent;
	border: 1px solid transparent;
	color: var(--rv-text-soft);
}
.rv-btn-ghost:hover { background: var(--rv-surface-2); color: var(--rv-text); }
/* Extra-small button used in the diagnostics panel */
.btn-xs {
	--bs-btn-padding-y: 2px;
	--bs-btn-padding-x: 8px;
	--bs-btn-font-size: 0.72rem;
	border-radius: var(--rv-r-sm);
}

/* --------------------------------------------------------------------------
   5. Cards, forms, lists, badges, modals, tables, alerts
   -------------------------------------------------------------------------- */
.card {
	--bs-card-border-radius: var(--rv-r-md);
	border-color: var(--rv-border);
	background-color: var(--rv-surface);
	background-image: none;
	box-shadow: var(--rv-shadow-sm);
}

.form-control, .form-select {
	background-color: var(--rv-field-bg);
	border-color: var(--rv-border-interactive);
	color: var(--rv-text-soft);
	border-radius: var(--rv-r-sm);
	transition: border-color var(--rv-dur) var(--rv-ease);
}
.form-control:focus, .form-select:focus {
	background-color: var(--rv-field-bg);
	border-color: var(--rv-accent);
	color: var(--rv-text);
}
.form-control::placeholder { color: var(--rv-text-faint); }
.form-check-input { background-color: var(--rv-field-bg); border-color: var(--rv-border-interactive); }
.form-check-input:checked { background-color: var(--rv-accent); border-color: var(--rv-accent); }

.list-group { --bs-list-group-border-radius: var(--rv-r-md); }
.list-group-item { background-color: var(--rv-surface); border-color: var(--rv-border-muted); color: var(--rv-text-soft); }
.list-group-item-action:hover { background-color: var(--rv-surface-2); }

.badge { font-weight: 600; letter-spacing: 0.01em; border-radius: var(--rv-r-sm); }
.badge-purple { background-color: var(--rv-accent-fill); color: var(--rv-accent); }

/* Pastel pills */
.rv-pill {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	font-size: 0.72rem;
	font-weight: 600;
	padding: 3px 10px;
	border-radius: var(--rv-r-pill);
}
.rv-pill-preview { background: var(--rv-accent-fill); color: var(--rv-accent); }
.rv-pill-premium { background: var(--rv-accent-3-fill); color: var(--rv-accent-3); }
.rv-pill-success { background: var(--rv-success-soft); color: var(--rv-success); }

.modal-content {
	border-radius: var(--rv-r-lg);
	border-color: var(--rv-border);
	box-shadow: var(--rv-shadow-lg);
	background-color: var(--rv-surface);
	color: var(--rv-text-soft);
}
.modal-header, .modal-footer { border-color: var(--rv-border-muted); }
.modal-backdrop { --bs-backdrop-bg: var(--rv-backdrop); --bs-backdrop-opacity: 1; }

.table {
	--bs-table-bg: var(--rv-surface);
	--bs-table-striped-bg: var(--rv-surface-2);
	--bs-table-border-color: var(--rv-border-muted);
	color: var(--rv-text-soft);
}

.alert { border-radius: var(--rv-r-md); border-width: 1px; }
.alert-info { background-color: var(--rv-info-soft); border-color: transparent; color: var(--rv-text-soft); }
.alert-secondary { background-color: var(--rv-surface); border-color: var(--rv-border); color: var(--rv-text-muted); }
.alert-danger { background-color: var(--rv-danger-soft); border-color: transparent; color: var(--rv-danger); }
.alert-warning { background-color: var(--rv-warning-soft); border-color: transparent; color: var(--rv-warning-text); }

.dropdown-menu {
	border-radius: var(--rv-r-md);
	box-shadow: var(--rv-shadow-md);
	background-color: var(--rv-surface);
	border-color: var(--rv-border);
}
.dropdown-item { color: var(--rv-text-soft); border-radius: var(--rv-r-sm); }
.dropdown-item:hover { background-color: var(--rv-surface-2); color: var(--rv-text); }
.dropdown-divider { border-color: var(--rv-border-muted); }

/* Settings dropdown descriptions */
.dropdown-description.disabled { display: none; }

/* --------------------------------------------------------------------------
   6. App shell — header (3 zones: identity · primary nav · utilities)
   -------------------------------------------------------------------------- */
.rv-header {
	position: sticky;
	top: 0;
	z-index: 1030;
	min-height: var(--rv-header-h);
	display: flex;
	align-items: center;
	gap: var(--rv-s3);
	padding: 0 var(--rv-s5);
	background-color: var(--rv-header-bg);
	backdrop-filter: blur(6px);
	-webkit-backdrop-filter: blur(6px);
	border-bottom: 1px solid var(--rv-border-muted);
}
.rv-header-left { display: flex; align-items: center; gap: var(--rv-s3); min-width: 0; }
.rv-header-nav { display: flex; align-items: center; gap: var(--rv-s1); }
.rv-header-utils { margin-left: auto; display: flex; align-items: center; gap: var(--rv-s1); }

.rv-brand {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	color: var(--rv-text);
	font-weight: 650;
	font-size: 1.02rem;
	letter-spacing: -0.02em;
	white-space: nowrap;
}
.rv-brand:hover { color: var(--rv-text); }

/* Workspace switcher (opens the project modal) */
.rv-switcher {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	max-width: 220px;
	padding: 5px 10px;
	font-size: 0.8rem;
	color: var(--rv-text-soft);
	background: var(--rv-surface);
	border: 1px solid var(--rv-border);
	border-radius: var(--rv-r-sm);
	cursor: pointer;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}
.rv-switcher:hover { border-color: var(--rv-border-strong); color: var(--rv-text); }

/* Primary nav links (only rendered when a project is loaded) */
.rv-nav-link {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 6px 13px;
	font-size: 0.85rem;
	color: var(--rv-text-soft);
	border-radius: var(--rv-r-pill);
	border: none;
	background: transparent;
	white-space: nowrap;
}
.rv-nav-link:hover { background: var(--rv-surface-2); color: var(--rv-text); }
.rv-nav-link.active { background: var(--rv-accent-soft); color: var(--rv-accent); font-weight: 600; }

/* Icon utility button (Share / Activity / overflow) */
.rv-icon-btn {
	position: relative;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 6px 11px;
	font-size: 0.82rem;
	color: var(--rv-text-soft);
	background: transparent;
	border: 1px solid transparent;
	border-radius: var(--rv-r-sm);
	cursor: pointer;
	white-space: nowrap;
}
.rv-icon-btn:hover { background: var(--rv-surface-2); color: var(--rv-text); }
/* Busy dot on the Activity button while extraction runs */
.rv-icon-btn.rv-busy::after {
	content: '';
	position: absolute;
	top: 4px;
	right: 4px;
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: var(--rv-accent-2);
}

/* The "⋯" overflow menu */
.rv-menu { min-width: 240px; padding: 6px; }
.rv-menu .dropdown-item { display: flex; align-items: center; gap: 9px; padding: 7px 10px; font-size: 0.86rem; }
.rv-menu-section {
	padding: 8px 10px 4px;
	font-size: 0.68rem;
	font-weight: 600;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--rv-text-muted);
}
.rv-menu-control { display: flex; align-items: center; gap: 9px; padding: 6px 10px; }

/* Header language selector (inside the overflow menu) */
#language-form { margin: 0; flex: 1; }
.rv-lang-select {
	width: 100%;
	background-color: var(--rv-field-bg);
	border-color: var(--rv-border-interactive);
	color: var(--rv-text-soft);
	font-size: 0.82rem;
	padding: 4px 28px 4px 10px;
	cursor: pointer;
}
.rv-lang-select:hover { border-color: var(--rv-accent); }

/* --------------------------------------------------------------------------
   7. App shell — left workspace rail
   -------------------------------------------------------------------------- */
#project-sidebar {
	width: var(--rv-sidebar-w);
	background-color: var(--rv-bg-elevated) !important;
	border-color: var(--rv-border-muted) !important;
}
#project-sidebar h6 {
	color: var(--rv-text-muted) !important;
	letter-spacing: 0.08em;
	font-size: 0.68rem;
}

#workspace-list a {
	border-radius: var(--rv-r-sm);
	color: var(--rv-text-soft);
	border: 1px solid transparent;
	transition: background-color var(--rv-dur) var(--rv-ease),
	            border-color var(--rv-dur) var(--rv-ease);
}
#workspace-list a:hover {
	background-color: var(--rv-surface-2);
	border-color: var(--rv-border);
}
#workspace-list .btn { --bs-btn-border-radius: var(--rv-r-sm); }
#workspace-list .btn-outline-secondary {
	--bs-btn-color: var(--rv-text-soft);
	--bs-btn-border-color: transparent;
	--bs-btn-hover-bg: var(--rv-surface-2);
	--bs-btn-hover-border-color: var(--rv-border);
	--bs-btn-hover-color: var(--rv-text);
}
#workspace-list .btn-primary {
	--bs-btn-bg: var(--rv-accent-soft);
	--bs-btn-border-color: transparent;
	--bs-btn-color: var(--rv-accent);
	--bs-btn-hover-bg: var(--rv-accent-soft);
	--bs-btn-hover-border-color: transparent;
	--bs-btn-hover-color: var(--rv-accent-hover);
}
/* Workspace state dot (JS renders <span class="rv-ws-dot ...">) */
.rv-ws-dot {
	display: inline-block;
	width: 8px;
	height: 8px;
	margin-right: 6px;
	border-radius: 50%;
	background: var(--rv-text-faint);
	vertical-align: 0.05em;
}
.rv-ws-dot.is-processing { background: var(--rv-warning); }
.rv-ws-dot.is-completed { background: var(--rv-success); }
.rv-ws-dot.is-error { background: var(--rv-danger); }
.rv-empty-hint { font-size: 0.8rem; color: var(--rv-text-muted); padding: var(--rv-s2) var(--rv-s1); }

/* Dashed "new project" affordance */
.rv-new-project {
	border-style: dashed !important;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 6px;
}

/* --------------------------------------------------------------------------
   8. App shell — right slide-over panels (activity/logs + storage/diagnostics)
   -------------------------------------------------------------------------- */
#diagnostics-sidebar, #status-sidebar {
	width: var(--rv-panel-w);
	max-width: 92vw;
	box-shadow: var(--rv-shadow-lg);
}
.glass-sidebar {
	backdrop-filter: blur(12px);
	-webkit-backdrop-filter: blur(12px);
	background-color: var(--rv-header-bg) !important;
	border-left: 1px solid var(--rv-border) !important;
}
#diagnostics-sidebar, #status-sidebar { background-color: var(--rv-bg-elevated); }
/* The raw log window stays a dark terminal in BOTH themes (design plan §4.10) */
#log-window-container { background: #101014 !important; }
#log-window { font-size: 0.82rem; white-space: pre-wrap; line-height: 1.5; color: #7ed3a0; }
.rv-log-line { padding: 3px 8px; border-bottom: 1px solid rgba(255, 255, 255, 0.06); font-family: var(--rv-font-mono); color: #c8c8d4; }
.rv-log-line.is-info { color: #8bbcf0; }
.rv-log-line.is-warning { color: #e3b667; }
.rv-log-line.is-error { color: #ef8e8e; }
.rv-log-line.is-success { color: #7ed3a0; }

/* Segmented progress bars in the diagnostics panel */
.ios-progress-bar {
	box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.35);
	position: relative;
	background: var(--rv-surface-3) !important;
}
.ios-progress-bar > div { position: relative; }

/* --------------------------------------------------------------------------
   9. Hosted-mode gating — hide server-admin controls that 403 for public users
   (These controls are only meaningful for the local desktop operator.)
   The diagnostics sidebar itself is NOT hidden in hosted mode: the per-user
   "Storage" panel reuses it (diagnostics.js scopes the content to the user's
   own projects). Only the server-wide/admin pieces are hidden.
   NOTE: the selector `body[data-hosted-mode="true"] #toggle-diagnostics-btn`
   is asserted by HostedModeSecurityTests — keep it intact.
   -------------------------------------------------------------------------- */
body[data-hosted-mode="true"] #toggle-diagnostics-btn,
body[data-hosted-mode="true"] #force-gc-btn,
body[data-hosted-mode="true"] #clear-all-data-btn,
body[data-hosted-mode="true"] #diag-storage-section,
body[data-hosted-mode="true"] #diag-memory-section {
	display: none !important;
}

/* The per-user "Storage" button is only shown in hosted mode; the local operator
   uses the full Diagnostics panel instead. */
body:not([data-hosted-mode="true"]) #toggle-storage-btn {
	display: none !important;
}

/* --------------------------------------------------------------------------
   10. Footer — minimal: © · Privacy · Licenses
   -------------------------------------------------------------------------- */
footer.footer {
	padding: var(--rv-s4) 0;
	margin-top: var(--rv-s7);
	background-color: var(--rv-bg-elevated) !important;
	border-top: 1px solid var(--rv-border-muted) !important;
	font-size: 0.82rem;
}
footer.footer a { color: var(--rv-text-muted) !important; transition: color var(--rv-dur) var(--rv-ease); }
footer.footer a:hover { color: var(--rv-accent) !important; }

/* --------------------------------------------------------------------------
   11. Drag & drop zones
   -------------------------------------------------------------------------- */
.drag-drop-zone {
	border: 1.5px dashed var(--rv-border-interactive);
	border-radius: var(--rv-r-md);
	background-color: var(--rv-surface);
	transition: background-color var(--rv-dur) var(--rv-ease), border-color var(--rv-dur) var(--rv-ease);
	cursor: pointer;
}
.drag-drop-zone.dragover { background-color: var(--rv-accent-tint); border-color: var(--rv-accent); }

/* --------------------------------------------------------------------------
   12. Legacy home layout (IndexPage) — kept for compatibility
   -------------------------------------------------------------------------- */
.rv-home {
	min-height: calc(100vh - 120px);
	display: flex;
	flex-direction: column;
	align-items: center;
	padding: var(--rv-s7) var(--rv-s4) var(--rv-s7);
	gap: var(--rv-s6);
}

.rv-hero { text-align: center; }
.rv-hero-title {
	font-family: var(--rv-font-display);
	font-size: clamp(2.2rem, 5vw, 3.1rem);
	font-weight: 750;
	letter-spacing: -0.025em;
	background: var(--rv-gradient);
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
	margin: 0 0 var(--rv-s2);
}
.rv-hero-sub { color: var(--rv-text-muted); font-size: 1.05rem; margin: 0; }

.rv-card {
	width: 100%;
	max-width: 560px;
	background: var(--rv-surface);
	border: 1px solid var(--rv-border);
	border-radius: var(--rv-r-lg);
	padding: var(--rv-s6);
	box-shadow: var(--rv-shadow-sm);
}

.rv-step {
	display: flex;
	gap: var(--rv-s4);
	align-items: flex-start;
	padding: var(--rv-s4) 0;
	border-bottom: 1px solid var(--rv-border-muted);
}
.rv-step:last-child { border-bottom: none; padding-bottom: 0; }
.rv-step-num {
	width: 30px;
	height: 30px;
	min-width: 30px;
	border-radius: 50%;
	background: var(--rv-accent-fill);
	border: 1px solid transparent;
	color: var(--rv-accent);
	font-size: 0.82rem;
	font-weight: 700;
	display: flex;
	align-items: center;
	justify-content: center;
	margin-top: 2px;
}
.rv-step-num-auto { opacity: 0.7; }
.rv-step-body { flex: 1; }
.rv-step-title { font-size: 0.95rem; font-weight: 600; color: var(--rv-text); margin-bottom: 4px; }
.rv-step-sub { font-size: 0.82rem; color: var(--rv-text-muted); margin-top: 4px; }
.rv-step-auto { opacity: 0.65; }

.rv-dropzone {
	margin-top: var(--rv-s3);
	border: 1.5px dashed var(--rv-border-interactive);
	border-radius: var(--rv-r-md);
	padding: var(--rv-s6) var(--rv-s5);
	text-align: center;
	cursor: pointer;
	transition: border-color var(--rv-dur) var(--rv-ease), background-color var(--rv-dur) var(--rv-ease);
	background: var(--rv-surface);
}
.rv-dropzone:hover, .rv-dropzone.dragover { border-color: var(--rv-accent); background: var(--rv-accent-tint); }
.rv-drop-icon { color: var(--rv-accent); margin-bottom: var(--rv-s2); }
.rv-drop-text { margin: 0; font-size: 0.95rem; color: var(--rv-text); font-weight: 600; }
.rv-drop-or { display: block; color: var(--rv-text-faint); font-size: 0.78rem; margin: var(--rv-s2) 0; }
.rv-drop-note { font-size: 0.72rem; color: var(--rv-text-faint); margin-top: var(--rv-s2); }

.rv-progress-area { margin-top: var(--rv-s4); }
.rv-status-text { margin: var(--rv-s2) 0 0; font-size: 0.85rem; color: var(--rv-accent-2); text-align: center; font-family: var(--rv-font-mono); }
.progress { background-color: var(--rv-surface-3); border-radius: var(--rv-r-pill); }
.progress-bar { background-color: var(--rv-accent); }

/* Loaded state */
.rv-loaded-header { display: flex; align-items: center; gap: var(--rv-s3); }
.rv-loaded-icon { color: var(--rv-success); line-height: 1; }
.rv-loaded-title {
	font-size: 0.74rem;
	color: var(--rv-text-muted);
	text-transform: uppercase;
	letter-spacing: 0.06em;
	font-weight: 600;
}
.rv-loaded-name { font-size: 1.05rem; font-weight: 700; color: var(--rv-text); }
.rv-label { font-size: 0.83rem; color: var(--rv-text-muted); }
.rv-export-row { padding-top: var(--rv-s3); border-top: 1px solid var(--rv-border-muted); }
.rv-action-row { display: flex; gap: var(--rv-s3); flex-wrap: wrap; }
.rv-export-btn { flex: 1; min-width: 160px; padding: 10px 16px; font-weight: 600; }
.rv-tree-btn { font-size: 0.85rem; padding: 8px 14px; }

/* --------------------------------------------------------------------------
   13. Export-view folder picker + action panel (ev-*)
   -------------------------------------------------------------------------- */
.ev-folder-picker { max-width: 600px; margin: 0 auto; text-align: left; }
.ev-picker-label { display: block; font-size: 0.88rem; color: var(--rv-text-muted); margin-bottom: 6px; font-weight: 500; }
.ev-picker-row { display: flex; align-items: center; gap: var(--rv-s2); }
.ev-picker-input {
	flex: 1;
	background: var(--rv-field-bg) !important;
	border-color: var(--rv-border-interactive) !important;
	color: var(--rv-text-soft) !important;
	font-size: 0.86rem;
}
.ev-picker-input:focus { border-color: var(--rv-accent) !important; box-shadow: none !important; }
.ev-picker-input::placeholder { color: var(--rv-text-faint) !important; }

.ev-action-panel {
	max-width: 600px;
	margin: 0 auto;
	padding: var(--rv-s5) var(--rv-s5);
	background: var(--rv-accent-tint);
	border: 1px solid var(--rv-accent-line);
	border-radius: var(--rv-r-md);
	text-align: center;
}
.ev-no-files { background: var(--rv-surface); border-color: var(--rv-border); }
.ev-action-title { display: flex; align-items: center; justify-content: center; gap: var(--rv-s3); margin-bottom: var(--rv-s4); flex-wrap: wrap; }
.ev-loaded-badge {
	display: inline-block;
	padding: 4px 12px;
	border-radius: var(--rv-r-pill);
	font-size: 0.82rem;
	font-weight: 600;
	background: var(--rv-success-soft);
	color: var(--rv-success);
	border: 1px solid transparent;
}
.ev-badge-gray { background: var(--rv-surface-3); color: var(--rv-text-muted); border-color: var(--rv-border); }
.ev-loaded-name { font-size: 0.9rem; font-weight: 600; color: var(--rv-text-soft); }
.ev-action-btns { display: flex; gap: var(--rv-s3); justify-content: center; flex-wrap: wrap; }

/* --------------------------------------------------------------------------
   14. Unified home "/" — hero + embedded dropzone + staged progress
   -------------------------------------------------------------------------- */
.rv-home2 { position: relative; max-width: 980px; margin: 0 auto; padding: var(--rv-s6) var(--rv-s4) var(--rv-s7); }
.rv-home2-hero { position: relative; text-align: center; padding: var(--rv-s6) 0 var(--rv-s5); }
/* Quiet pastel blobs — the only "atmosphere", no glow */
.rv-blob {
	position: absolute;
	border-radius: 50%;
	filter: blur(110px);
	opacity: 0.5;
	pointer-events: none;
	z-index: -1;
}
.rv-blob-a { width: 380px; height: 380px; background: var(--rv-accent-fill); top: -120px; left: 4%; }
.rv-blob-b { width: 340px; height: 340px; background: var(--rv-accent-2-fill); top: 40px; right: 4%; }

.rv-home2-title {
	font-family: var(--rv-font-display);
	font-size: clamp(1.9rem, 4.6vw, 2.9rem);
	font-weight: 750;
	letter-spacing: -0.025em;
	line-height: 1.15;
	margin: var(--rv-s4) 0 var(--rv-s2);
	color: var(--rv-text);
}
/* Gradient whitelist item 2: hero headline second line */
.rv-home2-title .rv-grad-text {
	display: block;
	background: var(--rv-gradient);
	-webkit-background-clip: text;
	background-clip: text;
	-webkit-text-fill-color: transparent;
}
.rv-home2-lead { color: var(--rv-text-muted); font-size: 1.02rem; max-width: 56ch; margin: 0 auto; line-height: 1.6; }

.rv-upload-card { max-width: 620px; margin: var(--rv-s5) auto 0; text-align: center; }
.rv-drop-actions { display: flex; justify-content: center; gap: var(--rv-s2); margin-top: var(--rv-s3); flex-wrap: wrap; }

/* Staged extraction progress (feeds off /Api/Status) */
.rv-stepper { display: flex; gap: var(--rv-s2); margin: var(--rv-s4) 0 var(--rv-s3); }
.rv-st { flex: 1; position: relative; text-align: center; font-size: 0.72rem; color: var(--rv-text-muted); }
.rv-st::before {
	content: '';
	position: absolute;
	top: 14px;
	right: 50%;
	width: 100%;
	height: 1px;
	background: var(--rv-border);
}
.rv-st:first-child::before { display: none; }
.rv-st-dot {
	position: relative;
	z-index: 1;
	width: 28px;
	height: 28px;
	margin: 0 auto 6px;
	border-radius: 50%;
	display: flex;
	align-items: center;
	justify-content: center;
	background: var(--rv-surface-2);
	border: 1px solid var(--rv-border);
	color: var(--rv-text-faint);
	font-size: 0.72rem;
	font-weight: 700;
}
.rv-st.done { color: var(--rv-text-muted); }
.rv-st.done .rv-st-dot { background: var(--rv-accent-2-fill); border-color: transparent; color: var(--rv-accent-2); }
.rv-st.cur { color: var(--rv-text); font-weight: 600; }
.rv-st.cur .rv-st-dot { background: var(--rv-accent); border-color: var(--rv-accent); color: var(--rv-accent-on); }
.rv-st.err .rv-st-dot { background: var(--rv-danger-soft); border-color: var(--rv-danger); color: var(--rv-danger); }

/* Resume card (returning user) */
.rv-resume-card {
	display: flex;
	align-items: center;
	gap: var(--rv-s4);
	flex-wrap: wrap;
	max-width: 620px;
	margin: var(--rv-s5) auto 0;
	padding: var(--rv-s4) var(--rv-s5);
	background: var(--rv-surface);
	border: 1px solid var(--rv-accent-line);
	border-radius: var(--rv-r-lg);
	text-align: left;
}
.rv-resume-icon { color: var(--rv-accent); }
.rv-resume-title { font-weight: 600; color: var(--rv-text); }
.rv-resume-sub { font-size: 0.84rem; color: var(--rv-text-muted); }

/* Marketing below the fold */
.rv-below-fold { margin-top: var(--rv-s7); }

/* --------------------------------------------------------------------------
   15. Landing marketing blocks (pipeline + features) — shared by "/"
   -------------------------------------------------------------------------- */
.rv-landing { max-width: 940px; margin: 0 auto; padding: var(--rv-s6) var(--rv-s4) var(--rv-s7); }
.rv-landing-hero { text-align: center; margin-bottom: var(--rv-s7); }
.rv-landing-eyebrow {
	display: inline-block;
	font-size: 0.74rem;
	font-weight: 600;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--rv-accent);
	background: var(--rv-accent-fill);
	border: none;
	padding: 4px 12px;
	border-radius: var(--rv-r-pill);
	margin-bottom: var(--rv-s4);
}
.rv-landing-title { font-size: clamp(2.6rem, 7vw, 4rem); margin-bottom: var(--rv-s3); }
.rv-landing-lead { color: var(--rv-text-muted); font-size: 1.1rem; max-width: 640px; margin: 0 auto; line-height: 1.6; }
.rv-landing-cta { display: flex; gap: var(--rv-s3); justify-content: center; flex-wrap: wrap; margin-top: var(--rv-s5); }
.rv-landing-start { font-weight: 700; padding-left: var(--rv-s5); padding-right: var(--rv-s5); }

/* The 5-step pipeline banner */
.rv-pipeline {
	display: flex;
	background: var(--rv-bg-elevated);
	border: 1px solid var(--rv-border-muted);
	border-radius: var(--rv-r-lg);
	padding: var(--rv-s5) var(--rv-s3);
	margin-bottom: var(--rv-s6);
	overflow-x: auto;
}
.rv-pipe-step {
	flex: 1;
	min-width: 148px;
	text-align: center;
	position: relative;
	padding: 0 var(--rv-s2);
}
.rv-pipe-connector {
	position: absolute;
	top: 20px;
	right: 50%;
	width: 100%;
	height: 1px;
	background: var(--rv-border);
	z-index: 0;
}
.rv-pipe-num {
	position: relative;
	z-index: 1;
	width: 40px;
	height: 40px;
	margin: 0 auto var(--rv-s2);
	border-radius: 50%;
	background: var(--rv-accent-fill);
	border: 1px solid transparent;
	color: var(--rv-accent);
	font-weight: 700;
	display: flex;
	align-items: center;
	justify-content: center;
}
.rv-pipe-icon { color: var(--rv-text-muted); margin-bottom: 4px; }
.rv-pipe-title { font-weight: 600; color: var(--rv-text); font-size: 0.92rem; }
.rv-pipe-sub { color: var(--rv-text-muted); font-size: 0.76rem; margin-top: 2px; }

/* Feature highlights */
.rv-landing-features {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
	gap: var(--rv-s4);
	margin-bottom: var(--rv-s6);
}
.rv-feature { padding: var(--rv-s5); max-width: none; }
.rv-feature-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 42px;
	height: 42px;
	border-radius: var(--rv-r-md);
	background: var(--rv-accent-tint);
	color: var(--rv-accent);
	margin-bottom: var(--rv-s3);
}
.rv-feature:nth-child(2) .rv-feature-icon { background: var(--rv-accent-2-tint); color: var(--rv-accent-2); }
.rv-feature:nth-child(3) .rv-feature-icon { background: var(--rv-accent-3-tint); color: var(--rv-accent-3); }
.rv-feature-title { font-weight: 600; color: var(--rv-text); margin-bottom: 6px; }
.rv-feature-body { color: var(--rv-text-muted); font-size: 0.88rem; margin: 0; line-height: 1.55; }

.rv-landing-cta-bottom { text-align: center; }

/* Particle Viewer entry card (tokenized — no hard-coded hex) */
.rv-pkg-card2 {
	display: flex;
	align-items: center;
	gap: var(--rv-s4);
	max-width: 620px;
	margin: var(--rv-s4) auto 0;
	padding: var(--rv-s4) var(--rv-s5);
	background: var(--rv-accent-3-tint);
	border: 1px solid var(--rv-border-muted);
	border-radius: var(--rv-r-lg);
	text-align: left;
}
.rv-pkg-icon { color: var(--rv-accent-3); }
.rv-pkg-title { font-weight: 600; color: var(--rv-text); }
.rv-pkg-sub { font-size: 0.82rem; color: var(--rv-text-muted); }

/* Open-existing card (legacy Start page) */
.rv-open-existing { max-width: 560px; margin: 0 auto var(--rv-s4); border-color: var(--rv-accent-line); }
.rv-open-existing-row { display: flex; align-items: center; gap: var(--rv-s4); flex-wrap: wrap; }
.rv-open-existing-icon { color: var(--rv-accent); }
.rv-open-existing-title { font-weight: 600; color: var(--rv-text); }
.rv-open-existing-sub { font-size: 0.84rem; }

/* --------------------------------------------------------------------------
   16. Responsive
   -------------------------------------------------------------------------- */
@media (max-width: 1199.98px) {
	.rv-nav-link span.rv-nav-label { display: none; }
	.rv-nav-link { padding: 7px 10px; }
}

@media (max-width: 991.98px) {
	/* The left workspace rail becomes an off-canvas the user opens deliberately. */
	#project-sidebar {
		position: fixed;
		top: var(--rv-header-h);
		left: 0;
		height: calc(100vh - var(--rv-header-h));
		z-index: 1035;
		transform: translateX(-100%);
		transition: transform 0.25s var(--rv-ease);
		box-shadow: var(--rv-shadow-lg);
	}
	body.rv-nav-open #project-sidebar { transform: translateX(0); }
	#diagnostics-sidebar, #status-sidebar { width: 100vw; max-width: 100vw; }
	.rv-switcher { max-width: 140px; }
}

@media (max-width: 575.98px) {
	.rv-card { padding: var(--rv-s5) var(--rv-s4); }
	.rv-header { padding: 0 var(--rv-s3); gap: var(--rv-s2); }
	.rv-header .rv-btn-label { display: none; }
	.container { padding-left: var(--rv-s3); padding-right: var(--rv-s3); }
	.rv-drop-actions .btn { flex: 1 1 100%; }
}

/* Respect reduced-motion preferences */
@media (prefers-reduced-motion: reduce) {
	*, *::before, *::after { transition-duration: 0.001ms !important; animation-duration: 0.001ms !important; }
}
