:root{--bg:#1b1d21;--bg-1:#22252a;--bg-2:#2a2e34;--bg-3:#33383f;--line:#3a3f47;--text:#d7dae0;--text-dim:#9aa0aa;--text-faint:#6b717b;--accent:#6cb4f5;--good:#5fc27a;--warn:#e3b341;--bad:#ef6b63;--info:#6cb4f5;--fluid:#6db3d6;--mono:ui-monospace,"JetBrains Mono","SF Mono",Menlo,Consolas,monospace;--sans:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;--summary-h:38vh}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--bg);color:var(--text);font:13px/1.4 var(--sans);overflow:hidden}button,input,select{font:inherit;color:inherit}button{background:var(--bg-3);border:1px solid var(--line);cursor:pointer;border-radius:4px;padding:3px 9px}button:hover{background:#3d434b}input[type=text],input[type=search],input[list]{background:var(--bg);border:1px solid var(--line);color:var(--text);border-radius:4px;width:100%;padding:4px 7px}input:focus{outline:1px solid var(--accent);border-color:var(--accent)}.num{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:12px}.muted{color:var(--text-dim)}.small{font-size:11px}.good{color:var(--good)}.warn{color:var(--warn)}.bad{color:var(--bad)}.info{color:var(--info)}#app{display:grid;grid-template-columns:270px minmax(0,1fr);height:100vh}.sidebar{background:var(--bg-1);border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0}.side-head{border-bottom:1px solid var(--line);padding:12px 12px 8px}.side-head h1{letter-spacing:.2px;margin:0 0 10px;font-size:15px;font-weight:600}.side-head h1 span{color:var(--text-dim);font-weight:400}.side-head h1 .sweep{margin-left:6px;font-size:11px}.dropzone{border:1px dashed var(--line);text-align:center;color:var(--text-dim);cursor:pointer;border-radius:6px;margin-bottom:8px;padding:10px;transition:border-color .12s,background .12s}.dropzone:hover,.dropzone.over{border-color:var(--accent);color:var(--text);background:#6cb4f514}.dropzone input{display:none}.path-hint{display:block;text-align:left;color:var(--text-faint);cursor:copy;background:0 0;border:0;width:100%;margin:-4px 0 8px;padding:2px 4px;font-size:11px;line-height:1.4}.path-hint code{color:var(--text-dim);word-break:break-all;font-family:ui-monospace,monospace}.path-hint:hover code{color:var(--accent);text-decoration:underline dotted}.path-hint.copied .path-label{color:#6cc77a}.path-hint.copy-failed .path-label{color:#e0b03a}.dropzone .link{color:var(--accent);text-decoration:underline dotted;cursor:pointer}.dropzone .link:hover{color:#fff}.bp-list{overflow:auto;flex:1;padding:6px 0}.bp-group{margin-bottom:6px}.bp-group-title{display:flex;text-align:left;text-transform:uppercase;letter-spacing:.6px;color:var(--text-faint);cursor:pointer;background:0 0;border:0;border-radius:0;align-items: center;gap:4px;width:100%;padding:6px 12px 3px 8px;font-size:11px}.bp-group-title:hover{color:var(--text);background:var(--bg-2)}.bp-group-title .chevron{display:inline-block;width:10px;font-size:10px}.bp-group-title .group-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bp-group-title .count{color:var(--text-faint)}.bp-group-title .group-summary{display:inline-flex;letter-spacing:0;text-transform:none;color:var(--text-dim);align-items: center;gap:2px;margin-left:auto;font-size:10px}.bp-group-title .group-summary .dot{width:7px;height:7px;margin:0 3px 0 4px}.bp-group.collapsed{margin-bottom:2px}.bp-item{display:block;text-align:left;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:0 0;border:0;border-radius:0;width:100%;padding:4px 12px 4px 18px}.bp-item:hover{background:var(--bg-2)}.bp-item.active{color:#fff;box-shadow:inset 3px 0 0 var(--accent);background:#6cb4f526}.bp-empty{color:var(--text-dim);padding:12px}.main{display:grid;grid-template-rows:auto minmax(80px,var(--summary-h))6px minmax(0,1fr);min-width:0;min-height:0}.topbar{border-bottom:1px solid var(--line);background:var(--bg-1);display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 16px;padding:10px 16px 8px}.topbar h2{margin:0;font-size:17px;font-weight:600}.topbar .desc{color:var(--text-dim);white-space:pre-wrap;flex-basis:100%}.banner{color:var(--warn);background:#e3b3411f;border:1px solid #e3b34166;border-radius:4px;flex-basis:100%;padding:6px 10px}.banner.error{color:var(--bad);background:#ef6b631f;border-color:#ef6b6373}.summary{overflow:auto;padding:8px 16px 14px}.splitter{background:var(--line);cursor:row-resize}.splitter:hover{background:var(--accent)}.placeholder{color:var(--text-dim);text-align:center;grid-row:2/span 3;padding:40px}.sections{display:grid;grid-template-columns:repeat(auto-fit,minmax(540px,1fr));gap:10px 24px}.sections>*{overflow-x:auto;min-width:0}.section{min-width:0}.section.wide{grid-column:1/-1}.section h3{text-transform:uppercase;letter-spacing:.7px;color:var(--text-dim);margin:10px 0 4px;font-size:11px;font-weight:600}.section h3 .count{color:var(--text-faint);margin-left:6px;font-weight:400}table.grid{border-collapse:collapse;width:100%}table.grid th{text-align:left;color:var(--text-faint);border-bottom:1px solid var(--line);white-space:nowrap;padding:3px 8px 3px 0;font-size:11px;font-weight:500}table.grid td{vertical-align:middle;border-bottom:1px solid #3a3f4780;padding:3px 8px 3px 0}table.grid td.num,table.grid td.nowrap{white-space:nowrap}table.grid td.status{min-width:160px}table.grid th.num,table.grid td.num{text-align:right}table.grid tr.clickable{cursor:pointer}table.grid tr.clickable:hover td{background:var(--bg-2)}table.grid tr.selected td{background:#6cb4f51a}.none{color:var(--text-faint);font-style:italic}.tag{display:inline-block;background:var(--bg-3);color:var(--text-dim);vertical-align:middle;text-transform:uppercase;letter-spacing:.4px;border-radius:3px;margin-left:6px;padding:0 5px;font-size:10px}.tag.warn{color:var(--warn);background:#e3b3412e}.tag.bad{color:var(--bad);background:#ef6b632e}.tag.good{color:var(--good);background:#5fc27a2e}.tag.accent{color:var(--accent);background:#6cb4f52e}.item-cell{display:flex;align-items: center;gap:4px;min-width:190px}.item-cell input{width:150px;padding:2px 6px}.item-cell .reset{padding:1px 6px}.eff-text{font-family:var(--mono);font-size:12px}.eff-text.good{color:var(--good)}.eff-text.warn{color:var(--warn)}.eff-text.bad{color:var(--bad)}.eff-text.none{color:var(--text-dim)}.findings{list-style:none;margin:0;padding:0}.findings li{display:flex;cursor:pointer;border-radius:4px;align-items:baseline;gap:8px;padding:4px 6px}.findings li:hover{background:var(--bg-2)}.findings li.selected{background:#6cb4f51f}.findings .sev{text-align:center;flex:none;width:14px;font-weight:700}.findings .kind{color:var(--text-faint);flex:none;margin-left:auto;font-size:11px}details.warnings summary{cursor:pointer;color:var(--text-dim)}details.warnings ul{color:var(--text-dim);font-family:var(--mono);margin:4px 0;padding-left:18px;font-size:11px}.graph{position:relative;overflow:hidden;background:var(--bg);outline:none;min-height:0}.graph-svg{display:block;cursor:grab;touch-action:none;width:100%;height:100%}.graph-svg.dragging{cursor:grabbing}.graph-svg text{font-family:var(--sans);fill:var(--text);pointer-events:none;user-select:none;font-size:10.5px}.graph-toolbar{position:absolute;display:flex;gap:4px;top:8px;left:8px}.graph-empty[hidden]{display:none}.graph-empty{position:absolute;display:grid;color:var(--text-dim);pointer-events:none;place-items: center;inset:0}.node{cursor:pointer}.node .box{fill:var(--bg-2);stroke:var(--line);stroke-width:1.2}.node .outline{fill:none;stroke:var(--line);stroke-width:1.2}.node .band{fill:var(--text-faint)}.node text.title{font-size:11px;font-weight:600}.node text.sub{fill:var(--text-dim);font-size:10px}.node text.sub.missing{fill:var(--bad);font-weight:600}.node text.eff{font-family:var(--mono);font-size:10.5px}.node.eff-good .band{fill:var(--good)}.node.eff-warn .band{fill:var(--warn)}.node.eff-bad .band{fill:var(--bad)}.node.eff-good .box{fill:#23302a}.node.eff-warn .box{fill:#342f22}.node.eff-bad .box{fill:#382626}.node.eff-good .outline{stroke:#5fc27a80}.node.eff-warn .outline{stroke:#e3b34199}.node.eff-bad .outline{stroke:#ef6b6399}text.eff-good{fill:var(--good)}text.eff-warn{fill:var(--warn)}text.eff-bad{fill:var(--bad)}text.eff-none{fill:var(--text-dim)}.node.kind-splitter .box,.node.kind-merger .box,.node.kind-smartSplitter .box{fill:var(--bg-3);stroke:#4a5059}.node.kind-smartSplitter .box{stroke:var(--accent)}.node text.glyph{fill:var(--text);font-size:11px;font-weight:700}.node.kind-externalIn .box{fill:#243545;stroke:var(--accent)}.node.kind-externalOut .box{fill:#2f2a3d;stroke:#b48cf2}.node.kind-storage .box{fill:#2b2f36;stroke:#8891a0}.node.kind-storage .lid{fill:#363b44;stroke:#8891a0;stroke-width:1}.node.kind-fluidNetwork .box{fill:#6db3d614;stroke:var(--fluid);stroke-dasharray:5 3}.node.kind-other .box{fill:var(--bg-1);stroke:var(--text-faint);stroke-dasharray:3 2}.node.hl .box,.node.hl .outline{stroke-width:2.5;filter:drop-shadow(0 0 6px #ffd257b3);stroke:#ffd257!important}.edge .edge-line{fill:none;stroke:#8f96a3;stroke-linecap:round;stroke-linejoin:round}.edge .edge-hit{fill:none;stroke:transparent;stroke-width:14;cursor:pointer}.edge.fluid .edge-line{stroke:var(--fluid);stroke-dasharray:7 4}.edge.zero .edge-line{stroke:#4a4f57}.edge.saturated .edge-line{stroke:var(--warn)}.edge.bottleneck .edge-line{stroke:var(--bad)}.edge.pass .edge-line,.edge.pass.fluid .edge-line{stroke-dasharray:2 5}.edge:hover .edge-line{filter:brightness(1.3)}.edge.hl .edge-line{filter:drop-shadow(0 0 5px #ffd257cc);stroke:#ffd257!important}.arrow path{fill:#8f96a3}.arrow-bottleneck path{fill:var(--bad)}.arrow-saturated path{fill:var(--warn)}.arrow-zero path{fill:#4a4f57}.arrow-fluid path{fill:var(--fluid)}.arrow-hl path{fill:#ffd257}.elabel{cursor:pointer}.elabel rect{fill:#1b1d21e0;stroke:none}.elabel text{font-family:var(--mono);text-anchor:middle;fill:var(--text);font-size:10px}.elabel text.belt{fill:var(--text-dim);font-size:9.5px}.elabel.bottleneck text.flow{fill:var(--bad)}.elabel.saturated text.flow{fill:var(--warn)}.elabel.hl rect{stroke:#ffd257;stroke-width:1}.has-hl .node:not(.hl),.has-hl .edge:not(.hl),.has-hl .elabel:not(.hl){opacity:.32}.has-hl .node.hl,.has-hl .edge.hl,.has-hl .elabel.hl{opacity:1}.tooltip,.pinned{position:absolute;border:1px solid var(--line);z-index:5;background:#22252af7;border-radius:6px;min-width:220px;max-width:380px;padding:8px 10px;box-shadow:0 6px 24px #00000073}.tooltip{pointer-events:none}.pinned{overflow:auto;max-height:calc(100% - 56px);top:44px;right:8px}.pinned .close{position:absolute;padding:0 6px;line-height:1.3;top:4px;right:4px}.details .d-title{margin-bottom:4px;padding-right:20px;font-weight:600}.details .d-sub{text-transform:uppercase;letter-spacing:.5px;color:var(--text-faint);margin:6px 0 2px;font-size:11px}.details .kv{display:flex;gap:8px;padding:1px 0}.details .kv .k{color:var(--text-dim);flex:0 0 110px}.details .kv .v{flex:1}.details ul.plain{margin:2px 0;padding-left:16px}.details ul.notes{color:var(--text-dim)}.details table.mini{border-collapse:collapse;width:100%;font-size:12px}.details table.mini th{text-align:left;color:var(--text-faint);padding:1px 6px 1px 0;font-size:10px;font-weight:500}.details table.mini td{padding:1px 6px 1px 0}.details table.mini .num{text-align:right}.details table.mini tr.limiting td{color:var(--bad)}.details ol.segments{margin:2px 0;padding-left:18px}.details ol.segments li{display:flex;justify-content:space-between;gap:10px}.details ol.segments li.limiting{color:var(--warn)}.legend{position:absolute;border:1px solid var(--line);z-index:4;background:#22252af2;border-radius:6px;padding:8px 10px;font-size:11px;bottom:8px;left:8px}.legend-title{margin-bottom:4px;font-weight:600}.legend-row{display:flex;align-items: center;gap:8px;padding:1px 0}.legend-box{display:inline-block;border:1px solid var(--line);border-radius:2px;width:14px;height:12px}.legend-box.good{border-left:4px solid var(--good);background:#23302a}.legend-box.warn{border-left:4px solid var(--warn);background:#342f22}.legend-box.bad{border-left:4px solid var(--bad);background:#382626}.legend-box.none{background:var(--bg-2);border-left:4px solid var(--text-faint)}.legend-glyph{text-align:center;width:34px;font-weight:700}.legend-line line{stroke-width:3;stroke:#8f96a3}.legend-line .leg-bottleneck{stroke:var(--bad);stroke-width:5}.legend-line .leg-saturated{stroke:var(--warn)}.legend-line .leg-fluid{stroke:var(--fluid);stroke-dasharray:6 3}.legend-line .leg-zero{stroke:#4a4f57;stroke-width:1.5}.legend-line .leg-pass{stroke-dasharray:2 4}.loading{color:var(--text-dim)}.loading:after{content:"";display:inline-block;border:2px solid var(--text-faint);border-top-color:var(--accent);animation:spin .8s linear infinite;vertical-align:middle;border-radius:50%;width:10px;height:10px;margin-left:8px}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width:1100px){#app{grid-template-columns:220px minmax(0,1fr)}.sections{grid-template-columns:1fr}}.graph-toolbar button.toggle{margin-left:8px}.graph-toolbar button.active{color:#c6d4ff;border-color:#7aa2f7}[hidden]{display:none!important}.edge.backed .edge-line{stroke-dasharray:10 4}.elabel.backed text{fill:var(--text-dim)}.d-note{color:var(--text-dim);margin:4px 0 8px;font-size:11px;line-height:1.35}.edge.mixed .edge-line{stroke:#c678dd;stroke-dasharray:3 3}.elabel.mixed text,.elabel text.mixed{fill:#c678dd}.tag.mixed{color:#e0b0ff;background:#3b2a44}.dot{display:inline-block;vertical-align:middle;background:0 0;border:1px solid #0000;border-radius:50%;flex:none;width:8px;height:8px;margin-right:8px}.dot-error{background:#e5484d;box-shadow:0 0 6px #e5484d8c}.dot-warn{background:#e0b03a}.dot-ok{background:#58a06e8c}.dot-none{border-color:var(--text-faint)}.icon{display:inline-block;vertical-align:-4px;image-rendering:auto;background-repeat:no-repeat;border-radius:3px;flex:none}.with-icon{display:inline-flex;align-items: center;gap:6px}.item-cell .icon{margin-right:2px}.gicon{pointer-events:none}.node.paused .box{stroke-dasharray:4 3;opacity:.55}.node.paused text{opacity:.6}.node.paused .band{fill:var(--text-faint)}
