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

/* ═══════════════════════════════════════════════════════════════════════
   PROVENANCE — the NexGit design language.
   Proof is the product: the UI reads like evidence. Two modes —
   PAPER (warm light, audit ledger) and VAULT (dark, control room).
   Proof green is earned: it marks what the system vouches for.
   Token names are kept from the previous system so every page rule
   continues to resolve; only their meaning changed (violet slot = proof).
   ═══════════════════════════════════════════════════════════════════════ */
:root {
  --ng-ink: #15181e;
  --ng-muted: #565f6e;
  --ng-subtle: #8b93a1;
  --ng-border: #dedbd0;
  --ng-border-strong: #cbc7b8;
  --ng-border-soft: #e7e4da;
  --ng-canvas: #f4f2ec;
  --ng-surface: #fdfcf9;
  --ng-surface-soft: #f7f5ef;
  --ng-hover: #efece3;
  --ng-glass: rgba(244, 242, 236, 0.88);
  --ng-navy: #15181e;
  --ng-deep: #15181e;
  --ng-deep-edge: #2a2f3a;
  --ng-dots: rgba(21, 24, 30, 0.09);
  --ng-violet: #0d8f5f;                       /* proof green (accent slot) */
  --ng-violet-hover: #0b7b52;
  --ng-violet-2: #10a56e;
  --ng-grad-primary: linear-gradient(135deg, #0d8f5f, #10a56e);
  --ng-ring: 0 0 0 3px rgba(13, 143, 95, 0.16);
  --ng-violet-soft: rgba(13, 143, 95, 0.11);
  --ng-violet-faint: rgba(13, 143, 95, 0.055);
  --ng-violet-edge: rgba(13, 143, 95, 0.34);
  --ng-on-accent: #fdfcf9;
  --ng-blue: #2f66c9;                          /* intent */
  --ng-blue-soft: rgba(47, 102, 201, 0.10);
  --ng-green: #0d8f5f;
  --ng-green-soft: rgba(13, 143, 95, 0.11);
  --ng-amber: #a2740a;                         /* signal / bounded */
  --ng-amber-soft: rgba(162, 116, 10, 0.11);
  --ng-amber-ink: #7c5a08;
  --ng-red: #c93a55;                           /* fail-closed */
  --ng-red-soft: rgba(201, 58, 85, 0.10);
  --ng-chip-bg: rgba(21, 24, 30, 0.06);
  --ng-chip-ink: #565f6e;
  --ng-track: #e4e1d5;
  --ng-scrim: rgba(21, 24, 30, 0.40);
  --ng-shadow-sm: 0 0 0 0 rgba(0, 0, 0, 0);
  --ng-shadow-md: 0 16px 40px rgba(21, 24, 30, 0.10);
  --ng-shadow-lg: 0 24px 60px rgba(21, 24, 30, 0.16);
  --ng-scrollbar-thumb: rgba(86, 95, 110, 0.34);
  --ng-scrollbar-thumb-hover: rgba(86, 95, 110, 0.55);
  --ng-radius-sm: 3px;
  --ng-radius: 4px;
  --ng-radius-lg: 6px;
  --ng-header-h: 64px;
  --ng-display: "Space Grotesk", system-ui, sans-serif;
  --ng-body: "Inter", system-ui, sans-serif;
  --ng-mono: "JetBrains Mono", monospace;
  --jv-color-primary: var(--ng-violet);
  --jv-color-positive: var(--ng-green);
  --jv-color-negative: var(--ng-red);
}

html.j-dark,
:root[data-theme="dark"] {
  --ng-ink: #e8ecf4;
  --ng-muted: #9aa5b8;
  --ng-subtle: #5f6a80;
  --ng-border: #1e2634;
  --ng-border-strong: #2a3446;
  --ng-border-soft: #19202d;
  --ng-canvas: #0b0e14;
  --ng-surface: #111621;
  --ng-surface-soft: #151b28;
  --ng-hover: #1a2130;
  --ng-glass: rgba(11, 14, 20, 0.86);
  --ng-deep: #0e121a;
  --ng-deep-edge: #1e2634;
  --ng-dots: rgba(154, 165, 184, 0.10);
  --ng-violet: #2be082;
  --ng-violet-hover: #4ce996;
  --ng-violet-2: #35e78c;
  --ng-grad-primary: linear-gradient(135deg, #26cf78, #2be082);
  --ng-ring: 0 0 0 3px rgba(43, 224, 130, 0.20);
  --ng-violet-soft: rgba(43, 224, 130, 0.13);
  --ng-violet-faint: rgba(43, 224, 130, 0.065);
  --ng-violet-edge: rgba(43, 224, 130, 0.34);
  --ng-on-accent: #0b0e14;
  --ng-blue: #6aa5ff;
  --ng-blue-soft: rgba(106, 165, 255, 0.13);
  --ng-green: #2be082;
  --ng-green-soft: rgba(43, 224, 130, 0.13);
  --ng-amber: #f0b429;
  --ng-amber-soft: rgba(240, 180, 41, 0.12);
  --ng-amber-ink: #f0b429;
  --ng-red: #f4536e;
  --ng-red-soft: rgba(244, 83, 110, 0.12);
  --ng-chip-bg: rgba(154, 165, 184, 0.12);
  --ng-chip-ink: #aab5c8;
  --ng-track: #232c3d;
  --ng-scrim: rgba(3, 6, 11, 0.66);
  --ng-shadow-sm: 0 0 0 0 rgba(0, 0, 0, 0);
  --ng-shadow-md: 0 16px 40px rgba(0, 0, 0, 0.45);
  --ng-shadow-lg: 0 24px 60px rgba(0, 0, 0, 0.6);
  --ng-scrollbar-thumb: rgba(154, 168, 200, 0.28);
  --ng-scrollbar-thumb-hover: rgba(154, 168, 200, 0.46);
}

/* ── Base ──────────────────────────────────────────────────────────────── */
* { box-sizing: border-box; }
html { scroll-behavior: smooth; color-scheme: light; }
html.j-dark { color-scheme: dark; }
body {
  margin: 0;
  min-width: 320px;
  min-height: 100vh;
  color: var(--ng-ink);
  background-color: var(--ng-canvas);
  background-image: radial-gradient(var(--ng-dots) 1px, transparent 1px);
  background-size: 26px 26px;
  font-family: var(--ng-body);
  font-size: 15px;
  -webkit-font-smoothing: antialiased;
  transition: background-color 220ms ease, color 220ms ease;
}
h1, h2, h3, .brand { font-family: var(--ng-display); font-weight: 600; letter-spacing: -0.02em; }
h1, h2, h3, p { margin-top: 0; }
a { color: inherit; text-decoration: none; }
code, time { font-family: var(--ng-mono); font-size: 0.88em; }
::selection { background: var(--ng-violet); color: var(--ng-on-accent); }
:focus-visible { outline: 2px solid var(--ng-violet); outline-offset: 2px; border-radius: 3px; }
j-layout, j-header, j-footer, j-drawer, j-page-container, j-page, j-toolbar, j-toolbar-title,
j-card, j-card-section, j-markup-table, j-timeline, j-timeline-entry, j-alert, j-separator { display: block; }
j-button, j-icon, j-avatar, j-chip, j-badge, j-spinner-dots { display: inline-flex; }
j-space { flex: 1 1 auto; }

/* ── Ledger scrollbars ─────────────────────────────────────────────────── */
* { scrollbar-width: thin; scrollbar-color: var(--ng-scrollbar-thumb) transparent; }
::-webkit-scrollbar { width: 12px; height: 12px; background: transparent; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb {
  min-height: 44px;
  border: 4px solid transparent;
  border-radius: 999px;
  background-clip: padding-box;
  background-color: var(--ng-scrollbar-thumb);
}
::-webkit-scrollbar-thumb:hover { border-width: 3px; background-color: var(--ng-scrollbar-thumb-hover); }
::-webkit-scrollbar-thumb:active { background-color: var(--ng-violet); }
::-webkit-scrollbar-corner { background: transparent; }
.data-table::-webkit-scrollbar, .verification-list-panel::-webkit-scrollbar,
.console-drawer::-webkit-scrollbar, .public-drawer::-webkit-scrollbar { width: 9px; height: 9px; }
.data-table::-webkit-scrollbar-thumb, .verification-list-panel::-webkit-scrollbar-thumb,
.console-drawer::-webkit-scrollbar-thumb, .public-drawer::-webkit-scrollbar-thumb { border-width: 3px; min-height: 28px; }

/* ── Shared primitives ─────────────────────────────────────────────────── */
.shell-width { width: min(1200px, calc(100% - 48px)); margin-inline: auto; }
.eyebrow { color: var(--ng-violet); font: 600 0.68rem var(--ng-mono); letter-spacing: 0.16em; text-transform: uppercase; }
.eyebrow::before { content: "/// "; opacity: 0.7; }
.material-symbols-rounded { font-size: 20px; font-variation-settings: "FILL" 0, "wght" 500, "GRAD" 0, "opsz" 24; }
.status-dot { width: 7px; height: 7px; border-radius: 999px; background: var(--ng-green); box-shadow: 0 0 0 3px var(--ng-green-soft); }
.nav-index { font-family: var(--ng-mono); font-size: 0.86em; color: var(--ng-violet); margin-right: 2px; }

.button, .icon-action, .profile-control {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  min-height: 40px;
  padding: 0 18px;
  border: 1px solid var(--ng-border-strong);
  border-radius: var(--ng-radius-sm);
  font: 600 0.72rem var(--ng-mono);
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--ng-ink);
  background: transparent;
  cursor: pointer;
  transition: background 150ms ease, border-color 150ms ease, color 150ms ease, box-shadow 150ms ease, transform 120ms ease;
}
.button:hover, .icon-action:hover, .profile-control:hover { border-color: var(--ng-violet); color: var(--ng-violet); }
.button:active, .icon-action:active { transform: scale(0.985); }
.button--primary { background: var(--ng-violet); border-color: var(--ng-violet); color: var(--ng-on-accent); }
.button--primary:hover { background: var(--ng-violet-hover); border-color: var(--ng-violet-hover); color: var(--ng-on-accent); box-shadow: 0 0 22px var(--ng-violet-soft); }
.button--outline { border-color: var(--ng-border-strong); background: var(--ng-surface); }
.button--quiet { border-color: transparent; color: var(--ng-muted); }
.button--quiet:hover { background: var(--ng-violet-soft); color: var(--ng-violet); border-color: transparent; }
.button--light { background: transparent; border-color: var(--ng-border-strong); color: var(--ng-ink); }
.button--light:hover { border-color: var(--ng-violet); color: var(--ng-violet); }
.button--large { min-height: 48px; padding-inline: 24px; font-size: 0.76rem; }
.button--full { width: 100%; }
.icon-action { position: relative; width: 40px; padding: 0; border-color: transparent; color: var(--ng-muted); }
.icon-action:hover { background: var(--ng-violet-soft); color: var(--ng-violet); border-color: transparent; }

.theme-toggle__icon--light { display: none; }
html.j-dark .theme-toggle__icon--dark { display: none; }
html.j-dark .theme-toggle__icon--light { display: inline-flex; }

.chip, j-chip {
  align-items: center;
  gap: 6px;
  min-height: 24px;
  padding: 3px 9px;
  border-radius: var(--ng-radius-sm);
  background: var(--ng-chip-bg);
  color: var(--ng-chip-ink);
  font: 600 0.66rem var(--ng-mono);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  white-space: nowrap;
}
.chip--success { background: var(--ng-green-soft); color: var(--ng-green); }
.chip--danger { background: var(--ng-red-soft); color: var(--ng-red); }
.chip--running { background: var(--ng-amber-soft); color: var(--ng-amber); }
.chip--muted { background: var(--ng-chip-bg); color: var(--ng-chip-ink); }
.chip--production { background: var(--ng-green-soft); color: var(--ng-green); }
.chip--selected, .chip--violet { background: var(--ng-violet-soft); color: var(--ng-violet); }
.chip--compact { min-height: 21px; padding: 2px 7px; font-size: 0.6rem; }
.badge--accent, .notification-badge { background: var(--ng-violet); color: var(--ng-on-accent); }
j-badge { align-items: center; justify-content: center; min-width: 20px; height: 20px; padding: 0 6px; border-radius: var(--ng-radius-sm); background: var(--ng-chip-bg); color: var(--ng-chip-ink); font: 600 0.62rem var(--ng-mono); }
.notification-badge { position: absolute; top: 2px; right: 1px; min-width: 16px; height: 16px; padding: 0 4px; }

.brand { display: inline-flex; align-items: center; gap: 11px; color: var(--ng-ink); font: 700 0.82rem var(--ng-mono); letter-spacing: 0.3em; text-transform: uppercase; }
.brand-mark { display: inline-grid; place-items: center; width: 32px; height: 32px; border-radius: var(--ng-radius-sm); background: var(--ng-violet); color: var(--ng-on-accent); box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.22); }
.brand-mark j-icon { font-size: 19px; }

/* ── Drawer scrims (shared) ────────────────────────────────────────────── */
.console-scrim, .public-scrim { display: none; }

/* ── Public portal ─────────────────────────────────────────────────────── */
.public-shell { min-height: 100vh; }
.public-header { position: sticky; top: 0; z-index: 50; border-bottom: 1px solid var(--ng-border); background: var(--ng-glass); backdrop-filter: blur(14px); }
.public-toolbar { display: flex; align-items: center; gap: 8px; min-height: 68px; }
.public-nav { display: flex; align-items: center; gap: 4px; margin-right: 12px; }
.public-nav a {
  padding: 9px 13px; border-radius: var(--ng-radius-sm);
  font: 600 0.7rem var(--ng-mono); letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--ng-muted);
}
.public-nav a:hover { color: var(--ng-violet); background: var(--ng-violet-soft); }
.public-menu-button { display: none; }

