/* ==========================================================================
   Attest — ACC compliance checking console
   Liquid glass on white. Built on VeebarTech design tokens (--vbr-*).
   Never invent brand colours here; everything traces to the design system.
   ========================================================================== */

@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap");

:root {
  /* Brand, from the VeebarTech design system */
  --vbr-primary: #024996;
  --vbr-primary-400: #3570b5;
  --vbr-primary-300: #6c9ed4;
  --vbr-primary-50: #eaf2fb;
  --vbr-teal: #1c7a8c;
  --vbr-teal-300: #5fa7b1;
  --vbr-teal-50: #e7f3f4;
  --vbr-ink: #0a1722;
  --vbr-muted: #5a6b7b;
  --vbr-faint: #93a3b3;
  --vbr-border: #e8edf2;
  --vbr-surface-tint: #f7fafd;
  --vbr-gradient: linear-gradient(100deg, #024996 0%, #1c7a8c 100%);
  --vbr-font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --vbr-font-display: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "Inter", sans-serif;
  --vbr-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;

  /* The four verdict states. Product semantics, fixed here once. */
  --st-meets: #1f8a4c;
  --st-meets-bg: #e7f5ec;
  --st-fails: #c0392b;
  --st-fails-bg: #fbeae8;
  --st-missing: #5a6b7b;
  --st-missing-bg: #eef2f6;
  --st-uncertain: #b8770a;
  --st-uncertain-bg: #fbf1de;

  /* Glass */
  --glass-bg: rgba(255, 255, 255, 0.62);
  --glass-bg-strong: rgba(255, 255, 255, 0.80);
  --glass-blur: saturate(165%) blur(22px);
  --glass-border: rgba(255, 255, 255, 0.92);
  --glass-shadow:
    0 1px 2px rgba(10, 23, 34, 0.04),
    0 10px 30px -14px rgba(2, 73, 150, 0.22),
    inset 0 1px 0 rgba(255, 255, 255, 0.75);

  --radius: 18px;
  --radius-sm: 12px;
  --radius-pill: 999px;
  --sidebar-w: 268px;
  --topbar-h: 64px;
}

* { box-sizing: border-box; }

html, body {
  margin: 0;
  padding: 0;
  min-height: 100%;
}

body {
  font-family: var(--vbr-font);
  color: var(--vbr-ink);
  background: #ffffff;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-size: 14px;
  line-height: 1.5;
}

/* --- The blue light behind the glass ------------------------------------ */
.aura {
  position: fixed;
  inset: 0;
  z-index: 0;
  overflow: hidden;
  pointer-events: none;
}
.aura::before,
.aura::after,
.aura i {
  content: "";
  position: absolute;
  border-radius: 50%;
  filter: blur(90px);
}
.aura::before {
  width: 620px; height: 620px;
  top: -220px; left: -140px;
  background: radial-gradient(circle at 35% 35%, rgba(2, 73, 150, 0.30), rgba(2, 73, 150, 0) 68%);
}
.aura::after {
  width: 720px; height: 720px;
  bottom: -300px; right: -180px;
  background: radial-gradient(circle at 50% 50%, rgba(28, 122, 140, 0.26), rgba(28, 122, 140, 0) 68%);
}
.aura i {
  width: 520px; height: 520px;
  top: 32%; left: 46%;
  background: radial-gradient(circle at 50% 50%, rgba(108, 158, 212, 0.22), rgba(108, 158, 212, 0) 70%);
}

/* --- Generic glass surface ---------------------------------------------- */
.glass {
  background: var(--glass-bg);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border: 1px solid var(--glass-border);
  box-shadow: var(--glass-shadow);
  border-radius: var(--radius);
}

/* ==========================================================================
   Login
   ========================================================================== */
.login-wrap {
  position: relative;
  z-index: 1;
  min-height: 100vh;
  display: grid;
  place-items: center;
  padding: 24px;
}

.login-card {
  width: 100%;
  max-width: 408px;
  padding: 40px 36px 32px;
  background: var(--glass-bg-strong);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border: 1px solid var(--glass-border);
  box-shadow:
    0 1px 2px rgba(10, 23, 34, 0.04),
    0 30px 60px -24px rgba(2, 73, 150, 0.34),
    inset 0 1px 0 rgba(255, 255, 255, 0.9);
  border-radius: 24px;
}

.login-mark {
  display: flex;
  align-items: center;
  gap: 11px;
  margin-bottom: 30px;
}
.login-mark .glyph {
  width: 38px; height: 38px;
  border-radius: 11px;
  background: var(--vbr-gradient);
  display: grid; place-items: center;
  box-shadow: 0 6px 16px -6px rgba(2, 73, 150, 0.6);
  flex: none;
}
.login-mark .glyph svg { width: 21px; height: 21px; }
.login-mark .wordmark {
  font-family: var(--vbr-font-display);
  font-size: 22px;
  font-weight: 700;
  letter-spacing: -0.022em;
}
.login-mark .sub {
  font-size: 11px;
  color: var(--vbr-muted);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  font-weight: 600;
  margin-top: 1px;
}

.login-card h1 {
  font-family: var(--vbr-font-display);
  font-size: 19px;
  font-weight: 650;
  letter-spacing: -0.02em;
  margin: 0 0 5px;
}
.login-card .lede {
  color: var(--vbr-muted);
  font-size: 13px;
  margin: 0 0 26px;
}

.field { margin-bottom: 15px; }
.field label {
  display: block;
  font-size: 12px;
  font-weight: 600;
  color: var(--vbr-muted);
  margin-bottom: 6px;
  letter-spacing: 0.005em;
}
.field input {
  width: 100%;
  padding: 11px 14px;
  font-family: inherit;
  font-size: 14px;
  color: var(--vbr-ink);
  background: rgba(255, 255, 255, 0.82);
  border: 1px solid var(--vbr-border);
  border-radius: var(--radius-sm);
  outline: none;
  transition: border-color .16s, box-shadow .16s, background .16s;
}
.field input:focus {
  border-color: var(--vbr-primary-300);
  background: #fff;
  box-shadow: 0 0 0 3.5px rgba(2, 73, 150, 0.13);
}

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  font-family: inherit;
  font-size: 14px;
  font-weight: 600;
  padding: 11px 22px;
  border-radius: var(--radius-pill);
  border: 1px solid transparent;
  cursor: pointer;
  transition: transform .12s, box-shadow .16s, background .16s, opacity .16s;
  text-decoration: none;
}
.btn-primary {
  width: 100%;
  color: #fff;
  background: var(--vbr-gradient);
  box-shadow: 0 8px 20px -8px rgba(2, 73, 150, 0.62);
  margin-top: 9px;
}
.btn-primary:hover { transform: translateY(-1px); box-shadow: 0 12px 26px -8px rgba(2, 73, 150, 0.7); }
.btn-primary:active { transform: translateY(0); }
.btn-ghost {
  background: rgba(255, 255, 255, 0.7);
  border-color: var(--vbr-border);
  color: var(--vbr-ink);
  padding: 8px 16px;
  font-size: 13px;
}
.btn-ghost:hover { background: #fff; border-color: var(--vbr-primary-300); color: var(--vbr-primary); }

.login-err {
  display: none;
  margin: 0 0 16px;
  padding: 10px 13px;
  font-size: 13px;
  border-radius: var(--radius-sm);
  color: var(--st-fails);
  background: var(--st-fails-bg);
  border: 1px solid #f1c4be;
}
.login-err.show { display: block; }

.login-foot {
  margin-top: 26px;
  padding-top: 18px;
  border-top: 1px solid var(--vbr-border);
  font-size: 11.5px;
  color: var(--vbr-faint);
  text-align: center;
  line-height: 1.6;
}

/* ==========================================================================
   App shell
   ========================================================================== */
.app {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: var(--sidebar-w) 1fr;
  min-height: 100vh;
}

/* --- Sidebar ------------------------------------------------------------ */
.sidebar {
  position: sticky;
  top: 0;
  height: 100vh;
  padding: 18px 14px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  overflow-y: auto;
  background: rgba(255, 255, 255, 0.55);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border-right: 1px solid rgba(255, 255, 255, 0.9);
  box-shadow: 1px 0 30px -18px rgba(2, 73, 150, 0.3);
}
.sidebar::-webkit-scrollbar { width: 7px; }
.sidebar::-webkit-scrollbar-thumb { background: #d8e2ec; border-radius: 4px; }

.brand {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 8px 18px;
}
.brand .glyph {
  width: 34px; height: 34px;
  border-radius: 10px;
  background: var(--vbr-gradient);
  display: grid; place-items: center;
  box-shadow: 0 6px 15px -6px rgba(2, 73, 150, 0.6);
  flex: none;
}
.brand .glyph svg { width: 19px; height: 19px; }
.brand .name {
  font-family: var(--vbr-font-display);
  font-size: 18px;
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.1;
}
.brand .tag {
  font-size: 10px;
  color: var(--vbr-muted);
  letter-spacing: 0.07em;
  text-transform: uppercase;
  font-weight: 600;
}

.nav-group { margin-bottom: 3px; }
.nav-group > h4 {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--vbr-faint);
  margin: 15px 10px 6px;
}

.nav-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border-radius: 10px;
  color: var(--vbr-ink);
  text-decoration: none;
  font-size: 13.5px;
  font-weight: 500;
  cursor: pointer;
  border: 1px solid transparent;
  transition: background .14s, color .14s, border-color .14s;
  position: relative;
}
.nav-item:hover { background: rgba(255, 255, 255, 0.85); border-color: var(--vbr-border); }
.nav-item.active {
  background: rgba(255, 255, 255, 0.95);
  border-color: var(--glass-border);
  color: var(--vbr-primary);
  font-weight: 600;
  box-shadow: 0 4px 14px -8px rgba(2, 73, 150, 0.5);
}
.nav-item.active::before {
  content: "";
  position: absolute;
  left: -14px; top: 50%;
  transform: translateY(-50%);
  width: 3px; height: 20px;
  border-radius: 0 3px 3px 0;
  background: var(--vbr-gradient);
}
.nav-item svg { width: 16px; height: 16px; flex: none; opacity: .74; }
.nav-item.active svg { opacity: 1; }
.nav-item .label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* the small red pip marking an unbuilt module in the nav */
.pip {
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--st-fails);
  flex: none;
  box-shadow: 0 0 0 2.5px rgba(192, 57, 43, 0.16);
}
.pip.ready { background: var(--st-meets); box-shadow: 0 0 0 2.5px rgba(31, 138, 76, 0.16); }

