@font-face {
font-family: "IBM Plex Sans";
src: url("fonts/IBMPlexSans-Regular.woff2") format("woff2");
font-weight: 400;
font-display: swap;
}
@font-face {
font-family: "IBM Plex Sans";
src: url("fonts/IBMPlexSans-Medium.woff2") format("woff2");
font-weight: 500;
font-display: swap;
}
@font-face {
font-family: "IBM Plex Sans";
src: url("fonts/IBMPlexSans-SemiBold.woff2") format("woff2");
font-weight: 600;
font-display: swap;
}
@font-face {
font-family: "IBM Plex Mono";
src: url("fonts/IBMPlexMono-Regular.woff2") format("woff2");
font-weight: 400;
font-display: swap;
}
@font-face {
font-family: "IBM Plex Mono";
src: url("fonts/IBMPlexMono-Medium.woff2") format("woff2");
font-weight: 500;
font-display: swap;
}
:root {
--bg: #f4f6f8;
--panel: #ffffff;
--soft: #f9fafb;
--line: #dce3e8;
--line-soft: #e8edf1;
--ink: #1e2a35;
--ink-2: #3a4d5e;
--muted: #64778a;
--accent: #f0a43c;
--accent-ink: #1e2a35;
--accent-edge: #c97f14;
--blue: #4c7088;
--blue-soft: #e3ecf2;
--blue-ink: #2f4f68;
--green: #3e9a6e;
--green-soft: #eaf4ef;
--green-ink: #1f5c3e;
--amber-soft: #fbebd2;
--amber-ink: #7a4e0a;
--red: #c0392b;
--red-soft: #fbeae8;
--red-ink: #8e2a1f;
--chip: #eef2f5;
--code-bg: #1e2a35;
--code-ink: #c8d6e0;
--code-key: #7e93a3;
--scrim: rgba(20, 28, 36, 0.38);
--shadow-nav: 0 18px 40px rgba(16, 26, 36, 0.14);
--shadow-pop: 0 10px 28px rgba(16, 26, 36, 0.18), 0 1px 2px rgba(16, 26, 36, 0.12);
--sans: "IBM Plex Sans", "Plex Sans Fallback", "Helvetica Neue", Arial, sans-serif;
--mono: "IBM Plex Mono", "Plex Mono Fallback", ui-monospace, SFMono-Regular, Menlo, monospace;
--sp-1: 4px;
--sp-2: 8px;
--sp-2h: 10px;
--sp-3: 12px;
--sp-3h: 14px;
--sp-4: 16px;
--sp-4h: 18px;
--sp-5: 20px;
--sp-6: 24px;
--h-dial: 28px;
--r-1: 4px;
--r-2: 6px;
--r-3: 8px;
--r-4: 10px;
--r-pill: 999px;
--t-micro: 10px;
--t-micro-h: 10.5px;
--t-tiny: 11px;
--t-tiny-h: 11.5px;
--t-small: 12px;
--t-small-h: 12.5px;
--t-body-sm: 13px;
--t-body: 14px;
--t-lead: 16px;
--t-title: 18px;
--t-h1: 21px;
--t-display: 24px;
--t-field: 13px;
--lh-tight: 1.25;
--lh-heading: 1.3;
--lh-prose: 1.45;
--lh-code: 1.6;
--d-quick: 120ms;
--d-fade: 130ms;
--d-hover: 140ms;
--d-pop: 150ms;
--d-rise: 160ms;
--d-slide: 170ms;
--d-bar: 0.4s;
--d-pulse: 2.4s;
--e-in-out: ease;
--e-out: ease-out;
--e-pop: cubic-bezier(0.2, 0.9, 0.3, 1);
--e-linear: linear;
--measure: 68ch;
--topbar-h: 56px;
--rail-w: 56px;
--side-w: 236px;
}
@font-face {
font-family: "Plex Sans Fallback";
src: local("Helvetica Neue"), local("Arial"), local("Liberation Sans");
size-adjust: 100.6%;
ascent-override: 103%;
descent-override: 27%;
line-gap-override: 0%;
}
@font-face {
font-family: "Plex Mono Fallback";
src: local("Menlo"), local("Consolas"), local("DejaVu Sans Mono");
size-adjust: 99.4%;
ascent-override: 103%;
descent-override: 27%;
line-gap-override: 0%;
}
:root[data-theme="dark"] {
--bg: #0f151a;
--panel: #161f27;
--soft: #1b242c;
--line: #26333d;
--line-soft: #202b34;
--ink: #e7eef3;
--ink-2: #b7c6d1;
--muted: #8a9dab;
--accent: #f0a43c;
--accent-ink: #13202b;
--accent-edge: #c97f14;
--blue: #86aec7;
--blue-soft: #1c2b37;
--blue-ink: #a9c8db;
--green: #4fb185;
--green-soft: #16261f;
--green-ink: #7fcfa8;
--amber-soft: #2e2310;
--amber-ink: #e9bc72;
--red: #e08074;
--red-soft: #2b1714;
--red-ink: #f0a79c;
--chip: #212c35;
--code-bg: #0a1015;
--code-ink: #c8d6e0;
--code-key: #7e93a3;
--scrim: rgba(0, 0, 0, 0.5);
--shadow-nav: 0 18px 40px rgba(0, 0, 0, 0.42);
--shadow-pop: 0 10px 28px rgba(0, 0, 0, 0.5), 0 1px 2px rgba(0, 0, 0, 0.4);
}
@media (pointer: coarse) {
:root {
--t-field: 16px;
}
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) {
--bg: #0f151a;
--panel: #161f27;
--soft: #1b242c;
--line: #26333d;
--line-soft: #202b34;
--ink: #e7eef3;
--ink-2: #b7c6d1;
--muted: #8a9dab;
--accent-ink: #13202b;
--blue: #86aec7;
--blue-soft: #1c2b37;
--blue-ink: #a9c8db;
--green: #4fb185;
--green-soft: #16261f;
--green-ink: #7fcfa8;
--amber-soft: #2e2310;
--amber-ink: #e9bc72;
--red: #e08074;
--red-soft: #2b1714;
--red-ink: #f0a79c;
--chip: #212c35;
--code-bg: #0a1015;
--scrim: rgba(0, 0, 0, 0.5);
--shadow-nav: 0 18px 40px rgba(0, 0, 0, 0.42);
--shadow-pop: 0 10px 28px rgba(0, 0, 0, 0.5), 0 1px 2px rgba(0, 0, 0, 0.4);
}
}
* {
box-sizing: border-box;
}
[hidden] {
display: none !important;
}
html,
body {
margin: 0;
}
body {
font-family: var(--sans);
font-size: var(--t-body);
line-height: var(--lh-prose);
color: var(--ink);
background: var(--bg);
-webkit-font-smoothing: antialiased;
}
a {
color: var(--blue);
text-decoration: none;
}
a:hover {
color: var(--ink);
}
button,
input,
select {
font: inherit;
color: inherit;
}
table {
border-collapse: collapse;
width: 100%;
font-variant-numeric: tabular-nums;
}
:focus-visible {
outline: 2px solid var(--blue);
outline-offset: 2px;
}
.only-narrow {
display: none;
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0 0 0 0);
white-space: nowrap;
border: 0;
}
@keyframes pulse {
0%,
100% {
opacity: 1;
}
50% {
opacity: 0.3;
}
}
@media (prefers-reduced-motion: reduce) {
.pill.on i {
animation: none;
}
* {
animation-duration: 0.001ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.001ms !important;
}
}
#app {
display: flex;
flex-direction: column;
height: 100dvh;
max-height: 100dvh;
overflow: hidden;
}
.topbar {
position: sticky;
top: 0;
z-index: 30;
flex-shrink: 0;
height: var(--topbar-h);
display: flex;
align-items: center;
gap: var(--sp-3);
padding: 0 14px;
background: var(--panel);
border-bottom: 1px solid var(--line);
}
.hamburger,
.icon-button {
transition: background var(--d-fade) var(--e-in-out), color var(--d-fade) var(--e-in-out),
border-color var(--d-fade) var(--e-in-out);
display: inline-flex;
align-items: center;
justify-content: center;
width: 34px;
height: 34px;
flex-shrink: 0;
border: 1px solid var(--line);
border-radius: 7px;
background: var(--panel);
color: var(--ink-2);
cursor: pointer;
}
.hamburger:hover,
.icon-button:hover {
background: var(--soft);
color: var(--ink);
}
.brand {
display: flex;
align-items: center;
gap: 9px;
flex-shrink: 0;
color: var(--ink);
background: none;
border: 0;
padding: 0;
cursor: pointer;
}
.brand .logo {
width: 26px;
height: 26px;
border-radius: var(--r-2);
display: block;
}
.wordmark {
font-weight: 600;
letter-spacing: -0.01em;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.divider-v {
width: 1px;
height: 22px;
background: var(--line);
flex-shrink: 0;
}
.page-title {
font-weight: 500;
color: var(--ink-2);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
min-width: 0;
}
.spacer {
flex-grow: 1;
}
.search-launcher {
transition: border-color var(--d-fade) var(--e-in-out), color var(--d-fade) var(--e-in-out),
background var(--d-fade) var(--e-in-out);
display: flex;
align-items: center;
gap: 9px;
height: 34px;
padding: 0 var(--sp-2) 0 var(--sp-3);
border: 1px solid var(--line);
border-radius: var(--r-3);
background: var(--soft);
color: var(--muted);
flex: 0 1 320px;
min-width: 0;
cursor: pointer;
}
.search-launcher:hover {
border-color: var(--blue);
color: var(--ink);
}
.search-launcher .what {
font-size: var(--t-body-sm);
flex-grow: 1;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-align: left;
}
.key-hint {
font-family: var(--mono);
font-size: var(--t-micro);
padding: 2px 6px;
border-radius: var(--r-1);
background: var(--panel);
border: 1px solid var(--line);
flex-shrink: 0;
}
.body {
display: flex;
align-items: stretch;
flex-grow: 1;
min-height: 0;
position: relative;
}
main {
flex-grow: 1;
min-width: 0;
min-height: 0;
display: flex;
flex-direction: column;
overflow: hidden;
}
.rail {
width: var(--rail-w);
flex-shrink: 0;
background: var(--panel);
border-right: 1px solid var(--line);
display: flex;
flex-direction: column;
align-items: center;
gap: var(--sp-1);
padding: var(--sp-3) 0;
overflow-y: auto;
}
.rail-group {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--sp-1);
}
.rail-rule {
width: 20px;
height: 1px;
background: var(--line);
margin: 5px 0;
}
.rail-item {
transition: background var(--d-fade) var(--e-in-out), color var(--d-fade) var(--e-in-out);
position: relative;
display: flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: var(--r-3);
flex-shrink: 0;
border: 0;
background: none;
color: var(--ink-2);
cursor: pointer;
}
.rail-item:hover {
background: var(--soft);
color: var(--ink);
}
.rail-item[aria-current="page"] {
background: var(--blue-soft);
color: var(--ink);
}
.live-dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--green);
display: inline-block;
flex-shrink: 0;
animation: pulse var(--d-pulse) ease-in-out infinite;
}
.sidebar {
width: var(--side-w);
flex-shrink: 0;
background: var(--panel);
border-right: 1px solid var(--line);
padding: var(--sp-3) var(--sp-3) var(--sp-4);
display: flex;
flex-direction: column;
gap: var(--sp-2);
overflow-y: auto;
}
.nav-group {
display: flex;
flex-direction: column;
gap: 2px;
}
.nav-group-label {
font: 500 var(--t-micro) var(--mono);
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--muted);
padding: var(--sp-2) var(--sp-3) var(--sp-1);
}
.nav-item {
transition: background var(--d-fade) var(--e-in-out), color var(--d-fade) var(--e-in-out);
display: flex;
align-items: center;
gap: var(--sp-2);
padding: var(--sp-2) var(--sp-3);
border-radius: var(--r-2);
font-weight: 500;
font-size: var(--t-body-sm);
color: var(--ink-2);
border: 0;
background: none;
width: 100%;
text-align: left;
cursor: pointer;
}
.nav-item:hover {
background: var(--soft);
color: var(--ink);
}
.nav-item[aria-current="page"] {
background: var(--blue-soft);
color: var(--ink);
}
.nav-item svg {
width: 16px;
height: 16px;
flex-shrink: 0;
}
.daemon-card {
border: 1px solid var(--line);
border-radius: var(--r-3);
padding: var(--sp-2h) var(--sp-3);
display: flex;
flex-direction: column;
gap: var(--sp-1);
background: var(--soft);
}
.daemon-card .who {
display: flex;
align-items: center;
gap: var(--sp-2);
font-weight: 500;
}
.daemon-card .fact {
font-family: var(--mono);
font-size: var(--t-tiny);
color: var(--muted);
}
.scrim {
display: none;
}
@keyframes rise {
from {
opacity: 0;
transform: translateY(4px);
}
to {
opacity: 1;
transform: none;
}
}
.view > * {
flex-shrink: 0;
}
.view {
animation: rise var(--d-rise) var(--e-out);
padding: var(--sp-5) var(--sp-5) var(--sp-6);
display: flex;
flex-direction: column;
gap: var(--sp-4);
flex-grow: 1;
min-width: 0;
min-height: 0;
overflow-y: auto;
}
.grow {
flex: 1 1 auto;
min-height: 0;
display: flex;
flex-direction: column;
}
.grow > .table-wrap {
flex: 1 1 auto;
min-height: 0;
overflow: auto;
}
.scroller {
display: flex;
flex-direction: column;
gap: var(--sp-4);
min-height: 0;
flex: 1 1 auto;
}
.scroller.grid {
display: grid;
}
.grid.fill {
flex: 1 1 auto;
align-items: stretch;
}
.grid.fill > * {
min-height: 0;
}
.page-head {
display: flex;
flex-direction: column;
gap: var(--sp-1);
min-width: 0;
}
.page-head .line {
display: flex;
align-items: center;
gap: var(--sp-3);
flex-wrap: wrap;
min-width: 0;
}
h1 {
margin: 0;
font-size: var(--t-h1);
font-weight: 600;
letter-spacing: -0.01em;
}
h2 {
margin: 0;
font-size: var(--t-lead);
font-weight: 600;
}
.head {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: var(--sp-4);
flex-wrap: wrap;
}
.titles {
display: flex;
flex-direction: column;
gap: var(--sp-1);
min-width: 0;
}
.subtitle {
margin: 0;
color: var(--muted);
font-size: var(--t-body);
line-height: var(--lh-prose);
text-wrap: pretty;
}
.card .subtitle,
.hero .subtitle {
max-width: 100%;
}
.eyebrow {
font: 500 var(--t-tiny) var(--mono);
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--muted);
}
.card-title {
font-weight: 600;
font-size: var(--t-body);
}
.actions {
display: flex;
gap: var(--sp-2);
flex-wrap: wrap;
align-items: center;
}
.page-head .actions > .button,
.page-head .actions > .button.small {
height: 36px;
}
.rule {
height: 1px;
background: var(--line-soft);
border: 0;
margin: 0;
}
.mono {
font-family: var(--mono);
}
.muted {
color: var(--muted);
}
.card {
background: var(--panel);
border: 1px solid var(--line);
border-radius: var(--r-4);
overflow: hidden;
min-width: 0;
}
.card.pad {
padding: var(--sp-4) var(--sp-4h);
display: flex;
flex-direction: column;
gap: var(--sp-3);
min-height: 0;
}
.card.pad.dense {
padding: var(--sp-3h) var(--sp-4);
gap: var(--sp-2h);
}
.steps-list {
display: flex;
flex-direction: column;
gap: var(--sp-3);
}
.step-row {
display: flex;
gap: var(--sp-3);
min-width: 0;
}
.step-row .n {
font-family: var(--mono);
font-size: var(--t-small);
color: var(--blue);
width: 16px;
flex-shrink: 0;
}
.step-row .what {
display: flex;
flex-direction: column;
gap: var(--sp-1);
min-width: 0;
flex-grow: 1;
}
.step-row .say {
font-size: var(--t-body-sm);
line-height: var(--lh-prose);
text-wrap: pretty;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: var(--sp-4);
align-items: start;
min-height: 0;
}
.grid.two {
grid-template-columns: minmax(320px, 1fr) minmax(0, 1.1fr);
align-items: stretch;
}
.grid.three {
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
align-items: stretch;
}
.grid.grow > * {
min-height: 0;
}
.strip {
display: flex;
flex-wrap: wrap;
gap: var(--sp-3);
}
.stat {
flex: 1 1 160px;
min-width: 0;
background: var(--panel);
border: 1px solid var(--line);
border-radius: var(--r-4);
padding: var(--sp-3h) var(--sp-4);
display: flex;
flex-direction: column;
gap: var(--sp-1);
}
.stat .value {
font-family: var(--mono);
font-size: var(--t-display);
font-weight: 500;
line-height: var(--lh-tight);
font-variant-numeric: tabular-nums;
}
.stat .sub {
color: var(--muted);
font-size: var(--t-small);
line-height: var(--lh-prose);
}
.stat.ringed {
border-color: var(--accent);
}
.rows {
display: flex;
flex-direction: column;
gap: var(--sp-2);
}
.rows.tight {
gap: 2px;
}
.gone-row {
display: flex;
align-items: center;
gap: var(--sp-2);
min-width: 0;
}
.kv.step {
align-items: center;
flex-wrap: nowrap;
gap: var(--sp-2h);
}
.kv.step .card-title {
width: 62px;
flex-shrink: 0;
}
.kv {
display: flex;
align-items: baseline;
gap: var(--sp-3);
flex-wrap: wrap;
}
.kv .k {
font: 500 var(--t-tiny) var(--mono);
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--muted);
width: 120px;
flex-shrink: 0;
}
.kv .v {
font-family: var(--mono);
font-size: var(--t-body-sm);
min-width: 0;
overflow-wrap: anywhere;
}
.kv.pair {
display: grid;
grid-template-columns: 120px minmax(0, 1fr);
align-items: baseline;
}
.kv.pair .k {
width: auto;
}
.button {
transition: background var(--d-fade) var(--e-in-out), color var(--d-fade) var(--e-in-out),
border-color var(--d-fade) var(--e-in-out);
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--sp-2);
height: 36px;
padding: 0 var(--sp-4);
border-radius: 7px;
border: 1px solid transparent;
background: var(--accent);
color: var(--accent-ink);
font-weight: 600;
font-size: var(--t-body-sm);
cursor: pointer;
white-space: nowrap;
}
.button:hover {
filter: brightness(1.15);
}
.button svg {
width: 16px;
height: 16px;
flex-shrink: 0;
}
.button.secondary {
background: var(--panel);
border-color: var(--line);
color: var(--ink);
font-weight: 500;
}
.button.secondary:hover {
border-color: var(--blue);
color: var(--blue-ink);
background: var(--panel);
}
.button.secondary[aria-pressed="true"] {
background: var(--blue-soft);
border-color: var(--blue);
color: var(--blue-ink);
}
.button.ghost {
background: none;
border-color: transparent;
color: var(--muted);
font-weight: 500;
}
.button.ghost:hover {
color: var(--ink);
background: var(--soft);
}
.button.dim {
opacity: 0.75;
}
.button.dim:hover {
opacity: 1;
filter: brightness(1.08);
}
.button.danger {
background: var(--panel);
border-color: var(--amber-ink);
color: var(--amber-ink);
font-weight: 500;
}
.button.danger:hover {
background: var(--amber-soft);
border-color: var(--amber-ink);
color: var(--amber-ink);
filter: none;
}
.button.small {
height: 32px;
padding: 0 var(--sp-3);
font-size: var(--t-body-sm);
}
.button[disabled] {
opacity: 0.55;
cursor: default;
pointer-events: none;
}
.chip {
transition: background var(--d-fade) var(--e-in-out), color var(--d-fade) var(--e-in-out),
border-color var(--d-fade) var(--e-in-out);
display: inline-flex;
align-items: center;
height: 28px;
padding: 0 var(--sp-3);
border-radius: var(--r-pill);
border: 1px solid var(--line);
background: var(--panel);
color: var(--ink-2);
font-size: var(--t-body-sm);
cursor: pointer;
white-space: nowrap;
}
.chip:hover {
border-color: var(--blue);
color: var(--ink);
}
.chip[aria-pressed="true"] {
background: var(--blue-soft);
border-color: var(--blue);
color: var(--blue-ink);
font-weight: 500;
}
.chip.static {
cursor: default;
}
.chip.static:hover {
border-color: var(--line);
color: var(--ink-2);
}
.pill {
display: inline-flex;
align-items: center;
gap: var(--sp-2);
font-family: var(--mono);
font-size: var(--t-tiny);
line-height: var(--lh-prose);
padding: var(--sp-1) var(--sp-3);
border-radius: var(--r-pill);
border: 1px solid var(--line);
background: var(--panel);
color: var(--ink-2);
white-space: nowrap;
}
.pills {
display: inline-flex;
flex-wrap: wrap;
gap: var(--sp-2);
}
.pill i,
.pill .dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: currentColor;
flex-shrink: 0;
}
.pill.on {
border-color: var(--green);
background: var(--green-soft);
color: var(--green-ink);
}
.pill.on i,
.pill.good i,
.pill.good .dot,
.dot.good {
animation: pulse var(--d-pulse) ease-in-out infinite;
}
.pill.good {
border-color: var(--green);
background: var(--green-soft);
color: var(--green-ink);
}
.pill.warn {
border-color: var(--amber-ink);
background: var(--amber-soft);
color: var(--amber-ink);
}
.pill.bad {
border-color: var(--red);
background: var(--red-soft);
color: var(--red-ink);
}
.tag {
display: inline-flex;
align-items: center;
font-family: var(--mono);
font-size: var(--t-tiny);
padding: 2px var(--sp-2);
border-radius: var(--r-1);
background: var(--chip);
color: var(--ink-2);
}
.dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: currentColor;
display: inline-block;
flex-shrink: 0;
}
.filters {
display: flex;
gap: var(--sp-2);
align-items: center;
flex-wrap: wrap;
flex-shrink: 0;
}
@media (max-width: 599px) {
.search-band .filters {
flex-wrap: nowrap;
overflow-x: auto;
overscroll-behavior-x: contain;
scrollbar-width: none;
padding-bottom: 2px;
}
.search-band .filters::-webkit-scrollbar {
display: none;
}
.search-band .filters > * {
flex: 0 0 auto;
}
.search-band .dial-note {
display: none;
}
}
.field {
transition: border-color var(--d-fade) var(--e-in-out);
display: flex;
align-items: center;
gap: var(--sp-2);
height: 34px;
padding: 0 var(--sp-3);
border: 1px solid var(--line);
border-radius: var(--r-3);
background: var(--panel);
min-width: 0;
}
.field.tall {
height: 40px;
padding: 0 14px;
gap: 10px;
}
.field:focus-within {
border-color: var(--blue);
}
.field .prefix {
font-family: var(--mono);
color: var(--muted);
flex-shrink: 0;
}
.field svg {
width: 15px;
height: 15px;
flex-shrink: 0;
color: var(--muted);
}
.field input,
.field textarea {
border: 0;
outline: none;
background: transparent;
flex-grow: 1;
min-width: 0;
width: 100%;
font-family: var(--mono);
font-size: var(--t-field);
}
.field.area {
height: auto;
min-height: 40px;
align-items: flex-start;
padding-top: var(--sp-2);
padding-bottom: var(--sp-2);
}
.field.area textarea {
resize: vertical;
line-height: 1.5;
min-height: calc(1.5em * 2);
}
.field.area .prefix {
line-height: 1.5;
}
select.chip,
select.field {
appearance: none;
height: 40px;
min-width: 140px;
padding: 0 34px 0 var(--sp-3h);
border: 1px solid var(--line);
border-radius: var(--r-3);
background-color: var(--panel);
background-image: linear-gradient(45deg, transparent 50%, currentColor 50%),
linear-gradient(135deg, currentColor 50%, transparent 50%);
background-position: right 18px center, right 13px center;
background-size: 5px 5px, 5px 5px;
background-repeat: no-repeat;
color: var(--ink);
font: inherit;
font-size: var(--t-body-sm);
cursor: pointer;
transition: border-color var(--d-hover) var(--e-in-out);
}
select.chip:hover,
select.field:hover {
border-color: var(--blue);
}
select.chip:focus-visible,
select.field:focus-visible {
border-color: var(--blue);
}
.copyfield {
display: flex;
align-items: center;
gap: var(--sp-2);
background: var(--bg);
border: 1px solid var(--line);
border-radius: 7px;
height: 36px;
padding: 0 4px 0 var(--sp-3);
min-width: 0;
}
.copyfield .copy {
opacity: 1;
width: 28px;
height: 28px;
}
.copyfield .button {
height: 28px;
padding: 0 var(--sp-2h);
}
.copyfield.worded .copy {
width: auto;
padding: 0 var(--sp-3);
}
.stanzas .copyfield.worded {
height: auto;
min-height: 36px;
padding-block: 4px;
align-items: center;
}
.stanzas .copyfield.worded .text {
overflow-x: visible;
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.copyfield .actions {
gap: 4px;
}
.copyfield .text {
font-family: var(--mono);
font-size: var(--t-small);
color: var(--ink-2);
flex-grow: 1;
min-width: 0;
overflow-x: auto;
white-space: pre;
}
.copyfield .button {
flex-shrink: 0;
}
.copy {
transition: opacity var(--d-quick) var(--e-in-out),
background var(--d-fade) var(--e-in-out), border-color var(--d-fade) var(--e-in-out),
color var(--d-fade) var(--e-in-out);
opacity: 0;
width: 26px;
height: 26px;
padding: 0;
flex-shrink: 0;
}
.code-block .copy,
.copy.block {
width: 28px;
height: 28px;
}
.copyfield:hover .copy,
.copyfield:focus-within .copy,
.code-block:hover .copy,
.code-block:focus-within .copy,
.copy:focus-visible {
opacity: 1;
}
.copy.done {
opacity: 1;
width: auto;
padding: 0 var(--sp-2);
border-color: var(--green);
background: var(--green-soft);
color: var(--green-ink);
}
.copy svg {
width: 14px;
height: 14px;
}
.code-block {
position: relative;
min-width: 0;
}
.code-block .copy {
position: absolute;
top: var(--sp-2);
right: var(--sp-2);
}
.note {
font-size: var(--t-body-sm);
line-height: var(--lh-prose);
color: var(--muted);
min-height: 18px;
}
.note:empty {
display: none;
}
.note.bad {
color: var(--red-ink);
}
.empty {
background: var(--panel);
border: 1px dashed var(--line);
border-radius: var(--r-4);
padding: var(--sp-5);
color: var(--muted);
text-wrap: pretty;
}
.error {
display: flex;
align-items: flex-start;
gap: 10px;
background: var(--red-soft);
border: 1px solid var(--red);
border-radius: var(--r-4);
padding: 14px var(--sp-4);
color: var(--red-ink);
text-wrap: pretty;
}
.error svg {
width: 17px;
height: 17px;
flex-shrink: 0;
margin-top: 1px;
}
.error .what {
min-width: 0;
overflow-wrap: anywhere;
}
.table-card {
display: flex;
flex-direction: column;
min-height: 168px;
max-height: 76dvh;
}
.table-card > .table-wrap {
flex: 1 1 auto;
min-height: 0;
}
.table-wrap {
overflow: auto;
min-width: 0;
}
th {
position: sticky;
top: 0;
z-index: 2;
text-align: left;
font: 500 var(--t-tiny) var(--mono);
line-height: var(--lh-code);
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--muted);
padding: var(--sp-2h) var(--sp-3h);
border-bottom: 1px solid var(--line);
background: var(--panel);
white-space: nowrap;
}
thead th {
box-shadow: inset 0 -1px 0 var(--line);
border-bottom: 0;
}
td {
padding: var(--sp-3) var(--sp-3h);
border-bottom: 1px solid var(--line-soft);
vertical-align: top;
line-height: var(--lh-code);
}
tr:last-child td {
border-bottom: 0;
}
tbody tr {
transition: background var(--d-quick) var(--e-in-out);
}
tbody tr:hover {
background: var(--soft);
}
th .sort {
display: inline-flex;
align-items: center;
gap: var(--sp-1);
border: 0;
padding: 0;
background: none;
font: inherit;
letter-spacing: inherit;
text-transform: inherit;
color: inherit;
cursor: pointer;
transition: color var(--d-hover) var(--e-in-out);
}
th .sort:hover {
color: var(--ink);
}
th .arrow {
display: inline-block;
width: 9px;
color: var(--accent-edge);
}
.one-line {
display: block;
max-width: 46ch;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.one-line.tail {
direction: rtl;
text-align: left;
}
.one-line.tail > bdi {
unicode-bidi: isolate;
}
th.num,
td.num {
text-align: right;
font-family: var(--mono);
}
td.path {
font-family: var(--mono);
font-size: var(--t-small);
overflow-wrap: anywhere;
}
td.meta {
font-family: var(--mono);
font-size: var(--t-small);
color: var(--muted);
}
.name {
font-weight: 600;
}
.gone {
color: var(--red-ink);
}
.meta {
font-family: var(--mono);
font-size: var(--t-tiny);
color: var(--muted);
overflow-wrap: anywhere;
}
.meta.one-line,
.name.one-line {
max-width: 38ch;
overflow-wrap: normal;
}
.table-foot {
flex-shrink: 0;
border-top: 1px solid var(--line);
background: var(--soft);
padding: var(--sp-2h) var(--sp-3h);
display: flex;
align-items: center;
gap: var(--sp-3);
flex-wrap: wrap;
}
.table-foot .chip {
height: 30px;
min-width: 34px;
justify-content: center;
padding: 0 var(--sp-2h);
border-radius: var(--r-2);
font-family: var(--mono);
}
.table-foot .button.ghost {
height: 30px;
padding: 0 var(--sp-3);
border: 1px solid var(--line);
border-radius: var(--r-2);
background: var(--panel);
}
.table-foot .button.ghost:hover:not([disabled]) {
border-color: var(--blue);
color: var(--blue-ink);
}
.table-foot .button.ghost[disabled] {
border-color: var(--line-soft);
}
.forget {
transition: color var(--d-quick) var(--e-in-out);
border: 0;
background: none;
color: var(--amber-ink);
font: inherit;
font-size: var(--t-body-sm);
cursor: pointer;
padding: 0;
}
.forget:hover {
color: var(--red-ink);
text-decoration: underline;
}
.forget[disabled] {
opacity: 0.5;
pointer-events: none;
}
pre.code {
margin: 0;
background: var(--code-bg);
color: var(--code-ink);
border-radius: var(--r-3);
padding: var(--sp-4);
font-family: var(--mono);
font-size: var(--t-small);
line-height: var(--lh-code);
overflow: auto;
white-space: pre;
mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent);
scrollbar-width: thin;
}
pre.code::-webkit-scrollbar {
height: 8px;
}
pre.code::-webkit-scrollbar-thumb {
background: var(--line);
border-radius: 4px;
}
.log {
background: var(--code-bg);
border-radius: var(--r-4);
padding: var(--sp-4) 18px;
display: flex;
flex-direction: column;
gap: 5px;
font-family: var(--mono);
font-size: var(--t-small);
color: var(--code-ink);
flex: 1 1 auto;
min-height: 120px;
max-height: 340px;
overflow-y: auto;
}
.scroller > .picker,
.scroller > .card {
flex-shrink: 0;
}
.log .line {
display: flex;
gap: 10px;
}
.log .key {
color: var(--code-key);
flex-shrink: 0;
width: 68px;
text-align: right;
}
.log .outcome {
flex-shrink: 0;
width: 76px;
color: var(--muted);
}
.log .line.indexing .outcome {
color: var(--accent-edge);
}
.log .line.unchanged,
.log .line.skipped {
opacity: 0.62;
}
.log .line.removed .outcome {
color: var(--red);
}
.log .what {
min-width: 0;
overflow-wrap: anywhere;
}
.bar {
height: var(--sp-2);
border-radius: var(--r-1);
background: var(--chip);
overflow: hidden;
}
.bar > span {
display: block;
height: 100%;
background: var(--accent);
border-radius: var(--r-1);
transition: width var(--d-bar) var(--e-linear);
}
.feed {
font-family: var(--mono);
font-size: var(--t-small);
display: flex;
flex-direction: column;
gap: var(--sp-2);
color: var(--ink-2);
flex-grow: 1;
min-height: 0;
max-height: 232px;
overflow-y: auto;
}
.feed .row {
display: flex;
gap: 10px;
}
.feed .at {
color: var(--muted);
width: 54px;
flex-shrink: 0;
}
.feed .what {
min-width: 0;
max-width: 100%;
}
.picker {
display: flex;
flex-direction: column;
}
.picker {
overflow: hidden;
}
.picker .crumbs {
display: flex;
align-items: center;
gap: var(--sp-2h);
padding: var(--sp-3) var(--sp-3h);
border-bottom: 1px solid var(--line);
background: var(--soft);
flex-wrap: wrap;
}
.picker .where {
font-family: var(--mono);
font-size: var(--t-body-sm);
font-weight: 600;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.picker > .subtitle {
padding: var(--sp-3) var(--sp-3h) 0;
}
.picker .entries {
max-height: 320px;
min-height: 84px;
overflow-y: auto;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
}
.picker .entry {
transition: background var(--d-quick) var(--e-in-out);
display: flex;
align-items: center;
gap: var(--sp-2h);
min-width: 0;
padding: var(--sp-2) var(--sp-3h);
border: 0;
border-bottom: 1px solid var(--line-soft);
background: none;
text-align: left;
cursor: pointer;
color: var(--ink);
}
.picker .entry:hover {
background: var(--soft);
}
.picker .entry.inert,
.picker .entry.inert:hover {
background: none;
color: var(--muted);
cursor: default;
opacity: 0.6;
}
.picker .entry svg {
width: 16px;
height: 16px;
flex-shrink: 0;
color: var(--muted);
}
.picker .entry .name {
font-family: var(--mono);
font-size: var(--t-body-sm);
font-weight: 400;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.picker .entry-row {
display: flex;
align-items: center;
gap: var(--sp-2);
min-width: 0;
padding-left: var(--sp-3);
border-bottom: 1px solid var(--line-soft);
}
.picker .entry-row .entry {
flex: 1;
min-width: 0;
border-bottom: 0;
}
.picker .tick {
flex-shrink: 0;
width: 15px;
height: 15px;
accent-color: var(--blue);
cursor: pointer;
}
.cards {
display: flex;
flex-direction: column;
gap: var(--sp-3);
}
.run-card .bar {
margin: var(--sp-2h) 0;
}
.run-card .log {
max-height: 260px;
margin-top: var(--sp-2h);
}
.run-card .filters {
align-items: center;
}
.queue .queue-row {
display: flex;
align-items: center;
gap: var(--sp-2h);
min-width: 0;
padding: var(--sp-2) 0;
border-bottom: 1px solid var(--line-soft);
}
.queue .queue-row:last-child {
border-bottom: 0;
}
.queue .queue-row .key {
font-family: var(--mono);
font-size: var(--t-body-sm);
color: var(--muted);
min-width: 1.5rem;
}
.queue .queue-row .name {
font-family: var(--mono);
font-size: var(--t-body-sm);
font-weight: 600;
}
.settings {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: var(--sp-3);
margin-top: var(--sp-2h);
}
.settings .setting .note {
margin-top: var(--sp-1);
}
.search-band {
position: sticky;
top: 0;
z-index: 5;
padding: 20px var(--sp-5) var(--sp-4);
flex-shrink: 0;
border-bottom: 1px solid var(--line);
background: var(--panel);
display: flex;
flex-direction: column;
gap: var(--sp-3);
}
.shape-hint {
display: flex;
align-items: center;
gap: var(--sp-2);
font-family: var(--mono);
font-size: var(--t-tiny-h);
color: var(--muted);
}
.shape-hint .dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--blue);
flex-shrink: 0;
}
.search-field {
display: flex;
align-items: center;
gap: var(--sp-3);
min-height: 46px;
padding: 0 var(--sp-4);
border: 1.5px solid var(--blue);
border-radius: var(--r-4);
background: var(--panel);
}
.search-field svg {
width: 18px;
height: 18px;
flex-shrink: 0;
color: var(--blue);
}
.search-field input {
flex-grow: 1;
font-size: var(--t-field);
border: 0;
outline: none;
background: transparent;
min-width: 0;
}
.search-meta {
font-family: var(--mono);
font-size: var(--t-small);
color: var(--muted);
white-space: nowrap;
}
.results {
padding: 18px var(--sp-5) var(--sp-6);
display: flex;
flex-direction: column;
gap: var(--sp-3);
min-width: 0;
min-height: 0;
overflow-y: auto;
flex-grow: 1;
}
.hit {
transition: border-color var(--d-fade) var(--e-in-out), box-shadow var(--d-fade) var(--e-in-out);
background: var(--panel);
border: 1px solid var(--line);
border-radius: var(--r-4);
padding: 14px var(--sp-4);
display: flex;
flex-direction: column;
gap: 10px;
min-width: 0;
}
.hit:hover {
border-color: var(--blue);
box-shadow: var(--shadow-pop);
}
.hit .where {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
font-family: var(--mono);
}
.hit .where .file {
font-weight: 500;
overflow-wrap: anywhere;
}
.hit .where .lines,
.hit .where .from {
font-size: var(--t-tiny);
color: var(--muted);
}
.hit .preview {
display: block;
max-width: 100%;
max-height: 260px;
width: auto;
border-radius: var(--r-3);
border: 1px solid var(--line-soft);
background: var(--soft);
object-fit: contain;
}
.hit pre {
margin: 0;
font-family: var(--mono);
font-size: var(--t-small);
line-height: var(--lh-code);
color: var(--ink-2);
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.welcome {
min-height: 100dvh;
overflow-y: auto;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: var(--sp-5);
padding: 48px 20px;
background: var(--bg);
}
.welcome > * {
flex-shrink: 0;
}
.welcome .lockup {
display: flex;
align-items: center;
gap: var(--sp-3);
}
.welcome .lockup .logo {
width: 38px;
height: 38px;
border-radius: var(--r-3);
display: block;
}
.welcome .lockup .name {
font-size: var(--t-display);
font-weight: 600;
letter-spacing: -0.01em;
}
.welcome .lockup .ver {
font-family: var(--mono);
font-size: var(--t-small);
color: var(--muted);
padding-top: 5px;
}
.hero-title {
font-size: var(--t-title);
font-weight: 600;
letter-spacing: 0;
}
.welcome .hero {
width: 100%;
max-width: 640px;
background: var(--panel);
border: 1px solid var(--line);
border-radius: 12px;
padding: 26px 28px;
display: flex;
flex-direction: column;
gap: 18px;
}
.welcome .steps {
width: 100%;
max-width: 640px;
display: flex;
flex-wrap: wrap;
gap: var(--sp-3);
}
.welcome .step {
flex: 1 1 180px;
min-width: 0;
background: var(--panel);
border: 1px solid var(--line);
border-radius: var(--r-4);
padding: 14px var(--sp-4);
display: flex;
flex-direction: column;
gap: 5px;
}
.welcome .step .what {
color: var(--muted);
font-size: var(--t-body-sm);
text-wrap: pretty;
}
.welcome .foot {
font-family: var(--mono);
font-size: var(--t-tiny);
color: var(--muted);
text-align: center;
}
.install-panel {
width: 100%;
max-width: 640px;
}
.tip {
position: fixed;
top: 0;
left: 0;
z-index: 80;
max-width: 320px;
width: max-content;
padding: 9px 11px;
border-radius: var(--r-3);
background: var(--panel);
border: 1px solid var(--line);
box-shadow: var(--shadow-pop);
color: var(--ink);
font-family: var(--mono);
font-size: var(--t-small);
line-height: var(--lh-code);
white-space: normal;
overflow-wrap: anywhere;
opacity: 0;
transform: scale(0.96);
transition: opacity var(--d-fade) var(--e-in-out), transform var(--d-pop) var(--e-pop);
pointer-events: none;
}
.tip[data-open="true"] {
opacity: 1;
transform: none;
}
.tip .tip-head {
display: flex;
align-items: center;
gap: var(--sp-2);
font-weight: 500;
color: var(--ink);
}
.tip .tip-head i {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--accent-edge);
flex-shrink: 0;
}
.tip .tip-row {
display: flex;
gap: var(--sp-3);
margin-top: var(--sp-1);
font-size: var(--t-tiny);
}
.tip .tip-row .k {
color: var(--muted);
width: 52px;
flex-shrink: 0;
}
.tip .tip-row .v {
color: var(--ink-2);
min-width: 0;
overflow-wrap: anywhere;
}
.offscreen {
position: fixed;
opacity: 0;
pointer-events: none;
}
.w-stores {
min-width: 640px;
}
.w-files {
min-width: 680px;
}
.w-coverage {
min-width: 760px;
}
.w-models {
min-width: 480px;
}
td.why .copyfield {
max-width: 30rem;
}
.field.wide {
width: 280px;
max-width: 100%;
}
.field.grow {
flex: 1 1 240px;
max-width: 420px;
}
.field.full {
width: 100%;
}
.tag.wrapped {
margin: 0 var(--sp-1) var(--sp-1) 0;
}
.stat.fact {
flex: 1 1 230px;
}
.fact-value {
font-family: var(--mono);
font-size: var(--t-body);
line-height: var(--lh-code);
font-variant-numeric: tabular-nums;
}
.pct {
font-family: var(--mono);
font-size: var(--t-h1);
font-weight: 500;
font-variant-numeric: tabular-nums;
}
.search-page {
display: flex;
flex-direction: column;
min-height: 100%;
min-width: 0;
}
.two-stage {
container-type: inline-size;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(360px, 1fr));
align-items: stretch;
gap: 0;
flex-grow: 1;
min-height: 0;
}
.locate-col {
display: flex;
flex-direction: column;
min-width: 0;
min-height: 0;
}
.locate-list {
gap: var(--sp-3);
}
.locate-group {
display: flex;
flex-direction: column;
background: var(--panel);
border: 1px solid var(--line);
border-radius: var(--r-4);
overflow: hidden;
min-width: 0;
flex-shrink: 0;
}
.locate-file {
display: flex;
align-items: center;
gap: var(--sp-2h);
flex-wrap: wrap;
padding: var(--sp-2h) var(--sp-3h);
border-bottom: 1px solid var(--line-soft);
background: var(--soft);
font-family: var(--mono);
font-size: var(--t-small-h);
font-weight: 500;
overflow-wrap: anywhere;
}
.locate-file .from {
font-size: var(--t-tiny);
font-weight: 400;
color: var(--muted);
}
.locate-file .span-summary {
font-family: var(--mono);
font-size: var(--t-tiny);
font-weight: 400;
color: var(--muted);
}
.locate-row {
display: flex;
flex-direction: column;
gap: var(--sp-1);
width: 100%;
text-align: left;
padding: var(--sp-2h) var(--sp-3h);
border: 0;
border-bottom: 1px solid var(--line-soft);
background: transparent;
color: var(--ink);
cursor: pointer;
min-width: 0;
transition: background var(--d-fade) var(--e-in-out);
}
.locate-group > .locate-row:last-child {
border-bottom: 0;
}
.locate-row:hover {
background: var(--soft);
}
.locate-row[aria-pressed="true"] {
background: var(--blue-soft);
}
.locate-row.static,
.locate-row.static:hover {
background: transparent;
cursor: default;
}
.row-top {
display: flex;
align-items: center;
gap: 9px;
flex-wrap: wrap;
min-width: 0;
font-family: var(--mono);
font-size: var(--t-small);
}
.locate-row .lines {
color: var(--ink-2);
white-space: nowrap;
}
.locate-row .sym {
color: var(--ink);
overflow-wrap: anywhere;
}
.locate-row .from {
font-size: var(--t-tiny);
color: var(--muted);
}
.locate-excerpt {
display: block;
font-family: var(--mono);
font-size: var(--t-tiny-h);
line-height: var(--lh-code);
color: var(--muted);
min-width: 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.two-stage.one-stage .body-col {
display: none;
}
.two-stage.one-stage {
grid-template-columns: 1fr;
}
.brief-view {
display: flex;
flex-direction: column;
gap: var(--sp-3);
padding: var(--sp-2h) var(--sp-5);
min-width: 0;
}
.brief-span,
.brief-symbol {
display: flex;
flex-direction: column;
gap: var(--sp-1);
padding-bottom: var(--sp-3);
border-bottom: 1px solid var(--line-soft);
min-width: 0;
}
.brief-head {
display: flex;
align-items: baseline;
gap: var(--sp-2);
flex-wrap: wrap;
min-width: 0;
}
.brief-head .path {
font-family: var(--mono);
font-size: var(--t-tiny-h);
color: var(--ink-2);
overflow-wrap: anywhere;
}
.brief-head .sym {
color: var(--ink);
overflow-wrap: anywhere;
}
.brief-lists {
display: inline-flex;
gap: var(--sp-1);
margin-left: auto;
}
.brief-text {
margin: 0;
font-family: var(--mono);
font-size: var(--t-tiny-h);
line-height: var(--lh-code);
color: var(--muted);
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.brief-edge {
display: flex;
gap: var(--sp-2);
font-family: var(--mono);
font-size: var(--t-tiny-h);
min-width: 0;
}
.brief-edge .k {
color: var(--muted);
white-space: nowrap;
}
.brief-edge .v {
color: var(--ink-2);
overflow-wrap: anywhere;
}
.brief-dropped {
font-family: var(--mono);
font-size: var(--t-micro-h);
color: var(--muted);
font-style: italic;
}
.locate-footer {
display: flex;
align-items: center;
gap: var(--sp-2h);
flex-wrap: wrap;
padding: var(--sp-2h) var(--sp-5) var(--sp-5);
font-family: var(--mono);
font-size: var(--t-tiny-h);
color: var(--muted);
flex-shrink: 0;
}
.locate-footer .truncated {
display: inline-flex;
align-items: center;
font-size: var(--t-micro-h);
padding: 2px 7px;
border-radius: var(--r-1);
background: var(--amber-soft);
color: var(--amber-ink);
}
.body-col {
display: flex;
flex-direction: column;
gap: var(--sp-3h);
padding: 18px var(--sp-5);
background: var(--soft);
border-left: 1px solid var(--line);
min-width: 0;
min-height: 0;
overflow-y: auto;
}
@container (max-width: 719px) {
.body-col {
border-left: 0;
border-top: 1px solid var(--line);
}
}
.span-card {
display: flex;
flex-direction: column;
background: var(--panel);
border: 1px solid var(--line);
border-radius: var(--r-4);
overflow: hidden;
flex-shrink: 0;
min-width: 0;
}
.span-head {
display: flex;
align-items: center;
gap: var(--sp-2h);
flex-wrap: wrap;
padding: var(--sp-3h) var(--sp-3h) var(--sp-2h);
font-family: var(--mono);
font-size: var(--t-small);
}
.span-head .path {
font-size: var(--t-small-h);
font-weight: 500;
overflow-wrap: anywhere;
}
.span-head .lines {
color: var(--muted);
}
.span-head .from {
font-size: var(--t-tiny);
color: var(--muted);
}
.span-card .prov-note,
.span-card .note {
margin: 0;
padding: 0 var(--sp-3h) var(--sp-2h);
font-size: var(--t-small-h);
color: var(--muted);
text-wrap: pretty;
}
.span-card .note {
color: var(--amber-ink);
}
.span-card .sig {
margin: 0 var(--sp-3h) var(--sp-3);
padding: 7px 9px;
font-family: var(--mono);
font-size: var(--t-tiny-h);
color: var(--blue-ink);
background: var(--blue-soft);
border-radius: var(--r-2);
white-space: pre;
overflow-x: auto;
}
.span-card .preview {
display: block;
max-width: 100%;
max-height: 320px;
margin: 0 var(--sp-3h) var(--sp-3h);
border-radius: var(--r-3);
border: 1px solid var(--line-soft);
background: var(--soft);
object-fit: contain;
}
.gutter-code {
padding: var(--sp-3) 4px var(--sp-3) 0;
border-top: 1px solid var(--line-soft);
overflow: auto;
min-width: 0;
max-height: 420px;
overscroll-behavior: contain;
}
.code-line {
display: flex;
gap: var(--sp-3);
font-family: var(--mono);
font-size: var(--t-small);
line-height: var(--lh-code);
}
.code-line .ln {
width: 48px;
flex-shrink: 0;
text-align: right;
color: var(--muted);
user-select: none;
}
.code-line .lt {
white-space: pre;
color: var(--ink-2);
}
.span-foot {
display: flex;
align-items: center;
gap: var(--sp-2h);
flex-wrap: wrap;
padding: var(--sp-2h) var(--sp-3h);
border-top: 1px solid var(--line-soft);
background: var(--soft);
}
.body-meta {
font-family: var(--mono);
font-size: var(--t-tiny);
color: var(--muted);
}
.span-foot .quiet {
font-size: var(--t-tiny);
color: var(--muted);
transition: color var(--d-hover) var(--e-in-out);
}
.span-foot .quiet:hover {
color: var(--blue);
}
.around-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--sp-2h);
flex-shrink: 0;
}
.around-head .title {
font-weight: 600;
}
.around-head .sym {
font-family: var(--mono);
}
.around-head .meta {
font-family: var(--mono);
font-size: var(--t-tiny);
color: var(--muted);
}
.ego-panel {
position: relative;
flex: 1 1 340px;
min-height: 340px;
flex-shrink: 0;
background: var(--panel);
border: 1px solid var(--line);
border-radius: var(--r-4);
overflow: hidden;
}
.ego-hint {
position: absolute;
left: var(--sp-3);
bottom: var(--sp-2h);
font-family: var(--mono);
font-size: var(--t-micro);
color: var(--muted);
pointer-events: none;
}
.fresh {
display: inline-flex;
align-items: center;
gap: 6px;
cursor: help;
}
.fresh .word {
font-family: var(--mono);
font-size: var(--t-micro-h);
color: var(--muted);
}
.fresh-dot {
width: 7px;
height: 7px;
border-radius: 50%;
flex-shrink: 0;
}
.fresh-dot.is-fresh {
background: var(--green);
}
.fresh-dot.is-stale {
background: var(--accent);
}
.store-chips {
display: flex;
align-items: center;
gap: var(--sp-2);
flex-wrap: wrap;
}
.filters .rule {
width: 1px;
height: 20px;
background: var(--line);
margin: 0 var(--sp-1);
flex-shrink: 0;
}
.dial {
display: inline-flex;
align-items: center;
gap: 6px;
height: var(--h-dial);
padding: 0 var(--sp-2) 0 11px;
border-radius: var(--r-pill);
border: 1px solid var(--line);
background: var(--panel);
color: var(--ink-2);
font-size: var(--t-body-sm);
}
.dial:focus-within {
border-color: var(--blue);
}
.dial-label {
font-family: var(--mono);
font-size: var(--t-micro-h);
font-weight: 500;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--muted);
}
.dial-prefix,
.dial-value {
font-family: var(--mono);
font-size: var(--t-small-h);
}
.dial-prefix {
color: var(--muted);
}
.dial .unit {
font-family: var(--mono);
font-size: var(--t-tiny);
color: var(--muted);
}
.dial .bare {
border: 0;
outline: none;
background: transparent;
font-family: var(--mono);
font-size: var(--t-small-h);
color: var(--ink);
min-width: 0;
}
.dial .step {
display: inline-flex;
align-items: center;
justify-content: center;
width: 20px;
height: 20px;
border: 0;
border-radius: 5px;
background: var(--soft);
color: var(--ink-2);
font-size: var(--t-body-sm);
line-height: 1;
cursor: pointer;
transition: background var(--d-fade) var(--e-in-out), color var(--d-fade) var(--e-in-out);
}
.dial .step:hover {
background: var(--chip);
color: var(--ink);
}
.dial .segs {
display: flex;
gap: 3px;
}
.dial .seg {
display: inline-flex;
align-items: center;
height: 20px;
padding: 0 9px;
border: 0;
border-radius: var(--r-pill);
background: transparent;
color: var(--ink-2);
font-family: var(--mono);
font-size: var(--t-tiny-h);
cursor: pointer;
transition: background var(--d-fade) var(--e-in-out), color var(--d-fade) var(--e-in-out);
}
.dial .seg:hover {
background: var(--chip);
}
.dial .seg[aria-pressed="true"] {
background: var(--ink);
color: var(--panel);
}
.dial-note {
color: var(--muted);
font-size: var(--t-small-h);
}
.read-out {
display: flex;
flex-direction: column;
gap: var(--sp-3);
min-width: 0;
}
.graph-page {
animation: rise var(--d-rise) var(--e-out);
display: flex;
flex-direction: column;
flex-grow: 1;
min-width: 0;
min-height: 0;
overflow: hidden;
}
.graph-band {
flex-shrink: 0;
padding: var(--sp-5) var(--sp-5) var(--sp-3h);
border-bottom: 1px solid var(--line);
background: var(--panel);
display: flex;
flex-direction: column;
gap: var(--sp-3);
}
.graph-controls {
display: flex;
align-items: center;
gap: var(--sp-3);
flex-wrap: wrap;
min-width: 0;
}
.graph-scope {
display: flex;
align-items: center;
gap: var(--sp-2);
flex: 1 1 220px;
min-width: 0;
padding: 0 var(--sp-3);
height: 36px;
background: var(--panel);
border: 1px solid var(--line);
border-radius: var(--r-3);
color: var(--muted);
transition: border-color var(--d-hover) var(--e-in-out);
}
.graph-scope:focus-within {
border-color: var(--accent-edge);
}
.graph-scope input {
flex: 1;
min-width: 0;
border: 0;
background: none;
font: inherit;
color: var(--ink);
outline: none;
}
.graph-body {
display: grid;
grid-template-columns: minmax(0, 1fr) 300px;
align-items: stretch;
flex-grow: 1;
min-width: 0;
min-height: 0;
}
.graph-frame {
position: relative;
min-width: 0;
background: var(--soft);
overflow: hidden;
}
.graph-stage {
position: absolute;
inset: 0;
}
.graph-canvas {
display: block;
width: 100%;
height: 100%;
cursor: grab;
touch-action: none;
}
.graph-canvas.over-node {
cursor: pointer;
}
.graph-canvas.dragging {
cursor: grabbing;
}
.graph-legend {
position: absolute;
left: var(--sp-4h);
top: var(--sp-4);
display: flex;
flex-direction: column;
gap: var(--sp-2);
padding: var(--sp-2h) var(--sp-3);
background: var(--panel);
border: 1px solid var(--line);
border-radius: var(--r-3);
font-family: var(--mono);
font-size: var(--t-tiny);
line-height: var(--lh-prose);
color: var(--ink-2);
pointer-events: none;
}
.graph-legend .key {
display: inline-flex;
align-items: center;
gap: var(--sp-2);
}
.graph-legend i {
width: 18px;
height: 0;
border-top: 1.4px solid var(--blue);
display: inline-block;
}
.graph-legend .inferred i {
border-top-style: dotted;
}
.graph-legend .ambiguous i {
border-top-style: dashed;
border-top-color: var(--amber-ink);
}
.graph-legend .selected i {
width: 10px;
height: 10px;
border: 1px solid var(--accent-edge);
border-radius: 3px;
background: var(--accent);
}
.graph-count {
position: absolute;
right: var(--sp-4h);
bottom: var(--sp-4);
font-family: var(--mono);
font-size: var(--t-tiny);
color: var(--muted);
pointer-events: none;
}
.graph-rail {
display: flex;
flex-direction: column;
gap: var(--sp-3h);
min-width: 0;
min-height: 0;
padding: var(--sp-4h);
background: var(--panel);
border-left: 1px solid var(--line);
overflow-y: auto;
}
.graph-selected {
display: flex;
flex-direction: column;
gap: var(--sp-1);
}
.stanzas .head {
flex-direction: column;
align-items: flex-start;
gap: var(--sp-1);
}
.stanzas .head .meta {
line-height: var(--lh-prose);
}
.graph-selected .sym {
margin: 0;
font-family: var(--mono);
font-size: var(--t-lead);
font-weight: 500;
line-height: var(--lh-heading);
overflow-wrap: anywhere;
}
.graph-selected .loc {
font-family: var(--mono);
font-size: var(--t-small);
color: var(--muted);
overflow-wrap: anywhere;
}
.graph-selected .chips {
margin-top: var(--sp-2);
}
.chips {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--sp-2);
}
.chip.static.blue {
background: var(--blue-soft);
border-color: var(--blue-soft);
color: var(--blue-ink);
}
.lang-card .lang-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
gap: var(--sp-1) var(--sp-4h);
}
.lang-row {
display: flex;
align-items: baseline;
gap: 9px;
min-width: 0;
padding: 3px 0;
border-bottom: 1px solid var(--line-soft);
}
.lang-row .tick {
display: inline-flex;
justify-content: center;
width: 14px;
flex-shrink: 0;
font-size: var(--t-small);
color: var(--green);
}
.lang-row .name {
font-family: var(--mono);
font-size: var(--t-small-h);
}
.lang-row .graph-mark {
font-family: var(--mono);
font-size: var(--t-micro-h);
color: var(--blue-ink);
background: var(--blue-soft);
border-radius: var(--r-2);
padding: 1px 5px;
flex-shrink: 0;
}
.lang-row .exts {
font-family: var(--mono);
font-size: var(--t-tiny);
color: var(--muted);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.rail-group h3 {
margin: 0 0 var(--sp-2);
font: 500 var(--t-tiny) var(--mono);
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--muted);
}
.rail-list {
margin: 0;
padding: 0;
list-style: none;
display: flex;
flex-direction: column;
gap: var(--sp-2);
}
.rail-list li {
display: flex;
align-items: center;
gap: var(--sp-2);
padding: 7px var(--sp-2h);
border: 1px solid var(--line-soft);
border-radius: var(--r-2);
font-size: var(--t-small);
min-width: 0;
transition: border-color var(--d-hover) var(--e-in-out);
}
.rail-list li:hover {
border-color: var(--blue);
}
.rail-list a {
font-family: var(--mono);
min-width: 0;
overflow-wrap: anywhere;
}
.rail-list .via {
margin-left: auto;
font-size: var(--t-micro);
color: var(--muted);
}
.rail-hint {
font-size: var(--t-body-sm);
line-height: var(--lh-prose);
color: var(--muted);
text-wrap: pretty;
}
.rail-actions {
display: flex;
gap: var(--sp-2);
flex-wrap: wrap;
position: sticky;
bottom: calc(var(--sp-4h) * -1);
margin-top: auto;
padding: var(--sp-3) 0;
background: var(--panel);
box-shadow: 0 -1px 0 var(--line-soft);
}
.conf {
display: inline-flex;
align-items: center;
font-family: var(--mono);
font-size: var(--t-micro);
letter-spacing: 0.04em;
padding: 2px 7px;
border-radius: var(--r-1);
white-space: nowrap;
cursor: help;
}
.conf.extracted,
.conf.resolved {
background: var(--blue-soft);
color: var(--blue-ink);
}
.conf.inferred {
background: var(--chip);
color: var(--ink-2);
}
.conf.ambiguous {
background: var(--amber-soft);
color: var(--amber-ink);
}
.conf-legend {
display: flex;
flex-direction: column;
gap: 6px;
padding: var(--sp-3) 0 0;
border-top: 1px solid var(--line-soft);
}
.legend-chip {
display: flex;
align-items: baseline;
gap: var(--sp-2);
}
.legend-chip .why {
font-size: var(--t-micro);
color: var(--muted);
}
.ambiguous-row {
flex-wrap: wrap;
}
.nested-wrap {
flex-basis: 100%;
}
.rail-list.nested {
padding-left: var(--sp-3);
border-left: 1px solid var(--line-soft);
margin-top: 4px;
}
.link-button {
background: none;
border: none;
padding: 0;
font: inherit;
color: var(--blue);
cursor: pointer;
text-align: left;
}
.link-button.quiet {
color: var(--muted);
font-size: var(--t-tiny);
}
.client-breakdown {
display: flex;
flex-wrap: wrap;
align-items: baseline;
gap: var(--sp-2);
padding: 0 var(--sp-5) var(--sp-3);
font-family: var(--mono);
font-size: var(--t-tiny);
}
.client-breakdown .client-note {
color: var(--muted);
}
.client-breakdown .client {
display: inline-flex;
align-items: baseline;
white-space: nowrap;
}
.client-breakdown .who {
color: var(--ink-2);
}
.client-breakdown .count {
color: var(--muted);
margin-left: 4px;
}
.client-breakdown .sep {
color: var(--muted);
margin-right: var(--sp-2);
}
.notice {
padding: var(--sp-4);
background: var(--soft);
border: 1px solid var(--line);
border-radius: var(--r-4);
font-size: var(--t-body-sm);
line-height: var(--lh-prose);
color: var(--muted);
text-wrap: pretty;
}
.notice .what {
font-weight: 600;
color: var(--ink);
margin-bottom: var(--sp-1);
}
.tabs {
display: flex;
align-items: center;
gap: var(--sp-5);
border-bottom: 1px solid var(--line);
min-width: 0;
overflow-x: auto;
}
.tab {
transition: color var(--d-hover) var(--e-in-out), border-color var(--d-hover) var(--e-in-out);
display: inline-flex;
align-items: center;
gap: var(--sp-2);
padding: var(--sp-2) 0;
border: 0;
border-bottom: 2px solid transparent;
background: none;
color: var(--muted);
font: inherit;
font-weight: 500;
white-space: nowrap;
cursor: pointer;
}
.tab:hover {
color: var(--ink);
}
.tab[aria-pressed="true"] {
color: var(--ink);
border-bottom-color: var(--accent);
}
.tab .count {
font-family: var(--mono);
font-size: var(--t-micro);
padding: 1px var(--sp-2);
border-radius: var(--r-pill);
background: var(--chip);
color: var(--muted);
}
.stanzas {
min-width: 0;
}
.stanza {
display: flex;
flex-direction: column;
gap: var(--sp-2);
min-width: 0;
}
.tool-grid {
display: grid;
grid-template-columns: minmax(0, max-content) minmax(0, 1fr);
column-gap: var(--sp-4);
row-gap: var(--sp-2h);
align-items: baseline;
min-height: 0;
overflow-y: auto;
}
.tool-name {
font-family: var(--mono);
font-size: var(--t-small);
white-space: nowrap;
}
.tool-about {
color: var(--muted);
font-size: var(--t-body-sm);
line-height: var(--lh-prose);
min-width: 0;
text-wrap: pretty;
}
.cost {
display: flex;
flex-direction: column;
gap: var(--sp-1);
background: var(--soft);
border-radius: var(--r-3);
padding: var(--sp-3) var(--sp-3h);
}
.cost-line {
font-family: var(--mono);
font-size: var(--t-small);
font-variant-numeric: tabular-nums;
}
.cost-note {
font-family: var(--mono);
font-size: var(--t-micro-h);
color: var(--muted);
}
.tools {
max-height: 460px;
}
.who {
display: flex;
align-items: center;
gap: 9px;
}
.dot.good {
color: var(--green);
}
.w-agents {
min-width: 420px;
}
.badges {
display: inline-flex;
gap: 5px;
flex-wrap: wrap;
}
.badge {
display: inline-flex;
align-items: center;
padding: 2px 7px;
border-radius: var(--r-1);
font-family: var(--mono);
font-size: var(--t-micro);
letter-spacing: 0.04em;
cursor: help;
background: var(--chip);
color: var(--ink-2);
}
.badge.definition {
background: var(--blue-ink);
color: var(--panel);
}
.badge.vector {
background: var(--blue-soft);
color: var(--blue-ink);
}
.badge.keyword {
background: var(--amber-soft);
color: var(--amber-ink);
}
.badge.graph {
background: var(--green-soft);
color: var(--green-ink);
}
.badge.image {
background: var(--ink-2);
color: var(--panel);
}
.badge.capture {
background: var(--blue-soft);
color: var(--blue-ink);
}
@media (min-width: 521px) and (max-width: 899px) {
.strip .stat {
flex: 1 1 calc(33.333% - var(--sp-3));
}
}
@media (max-width: 820px) {
.narrow-drop {
display: none;
}
.only-narrow {
display: block;
}
.w-stores,
.w-files,
.w-models,
.w-agents,
.w-coverage {
min-width: 0;
}
td.path,
td.meta,
tbody td:first-child {
max-width: 0;
}
.one-line {
max-width: 100%;
}
.tool-grid {
max-height: none;
overflow-y: visible;
}
}
@media (max-width: 899px) {
:root {
--t-display: 21px;
--t-h1: 18px;
--t-title: 16px;
--t-lead: 14px;
}
.view {
overflow-y: auto;
}
.grow {
flex: 0 0 auto;
}
.graph-body {
grid-template-columns: minmax(0, 1fr);
}
.graph-page {
overflow-y: auto;
}
.graph-frame {
height: 360px;
}
.graph-band {
padding: var(--sp-4) var(--sp-4) var(--sp-3);
}
.graph-rail {
border-left: 0;
border-top: 1px solid var(--line);
overflow: visible;
}
.rail {
display: none;
}
.sidebar {
animation: slide-in var(--d-slide) var(--e-pop);
position: fixed;
top: var(--topbar-h);
bottom: 0;
left: 0;
z-index: 40;
box-shadow: var(--shadow-nav);
}
.sidebar[hidden] {
display: none;
}
@keyframes slide-in {
from {
transform: translateX(-100%);
}
}
@keyframes fade-in {
from {
opacity: 0;
}
}
.scrim {
animation: fade-in var(--d-slide) var(--e-in-out);
display: block;
position: fixed;
inset: var(--topbar-h) 0 0 0;
background: var(--scrim);
z-index: 35;
border: 0;
padding: 0;
}
.view {
padding: 18px var(--sp-4) var(--sp-6);
}
.search-band {
padding: var(--sp-4) var(--sp-4) var(--sp-3);
}
.results {
padding: var(--sp-4) var(--sp-4) var(--sp-6);
}
.page-title,
.divider-v,
.search-launcher .what,
.search-launcher .key-hint {
display: none;
}
.search-launcher {
flex: 0 0 auto;
width: 34px;
justify-content: center;
padding: 0;
}
.wordmark {
display: none;
}
}
@media (max-width: 520px) {
:root {
--t-display: 18px;
--t-h1: 16px;
--t-title: 14px;
--t-lead: 13px;
--t-body: 13px;
}
.graph-frame {
height: 280px;
}
.graph-controls {
gap: var(--sp-2);
}
.kv .k {
width: auto;
}
.stat {
flex-basis: 100%;
}
.store-chips {
flex-wrap: nowrap;
overflow-x: auto;
scrollbar-width: none;
mask-image: linear-gradient(to right, #000 88%, transparent);
}
.store-chips::-webkit-scrollbar {
display: none;
}
.store-chips > * {
flex: 0 0 auto;
}
.results {
padding-bottom: var(--sp-8);
}
}
th.pick,
td.pick {
width: 34px;
padding-right: 0;
}
input.pick {
width: 15px;
height: 15px;
margin: 0;
accent-color: var(--blue);
cursor: pointer;
}
.bulk {
display: flex;
align-items: center;
gap: var(--sp-3);
padding: var(--sp-2h) var(--sp-3h);
border: 1px solid var(--line);
border-radius: var(--r-3);
background: var(--soft);
}
.row-actions {
display: flex;
align-items: center;
gap: var(--sp-2);
justify-content: flex-end;
}
.menu {
position: fixed;
z-index: 60;
min-width: 180px;
padding: var(--sp-1);
display: flex;
flex-direction: column;
gap: 2px;
background: var(--panel);
border: 1px solid var(--line);
border-radius: var(--r-3);
box-shadow: 0 10px 30px rgb(15 21 26 / 18%);
}
.menu-item {
transition: background var(--d-quick) var(--e-in-out);
display: flex;
align-items: center;
gap: var(--sp-2);
padding: var(--sp-2) var(--sp-3);
border: 0;
border-radius: var(--r-2);
background: none;
color: var(--ink);
font: inherit;
font-size: var(--t-body-sm);
text-align: left;
white-space: nowrap;
cursor: pointer;
}
.menu-item:hover {
background: var(--soft);
}
.menu-item.bad {
color: var(--red-ink);
}
.menu-item.bad:hover {
background: var(--red-soft);
}
.button.icon {
width: 32px;
padding: 0;
}
th.row-end,
td.row-end {
width: 44px;
text-align: right;
}
.modal {
width: min(440px, calc(100vw - 2 * var(--sp-4)));
padding: var(--sp-4h);
border: 1px solid var(--line);
border-radius: var(--r-4);
background: var(--panel);
color: var(--ink);
box-shadow: 0 24px 60px rgb(15 21 26 / 22%);
}
.modal::backdrop {
background: rgb(15 21 26 / 45%);
}
.modal .card-title {
margin: 0 0 var(--sp-2);
font-size: var(--t-title);
}
.modal .subtitle {
margin: 0;
overflow-wrap: anywhere;
max-height: 40dvh;
overflow-y: auto;
}
.modal .card-title {
overflow-wrap: anywhere;
}
.modal .actions {
margin-top: var(--sp-4);
}
.modal .button.danger {
border-color: var(--red);
color: var(--red-ink);
}
.modal .button.danger:hover {
background: var(--red-soft);
border-color: var(--red);
color: var(--red-ink);
}
.button.icon {
width: 32px;
height: 32px;
padding: 0;
color: var(--ink-2);
}
.button.icon:hover,
.button.icon[aria-expanded="true"] {
color: var(--ink);
border-color: var(--blue);
}
.button.icon[aria-expanded="true"] {
background: var(--chip);
}
.button.icon svg {
width: 18px;
height: 18px;
}
.rules {
display: flex;
flex-direction: column;
gap: var(--sp-3);
}
.rule-row {
display: flex;
flex-direction: column;
gap: var(--sp-1);
padding: var(--sp-3) 0 0;
border-top: 1px solid var(--line);
}
.rule-row:first-child {
border-top: 0;
padding-top: 0;
}
.rule-head {
display: flex;
align-items: center;
gap: var(--sp-2);
min-width: 0;
}
.rule-id {
font-weight: 600;
white-space: nowrap;
}
.rule-text {
color: var(--muted);
margin: 0;
max-width: 100%;
}
.rule-found {
align-items: baseline;
display: flex;
gap: var(--sp-2);
min-width: 0;
}
.rule-found .eyebrow {
flex-shrink: 0;
}
.rule-check {
color: var(--fg);
font-size: 0.85em;
min-width: 0;
overflow-wrap: anywhere;
}
.rule-row.bad .rule-check {
color: var(--red);
}
.log .line.refused .outcome {
color: var(--red);
}
.log .line.refused {
opacity: 1;
}
.log .line.failed .outcome {
color: var(--red);
}
.log .line.failed {
opacity: 1;
}
.impact-band {
display: flex;
flex-wrap: wrap;
gap: var(--sp-2);
align-items: center;
margin-bottom: var(--sp-4);
}
.impact-band input[type="search"] {
flex: 1 1 18rem;
min-width: 0;
}
.hops-label {
display: inline-flex;
align-items: center;
gap: var(--sp-1);
font-size: var(--t-body-sm);
color: var(--muted);
}
.hops-label .hops {
width: 4.5rem;
}
.impact-block {
margin-bottom: var(--sp-5);
}
.impact-hop {
display: flex;
align-items: baseline;
gap: var(--sp-2);
padding-bottom: var(--sp-1);
border-bottom: 1px solid var(--line-soft);
margin-bottom: var(--sp-2);
}
.impact-hop h2 {
font-size: var(--t-body);
margin: 0;
}
.impact-row,
.impact-head-row {
display: grid;
grid-template-columns: minmax(0, 2fr) minmax(0, 1.6fr) minmax(0, 1.6fr) 3rem;
align-items: baseline;
gap: var(--sp-2);
}
.impact-row {
padding: var(--sp-1) 0;
font-family: var(--mono);
font-size: var(--t-small);
}
.impact-row .via {
display: flex;
align-items: baseline;
gap: var(--sp-2);
min-width: 0;
}
.impact-row .sym {
color: var(--ink);
overflow-wrap: anywhere;
}
.impact-row .where,
.impact-row .kind,
.impact-row .via {
color: var(--ink-2);
}
.impact-row .via {
color: var(--muted);
}
.headline {
font-size: var(--t-body);
color: var(--ink);
margin-bottom: var(--sp-3);
}
.note.hypothesis {
color: var(--amber-ink, var(--ink-2));
margin-bottom: var(--sp-3);
}
.impact-subject-row {
display: flex;
align-items: baseline;
gap: var(--sp-2);
padding: var(--sp-2) 0;
border-bottom: 1px solid var(--line-soft);
margin-bottom: var(--sp-4);
}
.impact-subject {
font-family: var(--mono);
font-size: var(--t-body);
color: var(--ink);
}
.impact-stats {
display: flex;
flex-wrap: wrap;
gap: var(--sp-6);
margin-bottom: var(--sp-4);
}
.impact-stat {
display: flex;
flex-direction: column;
gap: var(--sp-1);
}
.impact-stat .n {
font-family: var(--mono);
font-size: 22px;
color: var(--ink);
}
.impact-head-row {
padding-bottom: var(--sp-1);
border-bottom: 1px solid var(--line);
margin-bottom: var(--sp-2);
}
.impact-row .hops-n {
text-align: right;
color: var(--muted);
}
.card.pad.path-card,
.card.pad.trace-card {
margin-top: var(--sp-6);
}
.card-head {
display: flex;
align-items: baseline;
gap: var(--sp-2);
margin-bottom: var(--sp-3);
}
.card-head h2 {
font-size: var(--t-body);
margin: 0;
}
.mono-chip {
font-family: var(--mono);
font-size: var(--t-tiny);
color: var(--muted);
}
.path-band {
display: flex;
flex-wrap: wrap;
gap: var(--sp-2);
align-items: center;
margin-bottom: var(--sp-3);
}
.path-band input {
flex: 1 1 10rem;
min-width: 0;
}
.chip-toggle {
font-family: var(--mono);
font-size: var(--t-tiny);
padding: 3px 9px;
border-radius: 999px;
border: 1px solid var(--line);
background: var(--panel);
color: var(--ink-2);
cursor: pointer;
}
.chip-toggle.on {
border-color: var(--ink);
background: var(--ink);
color: var(--panel);
}
.hop {
display: flex;
flex-wrap: wrap;
align-items: baseline;
gap: var(--sp-2);
padding: var(--sp-1) 0;
font-family: var(--mono);
font-size: var(--t-small);
}
.hop .n {
color: var(--muted);
min-width: 1.2em;
}
.hop .end {
color: var(--ink);
overflow-wrap: anywhere;
}
.hop .arrow,
.hop .kind {
color: var(--ink-2);
}
.seam {
margin: 0 0 var(--sp-1) var(--sp-5);
padding-left: var(--sp-2);
border-left: 1.4px dashed var(--accent);
font-family: var(--mono);
font-size: var(--t-tiny);
color: var(--amber-ink);
}
.trailer {
margin-top: var(--sp-2);
font-size: var(--t-tiny);
color: var(--muted);
}
.refusal {
border: 1px solid var(--line);
border-radius: var(--r-4);
padding: var(--sp-3);
display: flex;
flex-wrap: wrap;
align-items: baseline;
gap: var(--sp-3);
}
.refusal .mono {
font-family: var(--mono);
font-size: 12.5px;
margin: 0;
}
.link {
background: none;
border: 0;
padding: 0;
color: var(--accent);
font: inherit;
cursor: pointer;
text-decoration: underline;
}
.answer {
margin: var(--sp-1) 0 var(--sp-4);
line-height: var(--lh-prose);
}
.support {
margin-bottom: var(--sp-3);
}
.support code {
display: block;
font-family: var(--mono);
font-size: var(--t-small);
background: var(--shade, var(--line-soft));
border-radius: var(--r-2, 4px);
padding: var(--sp-2);
overflow-x: auto;
white-space: pre;
}
.support-foot {
display: flex;
flex-wrap: wrap;
gap: var(--sp-2);
align-items: baseline;
margin-top: var(--sp-1);
font-family: var(--mono);
font-size: var(--t-tiny);
}
.support-foot .hop-of {
color: var(--muted);
}
.mark.fact {
color: var(--blue-ink, var(--accent));
}
.mark.candidate {
color: var(--amber-ink);
}
.graph-side {
display: flex;
flex-direction: column;
min-width: 0;
min-height: 0;
overflow-y: auto;
border-left: 1px solid var(--line);
}
.graph-side .graph-rail {
border-left: 0;
overflow-y: visible;
}
.map-panel {
padding: var(--sp-4h);
border-top: 1px solid var(--line);
}
.map-body {
display: flex;
flex-direction: column;
gap: var(--sp-2);
}
.map-row {
display: flex;
flex-direction: column;
gap: 2px;
text-align: left;
padding: var(--sp-2);
border: 1px solid var(--line);
border-radius: var(--r-2);
background: var(--panel);
cursor: pointer;
min-width: 0;
}
.map-row:hover {
border-color: var(--blue-ink);
}
.map-row .line {
font-family: var(--mono);
font-size: var(--t-tiny);
color: var(--ink-2);
overflow-wrap: anywhere;
}
.map-row .line.one {
display: flex;
gap: var(--sp-2);
align-items: baseline;
font-size: var(--t-small);
color: var(--ink);
}
.map-row .size {
color: var(--muted);
}
.map-shown {
margin-top: var(--sp-2);
font-family: var(--mono);
font-size: var(--t-tiny);
color: var(--muted);
}
@media (max-width: 899px) {
.graph-side {
border-left: 0;
border-top: 1px solid var(--line);
overflow: visible;
}
}
.health {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
gap: var(--sp-3);
margin-bottom: var(--sp-4);
}
.health-card {
display: flex;
flex-direction: column;
gap: var(--sp-2);
padding: var(--sp-3);
background: var(--panel);
border: 1px solid var(--line);
border-radius: var(--r-4);
min-width: 0;
}
.mix {
display: flex;
flex-direction: column;
gap: var(--sp-1);
}
.mix-row {
display: flex;
align-items: center;
gap: var(--sp-2);
font-family: var(--mono);
font-size: var(--t-tiny);
}
.mix-row .k {
flex: 0 0 7rem;
color: var(--ink-2);
overflow-wrap: anywhere;
}
.mix-row .meter {
flex: 1 1 auto;
height: 6px;
background: var(--line-soft);
border-radius: 999px;
overflow: hidden;
}
.mix-row .meter span {
display: block;
height: 100%;
background: var(--blue-ink);
}
.mix-row .v {
color: var(--muted);
white-space: nowrap;
}
.months {
display: flex;
align-items: flex-end;
gap: var(--sp-1);
height: 96px;
}
.month {
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
flex: 0 1 44px;
min-width: 0;
height: 100%;
justify-content: flex-end;
}
.months {
justify-content: flex-start;
}
.month .col {
display: flex;
align-items: flex-end;
width: 100%;
flex: 1 1 auto;
}
.month .col span {
display: block;
width: 100%;
background: var(--blue-ink);
border-radius: 2px 2px 0 0;
}
.month .m,
.month .c {
font-family: var(--mono);
font-size: 9px;
color: var(--muted);
}
.support-bar {
display: flex;
height: 10px;
border-radius: 999px;
overflow: hidden;
background: var(--line-soft);
}
.support-bar .seg.extracted {
background: var(--blue-ink);
}
.support-bar .seg.resolved {
background: var(--accent);
}
.support-bar .seg.ambiguous {
background: var(--amber-ink);
}
.support-bar .seg.unresolved {
background: var(--line);
}
.health-facts {
display: flex;
flex-wrap: wrap;
gap: var(--sp-3);
}
.health-facts .fact {
display: flex;
flex-direction: column;
}
.health-facts .v {
font-family: var(--mono);
font-size: var(--t-body);
color: var(--ink);
}
.health-facts .k {
font-size: var(--t-tiny);
color: var(--muted);
}
.w-sessions {
table-layout: fixed;
width: 100%;
}
.w-sessions th:nth-child(1),
.w-sessions td:nth-child(1) {
width: 16%;
}
.w-sessions th:nth-child(2),
.w-sessions td:nth-child(2) {
width: 14%;
}
.w-sessions th:nth-child(5),
.w-sessions td:nth-child(5),
.w-sessions th:nth-child(6),
.w-sessions td:nth-child(6),
.w-sessions th:nth-child(7),
.w-sessions td:nth-child(7) {
width: 11%;
}
.replay-body {
display: flex;
flex-direction: column;
gap: var(--sp-2);
}
.replay-row {
display: flex;
flex-direction: column;
gap: 2px;
padding: var(--sp-2) 0;
border-bottom: 1px solid var(--line-soft);
}
.replay-row .line.one {
display: flex;
gap: var(--sp-2);
align-items: baseline;
font-family: var(--mono);
font-size: var(--t-small);
}
.replay-counts {
display: flex;
flex-wrap: wrap;
gap: var(--sp-2);
font-family: var(--mono);
font-size: var(--t-tiny);
}
.replay-count.refund {
color: var(--amber-ink);
}
.replay-count.miss {
color: var(--red-ink, var(--amber-ink));
}
.replay-count.sufficed {
color: var(--blue-ink);
}
.replay-count.unknown {
color: var(--muted);
}
.report-card .filters {
gap: var(--sp-1);
}
.report-preview {
min-height: 4rem;
}
.report-text {
font-family: var(--mono);
font-size: var(--t-small);
white-space: pre-wrap;
overflow-wrap: anywhere;
margin: 0;
max-height: 32rem;
overflow-y: auto;
}
.cloud-rows {
display: flex;
flex-direction: column;
gap: var(--sp-2);
margin-bottom: var(--sp-4);
}
.cloud-row {
margin: 0;
line-height: var(--lh-prose);
}
.cloud-block {
margin-bottom: var(--sp-3);
}