.public-drawer {
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  z-index: 1200;
  display: flex;
  flex-direction: column;
  width: min(318px, 86vw);
  padding: 18px 16px;
  border-right: 1px solid var(--ng-border-strong);
  background: var(--ng-surface);
  box-shadow: var(--ng-shadow-lg);
  opacity: 0;
  pointer-events: none;
  transform: translateX(-102%);
  transition: transform 200ms ease, opacity 160ms ease;
  overflow-y: auto;
}
.public-drawer.j-drawer--open { opacity: 1; pointer-events: auto; transform: translateX(0); }
.public-drawer__head { padding: 4px 8px 18px; border-bottom: 1px solid var(--ng-border); }
.public-drawer__nav { display: grid; gap: 3px; padding-top: 16px; }
.public-drawer__actions { display: grid; gap: 9px; margin-top: auto; padding-top: 18px; border-top: 1px solid var(--ng-border); }

.public-main { min-height: 70vh; }
.hero { min-height: 640px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(430px, 0.92fr); align-items: center; gap: 70px; padding-block: 88px 90px; }
.hero-copy { max-width: 620px; }
.announcement { margin-bottom: 26px; padding: 5px 11px; background: var(--ng-violet-soft); color: var(--ng-violet); border: 1px solid var(--ng-violet-edge); }
.announcement-dot { width: 6px; height: 6px; border-radius: 99px; background: var(--ng-violet); }
.hero h1 { margin-bottom: 24px; color: var(--ng-ink); font-size: clamp(2.7rem, 4.8vw, 4.4rem); line-height: 1.02; letter-spacing: -0.015em; text-transform: uppercase; }
.hero h1 span { color: var(--ng-violet); }
.hero-lead { max-width: 560px; margin-bottom: 32px; color: var(--ng-muted); font-size: 1.05rem; line-height: 1.72; }
.hero-actions { display: flex; gap: 12px; margin-bottom: 46px; }
.hero-proof { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; padding-top: 22px; border-top: 1px solid var(--ng-border); }
.hero-proof div { display: grid; gap: 4px; }
.hero-proof strong { font: 600 0.86rem var(--ng-display); }
.hero-proof span { color: var(--ng-subtle); font: 400 0.68rem var(--ng-mono); }

/* the verification ledger (hero artifact) */
.hero-console { position: relative; overflow: hidden; border: 1px solid var(--ng-border-strong); border-radius: var(--ng-radius); background: var(--ng-surface); }
.hero-console::after {
  content: ""; position: absolute; inset-inline: 0; height: 48px; top: -48px; pointer-events: none;
  background: linear-gradient(180deg, transparent, var(--ng-violet-faint));
  animation: ng-scan 3.8s ease-in-out infinite;
}
.window-bar { height: 42px; display: flex; align-items: center; gap: 6px; padding: 0 15px; border-bottom: 1px solid var(--ng-border); background: var(--ng-surface-soft); }
.window-bar > span { width: 7px; height: 7px; border-radius: 99px; background: var(--ng-border-strong); }
.window-bar > span:first-child { background: var(--ng-red); }.window-bar > span:nth-child(2) { background: var(--ng-amber); }.window-bar > span:nth-child(3) { background: var(--ng-green); }
.window-bar small { margin-left: auto; margin-right: auto; color: var(--ng-subtle); font: 500 0.6rem var(--ng-mono); letter-spacing: 0.14em; text-transform: uppercase; }
.run-preview { padding: 22px 20px; }
.run-preview__head { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; }
.run-preview__head > div:nth-child(2) { flex: 1; }.run-preview__head h2 { margin: 3px 0 0; font: 600 1rem var(--ng-mono); letter-spacing: 0; }
.run-icon { display: grid; place-items: center; width: 40px; height: 40px; border-radius: var(--ng-radius-sm); background: var(--ng-green-soft); color: var(--ng-green); }
.run-meta-grid { display: grid; grid-template-columns: repeat(2, 1fr); overflow: hidden; margin-bottom: 20px; border: 1px solid var(--ng-border); border-radius: var(--ng-radius-sm); }
.run-meta-grid div { display: grid; gap: 4px; padding: 11px 13px; border-bottom: 1px solid var(--ng-border); }
.run-meta-grid div:nth-child(odd) { border-right: 1px solid var(--ng-border); }.run-meta-grid div:nth-last-child(-n+2) { border-bottom: 0; }
.run-meta-grid span, .evidence-facts span { color: var(--ng-subtle); font: 500 0.6rem var(--ng-mono); text-transform: uppercase; letter-spacing: 0.1em; }
.run-meta-grid strong { font: 600 0.76rem var(--ng-mono); }.run-meta-grid code { font-size: 0.68rem; color: var(--ng-violet); }
.step-list { display: grid; }
.step { display: grid; grid-template-columns: 24px 1fr auto; align-items: center; gap: 10px; padding: 11px 0; border-bottom: 1px dashed var(--ng-border); }
.step > j-icon { align-items: center; justify-content: center; width: 19px; height: 19px; border-radius: var(--ng-radius-sm); background: var(--ng-green); color: var(--ng-on-accent); font-size: 13px; }
.step > span { display: grid; gap: 2px; }.step strong { font: 600 0.74rem var(--ng-mono); }.step small, .step time { color: var(--ng-subtle); font: 400 0.64rem var(--ng-mono); }
.receipt { display: flex; align-items: center; justify-content: space-between; margin-top: 16px; padding: 11px 13px; border-radius: var(--ng-radius-sm); border: 1px solid var(--ng-violet-edge); background: var(--ng-violet-soft); color: var(--ng-violet); }
.receipt span { display: flex; align-items: center; gap: 7px; font: 600 0.64rem var(--ng-mono); letter-spacing: 0.1em; text-transform: uppercase; }.receipt code { font-size: 0.62rem; }

/* the chain strip */
.trust-strip { border-block: 1px solid var(--ng-border); background: var(--ng-surface-soft); }
.trust-grid { min-height: 108px; display: grid; grid-template-columns: 1fr auto 1fr auto 1fr auto 1fr; align-items: center; gap: 18px; }
.trust-grid > div:not(.trust-arrow) { display: grid; grid-template-columns: 30px auto; align-items: center; column-gap: 8px; }
.trust-grid > div > j-icon { grid-row: 1 / 3; color: var(--ng-violet); }.trust-grid strong { font: 600 0.84rem var(--ng-display); }.trust-grid span { color: var(--ng-subtle); font: 400 0.64rem var(--ng-mono); }
.trust-arrow { color: var(--ng-border-strong); }
.content-section { padding-block: 104px; }
.section-heading { max-width: 660px; margin: 0 auto 52px; text-align: center; }
.section-heading h2 { margin: 13px 0 15px; font-size: clamp(1.8rem, 2.9vw, 2.7rem); line-height: 1.08; text-transform: uppercase; letter-spacing: -0.01em; }
.section-heading p { color: var(--ng-muted); line-height: 1.72; }

/* gate cards (ticket-notched) */
.feature-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }
.feature-card {
  min-height: 300px; position: relative; border: 1px solid var(--ng-border-strong); background: var(--ng-surface);
  clip-path: polygon(0 0, calc(100% - 11px) 0, 100% 11px, 100% 100%, 11px 100%, 0 calc(100% - 11px));
  transition: transform 150ms ease, background 150ms ease, border-color 150ms ease;
}
.feature-card:hover { transform: translateY(-4px); background: var(--ng-surface-soft); border-color: var(--ng-violet-edge); }
.feature-card j-card-section { height: 100%; display: flex; flex-direction: column; padding: 24px 22px; }
.feature-card--highlight { border-color: var(--ng-violet); }
.feature-number { position: absolute; top: 20px; right: 22px; color: var(--ng-violet); font: 600 0.62rem var(--ng-mono); letter-spacing: 0.12em; }
.feature-number::before { content: "GATE "; color: var(--ng-subtle); }
.feature-icon { align-items: center; justify-content: center; width: 40px; height: 40px; margin-bottom: 34px; border-radius: var(--ng-radius-sm); background: var(--ng-violet-soft); color: var(--ng-violet); }
.feature-card h3 { margin-bottom: 10px; font-size: 1.16rem; }.feature-card p { flex: 1; color: var(--ng-muted); font-size: 0.82rem; line-height: 1.65; }.feature-card code { color: var(--ng-violet); font-size: 0.64rem; }
.feature-card j-chip { justify-self: start; }
.feature-progress { height: 5px; overflow: hidden; border-radius: 99px; background: var(--ng-track); }.feature-progress::after { content: ""; display: block; width: 86%; height: 100%; background: var(--ng-violet); }

/* operator band */
.platform-section { padding-block: 100px; border-block: 1px solid var(--ng-border); background: var(--ng-surface-soft); color: var(--ng-ink); }
.platform-grid { display: grid; grid-template-columns: 0.85fr 1.15fr; align-items: center; gap: 90px; }
.section-heading--left { margin: 0; text-align: left; }.section-heading--left .eyebrow { color: var(--ng-violet); }.section-heading--left p { color: var(--ng-muted); }.section-heading--left .button { margin-top: 12px; }
.platform-points { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1px; background: var(--ng-border); border: 1px solid var(--ng-border); }
.platform-points > div { display: flex; gap: 14px; min-height: 128px; padding: 22px; background: var(--ng-surface); }
.platform-points > div > j-icon { color: var(--ng-violet); }.platform-points span { display: grid; align-content: start; gap: 7px; }.platform-points strong { font: 600 0.86rem var(--ng-display); }.platform-points small { color: var(--ng-subtle); font: 400 0.68rem var(--ng-mono); line-height: 1.6; }
.public-footer { padding-block: 40px; border-top: 1px solid var(--ng-border); background: var(--ng-canvas); color: var(--ng-ink); }
.public-footer__inner { display: flex; align-items: end; justify-content: space-between; }.brand--footer { color: var(--ng-ink); }.public-footer p { margin: 14px 0 0; color: var(--ng-subtle); font: 400 0.72rem var(--ng-mono); }.footer-meta { display: flex; gap: 22px; color: var(--ng-subtle); font: 500 0.62rem var(--ng-mono); letter-spacing: 0.1em; text-transform: uppercase; }