.sidebar-foot {
  margin-top: auto;
  padding: 14px 10px 4px;
  border-top: 1px solid var(--vbr-border);
  font-size: 11px;
  color: var(--vbr-faint);
  line-height: 1.65;
}

/* --- Topbar ------------------------------------------------------------- */
.main { display: flex; flex-direction: column; min-width: 0; }

.topbar {
  position: sticky;
  top: 0;
  z-index: 20;
  height: var(--topbar-h);
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 0 26px;
  background: rgba(255, 255, 255, 0.62);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border-bottom: 1px solid rgba(255, 255, 255, 0.9);
  box-shadow: 0 1px 24px -14px rgba(2, 73, 150, 0.4);
}

.crumb { font-size: 13px; color: var(--vbr-muted); }
.crumb b { color: var(--vbr-ink); font-weight: 600; }
.topbar .spacer { flex: 1; }

.chip {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  height: 32px;
  padding: 0 13px;
  border-radius: var(--radius-pill);
  background: rgba(255, 255, 255, 0.8);
  border: 1px solid var(--vbr-border);
  font-size: 12.5px;
  font-weight: 500;
  color: var(--vbr-ink);
  cursor: pointer;
  transition: border-color .14s, background .14s;
  white-space: nowrap;
}
.chip:hover { border-color: var(--vbr-primary-300); background: #fff; }
.chip svg { width: 14px; height: 14px; opacity: .6; }
.chip .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--st-meets); }

