.editor{height:100%;min-height:0;overflow:hidden}.editor .cm-editor{height:100%}.editor .cm-line{border-left:4px solid #0000;padding-left:10px}.editor .cm-editor .cm-line.cm-next-line{border-left-color:var(--coral);background:#ff7f5029}.editor .cm-editor .cm-line.cm-prev-line{border-left-color:var(--yellow);background:#ffd16647}.editor .cm-vim-panel{font-family:var(--font-mono);background:var(--paper);border-top:var(--stroke);padding:2px 10px;font-size:12px}.editor .cm-vim-panel input{font-family:inherit;font-size:inherit;color:var(--ink);background:0 0}.editor .cm-fat-cursor{background:#1d1d1d59!important}.editor .cm-editor .cm-line.cm-error-line{border-left-color:var(--pink);background:#ef476f29}.editor .cm-editor .cm-gutterElement.cm-gutter-next{color:var(--ink);background:#ff7f5029;font-weight:700}.editor .cm-editor .cm-gutterElement.cm-gutter-prev{color:var(--ink);background:#ffd16647;font-weight:700}.editor .cm-editor .cm-gutterElement.cm-gutter-error{color:var(--pink);background:#ef476f29;font-weight:700}.shape{border:var(--stroke);font-family:var(--font-mono);white-space:nowrap;justify-content:center;align-items:center;font-size:13px;font-weight:600;line-height:1;display:inline-flex}.num{min-width:var(--cell);height:var(--cell);background:var(--coral);border-radius:999px;padding:0 6px}.num.is-wide{padding:0 14px}.str{background:var(--yellow);text-overflow:ellipsis;border-radius:4px 14px 14px 4px;max-width:280px;height:36px;padding:0 12px 0 22px;position:relative;overflow:hidden}.str-hole{border:var(--stroke);background:var(--paper);border-radius:50%;width:5px;height:5px;margin-top:-2.5px;position:absolute;top:50%;left:12px}.str .faint{color:#1d1d1d80;font-weight:400}.bool{width:34px;height:34px}.bool.is-true{background:var(--green)}.bool.is-false{background:var(--pink);color:var(--paper)}.none{width:var(--cell);height:var(--cell);color:var(--muted);background:0 0;border-style:dashed;font-size:10px;font-weight:400}.fn{border:none;gap:8px}.fn svg{width:34px;height:30px;overflow:visible}.fn polygon{fill:var(--ink);stroke:var(--ink);stroke-width:1.5px;stroke-linejoin:round}.fn-name{font-weight:600}.other{background:var(--paper);text-overflow:ellipsis;max-width:260px;height:34px;padding:0 10px;font-weight:400;overflow:hidden}.shape.is-small{--cell:34px;font-size:12px}.str.is-small{height:28px;padding-left:20px}.bool.is-small{width:26px;height:26px}.fn.is-small svg{width:24px;height:22px}.box{border:var(--stroke);background:var(--paper);flex-direction:column;min-width:80px;display:inline-flex}.box-head{border-bottom:var(--stroke);letter-spacing:.04em;text-transform:uppercase;justify-content:space-between;align-items:center;gap:8px;padding:4px 8px;font-size:11px;font-weight:700;display:flex}.head-list{background:var(--blue);color:var(--paper)}.head-tuple{background:var(--green)}.head-set{background:var(--pink);color:var(--paper)}.head-dict{background:var(--yellow)}.head-object{background:var(--ink);color:var(--paper);text-transform:none;letter-spacing:0;font-size:12px}.empty{color:var(--muted);padding:10px 12px;font-size:11px}.more{color:var(--muted);border-top:1px dashed var(--ink);padding:4px 8px;font-size:11px}.cells{flex-wrap:wrap;gap:0;padding:8px;display:flex}.cell{flex-direction:column;align-items:center;display:flex}.cell-body{border:var(--stroke);background:var(--blue);justify-content:center;align-items:center;min-width:52px;min-height:52px;margin-left:-1.5px;padding:8px;display:flex}.cell:first-child .cell-body{margin-left:0}.tuple .cell-body{background:var(--green);border-radius:14px;margin-left:2px}.tuple .cell:first-child .cell-body{margin-left:0}.cell-index{font-family:var(--font-mono);color:var(--muted);padding-top:4px;font-size:10px}.set-ring{border:var(--stroke);background:#ef476f2e;border-radius:999px;flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;min-width:90px;max-width:300px;min-height:90px;margin:10px;padding:18px;display:flex}.rows{flex-direction:column;padding:8px;display:flex}.row{grid-template-columns:auto 1fr;margin-top:-1.5px;display:grid}.row:first-child{margin-top:0}.row-key,.row-val{border:var(--stroke);align-items:center;padding:6px 8px;display:flex}.dict .row-key{background:var(--bg);justify-content:center}.row-val{background:var(--paper);margin-left:-1.5px}.row-key.attr{font-family:var(--font-mono);background:var(--bg);font-size:12px}.alias{border:var(--stroke);background:var(--paper);min-width:18px;height:18px;color:var(--ink);font-family:var(--font-mono);letter-spacing:0;border-radius:999px;justify-content:center;align-items:center;padding:0 4px;font-size:10px;display:inline-flex}.stage{background-color:var(--bg);background-image:linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px);background-position:-1px -1px;background-size:48px 48px;height:100%;position:relative;overflow:auto}.panels{flex-wrap:wrap;align-items:flex-start;gap:24px;padding:24px;display:flex}.panel{border:var(--stroke);background:#fffdf5eb;min-width:260px;max-width:100%}.panel.is-active{box-shadow:6px 6px 0 var(--ink)}.panel-head{border-bottom:var(--stroke);font-family:var(--font-mono);justify-content:space-between;align-items:center;padding:8px 12px;font-size:13px;font-weight:600;display:flex}.panel.is-active .panel-head{background:var(--ink);color:var(--paper)}.panel-tag{font-family:var(--font-ui);letter-spacing:.08em;text-transform:uppercase;color:var(--coral);font-size:10px;font-weight:700}.vars{flex-wrap:wrap;align-items:flex-start;gap:20px 28px;padding:16px;display:flex}.no-vars{color:var(--muted);font-size:12px}.var{flex-direction:column;align-items:flex-start;gap:6px;display:flex}.var-name{font-family:var(--font-mono);padding:1px 4px;font-size:12px;font-weight:600;transition:background .3s}.var-name.is-hot{background:var(--coral)}.var-value{transform-origin:0}.var-value.flash>*{animation:.9s ease-out flash}@keyframes flash{0%{outline:3px solid var(--coral);outline-offset:3px}to{outline-offset:8px;outline:3px solid #0000}}.returned{border-top:1px dashed var(--ink);align-items:center;gap:10px;padding:10px 16px;display:flex}.returned-label{letter-spacing:.08em;text-transform:uppercase;font-size:10px;font-weight:700}.stage-empty{flex-direction:column;justify-content:center;align-items:center;gap:24px;height:100%;padding:24px;display:flex}.legend-title{font-size:18px;font-weight:700}.legend-hint{color:var(--muted);margin-top:-18px;font-size:12px}.legend{border:var(--stroke);background:var(--paper);font-family:var(--font-mono);grid-template-columns:repeat(2,minmax(120px,auto));gap:12px 32px;margin:0;padding:20px 24px;font-size:12px;list-style:none;display:grid}.legend li{align-items:center;gap:12px;display:flex}.legend-swatch{border:var(--stroke);flex:none;width:22px;height:22px}.sw-num{background:var(--coral);border-radius:50%}.sw-str{background:var(--yellow);border-radius:3px 10px 10px 3px;width:30px;height:18px}.sw-bool{background:var(--green);width:16px;height:16px}.sw-none{border-style:dashed}.sw-list{background:linear-gradient(90deg, var(--blue) 0 48%, var(--ink) 48% 54%, var(--blue) 54%);width:34px}.sw-tuple{background:var(--green);border-radius:7px}.sw-dict{background:linear-gradient(90deg, var(--yellow) 0 50%, var(--paper) 50%)}.sw-set{background:var(--pink);border-radius:50%}.sw-object{background:linear-gradient(var(--ink) 0 35%, var(--paper) 35%)}.sw-fn{background:var(--ink);clip-path:polygon(50% 0,100% 100%,0 100%);border:none;width:22px}.app{flex-direction:column;height:100%;min-height:0;display:flex}.topbar{border-bottom:var(--stroke);background:var(--bg);align-items:center;gap:16px;padding:12px 20px;display:flex}.topbar-spacer{flex:1}.brand{letter-spacing:-.02em;color:inherit;align-items:center;gap:10px;font-size:20px;font-weight:700;text-decoration:none;display:flex}.brand-mark{gap:3px;display:flex}.brand-mark i{border:var(--stroke);width:14px;height:14px;display:block}.brand-mark .m1{background:var(--blue)}.brand-mark .m2{background:var(--coral);border-radius:50%}.brand-mark .m3{background:var(--yellow)}.byline{border:var(--stroke);background:var(--ink);height:28px;color:var(--paper);box-shadow:2px 2px 0 var(--coral);border-radius:999px;align-items:center;gap:7px;padding:0 12px;font-size:12px;font-weight:600;text-decoration:none;transition:transform 80ms,box-shadow 80ms;display:inline-flex}.byline:hover{box-shadow:3px 3px 0 var(--coral);transform:translate(-1px,-1px)}.byline svg{width:12px;height:12px}.sample-menu{position:relative}.sample-btn{align-items:center;gap:8px;height:34px;display:inline-flex}.sample-btn .chev{width:12px;height:12px;transition:transform .12s}.sample-menu.is-open .sample-btn{background:var(--yellow)}.sample-menu.is-open .chev{transform:rotate(180deg)}.sample-list{z-index:20;border:var(--stroke);background:var(--paper);min-width:240px;box-shadow:4px 4px 0 var(--ink);padding:4px;position:absolute;top:calc(100% + 8px);left:0}.sample-item{white-space:nowrap;width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:1.5px solid #0000;justify-content:space-between;align-items:baseline;gap:16px;padding:8px 10px;display:flex}.sample-item.is-active{background:var(--yellow);border-color:var(--ink)}.sample-item:focus-visible{outline:none}.sample-name{font-weight:600}.sample-hint{font-family:var(--font-mono);color:var(--muted);font-size:11px}.sample-item.is-active .sample-hint{color:var(--ink)}.py-status{color:var(--muted);align-items:center;gap:6px;font-size:12px;display:flex}.py-status:before{content:"";border:var(--stroke);background:var(--yellow);border-radius:50%;width:8px;height:8px}.py-status.is-ready:before{background:var(--green)}.btn{border:var(--stroke);background:var(--paper);cursor:pointer;height:36px;box-shadow:3px 3px 0 var(--ink);border-radius:0;padding:0 14px;font-weight:600;transition:transform 80ms,box-shadow 80ms}.btn:hover:not(:disabled){box-shadow:4px 4px 0 var(--ink);transform:translate(-1px,-1px)}.btn:active:not(:disabled){box-shadow:0 0 0 var(--ink);transform:translate(3px,3px)}.btn:disabled{opacity:.4;cursor:default;box-shadow:none}.btn-primary{background:var(--coral)}.btn-run{min-width:96px}.btn.icon{padding:0 10px}.workspace{grid-template-columns:minmax(320px, var(--split,40%)) 0 minmax(360px, 1fr);flex:1;min-height:0;display:grid}.splitter{z-index:5;cursor:col-resize;touch-action:none;width:12px;margin-left:-6px;position:relative}.splitter:before{content:"";background:var(--ink);transition:inset .1s,background .1s;position:absolute;inset:0 5px}.splitter:after{content:"";border:var(--stroke);background-color:var(--paper);background-image:linear-gradient(var(--ink), var(--ink)), linear-gradient(var(--ink), var(--ink));width:16px;height:48px;box-shadow:2px 2px 0 var(--ink);background-position:calc(50% - 2.5px),calc(50% + 2.5px);background-repeat:no-repeat;background-size:2px 18px;border-radius:999px;transition:background-color .1s,height .1s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.splitter:hover:before,.splitter:focus-visible:before,.is-resizing .splitter:before{background:var(--coral);inset:0 4px}.splitter:hover:after,.splitter:focus-visible:after,.is-resizing .splitter:after{background-color:var(--coral);height:60px}.splitter:focus-visible{outline:none}.is-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.is-resizing iframe,.is-resizing .cm-editor{pointer-events:none}.left{flex-direction:column;min-width:0;min-height:0;display:flex}.pane-label{border-bottom:var(--stroke);letter-spacing:.08em;text-transform:uppercase;justify-content:space-between;align-items:center;padding:8px 16px;font-size:11px;font-weight:700;display:flex}.pane-tools{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px 16px;display:flex}.vim-toggle{border:var(--stroke);background:var(--paper);height:26px;box-shadow:2px 2px 0 var(--ink);letter-spacing:0;text-transform:none;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;padding:0 10px 0 6px;font-size:12px;font-weight:700;transition:transform 80ms,box-shadow 80ms,background .12s;display:inline-flex;position:relative}.vim-toggle:hover{box-shadow:3px 3px 0 var(--ink);transform:translate(-1px,-1px)}.vim-toggle:active{box-shadow:0 0 0 var(--ink);transform:translate(2px,2px)}.vim-toggle.is-on{background:var(--green)}.vim-toggle input{opacity:0;width:0;height:0;position:absolute}.vim-toggle:has(input:focus-visible){outline:2px solid var(--blue);outline-offset:2px}.vim-track{border:var(--stroke);background:var(--bg);border-radius:999px;width:26px;height:14px;position:relative}.vim-track i{background:var(--ink);border-radius:50%;width:9px;height:9px;transition:transform .12s;position:absolute;top:1px;left:1px}.vim-toggle.is-on .vim-track{background:var(--paper)}.vim-toggle.is-on .vim-track i{transform:translate(12px)}.key{letter-spacing:0;text-transform:none;align-items:center;gap:6px;font-weight:500;display:flex}.key i{border:var(--stroke);width:10px;height:10px;margin-left:8px;display:inline-block}.key-next{background:var(--coral)}.key-prev{background:var(--yellow)}.editor-wrap{flex:1;min-height:0}.console{border-top:var(--stroke);background:var(--paper)}.console-head{border-bottom:1px solid var(--grid);letter-spacing:.08em;text-transform:uppercase;padding:6px 16px;font-size:11px;font-weight:700}.console-body{height:120px;font-family:var(--font-mono);white-space:pre-wrap;margin:0;padding:10px 16px;font-size:13px;overflow:auto}.console-body .faint{color:var(--muted)}.console-error{color:#c2334f;font-weight:600}.console-warn{color:#b9772a}.right{flex-direction:column;min-width:0;min-height:0;display:flex}.stage-wrap{flex:1;min-height:0}.controls{border-bottom:var(--stroke);background:var(--bg);align-items:center;gap:16px;padding:10px 16px 12px;display:flex}.btn-group{gap:8px;display:flex}.scrubber{min-width:80px;accent-color:var(--ink);flex:1}.step-info{min-width:96px;font-family:var(--font-mono);flex-direction:column;align-items:flex-end;font-size:12px;display:flex}.step-info span{color:var(--muted);font-size:11px}@media (width<=820px){.topbar{flex-wrap:wrap;padding:10px 16px}.py-status{display:none}.workspace{grid-template-rows:auto auto;grid-template-columns:1fr;overflow:auto}.left{border-bottom:var(--stroke)}.splitter{display:none}.editor-wrap{flex:none;height:300px}.stage-wrap{flex:none;height:70vh}.controls{flex-wrap:wrap}.scrubber{flex-basis:100%;order:3}}:root{--bg:#fff6dc;--paper:#fffdf5;--ink:#1d1d1d;--muted:#6b6455;--rule:#1d1d1d;--grid:#1d1d1d24;--coral:coral;--yellow:#ffd166;--green:#06d6a0;--blue:#118ab2;--pink:#ef476f;--stroke:1.5px solid var(--ink);--font-ui:"Inter Tight", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--cell:44px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;font-size:14px}button,select{font:inherit;color:inherit}
