/* ============================================================
   RSS Rover — Shell Design System
   Based on Cloude Design RSS Rover template
   Applies to: all app pages (reader, new-feed, personal-feeds, place, source-finder)
   ============================================================ */

@import url('https://fonts.googleapis.com/css2?family=Source+Serif+4:ital,opsz,wght@0,8..60,300..900;1,8..60,300..900&family=Geist:wght@300..700&family=JetBrains+Mono:wght@400;500;600&family=Lora:ital,wght@0,400;0,600;0,700;1,400;1,600&family=Crimson+Pro:ital,wght@0,300;0,400;0,600;1,300;1,400&family=Inter:wght@300;400;500;600&display=swap');

/* ── Token layer ─────────────────────────────────────────── */
:root {
  --paper:       oklch(0.985 0.008 78);
  --paper-2:     oklch(0.965 0.012 78);
  --paper-3:     oklch(0.945 0.014 78);
  --line:        oklch(0.88  0.012 75);
  --line-2:      oklch(0.80  0.014 75);
  --ink:         oklch(0.20  0.012 60);
  --ink-2:       oklch(0.35  0.012 62);
  --muted:       oklch(0.55  0.015 70);
  --muted-2:     oklch(0.68  0.014 72);
  --accent:      oklch(0.58  0.15  38);
  --accent-soft: oklch(0.92  0.05  48);
  --accent-ink:  oklch(0.38  0.13  38);
  --moss:        oklch(0.52  0.08 145);
  --amber:       oklch(0.72  0.13  75);
  --serif:       "Source Serif 4", Georgia, serif;
  --sans:        "Geist", -apple-system, BlinkMacSystemFont, sans-serif;
  --mono:        "JetBrains Mono", ui-monospace, monospace;
  --radius:      6px;
  --sidebar-w:   236px;
  --topbar-h:    44px;
}

[data-theme="dark"] {
  --paper:       oklch(0.18  0.008 60);
  --paper-2:     oklch(0.22  0.010 60);
  --paper-3:     oklch(0.26  0.012 60);
  --line:        oklch(0.32  0.012 60);
  --line-2:      oklch(0.40  0.014 60);
  --ink:         oklch(0.95  0.008 75);
  --ink-2:       oklch(0.82  0.010 72);
  --muted:       oklch(0.65  0.014 70);
  --muted-2:     oklch(0.52  0.012 68);
  --accent:      oklch(0.70  0.15  42);
  --accent-soft: oklch(0.32  0.08  42);
  --accent-ink:  oklch(0.82  0.13  42);
}

/* ══════════════════════════════════════════════════════════════
   COLOUR SCHEMES — 5 themes, each overrides CSS token layer.
   data-scheme is set on <html>. Dark mode ([data-theme="dark"])
   stacks on top via its own block. Both work together.
   ══════════════════════════════════════════════════════════════

   SCHEME 1 — Vanilla (default, warm cream)
   No [data-scheme] needed — this is :root baseline.

   SCHEME 2 — Slate (cool blue-grey surfaces)
   ────────────────────────────────────────── */
[data-scheme="slate"] {
  --paper:       oklch(0.975 0.006 240);
  --paper-2:     oklch(0.955 0.009 240);
  --paper-3:     oklch(0.932 0.011 240);
  --line:        oklch(0.86  0.010 240);
  --line-2:      oklch(0.78  0.013 240);
  --ink:         oklch(0.18  0.015 240);
  --ink-2:       oklch(0.32  0.015 240);
  --muted:       oklch(0.52  0.012 240);
  --muted-2:     oklch(0.66  0.010 240);
  --accent:      oklch(0.52  0.18  250);
  --accent-soft: oklch(0.91  0.05  250);
  --accent-ink:  oklch(0.32  0.16  250);
  --sans:        "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
  --serif:       "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
}
[data-scheme="slate"][data-theme="dark"] {
  --paper:       oklch(0.15  0.012 240);
  --paper-2:     oklch(0.19  0.015 240);
  --paper-3:     oklch(0.23  0.016 240);
  --line:        oklch(0.30  0.015 240);
  --line-2:      oklch(0.38  0.016 240);
  --accent:      oklch(0.65  0.18  250);
  --accent-soft: oklch(0.28  0.10  250);
  --accent-ink:  oklch(0.80  0.15  250);
}

/* SCHEME 3 — Moss (earthy warm green)
   ────────────────────────────────────────── */