/* ── Login ─────────────────────────────────────────────────────────────── */
.login-page {
  min-height: calc(100vh - 68px);
  display: grid;
  place-items: center;
  padding-block: 72px;
}
.login-shell { display: grid; place-items: center; }
.login-card { width: min(100%, 500px); border: 1px solid var(--ng-border-strong); border-radius: var(--ng-radius); background: var(--ng-surface); }
.login-card__content { display: grid; gap: 18px; padding: clamp(28px, 5vw, 44px); }
.login-brand { width: max-content; }
.login-chip { width: max-content; gap: 6px; margin-top: 7px; }
.login-chip j-icon { font-size: 15px; }
.login-copy { display: grid; gap: 11px; padding-block: 8px 4px; }
.login-copy h1 { margin: 0; font-size: clamp(1.7rem, 4.4vw, 2.3rem); line-height: 1.08; text-transform: uppercase; letter-spacing: -0.01em; }
.login-copy p { margin: 0; color: var(--ng-muted); font-size: 0.9rem; line-height: 1.7; }
.login-submit { justify-content: center; margin-top: 4px; }
.login-card j-separator { height: 1px; margin-block: 4px; border-bottom: 1px dashed var(--ng-border-strong); }
.login-assurance { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.login-assurance span { display: grid; justify-items: center; gap: 7px; color: var(--ng-subtle); font: 500 0.6rem var(--ng-mono); letter-spacing: 0.06em; text-transform: uppercase; text-align: center; }
.login-assurance j-icon { color: var(--ng-violet); font-size: 19px; }

/* ── Operator shell ────────────────────────────────────────────────────── */
.console-shell { min-height: 100vh; display: grid; grid-template-columns: 248px minmax(0, 1fr); grid-template-rows: var(--ng-header-h) minmax(0, 1fr); background: transparent; }
.console-shell.j-layout--drawer-above { grid-template-columns: minmax(0, 1fr); }
.console-header { grid-column: 1 / -1; grid-row: 1; z-index: 30; border-bottom: 1px solid var(--ng-border); background: var(--ng-glass); backdrop-filter: blur(14px); transition: background-color 220ms ease, border-color 220ms ease; }
.console-toolbar { height: var(--ng-header-h); display: flex; align-items: center; gap: 8px; padding: 0 20px; }
.console-menu-button { display: none; }.console-brand { min-width: 200px; }.console-brand .brand-mark { width: 29px; height: 29px; }
.toolbar-context { display: flex; align-items: center; gap: 12px; color: var(--ng-muted); font: 500 0.68rem var(--ng-mono); letter-spacing: 0.08em; text-transform: uppercase; }.toolbar-divider { width: 1px; height: 24px; background: var(--ng-border-strong); }
.profile-control { padding: 4px 8px; border-color: transparent; text-transform: none; letter-spacing: 0; }
.profile-avatar, .avatar, .org-avatar { align-items: center; justify-content: center; border-radius: var(--ng-radius-sm); background: var(--ng-violet-soft); color: var(--ng-violet); font: 600 0.64rem var(--ng-mono); }
.profile-avatar { width: 32px; height: 32px; }.profile-copy { display: grid; gap: 1px; margin: 0 5px; text-align: left; }.profile-copy strong { font: 600 0.72rem var(--ng-body); }.profile-copy small { color: var(--ng-subtle); font: 400 0.6rem var(--ng-mono); }
.console-logout { width: auto; gap: 6px; padding-inline: 9px; color: var(--ng-muted); font: 600 .62rem var(--ng-mono); letter-spacing: .06em; text-transform: uppercase; }
.console-logout:hover { color: var(--ng-red); background: var(--ng-red-soft); }
.console-logout j-icon { font-size: 18px; }
.console-drawer { grid-column: 1; grid-row: 2; width: auto; min-width: 0; display: flex; flex-direction: column; padding: 18px 14px; border-right: 1px solid var(--ng-border); background: var(--ng-surface-soft); overflow-y: auto; transition: background-color 220ms ease, border-color 220ms ease, transform 200ms ease, opacity 160ms ease, box-shadow 200ms ease; }
.console-drawer.j-drawer--above { width: min(304px, 86vw); }
.drawer-org { display: flex; align-items: center; gap: 10px; padding: 0 8px 18px; border-bottom: 1px solid var(--ng-border); }.org-avatar { width: 33px; height: 33px; background: var(--ng-violet); color: var(--ng-on-accent); }.drawer-org > div { display: grid; gap: 2px; }.drawer-org strong { font: 700 0.7rem var(--ng-mono); letter-spacing: 0.22em; text-transform: uppercase; }.drawer-org small { color: var(--ng-subtle); font: 400 0.62rem var(--ng-mono); }
.console-nav { display: grid; gap: 2px; padding-top: 15px; }.nav-label { margin: 13px 10px 7px; color: var(--ng-subtle); font: 600 0.58rem var(--ng-mono); letter-spacing: 0.18em; text-transform: uppercase; }
.console-nav__link { position: relative; min-height: 40px; display: grid; grid-template-columns: 22px 1fr auto; align-items: center; gap: 9px; padding: 0 10px; border-radius: var(--ng-radius-sm); border-left: 2px solid transparent; color: var(--ng-muted); font: 500 0.76rem var(--ng-mono); transition: background 140ms ease, color 140ms ease, border-color 140ms ease; }
.console-nav__link:hover { background: var(--ng-hover); color: var(--ng-ink); }
.console-nav__link[aria-current="page"], .console-nav__link.router-link-active, .console-nav__link.j-router-link--active { background: var(--ng-violet-soft); color: var(--ng-violet); border-left-color: var(--ng-violet); }
.console-nav__link j-icon { font-size: 18px; }
.drawer-evidence { margin-top: auto; border: 1px dashed var(--ng-border-strong); border-radius: var(--ng-radius-sm); background: transparent; }.drawer-evidence j-card-section { padding: 14px; }.evidence-head { display: flex; align-items: center; gap: 7px; margin: 8px 0 4px; color: var(--ng-violet); font: 600 0.7rem var(--ng-mono); letter-spacing: 0.1em; }.evidence-head code { font-size: 0.6rem; }.drawer-evidence p { margin: 0; color: var(--ng-subtle); font: 400 0.62rem var(--ng-mono); }
.console-shell.j-layout--row > .console-main.j-page-container { grid-column: 2; grid-row: 2; min-width: 0; overflow: auto; }
.console-shell.j-layout--row.j-layout--drawer-above > .console-main.j-page-container { grid-column: 1; }.console-page { width: min(1440px, 100%); margin: 0 auto; padding: 30px 32px 48px; }
.preview-banner { display: block; margin: 1rem clamp(1rem, 3vw, 2.5rem) 0; padding: .7rem 1rem; border: 1px solid var(--ng-amber); border-radius: var(--ng-radius-sm); background: var(--ng-amber-soft); color: var(--ng-amber-ink); font: 500 0.74rem var(--ng-mono); }
.page-heading { min-height: 72px; display: flex; align-items: flex-start; justify-content: space-between; gap: 25px; margin-bottom: 24px; }.page-heading h1 { margin: 4px 0 6px; font-size: 1.5rem; letter-spacing: 0; text-transform: uppercase; }.page-heading p { margin: 0; color: var(--ng-muted); font-size: 0.82rem; }.page-actions { display: flex; align-items: center; gap: 9px; padding-top: 7px; }

/* counters — fused stat tiles */
.metric-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px; margin-bottom: 18px; background: var(--ng-border); border: 1px solid var(--ng-border); }
.metric-card, .panel, .repository-card, .verification-summary j-card, .policy-card { border: 1px solid var(--ng-border-strong); border-radius: var(--ng-radius); background: var(--ng-surface); box-shadow: none; transition: background-color 220ms ease, border-color 220ms ease; }
.metric-grid .metric-card { border: 0; border-radius: 0; }
.metric-card j-card-section { padding: 18px 20px 15px; }.metric-card__top { display: flex; align-items: center; justify-content: space-between; color: var(--ng-subtle); font: 600 0.62rem var(--ng-mono); letter-spacing: 0.14em; text-transform: uppercase; }.metric-icon { display: grid; place-items: center; width: 30px; height: 30px; border-radius: var(--ng-radius-sm); }.metric-icon--violet { background: var(--ng-violet-soft); color: var(--ng-violet); }.metric-icon--blue { background: var(--ng-blue-soft); color: var(--ng-blue); }.metric-icon--green { background: var(--ng-green-soft); color: var(--ng-green); }.metric-icon--amber { background: var(--ng-amber-soft); color: var(--ng-amber); }.metric-card > j-card-section > strong { display: block; margin: 12px 0 4px; font: 600 1.9rem/1 var(--ng-mono); font-variant-numeric: tabular-nums; letter-spacing: -0.03em; }.metric-card p { margin: 0; color: var(--ng-subtle); font: 400 0.64rem var(--ng-mono); }.trend { color: var(--ng-muted); font-weight: 600; }.trend--up { color: var(--ng-green); }

.dashboard-grid { display: grid; grid-template-columns: minmax(0, 1.9fr) minmax(290px, 0.8fr); gap: 18px; margin-bottom: 18px; }.panel { overflow: hidden; }.panel-heading { min-height: 62px; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 15px 18px; border-bottom: 1px solid var(--ng-border); }.panel-heading h2 { margin: 0 0 3px; font-size: 0.9rem; letter-spacing: 0.03em; text-transform: uppercase; }.panel-heading p { margin: 0; color: var(--ng-subtle); font: 400 0.64rem var(--ng-mono); }.panel-heading > a { display: flex; align-items: center; gap: 6px; color: var(--ng-violet); font: 600 0.64rem var(--ng-mono); letter-spacing: 0.1em; text-transform: uppercase; }.panel-heading > a j-icon { font-size: 15px; }
.data-table { overflow-x: auto; }.data-row { min-width: 760px; display: grid; align-items: center; min-height: 60px; padding: 10px 18px; border-bottom: 1px dashed var(--ng-border); color: var(--ng-muted); font: 400 0.7rem var(--ng-mono); }.data-row:last-child { border-bottom: 0; }.data-row:not(.data-row--head):hover { background: var(--ng-hover); }.data-row--head { min-height: 34px; background: var(--ng-surface-soft); border-bottom: 1px solid var(--ng-border); color: var(--ng-subtle); font: 600 0.58rem var(--ng-mono); letter-spacing: 0.16em; text-transform: uppercase; }.data-row > span { min-width: 0; }.data-row > span, .data-row > span > span { display: grid; gap: 3px; }.data-row strong { color: var(--ng-ink); font: 600 0.74rem var(--ng-mono); }.data-row small { display: flex; align-items: center; gap: 5px; color: var(--ng-subtle); font-size: 0.62rem; }.data-row code { color: var(--ng-blue); font-size: 0.66rem; }
.verification-columns { grid-template-columns: 0.95fr 1.7fr 1.2fr 0.8fr 0.65fr; gap: 14px; }.repo-columns { grid-template-columns: 1.5fr 1fr 1fr 0.9fr 0.6fr; gap: 14px; }.change-columns { grid-template-columns: 2.4fr 0.9fr 1fr 0.9fr 0.7fr; gap: 14px; }.policy-columns { grid-template-columns: 1.1fr 1.5fr 1.2fr 0.8fr 0.7fr; gap: 14px; }.member-columns { grid-template-columns: 1.8fr 0.8fr 1.1fr 0.6fr; gap: 14px; }.member-columns > span:first-child { display: flex; align-items: center; gap: 9px; }
.health-list { padding: 5px 18px; }.health-list > div { display: grid; grid-template-columns: 34px 1fr auto; align-items: center; gap: 10px; padding: 11px 0; border-bottom: 1px dashed var(--ng-border); }.health-list > div:last-child { border-bottom: 0; }.health-icon { display: grid; place-items: center; width: 30px; height: 30px; border-radius: var(--ng-radius-sm); background: var(--ng-chip-bg); color: var(--ng-muted); }.health-list > div > span:nth-child(2) { display: grid; gap: 2px; }.health-list strong { font: 600 0.72rem var(--ng-body); }.health-list small { color: var(--ng-subtle); font: 400 0.6rem var(--ng-mono); }.worker-load { display: flex; justify-content: space-between; padding: 12px 18px 7px; border-top: 1px solid var(--ng-border); font: 400 0.64rem var(--ng-mono); }.worker-load > span:first-child { display: grid; }.worker-load small { color: var(--ng-subtle); }.system-panel > j-linear-progress { height: 5px; display: block; margin: 0 18px 17px; border-radius: 99px; background: linear-gradient(90deg, var(--ng-violet) 33%, var(--ng-track) 33%); }
.activity-panel { margin-bottom: 0; }.activity-grid { display: grid; grid-template-columns: repeat(3, 1fr); }.activity-item { position: relative; display: grid; grid-template-columns: 38px 1fr auto; align-items: center; gap: 10px; padding: 18px 20px; border-right: 1px solid var(--ng-border); }.activity-item:last-child { border-right: 0; }.activity-line { position: absolute; inset: 0 auto 0 0; width: 2px; }.activity-line--green { background: var(--ng-green); }.activity-line--amber { background: var(--ng-amber); }.activity-line--blue { background: var(--ng-blue); }.avatar { width: 29px; height: 29px; }.avatar--violet { background: var(--ng-violet-soft); color: var(--ng-violet); }.avatar--blue { background: var(--ng-blue-soft); color: var(--ng-blue); }.avatar--green { background: var(--ng-green-soft); color: var(--ng-green); }.avatar--orange { background: var(--ng-amber-soft); color: var(--ng-amber); }.activity-system { display: grid; place-items: center; width: 30px; height: 30px; border-radius: var(--ng-radius-sm); background: var(--ng-amber-soft); color: var(--ng-amber); }.activity-item p { display: grid; gap: 3px; margin: 0; }.activity-item strong { font: 600 0.7rem var(--ng-body); }.activity-item p span, .activity-item time { color: var(--ng-subtle); font: 400 0.6rem var(--ng-mono); }.activity-item time { align-self: start; }

