/* ============================================================================
   components.css — CNN demo. Shares vocabulary with the GPT-2 demo but
   tailored for class-conditional, layered visualisation.
   ============================================================================ */

/* ---- Sticky top nav ---- */
.topnav {
  position: sticky; top: 0; z-index: 50;
  background: rgba(255,255,255,.92); backdrop-filter: saturate(180%) blur(12px);
  border-bottom: 1px solid var(--border);
}
.topnav-inner {
  display: flex; align-items: center; justify-content: space-between;
  height: 64px; max-width: var(--col-max); margin: 0 auto; padding: 0 var(--gap-5);
}
.brand { display: flex; align-items: center; gap: var(--gap-3); font-weight: 700; color: var(--ink); }
.brand .logo { width: 28px; height: 28px; }
.brand .name { font-size: var(--fs-15); letter-spacing: -0.01em; }
.brand .name em { font-style: normal; color: var(--muted); font-weight: 500; }

.phase-ribbon { display: flex; gap: var(--gap-1); align-items: center; }
.phase-ribbon button {
  display: flex; align-items: center; gap: var(--gap-2);
  padding: 8px 14px; border-radius: var(--r-pill);
  font-size: var(--fs-13); color: var(--muted); font-weight: 500;
  transition: background var(--motion-fast), color var(--motion-fast);
}
.phase-ribbon button:hover { background: var(--surface); color: var(--ink); }
.phase-ribbon button.active { background: var(--ink); color: var(--paper); }
.phase-ribbon .num { font-family: var(--font-mono); font-size: 11px; opacity: .7; }
@media (max-width: 980px) { .phase-ribbon { display: none; } }

.btn { display: inline-flex; align-items: center; gap: var(--gap-2); padding: 10px 18px; border-radius: var(--r-pill); font-size: var(--fs-14); font-weight: 600; transition: background var(--motion-fast), color var(--motion-fast); }
.btn-primary { background: var(--ink); color: var(--paper); }
.btn-primary:hover { background: var(--violet); }
.btn-ghost { background: transparent; color: var(--ink); border: 1px solid var(--border-2); }
.btn-ghost:hover { background: var(--surface); }
.btn .icon { width: 16px; height: 16px; }

/* ---- Hero ---- */
.hero { padding: var(--gap-9) 0 var(--gap-8); position: relative; overflow: hidden; }
.hero::before {
  content: ""; position: absolute; inset: 0; pointer-events: none; z-index: -1;
  background:
    radial-gradient(60rem 30rem at 80% 0%, rgba(124,58,237,.08), transparent 70%),
    radial-gradient(40rem 20rem at 10% 90%, rgba(217,119,6,.05), transparent 70%);
}
.hero-grid { display: grid; grid-template-columns: 1.1fr 1fr; gap: var(--gap-7); align-items: center; }
@media (max-width: 980px) { .hero-grid { grid-template-columns: 1fr; gap: var(--gap-6); } }
.hero h1 .grad {
  background: linear-gradient(90deg, var(--ink) 0%, var(--violet) 60%, var(--amber) 100%);
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
}
.hero-sub { font-size: var(--fs-18); color: var(--muted); max-width: 520px; margin-top: var(--gap-4); }
.hero-meta { display: flex; flex-wrap: wrap; gap: var(--gap-2); margin-top: var(--gap-5); }
.tag { display: inline-flex; align-items: center; gap: var(--gap-2); padding: 5px 10px; border-radius: var(--r-pill); background: var(--surface); border: 1px solid var(--border); font-family: var(--font-mono); font-size: var(--fs-12); color: var(--ink-soft); }
.tag .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--violet); }
.tag.amber .dot { background: var(--amber); }
.tag.cyan  .dot { background: var(--cyan); }