[data-scheme="moss"] {
  --paper:       oklch(0.982 0.010 140);
  --paper-2:     oklch(0.960 0.015 140);
  --paper-3:     oklch(0.938 0.018 140);
  --line:        oklch(0.875 0.016 140);
  --line-2:      oklch(0.790 0.018 140);
  --ink:         oklch(0.18  0.020 145);
  --ink-2:       oklch(0.32  0.018 145);
  --muted:       oklch(0.52  0.014 145);
  --muted-2:     oklch(0.66  0.012 145);
  --accent:      oklch(0.48  0.14  145);
  --accent-soft: oklch(0.92  0.06  145);
  --accent-ink:  oklch(0.28  0.12  145);
  --serif:       "Lora", Georgia, serif;
  --sans:        "Lora", Georgia, serif;
}
[data-scheme="moss"][data-theme="dark"] {
  --paper:       oklch(0.14  0.015 145);
  --paper-2:     oklch(0.18  0.018 145);
  --paper-3:     oklch(0.22  0.020 145);
  --line:        oklch(0.29  0.018 145);
  --line-2:      oklch(0.37  0.020 145);
  --accent:      oklch(0.62  0.15  145);
  --accent-soft: oklch(0.26  0.10  145);
  --accent-ink:  oklch(0.80  0.12  145);
}

/* SCHEME 4 — Peach (light warm orange)
   ────────────────────────────────────────── */
[data-scheme="peach"] {
  --paper:       oklch(0.990 0.018 52);
  --paper-2:     oklch(0.972 0.025 52);
  --paper-3:     oklch(0.950 0.030 52);
  --line:        oklch(0.885 0.028 52);
  --line-2:      oklch(0.810 0.030 52);
  --ink:         oklch(0.22  0.020 42);
  --ink-2:       oklch(0.36  0.018 42);
  --muted:       oklch(0.56  0.016 50);
  --muted-2:     oklch(0.70  0.014 52);
  --accent:      oklch(0.60  0.19  42);
  --accent-soft: oklch(0.94  0.07  52);
  --accent-ink:  oklch(0.38  0.16  42);
  --serif:       "Source Serif 4", Georgia, serif;
  --sans:        "Geist", -apple-system, BlinkMacSystemFont, sans-serif;
}
[data-scheme="peach"][data-theme="dark"] {
  --paper:       oklch(0.18  0.020 42);
  --paper-2:     oklch(0.22  0.024 42);
  --paper-3:     oklch(0.26  0.028 42);
  --line:        oklch(0.34  0.025 42);
  --line-2:      oklch(0.42  0.026 42);
  --accent:      oklch(0.76  0.18  48);
  --accent-soft: oklch(0.30  0.10  48);
  --accent-ink:  oklch(0.90  0.14  48);
}

/* SCHEME 5 — Sand (light warm yellow)
   ────────────────────────────────────────── */
[data-scheme="sand"] {
  --paper:       oklch(0.992 0.016 95);
  --paper-2:     oklch(0.975 0.022 90);
  --paper-3:     oklch(0.955 0.026 88);
  --line:        oklch(0.888 0.024 88);
  --line-2:      oklch(0.815 0.026 88);
  --ink:         oklch(0.20  0.018 80);
  --ink-2:       oklch(0.34  0.016 80);
  --muted:       oklch(0.54  0.014 82);
  --muted-2:     oklch(0.68  0.012 85);
  --accent:      oklch(0.58  0.16  78);
  --accent-soft: oklch(0.95  0.06  90);
  --accent-ink:  oklch(0.36  0.14  78);
  --serif:       "Lora", Georgia, serif;
  --sans:        "Lora", Georgia, serif;
}
[data-scheme="sand"][data-theme="dark"] {
  --paper:       oklch(0.17  0.018 80);
  --paper-2:     oklch(0.21  0.022 80);
  --paper-3:     oklch(0.25  0.026 80);
  --line:        oklch(0.33  0.022 80);
  --line-2:      oklch(0.41  0.024 80);
  --accent:      oklch(0.78  0.17  78);
  --accent-soft: oklch(0.29  0.10  78);
  --accent-ink:  oklch(0.92  0.13  78);
}

/* ── Scheme switcher dot buttons ─────────────────────────────
   5 small circle buttons in the topbar.
   The active dot gets a ring; others are plain circles.
   ──────────────────────────────────────────────────────────── */