/* ── Console feature pages ─────────────────────────────────────────────── */
.search-input { min-width: 210px; }.search-input--wide { min-width: 320px; }

/* ── Form controls — evidence-grade fields ─────────────────────────────────
   The runtime generates the real <input>/<select>/<textarea> INSIDE the
   j-input/j-select/j-textarea host and mirrors the component class onto it,
   so the host is reset to an invisible stack and only the inner control is
   drawn. Labels read like ledger captions; focus is the proof ring. */
j-input, j-select, j-textarea,
j-input.j-field, j-select.j-field, j-textarea.j-field {
  display: grid;
  gap: 6px;
  min-height: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: inherit;
  font: inherit;
}
.j-field__label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--ng-subtle);
  font: 600 0.58rem var(--ng-mono);
  letter-spacing: 0.16em;
  line-height: 1.2;
  text-transform: uppercase;
  transition: color 140ms ease;
}
.j-field__label::before {
  content: "";
  width: 10px;
  height: 2px;
  background: var(--ng-border-strong);
  transition: background 140ms ease, width 140ms ease;
}
j-input:focus-within .j-field__label, j-select:focus-within .j-field__label, j-textarea:focus-within .j-field__label { color: var(--ng-violet); }
j-input:focus-within .j-field__label::before, j-select:focus-within .j-field__label::before, j-textarea:focus-within .j-field__label::before { width: 16px; background: var(--ng-violet); }
.j-field__required { color: var(--ng-red); }
.j-field__hint, .j-field__error { font: 400 0.6rem var(--ng-mono); }
.j-field__hint { color: var(--ng-subtle); }
.j-field__error { color: var(--ng-red); }

/* terminal-ledger controls: an inset paper well, sharp corners, violet caret;
   focus raises the well onto the surface with the proof ring and the same
   inset accent bar the console uses for selected evidence. */
input.j-input, textarea.j-textarea, .j-select__native, select.j-select {
  width: 100%;
  min-height: 40px;
  padding: 0 13px;
  border: 1px solid var(--ng-border-strong);
  border-radius: var(--ng-radius-sm);
  background:
    linear-gradient(180deg, rgba(21, 24, 30, 0.028), transparent 9px),
    var(--ng-surface-soft);
  color: var(--ng-ink);
  font: 500 0.76rem var(--ng-mono);
  letter-spacing: 0.01em;
  caret-color: var(--ng-violet);
  box-shadow: inset 2px 0 0 transparent;
  transition: border-color 140ms ease, box-shadow 140ms ease, background-color 220ms ease;
}
html.j-dark input.j-input, html.j-dark textarea.j-textarea,
html.j-dark .j-select__native, html.j-dark select.j-select {
  background:
    linear-gradient(180deg, rgba(0, 0, 0, 0.22), transparent 9px),
    var(--ng-surface-soft);
}
textarea.j-textarea { min-height: 96px; padding: 11px 13px; resize: vertical; }
input.j-input::placeholder, textarea.j-textarea::placeholder { color: var(--ng-subtle); opacity: 0.75; }
input.j-input:hover, textarea.j-textarea:hover, .j-select__native:hover, select.j-select:hover { border-color: var(--ng-violet-edge); }
input.j-input:focus, textarea.j-textarea:focus, .j-select__native:focus, select.j-select:focus {
  outline: none;
  border-color: var(--ng-violet);
  background: var(--ng-surface);
  box-shadow: inset 2px 0 0 var(--ng-violet), var(--ng-ring);
}
input.j-input:focus::placeholder, textarea.j-textarea:focus::placeholder { opacity: 0.45; }
input.j-input[type="date"] { color-scheme: light; }
html.j-dark input.j-input[type="date"] { color-scheme: dark; }
input.j-input[type="date"]::-webkit-calendar-picker-indicator { cursor: pointer; opacity: 0.55; }
input.j-input[type="date"]::-webkit-calendar-picker-indicator:hover { opacity: 1; }
select.j-select, .j-select__native {
  appearance: none;
  padding-right: 34px;
  background-image:
    linear-gradient(45deg, transparent 50%, var(--ng-subtle) 50%),
    linear-gradient(135deg, var(--ng-subtle) 50%, transparent 50%);
  background-position: calc(100% - 18px) 50%, calc(100% - 13px) 50%;
  background-size: 5px 5px;
  background-repeat: no-repeat;
  cursor: pointer;
}
label.j-checkbox { display: inline-flex; align-items: center; gap: 9px; cursor: pointer; color: var(--ng-muted); font: 500 0.72rem var(--ng-mono); }
.j-checkbox__input {
  appearance: none;
  width: 17px;
  height: 17px;
  margin: 0;
  flex: 0 0 17px;
  display: grid;
  place-items: center;
  border: 1px solid var(--ng-border-strong);
  border-radius: var(--ng-radius-sm);
  background: var(--ng-surface);
  cursor: pointer;
  transition: border-color 140ms ease, background 140ms ease;
}
.j-checkbox__input:checked { border-color: var(--ng-violet); background: var(--ng-violet); }
.j-checkbox__input:checked::after {
  width: 8px; height: 4px;
  margin-top: -2px;
  border: 2px solid var(--ng-on-accent);
  border-top: 0; border-right: 0;
  transform: rotate(-45deg);
  content: "";
}
.j-checkbox__input:focus-visible { outline: 2px solid var(--ng-violet); outline-offset: 2px; }