.seg {
  display: inline-flex;
  padding: 3px;
  border-radius: var(--radius-pill);
  background: rgba(255, 255, 255, 0.8);
  border: 1px solid var(--vbr-border);
}
.seg button {
  font-family: inherit;
  font-size: 12px;
  font-weight: 600;
  padding: 4px 12px;
  border: 0;
  background: transparent;
  color: var(--vbr-muted);
  border-radius: var(--radius-pill);
  cursor: pointer;
  transition: background .14s, color .14s;
}
.seg button.on { background: var(--vbr-gradient); color: #fff; box-shadow: 0 4px 10px -4px rgba(2, 73, 150, .6); }

.avatar {
  width: 32px; height: 32px;
  border-radius: 50%;
  background: var(--vbr-gradient);
  color: #fff;
  display: grid; place-items: center;
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: .02em;
  box-shadow: 0 4px 12px -5px rgba(2, 73, 150, .7);
}

/* --- Page --------------------------------------------------------------- */
.page {
  flex: 1;
  padding: 26px;
  max-width: 1560px;
  width: 100%;
}

.page-head { margin-bottom: 22px; }
.page-head h1 {
  font-family: var(--vbr-font-display);
  font-size: 25px;
  font-weight: 680;
  letter-spacing: -0.026em;
  margin: 0 0 5px;
}
.page-head p {
  margin: 0;
  color: var(--vbr-muted);
  font-size: 13.5px;
  max-width: 76ch;
}

.srs-tags { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 11px; }
.srs-tag {
  font-family: var(--vbr-mono);
  font-size: 10.5px;
  font-weight: 500;
  padding: 2.5px 8px;
  border-radius: var(--radius-pill);
  background: var(--vbr-primary-50);
  color: var(--vbr-primary);
  border: 1px solid #cfe0f3;
}
.srs-tag.m { background: var(--st-fails-bg); color: var(--st-fails); border-color: #f1c4be; }
.srs-tag.s { background: var(--st-uncertain-bg); color: var(--st-uncertain); border-color: #f0d9a6; }

/* --- Stat tiles --------------------------------------------------------- */
.stats {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(184px, 1fr));
  gap: 14px;
  margin-bottom: 22px;
}
.stat {
  padding: 16px 18px;
  background: var(--glass-bg);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border: 1px solid var(--glass-border);
  box-shadow: var(--glass-shadow);
  border-radius: var(--radius-sm);
}
.stat .k {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--vbr-muted);
  display: flex; align-items: center; gap: 6px;
}
.stat .k .sw { width: 8px; height: 8px; border-radius: 2.5px; }
.stat .v {
  font-family: var(--vbr-font-display);
  font-size: 27px;
  font-weight: 680;
  letter-spacing: -0.03em;
  margin-top: 7px;
  line-height: 1;
}
.stat .m { font-size: 12px; color: var(--vbr-faint); margin-top: 5px; }

/* --- Panels ------------------------------------------------------------- */
.grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(330px, 1fr));
  gap: 16px;
  align-items: start;
}
.grid.wide { grid-template-columns: repeat(auto-fill, minmax(470px, 1fr)); }