.rv-scheme-dots {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 0 6px;
}
.rv-scheme-dot {
  width: 13px;
  height: 13px;
  border-radius: 50%;
  border: 2px solid transparent;
  cursor: pointer;
  transition: transform .15s, box-shadow .15s;
  flex-shrink: 0;
  position: relative;
}
.rv-scheme-dot:hover {
  transform: scale(1.25);
}
.rv-scheme-dot.active {
  box-shadow: 0 0 0 2px var(--paper), 0 0 0 4px currentColor;
  transform: scale(1.15);
}
/* Individual dot colours */
.rv-scheme-dot[data-s="vanilla"] { background: oklch(0.88 0.06 78);  color: oklch(0.58 0.15 38); }
.rv-scheme-dot[data-s="slate"]   { background: oklch(0.52 0.18 250); color: oklch(0.52 0.18 250); }
.rv-scheme-dot[data-s="moss"]    { background: oklch(0.48 0.14 145); color: oklch(0.48 0.14 145); }
.rv-scheme-dot[data-s="peach"]   { background: oklch(0.80 0.14 48);  color: oklch(0.80 0.14 48); }
.rv-scheme-dot[data-s="sand"]    { background: oklch(0.85 0.12 90);  color: oklch(0.85 0.12 90); }

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html, body { height: 100%; }

body.rover-body {
  font-family: var(--sans);
  font-size: 13.5px;
  color: var(--ink);
  background: var(--paper);
  -webkit-font-smoothing: antialiased;
  font-feature-settings: "ss01","cv11";
  overflow: hidden;           /* shell manages scroll per-pane */
}

button { font-family: inherit; color: inherit; background: transparent; border: 0; cursor: pointer; padding: 0; }
input, textarea, select { font-family: inherit; color: var(--ink); background: var(--paper); }
a { color: inherit; text-decoration: none; }

/* ── Topbar ──────────────────────────────────────────────── */
.rv-topbar {
  position: fixed;
  top: 0; left: 0; right: 0;
  height: var(--topbar-h);
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 0 12px 0 14px;
  border-bottom: 1px solid var(--line);
  background: var(--paper);
  z-index: 200;
}

.rv-brand {
  display: flex; align-items: center; gap: 8px;
  font-family: var(--serif);
  font-weight: 700; font-size: 16px;
  font-style: italic;
  letter-spacing: -0.01em;
  width: calc(var(--sidebar-w) - 14px);
  flex-shrink: 0;
  text-decoration: none;
  color: var(--ink);
}
.rv-brand svg {
  flex-shrink: 0;
  color: var(--accent);
}
.rv-brand-dot {
  width: 9px; height: 9px; border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--accent) 18%, transparent);
  flex-shrink: 0;
}

.rv-search {
  flex: 1; max-width: 480px;
  display: flex; align-items: center; gap: 7px;
  padding: 5px 9px;
  background: var(--paper-2);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  color: var(--muted);
  cursor: text;
}
.rv-search:hover { border-color: var(--line-2); }
.rv-search input {
  flex: 1; border: 0; outline: 0;
  background: transparent; font-size: 12.5px;
  color: var(--ink);
}
.rv-search input::placeholder { color: var(--muted); }
.rv-search .kbd {
  font-family: var(--mono); font-size: 9.5px;
  background: var(--paper); border: 1px solid var(--line);
  padding: 1px 5px; border-radius: 3px; color: var(--muted);
}

.rv-topbar-actions { display: flex; align-items: center; gap: 4px; margin-left: auto; }

/* icon button */
.rv-ib {
  display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; border-radius: 5px; color: var(--muted);
  flex-shrink: 0;
}
.rv-ib:hover { background: var(--paper-2); color: var(--ink); }
.rv-ib.on   { color: var(--accent); background: var(--accent-soft); }