/* runtime toasts — same evidence language as alerts */
.jv-toast {
  position: fixed;
  right: 18px;
  bottom: 18px;
  z-index: 1400;
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 44px;
  max-width: min(380px, calc(100vw - 36px));
  padding: 10px 12px !important;
  border: 1px solid var(--ng-border-strong) !important;
  border-left: 3px solid var(--ng-violet) !important;
  border-radius: var(--ng-radius-sm) !important;
  background: var(--ng-surface) !important;
  color: var(--ng-ink) !important;
  font: 500 0.72rem var(--ng-mono) !important;
  box-shadow: var(--ng-shadow-md) !important;
  opacity: 0;
  transform: translateY(8px);
  transition: opacity 200ms ease, transform 200ms ease;
}
.jv-toast--in { opacity: 1; transform: none; }
.jv-toast--out { opacity: 0; transform: translateY(8px); }
.jv-toast--success { border-left-color: var(--ng-green) !important; }
.jv-toast--error, .jv-toast--warning { border-left-color: var(--ng-red) !important; }
.jv-toast__icon { display: grid; place-items: center; width: 24px; height: 24px; flex: 0 0 24px; border-radius: var(--ng-radius-sm); background: var(--ng-violet-soft) !important; color: var(--ng-violet) !important; font-size: 13px; }
.jv-toast--success .jv-toast__icon { background: var(--ng-green-soft) !important; color: var(--ng-green) !important; }
.jv-toast--error .jv-toast__icon, .jv-toast--warning .jv-toast__icon { background: var(--ng-red-soft) !important; color: var(--ng-red) !important; }
.jv-toast__msg { flex: 1 1 auto; min-width: 0; }
.jv-toast__close { flex: 0 0 auto; border: 0; padding: 3px 7px; border-radius: var(--ng-radius-sm); color: var(--ng-subtle); background: transparent; font-size: 14px; line-height: 1; cursor: pointer; }
.jv-toast__close:hover { color: var(--ng-violet); background: var(--ng-violet-soft); }
.filter-row { display: flex; align-items: center; gap: 7px; margin-bottom: 17px; }.repository-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-bottom: 17px; }.repository-card { transition: transform 150ms ease, background-color 220ms ease, border-color 150ms ease; }.repository-card:hover { transform: translateY(-3px); border-color: var(--ng-violet-edge); background: var(--ng-surface-soft); }.repository-card--featured { border-color: var(--ng-violet-edge); }.repository-card j-card-section { padding: 19px; }.repository-card__top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 17px; }.repo-icon { display: grid; place-items: center; width: 36px; height: 36px; border-radius: var(--ng-radius-sm); background: var(--ng-violet-soft); color: var(--ng-violet); }.repo-icon--blue { background: var(--ng-blue-soft); color: var(--ng-blue); }.repo-icon--orange { background: var(--ng-amber-soft); color: var(--ng-amber); }.repo-icon--green { background: var(--ng-green-soft); color: var(--ng-green); }.repository-card h2 { margin: 0 0 7px; font: 600 0.92rem var(--ng-mono); letter-spacing: 0; }.repository-card p { min-height: 40px; color: var(--ng-muted); font-size: 0.72rem; line-height: 1.55; }.repo-meta { display: flex; gap: 15px; margin: 17px 0; color: var(--ng-subtle); font: 400 0.62rem var(--ng-mono); }.repo-meta span { display: flex; align-items: center; gap: 4px; }.repo-meta j-icon { font-size: 14px; }.repository-card j-separator { height: 1px; border-bottom: 1px dashed var(--ng-border-strong); }.repo-foot { display: flex; align-items: center; justify-content: space-between; padding-top: 13px; color: var(--ng-subtle); font: 400 0.6rem var(--ng-mono); }.repo-foot > span:first-child { display: flex; align-items: center; }.repo-foot j-avatar + j-avatar { margin-left: -6px; }.repo-foot j-avatar { border: 2px solid var(--ng-surface); }.repo-foot small { margin-left: 5px; }
.repository-create-panel > j-card-section { display: grid; grid-template-columns: minmax(260px, 1fr) minmax(150px, 220px) minmax(220px, 320px) auto; align-items: end; gap: 18px; padding: 20px; }
.repository-edit-panel > j-card-section { display: grid; grid-template-columns: minmax(260px, 1fr) minmax(220px, 360px) auto; align-items: end; gap: 18px; padding: 20px; }
.repository-create-panel > j-card-section > div:first-child, .repository-edit-panel > j-card-section > div:first-child { align-self: center; }
.repository-create-panel .button, .repository-edit-panel .repository-form-actions { margin-bottom: 0; }.repository-create-panel h2, .repository-edit-panel h2 { margin: 4px 0; font-size: 1rem; }.repository-create-panel p, .repository-edit-panel p { margin: 0; color: var(--ng-muted); font-size: .7rem; }.repository-notice { margin-bottom: 18px; }.repository-notice--success { color: var(--ng-green); border-color: color-mix(in srgb, var(--ng-green) 35%, var(--ng-border)); background: var(--ng-green-soft); }.repository-card-actions, .repository-form-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 7px; margin-top: 14px; }.repository-card-actions .button { min-height: 32px; padding: 6px 9px; font-size: .62rem; }.button--danger { color: var(--ng-red); border: 1px solid color-mix(in srgb, var(--ng-red) 35%, var(--ng-border)); background: var(--ng-red-soft); }.button--disabled { pointer-events: none; opacity: .55; }
.repository-browser { margin-bottom: 18px; overflow: visible; }
.namespace-migration-panel { margin-bottom: 18px; }
.namespace-migration-panel__header { display: grid; grid-template-columns: minmax(300px, 1fr) minmax(190px, 280px) auto; align-items: end; gap: 18px; padding: 20px; }
.namespace-migration-panel__header h2 { margin: 4px 0; font-size: 1rem; }
.namespace-migration-panel__header p { margin: 0; color: var(--ng-muted); font-size: .7rem; }
.namespace-migration-result { display: grid; gap: 12px; padding: 0 20px 20px; }
.namespace-migration-summary { min-height: 48px; display: flex; align-items: center; gap: 16px; padding-top: 12px; border-top: 1px solid var(--ng-border); }
.namespace-migration-summary > span { display: grid; gap: 2px; }
.namespace-migration-summary strong { font: 700 .9rem var(--ng-mono); }
.namespace-migration-summary small { color: var(--ng-subtle); font: 500 .56rem var(--ng-mono); text-transform: uppercase; }
.namespace-migration-summary .button { margin-left: auto; }
.namespace-migration-table { display: block; overflow-x: auto; border: 1px solid var(--ng-border); border-radius: var(--ng-radius-sm); }
.namespace-migration-row { min-width: 680px; min-height: 42px; display: grid; grid-template-columns: 1fr 1.25fr .35fr .65fr; align-items: center; gap: 12px; padding: 7px 12px; border-bottom: 1px dashed var(--ng-border); font-size: .65rem; }
.namespace-migration-row:last-child { border-bottom: 0; }
.namespace-migration-row--head { min-height: 32px; background: var(--ng-surface-soft); color: var(--ng-subtle); font: 600 .56rem var(--ng-mono); letter-spacing: .1em; text-transform: uppercase; }
.repository-browser__header { min-height: 88px; display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 18px 20px; border-bottom: 1px solid var(--ng-border); }
.repository-browser__title { display: flex; align-items: center; gap: 13px; min-width: 0; }
.repository-browser__title h2 { margin: 3px 0; font: 600 1.05rem var(--ng-mono); }
.repository-browser__title p { margin: 0; color: var(--ng-muted); font-size: .68rem; }
.repository-browser__actions { display: flex; align-items: center; gap: 8px; }
.repository-browser__alert { margin: 12px 18px 0; }
.repository-browser__tabs { min-height: 45px; display: flex; align-items: end; gap: 3px; padding: 0 18px; border-bottom: 1px solid var(--ng-border); background: var(--ng-surface-soft); }
.repository-browser__tab { min-height: 44px; display: flex; align-items: center; gap: 7px; padding: 0 12px; border-bottom: 2px solid transparent; color: var(--ng-muted); font: 600 .65rem var(--ng-mono); letter-spacing: .07em; text-transform: uppercase; }
.repository-browser__tab:hover, .repository-browser__tab--active { color: var(--ng-violet); background: var(--ng-violet-faint); }
.repository-browser__tab--active { border-bottom-color: var(--ng-violet); }
.repository-browser__tab j-icon { font-size: 17px; }
.repository-browser__tab j-badge { min-width: 20px; padding: 2px 6px; border-radius: 99px; background: var(--ng-chip-bg); color: var(--ng-chip-ink); font: 600 .56rem var(--ng-mono); text-align: center; }
.repository-browser__toolbar { position: relative; min-height: 62px; display: flex; align-items: center; gap: 10px; padding: 10px 18px; border-bottom: 1px solid var(--ng-border); background: var(--ng-surface-soft); }
.branch-select { width: 220px; min-width: 180px; }
.branch-select__control { width: 100%; }
.branch-select__control .jv-field__control { min-height: 40px; }
.branch-select__control .j-field__label { font: 600 .55rem var(--ng-mono); letter-spacing: .1em; text-transform: uppercase; }
.repository-browser__commit { min-width: 0; display: flex; align-items: center; gap: 8px; margin-left: auto; color: var(--ng-muted); font: 400 .64rem var(--ng-mono); }
.repository-browser__commit strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.repository-browser__commit code { color: var(--ng-blue); }
.repository-branches { display: block; padding: 0; }
.repository-branches__heading { min-height: 74px; display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 14px 18px; border-bottom: 1px solid var(--ng-border); }
.repository-branches__heading h3 { margin: 3px 0; font: 600 .9rem var(--ng-mono); }
.repository-branches__heading p { margin: 0; color: var(--ng-subtle); font: 400 .63rem var(--ng-mono); }
.repository-branches__list { display: grid; }
.repository-branch { min-height: 68px; display: grid; grid-template-columns: minmax(210px, .9fr) minmax(240px, 1.35fr) auto auto; align-items: center; gap: 14px; padding: 10px 18px; border-bottom: 1px dashed var(--ng-border); }
.repository-branch:last-child { border-bottom: 0; }
.repository-branch:hover { background: var(--ng-hover); }
.repository-branch__open { min-width: 0; justify-content: flex-start; gap: 9px; padding: 4px 6px; color: var(--ng-violet); text-align: left; }
.repository-branch__open > span { min-width: 0; display: grid; gap: 3px; }
.repository-branch__open strong, .repository-branch__open small, .repository-branch__commit strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.repository-branch__open strong { font: 600 .7rem var(--ng-mono); }
.repository-branch__open small { color: var(--ng-subtle); font: 400 .57rem var(--ng-mono); }
.repository-branch__commit { min-width: 0; display: grid; gap: 4px; color: var(--ng-muted); font: 400 .62rem var(--ng-mono); }
.repository-branch__commit code { width: max-content; color: var(--ng-blue); font-size: .58rem; }
.repository-browser__breadcrumbs { min-height: 48px; display: flex; align-items: center; gap: 5px; padding: 7px 18px; border-bottom: 1px solid var(--ng-border); overflow-x: auto; }
.repository-browser__up, .repository-file__back { min-width: 30px; min-height: 30px; padding: 4px; color: var(--ng-muted); }
.repository-browser__breadcrumbs j-breadcrumbs { min-width: max-content; }
.repository-browser__crumb { min-height: 30px; padding: 4px 7px; color: var(--ng-violet); font: 600 .68rem var(--ng-mono); }
.repository-browser__table { display: block; overflow-x: auto; }
.repository-browser__row { min-width: 680px; min-height: 48px; display: grid; grid-template-columns: minmax(260px, 1.6fr) .55fr .45fr .6fr; align-items: center; gap: 12px; padding: 8px 18px; border-bottom: 1px dashed var(--ng-border); color: var(--ng-muted); font: 400 .66rem var(--ng-mono); }
.repository-browser__row:last-child { border-bottom: 0; }
.repository-browser__row:not(.repository-browser__row--head):hover { background: var(--ng-hover); }
.repository-browser__row--head { min-height: 34px; background: var(--ng-surface-soft); color: var(--ng-subtle); font: 600 .57rem var(--ng-mono); letter-spacing: .13em; text-transform: uppercase; }
.repository-browser__entry { width: max-content; max-width: 100%; min-height: 31px; display: flex; align-items: center; gap: 8px; padding: 3px 6px; color: var(--ng-ink); font: 600 .69rem var(--ng-mono); }
.repository-browser__entry:hover { color: var(--ng-violet); }
.repository-browser__entry j-icon { color: var(--ng-violet); font-size: 19px; }
.repository-browser__entry strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.repository-browser__row > code { color: var(--ng-blue); }
.repository-file { margin: 14px 18px 18px; overflow: hidden; border: 1px solid var(--ng-border-strong); border-radius: var(--ng-radius-sm); background: var(--ng-surface); }
.repository-file__header { min-height: 62px; display: flex; align-items: center; justify-content: space-between; gap: 15px; padding: 10px 14px; border-bottom: 1px solid var(--ng-border); background: var(--ng-surface-soft); }
.repository-file__header > div { min-width: 0; display: flex; align-items: center; gap: 8px; }
.repository-file__header > div > span { min-width: 0; display: grid; gap: 2px; }
.repository-file__header strong, .repository-file__header small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.repository-file__header strong { font: 600 .72rem var(--ng-mono); }
.repository-file__header small, .repository-file__meta { color: var(--ng-subtle); font: 400 .6rem var(--ng-mono); }
.repository-file__meta { display: flex; align-items: center; gap: 11px; white-space: nowrap; }
.repository-file__meta code { color: var(--ng-blue); }
.repository-file j-alert { margin: 10px 14px 0; }
.repository-file__content { display: block; max-height: min(65vh, 720px); overflow: auto; background: var(--ng-code-bg, var(--ng-surface-soft)); }
.repository-file__content pre { min-width: max-content; margin: 0; padding: 18px 20px; tab-size: 2; }
.repository-file__content code { color: var(--ng-ink); font: 400 .71rem/1.65 var(--ng-mono); white-space: pre; }
.page-tabs { min-height: 42px; display: flex; align-items: end; gap: 4px; margin-bottom: 15px; border-bottom: 1px solid var(--ng-border); }.tab { min-height: 40px; display: flex; align-items: center; gap: 6px; padding: 0 13px; color: var(--ng-muted); font: 600 0.68rem var(--ng-mono); letter-spacing: 0.08em; text-transform: uppercase; }.tab--active { color: var(--ng-violet); border-bottom: 2px solid var(--ng-violet); }.change-toolbar { display: flex; align-items: center; gap: 9px; padding: 14px 18px; border-bottom: 1px solid var(--ng-border); }.change-toolbar j-select { min-width: 155px; }.review-stack { display: flex !important; }.review-stack j-avatar + j-avatar { margin-left: -7px; }.table-footer { display: flex; align-items: center; justify-content: space-between; min-height: 52px; padding: 9px 18px; border-top: 1px solid var(--ng-border); color: var(--ng-subtle); font: 400 0.64rem var(--ng-mono); }
.verification-summary { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px; margin-bottom: 18px; background: var(--ng-border); border: 1px solid var(--ng-border); }.verification-summary j-card { border: 0; border-radius: 0; }.verification-summary j-card-section { padding: 17px 18px; }.verification-summary span { color: var(--ng-subtle); font: 600 0.62rem var(--ng-mono); letter-spacing: 0.12em; text-transform: uppercase; }.verification-summary strong { display: block; margin: 10px 0 5px; font: 600 1.5rem/1 var(--ng-mono); font-variant-numeric: tabular-nums; }.verification-summary p, .verification-summary small { margin: 0; color: var(--ng-subtle); font: 400 0.62rem var(--ng-mono); }.verification-summary j-linear-progress { height: 5px; display: block; margin: 8px 0; border-radius: 99px; background: linear-gradient(90deg, var(--ng-green) 98.7%, var(--ng-track) 98.7%); }.verification-layout { display: grid; grid-template-columns: 360px minmax(0, 1fr); gap: 18px; }.verification-list-panel .panel-heading { padding-right: 12px; }.verification-list-panel .search-input { min-width: 125px; width: 130px; }.run-list { display: grid; }.run-list-item { min-height: 78px; display: grid; grid-template-columns: 32px 1fr auto; align-items: center; gap: 10px; padding: 12px 14px; border-bottom: 1px dashed var(--ng-border); transition: background 140ms ease; }.run-list-item:hover { background: var(--ng-hover); }.run-list-item--selected { background: var(--ng-violet-faint); box-shadow: inset 2px 0 var(--ng-violet); }.run-list-item:last-child { border-bottom: 0; }.run-state { display: grid; place-items: center; width: 27px; height: 27px; border-radius: var(--ng-radius-sm); }.run-state--passed { background: var(--ng-green-soft); color: var(--ng-green); }.run-state--running { background: var(--ng-amber-soft); color: var(--ng-amber); }.run-state--failed { background: var(--ng-red-soft); color: var(--ng-red); }.run-state j-icon { font-size: 15px; }.run-list-item > div { min-width: 0; display: grid; gap: 3px; }.run-list-item strong { font: 600 0.72rem var(--ng-mono); }.run-list-item span, .run-list-item small { color: var(--ng-subtle); font: 400 0.62rem var(--ng-mono); }.evidence-detail__head { display: flex; align-items: center; justify-content: space-between; padding: 20px; }.evidence-detail__head h2 { margin: 4px 0; font: 600 1.1rem var(--ng-mono); letter-spacing: 0; }.evidence-detail__head p { margin: 0; color: var(--ng-muted); font: 400 0.68rem var(--ng-mono); }.evidence-facts { display: grid; grid-template-columns: repeat(4, 1fr); gap: 15px; padding: 15px 20px; background: var(--ng-surface-soft); border-block: 1px solid var(--ng-border); }.evidence-facts div { display: grid; gap: 5px; }.evidence-facts strong, .evidence-facts code { font: 500 0.66rem var(--ng-mono); }.evidence-detail > j-separator { height: 0; }.evidence-section { padding: 20px; }.subheading { display: flex; justify-content: space-between; margin-bottom: 9px; }.subheading h3 { margin: 0; font-size: 0.8rem; letter-spacing: 0.04em; text-transform: uppercase; }.subheading span { color: var(--ng-green); font: 600 0.62rem var(--ng-mono); letter-spacing: 0.1em; text-transform: uppercase; }.gate-list { display: grid; }.gate-list > div { display: grid; grid-template-columns: 26px 1fr auto; align-items: center; gap: 9px; min-height: 52px; border-bottom: 1px dashed var(--ng-border); }.gate-check { display: grid; place-items: center; width: 20px; height: 20px; border-radius: var(--ng-radius-sm); background: var(--ng-green); color: var(--ng-on-accent); }.gate-check j-icon { font-size: 13px; }.gate-list > div > span:nth-child(2) { display: grid; gap: 3px; }.gate-list strong { font: 600 0.68rem var(--ng-mono); }.gate-list small, .gate-list time { color: var(--ng-subtle); font: 400 0.6rem var(--ng-mono); }
.evidence-receipt { display: grid; grid-template-columns: 1.25fr 1fr 1fr auto; align-items: center; gap: 15px; padding: 16px 20px; border-top: 1px solid var(--ng-violet-edge); background: var(--ng-violet-faint); color: var(--ng-ink); }.evidence-receipt > div { display: grid; gap: 4px; }.evidence-receipt > div:first-child { display: flex; align-items: center; gap: 10px; }.evidence-receipt span, .evidence-receipt small { color: var(--ng-subtle); font: 500 0.58rem var(--ng-mono); letter-spacing: 0.12em; text-transform: uppercase; }.evidence-receipt strong { color: var(--ng-ink); font: 600 0.7rem var(--ng-mono); }.evidence-receipt code { color: var(--ng-violet); font-size: 0.6rem; }.receipt-seal { display: grid !important; place-items: center; width: 33px; height: 33px; border-radius: var(--ng-radius-sm); background: var(--ng-violet-soft); color: var(--ng-violet) !important; }
.policy-alert { min-height: 56px; display: grid; grid-template-columns: 26px 1fr auto; align-items: center; gap: 10px; margin-bottom: 18px; padding: 10px 15px; border: 1px solid var(--ng-violet-edge); border-radius: var(--ng-radius-sm); background: var(--ng-violet-faint); color: var(--ng-violet); }.policy-alert > div { display: grid; gap: 2px; }.policy-alert strong { font: 600 0.72rem var(--ng-mono); }.policy-alert span { color: var(--ng-muted); font: 400 0.64rem var(--ng-mono); }.policy-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 18px; margin-bottom: 18px; }.policy-card j-card-section { padding: 21px; }.policy-card--active { border-color: var(--ng-violet-edge); }.policy-card__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }.policy-icon { display: grid; place-items: center; width: 38px; height: 38px; border-radius: var(--ng-radius-sm); background: var(--ng-violet-soft); color: var(--ng-violet); }.policy-icon--blue { background: var(--ng-blue-soft); color: var(--ng-blue); }.policy-card h2 { margin: 5px 0 7px; font: 600 1rem var(--ng-mono); letter-spacing: 0; }.policy-card > j-card-section > p { color: var(--ng-muted); font-size: 0.73rem; }.policy-rules { display: grid; margin: 18px 0; }.policy-rules > div { display: grid; grid-template-columns: 24px 1fr; align-items: center; gap: 8px; padding: 8px 0; border-bottom: 1px dashed var(--ng-border-soft); }.policy-rules > div:last-child { border-bottom: 0; }.policy-rules j-icon { color: var(--ng-green); font-size: 17px; }.policy-rules span { display: grid; gap: 2px; }.policy-rules strong { font: 600 0.68rem var(--ng-mono); }.policy-rules small { color: var(--ng-subtle); font: 400 0.6rem var(--ng-mono); }.policy-card j-separator { height: 1px; border-bottom: 1px dashed var(--ng-border-strong); }.policy-card__foot { display: flex; align-items: center; justify-content: space-between; padding-top: 12px; color: var(--ng-muted); font: 400 0.64rem var(--ng-mono); }
.access-grid { display: grid; grid-template-columns: minmax(0, 1fr) 280px; gap: 18px; margin-bottom: 18px; }.security-score j-card-section { padding: 23px; text-align: center; }.score-ring { width: 112px; height: 112px; display: grid; place-items: center; margin: 3px auto 18px; border-radius: 99px; background: radial-gradient(circle at center, var(--ng-surface) 62%, transparent 63%), conic-gradient(var(--ng-green) 92%, var(--ng-track) 92%); }.score-ring strong { font: 600 1.5rem var(--ng-mono); font-variant-numeric: tabular-nums; }.score-ring small { color: var(--ng-subtle); font: 400 0.6rem var(--ng-mono); }.security-score h2 { margin-bottom: 6px; font-size: 0.84rem; letter-spacing: 0.04em; text-transform: uppercase; }.security-score > j-card-section > p { margin-bottom: 17px; color: var(--ng-muted); font-size: 0.7rem; }.recommendation { display: grid; grid-template-columns: 25px 1fr; align-items: center; gap: 7px; padding: 10px 0; border-top: 1px dashed var(--ng-border); text-align: left; }.recommendation > j-icon { color: var(--ng-amber); }.recommendation span { display: grid; gap: 2px; }.recommendation strong { font: 600 0.64rem var(--ng-mono); }.recommendation small { color: var(--ng-subtle); font: 400 0.58rem var(--ng-mono); }.security-score .button { margin-top: 13px; }.audit-filter { display: flex; gap: 8px; }.audit-filter j-select { min-width: 130px; }.audit-timeline { padding: 5px 20px 15px; }.audit-entry { display: grid; grid-template-columns: 39px 1fr auto; gap: 12px; min-height: 78px; padding: 15px 0; border-bottom: 1px dashed var(--ng-border); }.audit-entry:last-child { border-bottom: 0; }.audit-marker { display: grid; place-items: center; width: 32px; height: 32px; border-radius: var(--ng-radius-sm); }.audit-marker--green { background: var(--ng-green-soft); color: var(--ng-green); }.audit-marker--blue { background: var(--ng-blue-soft); color: var(--ng-blue); }.audit-marker--amber { background: var(--ng-amber-soft); color: var(--ng-amber); }.audit-marker j-icon { font-size: 17px; }.audit-entry > div { display: grid; gap: 4px; }.audit-entry strong { font: 600 0.72rem var(--ng-body); }.audit-entry p { margin: 0; color: var(--ng-muted); font-size: 0.7rem; }.audit-entry span, .audit-entry time { color: var(--ng-subtle); font: 400 0.58rem var(--ng-mono); }.audit-entry time { padding-top: 3px; }
.access-token-create > j-card-section, .verification-submit > j-card-section { display: grid; grid-template-columns: minmax(240px, 1fr) repeat(3, minmax(150px, 220px)) auto; gap: 12px; align-items: end; padding: 20px; }
.verification-submit > j-card-section { grid-template-columns: minmax(240px, 1fr) repeat(2, minmax(170px, 250px)) auto; }
.access-token-create > j-card-section > div:first-child, .verification-submit > j-card-section > div:first-child { align-self: center; }
.access-token-create h2, .verification-submit h2 { margin: 4px 0; font-size: 1rem; }.access-token-create p, .verification-submit p { margin: 0; color: var(--ng-muted); font-size: .7rem; }.token-revoke { min-height: 26px; margin-top: 5px; padding: 3px 7px; font-size: .58rem; }
.not-found-page { min-height: calc(100vh - var(--ng-header-h)); display: grid; place-items: center; }.not-found-content { max-width: 470px; padding: 35px; text-align: center; }.not-found-icon { display: grid; place-items: center; width: 60px; height: 60px; margin: 0 auto 20px; border-radius: var(--ng-radius); background: var(--ng-violet-soft); color: var(--ng-violet); }.not-found-icon j-icon { font-size: 30px; }.not-found-content h1 { margin: 8px 0 10px; font-size: 1.7rem; text-transform: uppercase; }.not-found-content p { margin-bottom: 22px; color: var(--ng-muted); }


