@font-face{font-family:Mona Sans Variable;font-style:normal;font-display:swap;font-weight:200 900;font-stretch:75% 125%;src:url(/assets/mona-sans-vietnamese-wdth-normal-Rd0aZl9c.woff2) format("woff2-variations");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:Mona Sans Variable;font-style:normal;font-display:swap;font-weight:200 900;font-stretch:75% 125%;src:url(/assets/mona-sans-latin-ext-wdth-normal-CQ1tG6In.woff2) format("woff2-variations");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:Mona Sans Variable;font-style:normal;font-display:swap;font-weight:200 900;font-stretch:75% 125%;src:url(/assets/mona-sans-latin-wdth-normal-BMVx8nn_.woff2) format("woff2-variations");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2) format("woff2"),url(/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2) format("woff2"),url(/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.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{--font-sans: "Mona Sans Variable", ui-sans-serif, system-ui, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--ease: cubic-bezier(.2, .7, .1, 1);--shadow: 0 1px 2px rgba(20, 20, 19, .04), 0 6px 20px -8px rgba(20, 20, 19, .14);color-scheme:light}:root[data-weight=bold]{--w-label: 660;--w-ui: 560}:root[data-weight=bold] body{font-weight:480}:root[data-weight=bold] .tp .ns,:root[data-weight=bold] .tp .elabel,:root[data-weight=bold] .tp .zl{font-weight:500}:root[data-theme=dark]{--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 8px 24px -8px rgba(0, 0, 0, .6);color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html,body{height:100%}body{margin:0;overflow:hidden;background:var(--bg);color:var(--ink);font-family:var(--font-sans);font-size:14px;line-height:1.5;font-feature-settings:"ss01","cv11";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mono{font-family:var(--font-mono)}::selection{background:var(--accent);color:#fff}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}button{font:inherit;color:inherit}kbd{font:10px var(--font-mono);color:var(--faint)}h2,h3,h4{margin:0;font-weight:600;line-height:1.12;letter-spacing:-.02em}.label{margin:0;font:500 .6875rem var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.i{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;flex:none}#app{position:fixed;inset:0}#stage{position:absolute;inset:0;overflow:hidden;touch-action:none;background-color:var(--bg);background-image:radial-gradient(var(--grid-dot) 1px,transparent 1px);background-size:16px 16px}#canvas{position:absolute;inset:0;width:100%;height:100%;display:block;user-select:none;-webkit-user-select:none}#stage[data-tool=hand],#stage.panning{cursor:grab}#stage.panning:active{cursor:grabbing}#stage[data-tool=node],#stage[data-tool=store],#stage[data-tool=zone],#stage[data-tool=text],#stage[data-tool=arrow] .node{cursor:crosshair}#stage .node,#stage .zone .zl,#stage .note{cursor:move}#stage .edge{cursor:pointer}#stage .tp .hit{fill:none;stroke:transparent;stroke-width:12;pointer-events:stroke}#stage .tp .zone .hit{stroke-width:10}#stage .tp .zone .zr{pointer-events:none}#stage .tp .zone .zl,#stage .tp .elabel{pointer-events:all}#stage .tp .node:hover .body{stroke:var(--ink)}#stage .tp .node[class*=tone-]:hover .body{stroke:var(--tc);stroke-width:1.6}.overlay{pointer-events:none}.overlay .handle{pointer-events:all;fill:var(--surface);stroke:var(--accent)}.overlay .h-nw,.overlay .h-se{cursor:nwse-resize}.overlay .h-ne,.overlay .h-sw{cursor:nesw-resize}.overlay .end{cursor:crosshair}.overlay .bend{cursor:move;fill:var(--accent-wash)}.overlay .connector{pointer-events:all;fill:var(--surface);stroke:var(--accent);cursor:crosshair;opacity:.9}.overlay .connector:hover{fill:var(--accent)}.overlay .sel-box{fill:none;stroke:var(--accent)}.overlay .sel-group{fill:none;stroke:var(--accent);stroke-dasharray:4 3;opacity:.6}.overlay .sel-edge{fill:none;stroke:var(--accent);opacity:.35;stroke-linecap:round;stroke-linejoin:round}.overlay .marquee{fill:color-mix(in srgb,var(--accent) 8%,transparent);stroke:var(--accent);stroke-dasharray:3 3}.overlay .ghost-node{fill:var(--accent-wash);stroke:var(--accent)}.overlay .ghost-zone{fill:none;stroke:var(--accent);stroke-dasharray:3 4}.overlay .rubber{stroke:var(--accent);stroke-dasharray:4 4}.overlay .target{fill:none;stroke:var(--accent)}.overlay .guide{stroke:#e5484d;opacity:.7}.inline-edit{position:absolute;z-index:20;margin:0;padding:4px 6px;resize:none;overflow:hidden;border:1px solid var(--accent);border-radius:6px;outline:none;background:var(--surface);color:var(--ink);font-family:var(--font-sans);font-weight:580;letter-spacing:-.01em;line-height:1.35;text-align:center;box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}.inline-edit[data-kind=zone],.inline-edit[data-kind=edge]{font-family:var(--font-mono);font-weight:500;text-align:left}.inline-edit[data-kind=note]{font-weight:400;text-align:left}.island{display:flex;align-items:center;gap:2px;padding:4px;background:var(--surface);border:1px solid var(--rule);border-radius:10px;box-shadow:var(--shadow)}.tl,.toolbar,.tr,.bl,.br{position:absolute;z-index:10}.tl,.toolbar,.tr,.bl,.br,.panel,.side-tab,.menu,.dlg,.icon-pop,.look-pop,.toast,.empty,.pv-page{zoom:var(--ui, 1)}.bar{padding:5px;gap:3px;border-radius:12px}.bar .btn{height:36px;font-size:13.5px}.bar .btn.icon{width:36px}.bar .i{width:18px;height:18px}.bar .sep{height:22px}.ai-btn{color:var(--accent-ink)!important}.ai-btn .i{color:var(--accent)}.tl{top:12px;left:12px}.brand{padding:0 8px 0 2px;font-size:14px;font-weight:500;letter-spacing:.02em;color:var(--ink)}.toolbar{top:12px;left:50%;transform:translate(-50%)}.tr{top:12px;right:12px;gap:4px}.bl{bottom:12px;left:12px;display:flex;gap:8px;align-items:stretch}.br{bottom:12px;right:12px}.sep{width:1px;height:20px;margin:0 4px;background:var(--rule)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:32px;padding:0 12px;border:1px solid var(--rule);border-radius:7px;background:var(--surface);color:var(--ink);font-size:13px;font-weight:520;cursor:pointer;white-space:nowrap;transition:border-color .15s,background .15s,color .15s}.btn:hover{border-color:var(--ink)}.btn:disabled{opacity:.4;cursor:default}.btn:disabled:hover{border-color:var(--rule)}.btn.ghost{border-color:transparent;background:transparent;color:var(--ink-2)}.btn.ghost:hover{background:var(--bg-sunk);color:var(--ink)}.btn.ghost:disabled:hover{background:transparent}.btn.icon{width:32px;padding:0}.btn.sm{height:28px;padding:0 8px;font-size:12px}.btn.icon.sm{width:28px}.btn.on{background:var(--accent-wash);color:var(--accent-ink)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{background:var(--accent-ink);border-color:var(--accent-ink)}.tool{position:relative}.tool kbd{position:absolute;right:2px;bottom:0;font-size:8.5px;line-height:1}.zl{min-width:52px;font-size:12px;padding:0 6px}.menu{position:fixed;z-index:40;top:56px;left:12px;display:block;width:260px;padding:6px;max-height:calc(100vh - 72px);overflow:auto;animation:pop .14s var(--ease)}.menu hr{margin:6px 4px;border:0;border-top:1px solid var(--rule)}.mh{margin:8px 8px 4px;font:500 10px var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--faint)}.mi{display:flex;align-items:center;gap:10px;width:100%;padding:7px 8px;border:0;border-radius:6px;background:none;text-align:left;font-size:13px;cursor:pointer;color:var(--ink-2)}.mi:hover:not(:disabled){background:var(--bg-sunk);color:var(--ink)}.mi:disabled{opacity:.4}.mi span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ctx{width:220px}@keyframes pop{0%{opacity:0;transform:translateY(-4px)}}.panel{position:absolute;z-index:9;top:68px;bottom:68px;overflow:auto;background:var(--surface);border:1px solid var(--rule);border-radius:10px;box-shadow:var(--shadow)}.panel[hidden]{display:none}.library{left:12px;width:320px;padding:0 12px;display:flex;flex-direction:column}.side{right:12px;width:292px;padding:0 14px 16px}.side.code{width:min(480px,calc(100vw - 24px));display:flex;flex-direction:column;padding-bottom:12px}.ph{position:sticky;top:0;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 -14px 4px;padding:12px 10px 10px 14px;background:var(--surface);border-bottom:1px solid var(--rule)}.library .ph{margin:0 -12px 10px}.ph h4{font-size:14px;font-weight:600;letter-spacing:-.01em}.row{display:flex;align-items:center;gap:6px}.row.wrap{flex-wrap:wrap}.row.end{justify-content:flex-end;margin-top:16px}.ps{padding:12px 0;border-bottom:1px solid var(--rule);display:grid;gap:10px}.ps:last-child{border-bottom:0}.fld{display:grid;gap:4px}.fld>span{font-size:11.5px;color:var(--muted)}.two{display:grid;grid-template-columns:1fr 1fr;gap:8px}.inp{width:100%;min-width:0;height:32px;padding:0 9px;border:1px solid var(--rule);border-radius:6px;background:var(--bg);color:var(--ink);font:13px var(--font-sans);outline:none;transition:border-color .15s}textarea.inp{height:auto;padding:7px 9px;resize:vertical;line-height:1.45}.inp:focus{border-color:var(--accent)}select.inp{padding-right:4px}.inp.mono{font-family:var(--font-mono);font-size:12px}.seg{display:grid;grid-template-columns:repeat(auto-fit,minmax(48px,1fr));gap:2px;padding:2px;border:1px solid var(--rule);border-radius:7px;background:var(--bg)}.seg button{height:26px;padding:0 6px;white-space:nowrap;border:0;border-radius:5px;background:none;color:var(--muted);font:12px var(--font-sans);cursor:pointer}.seg button:hover{color:var(--ink)}.seg button.on{background:var(--surface);color:var(--ink);box-shadow:0 0 0 1px var(--rule-strong)}.chk{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-2);cursor:pointer}.chk input{accent-color:var(--accent);margin:0}.tones{display:flex;gap:6px;flex-wrap:wrap}.tone{width:22px;height:22px;border-radius:50%;border:1.5px solid var(--rule-strong);cursor:pointer;padding:0}.tone.on{box-shadow:0 0 0 2px var(--surface),0 0 0 3.5px var(--ink)}.t-default{background:var(--surface)}.t-purple{background:var(--w-purple);border-color:var(--t-purple)}.t-amber{background:var(--w-amber);border-color:var(--t-amber)}.t-green{background:var(--w-green);border-color:var(--t-green)}.t-blue{background:var(--w-blue);border-color:var(--t-blue)}.t-red{background:var(--w-red);border-color:var(--t-red)}.t-teal{background:var(--w-teal);border-color:var(--t-teal)}.t-pink{background:var(--w-pink);border-color:var(--t-pink)}.icon-pick{display:flex;align-items:center;gap:8px;cursor:pointer;text-align:left;font-size:12px;color:var(--muted)}.ti{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;flex:none}.muted{color:var(--faint)}.facts{display:grid;gap:6px}.fact{display:grid;grid-template-columns:1fr 1.3fr 28px;gap:4px;align-items:center}.fact .btn{width:28px;height:28px}.add{justify-self:start}.hint{margin:0;font-size:12px;color:var(--muted);line-height:1.45}.meta{margin:14px 0 0;font-size:11px;color:var(--faint)}.ends{display:flex;align-items:center;gap:6px;margin:8px 0 4px;font-size:12px;color:var(--muted)}.ends span{color:var(--ink)}.steps{display:grid;gap:6px}.step{display:grid;grid-template-columns:18px 1fr 28px;gap:6px;align-items:center}.step .n{font-size:11px;color:var(--accent-ink)}.step .btn{width:28px;height:28px}.icon-pop{position:fixed;z-index:50;width:300px;max-height:370px;display:flex;flex-direction:column;gap:8px;padding:10px;align-items:stretch}.icon-grid{overflow:auto;display:grid;grid-template-columns:repeat(8,1fr);gap:2px}.icon-grid .label{grid-column:1 / -1;margin:8px 0 2px;font-size:10px}.ic{height:32px;display:grid;place-items:center;border:0;border-radius:6px;background:none;color:var(--ink-2);cursor:pointer}.ic svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}.ic:hover{background:var(--bg-sunk)}.ic.on{background:var(--accent-wash);color:var(--accent-ink)}.ic.none{color:var(--faint)}.library .ph{margin:0 -12px}.lib-search{position:sticky;top:49px;z-index:1;margin:0 -12px;padding:10px 12px;background:var(--surface);border-bottom:1px solid var(--rule)}.lib-list{flex:1;padding:4px 0 8px}.lib-h{display:flex;align-items:center;gap:6px;width:100%;margin-top:6px;padding:8px 4px;border:0;background:none;font:500 10.5px var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);cursor:pointer;text-align:left}.lib-h:hover{color:var(--ink)}.lib-h .i{width:13px;height:13px;transition:transform .15s}.lib-h.open .i{transform:rotate(90deg)}.lib-h .n{margin-left:auto;color:var(--faint);letter-spacing:0}.lib-grid{display:grid;grid-template-columns:1fr 1fr;gap:5px;padding-bottom:4px}.tile{display:flex;align-items:center;gap:9px;min-width:0;height:44px;padding:0 8px 0 6px;border:1px solid var(--rule);border-radius:8px;background:var(--surface);color:var(--ink-2);text-align:left;cursor:grab;transition:border-color .15s,background .15s,transform .1s}.tile:hover{border-color:var(--ink-2);color:var(--ink);background:var(--bg)}.tile:active{transform:scale(.98)}.tile .tb{display:grid;place-items:center;width:30px;height:30px;flex:none;border-radius:7px;background:var(--bg-sunk);color:var(--ink-2);border:1px solid var(--rule)}.tile.k-store .tb{color:var(--amber-ink);background:var(--amber-wash);border-color:color-mix(in srgb,var(--amber) 35%,var(--rule))}.tile.k-compute .tb{color:var(--ink);background:var(--surface);border-color:var(--ink-2)}.tile.k-control .tb{border-style:dashed}.tile.k-host .tb{background:repeating-linear-gradient(45deg,var(--bg-sunk) 0 3px,var(--surface) 3px 6px)}.tile.is-zone .tb{border-style:dashed;background:transparent}.tile .tt{display:grid;min-width:0;line-height:1.2}.tile .tname{font-size:12.5px;font-weight:520;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tile .tk{font-size:9.5px;color:var(--faint)}.sw{width:16px;height:12px;flex:none;border:1.5px solid var(--ink-2);border-radius:3px}.sw.zone{border-style:dashed;border-color:var(--rule-strong)}.sw.diamond{width:11px;height:11px;transform:rotate(45deg);border-radius:1px}.sw.cylinder,.sw.pill{border-radius:6px}.tile.k-store .sw{border-color:var(--amber);border-top-width:3px}.lib-foot{position:sticky;bottom:0;margin:0 -12px;padding:10px 12px;background:var(--surface);border-top:1px solid var(--rule)}.tabs{gap:2px;padding:4px;max-width:calc(100vw - 420px);overflow-x:auto}.tab{position:relative;display:flex;align-items:center;gap:4px;height:30px;padding:0 10px;border-radius:7px;font-size:12.5px;color:var(--muted);cursor:pointer;white-space:nowrap;user-select:none}.tab:hover{background:var(--bg-sunk);color:var(--ink)}.tab.on{background:var(--accent-wash);color:var(--accent-ink);font-weight:560}.tab .tn{max-width:140px;overflow:hidden;text-overflow:ellipsis}.tab .tx{display:none;place-items:center;width:18px;height:18px;margin-right:-4px;padding:0;border:0;border-radius:4px;background:none;color:inherit;cursor:pointer}.tab .tx .i{width:12px;height:12px}.tab:hover .tx,.tab.on .tx{display:grid}.tab .tx:hover{background:color-mix(in srgb,var(--ink) 10%,transparent)}.tab-edit{width:120px;height:22px;padding:0 6px;border:1px solid var(--accent);border-radius:5px;background:var(--bg);color:var(--ink);font:12.5px var(--font-sans);outline:none}.side-tab{position:absolute;z-index:9;right:12px;top:68px;width:36px;height:36px;padding:0;justify-content:center;cursor:pointer;color:var(--ink-2)}.side-tab[hidden]{display:none}.side-tab:hover{color:var(--ink)}.look-pop{position:fixed;z-index:45;width:290px;display:grid;gap:12px;padding:14px;align-items:stretch;animation:pop .14s var(--ease)}.ai-dlg{width:min(680px,calc(100vw - 32px))}.ai-dlg .seg{margin-bottom:10px}.ai-ask{font-size:14px;min-height:96px}.chips{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 12px}.chip{padding:5px 10px;border:1px solid var(--rule);border-radius:999px;background:var(--bg);color:var(--ink-2);font-size:12px;cursor:pointer}.chip:hover{border-color:var(--accent);color:var(--accent-ink)}.ai-settings{border:1px solid var(--rule);border-radius:8px;padding:0 12px}.ai-settings[open]{padding-bottom:12px}.ai-settings summary{display:flex;align-items:center;gap:8px;padding:10px 0;cursor:pointer;font-size:13px;list-style:none}.ai-settings summary::-webkit-details-marker{display:none}.ai-settings summary .muted{margin-left:auto;font-size:11px}.ai-settings>.two,.ai-settings>.fld,.ai-settings>div,.ai-settings>.chk{margin-top:10px}.ai-out{max-height:220px;overflow:auto;margin:12px 0 0;padding:10px 12px;border:1px solid var(--rule);border-radius:8px;background:var(--bg-sunk);font-size:11.5px;line-height:1.55;white-space:pre-wrap;color:var(--ink-2)}.ai-out[hidden]{display:none}.ai-status{margin-top:10px;min-height:18px}*{scrollbar-width:thin;scrollbar-color:var(--rule-strong) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--rule-strong);border-radius:10px;border:3px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:var(--faint);background-clip:content-box}.code-ta{flex:1;min-height:240px;width:100%;margin-top:10px;padding:12px;resize:none;border:1px solid var(--rule);border-radius:8px;background:var(--bg);color:var(--ink);font-size:12px;line-height:1.6;outline:none;tab-size:2;white-space:pre}.code-ta:focus{border-color:var(--accent)}.code-msg{margin-top:8px;display:grid;gap:4px;max-height:30%;overflow:auto}.code-msg p{display:flex;gap:6px;align-items:flex-start;margin:0;font-size:12px}.code-msg .i{width:14px;height:14px;margin-top:2px}.code-msg .ok{color:var(--muted)}.code-msg .ok .i{color:var(--ok)}.code-msg .err{color:var(--down)}.code-msg .warn{color:var(--amber-ink)}.empty{position:absolute;z-index:5;left:50%;top:50%;transform:translate(-50%,-50%);width:min(520px,calc(100vw - 48px));text-align:center;pointer-events:none}.empty[hidden]{display:none}.empty h2{margin-top:12px;font-size:26px;font-stretch:105%;text-wrap:balance}.empty p:not(.label){margin:12px auto 0;max-width:44ch;color:var(--ink-2)}.empty .row{justify-content:center;margin-top:22px;flex-wrap:wrap;pointer-events:all}.dlg{width:min(640px,calc(100vw - 32px));max-height:calc(100vh - 48px);padding:0 18px 18px;border:1px solid var(--rule);border-radius:12px;background:var(--surface);color:var(--ink);box-shadow:var(--shadow)}.dlg::backdrop{background:#0a0a0959;backdrop-filter:blur(2px)}.dlg .ph{margin:0 -18px 14px;padding:14px 12px 12px 18px}.preview{display:grid;place-items:center;max-height:280px;overflow:hidden;padding:12px;border:1px solid var(--rule);border-radius:8px;background:var(--bg-sunk)}.preview svg{max-width:100%;max-height:256px;height:auto;width:auto}.opts{display:grid;gap:12px;margin-top:14px}.share-row{display:grid;gap:6px;margin-bottom:16px}.share-row .row .inp{flex:1}.dlg code{font:11px var(--font-mono);color:var(--muted);word-break:break-all}.keys{width:100%;border-collapse:collapse;font-size:13px}.keys td{padding:6px 0;border-bottom:1px solid var(--rule);color:var(--ink-2)}.keys td:first-child{width:42%}.keys kbd{font-size:11.5px;color:var(--ink)}.toast{position:fixed;z-index:60;left:50%;bottom:20px;transform:translate(-50%,12px);max-width:calc(100vw - 32px);padding:9px 14px;border-radius:8px;background:var(--ink);color:var(--bg);font-size:13px;opacity:0;pointer-events:none;transition:opacity .2s,transform .2s var(--ease)}.toast.show{opacity:1;transform:translate(-50%)}body.presenting #app{visibility:hidden}.present-host{position:fixed;inset:0;z-index:30;overflow:auto;background:var(--bg)}.present-host[hidden]{display:none}.pv-page{max-width:1480px;margin:0 auto;padding:16px clamp(16px,3vw,40px) 40px}.pv-bar{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.pv-brand{font-size:13px;font-weight:500;color:var(--muted)}.pv-tools{display:flex;gap:6px}.pv-head{display:grid;gap:10px 48px;margin:8px 0 24px}@media (min-width: 900px){.pv-head{grid-template-columns:11rem minmax(0,1fr)}}.pv-head .label{color:var(--accent-ink);padding-top:6px}.pv-head h2{font-size:clamp(22px,2.4vw,30px);font-stretch:105%}.pv-head p:not(.label){margin:12px 0 0;max-width:72ch;color:var(--ink-2);font-size:15px;line-height:1.6}.sd{margin:0;display:grid;grid-template-columns:minmax(0,1fr);border:1px solid var(--rule);border-radius:10px;background:var(--surface);overflow:hidden}@media (min-width: 1000px){.sd{grid-template-columns:minmax(0,1fr) 18.75rem}.sd.no-insp{grid-template-columns:minmax(0,1fr)}}.sd .fh{grid-column:1 / -1;display:flex;align-items:baseline;gap:14px;padding:12px 20px;border-bottom:1px solid var(--rule);background:var(--surface)}.sd .fn{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-ink)}.sd .ft{font-weight:580;font-size:15px;letter-spacing:-.01em}.sd .fc{margin-left:auto;font-size:11px;color:var(--muted)}@media (max-width: 640px){.sd .fc{display:none}}.sd .canvas{position:relative;min-width:0;background-color:var(--bg);background-image:radial-gradient(var(--grid-dot) 1px,transparent 1px);background-size:16px 16px}.sd .scroll{overflow-x:auto;padding:28px 20px 12px}.sd .scroll>svg{display:block;width:100%;min-width:760px;height:auto;overflow:visible;margin:0 auto}.pv-steps .i{width:16px;height:16px}.sd .node{cursor:pointer;outline:none}.sd .node:hover .body,.sd .node:focus-visible .body{stroke:var(--ink)}.sd .node:focus-visible .body{stroke-width:2}.sd .legend{display:flex;flex-wrap:wrap;gap:6px 16px;padding:10px 20px 14px;font:11px var(--font-mono);color:var(--muted)}.sd .legend span{display:inline-flex;align-items:center;gap:6px}.sd .lg{width:18px;height:0;border-top:1.5px solid var(--rule-strong)}.sd .lg.data{border-color:var(--accent)}.sd .lg.control{border-top-style:dashed}.sd .lg.fallback{border-top-style:dotted;border-top-width:2px}.sd .lg.stream{border-top-width:2.5px;border-color:color-mix(in srgb,var(--accent) 45%,var(--rule-strong))}.sd .lg-store{width:12px;height:10px;border:1px solid var(--amber);border-top-width:2px;border-radius:2px}.sd .lg-host{width:12px;height:10px;border:1px solid var(--rule-strong);border-radius:2px;background:repeating-linear-gradient(45deg,var(--rule) 0 1.5px,transparent 1.5px 4px)}.sd .lg-tone{width:12px;height:10px;border-radius:2px;border:1px solid var(--tc);background:var(--tw)}.sd .hint{margin-left:auto}.sd .insp{border-top:1px solid var(--rule);padding:22px 22px 26px;min-height:220px}@media (min-width: 1000px){.sd .insp{border-top:0;border-left:1px solid var(--rule)}}.sd .card{position:sticky;top:16px;animation:cin .25s var(--ease)}.sd .card .label.k-store{color:var(--amber-ink)}.sd .card h3{margin-top:8px;font-size:19px;font-stretch:105%}.sd .card .sub{margin:2px 0 0;font-size:12px;color:var(--muted)}.sd .card .role{margin:14px 0 0;font-size:14.5px;color:var(--ink-2);line-height:1.55}.sd .card dl{margin:18px 0 0;border-top:1px solid var(--rule)}.sd .card dl div{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid var(--rule);font-size:13px}.sd .card dt{color:var(--muted)}.sd .card dd{margin:0;font-family:var(--font-mono);font-size:12px;text-align:right}@keyframes cin{0%{opacity:0;transform:translateY(4px)}}.sd .tone-purple{--tc: var(--t-purple);--tw: var(--w-purple)}.sd .tone-amber{--tc: var(--t-amber);--tw: var(--w-amber)}.sd .tone-green{--tc: var(--t-green);--tw: var(--w-green)}.sd .tone-blue{--tc: var(--t-blue);--tw: var(--w-blue)}.sd .tone-red{--tc: var(--t-red);--tw: var(--w-red)}.sd .tone-teal{--tc: var(--t-teal);--tw: var(--w-teal)}.sd .tone-pink{--tc: var(--t-pink);--tw: var(--w-pink)}.pv-ctl{display:flex;align-items:center;gap:1px;margin-left:10px;align-self:center}.pv-ctl .btn.sm{height:26px}.pv-ctl .btn.icon.sm{width:26px}.pv-ctl .i{width:15px;height:15px}.pv-z{min-width:48px;font-size:11px;padding:0 4px;color:var(--muted)}.sd .scroll>svg.zoomed{cursor:grab}.sd .scroll>svg.zoomed:active{cursor:grabbing}.present.focus{overflow:hidden}.present.focus .pv-page{max-width:none;height:100%;padding:10px;display:flex;flex-direction:column}.present.focus .pv-bar{margin-bottom:8px}.present.focus .pv-head{display:none}.present.focus .sd{flex:1;min-height:0;grid-template-rows:auto minmax(0,1fr)}.present.focus .sd .canvas{display:flex;flex-direction:column;min-height:0}.present.focus .sd .scroll{flex:1;min-height:0;overflow:hidden;padding:12px}.present.focus .sd .scroll>svg{width:100%;height:100%;min-width:0;max-width:none!important;aspect-ratio:auto!important;cursor:grab}.present.focus .sd .insp{overflow:auto}.present-host:fullscreen{background:var(--bg)}.pv-steps{position:sticky;top:8px;z-index:2;display:flex;align-items:center;gap:6px;margin:12px 20px 0;padding:6px 8px;border:1px solid var(--rule);border-radius:8px;background:var(--surface);font-size:13px;color:var(--muted)}.pv-steps .num{min-width:56px;text-align:center;font-size:11.5px;color:var(--accent-ink)}.pv-steps .cap{margin-left:6px}.pv-steps.active .cap{color:var(--ink)}.present .l-nodes>g,.present .l-zones>g{animation:rise .5s var(--ease) both}@keyframes rise{0%{opacity:0}}@media (prefers-reduced-motion: reduce){.present .l-nodes>g,.present .l-zones>g{animation:none}}@media (max-width: 760px){.toolbar{top:auto;bottom:60px}.tr .btn:not(.primary) span{display:none}.side{top:auto;bottom:108px;height:45vh;width:calc(100vw - 24px)}.library{top:60px;bottom:108px;width:calc(100vw - 24px)}.tool kbd{display:none}}.tp{overflow:visible;font-family:var(--font-sans)}.tp text{font-feature-settings:"ss01","cv11"}.tp .tone-purple{--tc: var(--t-purple);--tw: var(--w-purple)}.tp .tone-amber{--tc: var(--t-amber);--tw: var(--w-amber)}.tp .tone-green{--tc: var(--t-green);--tw: var(--w-green)}.tp .tone-blue{--tc: var(--t-blue);--tw: var(--w-blue)}.tp .tone-red{--tc: var(--t-red);--tw: var(--w-red)}.tp .tone-teal{--tc: var(--t-teal);--tw: var(--w-teal)}.tp .tone-pink{--tc: var(--t-pink);--tw: var(--w-pink)}.tp .zone .zr{fill:none;stroke:var(--rule-strong);stroke-dasharray:3 4}.tp .zone.solid .zr{stroke-dasharray:none}.tp .zone[class*=tone-] .zr{stroke:color-mix(in srgb,var(--tc) 55%,var(--rule-strong))}.tp .zone.tint .zr{fill:color-mix(in srgb,var(--tw) 65%,transparent)}.tp .zone .zl{font:500 10.5px var(--font-mono);letter-spacing:.05em;text-transform:uppercase;fill:var(--muted);paint-order:stroke;stroke:var(--bg);stroke-width:4px;stroke-linejoin:round}.tp .zone[class*=tone-] .zl{fill:var(--tc)}.tp .edge path{fill:none;stroke-linejoin:round}.tp .edge .base{stroke:var(--rule-strong);stroke-width:1.4;transition:stroke .2s,opacity .2s}.tp .edge.control .base{stroke-dasharray:5 4}.tp .edge.fallback .base{stroke-dasharray:1.5 4;stroke-linecap:round}.tp .edge.stream .base{stroke-width:2.2;stroke:color-mix(in srgb,var(--accent) 30%,var(--rule-strong))}.tp .edge[class*=tone-] .base{stroke:color-mix(in srgb,var(--tc) 55%,var(--rule-strong))}.tp .edge .flow{stroke:var(--accent);stroke-width:1.6;stroke-dasharray:3 13;stroke-linecap:round;opacity:.85;animation:tp-flow 1.1s steps(16) infinite}.tp .edge .flow.rev{animation-direction:reverse}.tp .edge[class*=tone-] .flow,.tp .edge[class*=tone-] .pulse{stroke:var(--tc)}.tp .edge .pulse{stroke:var(--accent);stroke-width:3;stroke-linecap:round;opacity:0;animation:tp-pulse 2.4s ease-in-out infinite}.tp .edge .pkt{fill:var(--accent)}.tp .edge .comet{stroke:var(--accent);stroke-width:2.4;stroke-linecap:round;opacity:.9}.tp .edge[class*=tone-] .comet{stroke:var(--tc)}.tp .busy-track{fill:var(--surface);stroke:var(--rule-strong);stroke-width:1.5}.tp .busy-arc{fill:none;stroke:var(--accent);stroke-width:1.8;stroke-linecap:round}.tp .node[class*=tone-] .busy-arc{stroke:var(--tc)}.tp .node.glow .body{animation:tp-glow 2.6s ease-in-out infinite}.tp .edge[class*=tone-] .pkt{fill:var(--tc)}.tp .edge .elabel{font:10.5px var(--font-mono);fill:var(--muted);paint-order:stroke;stroke:var(--bg);stroke-width:4px;stroke-linejoin:round}.tp .arr{fill:var(--rule-strong)}.tp .arr[class*=tone-]{fill:color-mix(in srgb,var(--tc) 70%,var(--rule-strong))}.tp .hatch{stroke:var(--rule);stroke-width:2}.tp .node .body{fill:var(--surface);stroke:var(--rule-strong);stroke-width:1;transition:stroke .2s,fill .2s}.tp .node .ghost{opacity:.7}.tp .node.compute .body{stroke:var(--ink-2)}.tp .node.control .body{fill:var(--bg-sunk);stroke-dasharray:4 3}.tp .node.io .body{fill:var(--bg)}.tp .node .lip,.tp .node .rim{stroke:var(--rule-strong);fill:none}.tp .node.store .body{stroke:color-mix(in srgb,var(--amber) 55%,var(--rule-strong))}.tp .node.store .lip{stroke:var(--amber);stroke-width:1.5}.tp .node[class*=tone-] .body,.tp .node[class*=tone-] .lip{stroke:var(--tc)}.tp .node .hfill{stroke:none;pointer-events:none}.tp .node .ico{fill:none;stroke:var(--muted);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.tp .node.store .ico{stroke:color-mix(in srgb,var(--amber-ink) 70%,var(--muted))}.tp .node[class*=tone-] .ico{stroke:var(--tc)}.tp .nl{font:var(--w-label, 580) 13px var(--font-sans);fill:var(--ink);letter-spacing:-.01em}.tp .ns{font:10.5px var(--font-mono);fill:var(--muted)}.tp .badge rect{fill:var(--surface);stroke:var(--rule-strong)}.tp .badge text{font:500 9.5px var(--font-mono);fill:var(--muted)}.tp .node[class*=tone-] .badge rect{stroke:var(--tc)}.tp .status{stroke:var(--surface);stroke-width:1.5}.tp .status.ok{fill:var(--ok)}.tp .status.warn{fill:var(--warn)}.tp .status.down{fill:var(--down);animation:tp-blink 1.2s steps(2,jump-none) infinite}.tp .pring{fill:none;stroke:var(--accent);stroke-width:1.5;transform-box:fill-box;transform-origin:center;animation:tp-ring 2.2s ease-out infinite}.tp .node[class*=tone-] .pring{stroke:var(--tc)}.tp .node[aria-pressed=true] .body{stroke:var(--accent);stroke-width:1.6;fill:var(--accent-wash);stroke-dasharray:none}.tp .node.store[aria-pressed=true] .body{stroke:var(--amber);fill:var(--amber-wash)}.tp .node[class*=tone-][aria-pressed=true] .body{stroke:var(--tc);fill:var(--tw)}.tp .node[aria-pressed=true] .ico{stroke:var(--accent-ink)}.tp .note text{font:13px var(--font-sans);fill:var(--ink-2)}.tp .note.mono text{font-family:var(--font-mono);fill:var(--muted);letter-spacing:.02em}.tp .node,.tp .edge{transition:opacity .2s}.tp.focusing .node:not(.near){opacity:.45}.tp.focusing .edge:not(.on){opacity:.35}.tp.focusing .zone:not(.near){opacity:.6}.tp .edge.on .base{stroke:var(--ink-2)}.tp .edge[class*=tone-].on .base{stroke:var(--tc)}.tp.still .flow,.tp.still .pulse,.tp.still .pring,.tp.still .status,.tp.still .node.glow .body{animation-play-state:paused}@keyframes tp-flow{to{stroke-dashoffset:-16}}@keyframes tp-pulse{0%,to{opacity:0}50%{opacity:.55}}@keyframes tp-ring{0%{opacity:.55;transform:scale(1)}to{opacity:0;transform:scale(1.1,1.3)}}@keyframes tp-blink{50%{opacity:.25}}@keyframes tp-glow{50%{stroke:var(--accent);stroke-width:2.2;filter:drop-shadow(0 0 5px color-mix(in srgb,var(--accent) 45%,transparent))}}@media (prefers-reduced-motion: reduce){.tp .flow,.tp .pulse,.tp .pring,.tp .status,.tp .node.glow .body{animation:none}}