.panel {
  position: relative;
  display: flex;
  flex-direction: column;
  background: var(--glass-bg);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border: 1px solid var(--glass-border);
  box-shadow: var(--glass-shadow);
  border-radius: var(--radius);
  overflow: hidden;
  transition: transform .16s, box-shadow .18s, border-color .18s;
}
.panel:hover { transform: translateY(-2px); box-shadow: 0 1px 2px rgba(10,23,34,.04), 0 18px 40px -16px rgba(2,73,150,.3), inset 0 1px 0 rgba(255,255,255,.8); }

.panel-head {
  display: flex;
  align-items: flex-start;
  gap: 11px;
  padding: 16px 18px 12px;
}
.panel-ico {
  width: 34px; height: 34px;
  border-radius: 10px;
  display: grid; place-items: center;
  background: linear-gradient(140deg, rgba(2,73,150,.1), rgba(28,122,140,.1));
  border: 1px solid rgba(2,73,150,.13);
  color: var(--vbr-primary);
  flex: none;
}
.panel-ico svg { width: 17px; height: 17px; }
.panel-head .t { flex: 1; min-width: 0; }
.panel-head h3 {
  font-family: var(--vbr-font-display);
  font-size: 14.5px;
  font-weight: 650;
  letter-spacing: -0.014em;
  margin: 1px 0 3px;
}
.panel-head .sub { font-size: 11.5px; color: var(--vbr-faint); font-family: var(--vbr-mono); }