/* ── Forge surfaces: repository, pull requests, runs, identity ─────────── */
.repo-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; margin-bottom: 18px; flex-wrap: wrap; }
.repo-head__identity { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 14px; align-items: start; }
.repo-head__identity h1 { margin: 4px 0 6px; font-size: 1.6rem; }
.repo-head__identity p { margin: 0; color: var(--ng-muted); font-size: .76rem; max-width: 62ch; }
.repo-head__badges { grid-column: 2; display: flex; gap: 6px; flex-wrap: wrap; margin-top: 10px; }
.repo-head__actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.repo-head__clone { padding: 6px 10px; border: 1px solid var(--ng-border); border-radius: var(--ng-radius-sm); background: var(--ng-surface-2); font: 400 .62rem var(--ng-mono); color: var(--ng-muted); }

.repo-tabs { display: flex; gap: 2px; margin: 18px 0 16px; padding-bottom: 0; border-bottom: 1px solid var(--ng-border); overflow-x: auto; }
.repo-tabs__tab { display: inline-flex; align-items: center; gap: 7px; min-height: 38px; padding: 0 14px; border: 0; border-bottom: 2px solid transparent; border-radius: 0; background: transparent; color: var(--ng-muted); font: 500 .72rem var(--ng-body); white-space: nowrap; cursor: pointer; }
.repo-tabs__tab:hover { color: var(--ng-text); background: var(--ng-surface-2); }
.repo-tabs__tab--active { color: var(--ng-violet); border-bottom-color: var(--ng-violet); }
.repo-tabs__tab j-icon { font-size: 17px; }
.repo-tabs__tab j-badge { padding: 1px 6px; border-radius: 99px; background: var(--ng-surface-2); font: 500 .58rem var(--ng-mono); }

.repo-section { display: grid; gap: 16px; }
.repo-toolbar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.repo-toolbar__commit { display: flex; align-items: center; gap: 8px; color: var(--ng-muted); font-size: .68rem; }
.repo-toolbar__commit code { font: 400 .6rem var(--ng-mono); }
.repo-breadcrumbs { display: flex; align-items: center; gap: 8px; }
.repo-breadcrumbs__up, .repo-breadcrumbs__crumb { min-height: 28px; padding: 0 8px; border: 0; background: transparent; color: var(--ng-violet); font: 500 .7rem var(--ng-body); cursor: pointer; }