/* auth avatar / button */
.rv-auth-btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 10px 4px 5px;
  border-radius: 20px;
  border: 1px solid var(--line);
  background: var(--paper-2);
  font-size: 12px; color: var(--ink-2);
  cursor: pointer;
}
.rv-auth-btn:hover { border-color: var(--line-2); background: var(--paper-3); }
.rv-avatar {
  width: 24px; height: 24px; border-radius: 50%;
  background: var(--accent); color: white;
  display: inline-flex; align-items: center; justify-content: center;
  font-weight: 600; font-size: 10px; flex-shrink: 0;
}
.rv-auth-btn .rv-auth-name { font-weight: 500; font-size: 12px; max-width: 100px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* small text-style button in topbar */
.rv-topbar-link-btn {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 5px 10px; border-radius: 5px;
  font-size: 12px; font-weight: 500;
  border: 1px solid var(--line);
  background: var(--paper); color: var(--ink);
}
.rv-topbar-link-btn:hover { background: var(--paper-2); }

/* ── Page frame ──────────────────────────────────────────── */
.rv-frame {
  display: block;
  min-height: 100vh;
}

/* ── Sidebar ─────────────────────────────────────────────── */
.rv-sidebar {
  grid-row: 1 / -1;   /* spans topbar row too — but topbar overlaps */
  padding-top: var(--topbar-h);
  border-right: 1px solid var(--line);
  background: var(--paper);
  overflow-y: auto;
  display: flex; flex-direction: column;
  position: fixed;
  top: 0; left: 0; bottom: 0;
  width: var(--sidebar-w);
  z-index: 100;
}
.rv-sidebar-inner { padding: 10px 0 40px; flex: 1; }

.rv-sb-section { margin-bottom: 2px; padding: 0 6px; }
.rv-sb-label {
  font-family: var(--mono);
  font-size: 9.5px; font-weight: 600;
  letter-spacing: .08em; text-transform: uppercase;
  color: var(--muted);
  margin: 12px 8px 5px;
  display: flex; align-items: center; justify-content: space-between;
}
.rv-sb-label button { color: var(--muted); opacity: .7; }
.rv-sb-label button:hover { color: var(--accent); opacity: 1; }

/* nav item */
.rv-ni {
  display: flex; align-items: center; gap: 8px;
  width: 100%; padding: 5px 8px; border-radius: 5px;
  color: var(--ink-2); font-size: 12.5px; line-height: 1.2;
  cursor: pointer; text-align: left; text-decoration: none;
}
.rv-ni:hover { background: var(--paper-2); }
.rv-ni.act   { background: var(--accent-soft); color: var(--accent-ink); font-weight: 500; }
.rv-ni .ic   { width: 14px; height: 14px; flex-shrink: 0; opacity: .75; }
.rv-ni.act .ic { opacity: 1; }
.rv-ni .cnt  { margin-left: auto; font-family: var(--mono); font-size: 9.5px; color: var(--muted); }
.rv-ni.act .cnt { color: var(--accent-ink); }

/* feed items (indented) */
.rv-ni.feed  { padding-left: 20px; font-size: 12px; }
.rv-ni .fav  {
  width: 13px; height: 13px; border-radius: 2px; flex-shrink: 0;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 8px; font-weight: 700; color: white; font-family: var(--serif);
}

/* folder row */
.rv-fr {
  display: flex; align-items: center; gap: 5px;
  padding: 4px 8px; font-size: 12px; color: var(--ink-2);
  font-weight: 500; cursor: pointer; border-radius: 5px; width: 100%;
}
.rv-fr:hover { background: var(--paper-2); }
.rv-fr .chev { width: 10px; height: 10px; transition: transform .15s; color: var(--muted); }
.rv-fr.open .chev { transform: rotate(90deg); }
.rv-fr .cnt  { margin-left: auto; font-family: var(--mono); font-size: 9.5px; color: var(--muted); }

.rv-divider { height: 1px; background: var(--line); margin: 6px 8px; }

/* ── Main content area ───────────────────────────────────── */
.rv-main {
  margin-top: var(--topbar-h);
  margin-left: var(--sidebar-w);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  height: calc(100vh - var(--topbar-h));
  min-height: 0;
}

/* ── 3-pane reader layout ────────────────────────────────── */
.rv-panes {
  display: flex; flex: 1; overflow: hidden;
  min-height: 0;
}

/* list pane */
.rv-list-pane {
  width: 380px; min-width: 200px; max-width: 60%;
  border-right: 1px solid var(--line);
  overflow-y: auto; display: flex; flex-direction: column;
  background: var(--paper); flex-shrink: 0;
}

/* resize handle */
.rv-resize-handle {
  width: 5px; flex-shrink: 0; cursor: col-resize;
  background: transparent; position: relative; z-index: 10;
}
.rv-resize-handle:hover,
.rv-resize-handle.dragging { background: var(--accent-soft); }
.rv-resize-handle::after {
  content: ""; position: absolute;
  top: 50%; left: 50%; transform: translate(-50%,-50%);
  width: 2px; height: 40px; border-radius: 2px;
  background: var(--line-2); pointer-events: none;
}

/* reader pane */
.rv-reader-pane {
  flex: 1; overflow-y: auto; background: var(--paper);
  min-width: 200px; min-height: 0;
}

/* ── List pane internals ─────────────────────────────────── */
.rv-list-header {
  position: sticky; top: 0;
  background: color-mix(in oklch, var(--paper) 96%, transparent);
  backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--line);
  padding: 12px 16px 8px;
  z-index: 5;
}
.rv-list-title {
  font-family: var(--serif); font-size: 20px; font-weight: 600;
  letter-spacing: -.01em; display: flex; align-items: baseline; gap: 8px;
}
.rv-list-title .cnt { font-family: var(--mono); font-size: 10px; color: var(--muted); font-weight: 400; }
.rv-list-sub  { font-size: 11.5px; color: var(--muted); margin-top: 2px; }
.rv-list-controls { display: flex; align-items: center; gap: 3px; margin-top: 8px; }
.rv-chip {
  display: inline-flex; align-items: center;
  padding: 2px 7px;
  border: 1px solid var(--line); border-radius: 20px;
  font-size: 10.5px; color: var(--ink-2); cursor: pointer;
}
.rv-chip:hover { border-color: var(--line-2); }
.rv-chip.act   { background: var(--ink); color: var(--paper); border-color: var(--ink); }

