.tv-scroll{--tv-card:var(--card-bg);--tv-line:var(--card-line);--tv-line-soft:var(--cell-line);--tv-ink:var(--ink);--tv-ink-2:var(--ink-2);--tv-ink-3:var(--ink-3);--tv-accent:var(--accent-2);--tv-green:var(--green);--tv-mono:var(--mono);--tv-step:104px;--tv-chg-bg:#4ade8033;--tv-chg-line:#4ade808c;--tv-chg-ink:#d7ffe4;--tv-sel-bg:#7c7cf052;--tv-sel-line:#9b8cffcc;--tv-sel-ink:#e6e3ff;--tv-mark-bg:#fbbf2433;--tv-mark-line:#fbbf2473;--tv-mark-ink:#fbbf24;flex:1;min-width:0;min-height:260px;padding:16px 18px 22px;position:relative;overflow:auto}.py-root[data-theme=light] .tv-scroll{--tv-chg-bg:#15803d3d;--tv-chg-line:#15803db3;--tv-chg-ink:#0f5132;--tv-sel-bg:#5b5bd64d;--tv-sel-line:#5b5bd6d9;--tv-sel-ink:#23237a;--tv-mark-bg:#b4530926;--tv-mark-line:#b4530980;--tv-mark-ink:#8a3d06}.tv-panes{grid-template-columns:minmax(180px,250px) minmax(0,1fr);gap:46px;display:grid}.tv-links{pointer-events:none;z-index:3;width:100%;height:100%;position:absolute;top:0;left:0;overflow:visible}.tv-links path{fill:none;stroke:var(--link-ink);stroke-width:1.4px}.tv-links marker path{fill:var(--link-ink);stroke:none}.tv-col{z-index:1;min-width:0;position:relative}.tv-col-head{letter-spacing:.12em;text-transform:uppercase;color:var(--tv-ink-3);margin-bottom:10px;font-size:10.5px;font-weight:700}.tv-frame{border:1px solid var(--frame-line);background:var(--frame-bg);border-radius:10px;margin-bottom:10px;overflow:hidden}.tv-frame.is-active{border-color:var(--accent)}.tv-frame-head{font-family:var(--tv-mono);background:var(--cell-head);border-bottom:1px solid var(--frame-line);padding:7px 10px;font-size:12px;font-weight:700}.tv-frame-empty{color:var(--tv-ink-3);padding:8px 10px;font-size:12px;font-style:italic}.tv-var{justify-content:flex-end;align-items:center;gap:8px;padding:5px 10px;display:flex}.tv-var+.tv-var{border-top:1px solid var(--frame-line)}.tv-var-name{font-family:var(--tv-mono);color:var(--tv-ink-2);text-align:right;word-break:break-word;font-size:12px}.tv-var-name.is-new{color:var(--tv-green)}.tv-card{border:1px solid var(--tv-line);background:var(--tv-card);border-radius:10px;width:fit-content;min-width:118px;max-width:100%;margin:0 0 16px;display:block;overflow:hidden}.tv-card.is-new{border-color:var(--mark-prev)}.tv-card-head{background:var(--cell-head);border-bottom:1px solid var(--cell-line);align-items:center;gap:7px;padding:6px 10px;display:flex}.tv-type{font-family:var(--tv-mono);font-size:11.5px;font-weight:700}.tv-chip{border:1px solid var(--cell-line);background:var(--cell-head);color:var(--tv-ink-2);white-space:nowrap;border-radius:999px;padding:1px 7px;font-size:10.5px;font-weight:600}.tv-chip.new{border-color:var(--mark-prev);background:var(--mark-prev);color:var(--tv-green)}.tv-chip.changed{border-color:var(--tv-mark-line);background:var(--tv-mark-bg);color:var(--tv-mark-ink)}.tv-seq{flex-wrap:wrap;padding:10px;display:flex}.tv-cell{border:1px solid var(--cell-line);border-right-width:0;flex-direction:column;min-width:40px;display:flex}.tv-cell:last-child{border-right-width:1px}.tv-idx{font-family:var(--tv-mono);color:var(--tv-ink-3);text-align:center;background:var(--cell-head);border-bottom:1px solid var(--cell-line);padding:1px 6px;font-size:10px}.tv-pairs{padding:6px 10px 10px}.tv-pair{align-items:center;gap:10px;padding:4px 0;display:flex}.tv-pair+.tv-pair{border-top:1px solid var(--tv-line-soft)}.tv-key{font-family:var(--tv-mono);color:var(--tv-accent);min-width:54px;font-size:12px}.tv-cell.chg{border-color:var(--tv-chg-line);background:var(--tv-chg-bg)}.tv-cell.chg+.tv-cell{border-left-color:var(--tv-chg-line)}.tv-cell.chg .tv-idx{color:var(--tv-chg-ink);border-bottom-color:var(--tv-chg-line)}.tv-pair.chg .tv-slot,.tv-var.chg .tv-slot{background:var(--tv-chg-bg);box-shadow:inset 0 0 0 1px var(--tv-chg-line);border-radius:5px}.tv-cell.chg .tv-prim,.tv-pair.chg .tv-prim,.tv-var.chg .tv-prim{color:var(--tv-chg-ink);font-weight:700}.tv-slot{justify-content:center;align-items:center;min-width:32px;padding:3px 8px;display:inline-flex}.tv-prim{font-family:var(--tv-mono);text-overflow:ellipsis;white-space:nowrap;max-width:260px;font-size:12px;overflow:hidden}.tv-prim.is-str{color:var(--str-ink)}.tv-dot{background:var(--ink);width:9px;height:9px;box-shadow:0 0 0 3px var(--line);border-radius:50%;flex-shrink:0}.tv-text{white-space:pre-wrap;word-break:break-word;max-height:220px;padding:8px 10px;font-size:12px;overflow:auto}.tv-text.mono{font-family:var(--tv-mono)}.tv-empty-note,.tv-none{color:var(--tv-ink-3);padding:2px;font-size:12px;font-style:italic;display:inline-block}.tv-gridwrap{max-width:100%;padding:9px 10px 10px;overflow-x:auto}.tv-grid{border-collapse:collapse;font-family:var(--tv-mono);font-size:11.5px}.tv-grid th,.tv-grid td{border:1px solid var(--tv-line-soft);text-align:right;white-space:nowrap;padding:3px 8px}.tv-grid td{color:var(--tv-ink)}.tv-grid td.text{color:var(--str-ink);text-align:left}.tv-grid td.na{color:var(--tv-ink-3);font-style:italic}.tv-colhead,.tv-rowhead{background:var(--cell-head);color:var(--tv-ink-2);font-weight:600}.tv-rowhead{text-align:right;color:var(--tv-ink-3)}.tv-corner{background:0 0;border-color:#0000}.tv-dtype-row th{color:var(--tv-ink-3);background:0 0;border-top:0;font-size:10px;font-weight:500}.tv-grid td.chg{background:var(--tv-chg-bg);box-shadow:inset 0 0 0 1px var(--tv-chg-line);color:var(--tv-chg-ink)}.tv-grid td.sel{background:var(--tv-sel-bg);box-shadow:inset 0 0 0 1px var(--tv-sel-line);color:var(--tv-sel-ink);font-weight:700}.tv-grid td.chg.sel{background:var(--tv-sel-bg);box-shadow:inset 0 0 0 1px var(--tv-sel-line), inset 0 -3px 0 var(--tv-chg-line);color:var(--tv-sel-ink)}.tv-plane+.tv-plane{margin-top:8px}.tv-plane-label{font-family:var(--tv-mono);color:var(--tv-ink-3);margin-bottom:2px;font-size:10px}.tv-trunc{color:var(--tv-ink-3);margin-top:5px;font-size:10.5px;font-style:italic}.tv-explain{z-index:4;border:1px solid var(--accent);background:var(--frame-bg);border-radius:12px;margin-bottom:18px;position:relative;overflow:hidden}.tv-explain-head{border-bottom:1px solid var(--frame-line);flex-wrap:wrap;align-items:center;gap:9px;padding:9px 12px;display:flex}.tv-explain-op{background:var(--accent);color:#fff;letter-spacing:.1em;text-transform:uppercase;border-radius:999px;padding:2px 8px;font-size:10px;font-weight:700}.tv-explain-title{font-family:var(--tv-mono);color:var(--tv-ink);font-size:12.5px}.tv-explain-boxes{flex-wrap:wrap;align-items:flex-start;gap:14px;padding:12px;display:flex}.tv-explain-box{border:1px solid var(--tv-line);background:var(--tv-card);border-radius:9px;overflow:hidden}.tv-explain-label{background:var(--cell-head);border-bottom:1px solid var(--cell-line);font-family:var(--tv-mono);color:var(--tv-ink-2);padding:5px 10px;font-size:11px;font-weight:700}.tv-explain-note{color:var(--tv-ink-2);padding:0 10px 9px;font-size:11.5px}.tv-explain-note.wide{border-top:1px solid var(--frame-line);padding:9px 12px 11px}@media (max-width:640px){.tv-scroll{--tv-step:26px;padding:14px}.tv-panes{grid-template-columns:132px minmax(230px,1fr);gap:16px}.tv-var{padding:5px 8px}.tv-var-name{font-size:11px}.tv-grid th,.tv-grid td{padding:2px 5px;font-size:10.5px}}
.loading-screen{--ls-bg:#0d0e15;--ls-ink:#e7e9f3;--ls-ink-3:#e7e9f36b;--ls-track:#ffffff14;--ls-accent:#7c7cf0;--ls-accent-2:#9b8cff;--ls-pink:#f472b6;--ls-width:min(280px, calc(100vw - 48px));z-index:1000;background:radial-gradient(520px circle at 50% 46%, color-mix(in srgb, var(--ls-accent) 13%, transparent), transparent 70%), var(--ls-bg);color:var(--ls-ink);place-items:center;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;display:grid;position:fixed;inset:0}.loading-screen[data-theme=light]{--ls-bg:#eef1f6;--ls-ink:#1e293b;--ls-ink-3:#1e293b8c;--ls-track:#0f172a1a;--ls-accent:#5b5bd6;--ls-accent-2:#6d5bd0;--ls-pink:#db2777}.loading-screen.done{opacity:0;visibility:hidden;pointer-events:none;transition:opacity .45s .25s,visibility 0s linear .7s}.ls-box{width:var(--ls-width);flex-direction:column;align-items:center;gap:14px;animation:.5s cubic-bezier(.2,.8,.2,1) backwards ls-rise;display:flex}.loading-screen.done .ls-box{transition:transform .45s .25s;transform:translateY(-6px)scale(.98)}@keyframes ls-rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.ls-brand{letter-spacing:.18em;text-transform:uppercase;color:var(--ls-ink-3);font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;font-weight:500}.ls-title{letter-spacing:-.3px;align-items:baseline;font-size:24px;font-weight:700;display:flex}.ls-word{background:linear-gradient(110deg, var(--ls-ink) 42%, var(--ls-accent-2) 50%, var(--ls-ink) 58%) 0 0 / 200% 100%;color:#0000;-webkit-background-clip:text;background-clip:text;animation:2.4s linear infinite ls-sheen}@keyframes ls-sheen{0%{background-position:100% 0}to{background-position:-100% 0}}.ls-dots{color:var(--ls-accent-2);margin-left:1px;display:inline-flex}.ls-dots i{font-style:normal;animation:1.4s ease-in-out infinite ls-dot;display:inline-block}.ls-dots i:nth-child(2){animation-delay:.18s}.ls-dots i:nth-child(3){animation-delay:.36s}@keyframes ls-dot{0%,60%,to{opacity:.25;transform:translateY(0)}30%{opacity:1;transform:translateY(-4px)}}.ls-bar{background:var(--ls-track);border-radius:999px;width:100%;height:6px;position:relative}.ls-bar>span{border-radius:inherit;background:linear-gradient(90deg, var(--ls-accent), var(--ls-accent-2), var(--ls-pink)) 0 0 / var(--ls-width) 100%;box-shadow:0 0 14px color-mix(in srgb, var(--ls-accent) 55%, transparent);animation:10s cubic-bezier(.08,.75,.25,1) forwards ls-fill;position:absolute;inset:0 auto 0 0;overflow:hidden}.ls-bar>span:after{content:"";background:linear-gradient(90deg,#0000,#ffffff80,#0000);animation:1.3s ease-in-out infinite ls-shine;position:absolute;inset:0;transform:translate(-100%)}@keyframes ls-fill{0%{width:3%}to{width:92%}}@keyframes ls-shine{to{transform:translate(100%)}}.loading-screen.done .ls-bar>span{width:100%;transition:width .25s ease-out;animation:none}.ls-stage{color:var(--ls-ink-3);font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;animation:.35s both ls-fade}@keyframes ls-fade{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.ls-box,.ls-word,.ls-dots i,.ls-bar>span:after,.ls-stage{animation:none}.ls-dots i{opacity:.6}.loading-screen.done .ls-box{transform:none}}
@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/inter-latin.0gsaq8ukbf34m.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/inter-latin-ext.3gdi_th3seg1n.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/jetbrains-mono-latin.013tcyr58qp0n.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/jetbrains-mono-latin-ext.1x5-u99bszavt.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}.py-root{--bg:#0d0e15;--pane:#14151f;--pane-2:#191b27;--raised:#1e2030;--line:#ffffff17;--line-2:#ffffff0d;--ink:#e7e9f3;--ink-2:#e7e9f3a3;--ink-3:#e7e9f361;--accent:#7c7cf0;--accent-2:#9b8cff;--green:#4ade80;--pink:#f472b6;--amber:#fbbf24;--red:#f87171;--amber-ink:#1a1405;--mark-prev:#4ade8029;--mark-cur:#f472b629;--mark-err:#f8717129;--err-wave:#f87171b3;--err-halo:#f871712e;--str-ink:#c3e88d;--link-ink:#e7e9f373;--frame-bg:#181d2e;--frame-line:#92aadb4d;--card-bg:#262012;--card-line:#e9c66657;--cell-line:#e9c6663d;--cell-head:#e9c66617;--arrow-shape:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 17 13'%3E%3Cpath d='M0 4.6h8.4V0.8L16.4 6.5 8.4 12.2V8.4H0z' fill='%23000'/%3E%3C/svg%3E");--t-kw:#c792ea;--t-str:#c3e88d;--t-num:#f78c6c;--t-comment:#6b7089;--t-builtin:#82aaff;--t-fn:#82aaff;--t-cls:#ffcb6b;--t-self:#f07178;--mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--ui:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;background:var(--bg);height:100svh;color:var(--ink);font-family:var(--ui);opacity:0;flex-direction:column;display:flex;overflow:hidden}.py-root.show{opacity:1;transition:opacity .3s}.py-root.dragging{cursor:col-resize;-webkit-user-select:none;user-select:none}.py-root.dragging-row{cursor:row-resize;-webkit-user-select:none;user-select:none}.py-root *,.py-root :before,.py-root :after{box-sizing:border-box}.py-root[data-theme=light]{--bg:#eef1f6;--pane:#fff;--pane-2:#f6f8fc;--raised:#fff;--line:#0f172a29;--line-2:#0f172a1a;--ink:#1e293b;--ink-2:#1e293bb3;--ink-3:#1e293bad;--accent:#5b5bd6;--accent-2:#6d5bd0;--green:#15803d;--pink:#db2777;--amber:#b45309;--red:#dc2626;--amber-ink:#fff7e6;--t-kw:#cf222e;--t-str:#0a7c46;--t-num:#0550ae;--t-comment:#6e7781;--t-builtin:#8250df;--t-fn:#6639ba;--t-cls:#953800;--t-self:#cf222e;--mark-prev:#16a34a26;--mark-cur:#db277721;--mark-err:#dc26261f;--err-wave:#dc2626cc;--err-halo:#dc262629;--str-ink:#0a7c46;--link-ink:#1e293b9e;--frame-bg:#eaf1fb;--frame-line:#a9c2e0;--card-bg:#fffdf2;--card-line:#d9cfa6;--cell-line:#cdc296;--cell-head:#78692812}.spin{animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.py-header{background:var(--pane);border-bottom:1px solid var(--line);flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:8px 14px;display:flex}.brand{align-items:center;gap:11px;min-width:0;display:flex}.brand-name{letter-spacing:-.2px;white-space:nowrap;font-size:14px;font-weight:700}.header-right{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:10px;display:flex}.home-link,.icon-btn{border:1px solid var(--line);background:var(--pane-2);height:32px;color:var(--ink-2);font-family:var(--ui);border-radius:8px;font-size:12.5px;font-weight:600}.home-link{align-items:center;padding:0 12px;text-decoration:none;display:inline-flex}.home-link.ghost{color:var(--ink-3);background:0 0}.home-link:hover,.icon-btn:hover{color:var(--ink);border-color:var(--ink-3)}.icon-btn{cursor:pointer;place-items:center;width:32px;padding:0;display:grid}.icon-btn svg{width:16px;height:16px}.wrap-toggle{color:var(--ink-3);cursor:pointer;align-items:center;gap:5px;font-size:12px;display:inline-flex}.wrap-toggle input{accent-color:var(--accent);width:14px;height:14px}.font-range{width:74px;accent-color:var(--accent);cursor:pointer;height:3px}.file-btn{border:1px solid var(--line);background:var(--pane-2);height:32px;color:var(--ink-2);font-family:var(--ui);cursor:pointer;border-radius:8px;align-items:center;gap:4px;padding:0 10px 0 8px;font-size:12.5px;font-weight:600;display:inline-flex}.file-btn svg{width:13px;height:13px}.file-btn:hover{color:var(--ink);border-color:var(--ink-3)}.file-chips{border-bottom:1px solid var(--line);background:var(--pane-2);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:6px;padding:7px 12px;display:flex}.file-chip{border:1px solid var(--card-line);background:var(--card-bg);border-radius:999px;align-items:center;gap:6px;padding:2px 3px 2px 8px;display:inline-flex}.file-chip-name{font-family:var(--mono);color:var(--ink);font-size:11.5px;font-weight:600}.file-chip-size{color:var(--ink-2);font-size:10.5px}.file-chip button{width:17px;height:17px;color:var(--ink-3);cursor:pointer;background:0 0;border:0;border-radius:50%;place-items:center;font-size:14px;line-height:1;display:grid}.file-chip button:hover{background:var(--line);color:var(--ink)}.file-chips-note{color:var(--ink-2);font-size:11px}.file-chips-note.bad{color:var(--red);font-weight:600}.file-chips-note.warn{color:var(--amber);font-weight:600}.drop-veil{z-index:4;border:2px dashed var(--accent);background:color-mix(in srgb, var(--pane) 88%, var(--accent));opacity:0;pointer-events:none;border-radius:10px;place-items:center;transition:opacity .12s;display:grid;position:absolute;inset:6px}.drop-veil span{color:var(--ink);font-size:13px;font-weight:600}.code-pane.dropping .drop-veil{opacity:1}.py-main{grid-template-columns:var(--code-width,520px) 10px minmax(0, 1fr);flex:1;gap:0;min-height:0;padding:10px;display:grid}.left-col{flex-direction:column;gap:0;min-width:0;min-height:0;display:flex}.pane{background:var(--pane);border:1px solid var(--line);border-radius:12px;flex-direction:column;min-height:0;display:flex;overflow:hidden}.code-pane{flex:auto;min-height:140px;position:relative}.out-pane{height:var(--out-height,200px);flex:none;min-height:64px}.code-tools{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:10px;display:flex}.pane-head{border-bottom:1px solid var(--line);background:var(--pane-2);flex-shrink:0;justify-content:space-between;align-items:center;gap:10px;padding:8px 12px;display:flex}.pane-title{letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);font-size:10.5px;font-weight:700}.pane-note,.state{color:var(--ink-3);font-size:11.5px}.state.ok{color:var(--green)}.state.bad{color:var(--red)}.editor-shell{background:var(--pane);flex:1;align-items:stretch;min-height:0;display:flex;overflow:hidden}.editor-gutter{text-align:right;-webkit-user-select:none;user-select:none;font-family:var(--mono);color:var(--ink-3);background:var(--pane);border-right:1px solid var(--line-2);flex-shrink:0;padding:12px 6px 12px 0;line-height:1.6;overflow:hidden}.gut-line{min-height:1.6em;padding:0 6px 0 21px;line-height:1.6em;position:relative}.gut-line.is-prev{color:var(--green);font-weight:700}.gut-line.is-cur{color:var(--pink);font-weight:700}.gut-line.is-error{color:var(--red);font-weight:700}.gut-line.is-prev:before,.gut-line.is-cur:before{content:"";width:17px;height:13px;-webkit-mask:var(--arrow-shape) no-repeat left center / 17px 13px;-webkit-mask:var(--arrow-shape) no-repeat left center / 17px 13px;mask:var(--arrow-shape) no-repeat left center / 17px 13px;margin-top:-7px;position:absolute;top:50%;left:0}.gut-line.is-prev:before{background-color:var(--green)}.gut-line.is-cur:before{background-color:var(--pink);animation:1.6s ease-in-out infinite nudge}@keyframes nudge{0%,to{transform:translate(0)}50%{transform:translate(2px)}}.gut-line.is-error:before{content:"";background:var(--red);width:11px;height:11px;box-shadow:0 0 0 3px var(--err-halo);border-radius:50%;margin-top:-5.5px;position:absolute;top:50%;left:3px}.editor-code{flex:auto;min-width:0;height:100%;position:relative}.editor-shell .editor,.editor-highlight{font-family:var(--mono);font-size:inherit;tab-size:4;padding:12px 14px;line-height:1.6}.editor-shell .editor{z-index:2;resize:none;color:#0000;width:100%;height:100%;caret-color:var(--accent-2);background:0 0;border:none;outline:none;position:absolute;inset:0;overflow:auto}.editor-shell .editor::placeholder{color:var(--ink-3)}.editor-shell .editor::selection{background:#7c7cf059}.editor-shell .editor.wrap{white-space:pre-wrap;overflow-wrap:break-word;overflow-x:hidden}.editor-shell .editor:not(.wrap){white-space:pre}.editor-highlight{z-index:1;pointer-events:none;width:100%;height:100%;color:var(--ink);white-space:pre;position:absolute;top:0;left:0;overflow:hidden}.editor-highlight.wrap{white-space:pre-wrap;overflow-wrap:break-word}.hl-line{min-height:1.6em}.hl-line.is-prev,.hl-line.is-cur,.hl-line.is-error{background:var(--mark);box-shadow:-14px 0 0 0 var(--mark), 14px 0 0 0 var(--mark);border-radius:3px}.hl-line.is-prev{--mark:var(--mark-prev)}.hl-line.is-cur{--mark:var(--mark-cur)}.hl-line.is-error{--mark:var(--mark-err);-webkit-text-decoration:underline wavy var(--err-wave);text-decoration:underline wavy var(--err-wave);text-underline-offset:3px}.editor-shell .editor::-webkit-scrollbar{width:9px;height:9px}.stdout::-webkit-scrollbar{width:9px;height:9px}.tv-scroll::-webkit-scrollbar{width:9px;height:9px}.editor-shell .editor::-webkit-scrollbar-thumb{background:var(--line);border-radius:5px}.stdout::-webkit-scrollbar-thumb{background:var(--line);border-radius:5px}.tv-scroll::-webkit-scrollbar-thumb{background:var(--line);border-radius:5px}.t-kw{color:var(--t-kw)}.t-str{color:var(--t-str)}.t-comment{color:var(--t-comment);font-style:italic}.t-num{color:var(--t-num)}.t-builtin{color:var(--t-builtin)}.t-fn{color:var(--t-fn)}.t-fn-def{color:var(--t-fn);font-weight:600}.t-cls{color:var(--t-cls);font-weight:600}.t-decorator{color:var(--t-cls)}.t-self{color:var(--t-self);font-style:italic}.t-attr{color:var(--ink)}.legend{border-top:1px solid var(--line-2);color:var(--ink-3);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:16px;padding:7px 12px;font-size:11.5px;display:flex}.legend-item{align-items:center;gap:6px;display:inline-flex}.legend-item i{clip-path:polygon(0 33%,52% 33%,52% 5%,100% 50%,52% 95%,52% 67%,0 67%);background:currentColor;border-radius:1px;width:13px;height:10px}.legend-item.prev{color:var(--green)}.legend-item.cur{color:var(--pink)}.legend-item.err{color:var(--red)}.legend-item.err i{clip-path:circle(40%)}.run-row{border-top:1px solid var(--line);background:var(--pane-2);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:8px;padding:10px 12px;display:flex}.run-btn{background:linear-gradient(135deg, var(--accent), var(--accent-2));color:#fff;min-height:38px;font-family:var(--ui);cursor:pointer;border:none;border-radius:9px;align-items:center;gap:8px;padding:8px 16px;font-size:13px;font-weight:700;transition:filter .15s;display:inline-flex;position:relative;overflow:hidden}.run-btn svg{width:15px;height:15px}.run-btn:hover:not(:disabled){filter:brightness(1.1)}.run-btn:disabled{opacity:.45;cursor:not-allowed}.run-btn.busy:after{content:"";background:linear-gradient(90deg,#0000,#ffffff40,#0000);animation:1.2s linear infinite shimmer;position:absolute;inset:0;transform:translate(-100%)}@keyframes shimmer{to{transform:translate(100%)}}.run-row kbd{font-family:var(--mono);border:1px solid var(--line);background:var(--raised);color:var(--ink-3);border-bottom-width:2px;border-radius:6px;padding:3px 7px;font-size:10.5px}.ghost-btn{border:1px solid var(--line);min-height:34px;color:var(--ink-2);font-family:var(--ui);cursor:pointer;background:0 0;border-radius:8px;padding:6px 14px;font-size:12.5px;font-weight:600}.ghost-btn:hover:not(:disabled){color:var(--ink);border-color:var(--ink-3)}.ghost-btn:disabled{opacity:.4;cursor:not-allowed}.steps-note{color:var(--ink-3);margin-left:auto;font-size:11.5px}.error-note{border-top:1px solid var(--err-halo);background:var(--mark-err);color:var(--red);font-family:var(--mono);white-space:pre-wrap;flex-shrink:0;padding:9px 12px;font-size:12px;line-height:1.5}.stdout{min-height:0;font-family:var(--mono);color:var(--ink);white-space:pre;flex:1;margin:0;padding:10px 12px;font-size:12.5px;line-height:1.55;overflow:auto}.splitter{touch-action:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.splitter span{background:var(--line);border-radius:999px;transition:background .15s,height .15s,width .15s}.splitter-v{cursor:col-resize}.splitter-v span{width:3px;height:42px}.splitter-v:hover span,.py-root.dragging .splitter-v span{background:var(--accent);height:68px}.splitter-h{cursor:row-resize;height:10px}.splitter-h span{width:42px;height:3px}.splitter-h:hover span,.py-root.dragging-row .splitter-h span{background:var(--accent);width:68px}.canvas-pane{background:var(--pane);border:1px solid var(--line);border-radius:12px;flex-direction:column;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.canvas-empty{color:var(--ink-3);text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:6px;display:flex}.canvas-empty svg{opacity:.5;width:38px;height:38px}.canvas-empty p{color:var(--ink-2);margin:4px 0 0;font-size:13.5px;font-weight:600}.canvas-empty span{font-size:12px}.input-pop{z-index:8;border:1px solid var(--card-line);background:var(--card-bg);border-radius:14px;flex-direction:column;gap:4px;width:min(430px,100% - 32px);padding:16px 18px 18px;animation:.18s ease-out pop-in;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 20px 50px #0000006b}@keyframes pop-in{0%{opacity:0;transform:translate(-50%,-46%)scale(.98)}to{opacity:1;transform:translate(-50%,-50%)scale(1)}}.input-pop-title{letter-spacing:.12em;text-transform:uppercase;color:var(--amber);font-size:10.5px;font-weight:700}.input-pop-prompt{font-family:var(--mono);color:var(--ink);word-break:break-word;margin:2px 0 10px;font-size:13.5px}.input-pop-row{gap:8px;display:flex}.input-box{border:1px solid var(--cell-line);background:var(--pane);min-width:0;min-height:36px;color:var(--ink);font-family:var(--mono);border-radius:8px;outline:none;flex:1;padding:7px 11px;font-size:13px}.input-box:focus{border-color:var(--amber)}.send-btn{background:var(--amber);min-height:36px;color:var(--amber-ink);font-family:var(--ui);cursor:pointer;border:none;border-radius:8px;padding:7px 16px;font-size:12.5px;font-weight:700}.send-btn:hover{filter:brightness(1.08)}.stepbar{border-top:1px solid var(--line);background:var(--pane);flex-shrink:0;grid-template-columns:1fr auto 1fr;grid-template-areas:"slider slider slider""spacer buttons status";align-items:center;gap:8px 14px;padding:9px 14px;display:grid}.stepbar-buttons{grid-area:buttons;justify-self:center;align-items:center;gap:6px;display:flex}.stepbar-buttons button{border:1px solid var(--line);background:var(--pane-2);min-height:32px;color:var(--ink);font-family:var(--ui);cursor:pointer;white-space:nowrap;border-radius:8px;padding:5px 12px;font-size:12px;font-weight:600;transition:background .15s,border-color .15s}.stepbar-buttons button:hover:not(:disabled){border-color:var(--accent);color:var(--accent-2)}.stepbar-buttons button:disabled{opacity:.35;cursor:not-allowed}.stepbar-count{font-family:var(--mono);color:var(--ink-2);white-space:nowrap;padding:0 4px;font-size:12px}.stepbar-count b{color:var(--ink)}.stepbar-slider{width:100%;min-width:100px;accent-color:var(--accent);cursor:pointer;grid-area:slider;height:4px}.stepbar-slider:disabled{opacity:.4;cursor:not-allowed}.stepbar-status{color:var(--ink-3);white-space:nowrap;text-overflow:ellipsis;grid-area:status;justify-self:end;max-width:34vw;font-size:12px;overflow:hidden}.stepbar-status.done{color:var(--amber)}.stepbar-status.bad{color:var(--red)}@media (max-width:1000px){.py-root{height:auto;min-height:100svh;overflow:visible}.py-main{grid-template-columns:minmax(0,1fr);gap:10px}.splitter{display:none}.left-col{gap:10px}.code-pane{min-height:46svh}.out-pane{height:auto;max-height:none}.stdout{max-height:180px}.canvas-pane{min-height:60svh}.stepbar{z-index:5;position:sticky;bottom:0}}@media (max-width:640px){.py-header{flex-wrap:nowrap;padding:8px 10px}.header-right{flex-wrap:nowrap;flex:1;gap:6px;min-width:0}.font-range,.wrap-toggle{display:none}.file-btn{flex-shrink:0}.py-main{padding:8px}.run-row{padding:8px 10px}.run-row kbd{display:none}.steps-note{margin-left:auto}.stepbar{grid-template-columns:minmax(0,1fr);grid-template-areas:"slider""buttons""status";justify-items:center;gap:6px;padding:8px 10px}.stepbar-buttons{flex-wrap:wrap;justify-content:center;gap:4px}.stepbar-buttons button{padding:5px 9px;font-size:11px}.stepbar-count{padding:0;font-size:11px}.stepbar-status{justify-self:center;max-width:100%;font-size:11px}}@media (pointer:coarse){.stepbar-buttons button,.home-link,.icon-btn{min-height:40px}.icon-btn{width:40px}.run-btn{min-height:44px}}