.repo-tree { border: 1px solid var(--ng-border); border-radius: var(--ng-radius); overflow: hidden; background: var(--ng-surface); }
.repo-tree__row { display: grid; grid-template-columns: minmax(180px, 1.4fr) minmax(0, 2fr) 150px 90px; gap: 12px; align-items: center; padding: 9px 14px; border-bottom: 1px solid var(--ng-border); font-size: .72rem; }
.repo-tree__row:last-child { border-bottom: 0; }
.repo-tree__row--head { background: var(--ng-surface-2); color: var(--ng-subtle); font: 500 .6rem var(--ng-mono); text-transform: uppercase; letter-spacing: .04em; }
.repo-tree__entry { display: inline-flex; align-items: center; gap: 8px; border: 0; background: transparent; color: var(--ng-text); font: 500 .72rem var(--ng-body); cursor: pointer; text-align: left; }
.repo-tree__entry j-icon { font-size: 17px; color: var(--ng-muted); }
.repo-tree__commit { color: var(--ng-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.repo-tree__row time { color: var(--ng-subtle); font: 400 .6rem var(--ng-mono); }

.repo-file, .repo-readme { border: 1px solid var(--ng-border); border-radius: var(--ng-radius); background: var(--ng-surface); }
.repo-file__header { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 12px 16px; border-bottom: 1px solid var(--ng-border); }
.repo-file__header > div { display: flex; align-items: center; gap: 10px; }
.repo-file__header strong { display: block; font: 600 .78rem var(--ng-body); }
.repo-file__header small { color: var(--ng-subtle); font: 400 .6rem var(--ng-mono); }
.repo-file__back { min-height: 28px; padding: 0 8px; border: 0; background: transparent; color: var(--ng-muted); cursor: pointer; }
.repo-file__meta { display: flex; align-items: center; gap: 12px; color: var(--ng-subtle); font: 400 .6rem var(--ng-mono); }
.repo-file__content, .repo-readme__content { max-height: 640px; padding: 14px 16px; overflow: auto; }
.repo-file__content pre, .repo-readme__content pre { margin: 0; }
.repo-file__content code, .repo-readme__content code { font: 400 .68rem/1.6 var(--ng-mono); white-space: pre; }
.repo-blame__table { margin-top: 10px; }
.repo-blame__row { display: grid; grid-template-columns: 90px 140px 150px minmax(0, 1fr); gap: 10px; padding: 6px 0; border-top: 1px dashed var(--ng-border); font-size: .66rem; color: var(--ng-muted); }

.repo-commits, .repo-branches, .repo-pulls, .repo-runs, .repo-workflows { padding: 4px 0; }
.repo-commit { display: grid; grid-template-columns: minmax(0, 1fr) auto auto auto; gap: 12px; align-items: center; padding: 11px 18px; border-bottom: 1px dashed var(--ng-border); }
.repo-commit:last-child { border-bottom: 0; }
.repo-commit__body strong { display: block; font: 600 .74rem var(--ng-body); }
.repo-commit__body small { color: var(--ng-subtle); font: 400 .6rem var(--ng-mono); }
.repo-commit__sha { border: 1px solid var(--ng-border); border-radius: var(--ng-radius-sm); background: var(--ng-surface-2); padding: 3px 8px; cursor: pointer; }
.repo-commit__sha code { font: 400 .6rem var(--ng-mono); }
.repo-commits__head, .repo-workflows__head, .run-log__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; }

.repo-branch { display: grid; grid-template-columns: minmax(200px, 1.2fr) minmax(200px, 1.4fr) auto auto auto auto; gap: 12px; align-items: center; padding: 11px 18px; border-bottom: 1px dashed var(--ng-border); }
.repo-branch:last-child { border-bottom: 0; }
.repo-branch__open { display: inline-flex; align-items: center; gap: 9px; border: 0; background: transparent; cursor: pointer; text-align: left; }
.repo-branch__open strong { display: block; font: 600 .74rem var(--ng-mono); }
.repo-branch__open small { color: var(--ng-subtle); font: 400 .58rem var(--ng-mono); }
.repo-branch__commit { display: grid; gap: 2px; min-width: 0; }
.repo-branch__commit strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 500 .7rem var(--ng-body); }
.repo-branch__commit code { color: var(--ng-subtle); font: 400 .58rem var(--ng-mono); }

.repo-filter { display: inline-flex; gap: 2px; padding: 3px; border: 1px solid var(--ng-border); border-radius: var(--ng-radius-sm); background: var(--ng-surface-2); width: fit-content; }
.repo-filter__option { min-height: 28px; padding: 0 12px; border: 0; border-radius: calc(var(--ng-radius-sm) - 2px); background: transparent; color: var(--ng-muted); font: 500 .68rem var(--ng-body); cursor: pointer; }
.repo-filter__option--active { background: var(--ng-surface); color: var(--ng-text); box-shadow: var(--ng-shadow-sm); }

.repo-pull, .repo-run { display: grid; grid-template-columns: 24px minmax(0, 1fr) auto auto auto; gap: 12px; align-items: center; padding: 12px 18px; border-bottom: 1px dashed var(--ng-border); }
.repo-pull:last-child, .repo-run:last-child { border-bottom: 0; }
.repo-pull__open, .repo-run__open { border: 0; background: transparent; cursor: pointer; text-align: left; min-width: 0; }
.repo-pull__open strong, .repo-run__open strong { display: block; font: 600 .76rem var(--ng-body); }
.repo-pull__open small, .repo-run__open small { color: var(--ng-subtle); font: 400 .6rem var(--ng-mono); }
.repo-pull__state--open { color: var(--ng-green); }
.repo-pull__state--merged { color: var(--ng-violet); }
.repo-pull__state--closed { color: var(--ng-red); }
.repo-run__state--success { color: var(--ng-green); }
.repo-run__state--failed { color: var(--ng-red); }
.repo-run__state--active { color: var(--ng-amber); }
.repo-run__state--neutral { color: var(--ng-subtle); }
.repo-run code { font: 400 .6rem var(--ng-mono); color: var(--ng-subtle); }

.repo-workflow { display: grid; grid-template-columns: minmax(0, 1fr) auto auto auto; gap: 12px; align-items: center; padding: 11px 18px; border-bottom: 1px dashed var(--ng-border); }
.repo-workflow:last-child { border-bottom: 0; }
.repo-workflow strong { display: block; font: 600 .74rem var(--ng-body); }
.repo-workflow small { color: var(--ng-subtle); font: 400 .6rem var(--ng-mono); }
.repo-workflow__error { grid-column: 1 / -1; color: var(--ng-red); font: 400 .62rem var(--ng-mono); }

.repo-diff { display: grid; gap: 16px; }
.repo-diff__stats { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin: 10px 0; }
.repo-diff__file { border: 1px solid var(--ng-border); border-radius: var(--ng-radius); overflow: hidden; background: var(--ng-surface); }
.repo-diff__file-head { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-bottom: 1px solid var(--ng-border); background: var(--ng-surface-2); flex-wrap: wrap; }
.repo-diff__file-head strong { font: 500 .72rem var(--ng-mono); }
.repo-diff__counts { color: var(--ng-subtle); font: 400 .62rem var(--ng-mono); margin-left: auto; }
.repo-diff__hunk-head { padding: 5px 14px; background: var(--ng-surface-2); color: var(--ng-subtle); font: 400 .62rem var(--ng-mono); border-top: 1px solid var(--ng-border); }
.repo-diff__line { display: grid; grid-template-columns: 52px 52px minmax(0, 1fr); align-items: baseline; }
.repo-diff__line code { padding: 1px 10px; font: 400 .66rem/1.55 var(--ng-mono); white-space: pre-wrap; word-break: break-word; }
.repo-diff__gutter { padding: 1px 8px; text-align: right; color: var(--ng-subtle); font: 400 .6rem/1.55 var(--ng-mono); user-select: none; }
.repo-diff__line--added { background: var(--ng-green-soft); }
.repo-diff__line--removed { background: var(--ng-red-soft, rgba(213, 76, 90, .12)); }
.repo-diff__line--context { background: transparent; }

.repo-collaborator, .repo-protection, .org-member, .org-team, .org-grant, .person { display: grid; align-items: center; gap: 12px; padding: 11px 18px; border-bottom: 1px dashed var(--ng-border); }
.repo-collaborator { grid-template-columns: 34px minmax(0, 1fr) auto auto auto; }
.repo-protection { grid-template-columns: minmax(140px, 220px) auto auto auto auto minmax(0, 1fr); }
.repo-collaborator:last-child, .repo-protection:last-child, .org-member:last-child, .org-team:last-child, .org-grant:last-child, .person:last-child { border-bottom: 0; }
.repo-collaborator strong, .org-member strong, .person__identity strong { display: block; font: 600 .74rem var(--ng-body); }
.repo-collaborator small, .org-member small, .person__identity small { color: var(--ng-subtle); font: 400 .6rem var(--ng-mono); }

.pull-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; flex-wrap: wrap; margin-bottom: 16px; }
.pull-head h1 { margin: 4px 0 8px; font-size: 1.55rem; display: flex; align-items: baseline; gap: 10px; }
.pull-head h1 small { color: var(--ng-subtle); font: 400 1rem var(--ng-mono); }
.pull-head p { display: flex; align-items: center; gap: 8px; margin: 0; color: var(--ng-muted); font-size: .74rem; flex-wrap: wrap; }
.pull-head p code { font: 400 .66rem var(--ng-mono); }
.pull-head__actions, .run-head__actions { display: flex; gap: 8px; flex-wrap: wrap; }
.pull-body { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 18px; align-items: start; }
.pull-main { display: grid; gap: 14px; min-width: 0; }
.pull-side { display: grid; gap: 14px; position: sticky; top: calc(var(--ng-header-h) + 18px); }
.pull-description { max-height: 260px; padding: 12px 16px; overflow: auto; }
.pull-description code { font: 400 .7rem/1.6 var(--ng-mono); white-space: pre-wrap; }
.pull-blockers { display: grid; gap: 6px; margin: 12px 0 0; padding: 0; list-style: none; }
.pull-blockers li { display: grid; grid-template-columns: 20px minmax(0, 1fr); gap: 8px; align-items: center; color: var(--ng-muted); font-size: .68rem; }
.pull-blockers li j-icon { font-size: 15px; color: var(--ng-amber); }
.pull-blockers--conflicts li j-icon { color: var(--ng-red); }
.pull-merge__counts { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-top: 14px; }
.pull-merge__counts span { display: grid; gap: 2px; text-align: center; }
.pull-merge__counts strong { font: 600 .96rem var(--ng-mono); }
.pull-merge__counts small { color: var(--ng-subtle); font: 400 .55rem var(--ng-mono); }
.pull-merge__lifecycle { display: flex; gap: 8px; flex-wrap: wrap; }
.pull-review { display: grid; grid-template-columns: 22px minmax(0, 1fr) auto auto; gap: 10px; align-items: center; padding: 9px 18px; border-bottom: 1px dashed var(--ng-border); }
.pull-review:last-child { border-bottom: 0; }
.pull-review strong { display: block; font: 600 .72rem var(--ng-body); }
.pull-review small { color: var(--ng-subtle); font: 400 .58rem var(--ng-mono); }
.pull-review__icon--approved { color: var(--ng-green); }
.pull-review__icon--changes { color: var(--ng-red); }
.pull-review__icon--comment { color: var(--ng-subtle); }
.pull-review__actions { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.pull-comment { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; gap: 12px; padding: 12px 18px; border-bottom: 1px dashed var(--ng-border); }
.pull-comment:last-child { border-bottom: 0; }
.pull-comment__body strong { font: 600 .72rem var(--ng-body); }
.pull-comment__body small { display: block; color: var(--ng-subtle); font: 400 .58rem var(--ng-mono); }
.pull-comment__body pre { margin: 6px 0 0; }
.pull-comment__body code { font: 400 .68rem/1.55 var(--ng-mono); white-space: pre-wrap; }
.pull-comment time { color: var(--ng-subtle); font: 400 .56rem var(--ng-mono); }
.pull-facts { display: grid; gap: 8px; margin-top: 8px; }
.pull-facts span { display: grid; gap: 2px; }
.pull-facts small { color: var(--ng-subtle); font: 400 .56rem var(--ng-mono); }
.pull-facts code, .pull-facts time { font: 400 .62rem var(--ng-mono); word-break: break-all; }

.run-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; flex-wrap: wrap; margin-bottom: 16px; }
.run-head h1 { margin: 4px 0 8px; font-size: 1.5rem; display: flex; align-items: baseline; gap: 10px; }
.run-head h1 small { color: var(--ng-subtle); font: 400 .95rem var(--ng-mono); }
.run-head p { display: flex; align-items: center; gap: 8px; margin: 0; color: var(--ng-muted); font-size: .72rem; flex-wrap: wrap; }
.run-head p code { font: 400 .62rem var(--ng-mono); }
.run-body { display: grid; grid-template-columns: 320px minmax(0, 1fr); gap: 18px; align-items: start; }
.run-detail { display: grid; gap: 14px; min-width: 0; }
.run-job { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 10px 16px; border-bottom: 1px dashed var(--ng-border); }
.run-job:last-child { border-bottom: 0; }
.run-job--active { background: var(--ng-surface-2); }
.run-job__open { display: inline-flex; align-items: center; gap: 9px; border: 0; background: transparent; cursor: pointer; text-align: left; min-width: 0; }
.run-job__open strong { display: block; font: 600 .74rem var(--ng-body); }
.run-job__open small { color: var(--ng-subtle); font: 400 .58rem var(--ng-mono); }
.run-step { display: grid; grid-template-columns: 22px minmax(0, 1fr) auto auto; gap: 10px; align-items: center; padding: 9px 18px; border-bottom: 1px dashed var(--ng-border); }
.run-step:last-child { border-bottom: 0; }
.run-step__name { font: 500 .72rem var(--ng-body); }
.run-step__exit { color: var(--ng-red); font: 400 .6rem var(--ng-mono); }
.run-log__content { max-height: 560px; padding: 14px 16px; overflow: auto; background: var(--ng-surface-2); }
.run-log__content code { font: 400 .66rem/1.6 var(--ng-mono); white-space: pre-wrap; word-break: break-word; }