/* article row */
.rv-ar {
  display: grid; grid-template-columns: 1fr auto;
  gap: 2px 10px;
  padding: 10px 16px;
  border-bottom: 1px solid var(--line);
  cursor: pointer; position: relative;
}
.rv-ar:hover { background: var(--paper-2); }
.rv-ar.sel   { background: var(--accent-soft); }
.rv-ar.sel::before {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0;
  width: 3px; background: var(--accent);
}
.rv-ar.unread .rv-ar-title { font-weight: 600; }
.rv-ar.read   .rv-ar-title { color: var(--muted); font-weight: 400; }
.rv-ar.read   .rv-ar-meta  { color: var(--muted-2); }

.rv-ar-meta {
  grid-column: 1;
  display: flex; align-items: center; gap: 6px;
  font-family: var(--mono); font-size: 9px;
  color: var(--muted); text-transform: uppercase; letter-spacing: .03em;
}
.rv-ar-meta .dot { width: 3px; height: 3px; border-radius: 50%; background: currentColor; opacity: .5; }
.rv-ar-meta .sd  { width: 7px; height: 7px; border-radius: 2px; }
.rv-ar-title {
  grid-column: 1;
  font-family: var(--serif); font-size: 14.5px; line-height: 1.25;
  color: var(--ink); letter-spacing: -.005em; margin-top: 2px;
  text-wrap: pretty;
}
.rv-ar-ex {
  grid-column: 1;
  font-size: 11.5px; color: var(--muted); line-height: 1.4; margin-top: 3px;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.rv-ar-tags { grid-column: 1; display: flex; gap: 3px; margin-top: 4px; flex-wrap: wrap; }
.rv-tag {
  font-family: var(--mono); font-size: 8px; padding: 1px 4px; border-radius: 3px;
  background: var(--paper-2); color: var(--muted); border: 1px solid var(--line);
}
.rv-thumb {
  grid-row: 1 / span 4; grid-column: 2;
  width: 64px; height: 64px; border-radius: 3px; overflow: hidden; flex-shrink: 0;
  background: var(--paper-3);
}
.rv-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.rv-stripes {
  width: 100%; height: 100%;
  background-image: linear-gradient(135deg, var(--sa) 0%, var(--sa) 50%, var(--sb) 50%, var(--sb) 100%);
  background-size: 10px 10px;
}

/* ── Reader pane internals ───────────────────────────────── */
.rv-reader-toolbar {
  position: sticky; top: 0; z-index: 5;
  display: flex; align-items: center; gap: 4px;
  padding: 6px 16px;
  background: color-mix(in oklch, var(--paper) 96%, transparent);
  backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--line);
}
.rv-reader-toolbar .bc { color: var(--muted); font-family: var(--mono); font-size: 9px; text-transform: uppercase; letter-spacing: .06em; }
.rv-reader-toolbar .sp { flex: 1; }

