@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/barlow-vietnamese-400-normal-Dpl4UHAZ.woff2) format("woff2"),url(/assets/barlow-vietnamese-400-normal-BFeobeCK.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/barlow-latin-ext-400-normal-HxX4XjxC.woff2) format("woff2"),url(/assets/barlow-latin-ext-400-normal-CvBsJvxq.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/barlow-latin-400-normal-qiz4-Cze.woff2) format("woff2"),url(/assets/barlow-latin-400-normal-fsAxiSwU.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/barlow-vietnamese-500-normal-zTViEIzf.woff2) format("woff2"),url(/assets/barlow-vietnamese-500-normal-GNfB7rCE.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/barlow-latin-ext-500-normal-DOaysfXq.woff2) format("woff2"),url(/assets/barlow-latin-ext-500-normal-CJPcKP2Q.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/barlow-latin-500-normal-BPAOfeC8.woff2) format("woff2"),url(/assets/barlow-latin-500-normal-C1h8hMer.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-vietnamese-600-normal-DcjprdFV.woff2) format("woff2"),url(/assets/barlow-vietnamese-600-normal-CA_GiK2e.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-latin-ext-600-normal-B8NK_A3D.woff2) format("woff2"),url(/assets/barlow-latin-ext-600-normal-DMVRjfRT.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-latin-600-normal-DILqtrty.woff2) format("woff2"),url(/assets/barlow-latin-600-normal-CNwfPWQD.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-semi-condensed-vietnamese-600-normal-b1FQiZcx.woff2) format("woff2"),url(/assets/barlow-semi-condensed-vietnamese-600-normal-DzVrjA0Q.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-semi-condensed-latin-ext-600-normal-BkQ9hN72.woff2) format("woff2"),url(/assets/barlow-semi-condensed-latin-ext-600-normal-BuP8AaxH.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-semi-condensed-latin-600-normal-BkLiAYu4.woff2) format("woff2"),url(/assets/barlow-semi-condensed-latin-600-normal-DyOfdMBA.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/barlow-semi-condensed-vietnamese-700-normal-Dm7RZTvf.woff2) format("woff2"),url(/assets/barlow-semi-condensed-vietnamese-700-normal-BvUTSFNY.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/barlow-semi-condensed-latin-ext-700-normal-BhgEo64M.woff2) format("woff2"),url(/assets/barlow-semi-condensed-latin-ext-700-normal-C0vCoZIV.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/barlow-semi-condensed-latin-700-normal-BpqDG8I9.woff2) format("woff2"),url(/assets/barlow-semi-condensed-latin-700-normal-BMyZXq_9.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper: #e6ecef;--panel: #f6f8f9;--ink: #17324d;--ink-soft: #546a7f;--rule: #cdd6dc;--rule-strong: #a9b7c2;--flow: #e3a21a;--flow-deep: #a8690b;--cut: #c2362b;--reverse: #1f8a80;--safe: #3c7a57;--focus: #2b6cb0;--sans: "Barlow", "Segoe UI", system-ui, sans-serif;--cond: "Barlow Semi Condensed", "Barlow", "Arial Narrow", sans-serif;font-family:var(--sans);font-size:15px;line-height:1.45;color:var(--ink);background:var(--paper);font-variant-numeric:tabular-nums}*{box-sizing:border-box}body{margin:0}h1,h2,h3{font-family:var(--cond);font-weight:600;margin:0;letter-spacing:.005em}p{margin:0 0 .6em}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}button,.button-like,input,select{font:inherit;color:inherit}button,.button-like{border:1px solid var(--rule-strong);background:var(--panel);border-radius:4px;padding:.35em .8em;cursor:pointer;font-weight:500}button:hover:not(:disabled),.button-like:hover{border-color:var(--ink)}button:disabled{opacity:.45;cursor:not-allowed}button.primary{background:var(--ink);color:var(--panel);border-color:var(--ink)}button.primary:hover:not(:disabled){background:#0f2438}button.link{border:none;background:none;padding:.2em 0;color:var(--ink-soft);text-decoration:underline;text-underline-offset:2px}button.small,.small{font-size:.85em}input,select{border:1px solid var(--rule-strong);border-radius:4px;padding:.3em .5em;background:#fff;min-width:0}.muted{color:var(--ink-soft)}.error{color:var(--cut)}.app{display:grid;grid-template-columns:290px minmax(0,1fr) 330px;grid-template-rows:minmax(560px,72vh) auto;grid-template-areas:"side stage panel" "side bottom bottom";min-height:100vh;background:linear-gradient(90deg,var(--ink) 290px,var(--paper) 290px)}.sidebar{grid-area:side}.stage{grid-area:stage}.side-panel{grid-area:panel}.bottom{grid-area:bottom}.sidebar{height:100vh;background:var(--ink);color:#e8eef3;padding:1.2rem 1.1rem 2rem;display:flex;flex-direction:column;gap:1.4rem;overflow-y:auto;max-height:100vh;position:sticky;top:0}.sidebar .brand h1{font-size:1.6rem;line-height:1.1;font-weight:700;color:#fff}.sidebar .brand p{color:#a9bccd;margin-top:.3rem}.sidebar h2{font-size:1.05rem;color:var(--flow);margin-bottom:.5rem}.sidebar section{display:flex;flex-direction:column;gap:.6rem}.sidebar button,.sidebar .button-like{background:transparent;color:#e8eef3;border-color:#3f5c78}.sidebar button:hover:not(:disabled),.sidebar .button-like:hover{border-color:#e8eef3}.sidebar button.primary{background:var(--flow);color:var(--ink);border-color:var(--flow);font-weight:600}.sidebar button.primary:hover:not(:disabled){background:#f0b437}.sidebar button.link{color:#a9bccd}.sidebar input,.sidebar select{background:#0f2438;border-color:#3f5c78;color:#fff;width:100%}.sidebar .run{padding:.6em;font-size:1.05rem}.sidebar .notice.warn{background:#3a2f12;color:#f3d38b}.instance-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}.instance-list li{display:flex;align-items:center;gap:.3rem;border-left:3px solid transparent}.instance-list li.on{border-left-color:var(--flow);background:#20405f}.instance-list li>button:first-child{flex:1;text-align:left;border:none;padding:.35em .55em;display:flex;flex-direction:column}.instance-list .inst-name{font-weight:600}.instance-list .inst-size{font-size:.85em;color:#a9bccd}.instance-list li .link{opacity:0}.instance-list li:hover .link,.instance-list li .link:focus-visible{opacity:1}.row{display:flex;flex-wrap:wrap;gap:.4rem}.fields{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}.fields label,.editor-meta label{display:flex;flex-direction:column;gap:.15rem;font-size:.88em}.segmented{display:inline-flex;border:1px solid var(--rule-strong);border-radius:4px;overflow:hidden}.segmented button{border:none;border-radius:0;background:transparent;padding:.35em .75em}.segmented button+button{border-left:1px solid var(--rule-strong)}.segmented button.on{background:var(--ink);color:var(--panel)}.sidebar .segmented{border-color:#3f5c78;display:flex}.sidebar .segmented button{flex:1}.sidebar .segmented button+button{border-left-color:#3f5c78}.sidebar .segmented button.on{background:#e8eef3;color:var(--ink)}.stage{display:flex;flex-direction:column;padding:1rem 1.2rem .6rem;gap:.6rem;min-width:0}.stage-head{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;flex-wrap:wrap}.stage-head h2{font-size:1.5rem}.stage-head p{max-width:70ch;font-size:.9em}.mode-note{margin:0;font-size:.9em;color:var(--reverse)}.canvas-wrap{position:relative;flex:1;min-height:320px;background:var(--panel);border:1px solid var(--rule);border-radius:6px;background-image:linear-gradient(var(--rule) 1px,transparent 1px),linear-gradient(90deg,var(--rule) 1px,transparent 1px);background-size:32px 32px;background-position:-1px -1px}.graph-canvas{position:absolute;top:0;right:0;bottom:0;left:0}.legend{margin:0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:.3rem 1.1rem;font-size:.85em;color:var(--ink-soft)}.legend li{display:flex;align-items:center;gap:.35rem}.swatch{width:22px;height:0;border-top:4px solid;display:inline-block}.sw-flow{border-color:var(--flow)}.sw-sat{border-color:var(--flow-deep)}.sw-path{border-color:var(--ink)}.sw-rev{border-top-style:dashed;border-color:var(--reverse);border-top-width:3px}.sw-cut{border-color:var(--cut)}.sw-res{border-color:var(--rule-strong);border-top-width:2px}.dot{width:11px;height:11px;border-radius:50%;border:2px solid var(--ink);display:inline-block}.dot-src{background:var(--flow)}.dot-snk{background:var(--safe)}.empty-stage{margin:auto;max-width:46ch;text-align:center}.empty-stage h2{font-size:1.6rem;margin-bottom:.4rem}.timeline{display:flex;flex-direction:column;gap:.35rem}.timeline-controls{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center}.timeline-caption{margin-left:.6rem;font-family:var(--cond);font-weight:600;font-size:1.05rem}.timeline-bars{width:100%;height:70px;display:block;border-bottom:2px solid var(--ink)}.timeline-bars .bar{fill:var(--rule-strong);cursor:pointer}.timeline-bars .bar.done{fill:var(--flow)}.timeline-bars .bar.current{fill:var(--ink)}.timeline-bars .bar:hover{fill:var(--flow-deep)}.timeline-bars .bar-final{fill:none;stroke:var(--cut);stroke-width:3}.timeline-range{width:100%;accent-color:var(--ink);margin:0}.timeline-empty{padding:.6rem 0;color:var(--cut)}.side-panel{border-left:1px solid var(--rule);background:var(--panel);overflow-y:auto;max-height:72vh;min-height:560px}.step-panel{padding:1.1rem 1.1rem 1.4rem;display:flex;flex-direction:column;gap:1rem}.headline{display:flex;flex-direction:column;border-bottom:2px solid var(--ink);padding-bottom:.6rem}.headline-number{font-family:var(--cond);font-weight:700;font-size:3.2rem;line-height:1}.headline-label{color:var(--ink-soft)}.step-detail h3{font-size:1.2rem;margin-bottom:.5rem}.path-chips{list-style:none;padding:0;margin:0 0 .6rem;display:flex;flex-wrap:wrap;gap:.25rem 0}.path-chips li{display:flex;align-items:center;font-weight:600}.path-chips li+li:before{content:"";width:18px;border-top:3px solid var(--ink);margin:0 .25rem}.path-chips li.via-reverse:before{border-top-style:dashed;border-top-color:var(--reverse)}.path-chips li.gap{font-weight:400;color:var(--ink-soft);font-style:italic}.reverse-note{color:var(--reverse)}.metrics{margin:0;display:grid;gap:.3rem}.metrics div{display:flex;justify-content:space-between;gap:1rem;border-bottom:1px solid var(--rule);padding:.2rem 0}.metrics dt{color:var(--ink-soft)}.metrics dd{margin:0;font-weight:600;text-align:right}.notice{border-radius:4px;padding:.55rem .7rem;font-size:.9em}.notice p:last-child{margin:0}.notice.ok{background:#e2efe7;color:#23533a;border-left:4px solid var(--safe)}.notice.warn{background:#fbefd5;color:#6b4a07;border-left:4px solid var(--flow)}.error-banner{background:#f7e1df;color:#7c211a;border-left:4px solid var(--cut)}.bottom{padding:.8rem 1.2rem 2rem;border-top:1px solid var(--rule);background:var(--paper)}.tabs{display:flex;gap:.2rem;border-bottom:2px solid var(--ink);margin-bottom:.8rem}.tabs button{border:none;border-radius:4px 4px 0 0;background:transparent;padding:.45em 1em;font-family:var(--cond);font-size:1.05rem;font-weight:600;color:var(--ink-soft)}.tabs button.on{background:var(--ink);color:var(--panel)}.table-tools,.editor-meta,.add-edge{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;margin-bottom:.6rem}.editor-meta .grow{flex:1;min-width:200px}.add-edge input{width:8.5rem}.check{display:flex;align-items:center;gap:.35rem;font-size:.9em}.scroll{overflow-x:auto;max-height:420px;overflow-y:auto;background:var(--panel);border:1px solid var(--rule);border-radius:4px}table{border-collapse:collapse;width:100%;font-size:.92em}th{position:sticky;top:0;background:var(--panel);text-align:left;font-weight:600;color:var(--ink-soft);border-bottom:2px solid var(--rule-strong)}th,td{padding:.3rem .65rem;white-space:nowrap}td{border-bottom:1px solid var(--rule)}.num{text-align:right}tr.row-cut td{background:#f7e1df}tr.row-cut td:first-child{box-shadow:inset 4px 0 var(--cut)}tr.row-path td{background:#e3e9ef}.usebar{display:inline-block;width:90px;height:8px;background:var(--rule);border-radius:2px;overflow:hidden;vertical-align:middle}.usebar span{display:block;height:100%;background:var(--flow)}.cap-input{width:6.5rem;text-align:right}@media (max-width: 1180px){.app{grid-template-columns:270px minmax(0,1fr);grid-template-rows:auto auto auto;grid-template-areas:"side stage" "side panel" "side bottom";background:linear-gradient(90deg,var(--ink) 270px,var(--paper) 270px)}.stage{min-height:560px}.side-panel{max-height:none;min-height:0;border-left:none;border-top:1px solid var(--rule)}}@media (max-width: 760px){.app{display:flex;flex-direction:column;background:var(--paper)}.sidebar{position:static;max-height:none;height:auto}.stage{min-height:480px;padding:.8rem}.timeline-caption{margin-left:0;width:100%}}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}