/* ---- Demo pane ---- */
.demo { background: var(--ink); color: var(--paper); border-radius: var(--r-4); box-shadow: var(--sh-3); overflow: hidden; position: relative; font-family: var(--font-mono); font-size: var(--fs-13); }
.demo-head { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; background: rgba(255,255,255,.04); border-bottom: 1px solid rgba(255,255,255,.08); }
.demo-head .lights { display: flex; gap: 6px; }
.demo-head .lights span { width: 10px; height: 10px; border-radius: 50%; background: rgba(255,255,255,.18); }
.demo-head .lights span:first-child { background: #ef4444; }
.demo-head .lights span:nth-child(2) { background: #f59e0b; }
.demo-head .lights span:nth-child(3) { background: #10b981; }
.demo-head .label { color: var(--muted-soft); font-size: 11px; letter-spacing: .06em; text-transform: uppercase; }
.demo-controls { display: flex; gap: 6px; }
.demo-controls button { width: 28px; height: 28px; border-radius: var(--r-2); display: grid; place-items: center; color: var(--muted-soft); transition: background var(--motion-fast), color var(--motion-fast); }
.demo-controls button:hover { background: rgba(255,255,255,.08); color: var(--paper); }
.demo-controls .icon { width: 14px; height: 14px; }
.demo-body { padding: 16px 18px 8px; min-height: 360px; }
.demo-line { display: flex; gap: 10px; margin-bottom: 10px; line-height: 1.55; }
.demo-line .gutter { color: var(--violet); width: 18px; flex: none; }
.demo-line .body { flex: 1; min-width: 0; word-break: break-word; }
.demo-line .body em { color: var(--muted-soft); font-style: normal; }
.demo-line.user .body { color: var(--paper); }
.demo-line.user .gutter { color: #fbbf24; }
.demo-line.stage .body { color: var(--muted-soft); }
.demo-line.stage .stage-name { color: var(--violet); font-weight: 600; }
.demo-line.answer .body { color: #ddd6fe; }
.demo-line.answer .body strong { color: #fff; font-weight: 600; }
.demo-cite { display: inline-block; padding: 1px 6px; border-radius: var(--r-1); background: rgba(124,58,237,.15); color: #c4b5fd; cursor: pointer; border: 1px solid rgba(124,58,237,.3); font-size: .92em; transition: background var(--motion-fast), color var(--motion-fast); }
.demo-cite:hover { background: var(--violet); color: var(--ink); }
.demo-pipe { display: flex; align-items: center; gap: 6px; margin-bottom: 10px; font-size: 11px; color: var(--muted-soft); padding-left: 28px; }
.demo-pipe .step { padding: 2px 8px; border-radius: var(--r-pill); background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.08); }
.demo-pipe .step.active { background: var(--violet); color: var(--paper); border-color: transparent; }
.demo-pipe .step.done { background: rgba(124,58,237,.12); color: #c4b5fd; border-color: rgba(124,58,237,.3); }
.demo-pipe .arrow { opacity: .4; }
.demo-foot { display: flex; flex-wrap: wrap; gap: 6px; padding: 10px 16px 16px; background: rgba(255,255,255,.02); border-top: 1px solid rgba(255,255,255,.06); }
.demo-foot .label { font-size: 11px; color: var(--muted-soft); margin-right: 4px; align-self: center; }
.chip { font-family: var(--font-mono); font-size: 11px; padding: 5px 10px; border-radius: var(--r-pill); background: rgba(255,255,255,.06); color: var(--paper); border: 1px solid rgba(255,255,255,.1); transition: background var(--motion-fast), border-color var(--motion-fast); }
.chip:hover { background: var(--violet); border-color: var(--violet); }
.cursor::after { content: ""; display: inline-block; width: 7px; height: 1em; background: var(--violet); vertical-align: text-bottom; animation: blink 1s steps(2) infinite; }
@keyframes blink { 50% { opacity: 0; } }

/* ---- Proof strip ---- */
.proof { display: grid; grid-template-columns: repeat(3, 1fr); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
.proof-cell { padding: var(--gap-7) var(--gap-5); text-align: center; border-left: 1px solid var(--border); }
.proof-cell:first-child { border-left: 0; }
.proof-cell .num { font-family: var(--font-mono); font-size: var(--fs-44); font-weight: 700; letter-spacing: -0.02em; color: var(--ink); line-height: 1; }
.proof-cell .num em { color: var(--violet); font-style: normal; }
.proof-cell .lbl { margin-top: var(--gap-3); color: var(--muted); font-size: var(--fs-13); }
.proof-cell .sub { margin-top: 4px; font-size: var(--fs-12); color: var(--muted-soft); }
@media (max-width: 720px) { .proof { grid-template-columns: 1fr; } .proof-cell { border-left: 0; border-top: 1px solid var(--border); } .proof-cell:first-child { border-top: 0; } }

/* ---- Section header ---- */
.section-head { max-width: 760px; margin-bottom: var(--gap-7); }
.section-head .eyebrow { display: inline-flex; align-items: center; gap: 6px; }
.section-head .eyebrow + h2 { margin-top: var(--gap-3); }
.section-head h2 + p { margin-top: var(--gap-3); color: var(--muted); font-size: var(--fs-16); }

/* ---- Weight viewer (the "from where we extracted MUs" panel) ---- */
.weights-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: var(--gap-3); margin-top: var(--gap-5); }
@media (max-width: 980px) { .weights-grid { grid-template-columns: 1fr; } }
.weight-card { background: var(--paper); border: 1px solid var(--border); border-radius: var(--r-3); overflow: hidden; }
.weight-card .ttl { display: flex; justify-content: space-between; align-items: center; padding: 10px 14px; background: var(--surface); border-bottom: 1px solid var(--border); font-family: var(--font-mono); font-size: var(--fs-13); }
.weight-card .ttl .layer { color: var(--violet); font-weight: 600; }
.weight-card .ttl .count { color: var(--muted); font-size: var(--fs-12); }
.weight-card .img { background: #0a0e1a; padding: var(--gap-3); display: grid; place-items: center; }
.weight-card .img img { display: block; width: 100%; height: auto; image-rendering: pixelated; image-rendering: crisp-edges; }
.weight-card .role { padding: 10px 14px; font-size: var(--fs-12); color: var(--muted); border-top: 1px solid var(--border); background: var(--paper); }

/* ---- Section D titlebar + color-mode pills ---- */
.matrix-titlebar {
  display: flex; align-items: flex-end; justify-content: space-between;
  gap: var(--gap-5); margin-top: 3rem; flex-wrap: wrap;
}
.matrix-title { font-size: 18px; margin-bottom: .35rem; }
.matrix-sub { font-size: 14px; color: var(--muted); max-width: 62ch; }
.matrix-sub strong { color: var(--ink); font-weight: 600; }
.color-mode {
  display: inline-flex; gap: 2px; padding: 3px;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-pill);
}
.cm-pill {
  padding: 6px 14px; border-radius: var(--r-pill); font-family: var(--font-mono);
  font-size: 12px; color: var(--muted); font-weight: 500;
  transition: background var(--motion-fast), color var(--motion-fast);
}
.cm-pill:hover { color: var(--ink); }
.cm-pill.active { background: var(--ink); color: var(--paper); }

/* ---- Three-tier filter grid ---- */
.tiers { display: grid; gap: var(--gap-5); margin-top: var(--gap-5); }
.tier {
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-4);
  padding: var(--gap-4);
}
.tier-head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 6px; }
.tier-head h4 { font-family: var(--font-mono); color: var(--ink); font-size: var(--fs-16); }
.tier-head h4 .role { color: var(--muted); font-weight: 400; margin-left: 6px; }
.tier-head .meta { font-family: var(--font-mono); font-size: var(--fs-12); color: var(--muted); }

/* Tier stats row: count · selective ratio · max · mean */
.tier-stats {
  display: flex; flex-wrap: wrap; gap: 14px; margin-bottom: var(--gap-3);
  font-family: var(--font-mono); font-size: 11px; color: var(--muted);
  padding-bottom: var(--gap-3); border-bottom: 1px dashed var(--border);
}
.tier-stats .ts-item { display: inline-flex; gap: 5px; align-items: baseline; }
.tier-stats .ts-k { color: var(--muted); }
.tier-stats .ts-v { color: var(--ink); font-weight: 600; }
.tier-stats .ts-bar {
  display: inline-block; vertical-align: middle; width: 40px; height: 5px;
  background: var(--border); border-radius: var(--r-pill); overflow: hidden;
  margin-left: 4px;
}
.tier-stats .ts-bar > span { display: block; height: 100%; background: var(--violet); }

.filter-grid { display: grid; gap: 3px; }
.filter-grid.c1 { grid-template-columns: repeat(16, 1fr); }
.filter-grid.c2 { grid-template-columns: repeat(16, 1fr); }
.filter-grid.c3 { grid-template-columns: repeat(16, 1fr); }

/* Bivariate cells: background = color-mode metric, inner dot = mean activation */
.f-cell {
  aspect-ratio: 1; border-radius: 3px; cursor: pointer;
  transition: transform var(--motion-fast), box-shadow var(--motion-fast), opacity var(--motion-fast);
  background: var(--heat-0); position: relative;
  display: grid; place-items: center;
}
.f-cell::before {
  /* the activation dot — JS sets --dot to 0..1, --dotcol white/dark for contrast */
  content: ""; width: calc(20% + var(--dot, 0) * 55%); height: calc(20% + var(--dot, 0) * 55%);
  border-radius: 50%; background: var(--dotcol, rgba(255,255,255,.85));
  opacity: var(--dot-vis, .9);
  transition: width var(--motion-fast), height var(--motion-fast), background var(--motion-fast);
  pointer-events: none;
}
.f-cell:hover { transform: scale(1.5); z-index: 5; box-shadow: var(--sh-glow); }
.f-cell.selected { box-shadow: 0 0 0 2px var(--ink); transform: scale(1.5); z-index: 6; }
/* Top-1 class match: amber ring */
.f-cell.primary { box-shadow: 0 0 0 2px var(--amber); }
.f-cell.primary:hover { box-shadow: 0 0 0 2px var(--amber), var(--sh-glow); }

/* ---- Encoding legend ---- */
.legend-grid {
  display: flex; flex-direction: column; gap: 8px; margin-top: var(--gap-4);
  padding: 12px 14px; background: var(--surface);
  border: 1px solid var(--border); border-radius: var(--r-3);
}
.legend-row {
  display: flex; align-items: center; gap: 10px;
  font-family: var(--font-mono); font-size: 11px; color: var(--muted);
}
.legend-row .lg-label {
  display: inline-block; width: 38px; text-transform: uppercase; letter-spacing: .04em;
  color: var(--ink-soft); font-weight: 600;
}
.legend-row .lg-tick { font-size: 10px; min-width: 18px; text-align: center; }
.legend-row .lg-axis-name { margin-left: auto; color: var(--ink-soft); font-style: italic; }
.legend-bar {
  width: 200px; height: 8px; border-radius: var(--r-pill);
  background: linear-gradient(90deg, var(--heat-0), var(--heat-2), var(--heat-4), var(--heat-5));
}
.legend-dots { display: inline-flex; gap: 8px; align-items: center; width: 200px; justify-content: space-between; padding: 0 4px; }
.legend-dots .dot { display: inline-block; border-radius: 50%; background: var(--violet); }
.legend-dots .d-1 { width: 4px;  height: 4px; }
.legend-dots .d-2 { width: 6px;  height: 6px; }
.legend-dots .d-3 { width: 9px;  height: 9px; }
.legend-dots .d-4 { width: 12px; height: 12px; }
.legend-dots .d-5 { width: 15px; height: 15px; }
.ring-swatch {
  display: inline-block; width: 14px; height: 14px; border-radius: 3px;
  background: transparent; box-shadow: 0 0 0 2px var(--amber);
}

/* ---- Class strip ---- */
.class-strip { display: grid; grid-template-columns: repeat(10, 1fr); gap: var(--gap-2); margin-top: var(--gap-4); }
@media (max-width: 720px) { .class-strip { grid-template-columns: repeat(5, 1fr); } }
.class-card { background: var(--paper); border: 1px solid var(--border); border-radius: var(--r-2); overflow: hidden; cursor: pointer; transition: transform var(--motion-fast), box-shadow var(--motion-fast); }
.class-card:hover { transform: translateY(-2px); box-shadow: var(--sh-2); }
.class-card.active { box-shadow: 0 0 0 2px var(--violet); }
.class-card .img { aspect-ratio: 1; background: var(--ink); display: grid; place-items: center; }
.class-card .img img { width: 100%; height: 100%; object-fit: cover; image-rendering: pixelated; }
.class-card .lbl { padding: 6px 8px; font-family: var(--font-mono); font-size: 11px; text-align: center; color: var(--ink-soft); border-top: 1px solid var(--border); }

/* ---- MU side panel ---- */
.panel { background: var(--paper); border: 1px solid var(--border); border-radius: var(--r-4); padding: var(--gap-5); }
.panel.empty { display: grid; place-items: center; min-height: 320px; color: var(--muted); text-align: center; }
.panel .head-id { font-family: var(--font-mono); font-size: var(--fs-24); font-weight: 700; letter-spacing: -0.02em; color: var(--ink); margin-bottom: 4px; }
.panel .head-fn { color: var(--muted); font-size: var(--fs-13); margin-bottom: var(--gap-4); }
.fields-grid { display: grid; grid-template-columns: 32px 1fr; gap: 10px var(--gap-3); }
.fields-grid .f-key { font-family: var(--font-mono); font-weight: 700; font-size: var(--fs-15); background: var(--violet-l); color: var(--violet-d); border-radius: var(--r-1); display: grid; place-items: center; }
.fields-grid .f-val { font-size: var(--fs-13); color: var(--ink-soft); }
.fields-grid .f-val .mono { color: var(--ink); }
.fields-grid .f-val .small { display: block; color: var(--muted); margin-top: 2px; font-size: var(--fs-12); }

.esrdg { display: flex; gap: 6px; margin: var(--gap-3) 0; flex-wrap: wrap; }
.esrdg span { font-family: var(--font-mono); font-size: var(--fs-13); font-weight: 600; width: 30px; height: 30px; border-radius: var(--r-2); display: grid; place-items: center; background: var(--surface); border: 1px solid var(--border); color: var(--muted); }
.esrdg span.lit       { background: var(--ink); color: var(--paper); border-color: var(--ink); }
.esrdg span.necessary { background: var(--violet); color: var(--paper); border-color: var(--violet); box-shadow: 0 0 0 3px var(--violet-l); }

/* ---- Indexed templates stack ---- */
.docstack { position: relative; height: 280px; perspective: 1200px; }
.doccard { position: absolute; inset: 0; padding: var(--gap-4); background: var(--paper); border: 1px solid var(--border); border-radius: var(--r-3); box-shadow: var(--sh-1); font-family: var(--font-mono); font-size: var(--fs-12); color: var(--ink-soft); transform-origin: bottom left; }
.doccard .hd { display: flex; justify-content: space-between; margin-bottom: var(--gap-2); }
.doccard .hd .id { color: var(--ink); font-weight: 600; }
.doccard .hd .typ { color: var(--violet); font-size: 11px; text-transform: uppercase; letter-spacing: .06em; }

/* ---- Two-rail retrieve ---- */
.rails { display: grid; gap: var(--gap-2); padding: var(--gap-5); background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-4); }
.rail { display: grid; grid-template-columns: 110px 1fr 110px; gap: var(--gap-3); align-items: center; padding: var(--gap-3) var(--gap-4); background: var(--paper); border-radius: var(--r-3); border: 1px solid var(--border); }
.rail .tag-rail { font-family: var(--font-mono); font-size: 11px; padding: 4px 10px; border-radius: var(--r-pill); background: var(--ink); color: var(--paper); text-align: center; }
.rail.semantic .tag-rail { background: var(--violet); }
.rail .flow { height: 4px; background: var(--surface-2); border-radius: var(--r-pill); position: relative; overflow: hidden; }
.rail .flow::after { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 0%; background: linear-gradient(90deg, var(--indigo), var(--violet)); animation: railflow 3s ease-in-out infinite; }
.rail.semantic .flow::after { background: linear-gradient(90deg, var(--violet), var(--amber)); }
.rail .out { font-family: var(--font-mono); font-size: 11px; color: var(--muted); text-align: right; }
@keyframes railflow { 0%{width:0%;opacity:1;} 60%{width:100%;opacity:1;} 100%{width:100%;opacity:0;} }
.rail-merge { display: grid; grid-template-columns: 110px 1fr 110px; gap: var(--gap-3); align-items: center; padding: var(--gap-3) var(--gap-4); background: linear-gradient(90deg, var(--violet) 0%, var(--amber) 100%); border-radius: var(--r-3); color: var(--paper); }
.rail-merge .tag-rail { background: rgba(255,255,255,.18); }
.rail-merge .out { color: rgba(255,255,255,.85); font-size: 11px; font-family: var(--font-mono); text-align: right; }

/* ---- Evaluate dashboard ---- */
.dash-grid { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: var(--gap-5); }
@media (max-width: 980px) { .dash-grid { grid-template-columns: 1fr; } }
.card { background: var(--paper); border: 1px solid var(--border); border-radius: var(--r-4); padding: var(--gap-5); }
.card h4 { margin-bottom: var(--gap-2); }
.card .card-sub { color: var(--muted); font-size: var(--fs-13); margin-bottom: var(--gap-4); }

/* class-pair sufficiency heatmap (10x10) */
.heat-10 { display: grid; grid-template-columns: 60px repeat(10, 1fr); grid-template-rows: 60px repeat(10, 1fr); gap: 1px; aspect-ratio: 1; max-width: 540px; margin: 0 auto; }
.heat-10 .lbl { font-family: var(--font-mono); font-size: 9px; color: var(--muted); display: grid; place-items: center; padding: 2px; text-align: center; }
.heat-10 .lbl.col { writing-mode: vertical-rl; transform: rotate(180deg); }
.heat-10 .ccell { display: grid; place-items: center; font-family: var(--font-mono); font-size: 9px; color: rgba(255,255,255,.85); border-radius: 2px; cursor: default; }
.heat-10 .ccell.diag { background: var(--surface-2) !important; color: var(--muted); }

/* sufficiency / necessity bar */
.bar2 { display: grid; grid-template-columns: 1fr; gap: var(--gap-3); margin: var(--gap-3) 0; }
.bar2-row { display: grid; grid-template-columns: 110px 1fr 70px; gap: var(--gap-3); align-items: center; font-size: var(--fs-13); }
.bar2-row .lbl { color: var(--muted); font-family: var(--font-mono); font-size: var(--fs-12); }
.bar2-row .b { background: var(--surface-2); height: 18px; border-radius: var(--r-pill); position: relative; overflow: hidden; }
.bar2-row .b .fill { position: absolute; left: 0; top: 0; bottom: 0; border-radius: var(--r-pill); transition: width var(--motion-slow); }
.bar2-row.framework .b .fill { background: linear-gradient(90deg, var(--violet), var(--indigo)); }
.bar2-row.random .b .fill    { background: var(--muted-soft); }
.bar2-row .v { font-family: var(--font-mono); font-weight: 700; color: var(--ink); text-align: right; }

.curve-row { display: grid; grid-template-columns: 36px 1fr 64px; gap: var(--gap-3); align-items: center; padding: 6px 0; font-family: var(--font-mono); font-size: var(--fs-12); }
.curve-row .k { color: var(--muted); }
.curve-row .b { background: var(--surface-2); height: 14px; border-radius: var(--r-pill); position: relative; overflow: hidden; }
.curve-row .b .fill { position: absolute; left: 0; top: 0; bottom: 0; background: linear-gradient(90deg, var(--violet), var(--amber)); border-radius: var(--r-pill); transition: width var(--motion-slow); }
.curve-row .v { color: var(--ink); text-align: right; }

.decomp-row { display: grid; grid-template-columns: 1fr 80px; gap: var(--gap-3); padding: var(--gap-3) 0; border-top: 1px solid var(--border); align-items: center; font-size: var(--fs-13); }
.decomp-row:first-of-type { border-top: 0; }
.decomp-row .ttl { color: var(--ink); }
.decomp-row .ttl small { color: var(--muted); display: block; font-family: var(--font-mono); font-size: 11px; }
.decomp-row .v { font-family: var(--font-mono); font-weight: 700; color: var(--ink); text-align: right; }

/* ---- Limits & footer ---- */
.limits { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-4); padding: var(--gap-5); margin-top: var(--gap-7); }
.limits summary { list-style: none; cursor: pointer; display: flex; justify-content: space-between; align-items: center; }
.limits summary::-webkit-details-marker { display: none; }
.limits summary h4 { color: var(--ink); }
.limits summary .sigil { color: var(--muted); transition: transform var(--motion-fast); width: 16px; height: 16px; }
.limits[open] summary .sigil { transform: rotate(180deg); }
.limits .body { margin-top: var(--gap-4); }
.limits ul { padding-left: var(--gap-4); }
.limits li { margin: var(--gap-2) 0; color: var(--ink-soft); font-size: var(--fs-14); }
.foot { border-top: 1px solid var(--border); padding: var(--gap-6) 0; display: flex; justify-content: space-between; align-items: center; color: var(--muted); font-size: var(--fs-13); flex-wrap: wrap; gap: var(--gap-3); }
.foot .mono { color: var(--ink); }

/* ---- Slide-in MU panel + tooltip ---- */
.sheet-overlay { position: fixed; inset: 0; background: rgba(15,23,42,.4); z-index: 100; opacity: 0; pointer-events: none; transition: opacity var(--motion-base); }
.sheet-overlay.open { opacity: 1; pointer-events: auto; }
.sheet { position: fixed; right: 0; top: 0; bottom: 0; width: min(440px, 100%); background: var(--paper); box-shadow: -8px 0 32px rgba(15,23,42,.12); z-index: 101; padding: var(--gap-5); overflow-y: auto; transform: translateX(100%); transition: transform var(--motion-base); }
.sheet.open { transform: translateX(0); }
.sheet .close-btn { position: absolute; top: var(--gap-3); right: var(--gap-3); width: 32px; height: 32px; border-radius: 50%; display: grid; place-items: center; color: var(--muted); transition: background var(--motion-fast); }
.sheet .close-btn:hover { background: var(--surface); color: var(--ink); }
.tooltip { position: fixed; z-index: 1000; pointer-events: none; background: var(--ink); color: var(--paper); padding: 8px 12px; border-radius: var(--r-2); font-size: var(--fs-12); box-shadow: var(--sh-3); max-width: 260px; opacity: 0; transform: translateY(4px); transition: opacity var(--motion-fast), transform var(--motion-fast); }
.tooltip.show { opacity: 1; transform: translateY(0); }
.tooltip .id { font-family: var(--font-mono); font-weight: 700; }
.tooltip .lbl { color: var(--muted-soft); font-size: 11px; margin-top: 2px; }

/* matrix-wrap reused from GPT-2 */
.matrix-wrap { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: var(--gap-7); align-items: start; }
@media (max-width: 980px) { .matrix-wrap { grid-template-columns: 1fr; } }

/* layer-progression image */
.flow-img { width: 100%; border-radius: var(--r-3); border: 1px solid var(--border); margin-top: var(--gap-3); background: #0a0e1a; padding: var(--gap-3); }

/* ==================================================================
   ARCHITECTURE diagram (the trained CNN itself)
   ================================================================== */
.arch-card {
  background: var(--paper); border: 1px solid var(--border); border-radius: var(--r-4);
  padding: var(--gap-5); margin-top: var(--gap-5);
}
.arch-svg-wrap { width: 100%; overflow-x: auto; padding: var(--gap-3) 0; }
.arch-svg { display: block; margin: 0 auto; min-width: 760px; }
.arch-stage {
  fill: var(--paper); stroke: var(--violet); stroke-width: 1.5;
}
.arch-pool { fill: var(--surface); stroke: var(--border-2); stroke-width: 1; }
.arch-label { fill: var(--ink); font: 600 12px var(--font-mono); }
.arch-sub   { fill: var(--muted); font: 11px var(--font-mono); }
.arch-edge  { stroke: var(--muted-soft); stroke-width: 1.5; fill: none; }
.arch-classlabel { fill: var(--ink-soft); font: 11px var(--font-sans); }
.arch-bar  { fill: var(--violet); }
.arch-bar.muted { fill: var(--border-2); }

.arch-legend {
  display: flex; flex-wrap: wrap; gap: var(--gap-3); margin-top: var(--gap-3);
  font-size: var(--fs-12); color: var(--muted); font-family: var(--font-mono);
}
.arch-legend .pill {
  padding: 4px 10px; border-radius: var(--r-pill);
  background: var(--surface); border: 1px solid var(--border);
}
.arch-legend .pill.violet { color: var(--violet-d); background: var(--violet-l); border-color: #ddd6fe; }

/* ==================================================================
   PROCESS PIPELINE (analysis -> MU -> conversation)
   ================================================================== */
.pipeline {
  background: var(--paper); border: 1px solid var(--border); border-radius: var(--r-4);
  padding: var(--gap-5); margin-top: var(--gap-5);
}
.pipeline-row {
  display: grid; grid-template-columns: repeat(6, 1fr); gap: var(--gap-2);
  align-items: stretch; margin-bottom: var(--gap-3);
}
@media (max-width: 980px) { .pipeline-row { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 540px) { .pipeline-row { grid-template-columns: repeat(2, 1fr); } }
.pstep {
  display: grid; grid-template-rows: auto auto auto 1fr;
  gap: 6px; padding: var(--gap-3); border-radius: var(--r-3);
  background: var(--surface); border: 1px solid var(--border);
  cursor: pointer; transition: transform var(--motion-fast), box-shadow var(--motion-fast), background var(--motion-fast);
  position: relative; text-align: left;
}
.pstep:hover { transform: translateY(-2px); box-shadow: var(--sh-2); }
.pstep .num { font-family: var(--font-mono); font-size: 10px; color: var(--muted); letter-spacing: .08em; text-transform: uppercase; }
.pstep .ttl { font-weight: 700; font-size: var(--fs-14); color: var(--ink); }
.pstep .sub { font-size: var(--fs-12); color: var(--muted); line-height: 1.45; }
.pstep .glyph { width: 22px; height: 22px; color: var(--violet); }
.pstep.kind-evidence { background: linear-gradient(135deg, #faf5ff 0%, #f5f3ff 100%); border-color: #e9d5ff; }
.pstep.kind-output   { background: linear-gradient(135deg, #fff7ed 0%, #ffedd5 100%); border-color: #fed7aa; }
.pstep.active { box-shadow: 0 0 0 3px var(--violet-l); border-color: var(--violet); }
.pipeline-back {
  display: flex; align-items: center; gap: var(--gap-2);
  margin-top: var(--gap-3); padding: 10px 14px;
  background: var(--ink); color: var(--paper);
  border-radius: var(--r-pill); font-size: var(--fs-13); font-weight: 600;
  width: fit-content; cursor: pointer; transition: transform var(--motion-fast), background var(--motion-fast);
}
.pipeline-back:hover { background: var(--violet); transform: translateX(-3px); }
.pipeline-back .icon { width: 14px; height: 14px; }

/* citation hint nudge in demo */
.demo-hint {
  position: absolute; left: 18px; bottom: 60px; font-size: 10px;
  background: var(--violet); color: var(--paper); padding: 4px 8px;
  border-radius: var(--r-pill); pointer-events: none; opacity: 0;
  transition: opacity .3s;
}
.demo-hint.show { opacity: 0.95; }
.demo-hint::after {
  content: ""; position: absolute; left: 22px; bottom: -5px;
  width: 8px; height: 8px; background: var(--violet); transform: rotate(45deg);
}

/* highlight a manipulation-quick-look strip in section 1 */
.preview-heat {
  display: flex; align-items: center; gap: var(--gap-4);
  padding: var(--gap-4); margin-top: var(--gap-5);
  background: linear-gradient(135deg, var(--violet-l) 0%, #fff7ed 100%);
  border: 1px solid #ddd6fe; border-radius: var(--r-3);
}
.preview-heat .mini-grid { display: grid; grid-template-columns: repeat(10, 8px); gap: 1px; flex: none; }
.preview-heat .mini-grid div { width: 8px; height: 8px; border-radius: 1px; }
.preview-heat .txt { flex: 1; }
.preview-heat .txt strong { color: var(--violet-d); }
.preview-heat .lnk { color: var(--violet-d); font-weight: 600; cursor: pointer; }
.preview-heat .lnk:hover { text-decoration: underline; }

/* ==================================================================
   ARCHITECTURE forward-pass animation states
   ================================================================== */
.arch-pulse {
  fill: var(--violet);
  filter: drop-shadow(0 0 8px rgba(124,58,237,.6));
  opacity: 0;
  transition: opacity .25s;
}
.arch-edge.active { stroke: var(--violet); stroke-width: 2.5; }
.stage.stage-conv .arch-stage,
.stage.stage-fc   .arch-stage {
  transition: fill .35s, stroke .35s, filter .35s;
}
.stage.active .arch-stage {
  fill: #ede9fe;
  stroke: var(--violet); stroke-width: 2;
  filter: drop-shadow(0 0 12px rgba(124,58,237,.35));
}
@keyframes win-pulse-key {
  0%,100% { transform: translateX(0); }
  50%     { transform: translateX(2px); }
}
[data-cls].win-pulse {
  animation: glowx 1.4s cubic-bezier(.4,0,.6,1) 2;
}
@keyframes glowx {
  0%   { filter: drop-shadow(0 0 0 rgba(124,58,237,0)); }
  50%  { filter: drop-shadow(0 0 8px rgba(124,58,237,.85)); }
  100% { filter: drop-shadow(0 0 0 rgba(124,58,237,0)); }
}

/* the small "Animate forward pass" button under the architecture */
.arch-anim-btn {
  display: inline-flex; align-items: center; gap: 6px;
  margin-top: var(--gap-3); padding: 8px 14px;
  background: var(--ink); color: var(--paper);
  border-radius: var(--r-pill); font-size: var(--fs-13); font-weight: 600;
  cursor: pointer; transition: background var(--motion-fast), transform var(--motion-fast);
}
.arch-anim-btn:hover { background: var(--violet); transform: translateY(-1px); }
.arch-anim-btn .dot {
  width: 8px; height: 8px; border-radius: 50%; background: var(--violet);
  animation: ping 1.6s ease-in-out infinite;
}
@keyframes ping {
  0%,100% { transform: scale(1);   opacity: 1; }
  50%     { transform: scale(1.6); opacity: .55; }
}


/* ============================================================================
   Canvas-based architecture animation wrapper (hardened — explicit sizing)
   ============================================================================ */
.arch-stage-wrap {
  width: 100%;
  overflow-x: auto;
  padding: var(--gap-3) 0;
  text-align: center;
}
#cnn-stage {
  display: inline-block;
  width: 920px;
  height: 360px;
  max-width: 100%;
  border-radius: var(--r-3);
  box-shadow: 0 4px 24px rgba(124, 58, 237, .14);
  background: #0a0e1a;
}

/* ============================================================================
   03 / Index — flippable doc-stack
   ============================================================================ */
.docflip {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-3); padding: var(--gap-4);
}
.docflip-controls {
  display: flex; flex-direction: column; gap: 8px;
  padding-bottom: var(--gap-3); margin-bottom: var(--gap-3);
  border-bottom: 1px dashed var(--border);
}
.df-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.df-label {
  font-family: var(--font-mono); font-size: 11px;
  color: var(--muted); text-transform: uppercase; letter-spacing: .06em;
  width: 60px; flex: none; font-weight: 600;
}
.df-tabs {
  display: inline-flex; gap: 2px; padding: 3px;
  background: var(--paper); border: 1px solid var(--border); border-radius: var(--r-pill);
  flex-wrap: wrap;
}
.df-tab {
  padding: 5px 12px; border-radius: var(--r-pill);
  font-family: var(--font-mono); font-size: 11px; font-weight: 500;
  color: var(--muted); transition: background var(--motion-fast), color var(--motion-fast);
  white-space: nowrap;
}
.df-tab:hover { color: var(--ink); }
.df-tab.active { background: var(--ink); color: var(--paper); }
.df-filter-tabs .df-tab.active { background: var(--violet); }

.docflip-stage { position: relative; min-height: 220px; perspective: 1400px; }
.docflip-card {
  position: absolute; inset: 0;
  background: var(--paper); border: 1px solid var(--border); border-radius: var(--r-3);
  padding: 16px 20px;
  font-family: var(--font-mono); font-size: 12px;
  color: var(--ink-soft); line-height: 1.55;
  box-shadow: var(--sh-1); z-index: 4;
  opacity: 0; pointer-events: none;
  transform: translateY(8px) rotateX(-6deg);
  transition: opacity 280ms ease, transform 320ms cubic-bezier(.4,0,.2,1);
}
.docflip-card.active { opacity: 1; pointer-events: auto; transform: translateY(0) rotateX(0); }
.dfc-head {
  display: flex; justify-content: space-between; align-items: baseline;
  padding-bottom: 10px; margin-bottom: 12px;
  border-bottom: 1px dashed var(--border);
}
.dfc-id { font-weight: 700; color: var(--violet); font-size: 13px; }
.dfc-type {
  font-size: 10px; padding: 3px 9px; border-radius: var(--r-pill);
  background: var(--violet); color: var(--paper);
  text-transform: uppercase; letter-spacing: .08em; font-weight: 600;
}
.dfc-body { font-size: 12.5px; line-height: 1.6; color: var(--ink-soft); }
.dfc-body strong { color: var(--ink); font-weight: 600; }
.dfc-body .stat {
  display: inline-block; padding: 1px 6px; border-radius: 3px;
  background: var(--violet-l); color: var(--violet-d); font-weight: 600;
}
.dfc-body .field-tag {
  display: inline-block; font-size: 10px;
  padding: 1px 5px; border-radius: 3px; margin-right: 4px;
  background: var(--surface); color: var(--muted);
  text-transform: uppercase; letter-spacing: .05em; font-weight: 600;
  vertical-align: middle;
}
.dfc-foot {
  margin-top: 14px; padding-top: 10px;
  border-top: 1px dashed var(--border);
  display: flex; justify-content: space-between; align-items: center;
  font-size: 10px; color: var(--muted);
}
.dfc-foot .trace { font-style: italic; }
.docflip-paper {
  position: absolute; inset: 0;
  background: var(--paper); border: 1px solid var(--border); border-radius: var(--r-3);
}
.docflip-paper-1 { z-index: 3; transform: translate(4px, 4px) rotate(.4deg); opacity: .9; }
.docflip-paper-2 { z-index: 2; transform: translate(8px, 8px) rotate(.8deg); opacity: .75; }
.docflip-paper-3 { z-index: 1; transform: translate(12px, 12px) rotate(1.2deg); opacity: .55; }
.docflip-meter {
  display: flex; align-items: center; gap: 12px;
  margin-top: var(--gap-4); padding: 8px 12px;
  background: var(--paper); border: 1px solid var(--border); border-radius: var(--r-2);
  font-family: var(--font-mono); font-size: 11px; color: var(--muted);
}
.dfm-k { color: var(--ink-soft); font-weight: 600; }
.dfm-dots { display: inline-flex; gap: 6px; align-items: center; }
.dfm-dot {
  display: inline-block; width: 9px; height: 9px; border-radius: 50%;
  background: var(--border-2);
  transition: background var(--motion-fast), transform var(--motion-fast); cursor: pointer;
}
.dfm-dot:hover { transform: scale(1.3); }
.dfm-dot.active { background: var(--violet); }
.dfm-v { margin-left: auto; color: var(--ink); font-weight: 600; }
.dfm-v #df-doc-num { color: var(--violet); }

/* ============================================================================
   04½ Pipeline (live, end-to-end)
   ============================================================================ */
.pipeline-picker {
  display: flex; gap: 6px; flex-wrap: wrap;
  margin: var(--gap-4) 0 var(--gap-3);
  padding: 10px 12px;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-pill);
}
.pp-chip {
  padding: 7px 14px; border-radius: var(--r-pill);
  font-family: var(--font-mono); font-size: 12px; font-weight: 500;
  background: var(--paper); color: var(--ink-soft);
  border: 1px solid var(--border-2);
  transition: all var(--motion-fast);
}
.pp-chip:hover { color: var(--ink); border-color: var(--violet); }
.pp-chip.active {
  background: var(--violet); color: var(--paper); border-color: var(--violet);
  box-shadow: 0 0 0 3px rgba(124,58,237,.15);
}

.pipeline-status {
  font-family: var(--font-mono); font-size: 12px; color: var(--muted);
  margin-bottom: var(--gap-4); padding: 8px 12px;
  background: rgba(124,58,237,.04); border-left: 3px solid var(--violet);
  border-radius: 0 var(--r-2) var(--r-2) 0;
}
.pipeline-status .ps-step { color: var(--ink-soft); }
.pipeline-status .ps-step strong { color: var(--violet); }

.pipeline-track {
  display: grid; grid-template-columns: 1fr 1.2fr; gap: var(--gap-3);
}
@media (max-width: 980px) { .pipeline-track { grid-template-columns: 1fr; } }
.pl-stage {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-3); padding: var(--gap-4);
  position: relative; min-height: 120px;
  transition: border-color 240ms ease, box-shadow 240ms ease;
}
.pl-stage.active { border-color: var(--violet); box-shadow: 0 0 0 3px rgba(124,58,237,.12); }
.pl-stage.done   { border-color: rgba(124,58,237,.35); }
.pl-stage-head {
  display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap;
  margin-bottom: var(--gap-3); padding-bottom: 8px;
  border-bottom: 1px dashed var(--border);
}
.pl-num {
  font-family: var(--font-mono); font-size: 11px;
  background: var(--ink); color: var(--paper);
  padding: 3px 8px; border-radius: var(--r-pill);
  font-weight: 700; letter-spacing: .04em;
}
.pl-stage.active .pl-num { background: var(--violet); }
.pl-name { font-family: var(--font-mono); font-size: 13px; color: var(--ink); font-weight: 600; }
.pl-sub { font-size: 11px; color: var(--muted); margin-left: auto; font-style: italic; }
.pl-stage-body { font-size: 13px; color: var(--ink-soft); }
.pl-empty { color: var(--muted); font-style: italic; padding: 10px 0; font-size: 12px; }
.pl-stage-result { grid-column: 1 / -1; }

.pl-extract-row {
  font-family: var(--font-mono); font-size: 13px;
  display: flex; gap: 8px; align-items: center; margin: 8px 0;
}
.pl-extract-row .k { color: var(--muted); min-width: 110px; }
.pl-extract-row .v {
  background: var(--violet-l); color: var(--violet-d);
  padding: 3px 10px; border-radius: var(--r-pill); font-weight: 600;
}

.pl-mini-label {
  display: flex; justify-content: space-between;
  font-family: var(--font-mono); font-size: 11px; color: var(--ink-soft);
  margin-bottom: 6px;
}
.pl-mini-label .muted { color: var(--muted); }
.pl-mini-grid {
  display: grid; grid-template-columns: repeat(16, 1fr);
  gap: 2px; margin-bottom: var(--gap-3);
  padding: 8px; background: var(--paper); border: 1px solid var(--border); border-radius: var(--r-2);
}
.pl-mc {
  aspect-ratio: 1; border-radius: 2px; background: var(--heat-1);
  transition: background 200ms ease, box-shadow 200ms ease, transform 200ms ease;
}
.pl-mc.dim { opacity: .35; }
.pl-mc.hit {
  background: var(--violet);
  box-shadow: 0 0 0 2px var(--amber);
  transform: scale(1.15); z-index: 2;
}
.pl-retrieve-list {
  font-family: var(--font-mono); font-size: 11px; color: var(--muted);
  display: grid; grid-template-columns: 1fr 1fr; gap: 3px 12px;
}
.pl-retrieve-list .it {
  display: flex; gap: 6px; align-items: baseline; padding: 2px 0;
  opacity: 0; animation: fadeInUp 360ms forwards;
}
.pl-retrieve-list .it .id { color: var(--violet); font-weight: 600; cursor: pointer; }
.pl-retrieve-list .it .id:hover { text-decoration: underline; }
.pl-retrieve-list .it .v { color: var(--ink-soft); }
@keyframes fadeInUp { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } }

#pl-inject { display: flex; flex-direction: column; gap: 6px; }
.pl-inject-card {
  background: var(--paper); border: 1px solid var(--border); border-radius: var(--r-2);
  padding: 7px 10px;
  font-family: var(--font-mono); font-size: 11px; color: var(--ink-soft);
  opacity: 0; transform: translateX(-10px);
  animation: slideInLeft 320ms forwards;
}
.pl-inject-card .pid { color: var(--violet); font-weight: 600; }
.pl-inject-card .typ {
  font-size: 10px; color: var(--muted); margin-left: 6px;
  text-transform: uppercase; letter-spacing: .04em;
}
.pl-inject-card .body { color: var(--ink-soft); margin-top: 3px; line-height: 1.45; }
@keyframes slideInLeft { to { opacity: 1; transform: translateX(0); } }

.pl-amp-controls {
  display: flex; align-items: center; gap: 12px; margin-bottom: var(--gap-3);
  padding: 8px 10px; background: var(--paper);
  border: 1px solid var(--border); border-radius: var(--r-2);
}
.pl-amp-controls label {
  font-family: var(--font-mono); font-size: 12px; color: var(--ink);
  display: flex; align-items: center; gap: 8px;
}
.pl-amp-controls #pl-alpha-val {
  background: var(--violet); color: var(--paper);
  padding: 2px 8px; border-radius: var(--r-pill); font-weight: 600; font-size: 11px;
}
.pl-amp-controls input[type=range] { flex: 1; accent-color: var(--violet); }
.pl-amp-row {
  display: flex; align-items: center; gap: 8px; margin: 6px 0;
  font-family: var(--font-mono); font-size: 12px;
}
.pl-amp-label { min-width: 80px; color: var(--ink-soft); font-weight: 500; }
.pl-amp-bar {
  flex: 1; height: 12px; border-radius: var(--r-pill);
  background: var(--border); position: relative; overflow: hidden;
}
.pl-amp-bar > span {
  display: block; height: 100%; width: 0; background: var(--violet);
  transition: width 800ms cubic-bezier(.4,0,.2,1);
}
.pl-amp-bar.random > span { background: var(--ink-soft); }
.pl-amp-val { font-weight: 700; color: var(--ink); min-width: 50px; text-align: right; }
.pl-amp-note { margin-top: 8px; font-size: 11px; }

.pl-verify-grid {
  display: grid;
  grid-template-columns: 50px repeat(10, 1fr);
  grid-template-rows: 24px repeat(10, 1fr);
  gap: 2px;
  font-family: var(--font-mono); font-size: 10px;
  background: var(--paper);
  border: 1px solid var(--border); border-radius: var(--r-2);
  padding: 8px;
}
.pl-vg-corner { background: transparent; }
.pl-vg-collbl, .pl-vg-rowlbl { display: grid; place-items: center; color: var(--muted); padding: 2px; }
.pl-vg-collbl.target, .pl-vg-rowlbl.target { color: var(--violet); font-weight: 700; }
.pl-vg-cell {
  aspect-ratio: 1; display: grid; place-items: center; border-radius: 2px;
  cursor: pointer; transition: transform 160ms ease; position: relative;
}
.pl-vg-cell:hover { transform: scale(1.15); z-index: 3; box-shadow: 0 0 0 1px var(--ink); }
.pl-vg-cell.diag { background: var(--surface); color: var(--muted); }
.pl-vg-cell.in-target-col { box-shadow: 0 -2px 0 var(--amber), 0 2px 0 var(--amber); }
.pl-vg-cell.target-pulse {
  box-shadow: 0 0 0 2px var(--amber);
  animation: pulseCellPipeline 1500ms ease-out 1;
}
@keyframes pulseCellPipeline {
  0%   { box-shadow: 0 0 0 2px var(--amber), 0 0 0 0 rgba(217,119,6,.55); }
  60%  { box-shadow: 0 0 0 2px var(--amber), 0 0 0 14px rgba(217,119,6,.05); }
  100% { box-shadow: 0 0 0 2px var(--amber), 0 0 0 18px rgba(217,119,6,0); }
}
.pl-verify-caption {
  margin-top: 8px; font-size: 11px; color: var(--muted); font-style: italic;
}
.pl-verify-caption strong { color: var(--ink); font-style: normal; }
.pl-verify-grid[data-locked="true"] .pl-vg-cell:not(.in-target-col):not(.diag) { opacity: .55; }

/* ---- Section C: layer progression class-badge ---- */
.lp-badge {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 4px 12px; border-radius: var(--r-pill);
  background: var(--surface); border: 1px solid var(--border);
  font-family: var(--font-mono); font-size: 11px;
}
.lp-badge-k {
  color: var(--muted); text-transform: uppercase; letter-spacing: .06em; font-weight: 600;
}
.lp-badge-v {
  color: var(--violet); font-weight: 700;
}
.lp-badge.fallback .lp-badge-v {
  color: var(--amber);
}
#lp-img {
  transition: opacity 220ms ease;
}
#lp-img.swapping {
  opacity: .35;
}