.rv-reader-content { max-width: 620px; margin: 0 auto; padding: 28px 28px 60px; }
.rv-reader-eyebrow {
  display: flex; align-items: center; gap: 8px;
  font-family: var(--mono); font-size: 10px;
  color: var(--accent-ink); text-transform: uppercase; letter-spacing: .08em;
  margin-bottom: 12px;
}
.rv-reader-eyebrow .sd { width: 8px; height: 8px; border-radius: 2px; }
.rv-reader-h1 {
  font-family: var(--serif); font-size: 28px; font-weight: 600;
  line-height: 1.12; letter-spacing: -.018em; margin: 0 0 10px; text-wrap: balance;
}
.rv-reader-dek {
  font-family: var(--serif); font-size: 15px; color: var(--ink-2);
  line-height: 1.45; font-style: italic; margin-bottom: 14px;
}
.rv-reader-byline {
  display: flex; align-items: center; gap: 10px;
  padding-bottom: 14px; border-bottom: 1px solid var(--line);
  font-size: 11px; color: var(--muted);
}
.rv-reader-byline .au { color: var(--ink); font-weight: 500; }

/* hero image area */
.rv-hero {
  height: 200px; border-radius: 5px; margin: 16px 0;
  position: relative; overflow: hidden;
}
.rv-hero img { width: 100%; height: 100%; object-fit: cover; display: block; }
.rv-hero .cap {
  position: absolute; bottom: 8px; left: 10px; right: 10px;
  font-family: var(--mono); font-size: 9px; color: rgba(255,255,255,.7);
  text-transform: uppercase; letter-spacing: .06em;
}

/* article body */
.rv-body-text { font-family: var(--serif); font-size: 15px; line-height: 1.65; color: var(--ink); }
.rv-body-text p   { margin: 0 0 14px; text-wrap: pretty; }
.rv-body-text h2  { font-size: 18px; font-weight: 600; margin: 24px 0 8px; letter-spacing: -.01em; }
.rv-body-text blockquote { margin: 16px 0; padding: 5px 14px; border-left: 3px solid var(--accent); font-style: italic; color: var(--ink-2); }
.rv-hl { background: color-mix(in oklch, var(--amber) 30%, transparent); padding: 0 2px; border-bottom: 1px solid color-mix(in oklch, var(--amber) 60%, transparent); }

/* open original link */
.rv-open-original {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 8px 14px; border-radius: 5px;
  background: var(--ink); color: var(--paper);
  font-size: 12px; font-weight: 500;
  margin: 20px 0 0; text-decoration: none;
}
.rv-open-original:hover { background: var(--accent); }

/* empty reader state */
.rv-empty {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  height: 100%; color: var(--muted); text-align: center; padding: 40px;
}
.rv-empty-glyph { font-family: var(--serif); font-size: 72px; font-style: italic; color: var(--line-2); line-height: 1; margin-bottom: 10px; }
.rv-empty h3    { font-family: var(--serif); font-size: 18px; color: var(--ink); margin: 0 0 6px; font-weight: 500; }
.rv-empty p     { font-size: 12.5px; max-width: 280px; }

/* ── Command palette ─────────────────────────────────────── */
.rv-overlay {
  position: fixed; inset: 0;
  background: color-mix(in oklch, var(--ink) 28%, transparent);
  z-index: 1000; display: flex; align-items: flex-start; justify-content: center;
  padding-top: 80px; animation: rv-fadein .12s;
}
@keyframes rv-fadein { from { opacity: 0 } to { opacity: 1 } }
.rv-palette {
  background: var(--paper); border: 1px solid var(--line);
  border-radius: 8px; width: 560px; max-width: 92vw;
  box-shadow: 0 20px 70px rgba(0,0,0,.2); overflow: hidden;
}
.rv-pal-in {
  display: flex; align-items: center; gap: 8px;
  padding: 12px 14px; border-bottom: 1px solid var(--line);
}
.rv-pal-in input {
  flex: 1; border: 0; outline: 0; background: transparent;
  font-size: 15px; font-family: var(--serif); color: var(--ink);
}
.rv-pal-res { max-height: 320px; overflow-y: auto; padding: 4px 0; }
.rv-pg  { font-family: var(--mono); font-size: 9px; color: var(--muted); text-transform: uppercase; letter-spacing: .08em; padding: 6px 14px 3px; }
.rv-pri {
  display: flex; align-items: center; gap: 8px;
  padding: 7px 14px; cursor: pointer; font-size: 12.5px; color: var(--ink);
}
.rv-pri:hover, .rv-pri.sel { background: var(--paper-2); }
.rv-pri.sel { background: var(--accent-soft); color: var(--accent-ink); }
.rv-pri .kbd { margin-left: auto; font-family: var(--mono); font-size: 9px; color: var(--muted); }

