@layer lab-base{:root{--ct-node:#4f46e5;--ct-node-deep:#25237a;--ct-trash:#5f6368;--ct-r1:#4f46e5;--ct-r2:#0d9488;--ct-r3:#c2410c}.vega-ctl input[type=text],.vega-ctl select{flex:0 auto;min-width:70px}.vega-ctl select{font-family:var(--mono);border:1px solid var(--line-strong);color:var(--ink);background:#fff;border-radius:10px;padding:6px 10px;font-size:13px}.vega-treebox{width:100%;overflow-x:auto}.vega-treebox svg{margin:0 auto;display:block}.replicas{flex-wrap:wrap;align-items:flex-start;gap:16px;display:flex}.replicas .pane{border:1px solid var(--line-strong);background:var(--panel);border-radius:14px;flex:1;min-width:240px;overflow:hidden}.replicas .pane>h4{font-family:var(--mono);background:var(--accent-soft);color:var(--accent-deep);border-bottom:1px solid var(--line-strong);justify-content:space-between;align-items:center;gap:8px;margin:0;padding:8px 12px;font-size:12.5px;font-weight:600;display:flex}.replicas .pane.r1>h4{color:#312e9e;background:#eef0ff}.replicas .pane.r2>h4{color:#0b6e63;background:#e6f7f4}.replicas .pane.r3>h4{color:#9a3412;background:#fdeee3}.replicas .pane .body{padding:8px 10px}.replicas .pane .conv{font-size:11px;font-family:var(--mono);font-weight:600}.replicas .pane .conv.ok{color:var(--good)}.replicas .pane .conv.no{color:var(--muted)}.vega-legend{align-items:center;gap:16px}.vega-legend .dot{border:1px solid;border-radius:50%;width:16px;height:16px}.vega-legend .dot.node{background:var(--ct-node);border-color:var(--ct-node-deep)}.vega-legend .dot.hot{background:var(--ct-node);border-width:3px;border-color:#f59e0b}.vega-legend .dot.target{border-color:var(--ct-node);background:#fff;border-style:dashed}.vega-legend .dot.bad{border-color:var(--bad);background:#fff;border-style:dashed}.vega-legend .dot.trash{background:var(--ct-trash);border-color:#5f586e}.chips{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.opchip{font-family:var(--mono);border:1px solid var(--line);color:var(--ink-soft);background:#fff;border-radius:999px;padding:3px 10px;font-size:11px}.opchip.do{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.opchip.undo{color:#b7791f;background:#fff7e6;border-color:#f0b429}.opchip.redo{border-color:var(--accent-2);background:var(--accent-soft);color:var(--accent-2)}.opchip.ignore{border-color:var(--bad);background:var(--bad-soft);color:var(--bad)}.opchip.done{background:var(--good-soft);color:var(--good);border-color:#b4eecf}table.oplog{border-collapse:separate;border-spacing:0;width:100%;font-family:var(--mono);border:1px solid var(--line-strong);border-radius:12px;margin:6px 0;font-size:12px;overflow:hidden}table.oplog th,table.oplog td{border-bottom:1px solid var(--line);border-right:1px solid var(--line);text-align:center;padding:5px 10px}table.oplog tr:last-child td{border-bottom:none}table.oplog th:last-child,table.oplog td:last-child{border-right:none}table.oplog th{background:var(--accent-soft);color:var(--accent-deep);font-weight:600}table.oplog td.ts{color:var(--accent);font-weight:600}table.oplog tr.cur td{background:var(--accent-soft)}table.oplog tr.undone td{opacity:.42;text-decoration:line-through}table.oplog td .eff.ok{color:var(--good);font-weight:600}table.oplog td .eff.no{color:var(--muted)}.netbuf{flex-wrap:wrap;align-items:center;gap:8px;min-height:38px;margin:6px 0;display:flex}.netbuf .pkt{font-family:var(--mono);border:1px solid var(--line-strong);color:var(--ink);cursor:pointer;-webkit-user-select:none;user-select:none;background:#fff;border-radius:10px;padding:5px 10px;font-size:11.5px}.netbuf .pkt:hover{border-color:var(--accent)}.netbuf .pkt .src{font-weight:600}.netbuf .pkt.to1{border-left:6px solid var(--ct-r1)}.netbuf .pkt.to2{border-left:6px solid var(--ct-r2)}.netbuf .pkt.to3{border-left:6px solid var(--ct-r3)}.netbuf .empty{font-family:var(--mono);color:var(--muted);font-size:11.5px}.invariants{gap:4px;margin:8px 0;display:grid}.invariants .row{font-family:var(--mono);border:1px solid var(--line);background:#fff;border-radius:10px;align-items:center;gap:8px;padding:5px 12px;font-size:12px;display:flex}.invariants .row .mark{font-weight:600}.invariants .row.pass{background:var(--good-soft);border-color:#b4eecf}.invariants .row.pass .mark{color:var(--good)}.invariants .row.fail{background:var(--bad-soft);border-color:#f9c0c5}.invariants .row.fail .mark{color:var(--bad)}.invariants .row .name{color:var(--ink-soft)}.stepmeta{font-family:var(--mono);color:var(--muted);font-size:11px}.tsbadge{font-family:var(--mono);background:var(--accent-soft);color:var(--accent-deep);border:1px solid var(--accent-line);border-radius:999px;padding:1px 7px;font-size:11px;font-weight:600}}
