/* =====================================================================
   /inspect - the tool window.  Palette: style.css tokens ONLY.
   Desktop: toolbar / [nav | view | details] / chat dock.
   Mobile (<900px): one pane at a time, bottom pane-switcher.
   Nothing here touches any other page (all rules scoped under .ins*).
   ===================================================================== */
.ins-body { overflow: hidden; }                       /* the tool scrolls inside panes */
/* index.js flips .page to display:flex on load (site-wide behaviour). We only
   size it: full viewport, column, so the tool takes everything under the
   site header without being cut off or scrolling the page. */
.ins-body .page { flex-direction:column; height:100dvh; min-height:0; border-radius:0; }
/* Site-wide the .topnav is position:fixed and <header> is a 59px spacer, but
   the bar itself is taller (logo 60px + margins = 68px), so anything that
   starts at 59px sits under it. On this page nothing scrolls, so the bar
   simply lives in the flow: header takes the bar's real height, whatever
   it is at any viewport width, and the tool starts exactly below it. The
   partial has two headers (guest/user); index.js hides one on load and
   .page is display:none until then, so only one ever takes space. */
.ins-body header { flex:0 0 auto; height:auto; }
.ins-body header .topnav { position:static; }
.ins-body header[style*="display: none"], .ins-body header[style*="display:none"] { display:none !important; height:0; }
/* dark, thin scrollbars everywhere in the tool (the default light ones read as a white bar on the dark panes) */
.ins, .ins * { scrollbar-width: thin; scrollbar-color: var(--border-strong) transparent; }
.ins { --tb: 44px; --tabs: 34px; --dock: 240px;
  flex:1 1 auto; display:flex; flex-direction:column; min-height:0;
  background: var(--bg-page); color: var(--text); font-family: var(--font); font-size:13px; }

/* ---------- toolbar ---------- */
.ins-toolbar { min-height:var(--tb); flex:0 0 auto; display:flex; align-items:center; gap:10px; padding:4px 10px; flex-wrap:wrap;
  background: var(--bg-panel); border-bottom:1px solid var(--border); }
.ins-tb-left, .ins-tb-center, .ins-tb-right { display:flex; align-items:center; gap:6px; min-width:0; }
/* right group keeps its natural width (engine picker + play must never be clipped); only the address box shrinks */
.ins-tb-left { flex:1 1 220px; min-width:0; } .ins-tb-center { flex:1 1 320px; min-width:0; justify-content:center; } .ins-tb-right { flex:0 0 auto; justify-content:flex-end; }
/* When the left group is squeezed, the arch chip gives way first (shrink 4x)
   and the file name keeps at least a few characters: before, .ins-file was
   the only shrinkable item (overflow:hidden => min-width 0) and collapsed to
   "l..." at 1366px while the arch text stayed whole. */
.ins-file { font-weight:600; color: var(--text-on-light); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; flex:0 1 auto; min-width:7ch; }
.ins-arch { color: var(--text-dim); font-family: var(--font-mono); font-size:11px; white-space:nowrap; flex:0 4 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; }
.ins-btn { display:inline-flex; align-items:center; gap:6px; height:30px; padding:0 10px; border-radius:6px;
  border:1px solid var(--border); background: var(--bg-page); color: var(--text); font-size:13px; cursor:pointer; white-space:nowrap; text-decoration:none; }