.orgs-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-bottom: 18px; }
.org-card { border: 1px solid var(--ng-border); border-radius: var(--ng-radius); background: var(--ng-surface); }
.org-card__top { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; }
.org-card h2 { margin: 0 0 4px; font-size: 1rem; }
.org-card code { color: var(--ng-subtle); font: 400 .62rem var(--ng-mono); }
.org-card p { margin: 8px 0 12px; color: var(--ng-muted); font-size: .72rem; }
.org-detail__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; }
.org-member { grid-template-columns: 34px minmax(0, 1fr) auto auto; }
.org-team { grid-template-columns: minmax(0, 1fr) auto auto auto auto; }
.org-grant { grid-template-columns: minmax(0, 1fr) auto auto; }
.org-team__open { display: inline-flex; align-items: center; gap: 9px; border: 0; background: transparent; cursor: pointer; text-align: left; }
.org-team__open strong { display: block; font: 600 .74rem var(--ng-body); }
.org-team__open small { color: var(--ng-subtle); font: 400 .58rem var(--ng-mono); }
.org-grant code { font: 400 .66rem var(--ng-mono); }

.person { grid-template-columns: 34px minmax(0, 1fr) minmax(0, 1fr) auto auto auto auto; }
.person__email { color: var(--ng-muted); font: 400 .66rem var(--ng-mono); overflow: hidden; text-overflow: ellipsis; }
.people-me__facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 12px; margin: 12px 0; }
.people-me__facts span { display: grid; gap: 3px; }
.people-me__facts small { color: var(--ng-subtle); font: 400 .56rem var(--ng-mono); }
.people-me__facts code { font: 400 .64rem var(--ng-mono); word-break: break-all; }
.people-me__orgs { display: flex; gap: 6px; flex-wrap: wrap; }

.chip--warning { background: var(--ng-amber-soft); color: var(--ng-amber); }
.button--disabled { opacity: .55; pointer-events: none; }

@media (max-width: 1180px) {
  .pull-body { grid-template-columns: 1fr; }
  .pull-side { position: static; }
  .run-body { grid-template-columns: 1fr; }
  .orgs-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 920px) {
  .repo-tree__row { grid-template-columns: minmax(0, 1fr) 90px; }
  .repo-tree__row > .repo-tree__commit, .repo-tree__row > time { display: none; }
  .repo-branch { grid-template-columns: minmax(0, 1fr) auto auto; }
  .repo-branch__commit { grid-column: 1 / -1; grid-row: 2; }
  .repo-pull, .repo-run { grid-template-columns: 24px minmax(0, 1fr) auto; }
  .repo-pull > .button, .repo-run > .button, .repo-run > code { display: none; }
  .person { grid-template-columns: 34px minmax(0, 1fr) auto auto; }
  .person__email, .person > .button { display: none; }
  .orgs-grid { grid-template-columns: 1fr; }
}
@media (max-width: 650px) {
  .repo-head__actions .repo-head__clone { display: none; }
  .repo-diff__line { grid-template-columns: 34px 34px minmax(0, 1fr); }
  .pull-merge__counts { grid-template-columns: repeat(2, 1fr); }
  .repo-collaborator, .repo-protection, .org-team { grid-template-columns: minmax(0, 1fr) auto; }
}

/* ── Responsive ────────────────────────────────────────────────────────── */
@media (max-width: 1180px) {
  .hero { grid-template-columns: 1fr 430px; gap: 42px; }.feature-grid { grid-template-columns: repeat(2, 1fr); }.repository-grid { grid-template-columns: repeat(2, 1fr); }.dashboard-grid { grid-template-columns: 1fr; }.activity-grid { grid-template-columns: 1fr; }.activity-item { border-right: 0; border-bottom: 1px solid var(--ng-border); }.verification-layout { grid-template-columns: 320px minmax(0,1fr); }.evidence-receipt { grid-template-columns: 1fr 1fr; }.access-grid { grid-template-columns: 1fr; }
}
@media (max-width: 920px) {
  .public-nav { display: none; }.public-menu-button { display: inline-flex; }.public-toolbar .theme-toggle { margin-left: auto; }
  .hero { min-height: auto; grid-template-columns: 1fr; padding-top: 66px; }.hero-copy { max-width: 720px; }.hero-console { max-width: 580px; margin-inline: auto; }.trust-grid { grid-template-columns: repeat(4, 1fr); }.trust-arrow { display: none; }.platform-grid { grid-template-columns: 1fr; gap: 50px; }
  .console-shell { grid-template-columns: minmax(0, 1fr); }.console-header { grid-column: 1; }.console-menu-button { display: inline-flex; }.console-brand { min-width: auto; }.toolbar-context { display: none; }
  .console-drawer { position: fixed; top: 0; bottom: 0; left: 0; z-index: 1200; width: min(304px, 86vw); opacity: 0; pointer-events: none; transform: translateX(-102%); box-shadow: var(--ng-shadow-lg); }
  .console-drawer.j-drawer--open { opacity: 1; pointer-events: auto; transform: translateX(0); }
  .console-shell.j-layout--row > .console-main.j-page-container { grid-column: 1; }
  .console-scrim:not([hidden]), .public-scrim:not([hidden]) { display: block; position: fixed; inset: 0; z-index: 1190; background: var(--ng-scrim); backdrop-filter: blur(3px); animation: ng-fade 180ms ease; }
  .metric-grid, .verification-summary { grid-template-columns: repeat(2, 1fr); }.verification-layout { grid-template-columns: 1fr; }.verification-list-panel { max-height: 420px; overflow: auto; }.policy-grid { grid-template-columns: 1fr; }.repository-create-panel > j-card-section, .repository-edit-panel > j-card-section, .access-token-create > j-card-section, .verification-submit > j-card-section, .namespace-migration-panel__header { grid-template-columns: 1fr; }.repository-browser__header { align-items: flex-start; flex-direction: column; }.repository-browser__actions { width: 100%; }.repository-browser__commit { display: none; }.repository-branch { grid-template-columns: minmax(190px, 1fr) minmax(220px, 1.2fr) auto; }.repository-branch > .button:last-child { display: none; }
}
@media (max-width: 650px) {
  .shell-width { width: min(100% - 28px, 1200px); }.public-toolbar { min-height: 60px; }.public-toolbar .button--quiet { display: none; }.public-toolbar .button--primary { min-height: 34px; padding-inline: 11px; }.public-toolbar .button--primary j-icon { display: none; }.hero { padding-block: 52px 62px; }.hero h1 { font-size: 2.4rem; }.hero-proof { grid-template-columns: 1fr; }.hero-actions { flex-direction: column; align-items: stretch; }.trust-grid { grid-template-columns: repeat(2, 1fr); padding-block: 20px; }.feature-grid, .platform-points { grid-template-columns: 1fr; }.content-section, .platform-section { padding-block: 70px; }.public-footer__inner { align-items: start; flex-direction: column; gap: 25px; }.footer-meta { flex-wrap: wrap; }
  .login-page { padding-block: 34px; }.login-card__content { padding: 27px 22px; }.login-assurance { grid-template-columns: 1fr; }.login-assurance span { grid-template-columns: 22px 1fr; justify-items: start; align-items: center; text-align: left; }
  .console-toolbar { padding-inline: 10px; }.console-brand > span:last-child, .profile-copy, .profile-control > j-icon, .console-logout > span { display: none; }.profile-control { padding: 2px; }.console-page { padding: 24px 14px 40px; }.page-heading { flex-direction: column; }.page-actions { width: 100%; flex-wrap: wrap; }.page-actions .button { flex: 1; }.metric-grid, .verification-summary, .repository-grid { grid-template-columns: 1fr; }.change-toolbar { align-items: stretch; flex-direction: column; }.search-input, .search-input--wide, .change-toolbar j-select { width: 100%; min-width: 0; }.activity-item { grid-template-columns: 38px 1fr; }.activity-item time { display: none; }.evidence-facts { grid-template-columns: repeat(2, 1fr); }.evidence-receipt { grid-template-columns: 1fr; }.policy-alert { grid-template-columns: 25px 1fr; }.policy-alert .button { grid-column: 1 / -1; }.panel-heading { align-items: flex-start; flex-direction: column; }.audit-filter { width: 100%; }.audit-filter j-select { flex: 1; }.hero-console { font-size: 0.9em; }.namespace-migration-summary { align-items: flex-start; flex-wrap: wrap; }.namespace-migration-summary .button { width: 100%; margin-left: 0; }.repository-browser__toolbar { align-items: flex-start; flex-wrap: wrap; }.branch-select, .branch-select__control { width: 100%; }.repository-file { margin-inline: 8px; }.repository-file__header { align-items: flex-start; flex-direction: column; }.repository-file__meta { flex-wrap: wrap; }.repository-branches__heading { align-items: flex-start; flex-direction: column; }.repository-branch { grid-template-columns: minmax(0, 1fr) auto; }.repository-branch__commit { grid-column: 1 / -1; grid-row: 2; }.repository-branch > .button:last-child { display: none; }
}

/* ── Motion — scan, don't bounce ───────────────────────────────────────── */
@keyframes ng-fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes ng-rise { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@keyframes ng-scan { 55%, 100% { top: 110%; } }
.console-page, .public-main > * { animation: ng-rise 300ms cubic-bezier(0.22, 0.7, 0.3, 1) both; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  body, .console-drawer, .public-drawer, .console-header,
  .button, .icon-action, .profile-control, .feature-card, .repository-card { transition: none; }
  .console-page, .public-main > *, .console-scrim:not([hidden]), .public-scrim:not([hidden]) { animation: none; }
  .hero-console::after { animation: none; display: none; }
}