/* ── Auth modal ──────────────────────────────────────────── */
.rv-auth-modal-wrap {
  position: fixed; inset: 0;
  background: color-mix(in oklch, var(--ink) 30%, transparent);
  z-index: 1100; display: flex; align-items: center; justify-content: center;
}
.rv-auth-modal {
  background: var(--paper); border: 1px solid var(--line);
  border-radius: 8px; width: 400px; max-width: 92vw;
  box-shadow: 0 20px 60px rgba(0,0,0,.18); overflow: hidden;
  display: flex; flex-direction: column;
}
.rv-auth-head { padding: 18px 20px 14px; border-bottom: 1px solid var(--line); }
.rv-auth-head h2 { font-family: var(--serif); font-size: 20px; font-weight: 600; margin: 0 0 2px; }
.rv-auth-head .sub { font-size: 11.5px; color: var(--muted); }
.rv-auth-body { padding: 18px 20px; }
.rv-auth-foot { padding: 10px 20px 16px; display: flex; flex-direction: column; gap: 8px; }
.rv-auth-switcher { display: flex; gap: 4px; margin-bottom: 14px; }
.rv-auth-sw {
  flex: 1; padding: 6px; border-radius: 4px; font-size: 12px; font-weight: 500;
  border: 1px solid var(--line); color: var(--ink-2); background: var(--paper-2);
}
.rv-auth-sw.on { background: var(--ink); color: var(--paper); border-color: var(--ink); }
.rv-field { margin-bottom: 12px; }
.rv-field label { display: block; font-family: var(--mono); font-size: 9px; color: var(--muted); text-transform: uppercase; letter-spacing: .06em; margin-bottom: 4px; }
.rv-field input {
  width: 100%; padding: 7px 9px; border: 1px solid var(--line);
  border-radius: 5px; font-size: 12.5px; outline: 0; color: var(--ink); background: var(--paper);
}
.rv-field input:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.rv-btn { display: inline-flex; align-items: center; gap: 5px; padding: 7px 14px; border-radius: 5px; font-size: 12.5px; font-weight: 500; border: 1px solid var(--line); background: var(--paper); color: var(--ink); cursor: pointer; }
.rv-btn:hover { background: var(--paper-2); }
.rv-btn.pr { background: var(--ink); color: var(--paper); border-color: var(--ink); width: 100%; justify-content: center; }
.rv-btn.pr:hover { background: var(--accent); border-color: var(--accent); }
.rv-btn.ghost { border-color: transparent; }
.rv-btn.danger { background: #dc2626; border-color: #dc2626; color: white; width: 100%; justify-content: center; }
.rv-auth-status { font-size: 12px; color: var(--muted); margin-top: 4px; }
.rv-auth-status.err { color: #dc2626; }
.rv-auth-status.ok  { color: var(--moss); }
.rv-auth-account-card { display: flex; align-items: center; gap: 10px; padding: 12px; background: var(--paper-2); border-radius: 6px; border: 1px solid var(--line); margin-bottom: 14px; }
.rv-auth-account-card .av { width: 36px; height: 36px; border-radius: 50%; background: var(--accent); color: white; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 13px; flex-shrink: 0; }
.rv-auth-account-name { font-weight: 600; font-size: 13px; }
.rv-auth-account-email { font-size: 11.5px; color: var(--muted); }

/* ── Generic workspace content (non-reader pages) ────────── */
.rv-workspace {
  flex: 1; overflow-y: auto; padding: 28px;
  background: var(--paper);
}
.rv-page-title { font-family: var(--serif); font-size: 24px; font-weight: 600; letter-spacing: -.01em; margin: 0 0 4px; }
.rv-page-sub   { font-size: 12.5px; color: var(--muted); margin-bottom: 24px; }

/* section card */
.rv-card {
  background: var(--paper); border: 1px solid var(--line);
  border-radius: 7px; overflow: hidden; margin-bottom: 16px;
}
.rv-card-head { padding: 14px 18px 10px; border-bottom: 1px solid var(--line); font-weight: 600; font-size: 13.5px; }
.rv-card-body { padding: 14px 18px; }

/* form fields (workspace) */
.rv-ws-field  { margin-bottom: 12px; }
.rv-ws-field label { display: block; font-family: var(--mono); font-size: 9px; color: var(--muted); text-transform: uppercase; letter-spacing: .06em; margin-bottom: 4px; }
.rv-ws-field input,
.rv-ws-field select,
.rv-ws-field textarea {
  width: 100%; padding: 8px 10px;
  border: 1px solid var(--line); border-radius: 5px;
  font-size: 13px; outline: 0; background: var(--paper); color: var(--ink);
}
.rv-ws-field input:focus,
.rv-ws-field textarea:focus,
.rv-ws-field select:focus { border-color: var(--accent); }

/* list items (feed racks, libraries, etc.) */
.rv-item-list  { list-style: none; display: flex; flex-direction: column; gap: 8px; }
.rv-item-card  {
  display: flex; align-items: flex-start; gap: 12px;
  padding: 12px 16px; background: var(--paper);
  border: 1px solid var(--line); border-radius: 7px;
}
.rv-item-card:hover { border-color: var(--line-2); }
.rv-item-icon  { font-size: 20px; flex-shrink: 0; margin-top: 2px; }
.rv-item-meta  { flex: 1; min-width: 0; }
.rv-item-name  { font-weight: 600; font-size: 13.5px; margin-bottom: 2px; }
.rv-item-sub   { font-size: 11.5px; color: var(--muted); line-height: 1.4; }
.rv-item-actions { display: flex; gap: 6px; flex-shrink: 0; margin-top: 2px; }
.rv-item-btn {
  padding: 4px 10px; border-radius: 5px; font-size: 11.5px;
  border: 1px solid var(--line); background: var(--paper-2); color: var(--ink-2);
}
.rv-item-btn:hover { border-color: var(--line-2); color: var(--ink); }
.rv-item-btn.pr { background: var(--ink); color: var(--paper); border-color: var(--ink); }
.rv-item-btn.pr:hover { background: var(--accent); border-color: var(--accent); }

/* status toast */
.rv-toast {
  position: fixed; bottom: 20px; right: 20px; z-index: 2000;
  padding: 10px 16px; border-radius: 6px;
  background: var(--ink); color: var(--paper);
  font-size: 12.5px; box-shadow: 0 4px 20px rgba(0,0,0,.2);
  animation: rv-fadein .2s;
}
.rv-toast.err { background: #dc2626; }
.rv-toast.ok  { background: oklch(0.52 0.08 145); }

/* ── Scrollbar ───────────────────────────────────────────── */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: color-mix(in oklch, var(--ink) 10%, transparent); border-radius: 10px; border: 2px solid var(--paper); }
::-webkit-scrollbar-thumb:hover { background: color-mix(in oklch, var(--ink) 20%, transparent); }

/* ── Loading skeleton ────────────────────────────────────── */
.rv-skel { background: var(--paper-2); border-radius: 4px; animation: rv-pulse 1.4s ease infinite; }
@keyframes rv-pulse { 0%,100%{opacity:.6} 50%{opacity:1} }

/* ── Responsive collapse ─────────────────────────────────── */
@media (max-width: 900px) {
  :root { --sidebar-w: 0px; }
  .rv-sidebar { transform: translateX(-236px); transition: transform .2s; width: 236px; }
  .rv-sidebar.open { transform: translateX(0); }
  .rv-main { margin-left: 0; }
  .rv-brand { width: auto; }
  .rv-menu-toggle { display: flex !important; }
}
.rv-menu-toggle { display: none; }

/* ── Workspace page variant (non-reader pages) ───────────────
   Applied via style attr on rv-main in workspace pages.
   Allows full scroll of page content below fixed topbar.
   ──────────────────────────────────────────────────────────── */
.rv-main--workspace {
  overflow-y: auto !important;
  overflow-x: hidden;
  height: calc(100vh - var(--topbar-h)) !important;
  display: block !important;
}
.rv-main--workspace .rv-workspace,
.rv-main--workspace .app-content {
  min-height: 100%;
  padding: 0;
  background: var(--paper);
}
.rv-main--workspace .app-content {
  padding: 28px 32px;
  font-family: var(--sans);
  max-width: 1200px;
}