.ins-btn:hover { border-color: var(--accent); }
.ins-btn[disabled] { opacity:.45; cursor:default; }
.ins-btn[disabled]:hover { border-color: var(--border); }
.ins-btn-icon { width:30px; padding:0; justify-content:center; }
.ins-btn-play { background: var(--accent); border-color: var(--accent); color:#fff; font-weight:600; }
.ins-btn-play.is-stop { background: var(--danger); border-color: var(--danger); }   /* the same button is Stop while a whole-program run is in progress */
.ins-btn-play.is-stop:hover { filter: brightness(1.1); }
.ins-btn-play:hover { background: var(--accent-hover); }
.ins-play { font-size:11px; }
/* Toolbar icons: the site's black/grey SVGs drawn white through a filter (the
   pattern style.css uses for .info-icon img). Before this they were masks over
   background-color:currentColor, and a phone browser's forced/auto dark mode
   flips background COLOURS (white -> black) but leaves images alone: the icon
   shapes came out black on the dark toolbar. A background IMAGE + filter is
   immune to that and needs no mask support. */
.ins-ico { width:14px; height:14px; display:inline-block; background: var(--icon) center/contain no-repeat; filter: brightness(0) invert(1); }
.ins-body { color-scheme: dark; }                     /* also tells the browser this page IS dark: no auto-darkening on top of it */
.ins-addrbox { position:relative; display:flex; align-items:center; gap:6px; flex:1; max-width:420px; }
.ins-addr-label { color: var(--text-dim); font-family: var(--font-mono); font-size:11px; border:1px solid var(--border); border-radius:4px; padding:1px 5px; }
.ins-addr { flex:1; min-width:0; height:30px; padding:0 10px; border-radius:6px; border:1px solid var(--border); background: var(--bg-inset);
  color: var(--text); font-family: var(--font-mono); font-size:13px; }
.ins-addr:focus { outline:none; border-color: var(--accent); }
.ins-suggest { position:absolute; top:34px; left:0; right:0; z-index:20; background: var(--bg-elevated); border:1px solid var(--border);
  border-radius:6px; max-height:280px; overflow:auto; box-shadow:0 8px 24px rgba(0,0,0,.5); }
.ins-suggest div { padding:6px 10px; cursor:pointer; font-family: var(--font-mono); font-size:12px; display:flex; justify-content:space-between; gap:10px; }
.ins-suggest div:hover, .ins-suggest div.is-sel { background: var(--bg-hover); }
.ins-suggest .dim { color: var(--text-dim); }
.ins-suggest .ins-sug-head { cursor:default; color: var(--text); font-family: var(--font); font-weight:600; font-size:11.5px; border-bottom:1px solid var(--border-soft); }
.ins-suggest .ins-sug-head:hover { background:transparent; }
.ins-suggest .ins-sug-group { cursor:default; color: var(--text-dim); font-family: var(--font); font-size:10.5px; text-transform:uppercase; letter-spacing:.4px; padding-top:6px; padding-bottom:2px; }
.ins-suggest .ins-sug-group:hover { background:transparent; }
/* I15 unified search (inspect/search.js): kind chips with counts in the head, the scope line, provenance per hit,
   an inline error, "Open all results"; the centre Search view reuses the chips */
.ins-suggest .ins-sug-head { flex-wrap:wrap; align-items:center; justify-content:flex-start; }
.ins-sug-chips { display:inline-flex; flex-wrap:wrap; gap:0; }
.ins-srch-chip { cursor:pointer; background:transparent; font-family: var(--font); }
.ins-srch-chip:hover, .ins-srch-chip.is-on { border-color: var(--accent); color: var(--accent-soft); }
.ins-suggest .ins-sug-scope { cursor:default; display:block; color: var(--text-dim); font-family: var(--font); font-size:11px; padding-top:3px; padding-bottom:3px; }
.ins-suggest .ins-sug-scope:hover, .ins-suggest .ins-sug-err:hover { background:transparent; }
.ins-suggest .ins-sug-err { cursor:default; display:block; color: var(--danger-bright); font-family: var(--font); }
.ins-suggest .ins-sug-all { justify-content:flex-start; color: var(--accent-soft); font-family: var(--font); border-top:1px solid var(--border-soft); }
.ins-sug-prov, .ins-srch-prov { margin-left:8px; padding:0 5px; border:1px solid var(--border); border-radius:4px; font-family: var(--font); font-size:10.5px; color: var(--text-dim); white-space:nowrap; }
.ins-srch-head { display:flex; align-items:center; gap:10px; margin:8px; }
.ins-srch-q { font-family: var(--font-mono); font-size:13px; color: var(--text); overflow-wrap:anywhere; }
.ins-srch-chips, .ins-srch-opts { display:flex; flex-wrap:wrap; align-items:center; gap:4px; margin:4px 8px; }
.ins-srch-opts .dim { color: var(--text-dim); font-size:11px; margin-right:4px; }
.ins-srch-ua { font-size:11px; color: var(--text-dim); margin-left:8px; }
.ins-srch-scope { margin:2px 8px 6px; font-size:11px; color: var(--text-dim); }
.ins-srch-table td:nth-child(2) { overflow-wrap:anywhere; }
.ins-srch-group { margin:10px 8px 2px; font-weight:600; font-size:12.5px; display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.ins-srch-use { margin:1px 8px 1px 24px; font-family: var(--font-mono); font-size:12px; display:flex; align-items:baseline; gap:6px; flex-wrap:wrap; }
.ins-srch-limits { margin:10px 8px; font-size:11px; color: var(--text-dim); }
.ins-srch-limits summary { cursor:pointer; }
/* ROADMAP semantic search: the embed icon right of the G box. Off: normal .ins-btn-icon.
   Busy (embedding): pulses (same @keyframes as a running per-function ▶). On (vectorized):
   accent-filled, like the edit-mode pencil (.ins-pencil.is-active). */
.ins-vecbtn { flex:0 0 auto; }
.ins-vecico { --icon: url('/icons/vector.svg'); }   /* a vector arrow, not the G box's magnifier: this embeds, it does not search */
.ins-vecbtn.is-busy { animation: ins-pulse 1s infinite; }
.ins-vecbtn.is-on { background: var(--accent); border-color: var(--accent); }

/* segmented mode switch (one-shot | context) */
.ins-seg { display:inline-flex; border:1px solid var(--border); border-radius:6px; overflow:hidden; height:30px; }
.ins-segb { border:0; background: var(--bg-page); color: var(--text-dim); padding:0 10px; font-size:12px; cursor:pointer; }
.ins-segb + .ins-segb { border-left:1px solid var(--border); }
.ins-segb.is-active { background: var(--bg-hover); color: var(--text); }
.ins-engine { display:flex; flex-direction:column; gap:4px; }
.ins-decai-context { display:flex; align-items:center; justify-content:space-between; gap:6px; color:var(--text-dim); font-size:11px; cursor:pointer; }
.ins-decai-context[hidden] { display:none; }
.ins-decai-context input { appearance:none; position:relative; width:30px; height:16px; margin:0; border:1px solid var(--border); border-radius:12px; background:var(--bg-hover); cursor:pointer; }
.ins-decai-context input::before { content:''; position:absolute; top:2px; left:2px; width:10px; height:10px; border-radius:50%; background:var(--text); transition:transform .15s; }
.ins-decai-context input:checked { background:var(--accent); border-color:var(--accent); }
.ins-decai-context input:checked::before { transform:translateX(14px); }
.ins-decai-context input:focus-visible { outline:2px solid var(--accent-soft); outline-offset:2px; }
@media (max-width:900px) { .ins-seg { display:none; } }

/* info icon + popover (uses the site's own info.svg) */
.ins-info img { display:inline-block; width:14px; height:14px; opacity:.8; filter: brightness(0) invert(1); }   /* info.svg is black-filled: same filter pattern as the toolbar icons */
.ins-info:hover img { opacity:1; }
.ins-pop { position:absolute; top:44px; right:10px; z-index:30; width:min(520px, calc(100vw - 20px)); padding:12px 14px; border:1px solid var(--border); border-radius:8px; background: var(--bg-elevated); box-shadow:0 10px 30px rgba(0,0,0,.5); font-size:12.5px; line-height:1.55; color: var(--text); }
.ins-pop[hidden] { display:none; }
.ins-pop div + div { margin-top:5px; }
.ins-pop-h { color: var(--text-on-light); font-weight:600; margin-top:8px !important; }
.ins-pop-h:first-child { margin-top:0 !important; }
.ins-pop b { color: var(--accent-soft); }
.ins-pop-muted { color: var(--text-dim); font-size:12px; }
.ins-toolbar { position:relative; }

.ins-cost { display:none; }   /* cost is shown in the credits badge tooltip, not on the button */
/* toolbar stage rows: Per-Program (L0-L4 -> Decompile) over Per-Function (L0/L1/L4 -> the ▶ inside the views).
   L0 is locked on; L1<L2<L3 is a cumulative verify chain; L4 is independent. No tier names. */
.ins-stages { display:flex; flex-direction:column; gap:3px; }
.ins-stage-row { display:flex; align-items:center; gap:6px; height:26px; }
.ins-stage-lbl { font-size:11px; color: var(--text-dim); width:84px; text-align:right; white-space:nowrap; letter-spacing:.2px; }
.ins-seg-stages { height:26px; }
.ins-seg-stages .ins-segb { padding:0 8px; font-size:11px; font-weight:600; min-width:30px; }
.ins-seg-stages .ins-segb.is-active { background: var(--accent); color:#fff; }
.ins-seg-stages .ins-segb.is-active + .ins-segb.is-active { border-left-color: rgba(255,255,255,.35); }
.ins-seg-stages .ins-segb.is-locked { cursor:default; opacity:.9; }
.ins-seg-stages .ins-segb.is-gated:not(.is-active) { color: var(--text-dim); opacity:.55; text-decoration: line-through; }
.ins-stage-row .ins-btn-play { height:26px; padding:0 10px; }
.ins-stage-row .ins-btn-play .ins-cost { display:inline; margin-left:6px; font-weight:500; opacity:.85; font-size:11px; }
.ins-stage-hint { font-size:11px; color: var(--text-dim); white-space:nowrap; }
@media (max-width:900px) { .ins-stages { display:none; } }
/* split action: [▶ Decompile | ▾] - the caret opens "Decompile whole program" (same blue, one pill) */
.ins-dsplit { display:inline-flex; align-items:stretch; }
.ins-dsplit > .ins-btn-play:first-child { border-top-right-radius:0; border-bottom-right-radius:0; }
.ins-dsplit-caret { min-width:22px; padding:0 7px; gap:5px; justify-content:center; border-top-left-radius:0; border-bottom-left-radius:0; border-left:1px solid var(--accent-hover); }
.ins-dsplit-caret > span:last-child { font-size:10px; }
.ins-dsplit-caret[disabled] { opacity:.45; }
.ins-credits { font-size:11.5px; color: var(--text-dim); white-space:nowrap; }
.ins-credits.is-low { color: var(--danger-bright); }
.ins-dtabs { display:flex; gap:4px; padding:6px 10px 0; }
.ins-dtab { border:1px solid var(--border); background: var(--bg-panel); color: var(--text-dim); border-radius:6px 6px 0 0; padding:3px 10px; font-size:12px; cursor:pointer; }
.ins-dtab.is-active { color: var(--text); border-bottom-color: var(--bg-page); background: var(--bg-page); }
.ins-dtab .dot { display:inline-block; width:7px; height:7px; border-radius:50%; margin-right:5px; background: var(--border-strong); }
.ins-dtab.has .dot { background: var(--success); }
@media (max-width:900px) { .ins-credits { display:none; } }

/* ---------- workspace ---------- */
.ins-work { flex:1; display:flex; min-height:0; }
.ins-pane { display:flex; flex-direction:column; min-width:0; min-height:0; background: var(--bg-page); }
.ins-left  { flex:0 0 var(--wl, 280px); border-right:1px solid var(--border); }
.ins-center{ flex:1 1 auto; }
.ins-right { flex:0 0 var(--wr, 300px); border-left:1px solid var(--border); }
.ins-splitter { flex:0 0 4px; cursor:col-resize; background:transparent; }
.ins-splitter:hover, .ins-splitter.is-drag { background: var(--accent); }
.ins-splitter-h { flex:0 0 4px; cursor:row-resize; }

.ins-pane-tabs { height:var(--tabs); flex:0 0 var(--tabs); display:flex; align-items:stretch; gap:0; overflow:hidden; position:relative;
  background: var(--bg-panel); border-bottom:1px solid var(--border); }
.ins-pane-tabs .ins-ptab.is-overflow { display:none; }
.ins-tabmore { flex:0 0 auto; margin-left:auto; padding:0 10px; border:0; background:transparent; color: var(--text-dim); cursor:pointer; font-size:14px; }
.ins-tabmore:hover { color: var(--text); }
.ins-tabmore[hidden] { display:none; }
.ins-ptab { position:relative; flex:0 0 auto; padding:0 12px; border:0; border-bottom:2px solid transparent; background:transparent; color: var(--text-dim);
  font-size:12.5px; cursor:pointer; white-space:nowrap; }
.ins-ptab:hover { color: var(--text); }
.ins-ptab.is-active { color: var(--text); border-bottom-color: var(--accent); }
.ins-ptab:disabled, .ins-ptab:disabled:hover { color: var(--text-dim); opacity:.45; cursor:not-allowed; }   /* a view this file cannot use (setEmulateTab) */
/* a result arrived for this view while another one was open (nav.js flagView); absolute so the dot never changes the tab's width (fitTabs) */
.ins-ptab.has-new::after { content:''; position:absolute; top:7px; right:3px; width:6px; height:6px; border-radius:50%; background: var(--success); }
.ins-view-title { margin-left:auto; padding:0 10px; align-self:center; color: var(--text-dim); font-family: var(--font-mono); font-size:11px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0; }
/* on phones the tab bar has no room: a squeezed title rendered as "_." next to "..." - hide it (the name is in the address box / frame heads) */
@media (max-width:900px) { .ins-view-title { display:none; } }
.ins-view-title.is-squeezed { display:none; }

.ins-search { padding:6px 8px; border-bottom:1px solid var(--border-soft); }
.ins-search input { width:100%; height:28px; padding:0 8px; border-radius:6px; border:1px solid var(--border); background: var(--bg-inset); color: var(--text); font-size:12.5px; }
.ins-search input:focus { outline:none; border-color: var(--accent); }
.ins-list { flex:1; overflow:auto; font-family: var(--font-mono); font-size:12px; outline:none; }
.ins-row { display:flex; align-items:center; gap:8px; padding:4px 8px; cursor:pointer; border-left:2px solid transparent; }
.ins-row:hover { background: var(--bg-hover); }
.ins-row.is-cur { background: var(--bg-hover); border-left-color: var(--accent); }
.ins-row.is-rt .n { color: var(--text-faint); font-style: italic; }
.ins-row .a { color: var(--text-dim); flex:0 0 auto; }
.ins-row .n { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color: var(--text); }
.ins-row .s { color: var(--text-faint); flex:0 0 auto; }
.ins-row .play { flex:0 0 auto; width:20px; height:20px; border-radius:4px; border:1px solid transparent; background:transparent; color: var(--text-dim); font-size:10px; cursor:pointer; display:inline-grid; place-items:center; }
.ins-row .play:hover { color:#fff; background: var(--accent); border-color: var(--accent); }
.ins-row .play.is-done { color: var(--accent-soft); }
.ins-row .play.is-busy { color: var(--danger); }   /* ■ = the run is in flight, click = Stop */
.ins-row .play.is-busy:hover { background: var(--danger); border-color: var(--danger); }
button.play.is-stop { background: var(--danger); border-color: var(--danger); color:#fff; }   /* the Split / Decompiled tab button while its run is in flight */
.ins-row .play.is-busy { animation: ins-pulse 1s infinite; }
@keyframes ins-pulse { 50% { opacity:.3; } }
.ins-pane-foot { flex:0 0 auto; padding:4px 8px; border-top:1px solid var(--border-soft); color: var(--text-dim); font-size:11px; display:flex; gap:8px; align-items:center; }
.ins-pane-foot button { background:transparent; border:1px solid var(--border); color: var(--text-dim); border-radius:4px; padding:1px 6px; cursor:pointer; font-size:11px; }
.ins-pane-foot button[disabled] { opacity:.4; }

.ins-view { flex:1; overflow:hidden; position:relative; outline:none; }
.ins-vpane { position:absolute; inset:0; overflow:auto; }   /* per-render view pane inside .ins-view (renderView); .ins-pane is the layout panes: never restyle it here */
.ins-status { flex:0 0 auto; min-height:22px; padding:2px 10px; border-top:1px solid var(--border-soft); color: var(--text-dim); font-size:11px; font-family: var(--font-mono); display:flex; gap:14px; }
.ins-status .err { color: var(--danger-bright); }
.ins-ctx { flex:1; overflow:auto; padding:8px; font-size:12.5px; }
.ins-loading { padding:14px; color: var(--text-dim); }
.ins-empty { padding:14px; color: var(--text-dim); font-style:italic; }
.ins-empty.ins-fail { color: var(--danger-bright); font-style:normal; word-break:break-word; }   /* decompiled tab: a failed engine run is shown, not disguised as "not run yet" */
.ins-viewnote, .ins-revnote { margin:6px 8px; padding:6px 10px; border-radius:6px; font-size:12px; color: var(--text); background: color-mix(in srgb, var(--warning) 16%, transparent); border:1px solid color-mix(in srgb, var(--warning) 40%, transparent); }   /* a switch landed on another view: why (nav.js emulateBlocked); a result made at another patch revision (views.js revNoteEl, Q02) */
.ins-empty.ins-hint { display:flex; align-items:center; gap:8px; padding-top:0; font-style:normal; }   /* split: "<engine> C available - switch engine" under the empty state */
.ins-btn-sm { height:24px; padding:0 8px; font-size:11.5px; }
.ins-splitpane > .ins-btn-sm { margin:0 14px 10px; }   /* split: "Fetch Ghidra pseudo-C (free)" under the empty state */

/* ---------- disassembly (text view) ---------- */
.ins-dis { font-family: var(--font-mono); font-size:12.5px; line-height:1.55; padding:6px 0; }
/* min-width:max-content so a long line's box (and its hover / is-cur background)
   grows to cover the whole line instead of being capped at the pane width - the
   pane is already horizontally scrollable from the white-space:pre overflow, but
   the row highlight used to stop at the visible edge. Now it extends to the end. */
.ins-dline { display:grid; grid-template-columns: 90px 1fr; padding:0 10px; white-space:pre; cursor:default; min-width:max-content; }
.ins-dline:hover { background: var(--bg-hover); }
.ins-dline.is-cur { background: var(--bg-hover); box-shadow: inset 2px 0 0 var(--accent); }
.ins-dline .ad { color: var(--text-dim); }
.ins-dline .by { color: var(--text-faint); display:none; }
.ins-dline .mn { color: var(--text-code); font-weight:600; display:inline-block; min-width:60px; }
.ins-dline .op { color: var(--text); }
.ins-dline .cm { color: var(--text-dim); margin-left:14px; }
.ins-dline .ann { color: var(--text-dim); margin-left:14px; }                     /* right-hand annotation column (known values / targets), dim */
.ins-dline .ann .ins-xl { color: var(--text-dim); } .ins-dline .ann .ins-xl:hover { color: var(--accent-soft); }
.ins-dline .lbl { color: var(--accent-soft); font-weight:600; }
.ins-dline.is-data .mn { color: var(--success); }                                   /* I01: the user's typed data in the listing (db/dw/dd/dq, strings, pointers) */
.ins-dline.is-undef .mn, .ins-dline.is-undef .op { color: var(--text-faint); }      /* bytes a data item / code mark cut off: not code */
.ins-xoff { color: var(--text-dim); }                                               /* xrefs into a data item: the offset of the referenced byte */
.ins-fnhead { padding:8px 10px 2px; color: var(--accent-soft); font-weight:700; border-top:1px solid var(--border-soft); margin-top:6px; display:flex; align-items:center; gap:8px;
  position:sticky; left:0; top:0; z-index:2; background: var(--bg-page); }        /* pinned: never scrolls away with wide code */
.ins-fnhead:first-child { border-top:0; margin-top:0; }
.ins-fnhead .play, .ins-splithead .play { margin-left:auto; }
.ins-fnhead .ins-fnproto { color: var(--text-dim); font-weight:400; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; min-width:0; }   /* I09: the DWARF prototype after the name */
.ins-fnhead .play + .play { margin-left:4px; }   /* hex view: keep the up/down pair together instead of spreading them across the bar */
/* the ▶ inside view headers is a primary action: same blue as the toolbar button */
.ins-fnhead .play, .ins-splithead .play { width:auto; height:26px; padding:0 10px; border-radius:6px; background: var(--accent); border:1px solid var(--accent); color:#fff; font-size:11px; font-weight:600; display:inline-flex; align-items:center; gap:6px; cursor:pointer; }
.ins-fnhead .play:hover, .ins-splithead .play:hover { background: var(--accent-hover); border-color: var(--accent-hover); }
.ins-splithead { position:sticky; left:0; top:0; z-index:2; }
.ins-xl { color: var(--accent-soft); cursor:pointer; text-decoration:none; }
.ins-xl:hover { text-decoration:underline; }
.ins-more { display:block; width:100%; padding:8px; border:0; background: var(--bg-panel); color: var(--text-dim); cursor:pointer; border-top:1px solid var(--border-soft); }
.ins-more:hover { color: var(--text); }
.ins-view.show-bytes .ins-dline .by { display:inline; }

/* ---------- split view: asm | C ---------- */
.ins-split { position:absolute; inset:0; display:grid; grid-template-columns: minmax(0, var(--split, 50%)) 4px minmax(0, 1fr); }
.ins-split > .ins-splitpane { min-width:0; min-height:0; overflow:auto; display:flex; flex-direction:column; }
.ins-split > .ins-splitpane + .ins-splitgrip { cursor: col-resize; background: var(--border-soft); }
.ins-split > .ins-splitgrip:hover, .ins-split > .ins-splitgrip.is-drag { background: var(--accent); }
.ins-splitpane .ins-dis, .ins-splitpane .ins-code { flex:1; }
.ins-splithead { flex:0 0 auto; display:flex; align-items:center; gap:8px; padding:6px 10px; border-bottom:1px solid var(--border-soft); background: var(--bg-panel); font-size:12px; color: var(--text-dim); }
.ins-splithead .play { margin-left:auto; }
@media (max-width:900px) { .ins-split { grid-template-columns: 1fr; grid-template-rows: 1fr 4px 1fr; } .ins-split > .ins-splitgrip { cursor: row-resize; } }

/* disassembly: one action bar, target tint, optional side C */
.ins-dis { display:flex; flex-direction:column; min-height:100%; }
.ins-disbar { position:sticky; top:0; z-index:3; display:flex; align-items:center; gap:8px; padding:6px 10px; background: var(--bg-panel); border-bottom:1px solid var(--border-soft); }
.ins-disbar-target { flex:1; color: var(--text-dim); font-family: var(--font-mono); font-size:12px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ins-fnblock { border-left:3px solid transparent; }
.ins-fnblock.is-target { border-left-color: var(--accent); background: rgba(27,117,189,.06); }   /* subtle: this is what Decompile acts on */
.ins-fnblock .ins-fnhead { position:static; background:transparent; }
.ins-fnblock .ins-fnhead .play { display:none; }

.ins-splitpane.is-in-split .ins-disbar { padding:4px 8px; }   /* compact in split: target + ▶ + the binary-edit pencil (top-right of the disassembly frame) */
/* continuous listing: units are contiguous address windows loaded lazily at both edges */
.ins-dis-sentinel { height:1px; }
.ins-dgap { cursor:pointer; }
.ins-dgap:hover .cm { color: var(--accent-soft); }

/* ---------- graph view ---------- */
.ins-graph { position:absolute; inset:0; overflow:hidden; background: var(--bg-inset); cursor:grab; touch-action:none; }
.ins-graph.is-drag { cursor:grabbing; }
.ins-graph svg { position:absolute; left:0; top:0; transform-origin:0 0; will-change:transform; }
.ins-gblock rect { fill: var(--bg-panel); stroke: var(--border); stroke-width:1; rx:4; }
.ins-gblock.is-entry rect { stroke: var(--accent); stroke-width:1.5; }
.ins-gblock.is-ret rect { stroke: var(--text-dim); stroke-dasharray:4 3; }
.ins-gblock.is-cur rect { stroke: var(--accent-soft); stroke-width:2; }
.ins-gblock:hover rect { stroke: var(--accent-soft); }
.ins-gblock text { font-family: var(--font-mono); font-size:11.5px; fill: var(--text); pointer-events:none; }
.ins-gblock text.ins-gins { pointer-events:all; cursor:default; }               /* instruction lines are click targets (select the line) */
.ins-gblock rect.ins-gline-cur { fill: var(--bg-hover); stroke: none; rx:2; }    /* the selected instruction inside a block */
.ins-gblock:focus { outline:none; }
.ins-gblock .gh { fill: var(--accent-soft); font-weight:700; }
.ins-gblock .gc { fill: var(--text-code); }
.ins-gblock .gcall { fill: var(--accent-soft); text-decoration:underline; pointer-events:all; cursor:pointer; }
.ins-gedge { fill:none; stroke-width:1.4; pointer-events:visibleStroke; cursor:pointer; }
.ins-gedge.taken { stroke: var(--accent); } .ins-gedge.fall { stroke: var(--text-dim); } .ins-gedge.back { stroke: var(--success); } .ins-gedge.ext { stroke: var(--text-faint); stroke-dasharray:4 3; }
.ins-garrow.taken { fill: var(--accent); } .ins-garrow.fall { fill: var(--text-dim); } .ins-garrow.back { fill: var(--success); } .ins-garrow.ext { fill: var(--text-faint); }
/* leaving the function / graph: tail call (dashed accent), unresolved indirect (dashed warning), data pointer (dotted) */
.ins-gedge.tail { stroke: var(--accent-soft); stroke-dasharray:6 3; } .ins-garrow.tail { fill: var(--accent-soft); }
.ins-gedge.ind { stroke: var(--danger-bright); stroke-dasharray:3 3; } .ins-garrow.ind { fill: var(--danger-bright); }
.ins-gedge.wrap { stroke: var(--success); stroke-dasharray:6 3; } .ins-garrow.wrap { fill: var(--success); }   /* wrapper patch: out to the block and back */
.ins-gedge.data { stroke: var(--text-dim); stroke-dasharray:1.5 3; stroke-linecap:round; } .ins-garrow.data { fill: var(--text-dim); }
.ins-glegend i.is-dot { height:0; border-top:2px dotted var(--text-dim); }
.ins-gedge.is-hot, .ins-gedge.is-sel { stroke-width:2.6; }                        /* hovered edge / edges of the selected block */
.ins-gedge.is-hot { filter: drop-shadow(0 0 2px var(--accent-soft)); }
.ins-gblock.is-hot rect { stroke: var(--accent-soft); stroke-width:1.5; }         /* endpoints of the hovered edge */
.ins-ghud { position:absolute; right:10px; top:10px; display:flex; flex-direction:column; gap:4px; z-index:5; }
.ins-ghud button { width:30px; height:30px; border-radius:6px; border:1px solid var(--border); background: var(--bg-panel); color: var(--text); cursor:pointer; }
.ins-ghud button:hover { border-color: var(--accent); }
.ins-gcrumbs { position:absolute; left:10px; top:10px; z-index:5; display:flex; gap:4px; flex-wrap:wrap; max-width:60%; }
.ins-gcrumbs button { border:1px solid var(--border); background: var(--bg-panel); color: var(--text-dim); border-radius:6px; padding:3px 8px; font-size:11px; font-family: var(--font-mono); cursor:pointer; }
.ins-gcrumbs button:last-child { color: var(--text); border-color: var(--accent); }
.ins-gminimap { position:absolute; right:10px; bottom:10px; z-index:5; border:1px solid var(--border); background: rgba(0,0,0,.35); border-radius:4px; }
/* The minimap is an <svg> inside .ins-graph, so the pan/zoom rule above
   (.ins-graph svg { left:0; top:0; will-change }) also matched it and pinned
   it to the top-left corner over the breadcrumbs, the entry block and the
   rails. Anchor it bottom-right explicitly and cap a tall graph's minimap
   (its height scales with the CFG's aspect ratio). */
.ins-graph svg.ins-gminimap { left:auto; top:auto; right:10px; bottom:10px; transform:none; will-change:auto; max-height:min(160px, 35%); }   /* 35%: never climbs into the +/- HUD on a short pane */
.ins-glegend { position:absolute; left:10px; bottom:8px; z-index:5; font-size:11px; color: var(--text-dim); display:flex; gap:12px; padding:3px 8px; border-radius:6px; border:1px solid var(--border); background: color-mix(in srgb, var(--bg-panel) 92%, transparent); }   /* an opaque bar: graph text under it (short pane, a stub label near the bottom) never bleeds through */
.ins-glegend i { display:inline-block; width:14px; height:2px; vertical-align:middle; margin-right:4px; }
.ins-glegend i.is-dash { height:0; border-top:2px dashed var(--text-dim); }
.ins-gedge.is-ref { stroke-dasharray:5 4; }
/* stub labels (tail call: f / ? indirect / jump-out target): a small opaque pill
   so they stay readable where the only free spot crosses an edge; mono text, so
   the width estimate in stubLabelPos (collision avoidance) holds. Coloured like
   their edge, no stroke (an edge stroke on glyphs made them fuzzy). */
.ins-gstub rect { fill: var(--bg-inset); stroke: var(--border); stroke-width:1; }
.ins-gstub text.ins-glabel { font-family: var(--font-mono); font-size:10px; fill: var(--text-faint); pointer-events:none; }
.ins-gstub.tail text.ins-glabel { fill: var(--accent-soft); } .ins-gstub.ind text.ins-glabel { fill: var(--danger-bright); }
.ins-gstub.tail, .ins-gstub.ext { cursor:pointer; } .ins-gstub.tail:hover rect, .ins-gstub.ext:hover rect { stroke: var(--accent); }
/* call graph nodes: hover + selected affordance (click = select, double-click = open) */
.ins-cg .ins-gblock { cursor:pointer; }
.ins-cg .ins-gblock:hover rect { fill: var(--bg-hover); stroke: var(--accent-soft); stroke-width:1.5; }
.ins-cg .ins-gblock.is-cur rect { fill: var(--bg-hover); stroke: var(--accent-soft); stroke-width:2; }
.ins-cg .ins-gblock.is-cur text { fill: var(--text-on-light); }
.ins-cg .ins-gblock.is-cur.is-entry rect { stroke: var(--accent); }
.ins-glegend { align-items:center; flex-wrap:wrap; }
.ins-gpage { border:1px solid var(--border-strong); background: var(--bg-elevated); color: var(--accent); border-radius:4px; padding:2px 8px; font-size:11px; cursor:pointer; }
.ins-gpage:hover { border-color: var(--accent); }

/* callers/callees rails on the graph */
.ins-grail { position:absolute; left:10px; bottom:38px; z-index:5; display:flex; gap:12px; max-width:min(60%, 520px); padding:8px 10px; border:1px solid var(--border); border-radius:8px; background: color-mix(in srgb, var(--bg-panel) 92%, transparent); backdrop-filter: blur(2px); }   /* same opaque bar as the legend: block text does not shine through the call lists */
.ins-grail-col { display:flex; flex-direction:column; gap:3px; max-height:26vh; overflow:auto; min-width:120px; }
.ins-grail-col > * { flex-shrink:0; }   /* long call lists scroll instead of squashing the buttons into slivers */
.ins-grail-h { font-size:11px; color: var(--text-dim); font-weight:600; }
.ins-grail-col button { border:1px solid var(--border); background: var(--bg-panel); color: var(--accent-soft); border-radius:6px; padding:2px 8px; font-size:11px; font-family: var(--font-mono); cursor:pointer; text-align:left; max-width:220px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ins-grail-col button:hover { border-color: var(--accent); }
.ins-grail-col button.is-ext { border-style:dashed; }   /* import: dashed like its node in the call graph, otherwise the same link (opens the PLT stub / GOT slot + xrefs) */
.ins-grail-empty { font-size:11px; color: var(--text-faint); }
@media (max-width:900px) { .ins-grail { display:none; } }

/* ---------- decompiled / hex / tables ---------- */
.ins-code { margin:0; padding:10px 14px; font-family: var(--font-mono); font-size:12.5px; line-height:1.5; white-space:pre; color: var(--text-code); }
.ins-code .kw { color: var(--accent-soft); } .ins-code .cm { color: var(--text-dim); } .ins-code .st { color: var(--text-muted); } .ins-code .nu { color: var(--accent-soft); }
/* inline click-to-edit tokens (menu.js wrapCTokens / bindCPre): a name (rename), a declaration's
   type (retype) or a literal / member / return type (rewritten in your own C). One hover
   affordance for all three - no marker character is ever added to the rendered C text. */
.ins-code .ins-ctok { cursor:pointer; border-radius:2px; }
.ins-code .ins-ctok:hover { text-decoration:underline dotted; text-underline-offset:2px; background: var(--bg-hover); }
.ins-code .ins-ctok.is-type.has-type { text-decoration:underline dotted; text-underline-offset:2px; text-decoration-color: var(--accent-soft); }   /* a type you set yourself */
.ins-code .ins-ctok.is-raw:hover { background: color-mix(in srgb, var(--accent) 14%, transparent); }                                              /* touches the stored C, not an overlay */
.ins-hexline { display:grid; grid-template-columns: 90px 1fr 140px; padding:0 10px; font-family: var(--font-mono); font-size:12.5px; line-height:1.5; white-space:pre; }
.ins-hexline:hover { background: var(--bg-hover); }
.ins-hexline .ad { color: var(--text-dim); } .ins-hexline .hx { color: var(--text); } .ins-hexline .as { color: var(--text-code); }
.ins-hexline .hx b { color: var(--accent-soft); font-weight:600; }
.ins-table { width:100%; border-collapse:collapse; font-family: var(--font-mono); font-size:12px; }
.ins-table th { position:sticky; top:0; background: var(--bg-panel); color: var(--text-dim); text-align:left; padding:6px 8px; border-bottom:1px solid var(--border); font-weight:600; white-space:nowrap; }
.ins-table td { padding:4px 8px; border-bottom:1px solid var(--border-soft); white-space:nowrap; }
.ins-table tr.is-click { cursor:pointer; } .ins-table tr.is-click:hover td { background: var(--bg-hover); }
.ins-kv { display:grid; grid-template-columns:max-content 1fr; gap:3px 12px; margin:6px 0 12px; }
.ins-kv dt { color: var(--text-dim); } .ins-kv dd { margin:0; word-break:break-all; }
.ins-h { color: var(--text-on-light); font-weight:600; margin:10px 0 4px; font-size:12.5px; }
.ins-chip { display:inline-block; padding:1px 6px; border-radius:999px; border:1px solid var(--border); color: var(--text-dim); font-size:11px; margin:2px 4px 2px 0; }
.ins-chip.ok { border-color: var(--accent); color: var(--accent-soft); }
.ins-cards { display:grid; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:10px; padding:12px; }
/* min-width:0 -- a grid item defaults to min-width:auto, so it can never shrink below its
   own content: one long unbreakable string (a reasons list, a NEEDED line) would stretch
   the card straight over its neighbour instead of wrapping inside it. */
.ins-card { border:1px solid var(--border-code); background: var(--bg-inset); border-radius:8px; padding:10px 12px; min-width:0; }
.ins-card.is-wide { grid-column:1 / -1; }   /* cards holding a full table get the whole row, not a 260px track */
/* Unpack tab: unlike the nowrap listing tables (functions/strings/sections), these carry
   prose, so they wrap inside the card and scroll only if a row still cannot fit. */
.ins-card .ins-table { table-layout:fixed; }
.ins-card .ins-table td { white-space:normal; overflow-wrap:anywhere; vertical-align:top; }
.ins-card .ins-table td.ins-num { white-space:nowrap; }
.ins-tablewrap { overflow-x:auto; }
.ins-card h4 { margin:0 0 6px; font-size:12.5px; color: var(--text-on-light); }
.ins-ent { display:inline-block; width:60px; height:7px; border-radius:4px; background: var(--border-soft); vertical-align:middle; margin-right:6px; overflow:hidden; }
.ins-ent i { display:block; height:100%; background: var(--accent); }
.ins-notes textarea, .ins-notes input { width:100%; box-sizing:border-box; border:1px solid var(--border); border-radius:6px; background: var(--bg-inset); color: var(--text); padding:6px 8px; font-family: var(--font-mono); font-size:12px; }
.ins-notes textarea { min-height:70px; resize:vertical; }
.ins-notes label { display:block; color: var(--text-dim); margin:8px 0 3px; }
.ins-structrec .ins-structfields td.mono { font-family: var(--font-mono); font-size: 12px; }
.ins-structrec .ins-structfields input { width: 100%; }
.ins-structrec-row { display: flex; gap: 10px; align-items: center; margin: 8px 0; }
.ins-crowdbadge { font-size: 10px; padding: 0 5px; border-radius: 8px; background: color-mix(in srgb, var(--warning) 22%, transparent); color: var(--text); margin-left: 6px; }
.ins-crowd .ins-check { display: flex; gap: 8px; align-items: center; margin: 8px 0; }
.ins-loadspec { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 12px; }
.ins-loadspec label { display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--text-dim); }
.ins-loadspec label.ins-check { flex-direction: row; align-items: center; gap: 8px; }
.ins-loadspec .ins-wide { grid-column: 1 / -1; }
.ins-flowedit .ins-wide { grid-column: 1 / -1; margin: 0; }   /* I02/I05 flow-repair dialogs (inspect/flowedit.js) */
.ins-loadspec textarea { font-family: var(--font-mono); font-size: 12px; min-height: 72px; }
.ins-diff-body { padding: 8px; overflow: auto; }
.ins-diff-filters { display: flex; gap: 6px; margin-bottom: 8px; flex-wrap: wrap; }
.ins-diff-table tr.is-sel td { background: color-mix(in srgb, var(--accent) 14%, transparent); }
.ins-diff-rows td.mono { font-family: var(--font-mono); font-size: 12px; white-space: pre; }
.ins-diff-rows td.ad { color: var(--text-faint); font-family: var(--font-mono); font-size: 11px; }
.ins-diff-rows tr.op-replace td { background: color-mix(in srgb, var(--accent) 12%, transparent); }
.ins-diff-rows tr.op-insert td:nth-child(n+3) { background: color-mix(in srgb, var(--success) 14%, transparent); }
.ins-diff-rows tr.op-delete td:nth-child(-n+2) { background: color-mix(in srgb, var(--danger-bright) 12%, transparent); }
.ins-diff-c { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 10px; }
/* I14 match quality: a pair's confidence (exact / heuristic basis, reason in the tooltip) and the ambiguous groups */
.ins-conf { display:inline-block; padding:0 6px; border-radius:999px; border:1px solid var(--success); color: var(--success); font-size:11px; white-space:nowrap; }
.ins-conf.is-heur { border-color: var(--accent); color: var(--accent-soft); }
.ins-conf.is-low { border-color: var(--warning); color: var(--warning); }
.ins-amb td { vertical-align: top; }
.ins-amb-fn.is-click { cursor: pointer; }
.ins-amb-fn.is-click:hover { text-decoration: underline; }
.ins-xfer:empty { display: none; }
.ins-xfer { padding: 8px; border-bottom: 1px solid var(--border); max-height: 60vh; overflow: auto; }
.ins-xfer-scope { margin: 4px 0 8px; }
.ins-xfer-table td { vertical-align: top; }
.ins-xfer-row.is-conflict td { background: color-mix(in srgb, var(--warning) 10%, transparent); }
.ins-xfer-row.is-ambiguous td { background: color-mix(in srgb, var(--warning) 6%, transparent); }
.ins-xfer-go { cursor: pointer; color: var(--accent-soft); }
.ins-xfer-go:hover { text-decoration: underline; }
.ins-xfer-pick { margin-left: 4px; max-width: 220px; }
.ins-xfer-skipped { margin-top: 8px; color: var(--text-dim); font-size: 12px; }
.ins-xfer-actions { margin-top: 8px; display: flex; gap: 8px; align-items: center; }
.ins-xfer-status { white-space: pre-wrap; font-size: 12.5px; margin: 4px 0; }
.ins-xfer-status:empty { display: none; }
.ins-xfer-status.is-busy { color: var(--accent-soft); }
.ins-xfer-status.is-ok { color: var(--success); }
.ins-xfer-status.is-err { color: var(--danger-bright); }
.ins-xfer-history { margin-top: 10px; display: flex; flex-direction: column; gap: 4px; font-size: 12.5px; }
.ins-xfer-hrow { display: flex; gap: 8px; align-items: center; }
.ins-dim { color: var(--text-faint); font-size: 11px; }
.ins-rcmt { color: var(--text-dim); font-style: italic; }   /* #17 repeatable comment at a reference site */
.ins-code .cl.has-asm { cursor:pointer; }   /* issue 127: a pseudocode line that maps to instructions */
.ins-code .cl.is-sync { background: color-mix(in srgb, var(--accent) 18%, transparent); outline:1px solid var(--accent-soft); }
.ins-dline.is-sync { background: color-mix(in srgb, var(--accent) 18%, transparent); }
.ins-hextype { display:flex; gap:12px; padding:1px 8px 3px; font-family: var(--font-mono); font-size:12px; color: var(--success); cursor:pointer; }   /* Epic E2: decoded user-defined data under its hex row */
.ins-hextype .ad { color: var(--text-faint); }
.ins-types-hdr { width:100%; min-height:160px; font-family: var(--font-mono); font-size:12px; resize:vertical; }   /* Epic E: the binary's type header */
.ins-types-err { color: var(--danger-bright); font-family: var(--font-mono); font-size:11.5px; white-space:pre-wrap; margin:6px 0; }
.ins-types-err:empty { display:none; }
.ins-types-err .ins-types-conflicts { margin-top:6px; color: var(--text-dim); }   /* Q17: a refused header's conflicts with the type libraries, collapsed below its own errors */
.ins-types-err .ins-types-conflicts > summary { cursor:pointer; color: var(--warning); }
.ins-types-kept { color: var(--text-dim); font-size:11.5px; margin:6px 0; font-family: var(--font); white-space:normal; }   /* the saved (last valid) types stay in use */
.ins-types-note { color: var(--text-dim); font-family: var(--font-mono); font-size:11.5px; white-space:pre-wrap; margin:6px 0 10px; }   /* I09: what the last header import resolved / skipped */
.ins-applied { white-space:nowrap; font-size:11px; }   /* I09: where a type / prototype is applied */
.ins-applied.is-ghidra { color: var(--success); }
.ins-applied.is-display { color: var(--text-dim); }
.ins-applied.is-not { color: var(--danger-bright); }
.ins-types-filter { width:100%; margin:4px 0 6px; }
.ins-notes .ins-btn { margin-top:6px; }

/* ---------- Emulate tab (ROADMAP items 130/132, Epic D): inspect/emulate.js ---------- */
.ins-emu { display:flex; flex-direction:column; min-height:100%; }
.ins-emu-controls { display:flex; align-items:flex-end; flex-wrap:wrap; gap:10px; padding:10px 12px; border-bottom:1px solid var(--border-soft); background: var(--bg-panel); }
.ins-emu-target { font-family: var(--font-mono); font-size:12px; color: var(--text-dim); align-self:center; margin-right:auto; }
.ins-emu-field { display:flex; flex-direction:column; gap:2px; font-size:11px; color: var(--text-dim); }
.ins-emu-field .lbl { text-transform:uppercase; letter-spacing:.3px; font-size:10px; }
.ins-emu-args, .ins-emu-abi, .ins-emu-maxinsns { height:28px; padding:0 8px; border-radius:6px; border:1px solid var(--border); background: var(--bg-inset); color: var(--text); font-family: var(--font-mono); font-size:12px; }
.ins-emu-args { width:180px; } .ins-emu-maxinsns { width:100px; }
.ins-emu-args:focus, .ins-emu-abi:focus, .ins-emu-maxinsns:focus { outline:none; border-color: var(--accent); }
.ins-emu-result { padding:12px; display:flex; flex-direction:column; gap:10px; }
/* banner colour by stopped_reason kind: ok = returned/breakpoint (green), warn = the emulator
   honestly hit an OS/memory boundary (syscall/unmapped/invalid_insn/watchpoint, amber), neutral
   = just a budget (insn_budget/step_limit/timeout, dim), error = ok:false / unclassified (red) */
.ins-emu-banner { padding:8px 12px; border-radius:8px; font-family: var(--font-mono); font-size:12.5px; border:1px solid var(--border); }
.ins-emu-banner.is-ok { border-color: var(--success); color: var(--success); background: color-mix(in srgb, var(--success) 10%, transparent); }
.ins-emu-banner.is-warn { border-color: var(--warning); color: var(--warning); background: color-mix(in srgb, var(--warning) 10%, transparent); }
.ins-emu-banner.is-neutral { border-color: var(--border); color: var(--text-dim); background: var(--bg-inset); }
.ins-emu-banner.is-error { border-color: var(--danger-bright); color: var(--danger-bright); background: color-mix(in srgb, var(--danger-bright) 10%, transparent); }
.ins-emu-trunc { font-size:11px; color: var(--text-dim); font-style:italic; }
/* a rejected / failed run: the field that caused it, and the previous result greyed under the error */
.ins-emu [aria-invalid="true"] { border-color: var(--danger-bright); }
.ins-emu-fielderr { font-size:11px; color: var(--danger-bright); text-transform:none; letter-spacing:0; max-width:260px; }
.ins-emu-prev { display:flex; flex-direction:column; gap:10px; opacity:.55; filter:grayscale(.8); }
.ins-emu-prev-head { font-size:12px; color: var(--text-dim); font-style:italic; }
.ins-emu-stepper { display:flex; align-items:center; gap:8px; }
.ins-emu-range { flex:1; min-width:80px; accent-color: var(--accent); }
.ins-emu-steplabel { font-family: var(--font-mono); font-size:11.5px; color: var(--text-dim); white-space:nowrap; }
.ins-emu-regs { display:grid; grid-template-columns:repeat(auto-fill,minmax(110px,1fr)); gap:4px 10px; font-family: var(--font-mono); font-size:12px; }
.ins-emu-reg { display:flex; justify-content:space-between; gap:6px; padding:2px 4px; border-radius:4px; }
.ins-emu-reg .n { color: var(--text-dim); }
.ins-emu-reg.is-changed { background: color-mix(in srgb, var(--accent) 18%, transparent); }
.ins-emu-reg.is-changed .n, .ins-emu-reg.is-changed .v { color: var(--accent-soft); font-weight:600; }
.ins-emu-flags { display:flex; flex-wrap:wrap; gap:4px; }
.ins-emu-stack { font-family: var(--font-mono); font-size:12px; max-height:220px; overflow:auto; }
.ins-emu-stackrow { display:flex; justify-content:space-between; gap:10px; padding:2px 0; border-bottom:1px solid var(--border-soft); }
.ins-emu-stackrow .a { color: var(--text-dim); }
.ins-emu-insns { font-family: var(--font-mono); font-size:12px; max-height:340px; overflow:auto; }
.ins-emu-iline { display:flex; gap:8px; padding:2px 8px; cursor:pointer; border-left:3px solid transparent; white-space:pre; }
.ins-emu-iline:hover { background: var(--bg-hover); }
.ins-emu-iline .ad { color: var(--text-dim); }
.ins-emu-iline .mn { color: var(--text-code); font-weight:600; min-width:56px; display:inline-block; }
.ins-emu-iline.is-bp { border-left-color: var(--danger-bright); }
.ins-emu-iline.is-bp .ad::before { content:"● "; color: var(--danger-bright); }
.ins-emu-iline.is-cur { background: var(--bg-hover); box-shadow: inset 2px 0 0 var(--accent); }

/* ---------- emu: "Initial state" panel (input memory / register overrides / skip calls /
   read-back windows) -- collapsed by default so the common "just run it" case stays simple */
/* Scripting SDK panel (ROADMAP 163): collapsible code editor + results, same
   collapse/toggle idiom as the initial-state panel above. */
.ins-emu-script { border-bottom:1px solid var(--border-soft); background: var(--bg-panel); }
.ins-emu-script-toggle { margin:8px 12px; background:transparent; border-color:transparent; color: var(--text-dim); }
.ins-emu-script-toggle:hover { border-color: var(--border); color: var(--text); }
.ins-emu-script-body { display:none; flex-direction:column; gap:10px; padding:0 12px 12px; }
.ins-emu-script-body.is-open { display:flex; }
.ins-emu-script-hint { font-size:11.5px; color: var(--text-dim); }
.ins-emu-script-ta { width:100%; box-sizing:border-box; font-family: var(--font-mono); font-size:12.5px; line-height:1.5; tab-size:4; resize:vertical; min-height:220px; padding:10px 12px; border:1px solid var(--border-code); border-radius:8px; background: var(--bg-inset); color: var(--text); }
.ins-emu-script-ctrls { display:flex; align-items:flex-end; flex-wrap:wrap; gap:10px; }
.ins-emu-script-lib { display:flex; flex-direction:column; gap:6px; }
.ins-scriptlib-bar { display:flex; align-items:flex-end; flex-wrap:wrap; gap:8px; }
.ins-scriptlib { max-height: 220px; overflow:auto; border:1px solid var(--border); border-radius:6px; background: var(--bg-inset); font-size:12px; }
.ins-scriptlib-cat { position:sticky; top:0; padding:4px 8px; font-size:11px; text-transform:uppercase; letter-spacing:.04em; color: var(--text-dim); background: var(--bg-panel); border-bottom:1px solid var(--border-soft); }
.ins-scriptlib-row { display:grid; grid-template-columns: minmax(140px, 1fr) 2fr auto; gap:10px; padding:5px 8px; cursor:pointer; border-bottom:1px solid var(--border-soft); align-items:baseline; }
.ins-scriptlib-row:hover, .ins-scriptlib-row:focus-visible { background: var(--bg-hover); outline:none; }
.ins-scriptlib-row.is-sel { background: color-mix(in srgb, var(--accent) 14%, transparent); }
.ins-scriptlib-name { color: var(--text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ins-scriptlib-desc { color: var(--text-dim); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ins-scriptlib-src { font-size:10px; color: var(--text-faint); }
@media (max-width: 560px) { .ins-scriptlib-row { grid-template-columns: 1fr auto; } .ins-scriptlib-desc { display:none; } }
.ins-emu-script-libnote { font-size:11px; color: var(--text-dim); align-self:center; }
.ins-emu-script-out { display:flex; flex-direction:column; gap:10px; }
.ins-emu-script-annot { font-size:11.5px; color: var(--success); }
.ins-emu-script-annot.is-warn { color: var(--warning); cursor:help; }
.ins-emu-script-banner { padding:8px 12px; border-radius:8px; font-family: var(--font-mono); font-size:12.5px; border:1px solid var(--border); overflow-wrap:anywhere; }
.ins-emu-script-banner.is-ok { border-color: var(--success); color: var(--success); background: color-mix(in srgb, var(--success) 10%, transparent); }
.ins-emu-script-banner.is-neutral { border-color: var(--border); color: var(--text-dim); background: var(--bg-inset); }
.ins-emu-script-banner.is-error { border-color: var(--danger-bright); color: var(--danger-bright); background: color-mix(in srgb, var(--danger-bright) 10%, transparent); }
.ins-emu-script-kv { display:grid; grid-template-columns:max-content 1fr; gap:2px 12px; font-family: var(--font-mono); font-size:12px; }
.ins-emu-script-kv .k { color: var(--text-dim); }
.ins-emu-script-kv .v { color: var(--text-on-light); overflow-wrap:anywhere; }
/* a list / dict a script emitted: indented JSON with a copy button, folded behind its first line when long */
.ins-emu-sval { position:relative; min-width:160px; }
.ins-emu-svalpre { margin:0; padding:6px 52px 6px 8px; background: var(--bg-inset); border:1px solid var(--border-soft); border-radius:6px; font-family: var(--font-mono); font-size:12px; white-space:pre; overflow:auto; max-height:320px; }
.ins-emu-svalfold > summary { cursor:pointer; color: var(--text-dim); padding-right:52px; }
.ins-emu-script-table { width:100%; border-collapse:collapse; font-family: var(--font-mono); font-size:12px; }
.ins-emu-script-table th { text-align:left; color: var(--text-dim); font-weight:600; border-bottom:1px solid var(--border-soft); padding:3px 10px 3px 0; }
.ins-emu-script-table td { color: var(--text-on-light); padding:2px 10px 2px 0; border-bottom:1px solid var(--border-soft); white-space:nowrap; }
.ins-emu-script-more { margin-top:6px; font-size:11px; color: var(--text-dim); font-style:italic; }
.ins-emu-script-file { font-family: var(--font-mono); font-size:12px; color: var(--text-on-light); }
.ins-emu-script-log pre { margin:0; font-family: var(--font-mono); font-size:12px; white-space:pre-wrap; overflow-wrap:anywhere; color: var(--text-on-light); max-height:240px; overflow:auto; }
.ins-emu-initial { border-bottom:1px solid var(--border-soft); background: var(--bg-panel); }
.ins-emu-initial-toggle { margin:8px 12px; background:transparent; border-color:transparent; color: var(--text-dim); }
.ins-emu-initial-toggle:hover { border-color: var(--border); color: var(--text); }
.ins-emu-initial-body { display:none; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:10px; padding:0 12px 12px; }
.ins-emu-initial-body.is-open { display:grid; }
.ins-emu-iosec { border:1px solid var(--border-code); background: var(--bg-inset); border-radius:8px; padding:10px 12px; min-width:0; }
.ins-emu-iosec h5 { margin:0 0 4px; font-size:12px; color: var(--text-on-light); }
.ins-emu-iohint { font-size:11px; color: var(--text-dim); margin-bottom:8px; }
.ins-emu-iolist { display:flex; flex-direction:column; gap:6px; margin-bottom:8px; }
.ins-emu-ioempty { font-size:11.5px; color: var(--text-dim); font-style:italic; }
.ins-emu-iorow { display:flex; align-items:flex-end; flex-wrap:wrap; gap:6px; }
.ins-emu-iorow .ins-emu-iorm { margin-left:auto; }
.ins-emu-io-addr, .ins-emu-io-mode, .ins-emu-io-bytes, .ins-emu-io-name, .ins-emu-io-value, .ins-emu-io-len {
  height:26px; padding:0 7px; border-radius:6px; border:1px solid var(--border); background: var(--bg-page); color: var(--text); font-family: var(--font-mono); font-size:11.5px; }
.ins-emu-io-addr { width:110px; } .ins-emu-io-bytes { width:150px; } .ins-emu-io-name { width:70px; } .ins-emu-io-value { width:100px; } .ins-emu-io-len { width:90px; }
.ins-emu-io-addr:focus, .ins-emu-io-mode:focus, .ins-emu-io-bytes:focus, .ins-emu-io-name:focus, .ins-emu-io-value:focus, .ins-emu-io-len:focus { outline:none; border-color: var(--accent); }
.ins-emu-io-arrow { font-size:10.5px; color: var(--text-dim); align-self:center; padding-bottom:5px; }
.ins-emu-ioadd { color: var(--accent-soft); }

/* ---------- emu: input-memory write warnings + the memory read-back pane (the payoff of
   writes+reads -- e.g. a decrypted plaintext buffer). Same hex/ascii convention as the hex view. */
.ins-emu-writeinfo { display:flex; flex-direction:column; gap:4px; }
.ins-emu-writenote { font-family: var(--font-mono); font-size:11.5px; color: var(--text-dim); }
.ins-emu-writenote.is-warn { color: var(--warning); }
.ins-emu-mem { border-color: var(--accent); }
.ins-emu-mem h4 { color: var(--accent-soft); }
.ins-emu-memblock + .ins-emu-memblock { margin-top:10px; padding-top:10px; border-top:1px solid var(--border-soft); }
.ins-emu-memhead { display:flex; align-items:baseline; gap:10px; margin-bottom:4px; flex-wrap:wrap; }
.ins-emu-memaddr { font-family: var(--font-mono); font-size:12px; font-weight:600; color: var(--text); }
.ins-emu-memnote { font-size:11px; color: var(--warning); }
.ins-emu-memline { display:grid; grid-template-columns:90px 1fr 140px; padding:1px 0; font-family: var(--font-mono); font-size:12.5px; line-height:1.5; white-space:pre; }
.ins-emu-memline .ad { color: var(--text-dim); } .ins-emu-memline .hx { color: var(--text); } .ins-emu-memline .as { color: var(--text-code); }

/* ---------- chat dock ---------- */
.ins-dock { flex:0 0 var(--dock); display:flex; flex-direction:column; min-height:0; background: var(--bg-panel); border-top:1px solid var(--border); }
.ins-dock.is-collapsed { flex: 0 0 34px !important; }   /* must beat the shorthand + any inline --dock */
.ins-splitter-h { min-height:4px; }
.ins-dock.is-collapsed .ins-dock-msgs, .ins-dock.is-collapsed .ins-dock-form { display:none; }
.ins-dock-head { height:34px; flex:0 0 34px; display:flex; align-items:center; gap:10px; padding:0 10px; border-bottom:1px solid var(--border-soft); font-weight:600; }
.ins-dock-hint { color: var(--text-dim); font-weight:400; font-size:11px; flex:1; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ins-dock-msgs { flex:1; overflow:auto; padding:8px 10px; display:flex; flex-direction:column; gap:8px; }
.ins-msg { max-width:min(760px,96%); padding:8px 10px; border-radius:8px; border:1px solid var(--border-code); background: var(--bg-inset); font-size:13px; line-height:1.5; white-space:pre-wrap; word-break:break-word; }
.ins-msg.me { align-self:flex-end; background: var(--bg-page); border-color: var(--border); }
.ins-msg.ai { align-self:flex-start; }
.ins-msg.sys { align-self:center; color: var(--text-dim); font-size:11.5px; border:0; background:transparent; }
.ins-msg pre { margin:6px 0 0; padding:8px; background: var(--bg-inset-alt); border:1px solid var(--border-code); border-radius:6px; overflow:auto; font-family: var(--font-mono); font-size:12px; white-space:pre; }
.ins-msg .ins-xl { font-family: var(--font-mono); }
/* the agent's verification log: server-generated, set apart from the model's words */
.ins-msg.ins-verify { align-self:flex-start; border-style:dashed; background:transparent; font-size:12px; }
.ins-verify-head { color: var(--text-dim); font-size:11px; text-transform:uppercase; letter-spacing:.3px; margin-bottom:4px; }
.ins-verify-body { font-family: var(--font-mono); font-size:11.5px; }
.ins-verify-line { white-space:pre-wrap; }
.ins-verify-warn { color: var(--danger-bright); font-weight:600; }   /* Q21/Q22: a claim the server could not back */
.ins-msg.ins-verify.has-warn { border-color: var(--danger-bright); border-style:solid; }
.ins-verify-undo { display:flex; flex-wrap:wrap; align-items:center; gap:6px 10px; margin-top:8px; white-space:normal; }
.ins-verify-undo-status { color: var(--text-dim); font-size:11.5px; }
.ins-verify-undo-status.is-error { color: var(--danger-bright); }
.ins-focus-row { margin-top:6px; white-space:normal; }
.ins-chip.ins-focus-chip { cursor:pointer; background:transparent; font-family: var(--font-mono); }
.ins-chip.ins-focus-chip:hover { border-color: var(--accent); color: var(--accent-soft); }
/* assistant replies: fenced C rendered like the Decompiled tab (.ins-code) with a copy button */
.ins-msg .ins-codebox { position:relative; margin:6px 0 0; border:1px solid var(--border-code); border-radius:6px; background: var(--bg-inset-alt); overflow:auto; }
.ins-msg .ins-codebox pre.ins-code { margin:0; padding:8px 10px; background:transparent; border:0; font-size:12px; }
.ins-copy { position:absolute; right:6px; top:6px; z-index:2; border:1px solid var(--border); background: var(--bg-elevated); color: var(--text-dim); border-radius:4px; padding:1px 7px; font-size:11px; cursor:pointer; opacity:.85; }
.ins-copy:hover { color: var(--text); border-color: var(--accent); opacity:1; }
.ins-copy.is-ok { color: var(--accent-soft); }

/* ---------- Program tab (whole-program C) ---------- */
.ins-progbar { position:sticky; top:0; z-index:3; display:flex; align-items:center; flex-wrap:wrap; gap:6px 8px; padding:6px 10px; background: var(--bg-panel); border-bottom:1px solid var(--border-soft); font-size:12px; }
.ins-progbar .ins-progcount { color: var(--text-dim); font-family: var(--font-mono); font-size:11.5px; white-space:nowrap; }
.ins-progbar .ins-progspacer { flex:1; }
.ins-progbar .ins-btn { height:26px; padding:0 9px; font-size:11.5px; }
.ins-progbar .ins-btn-play { padding:0 10px; }
.ins-progbar .ins-runsel { padding:0; flex-wrap:wrap; }                          /* finished runs of the file: one chip per engine x level */
.ins-progbar .ins-runsel .ins-dtab { border-radius:6px; padding:2px 8px; font-size:11.5px; }
.ins-progbar .ins-runsel .ins-dtab.is-active { border-color: var(--accent); background: var(--bg-hover); }
.ins-progbar a.ins-btn[aria-disabled="true"] { opacity:.5; pointer-events:none; }
.ins-progphases { display:flex; align-items:center; gap:8px; flex-wrap:wrap; padding:4px 10px; font-size:11px; color: var(--text-dim); border-bottom:1px solid var(--border-soft); background: var(--bg-panel); }
.ins-progphases[hidden] { display:none; }   /* display:flex above would beat the UA [hidden] rule */
.ins-progphase { display:inline-flex; align-items:center; gap:4px; white-space:nowrap; }
.ins-progphase i { width:7px; height:7px; border-radius:50%; background: var(--border-strong); display:inline-block; }
.ins-progphase[data-status="running"] i { background: var(--accent); animation: ins-pulse 1s infinite; }
.ins-progphase[data-status="done"] i { background: var(--success); }
.ins-progphase[data-status="error"] i { background: var(--danger-bright); }
.ins-progphase[data-status="skipped"] { opacity:.5; }
.ins-progmsg { color: var(--text-dim); font-family: var(--font-mono); }
.ins-progmsg.err { color: var(--danger-bright); }
.ins-progsec { position:relative; }
.ins-progsec .ins-fnhead { position:static; }
.ins-progsec.is-cur { box-shadow: inset 3px 0 0 var(--accent); }
.ins-engbadge { display:inline-block; padding:0 6px; border-radius:999px; border:1px solid var(--border); color: var(--text-dim); font-size:10.5px; font-weight:600; letter-spacing:.2px; text-transform:uppercase; }
.ins-engbadge.gpt { color: var(--accent-soft); border-color: var(--accent); }
.ins-engbadge.decai { color: var(--success); border-color: var(--success); }
.ins-progsec .ins-copy { top:8px; }
.ins-proghint { padding:8px 14px; color: var(--text-dim); font-size:12px; border-top:1px solid var(--border-soft); }
.ins-proghint .ins-xl { margin:0 2px; }
.ins-dock { position:relative; }
.ins-jump { position:absolute; right:14px; bottom:76px; z-index:3; border:1px solid var(--border); background: var(--bg-elevated); color: var(--text); border-radius:999px; padding:4px 10px; font-size:11.5px; cursor:pointer; box-shadow:0 4px 14px rgba(0,0,0,.4); }
.ins-jump[hidden] { display:none; }
.ins-dock-form { flex:0 0 auto; display:flex; gap:8px; padding:8px 10px; border-top:1px solid var(--border-soft); }
.ins-dock-form textarea { flex:1; min-width:0; resize:none; min-height:44px; max-height:160px; padding:7px 10px; border-radius:8px; border:1px solid var(--border); background: var(--bg-inset); color: var(--text); font-family: var(--font); font-size:13px; line-height:1.4; }
.ins-dock-form textarea:focus { outline:none; border-color: var(--accent); }
.ins-dock-form .ins-btn-play { width:38px; padding:0; justify-content:center; align-self:flex-end; height:34px; }

/* ---------- mobile bar / modal ---------- */
.ins-mobilebar { display:none; }
.ins-modal { position:fixed; inset:0; z-index:1000; background:rgba(0,0,0,.6); display:grid; place-items:center; padding:16px; }
.ins-modal[hidden] { display:none; }
.ins-modal-card { width:min(560px,100%); max-height:80vh; display:flex; flex-direction:column; background: var(--bg-panel); border:1px solid var(--border); border-radius:10px; overflow:hidden; }
.ins-modal-head { display:flex; justify-content:space-between; align-items:center; padding:10px 12px; border-bottom:1px solid var(--border); font-weight:600; }
.ins-modal-body { overflow:auto; padding:6px; }
.ins-modal-foot { padding:10px 12px; border-top:1px solid var(--border); display:flex; justify-content:flex-end; }
.ins-fprow { display:flex; align-items:center; gap:10px; padding:8px 10px; border-radius:6px; cursor:pointer; }
.ins-fprow:hover { background: var(--bg-hover); }
.ins-fprow .n { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ins-fprow .s { color: var(--text-dim); font-size:11px; }

/* ---------- context menu ---------- */
.ins-cmenu { position:fixed; z-index:1001; min-width:200px; background: var(--bg-elevated); border:1px solid var(--border); border-radius:8px; padding:4px; box-shadow:0 10px 30px rgba(0,0,0,.5); font-size:12.5px; }
.ins-cmenu div { padding:6px 10px; border-radius:5px; cursor:pointer; display:flex; justify-content:space-between; gap:16px; }
.ins-cmenu div:hover { background: var(--bg-hover); }
.ins-cmenu .k { color: var(--text-dim); font-family: var(--font-mono); font-size:11px; }
.ins-cmenu hr { border:0; border-top:1px solid var(--border-soft); margin:4px 0; }
.ins-cmenu div.is-off { opacity:.5; cursor:default; }   /* action not available (plan gate, run in progress, compile disabled) */
.ins-cmenu .ins-cmenu-h { padding:2px 10px 4px; font: 600 10.5px/1.4 var(--font); letter-spacing:.4px; text-transform:uppercase; color: var(--text-dim); cursor:default; }
.ins-cmenu .ins-cmenu-h:hover { background:transparent; }
/* ---------- edit mode (pencil ✎, key E): additive affordances; every write still goes through a patch dialog ---------- */
/* per-frame pencils: ✎ on the disassembly frame = binary edit mode; ✎ on a C frame = edit the C in place */
.ins-pencil.is-active { background: var(--accent); border-color: var(--accent); color:#fff; }
.ins-pencilgrp { display:inline-flex; gap:4px; }
.ins-fnhead .ins-pencil, .ins-fnhead .ins-trash, .ins-splithead .ins-pencil, .ins-splithead .ins-trash { height:24px; width:26px; padding:0; justify-content:center; }
.ins-trash { opacity:.75; } .ins-trash:hover { opacity:1; color: var(--danger-bright); }
.ins-cedit-box { display:flex; flex-direction:column; gap:6px; }
.ins-cedit { width:100%; min-height:160px; font-family: var(--font-mono); font-size:12.5px; line-height:1.45; tab-size:4; resize:vertical; }
.ins-cedit-bar { display:flex; align-items:center; gap:8px; }
.ins-cedit-hint { font-size:11px; color: var(--text-dim); }
pre.ins-code[title] { cursor: text; }
/* inline comment on a listing row (double-click / ;) */
.ins-dline .cm.is-user { color: var(--accent-soft); }
#ins[data-edit="on"] .ins-hexline .hb { cursor: text; }
#ins[data-edit="on"] .ins-dline:hover { box-shadow: inset 2px 0 0 var(--accent); }
.ins-addbtn { font-weight:600; }
.ins-disbar .ins-addbtn, .ins-splithead .ins-addbtn { margin-left:6px; }
.ins-ghud .ins-addbtn { color: var(--accent); }
.ins-addmenu { min-width:280px; }
.ins-modbadge.is-empty { color: var(--text-dim); border-color: var(--border); background: var(--bg-page); }   /* muted, but the same box as the neighbouring .ins-btn */
.ins-modbadge.is-empty:hover { color: var(--text); border-color: var(--accent); background: var(--bg-page); }

/* ---------- toast ---------- */
.ins-toast { position:fixed; left:50%; bottom:20px; transform:translateX(-50%); z-index:1002; background: var(--bg-elevated); border:1px solid var(--border); border-radius:8px; padding:8px 14px; font-size:12.5px; box-shadow:0 8px 24px rgba(0,0,0,.5); max-width:calc(100vw - 16px); overflow-wrap:anywhere; }
.ins-toast.err { border-color: var(--danger-bright); }

/* ===================== MOBILE ===================== */
@media (max-width: 900px) {
  .ins { --tb: 42px; }
  .ins-tb-left { flex:1 1 auto; } .ins-tb-center { flex:2 1 auto; } .ins-tb-right { flex:0 0 auto; }
  .ins-btn-txt { display:none; }                     /* play button becomes icon-only */
  .ins-arch { display:none; }
  .ins-addr-label { display:none; }
  .ins-splitter { display:none; }
  .ins-work { position:relative; }
  .ins-left, .ins-center, .ins-right { flex:1 1 100%; border:0; display:none; }
  .ins[data-pane="left"]   .ins-left   { display:flex; }
  .ins[data-pane="center"] .ins-center { display:flex; }
  .ins[data-pane="right"]  .ins-right  { display:flex; }
  .ins-dock { display:none; }
  .ins[data-pane="chat"] .ins-work { display:none; }
  .ins[data-pane="chat"] .ins-dock { display:flex; flex:1 1 auto; }
  .ins-splitter-h { display:none; }
  .ins-mobilebar { display:grid; grid-template-columns:repeat(4,1fr); flex:0 0 48px; background: var(--bg-panel); border-top:1px solid var(--border);
    padding-bottom: env(safe-area-inset-bottom); }
  .ins-mobilebar button { border:0; background:transparent; color: var(--text-dim); font-size:12px; border-top:2px solid transparent; }
  .ins-mobilebar button.is-active { color: var(--text); border-top-color: var(--accent); }
  .ins-dline { grid-template-columns: 76px 1fr; font-size:12px; }
  /* Text view on phones: `white-space:pre` made the 1fr operand track as wide
     as the longest annotated line, so the whole listing could be dragged
     sideways into an empty area right of the shorter lines. Long lines wrap
     inside the operand column instead (readability > pre on a 360px screen);
     min-width:0 lets the grid/flex children shrink to the pane, and .ins-dis
     clips (not scrolls: overflow:clip keeps .ins-disbar sticky against the
     pane) anything that still pokes out. Desktop (>900px) keeps pre + the
     horizontal scroll. Hex/CFG/decompiled views are not touched. */
  .ins-dis { max-width:100%; overflow-x:clip; }
  .ins-disbody, .ins-dline, .ins-dline > * { min-width:0; }
  .ins-dline { white-space:pre-wrap; overflow-wrap:anywhere; }
  .ins-dline .mn { min-width:50px; }   /* mnemonic column a touch narrower so a plain `mov eax, dword ptr [rbp - 0x14]` still fits one line at 360px */
  .ins-hexline { grid-template-columns: 76px 1fr; } .ins-hexline .as { display:none; }
  .ins-msg { max-width:100%; }
  .ins-ghud { right:6px; top:6px; } .ins-gcrumbs { max-width:70%; }
}
@media (max-width: 480px) {
  .ins-file { max-width:120px; }
  .ins-addrbox { max-width:none; }
}

/* ===================== live patching (server/patch.js) ===================== */
/* hex bytes are individually clickable in Edit mode; patched bytes stand out */
.ins-hexline .hx .hb { padding:0 1px; border-radius:3px; cursor:default; }
.ins-hexline .hx .hb.is-cur { color: var(--accent-soft); font-weight:600; }
.ins-hexline .hx .hb.is-patched { color: var(--danger-bright); background: color-mix(in srgb, var(--danger-bright) 16%, transparent); }
.ins-hexline .hx .hb.is-edit { cursor:pointer; }
/* the byte column and the text column mirror each other (views.js hex): the hovered cell and its twin
   (byte <-> char at the same VA) get the outline, the twins of a selected run get the tint */
.ins-hexline .hb:hover, .ins-hexline .ac:hover, .ins-hexline .is-hover { outline:1px solid var(--accent); border-radius:3px; }
.ins-hexline .is-sel { background: color-mix(in srgb, var(--accent) 25%, transparent); }

/* "N patches" badge in the toolbar */
.ins-modbadge { display:inline-flex; align-items:center; gap:4px; height:30px; padding:0 10px; font: 600 12px/1 var(--font); white-space:nowrap; color: var(--danger-bright);
  background: color-mix(in srgb, var(--danger-bright) 14%, transparent); border:1px solid color-mix(in srgb, var(--danger-bright) 40%, transparent); border-radius:6px; cursor:pointer; }   /* same box as .ins-btn (30px, radius 6), tinted */
.ins-modbadge:hover { background: color-mix(in srgb, var(--danger-bright) 24%, transparent); }

/* the patch panel (reuses .ins-cmenu positioning) */
.ins-patchpanel { min-width:300px; max-width:420px; padding:6px; }
.ins-pp-head { padding:4px 8px; font-weight:600; color: var(--text); border-bottom:1px solid var(--border-soft); margin-bottom:4px; }
.ins-pp-empty { padding:8px; color: var(--text-dim); font-size:12.5px; }
.ins-pp-row { display:flex; align-items:center; gap:6px; padding:3px 6px; border-radius:5px; }
.ins-pp-row:hover { background: var(--bg-hover); }
.ins-pp-desc { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-family: var(--font-mono); font-size:12px; color: var(--text-code); }
.ins-pp-x { flex:none; width:22px; height:22px; border:none; background:transparent; color: var(--text-dim); border-radius:4px; cursor:pointer; }
.ins-pp-x:hover { background: var(--bg-inset); color: var(--text); }
.ins-pp-foot { display:flex; gap:6px; justify-content:flex-end; padding:6px 4px 2px; border-top:1px solid var(--border-soft); margin-top:4px; }
/* Download patched APK (patch panel foot, Android package card): button + inline outcome + the key note */
.ins-apk-dl { display:flex; flex-wrap:wrap; align-items:center; gap:8px; padding:6px 4px 2px; border-top:1px solid var(--border-soft); margin-top:4px; }
.ins-apk-dl-status { color: var(--text-dim); font-size:12px; }
.ins-apk-dl-note { flex-basis:100%; color: var(--text-dim); font-size:11.5px; }
.ins-card .ins-apk-dl { border-top:0; margin-top:8px; padding:0; }

/* block/hook form fields inside a formDialog */
.ins-frow { display:flex; align-items:center; gap:8px; margin-bottom:8px; color: var(--text-dim); font-size:12.5px; }
/* label / field grid for dialog forms (addBlock): overrides the dialog's block-level 100% inputs and the select margin */
.ins-form { display:grid; grid-template-columns: max-content minmax(0,1fr); gap:10px 12px; align-items:center; }
.ins-form label { color: var(--text-dim); font-size:12.5px; }
.ins-form .ins-input { width:100%; min-width:0; margin:0; }
.ins-form-inline { display:grid; grid-template-columns: max-content minmax(0,1fr); gap:8px; }
.ins-form textarea { grid-column: 1 / -1; resize: vertical; }
/* I04 decompiler corrections (inspect/corrections.js): dialog notes, member xrefs in the Types tab */
.ins-form .ins-form-note { grid-column: 1 / -1; color: var(--text-dim); font-size:12px; line-height:1.4; overflow-wrap:anywhere; }
.ins-memberx-type { display:flex; flex-wrap:wrap; align-items:center; gap:4px 6px; margin:4px 0; }
.ins-memberx-type > span { font-family: var(--font-mono); margin-right:4px; }
.ins-memberx-type .ins-btn.is-active { border-color: var(--accent); background: var(--bg-hover); color: var(--text); }   /* the member whose uses are shown (kept across a rebuild, Q16) */
.ins-memberx-out code { font-size:11.5px; white-space:pre-wrap; overflow-wrap:anywhere; }
/* I11 member xrefs by access kind (showMemberXrefs): chips per kind with counts, coverage, uses grouped by function */
.ins-memberx-chips { display:flex; flex-wrap:wrap; gap:4px; margin:4px 0; }
.ins-memberx-chip { opacity:.55; }
.ins-memberx-chip.is-active { opacity:1; border-color: var(--accent); background: var(--bg-hover); color: var(--text); }
.ins-memberx-note { margin:2px 0 4px; color: var(--text-dim); font-size:12px; line-height:1.4; overflow-wrap:anywhere; }
.ins-memberx-stale { display:flex; flex-wrap:wrap; align-items:center; gap:4px 8px; margin:4px 0; padding:4px 8px; font-size:12px; border-radius:6px; background: color-mix(in srgb, var(--warning) 12%, transparent); }
.ins-memberx-fn td { padding-top:6px; font-size:12px; color: var(--text-dim); }
.ins-memberx-fn strong { color: var(--text); font-family: var(--font-mono); }
.ins-memberx-kind { display:inline-block; min-width:52px; padding:0 5px; border-radius:999px; border:1px solid var(--border); font-size:11px; text-align:center; }
.ins-memberx-kind.is-write { border-color: var(--warning); }
.ins-memberx-kind.is-address { border-color: var(--accent); }
.ins-memberx-kind.is-unknown { border-style:dashed; color: var(--text-faint); }
.ins-memberx-insn { font-family: var(--font-mono); font-size:11.5px; }
.ins-memberx-src { font-size:11px; color: var(--text-faint); font-style:italic; }
/* I11 connection finder (inspect/paths.js): the dialog's options, the paths panel on top of the Call graph view */
.ins-form label.ins-check { grid-column: 1 / -1; display:flex; align-items:center; gap:6px; }
.ins-paths-from { font-family: var(--font-mono); font-size:12.5px; }
.ins-paths { margin:6px 8px 10px; padding:8px 10px; border:1px solid var(--border); border-radius:8px; background: var(--bg-inset); font-size:12.5px; }
.ins-paths-head { display:flex; align-items:center; gap:8px; }
.ins-paths-head strong { flex:1 1 auto; min-width:0; overflow-wrap:anywhere; }
.ins-paths-label { margin:4px 0; color: var(--warning); font-size:12px; }
.ins-paths-scope { margin:4px 0; color: var(--text-dim); font-size:12px; line-height:1.4; overflow-wrap:anywhere; }
.ins-paths-list { margin:6px 0; padding-left:22px; }
.ins-paths-list li { margin:3px 0; line-height:1.6; overflow-wrap:anywhere; }
.ins-paths-hop { font-family: var(--font-mono); cursor:pointer; }
.ins-paths-hop.is-here { font-weight:600; text-decoration:underline; }
.ins-paths-arrow { color: var(--text-faint); }
.ins-paths-ind { margin-left:4px; padding:0 5px; border-radius:999px; border:1px dashed var(--warning); font-size:11px; color: var(--text-dim); }
.ins-input { background: var(--bg-inset); color: var(--text); border:1px solid var(--border); border-radius:6px; padding:6px 8px; font-size:13px; }
select.ins-input, textarea.ins-input { width:100%; margin-bottom:8px; }
textarea.ins-input { font-family: var(--font-mono); }

/* ---- in-place editors (inspect/inline.js): the text itself becomes editable where it stands - no box, no field,
   same font and colour; the accent caret and a thin accent underline say "editing". Enter commits, Esc restores. */
.ins-inline-edit { display:inline-block; min-width:1ch; outline:none; white-space:pre; caret-color: var(--accent); box-shadow: inset 0 -1px 0 var(--accent); cursor:text; }
.ins-inline-edit:empty::before { content: attr(data-placeholder); color: var(--text-faint); }
.ins-inline-edit.is-op { padding-left:1ch; }                                                          /* the operands start one space after the mnemonic column, as the row shows them */
.ins-inline-edit.is-bytes { min-width:22ch; color: var(--text-faint); }                               /* the bytes column keeps its width */
.ins-inline-edit.is-type { font-size:11px; }                                                          /* a declaration's type: small, keeps the line's rhythm */
.ins-inline-edit.is-cmt { color: var(--accent-soft); }                                                /* a row comment, edited after its ` ; ` */
.ins-inline-fo { overflow:visible; }                                                                  /* CFG row editor lives in a foreignObject over the svg text */
.ins-inline-fo-body { height:16px; }
.ins-inline-fo .ins-inline-edit { min-width:4ch; font-family: var(--font-mono); font-size:11.5px; line-height:16px; color: var(--text); }   /* html inside svg: the block text rule does not reach it */
#ins[data-edit="on"] .ins-dline .mn, #ins[data-edit="on"] .ins-dline .op, #ins[data-edit="on"] .ins-dline .by, #ins[data-edit="on"] .ins-gblock text.ins-gins { cursor:text; }   /* double-click = edit in place */
/* the hex editor (inspect/hexedit.js): mark bytes in either column and type over them - the run is tinted in both
   columns, the byte the next key lands in carries the caret underline with its high / low nibble lit */
.ins-hexbody:focus { outline:none; }
#ins[data-edit="on"] .ins-hexline .as .ac { cursor:text; }
.ins-hexline .hb.is-caret, .ins-hexline .ac.is-caret { box-shadow: inset 0 -2px 0 var(--accent); }
.ins-hexline .hb.is-caret.is-hi { background-image: linear-gradient(90deg, color-mix(in srgb, var(--accent) 45%, transparent) 50%, transparent 50%); }
.ins-hexline .hb.is-caret.is-lo { background-image: linear-gradient(90deg, transparent 50%, color-mix(in srgb, var(--accent) 45%, transparent) 50%); }
.ins-hexline .hx .hb.is-typing, .ins-hexline .as .ac.is-typing { color: var(--accent-soft); font-weight:600; }   /* bytes typed in the current run, before the commit */
.ins-hexline.ins-hexgap { color: var(--text-dim); } .ins-hexgap .cm { grid-column: 2 / -1; }         /* unmapped memory between two regions: one marker row */

/* ---- FORGE (Epic F): library functions recognized by signature. Badge (warning colour when tentative),
   muted navigator row, the FORGE sub-tab (provenance + library source), the Program-tab opt-in row. */
.ins-forgebadge { display:inline-flex; align-items:center; justify-content:center; min-width:16px; height:16px; padding:0 4px; margin-left:4px; border-radius:4px; border:1px solid var(--success); color: var(--success); font-size:10.5px; font-weight:700; line-height:1; flex:0 0 auto; cursor:default; }
.ins-forgebadge.is-tentative { border-color: var(--warning); color: var(--warning); }
.ins-forgebadge.ins-forgelink { cursor:pointer; }
.ins-forgebadge.ins-forgelink:hover { background: var(--bg-hover); }
.ins-row.is-forge .n { color: var(--text-dim); }                                                   /* recognized library code: not the user's own logic */
.ins-forge-status { color: var(--success); }
.ins-dtab.forge.has .dot { background: var(--success); }
.ins-dtab.forge.is-tentative .dot { background: var(--warning); }
.ins-forgeprov { padding:6px 14px; }
.ins-forgeprov dd { word-break:break-word; }
.ins-forgesrc { padding:0 14px 10px; }
.ins-forgesrc .ins-code { margin-top:6px; }
.ins-forge-reject, .ins-forge-undo { margin-left:6px; }
.ins-empty.ins-forge-rejected { color: var(--warning); font-style:normal; }
.ins-empty.ins-forgehint { color: var(--text); }
.ins-forgerow { display:flex; align-items:center; flex-wrap:wrap; gap:10px; padding:6px 14px; color: var(--text-dim); font-size:12px; border-bottom:1px solid var(--border-soft); }
.ins-forgerow .ins-forgeopt { display:inline-flex; align-items:center; gap:6px; color: var(--text); cursor:pointer; margin-left:auto; }
.ins-forgerow .ins-forgeopt input { margin:0; }
.ins-engbadge.forge { color: var(--success); border-color: var(--success); }
.ins-engbadge.user { color: var(--warning); border-color: var(--warning); }   /* Program tab: a unit the run kept from the user's own edit */
.ins-card-foot { margin-top:8px; color: var(--text-dim); font-size:11.5px; }

/* Emulate tab: simulated I/O (ROADMAP 154) - the Linux syscall shim control + captured output */
.ins-emu-iosec { margin-top:8px; padding-top:8px; border-top:1px solid var(--border-soft); }
.ins-emu-io-title { font-weight:600; color: var(--text-on-light); font-size:12px; }
.ins-emu-io-hint { color: var(--text-dim); font-size:11px; margin:2px 0 6px; }
.ins-emu-oschk { display:inline-flex; align-items:center; gap:6px; cursor:pointer; font-size:12px; }
.ins-emu-io-stdin { min-width:220px; }
.ins-emu-io-stdin:disabled { opacity:.5; }
.ins-emu-exit { color: var(--text-dim); font-size:12px; margin:4px 0; }
.ins-emu-out h4 { margin:0 0 4px; font-size:12px; color: var(--text-on-light); }
.ins-emu-outpre { margin:0; padding:8px; background: var(--bg-inset); border:1px solid var(--border-code); border-radius:6px; font-family: var(--font-mono); font-size:12px; white-space:pre-wrap; word-break:break-word; max-height:220px; overflow:auto; color: var(--text-code); }

/* injected code blocks (added functions) in the navigator */
.ins-row.is-inj .n { color: var(--accent); }
.ins-injbadge { flex:none; font: 600 9.5px/1.4 var(--font); letter-spacing:.3px; text-transform:uppercase; color: var(--accent); border:1px solid var(--accent-soft); border-radius:4px; padding:0 4px; }

.ins-exportmenu { display: flex; flex-direction: column; gap: 6px; }

/* ---- Android packages (inspect/container.js): the Package tab's tree + Overview cards; members in the file picker */
.ins-row.is-tree { padding-left: calc(8px + 14px * var(--depth, 0)); }
.ins-row.is-tree:not(.is-root) .n::before { content: '↳ '; color: var(--text-faint); }
.ins-row.is-tree.is-root .n { font-weight:600; }
.ins-row.is-inert { cursor:default; } .ins-row.is-inert .n { color: var(--text-dim); } .ins-row.is-inert:hover { background:transparent; }
.ins-row .ins-nav-del:hover { background: var(--danger-bright); border-color: var(--danger-bright); color:#fff; }
.ins-row .ins-nav-alt { font-weight:700; }   /* the JNI tab's J: a row's second target (the Java side) */
/* Scripts tab (inspect/views.js plainRow): category dividers + two-line rows so the title reads. */
.ins-nav-head { padding:11px 8px 4px; font-size:10.5px; font-weight:600; text-transform:uppercase; letter-spacing:.06em; color: var(--text-dim); }   /* the Scripts tab's categories */
.ins-nav-head:not(:first-child) { margin-top:4px; border-top:1px solid var(--border); }   /* a hairline between groups, not above the first */
.ins-row.is-script { align-items:flex-start; gap:8px; padding:7px 8px; }
.ins-row.is-script .ins-script-text { flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:1px; }
.ins-row.is-script .n { flex:none; font-weight:600; }   /* title on its own line, full row width (no longer competing with the description) */
.ins-row.is-script .s { flex:none; white-space:normal; font-size:12px; line-height:1.4; color: var(--text-faint);
  display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; overflow:hidden; }   /* description clamped to two lines */
.ins-row.is-script .ins-nav-del { flex:0 0 auto; align-self:center; }
.ins-row.is-snap.is-action .n { color: var(--accent); }   /* the Snapshots tab's "+ Save snapshot" row */
.ins-projdiff .ins-table td:not(:first-child), .ins-projdiff .ins-table th:not(:first-child) { text-align:right; width:5em; }   /* restore preview: counts per kind */
.ins-projdiff p { margin:6px 0 0; }
.ins-apk-list code { display:inline-block; margin:2px 4px 2px 0; padding:1px 6px; border-radius:4px; background: var(--bg-inset); font-size:11.5px; }
.ins-fprow.is-member { padding-left: calc(24px + 16px * (var(--depth, 1) - 1)); }   /* an APK's member, or a dex out of an APK out of a set (depth 2) */
.ins-fprow.is-member .n::before { content:'↳ '; color: var(--text-dim); }

/* File view (inspect/container.js showMember, views.js VIEW.file): one entry of an Android package */
.ins-filehead { display:flex; flex-wrap:wrap; gap:4px 14px; align-items:baseline; padding:8px 14px; font-size:12px; border-bottom:1px solid var(--border); }
.ins-filehead-path { font-family: var(--font-mono); color: var(--text); }
.ins-filehead-meta { color: var(--text-dim); }
.ins-filetext { overflow:auto; }
.ins-fileimg { display:block; max-width:calc(100% - 28px); margin:14px; background: var(--bg-inset); image-rendering:auto; }   /* an inset ground behind transparent icons */
/* resources.arsc in the File view (container.js resourceTable): filter bar, one row per configuration, paging */
.ins-resbar { display:flex; flex-wrap:wrap; gap:8px; align-items:center; padding:8px 14px; border-bottom:1px solid var(--border); }
.ins-resbar .ins-resq { flex:1 1 240px; min-width:0; margin:0; }
.ins-resbar .ins-restype { width:auto; flex:0 1 200px; margin:0; }
.ins-rescount { color: var(--text-dim); font-size:12px; }
.ins-restable td.ins-res-val { white-space:normal; overflow-wrap:anywhere; }
.ins-restable tr.is-cfg td { border-top:none; }
.ins-restable td.ins-res-cfg, .ins-restable td.ins-res-id { color: var(--text-dim); }
.ins-res-swatch { display:inline-block; width:10px; height:10px; margin-right:6px; border:1px solid var(--border); border-radius:2px; vertical-align:-1px; }
.ins-resfoot { display:flex; gap:8px; align-items:center; justify-content:flex-end; padding:8px 14px; font-size:12px; color: var(--text-dim); }
/* a resource's uses (container.js xrefList) under its table row, and the code under a binary XML file (xmlView) */
.ins-restable tr.ins-res-xrow td { white-space:normal; background: var(--bg-inset); }
.ins-res-xh { margin:6px 0 2px; font-size:11px; font-weight:600; text-transform:uppercase; letter-spacing:.05em; color: var(--text-dim); }
.ins-res-xline { display:flex; flex-wrap:wrap; gap:4px 10px; align-items:baseline; padding:2px 0; font-family: var(--font-mono); font-size:12px; }
.ins-res-xline.is-sub { padding-left:18px; }
.ins-res-xm { color: var(--text-dim); }
.ins-res-xmn { color: var(--text-faint); }
.ins-inline-err { color: var(--danger-bright); }
.ins-xmlcode { padding:0 14px 14px; }

/* ===================== the live debugger (inspect/debugger.js, DEBUGGER_SPEC) ===================== */
/* centre: toolbar, status line, Start panel + code (scrolls), dock (Memory / Console / Breakpoints / Map) */
.ins-dbg { height:100%; display:flex; flex-direction:column; min-height:0; }
.ins-dbg-toolbar { flex:0 0 auto; display:flex; flex-wrap:wrap; align-items:center; gap:4px; padding:6px 10px; border-bottom:1px solid var(--border); background: var(--bg-panel); }
.ins-dbg-tool kbd { font-family: var(--font-mono); font-size:10px; color: inherit; opacity:.6; border:0; padding:0; background:transparent; }
.ins-dbg-tool:disabled { opacity:.4; cursor:not-allowed; }
.ins-dbg-tool.is-danger:not(:disabled) { color: var(--danger-bright); border-color: color-mix(in srgb, var(--danger-bright) 45%, transparent); }
.ins-dbg-seg { display:inline-flex; border:1px solid var(--border); border-radius:6px; overflow:hidden; }
.ins-dbg-segb { border:0; background: var(--bg-page); color: var(--text-dim); padding:3px 10px; font-size:12px; cursor:pointer; display:inline-flex; flex-direction:column; align-items:flex-start; line-height:1.25; }
.ins-dbg-segb + .ins-dbg-segb { border-left:1px solid var(--border); }
.ins-dbg-segb.is-active { background: var(--bg-hover); color: var(--text); box-shadow: inset 0 -2px 0 var(--accent); }
.ins-dbg-segb:disabled { opacity:.45; cursor:not-allowed; }
.ins-dbg-segb small { font-family: var(--font-mono); font-size:10.5px; color: var(--text-faint); }
.ins-dbg-codemode { margin-left:auto; }
.ins-dbg-status { flex:0 0 auto; display:flex; flex-wrap:wrap; gap:4px 14px; align-items:baseline; padding:6px 12px; font-family: var(--font-mono); font-size:12px; border-bottom:1px solid var(--border-soft); color: var(--text-dim); overflow-wrap:anywhere; }
.ins-dbg-status.is-ok { color: var(--text); } .ins-dbg-status.is-run { color: var(--accent-soft); }
.ins-dbg-status.is-warn { color: var(--warning); } .ins-dbg-status.is-err { color: var(--danger-bright); }
.ins-dbg-count { margin-left:auto; color: var(--text-faint); font-size:11px; }
/* phase 4: another client drove the session (the in-chat agent, MCP, the API) */
.ins-dbg-actor { padding:0 6px; border-radius:3px; font-size:11px; color: var(--accent-soft); background: color-mix(in srgb, var(--accent) 14%, transparent); }
.ins-dbg-api tr.is-actor td { color: var(--accent-soft); font-style: italic; }
/* phase 4: saved run configurations on top of the Start panel (debug-configs.js) */
.ins-dbg-cfgrow { display:flex; flex-wrap:wrap; align-items:center; gap:6px 8px; padding-bottom:8px; border-bottom:1px solid var(--border-soft); font-size:12.5px; }
.ins-dbg-cfgrow > label { color: var(--text-dim); }
.ins-dbg-cfgsel { flex:1 1 200px; min-width:0; max-width:420px; }
.ins-dbg-cfgconfirm { display:flex; flex-wrap:wrap; align-items:center; gap:6px; flex-basis:100%; }
.ins-dbg-cfgmsg { flex-basis:100%; } .ins-dbg-cfgmsg.is-ok { color: var(--success, var(--text)); }
.ins-dbg-err { flex:1 1 100%; color: var(--danger-bright); display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.ins-dbg-main { flex:1 1 auto; min-height:120px; overflow:auto; }
.ins-dbg-start { border-bottom:1px solid var(--border-soft); background: var(--bg-panel); }
.ins-dbg-starthead { display:block; width:100%; text-align:left; border:0; background:transparent; color: var(--text-dim); font-size:12px; padding:6px 12px; cursor:pointer; }
.ins-dbg-starthead:hover { color: var(--text); }
.ins-dbg-startbody { display:flex; flex-direction:column; gap:10px; padding:0 12px 10px; }
.ins-dbg-startbody[hidden] { display:none; }
.ins-dbg-modes { align-self:flex-start; flex-wrap:wrap; }
.ins-dbg-startrow { display:flex; flex-wrap:wrap; align-items:flex-end; gap:10px; }
.ins-dbg-args, .ins-dbg-abi, .ins-dbg-os, .ins-dbg-maxinsns { height:28px; padding:0 8px; border-radius:6px; border:1px solid var(--border); background: var(--bg-inset); color: var(--text); font-family: var(--font-mono); font-size:12px; }
.ins-dbg-args { width:180px; } .ins-dbg-maxinsns { width:110px; }
.ins-dbg-args:focus, .ins-dbg-maxinsns:focus { outline:none; border-color: var(--accent); }
.ins-dbg [aria-invalid="true"] { border-color: var(--danger-bright); }
.ins-dbg-start .ins-emu-initial, .ins-dbg-start .ins-emu-script { border:0; background:transparent; }
.ins-dbg-start .ins-emu-initial-toggle, .ins-dbg-start .ins-emu-script-toggle { margin-left:0; margin-right:0; }
/* the code: gutter (breakpoint dots, the PC arrow), address, mnemonic, operands, the PC line's values */
.ins-dbg-code { font-family: var(--font-mono); font-size:12.5px; padding-bottom:8px; }
.ins-dbg-codehead { position:sticky; top:0; z-index:1; padding:4px 12px; font-size:11.5px; color: var(--text-dim); background: var(--bg-page); border-bottom:1px solid var(--border-soft); }
.ins-dbg-line { display:grid; grid-template-columns: 20px 118px 64px minmax(0,1fr) auto; align-items:baseline; gap:0 6px; padding:1px 10px 1px 0; white-space:pre; cursor:default; }
.ins-dbg-line:hover { background: var(--bg-hover); }
.ins-dbg-line .gut { align-self:stretch; cursor:pointer; text-align:center; color:transparent; user-select:none; }
.ins-dbg-line .gut::before { content:'\25CF'; font-size:11px; }
.ins-dbg-line:hover .gut { color: color-mix(in srgb, var(--danger-bright) 35%, transparent); }
.ins-dbg-line.is-bp .gut { color: var(--danger-bright); }
.ins-dbg-line.is-bp.is-cond .gut::before { content:'\25C6'; }
.ins-dbg-line.is-bp.is-log .gut { color: var(--warning); }
.ins-dbg-line.is-bp.is-off .gut { color: var(--text-faint); }
.ins-dbg-line .ad { color: var(--text-dim); }
.ins-dbg-line .mn { color: var(--text-code); font-weight:600; }
.ins-dbg-line .op { overflow:hidden; text-overflow:ellipsis; }
.ins-dbg-line .iv { color: var(--accent-soft); font-size:11.5px; padding-left:12px; }
.ins-dbg-line.is-sel { background: color-mix(in srgb, var(--accent) 10%, transparent); }
.ins-dbg-line.is-pc { background: color-mix(in srgb, var(--accent) 22%, transparent); box-shadow: inset 3px 0 0 var(--accent); }
.ins-dbg-line.is-pc .ad::before { content:'\25B6  '; color: var(--accent-soft); }
.ins-dbg-c { margin:0; padding:8px 12px; }
.ins-dbg-c .cl.is-pc { display:inline-block; min-width:100%; background: color-mix(in srgb, var(--accent) 22%, transparent); box-shadow: inset 3px 0 0 var(--accent); }
.ins-dbg-c.is-fncur { box-shadow: inset 3px 0 0 var(--accent); }
.ins-dbg-cnote { padding:6px 12px 0; font-size:11.5px; color: var(--text-dim); }
/* the dock */
.ins-dbg-dock { flex:0 0 36%; min-height:150px; display:flex; flex-direction:column; border-top:1px solid var(--border); background: var(--bg-panel); }
.ins-dbg-docktabs { flex:0 0 auto; display:flex; overflow-x:auto; border-bottom:1px solid var(--border-soft); }
.ins-dbg-dtab { flex:0 0 auto; border:0; border-bottom:2px solid transparent; background:transparent; color: var(--text-dim); padding:5px 12px; font-size:12px; cursor:pointer; white-space:nowrap; }
.ins-dbg-dtab:hover { color: var(--text); } .ins-dbg-dtab.is-active { color: var(--text); border-bottom-color: var(--accent); }
.ins-dbg-dockbody { flex:1 1 auto; min-height:0; overflow:auto; display:flex; flex-direction:column; }
.ins-dbg-membar { display:flex; flex-wrap:wrap; align-items:center; gap:6px; padding:6px 10px; border-bottom:1px solid var(--border-soft); }
.ins-dbg-memaddr { font-family: var(--font-mono); font-size:12px; padding:2px 6px; border-radius:4px; cursor:text; border-bottom:1px dashed var(--border); }
.ins-dbg-hint { font-size:11px; color: var(--text-faint); }
.ins-dbg-mem { outline:none; padding:4px 0; }
.ins-dbg-mem .hu { color: var(--text-faint); }
.ins-dbg-console { flex:1 1 auto; margin:0; padding:8px 12px; overflow:auto; font-family: var(--font-mono); font-size:12px; white-space:pre-wrap; overflow-wrap:anywhere; min-height:60px; }
.ins-dbg-c-err { color: var(--danger-bright); } .ins-dbg-c-log { color: var(--warning); } .ins-dbg-c-stdin { color: var(--accent-soft); }
.ins-dbg-dim { color: var(--text-dim); font-style:italic; }
.ins-dbg-stdin { flex:0 0 auto; display:flex; gap:6px; padding:6px 10px; border-top:1px solid var(--border-soft); }
.ins-dbg-stdin-inp { flex:1 1 auto; min-width:0; height:26px; padding:0 8px; border-radius:6px; border:1px solid var(--border); background: var(--bg-inset); color: var(--text); font-family: var(--font-mono); font-size:12px; }
.ins-dbg-stdin.is-wanted .ins-dbg-stdin-inp { border-color: var(--warning); box-shadow: 0 0 0 2px color-mix(in srgb, var(--warning) 25%, transparent); }
.ins-dbg-bps tr.is-off td { color: var(--text-faint); }
.ins-dbg-bps td { white-space:normal; overflow-wrap:anywhere; }
.ins-dbg-rm { width:22px; height:22px; font-size:11px; }
.ins-dbg-fielderr { padding:4px 10px; font-size:11.5px; color: var(--danger-bright); overflow-wrap:anywhere; }
/* the right panel while a session shows: the normal tabs step aside */
.ins-right.is-debugging > .ins-pane-tabs, .ins-right.is-debugging > .ins-ctx { display:none; }
.ins-dbg-side { flex:1 1 auto; min-height:0; overflow:auto; padding:6px 8px 12px; font-family: var(--font-mono); font-size:12px; }
.ins-dbg-sec { padding:6px 0 10px; border-bottom:1px solid var(--border-soft); }
.ins-dbg-sec h4 { display:flex; align-items:center; justify-content:space-between; gap:6px; margin:0 0 6px; font-size:11px; font-weight:600; text-transform:uppercase; letter-spacing:.05em; color: var(--text-dim); }
.ins-dbg-regfmt .ins-dbg-segb { padding:1px 6px; font-size:10.5px; text-transform:none; letter-spacing:0; }
.ins-dbg-regs { display:grid; grid-template-columns: 1fr; gap:1px; }
.ins-dbg-reg { display:grid; grid-template-columns: 44px max-content minmax(0,1fr); gap:8px; align-items:baseline; padding:1px 4px; border-radius:4px; }
.ins-dbg-reg .n { color: var(--text-dim); }
.ins-dbg-reg .v { cursor:text; border-bottom:1px dashed transparent; }
.ins-dbg-reg .v:hover { border-bottom-color: var(--border); }
.ins-dbg-reg .note, .ins-dbg-srow .note { color: var(--text-faint); font-size:11px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ins-dbg-reg.is-changed { background: color-mix(in srgb, var(--accent) 16%, transparent); }
.ins-dbg-reg.is-changed .n, .ins-dbg-reg.is-changed .v { color: var(--accent-soft); font-weight:600; }
.ins-dbg-flags { display:flex; flex-wrap:wrap; gap:4px; margin-top:6px; }
.ins-dbg-flag { border:1px solid var(--border); border-radius:999px; background:transparent; color: var(--text-dim); font-family: var(--font-mono); font-size:11px; padding:1px 7px; cursor:pointer; }
.ins-dbg-flag.is-on { border-color: var(--accent); color: var(--accent-soft); background: color-mix(in srgb, var(--accent) 12%, transparent); }
.ins-dbg-srow { display:grid; grid-template-columns: max-content max-content minmax(0,1fr); gap:8px; padding:1px 4px; }
.ins-dbg-srow.is-sp { box-shadow: inset 2px 0 0 var(--accent); }
.ins-dbg-srow .a { color: var(--text-dim); cursor:pointer; } .ins-dbg-srow .v { cursor:pointer; }
.ins-dbg-srow .a:hover, .ins-dbg-srow .v:hover { color: var(--accent-soft); }
.ins-dbg-frame { display:flex; justify-content:space-between; gap:8px; padding:2px 4px; cursor:pointer; border-radius:4px; }
.ins-dbg-frame:hover { background: var(--bg-hover); }
.ins-dbg-frame .n { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; } .ins-dbg-frame .a { color: var(--text-dim); }
.ins-dbg-watch { display:grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr) 22px; gap:6px; align-items:center; padding:1px 4px; }
.ins-dbg-watch .e { color: var(--text-dim); overflow:hidden; text-overflow:ellipsis; }
.ins-dbg-watch .v { overflow-wrap:anywhere; } .ins-dbg-watch.is-err .v { color: var(--danger-bright); font-size:11px; }
.ins-dbg-addwatch { margin-top:4px; }
/* whole-program sessions (inspect/debug-program.js): Start fields, price confirm, Files + API log docks */
.ins-dbg-start [hidden] { display:none !important; }
.ins-dbg-prog { max-width:760px; gap:8px 12px; align-items:start; }
.ins-dbg-prog > label { padding-top:5px; }
.ins-dbg-argsbox, .ins-dbg-env, .ins-dbg-stdinbox, .ins-dbg-pfiles { display:flex; flex-direction:column; gap:6px; min-width:0; }
.ins-dbg-argv { font-family: var(--font-mono); font-size:12.5px; }
.ins-dbg-chips { display:flex; flex-wrap:wrap; gap:4px; }
.ins-dbg-chip { font-family: var(--font-mono); font-size:11.5px; padding:1px 7px; border-radius:999px; border:1px solid var(--border); background: var(--bg-inset); color: var(--text); max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:pre; }
.ins-dbg-chip.is-argv0 { color: var(--text-faint); font-family: inherit; border-style:dashed; }
.ins-dbg-chips .ins-dbg-fielderr { padding:0; }
.ins-dbg-envrow { display:grid; grid-template-columns: minmax(0,1fr) auto minmax(0,1.6fr) 22px; gap:4px; align-items:center; }
.ins-dbg-envrow .ins-input { padding:3px 6px; font-family: var(--font-mono); font-size:12px; }
.ins-dbg-eq { color: var(--text-faint); font-family: var(--font-mono); }
.ins-dbg-env > .ins-btn, .ins-dbg-stdinbox > .ins-dbg-seg { align-self:flex-start; }
.ins-dbg-stdintext { font-family: var(--font-mono); font-size:12px; }
.ins-dbg-check { display:flex; align-items:center; gap:6px; font-size:12px; color: var(--text-dim); }
.ins-dbg-drop { display:block; padding:10px 12px; border:1px dashed var(--border); border-radius:8px; color: var(--text-dim); font-size:12px; text-align:center; cursor:pointer; }
.ins-dbg-drop:hover, .ins-dbg-drop:focus-visible, .ins-dbg-drop.is-over { border-color: var(--accent); color: var(--text); background: color-mix(in srgb, var(--accent) 8%, transparent); outline:none; }
.ins-dbg-dockbody > .ins-dbg-drop { margin:8px 10px; }
.ins-dbg-frow { display:grid; grid-template-columns: minmax(0,1fr) auto 22px; gap:8px; align-items:center; font-family: var(--font-mono); font-size:12px; }
.ins-dbg-frow .n { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; } .ins-dbg-frow .s { color: var(--text-dim); }
.ins-dbg-confirm { display:flex; flex-wrap:wrap; align-items:center; gap:8px; padding:8px 10px; border:1px solid color-mix(in srgb, var(--accent) 45%, transparent); border-radius:8px; background: color-mix(in srgb, var(--accent) 8%, transparent); font-size:12.5px; }
.ins-dbg-confirm > span { flex:1 1 260px; }
.ins-dbg-confirm[hidden] { display:none; }
.ins-dbg-status.is-input { background: color-mix(in srgb, var(--warning) 12%, transparent); box-shadow: inset 3px 0 0 var(--warning); }
.ins-dbg-apifilter { flex:1 1 220px; min-width:0; padding:3px 8px; font-size:12px; }
.ins-dbg-apibox { flex:1 1 auto; overflow:auto; }
.ins-dbg-api td { font-size:11.5px; vertical-align:top; }
.ins-dbg-api .ins-dbg-apiargs { white-space:normal; overflow-wrap:anywhere; min-width:160px; }
.ins-dbg-api tr.is-log td, .ins-dbg-api tr.is-note td { color: var(--warning); }
.ins-dbg-api .ins-link { border:0; background:transparent; padding:0; color: var(--accent-soft); font:inherit; cursor:pointer; }
.ins-dbg-api .ins-link:hover { text-decoration:underline; }
.ins-dbg-api .ins-dbg-from { color: var(--text-dim); }
.ins-dbg-gfiles td { font-size:12px; }
@media (max-width: 900px) {
  .ins-dbg-prog { grid-template-columns: 1fr; }
  .ins-dbg-prog > label { padding-top:0; }
}
/* phase 3: time travel (debug-timeline.js) - the timeline slider in the status line */
.ins-dbg-tl { flex:1 1 100%; display:flex; flex-wrap:wrap; align-items:center; gap:6px 10px; font-size:11.5px; }
.ins-dbg-tltrack { position:relative; flex:1 1 220px; min-width:140px; display:flex; align-items:center; }
.ins-dbg-tlrange { width:100%; margin:0; accent-color: var(--accent); cursor:pointer; }
.ins-dbg-tlrange:disabled { cursor:not-allowed; opacity:.5; }
.ins-dbg-ticks { position:absolute; left:8px; right:8px; top:-3px; height:6px; pointer-events:none; }
.ins-dbg-tick { position:absolute; top:0; width:2px; height:6px; margin-left:-1px; border-radius:1px; background: var(--warning); pointer-events:auto; }
.ins-dbg-tick.is-snap { background: var(--accent-soft); height:8px; top:-1px; }
.ins-dbg-tllabel { color: var(--text-dim); white-space:nowrap; }
.ins-dbg-tl.is-past .ins-dbg-tllabel { color: var(--warning); }
.ins-dbg-tlnote { flex:1 1 100%; color: var(--warning); }
/* value origin (debug-origin.js): the ↰ on a register, the chain at the top of the right panel */
.ins-dbg-reg { grid-template-columns: 44px max-content 18px minmax(0,1fr); }
.ins-dbg-who { width:18px; height:18px; font-size:12px; line-height:1; opacity:0; }
.ins-dbg-reg:hover .ins-dbg-who, .ins-dbg-who:focus { opacity:1; }
.ins-dbg-origin h4 { color: var(--accent-soft); }
.ins-dbg-hop { display:flex; flex-wrap:wrap; align-items:baseline; gap:2px 8px; padding:3px 4px; border-radius:4px; }
.ins-dbg-hop.is-click { cursor:pointer; } .ins-dbg-hop.is-click:hover { background: var(--bg-hover); }
.ins-dbg-hop .w { color: var(--accent-soft); font-weight:600; } .ins-dbg-hop .arr { color: var(--text-faint); }
.ins-dbg-hop .h { color: var(--text-code); } .ins-dbg-hop .at { flex:1 1 100%; color: var(--text-faint); font-size:11px; padding-left:12px; }
.ins-dbg-hop.is-initial .h, .ins-dbg-hop.is-edit .h, .ins-dbg-hop.is-api .h, .ins-dbg-hop.is-os .h { color: var(--warning); }
.ins-dbg-srcs { display:flex; flex-wrap:wrap; align-items:center; gap:4px; padding:4px 4px 0 12px; }
.ins-dbg-srcs .lbl { color: var(--text-faint); font-size:11px; }
.ins-dbg-src { font-family: var(--font-mono); font-size:11px; }
/* what-if (debug-whatif.js): snapshots + the side-by-side compare */
.ins-dbg-snapname { flex:0 1 220px; min-width:120px; height:26px; padding:0 8px; border-radius:6px; border:1px solid var(--border); background: var(--bg-inset); color: var(--text); font-size:12px; }
.ins-dbg-snap { display:flex; flex-wrap:wrap; align-items:center; gap:6px 10px; padding:4px 10px; border-bottom:1px solid var(--border-soft); font-size:12px; }
.ins-dbg-snap .n { font-weight:600; min-width:0; overflow-wrap:anywhere; } .ins-dbg-snap .p { flex:1 1 auto; color: var(--text-dim); font-family: var(--font-mono); font-size:11px; }
.ins-dbg-snap.is-other .n { color: var(--text-dim); }
.ins-dbg-cmp { padding:8px 10px 12px; display:flex; flex-direction:column; gap:8px; font-size:12px; }
.ins-dbg-cmphead { font-weight:600; }
.ins-dbg-cmpsame { color: var(--success); }
.ins-dbg-cmptab td, .ins-dbg-cmptab th { white-space:normal; overflow-wrap:anywhere; text-align:left; }
.ins-dbg-cmptab .mono { font-family: var(--font-mono); }
.ins-dbg-cmptab tr.is-diff td { color: var(--warning); }
.ins-dbg-cmpdiv { display:flex; flex-wrap:wrap; align-items:center; gap:6px; font-family: var(--font-mono); }
.ins-dbg-cmpdiv .lbl, .ins-dbg-cmpcol .lbl { color: var(--text-dim); }
.ins-dbg-cmpdiv.is-diff { color: var(--warning); }
.ins-dbg-cmpout { display:grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap:10px; }
.ins-dbg-cmpcol .ins-dbg-console { max-height:160px; min-height:0; border:1px solid var(--border-soft); border-radius:6px; }
/* coverage (debug-coverage.js): executed code while a debug session is open */
.ins-dline.is-cov, .ins-dbg-line.is-cov { background: color-mix(in srgb, var(--success) 12%, transparent); }
.ins-dline.is-cov .ad, .ins-dbg-line.is-cov .ad { color: var(--success); }
.ins-dbg-line.is-cov.is-pc { background: color-mix(in srgb, var(--accent) 22%, transparent); }
.ins-gblock.is-cov rect { fill: color-mix(in srgb, var(--success) 10%, var(--bg-panel)); stroke: color-mix(in srgb, var(--success) 60%, var(--border)); }
.ins-gblock text.ins-gins.is-cov { fill: var(--success); }
.ins-covpct { flex:0 0 auto; margin-left:4px; padding:0 4px; border-radius:4px; font-size:10px; font-family: var(--font-mono); color: var(--success); background: color-mix(in srgb, var(--success) 12%, transparent); }
.ins-covbar { display:inline-block; width:48px; height:6px; border-radius:3px; vertical-align:middle; background: linear-gradient(90deg, var(--success) var(--cov), var(--border-soft) var(--cov)); }
/* one-click API hooks (debug-hooks.js): an API log row takes the hook menu */
.ins-dbg-apirow { white-space:pre-wrap; }
.ins-dbg-apirow[title]:hover { background: var(--bg-hover); }
@media (max-width: 900px) {
  /* phones: everything stacks, the toolbar wraps (no key hints), the dock is below the code */
  .ins-dbg-tool kbd { display:none; }
  .ins-dbg-codemode { margin-left:0; }
  .ins-dbg { height:auto; min-height:100%; }
  .ins-dbg-main { flex:0 0 auto; overflow:visible; }
  .ins-dbg-dock { flex:0 0 auto; min-height:260px; }
  .ins-dbg-line { grid-template-columns: 18px 88px 50px minmax(0,1fr); white-space:pre-wrap; }
  .ins-dbg-line .iv { grid-column: 2 / -1; padding-left:0; }
  .ins-dbg-args { width:140px; }
}
/* C++ classes (inspect/classes.js, I13): the Class view */
.ins-class { padding:10px 14px; overflow:auto; }
.ins-class-name { margin:0 0 6px; font-family: var(--font-mono); font-size:14px; color: var(--text-on-light); }
.ins-class-list { display:flex; flex-direction:column; gap:2px; font-family: var(--font-mono); font-size:12px; margin-bottom:6px; }
.ins-class-vt { margin:10px 0 4px; font-family: var(--font-mono); font-size:12px; color: var(--text-dim); }
.ins-class-slots td { white-space:normal; overflow-wrap:anywhere; vertical-align:top; }
.ins-class-st { padding:0 5px; border-radius:4px; font-size:11px; white-space:nowrap; }
.ins-class-st.is-new { color: var(--accent); background: color-mix(in srgb, var(--accent) 12%, transparent); }
.ins-class-st.is-override { color: var(--warning); background: color-mix(in srgb, var(--warning) 12%, transparent); }
.ins-class-st.is-inherited { color: var(--text-dim); background: var(--bg-hover); }
.ins-class-st.is-pure { color: var(--danger-bright); background: color-mix(in srgb, var(--danger-bright) 12%, transparent); }
.ins-class-st.is-unknown { color: var(--text-faint); }
/* virtual calls (inspect/classes.js, I13): at the call in the listing, under the C, in the xrefs */
.ins-vcall.is-exact { color: var(--success); }
.ins-vcall.is-heuristic { color: var(--warning); }
.ins-vcall.is-unresolved { color: var(--danger-bright); }
.ins-vcall.is-user { color: var(--accent); }
.ins-vcbox { padding:4px 10px 10px; font-family: var(--font-mono); font-size:12px; }
.ins-vcrow { padding:2px 0; overflow-wrap:anywhere; }
.cl.has-vcall { box-shadow: inset 3px 0 0 var(--warning); }
/* I12 Value flow (inspect/valueflow.js): static value queries over Ghidra's P-code */
.ins-flow { padding:8px 10px; }
.ins-flow-form { max-width:760px; }
.ins-flow-check { font-size:12px; color: var(--text-dim); }
.ins-flow-prov { margin:8px 0 2px; font-size:12px; color: var(--text-dim); }
.ins-flow-head { margin:8px 0 4px; }
.ins-flow-addr { background:transparent; border:0; padding:0 4px; font: inherit; font-family: var(--font-mono); font-size:12px; color: var(--accent-soft); cursor:pointer; }
.ins-flow-addr:hover { text-decoration:underline; }
.ins-flow-badges { display:inline-flex; gap:4px; margin-right:6px; vertical-align:middle; }
.ins-flow-badge { padding:0 6px; border-radius:999px; font-size:11px; border:1px solid var(--border); }
.ins-flow-badge.is-exact { color: var(--success); border-color: color-mix(in srgb, var(--success) 50%, transparent); }
.ins-flow-badge.is-heuristic { color: var(--warning); border-color: color-mix(in srgb, var(--warning) 50%, transparent); }
.ins-flow-badge.is-unknown { color: var(--text-dim); }
.ins-flow-badge.is-ambiguous { color: var(--warning); border-style:dashed; }
.ins-flow-value code, .ins-flow-tree code, .ins-flow-table code, .ins-flow-list code { font-size:12px; white-space:pre-wrap; overflow-wrap:anywhere; }
.ins-flow-origin { display:block; font-size:12px; color: var(--text-dim); }
.ins-flow-tree { list-style:none; margin:2px 0 2px 14px; padding:0; border-left:1px solid var(--border-soft); }
.ins-flow-tree > li { padding:2px 0 2px 8px; }
.ins-flow-op { margin-right:6px; font-size:11px; color: var(--text-faint); font-family: var(--font-mono); }
.ins-flow-vals { margin-left:6px; font-family: var(--font-mono); font-size:12px; color: var(--success); }
.ins-flow-note { margin-left:6px; font-size:11px; color: var(--text-dim); }
.ins-flow-summary { margin:6px 0; }
.ins-flow-verdict { display:inline-block; margin:6px 0; padding:2px 8px; border-radius:6px; font-size:12px; border:1px solid var(--border); }
.ins-flow-verdict.is-ok { color: var(--success); border-color: color-mix(in srgb, var(--success) 50%, transparent); }
.ins-flow-verdict.is-none { color: var(--warning); border-color: color-mix(in srgb, var(--warning) 50%, transparent); }
.ins-flow-list { margin:2px 0 6px 18px; padding:0; }
.ins-flow-table td { vertical-align:top; }
@media (max-width: 900px) { .ins-flow-table td:nth-child(3), .ins-flow-table th:nth-child(3) { display:none; } }