.panel-body {
  padding: 0 18px 16px;
  flex: 1;
  font-size: 13px;
  color: var(--vbr-muted);
  line-height: 1.55;
}
.panel-foot {
  padding: 11px 18px;
  border-top: 1px solid rgba(232, 237, 242, 0.9);
  display: flex;
  align-items: center;
  gap: 9px;
  background: rgba(255, 255, 255, 0.4);
}

.badge {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.055em;
  text-transform: uppercase;
  padding: 3.5px 9px;
  border-radius: var(--radius-pill);
}
.badge.stub { background: var(--st-fails-bg); color: var(--st-fails); border: 1px solid #f1c4be; }
.badge.ready { background: var(--st-meets-bg); color: var(--st-meets); border: 1px solid #b8e0c6; }
.badge.wip { background: var(--st-uncertain-bg); color: var(--st-uncertain); border: 1px solid #f0d9a6; }

/* ---- THE BUILD-STATE CONVENTION ----------------------------------------
   state="stub"  not built yet  -> thick red border, contents blurred back
   state="wip"   backend landing -> amber border, contents lightly blurred
   state="ready" built + testable -> clean white border, contents sharp
   Flipping a panel is a one-word change in modules.js.
   ------------------------------------------------------------------------ */
.panel[data-state="stub"] {
  border: 2px solid var(--st-fails);
  box-shadow:
    0 1px 2px rgba(10, 23, 34, .04),
    0 10px 30px -14px rgba(192, 57, 43, .3),
    inset 0 1px 0 rgba(255, 255, 255, .7);
}
/* Body blurs back; the head stays sharp so you can still tell what the
   module is at a glance. The red border and the stamp carry the state. */
.panel[data-state="stub"] .panel-body {
  filter: blur(2.8px);
  opacity: .5;
  user-select: none;
  pointer-events: none;
  min-height: 76px;
}
.panel[data-state="stub"] .panel-ico {
  color: var(--st-fails);
  background: linear-gradient(140deg, rgba(192,57,43,.1), rgba(192,57,43,.05));
  border-color: rgba(192,57,43,.2);
}

.panel[data-state="wip"] {
  border: 2px solid var(--st-uncertain);
  box-shadow:
    0 1px 2px rgba(10, 23, 34, .04),
    0 10px 30px -14px rgba(184, 119, 10, .3),
    inset 0 1px 0 rgba(255, 255, 255, .7);
}
.panel[data-state="wip"] .panel-body { filter: blur(1.1px); opacity: .76; }

.panel[data-state="ready"] { border: 1px solid var(--glass-border); }

/* stamp over an unbuilt panel */
.panel .stamp {
  position: absolute;
  inset: auto 0 0 0;
  display: none;
}
.panel[data-state="stub"] .stamp {
  display: flex;
  align-items: center;
  justify-content: center;
  inset: 58px 0 46px 0;   /* over the blurred body only, clear of head and foot */
  pointer-events: none;
}
.panel[data-state="stub"] .stamp span {
  font-size: 10.5px;
  font-weight: 800;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--st-fails);
  background: rgba(255, 255, 255, 0.86);
  border: 1.5px solid var(--st-fails);
  padding: 5px 13px;
  border-radius: var(--radius-pill);
  box-shadow: 0 6px 18px -8px rgba(192, 57, 43, .5);
  transform: rotate(-3deg);
}

/* --- Verdict legend ----------------------------------------------------- */
.legend { display: flex; flex-wrap: wrap; gap: 8px; }
.verdict {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 6px 13px;
  border-radius: var(--radius-pill);
  font-size: 12px;
  font-weight: 600;
  border: 1px solid;
}
.verdict .sw { width: 9px; height: 9px; border-radius: 50%; }
.verdict.meets { background: var(--st-meets-bg); color: var(--st-meets); border-color: #b8e0c6; }
.verdict.meets .sw { background: var(--st-meets); }
.verdict.fails { background: var(--st-fails-bg); color: var(--st-fails); border-color: #f1c4be; }
.verdict.fails .sw { background: var(--st-fails); }
.verdict.missing { background: var(--st-missing-bg); color: var(--st-missing); border-color: #d5dde5; }
.verdict.missing .sw { background: var(--st-missing); }
.verdict.uncertain { background: var(--st-uncertain-bg); color: var(--st-uncertain); border-color: #f0d9a6; }
.verdict.uncertain .sw { background: var(--st-uncertain); }

/* --- Determinism banner ------------------------------------------------- */
.pledge {
  display: flex;
  align-items: flex-start;
  gap: 13px;
  padding: 15px 19px;
  margin-bottom: 22px;
  border-radius: var(--radius);
  background: linear-gradient(100deg, rgba(2,73,150,.055), rgba(28,122,140,.055));
  border: 1px solid rgba(2,73,150,.16);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
}
.pledge .lock {
  width: 32px; height: 32px;
  border-radius: 9px;
  background: var(--vbr-gradient);
  display: grid; place-items: center;
  flex: none;
  box-shadow: 0 6px 14px -6px rgba(2,73,150,.6);
}
.pledge .lock svg { width: 16px; height: 16px; }
.pledge p { margin: 0; font-size: 12.8px; color: var(--vbr-muted); line-height: 1.55; }
.pledge b { color: var(--vbr-ink); font-weight: 650; }

/* --- Stage progress ----------------------------------------------------- */
.railway {
  display: flex;
  align-items: center;
  gap: 0;
  padding: 14px 18px;
  margin-bottom: 22px;
  overflow-x: auto;
}
.railway .stop { display: flex; align-items: center; gap: 9px; flex: none; }
.railway .node {
  width: 26px; height: 26px;
  border-radius: 50%;
  display: grid; place-items: center;
  font-size: 11px;
  font-weight: 700;
  border: 2px solid;
  background: #fff;
}
.railway .node.done { border-color: var(--st-meets); color: var(--st-meets); background: var(--st-meets-bg); }
.railway .node.todo { border-color: #d5dde5; color: var(--vbr-faint); }
.railway .nm { font-size: 12.5px; font-weight: 600; white-space: nowrap; }
.railway .nm small { display: block; font-weight: 500; color: var(--vbr-faint); font-size: 10.5px; }
.railway .link { width: 34px; height: 2px; background: #e0e7ee; margin: 0 12px; flex: none; border-radius: 2px; }

/* --- Empty state on a stub page ----------------------------------------- */
.stub-note {
  display: flex;
  align-items: flex-start;
  gap: 13px;
  padding: 16px 19px;
  border-radius: var(--radius);
  background: rgba(251, 234, 232, 0.6);
  border: 2px solid var(--st-fails);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  margin-bottom: 22px;
}
.stub-note .ic {
  width: 30px; height: 30px; border-radius: 9px; flex: none;
  background: var(--st-fails); display: grid; place-items: center;
}
.stub-note .ic svg { width: 15px; height: 15px; }
.stub-note h4 { margin: 0 0 3px; font-size: 13.5px; font-weight: 650; color: var(--st-fails); }
.stub-note p { margin: 0; font-size: 12.8px; color: #8a4038; line-height: 1.55; }

/* --- Table shell -------------------------------------------------------- */
.tbl { width: 100%; border-collapse: collapse; font-size: 13px; }
.tbl th {
  text-align: left;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: .07em;
  text-transform: uppercase;
  color: var(--vbr-faint);
  padding: 9px 14px;
  border-bottom: 1px solid var(--vbr-border);
}
.tbl td { padding: 11px 14px; border-bottom: 1px solid rgba(232,237,242,.75); color: var(--vbr-muted); }
.tbl tr:last-child td { border-bottom: 0; }
.tbl td.id { font-family: var(--vbr-mono); font-size: 11.5px; color: var(--vbr-primary); }

/* --- Responsive --------------------------------------------------------- */
@media (max-width: 1080px) {
  .app { grid-template-columns: 1fr; }
  .sidebar {
    position: relative;
    height: auto;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    border-right: 0;
    border-bottom: 1px solid rgba(255,255,255,.9);
  }
  .nav-group > h4 { display: none; }
  .sidebar-foot { display: none; }
  .brand { width: 100%; padding-bottom: 10px; }
}
@media (max-width: 720px) {
  .page { padding: 18px 16px; }
  .topbar { padding: 0 16px; gap: 8px; overflow-x: auto; }
  .crumb { display: none; }
  .grid, .grid.wide { grid-template-columns: 1fr; }
}

/* Respect reduced motion */
@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; animation: none !important; }
  .panel:hover { transform: none; }
}
