/* ── Fathom River — Shared Semantic Classes ──────────────
   rv-* classes provide a unified semantic vocabulary across
   PacketLake, Historian, and Presence workbench pages.
   Layers alongside page-specific pl-*, hist-*, pres-* classes.
   ─────────────────────────────────────────────────────────── */

/* ── A. Source tokens ──────────────────────────────────── */
.rv-source { display:inline-block; padding:1px 6px; font-size:0.7em; font-weight:700; letter-spacing:0.5px; border-radius:3px; font-family:var(--font-mono); }
.rv-source-inv  { background:var(--accent); color:#fff; }
.rv-source-hist { background:var(--accent-cyan); color:#000; }
.rv-source-spkb { background:var(--accent-green); color:#000; }
.rv-source-topo { background:var(--accent-amber); color:#000; }
.rv-source-label { font-size:0.68em; font-weight:600; text-transform:uppercase; letter-spacing:0.4px; color:var(--text-dim); }

/* ── B. Capability tokens ─────────────────────────────── */
.rv-cap { display:inline-block; padding:1px 5px; font-size:0.65em; font-weight:600; letter-spacing:0.3px; border-radius:3px; font-family:var(--font-mono); margin-right:3px; }
.rv-cap-current       { background:rgba(var(--accent-rgb),0.15); color:var(--accent); }
.rv-cap-history       { background:rgba(var(--accent-cyan-rgb),0.15); color:var(--accent-cyan); }
.rv-cap-subscriptions { background:rgba(var(--accent-green-rgb),0.15); color:var(--accent-green); }
.rv-cap-liveonly      { background:rgba(var(--accent-amber-rgb),0.15); color:var(--accent-amber); }
.rv-cap-external      { border:1px solid var(--border); color:var(--text-muted); background:none; }

/* ── C. Status tokens ─────────────────────────────────── */

/* Quality (data signal quality) */
.rv-quality { display:inline-block; padding:1px 6px; font-size:0.7em; font-weight:700; border-radius:3px; font-family:var(--font-mono); }
.rv-quality-good      { background:rgba(var(--accent-green-rgb),0.2); color:var(--accent-green); }
.rv-quality-uncertain { background:rgba(var(--accent-amber-rgb),0.2); color:var(--accent-amber); }
.rv-quality-bad       { background:rgba(var(--accent-red-rgb),0.2); color:var(--accent-red); }
.rv-quality-nodata    { background:rgba(0,0,0,0.1); color:var(--text-dim); }

/* Liveness dots */
.rv-status-dot { display:inline-block; width:var(--space-1); height:var(--space-1); border-radius:var(--radius-full); margin-right:var(--space-1); vertical-align:middle; }
.rv-status-dot-live    { background:var(--color-success); }
.rv-status-dot-stale   { background:var(--color-warning); }
.rv-status-dot-absent  { background:var(--color-danger); }
.rv-status-dot-new     { background:var(--accent); }
.rv-status-dot-unknown { background:var(--text-muted); }

/* Severity (risk/alert) — compound selectors (0,2,0) to beat page-specific overrides */
.rv-sev { display:inline-block; padding:2px 7px; border-radius:4px; font-size:0.74rem; font-weight:600; text-transform:uppercase; letter-spacing:0.03em; font-family:var(--font-mono); }
.rv-sev.rv-sev-critical { background:rgba(239,68,68,0.15); color:#f87171; }
.rv-sev.rv-sev-high     { background:rgba(249,115,22,0.15); color:#fb923c; }
.rv-sev.rv-sev-medium   { background:rgba(234,179,8,0.15); color:#eab308; }
.rv-sev.rv-sev-low      { background:rgba(34,197,94,0.15); color:#4ade80; }
.rv-sev.rv-sev-none, .rv-sev.rv-sev-unknown { background:rgba(156,163,175,0.12); color:var(--text-muted); }
.rv-sev.rv-sev-info     { background:rgba(91,138,240,0.08); color:var(--accent); }

/* ── D. Reduced River cues ────────────────────────────── */

.rv-pulse-dot { width:var(--space-2); height:var(--space-2); border-radius:var(--radius-full); background:var(--color-success); animation:rv-pulse 2s var(--ease-out) infinite; }
@keyframes rv-pulse { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:0.5;transform:scale(1.3)} }

.rv-fade-stale { opacity:0.7; transition:opacity 0.3s var(--ease-out); }

.rv-turbulence-mark { width:6px; height:6px; border-radius:50%; background:var(--accent); display:inline-block; margin-left:4px; animation:rv-turb 1.5s var(--ease-out) 1; }
@keyframes rv-turb { 0%{transform:scale(1.4);opacity:1} 100%{transform:scale(1);opacity:1} }

.rv-status-rail { display:flex; flex-direction:column; gap:4px; }
.rv-status-rail-chip { display:flex; align-items:center; gap:var(--space-2); padding:var(--space-1) var(--space-3); background:var(--bg-surface); border:1px solid var(--border-dim); border-radius:var(--radius-md); font-size:var(--text-sm); color:var(--text-dim); }
.rv-status-rail-chip strong { font-family:var(--font-mono); color:var(--text); font-weight:700; margin-left:auto; }
/* Compound selectors (0,2,0) to survive page-specific border shorthands */
.rv-status-rail-chip.rv-status-rail-live    { border-left:2px solid var(--color-success); }
.rv-status-rail-chip.rv-status-rail-stale   { border-left:2px solid var(--color-warning); }
.rv-status-rail-chip.rv-status-rail-absent  { border-left:2px solid var(--color-danger); }
.rv-status-rail-chip.rv-status-rail-unstable { border-left:2px solid var(--accent-amber); }

.rv-row-accent-absent td:first-child  { border-left:2px solid var(--color-danger); }
.rv-row-accent-stale td:first-child   { border-left:2px solid var(--color-warning); }
.rv-row-accent-pending                 { background:rgba(245,158,11,0.04); }
.rv-row-accent-pending td:first-child  { border-left:2px solid var(--color-warning); }

@media (prefers-reduced-motion:reduce) {
  .rv-pulse-dot, .rv-turbulence-mark { animation:none; }
  .rv-pulse-dot { opacity:1; }
}

/* ── E. Shared semantic blocks ────────────────────────── */

.rv-summary-strip { display:flex; align-items:center; gap:8px; padding:5px 10px; font-size:0.72em; color:var(--text-dim); background:var(--panel); border-bottom:1px solid var(--border-dim); border-radius:6px 6px 0 0; }
.rv-summary-sep { color:var(--border); }

.rv-note { display:block; font-size:0.72em; padding:4px 10px; border-bottom:1px solid var(--border-dim); }
.rv-note-liveonly    { color:var(--accent-amber); background:rgba(var(--accent-amber-rgb),0.06); }
.rv-note-unavailable { color:var(--accent-red); background:rgba(var(--accent-red-rgb),0.08); }
.rv-note-nodata      { color:var(--text-muted); background:var(--bg-surface); }

.rv-proto-chip { background:rgba(var(--accent-rgb),0.1); color:var(--accent); border-radius:3px; font-size:0.7rem; padding:1px 5px; font-family:var(--font-mono); white-space:nowrap; }
.rv-ts { font-family:var(--font-mono); font-size:0.78rem; color:var(--text-muted); }
.rv-live-badge { display:flex; align-items:center; gap:var(--space-2); padding:var(--space-2) var(--space-4); background:rgba(34,197,94,0.06); border:1px solid rgba(34,197,94,0.2); border-radius:var(--radius-full); flex-shrink:0; }
.rv-live-label { font-family:var(--font-mono); font-size:var(--text-sm); color:var(--color-success); font-weight:600; }
.rv-chip-row { display:flex; flex-wrap:wrap; gap:4px; align-items:center; }

/* ── F. Temporal mode badges ────────────────────────────── */
.rv-temporal-live       { background:rgba(34,197,94,0.15); color:var(--color-success); }
.rv-temporal-replay     { background:rgba(var(--accent-cyan-rgb),0.15); color:var(--accent-cyan); }
.rv-temporal-historical { background:rgba(var(--accent-amber-rgb),0.15); color:var(--accent-amber); }

/* ── G. Freshness indicators ────────────────────────────── */
.rv-freshness { display:inline-block; padding:1px 5px; font-size:0.65em; font-weight:600; border-radius:3px; font-family:var(--font-mono); }
.rv-freshness-fresh { background:rgba(34,197,94,0.15); color:var(--color-success); }
.rv-freshness-aging { background:rgba(var(--accent-amber-rgb),0.15); color:var(--accent-amber); }
.rv-freshness-stale { background:rgba(156,163,175,0.15); color:var(--text-muted); }

/* ── H. Stagnation + degraded notes ─────────────────────── */
.rv-stagnation { font-style:italic; color:var(--text-muted); opacity:0.8; }
.rv-note-degraded { color:var(--accent-amber); background:rgba(var(--accent-amber-rgb),0.06); }
.rv-note-stale    { color:var(--text-muted); background:var(--bg-surface); }
