/* 组 b 专属视图样式 */
/* blink：按真实 next/random 指针画出的链表 */
.v-bl-svg{display:block;max-width:none;font-family:ui-monospace,Menlo,monospace}
.v-bl-svg .vbl-edge{fill:none;stroke:#94a3b8;stroke-width:1.8}
.v-bl-svg .vbl-edge.v-cur{stroke:var(--amber);stroke-width:2.4;stroke-dasharray:6 3}
.v-bl-svg .vbl-edge.v-done{stroke:var(--green);stroke-width:2.2}
.v-bl-svg .vbl-edge.v-new{stroke:var(--blue);stroke-width:2.4}
.v-bl-svg .vbl-edge.v-bad{stroke:var(--red);stroke-dasharray:4 4;opacity:.75}
.v-bl-svg .vbl-edge.v-cyc{stroke:var(--purple);stroke-width:2.2}
.v-bl-svg .vbl-edge.v-rand{stroke:var(--purple);stroke-width:1.6;stroke-dasharray:5 3}
.v-bl-svg .vbl-edge.v-map{stroke:#cbd5e1;stroke-width:1.2;stroke-dasharray:2 4}
.v-bl-svg .vbl-edge.v-dim{opacity:.35}
.v-bl-svg .vbl-m{fill:#94a3b8}.v-bl-svg .vbl-m-cur{fill:var(--amber)}.v-bl-svg .vbl-m-done{fill:var(--green)}.v-bl-svg .vbl-m-new{fill:var(--blue)}
.v-bl-svg .vbl-m-bad{fill:var(--red)}.v-bl-svg .vbl-m-cyc,.v-bl-svg .vbl-m-rand{fill:var(--purple)}.v-bl-svg .vbl-m-map{fill:#cbd5e1}
.v-bl-svg .vbl-node circle{fill:#fff;stroke:#94a3b8;stroke-width:1.6}
.v-bl-svg .vbl-node text.vbl-val{font-size:13px;font-weight:700;text-anchor:middle;fill:var(--ink)}
.v-bl-svg .vbl-node.v-cur circle{stroke:var(--amber);stroke-width:2.2;stroke-dasharray:4 2;fill:var(--amber-bg)}
.v-bl-svg .vbl-node.v-done circle{stroke:var(--green);fill:var(--pale)}
.v-bl-svg .vbl-node.v-hit circle{stroke:var(--green);fill:var(--green)}.v-bl-svg .vbl-node.v-hit text.vbl-val{fill:#fff}
.v-bl-svg .vbl-node.v-read circle{stroke:var(--purple);stroke-width:2;fill:#f5f3ff}
.v-bl-svg .vbl-node.v-new circle{stroke:var(--blue);stroke-width:2;fill:#eef4fb}
.v-bl-svg .vbl-node.v-bad circle{stroke:var(--red);fill:#fdeeee}.v-bl-svg .vbl-node.v-bad text.vbl-val{fill:var(--red);text-decoration:line-through}
.v-bl-svg .vbl-node.v-dim{opacity:.4}
.v-bl-svg .vbl-node.v-ghost circle{stroke-dasharray:3 3;fill:#f8fafc}.v-bl-svg .vbl-node.v-ghost text.vbl-val{fill:#94a3b8}
.v-bl-svg .vbl-null rect{fill:#fff;stroke:#cbd5e1;stroke-dasharray:4 3;stroke-width:1.4}
.v-bl-svg .vbl-null text{font-size:11px;fill:var(--muted);text-anchor:middle}
.v-bl-svg .vbl-ptr{font-size:11.5px;font-weight:700;fill:var(--amber);text-anchor:middle;paint-order:stroke;stroke:#fff;stroke-width:3px}
.v-bl-svg .vbl-sub{font-size:10.5px;fill:var(--muted);text-anchor:middle;paint-order:stroke;stroke:#fff;stroke-width:3px}
.v-bl-svg .vbl-elab{font-size:10.5px;fill:var(--purple);text-anchor:middle;paint-order:stroke;stroke:#fff;stroke-width:3px}
.v-bl-svg .vbl-group rect{fill:#f1f5f9;stroke:#cbd5e1;stroke-width:1}
.v-bl-svg .vbl-group.v-cur rect{fill:var(--amber-bg);stroke:var(--amber);stroke-dasharray:5 3}
.v-bl-svg .vbl-group.v-done rect{fill:var(--pale);stroke:#9cd3b6}
.v-bl-svg .vbl-group.v-new rect{fill:#eef4fb;stroke:#a9c2e2}
.v-bl-svg .vbl-group text{font-size:10.5px;fill:var(--muted)}
.v-bl-svg .vbl-rowlab{font-size:11px;fill:var(--muted)}
/* segs：归并排序的分段递归表（148） */
.v-segs{display:grid;gap:6px;min-width:max-content}
.v-seg{border:1.5px solid #cbd5e1;border-radius:6px;background:#fff;padding:4px 6px;font:700 12.5px ui-monospace,Menlo,monospace;text-align:center;min-height:30px;display:flex;align-items:center;justify-content:center;gap:4px;flex-wrap:wrap;color:var(--ink)}
.v-seg small{font-weight:400;color:var(--muted);font-size:10.5px}
.v-seg.v-wait{border-style:dashed;color:#94a3b8;background:#f8fafc}
.v-seg.v-cur{border:2px dashed var(--amber);background:var(--amber-bg);color:var(--amber)}
.v-seg.v-done{border-color:var(--green);background:var(--pale);color:var(--green)}
.v-seg.v-read{border-color:var(--purple);background:#f5f3ff;color:var(--purple)}
.v-seg.v-new{border-color:var(--blue);background:#eef4fb;color:var(--blue)}
.v-segs-lab{font-size:11px;color:var(--muted);align-self:center;white-space:nowrap}
/* frames：递归调用栈（104/148） */
.v-frames{display:flex;flex-direction:column-reverse;gap:4px;min-width:150px}
.v-frame{border:1px solid #cbd5e1;border-radius:5px;padding:3px 8px;font:12px ui-monospace,Menlo,monospace;background:#fff;display:flex;justify-content:space-between;gap:10px}
.v-frame b{font-weight:700}.v-frame span{color:var(--muted)}
.v-frame.v-cur{border:2px dashed var(--amber);background:var(--amber-bg)}
.v-frame.v-done{border-color:var(--green);background:var(--pale)}
.v-bl-svg.vbl-fit{max-width:100%;height:auto}
