:root{--bg: #f7f7f4;--panel: #ffffff;--ink: #1f2330;--muted: #646b7d;--line: #d9dbe2;--accent: #bf4d14;--accent-ink: #ffffff;--focus: #1d6fd6;--expr: #e8f1fb;--expr-line: #9cbfe6;--pat: #fbf0df;--pat-line: #e3b170;--type: #ece8fa;--type-line: #a99ee0;--item: #f4f5f8;--item-line: #b9bdcb;--hole: #fff4c2;--hole-line: #c89a00;--kw: #00796b;--str: #b03a1a;--num: #8a2a9e;--cons: #0a5ea8;--done: #dff3e3;--done-line: #2e8b47;--current: #fff1b8;--todo-line: #8a91a3;--err: #b42318;--err-bg: #fdecea;--warn: #8a5a00;--warn-bg: #fff6dc;--ok: #1d7a3a;--ok-bg: #e5f5e9;--shadow: 0 1px 2px rgba(20, 24, 40, .08);--mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;--sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #15171c;--panel: #1d2027;--ink: #e6e8ee;--muted: #9aa1b2;--line: #353a46;--accent: #f0743a;--accent-ink: #1a1206;--focus: #6aa8ff;--expr: #1f2d40;--expr-line: #3d6ea3;--pat: #3a2e1d;--pat-line: #a07a40;--type: #2c2742;--type-line: #6d61b0;--item: #22252d;--item-line: #454b5a;--hole: #3d3410;--hole-line: #d6a92a;--kw: #4fc1b0;--str: #f0906e;--num: #d48ae6;--cons: #6fb3ff;--done: #1f3a27;--done-line: #4fbf6c;--current: #4a3f12;--todo-line: #7e869a;--err: #ff8a80;--err-bg: #3d1d1b;--warn: #ffcf6e;--warn-bg: #3a3016;--ok: #7ed49a;--ok-bg: #1b3324;--shadow: none;color-scheme:dark}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font:14px/1.45 var(--sans)}button,select,input,textarea{font:inherit;color:inherit}button,.button{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:4px 10px;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:4px;min-height:30px}button:hover,.button:hover{border-color:var(--muted)}button:disabled{opacity:.55;cursor:default}button.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}:focus-visible{outline:2px solid var(--focus);outline-offset:1px}code,kbd,pre{font-family:var(--mono);font-size:.93em}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.skip{position:absolute;left:-9999px}.skip:focus{left:8px;top:8px;z-index:10;background:var(--panel);padding:6px}.muted{color:var(--muted)}.app{display:flex;flex-direction:column;height:100%}.app>.panes{flex:1 1 auto}.app>.console-pane{flex:0 0 22vh;min-height:90px}.toolbar{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;padding:8px 16px;background:var(--panel);border-bottom:1px solid var(--line)}.toolbar .brand{display:flex;align-items:center;gap:8px;font-weight:700}.toolbar .group{display:flex;gap:6px;align-items:center}.toolbar .right{margin-left:auto}.seg{display:inline-flex;border:1px solid var(--line);border-radius:7px;overflow:hidden}.seg button{border:0;border-radius:0}.seg button.on{background:var(--ink);color:var(--panel)}.boot{font-size:12px;color:var(--muted);padding:2px 8px;border-radius:10px;border:1px solid var(--line)}.boot-ready{color:var(--ok);border-color:var(--ok)}.boot-failed{color:var(--err);border-color:var(--err)}.panes{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);min-height:0}.pane{min-height:0;min-width:0;display:flex;flex-direction:column;border-right:1px solid var(--line)}.editor-pane{display:grid;grid-template-columns:minmax(0,1fr) 210px}.editor{overflow:auto;min-height:0;background:var(--panel)}.console-pane{border-top:1px solid var(--line);background:var(--panel);overflow:auto;min-height:0}.narrow-tabs{display:none}@media(max-width:860px){.app>.console-pane{flex-basis:16vh;min-height:70px}.narrow-tabs{display:flex;gap:4px;padding:4px 8px;background:var(--panel);border-bottom:1px solid var(--line)}.narrow-tabs button{flex:1;min-height:44px}.narrow-tabs button.on{background:var(--ink);color:var(--panel)}.panes{grid-template-columns:1fr}.narrow-code .right-pane,.narrow-machine .editor-pane,.narrow-stage .editor-pane{display:none}.editor-pane{grid-template-columns:1fr;grid-template-rows:1fr minmax(120px,30vh)}.toolbar .brand span{display:none}button{min-height:40px}}.message,.banner{padding:6px 16px;display:flex;gap:12px;align-items:center;border-bottom:1px solid var(--line)}.message.error,.banner.err{background:var(--err-bg);color:var(--err)}.message.info{background:var(--panel)}.banner.warn{background:var(--warn-bg);color:var(--warn)}.message button{margin-left:auto;border:0;background:transparent}.blocks{padding:14px 16px 60px;font-family:var(--mono);font-size:13.5px;line-height:1.9;outline:none;min-height:100%}.blocks.loading{font-family:var(--sans);color:var(--muted)}.item{margin:0 0 6px}.item-gap{height:10px}.blk{border-radius:6px;padding:1px 3px;margin:0 1px;position:relative;white-space:pre-wrap;overflow-wrap:anywhere;box-decoration-break:clone;-webkit-box-decoration-break:clone;cursor:pointer}.blk.multi{display:inline-block;vertical-align:top;max-width:100%}.blk.box{display:block;width:fit-content;max-width:calc(100% - 1.2em);margin:2px 0 2px 1.2em}.blk.box.t-match_case,.blk.box.t-then_clause,.blk.box.t-else_clause{margin-left:.4em}.blk.t-parenthesized_expression,.blk.t-parenthesized_pattern,.blk.t-parenthesized_type,.blk.t-value_path,.blk.t-type_constructor_path{background:transparent!important;border-color:transparent!important;padding:0}.blk.cat-item{max-width:100%}.density-framed .blk.cat-expr{background:var(--expr);border:1px solid var(--expr-line)}.density-framed .blk.cat-pat{background:var(--pat);border:1px solid var(--pat-line);border-radius:10px 2px}.density-framed .blk.cat-type{background:var(--type);border:1px solid var(--type-line);clip-path:none;border-radius:12px}.density-framed .blk.cat-item{background:var(--item);border:1px solid var(--item-line);padding:4px 8px;display:inline-block;box-shadow:var(--shadow)}.density-framed .blk.cat-binding,.density-framed .blk.cat-clause{background:transparent;border:1px dashed transparent}.density-framed .blk.cat-expr .blk.cat-expr{background:color-mix(in srgb,var(--expr) 70%,var(--panel))}.density-outlined .blk.cat-expr,.density-outlined .blk.cat-pat,.density-outlined .blk.cat-type{border:1px solid var(--line)}.density-outlined .blk.cat-item{border-left:3px solid var(--item-line);display:inline-block;padding-left:8px}.density-plain .blk{padding:0;margin:0}.blk.cat-comment{color:var(--muted);font-style:italic}.blk.cat-raw,.blk.err{background:var(--err-bg)!important;border:1px dashed var(--err)!important}.blk.missing:after{content:"…";color:var(--err)}.blk.cat-hole{background:none;border:0;padding:0}.hole-chip{display:inline-flex;align-items:center;gap:4px;background:var(--hole);border:1.5px dashed var(--hole-line);border-radius:8px;padding:0 7px;font-weight:700;color:var(--warn)}.hole-type{font-weight:400;font-size:11px;color:var(--muted)}.gl-kw{color:var(--kw);font-weight:700}.gl-op{font-weight:700}.t-string,.t-character{color:var(--str)}.t-number,.t-signed_number{color:var(--num)}.t-constructor_path,.t-constructor_name{color:var(--cons)}.blk.selected{outline:2.5px solid var(--focus);outline-offset:1px;z-index:1}.blk:hover:not(.selected){outline:1px solid color-mix(in srgb,var(--focus) 45%,transparent)}.blk.step-focus{outline:3px solid var(--accent)!important;outline-offset:1px;background:var(--current)!important}.blk.step-current{box-shadow:0 0 0 2px var(--accent)}.blk.step-done{background:var(--done)!important;border-color:var(--done-line)!important}.blk.step-todo{border-style:dashed!important;border-color:var(--todo-line)!important;opacity:.85}.blk.step-callee{box-shadow:inset 3px 0 0 var(--accent)}.blk.step-hole .hole-chip{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.blk.diag-error{border:2px solid var(--err)!important;background:var(--err-bg)!important}.blk.diag-error:before{content:"⚠";color:var(--err);font-size:11px;margin-right:2px}.blk.diag-warning{text-decoration:underline wavy var(--warn)}.value-badge{display:inline-block;margin-left:4px;padding:0 6px;border-radius:9px;background:var(--done-line);color:#fff;font-size:11.5px;line-height:1.6;vertical-align:baseline;max-width:22ch;overflow:hidden;text-overflow:ellipsis}.order-badge{position:absolute;top:-9px;left:-6px;background:var(--ink);color:var(--panel);border-radius:8px;font-size:10px;line-height:15px;min-width:15px;text-align:center;font-family:var(--sans);z-index:2}.inline-edit{position:relative;display:inline-block}.inline-edit textarea{font-family:var(--mono);font-size:13.5px;border:2px solid var(--focus);border-radius:6px;padding:2px 4px;background:var(--panel);resize:none;vertical-align:top;line-height:1.5}.suggest{position:absolute;left:0;top:100%;z-index:20;display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--line);border-radius:6px;box-shadow:0 6px 16px #00000026;min-width:200px;font-family:var(--sans)}.suggest [role=option]{padding:2px 8px;cursor:pointer}.suggest [role=option].on{background:var(--focus);color:#fff}.suggest .hint{font-size:11px;color:var(--muted);padding:2px 8px}.block-actions{position:sticky;bottom:0;margin-top:16px;display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:6px 8px;background:var(--panel);border:1px solid var(--line);border-radius:8px;font-family:var(--sans);box-shadow:var(--shadow)}.block-actions .crumb{color:var(--muted);margin-right:auto}.empty-program{font-family:var(--sans);color:var(--muted)}.textview{height:100%}.textview .cm-editor{height:100%;font-size:13.5px}.textview .cm-scroller{font-family:var(--mono)}.cm-step-focus{background:var(--current);outline:2px solid var(--accent)}.cm-step-done{background:var(--done)}.cm-step-todo{text-decoration:underline dashed var(--todo-line)}.cm-diag-error{text-decoration:underline wavy var(--err)}.cm-diag-warning{text-decoration:underline wavy var(--warn)}.cm-step-hole{background:var(--accent);color:var(--accent-ink)}.palette{overflow:auto;border-left:1px solid var(--line);padding:8px;background:var(--bg)}.palette input[type=search]{width:100%;padding:5px 8px;border:1px solid var(--line);border-radius:6px;background:var(--panel)}.palette-for{font-size:12px;color:var(--muted);margin:6px 2px}.palette-group h3{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:10px 2px 4px}.palette-items{display:flex;flex-wrap:wrap;gap:4px}.tpl{font-family:var(--mono);font-size:12px;padding:2px 7px;min-height:26px}.tpl-expr{background:var(--expr);border-color:var(--expr-line)}.tpl-pat{background:var(--pat);border-color:var(--pat-line)}.tpl-type{background:var(--type);border-color:var(--type-line)}.tpl-item{background:var(--item);border-color:var(--item-line)}.right-pane{background:var(--panel)}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);padding:0 8px;flex-wrap:wrap}.tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;background:transparent}.tabs button.on{border-bottom-color:var(--accent);font-weight:600}.machine{display:flex;flex-direction:column;min-height:0;flex:1}.machine.empty{padding:24px;gap:12px;align-items:flex-start}.tabpanel{overflow:auto;padding:10px 14px;flex:1;min-height:0}.tabpanel h3{font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:12px 0 6px}.controls{padding:8px 10px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:6px}.controls .btns{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.controls .scrub{display:flex;gap:8px;align-items:center}.controls .scrub input{flex:1}.controls .pos{font-variant-numeric:tabular-nums;color:var(--muted);font-size:12px;white-space:nowrap}.outcome{display:flex;flex-wrap:wrap;gap:4px}.pill{font-size:11.5px;padding:1px 8px;border-radius:10px;border:1px solid var(--line);color:var(--muted)}.pill.ok{background:var(--ok-bg);color:var(--ok);border-color:var(--ok)}.pill.warn{background:var(--warn-bg);color:var(--warn);border-color:var(--warn)}.pill.err{background:var(--err-bg);color:var(--err);border-color:var(--err)}.spinner{display:inline-block;width:10px;height:10px;border-radius:50%;border:2px solid var(--line);border-top-color:var(--accent);animation:spin .8s linear infinite;vertical-align:middle}@keyframes spin{to{transform:rotate(360deg)}}.reduced-motion .spinner{animation:none}@media(prefers-reduced-motion:reduce){.spinner{animation:none}}.narration .sentence{font-size:15px;margin:4px 0}.narration details summary{cursor:pointer;color:var(--focus)}.pending{list-style:none;padding:0;margin:0}.pending li{margin-bottom:8px}.operands{display:flex;flex-direction:column;gap:2px;margin:4px 0 0 12px}.operand.done{color:var(--ok)}.operand.current{font-weight:600}.operand.todo{color:var(--muted)}table.env{border-collapse:collapse;font-family:var(--mono);font-size:13px}table.env th{text-align:left;padding:2px 10px 2px 0;font-weight:600;vertical-align:top}table.env td{padding:2px 10px 2px 0;vertical-align:top}table.env td.ty{color:var(--muted)}tr.shadowed,.shadowed{opacity:.5;text-decoration:line-through}.env-book{font-family:var(--mono);font-size:13px}.frame{border:1px solid var(--line);border-radius:8px;padding:4px 10px 8px;margin-bottom:8px}.frame h3{margin-top:6px}.stack{font-family:var(--mono);font-size:13px;padding-left:20px}.stack li.top{font-weight:700}.calltree{overflow:auto;max-height:420px;border:1px solid var(--line);border-radius:8px}.ct-edge{stroke:var(--line);stroke-width:1.5}.ct-node rect{fill:var(--panel);stroke:var(--line)}.ct-node text{font-family:var(--mono);font-size:11.5px;fill:var(--ink)}.ct-node .ct-res{fill:var(--ok);font-size:10.5px}.ct-node.done rect{fill:var(--done);stroke:var(--done-line)}.ct-node.active rect{fill:var(--current);stroke:var(--accent);stroke-width:2}.ct-node.exn rect{stroke:var(--err)}.ct-node.tail rect{stroke-dasharray:4 3}.ct-node[role=button]{cursor:pointer}.heap{display:flex;flex-wrap:wrap;gap:10px}.heapbox{border:2px solid var(--item-line);border-radius:8px;padding:6px 10px;background:var(--item);min-width:120px}.heapbox.hl{border-color:var(--accent)}.heaphead{font-size:12px;margin-bottom:4px}.heaphead .names{margin-left:6px;color:var(--muted)}.heaphead .names.alias{color:var(--accent);font-weight:600}.cells{display:flex;gap:0}.cell{border:1px solid var(--line);min-width:34px;text-align:center;background:var(--panel)}.cellv{padding:2px 4px;font-family:var(--mono)}.celli{font-size:10px;color:var(--muted);border-top:1px solid var(--line)}.v-heapref{font-family:var(--mono);font-size:12px;padding:0 6px;min-height:20px}.v-num{color:var(--num)}.v-str{color:var(--str)}.v-kw{color:var(--kw)}.v-cname{color:var(--cons);font-weight:600}.v-poly,.v-more{color:var(--muted)}.v-closure{font-family:var(--mono)}.v-funbtn{font-family:var(--mono);font-size:12px;padding:0 6px;min-height:20px}.v-picture{max-height:60px;vertical-align:middle;border:1px solid var(--line);background:#fff}.rewrite-text{white-space:pre-wrap;background:var(--bg);border-radius:8px;padding:10px;line-height:1.7}.rw-value,.rw-subst{background:var(--done);border-radius:4px;padding:0 3px}.rw-subst{outline:1px dashed var(--done-line)}.rw-focus{text-decoration-color:var(--accent);text-decoration-thickness:2px}.timeline .row{display:flex;gap:8px;align-items:center;margin-bottom:6px}.events{list-style:none;padding:0;margin:0;font-family:var(--mono);font-size:12.5px}.events li button{border:0;background:transparent;width:100%;text-align:left;min-height:22px;padding:1px 4px;justify-content:flex-start}.events li.here button{background:var(--current)}.evi{color:var(--muted);min-width:4ch;display:inline-block}.evk{font-weight:600;min-width:7ch;display:inline-block}.ev-raise .evk,.ev-unwind .evk{color:var(--err)}.ev-write .evk{color:var(--accent)}.evv{color:var(--ok)}.evout{color:var(--muted);font-family:var(--mono)}.predict{border:1px solid var(--accent);border-radius:8px;padding:8px 10px;margin-bottom:10px;display:flex;flex-wrap:wrap;gap:6px;align-items:center}.predict label{display:flex;flex-direction:column;gap:4px;flex:1 1 100%}.predict input{font-family:var(--mono);padding:4px 8px;border:1px solid var(--line);border-radius:6px;background:var(--panel)}.feedback.ok{color:var(--ok)}.feedback.no{color:var(--err)}.console{padding:8px 14px;font-family:var(--mono);font-size:13px;white-space:pre-wrap}.console .line pre{margin:0;white-space:pre-wrap}.line-toplevel pre{color:var(--muted)}.line-error,.line-error .locbtn{color:var(--err)}.line-warning,.line-warning .locbtn{color:var(--warn)}.locbtn{border:0;background:transparent;font-family:var(--mono);text-align:left;white-space:pre-wrap;padding:0}.out-stderr{color:var(--err)}.inline-pic img,.stage img.picture{max-width:100%;border:1px solid var(--line);background:#fff}.inline-pic img{max-height:120px;display:block;margin:4px 0}.stage{padding:14px;overflow:auto;flex:1}.stage figure{margin:0 0 12px}.stage.empty{color:var(--muted)}.gui-island iframe{width:100%;border:1px solid var(--line);border-radius:8px;background:#fff;display:block}dialog.dialog{border:1px solid var(--line);border-radius:12px;padding:0;max-width:min(640px,94vw);width:100%;background:var(--panel);color:var(--ink);box-shadow:0 20px 50px #00000040}dialog.dialog.wide{max-width:min(980px,96vw)}dialog::backdrop{background:#0a0c1473}.dialog-head{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:1px solid var(--line)}.dialog-head h2{margin:0;font-size:17px}.dialog-head button{border:0;font-size:18px}.dialog-body{padding:12px 16px 18px;max-height:75vh;overflow:auto}.dialog-body section+section{margin-top:14px}.dialog-body h3{font-size:14px;margin:0 0 6px}.dialog fieldset{border:1px solid var(--line);border-radius:8px;margin:0 0 10px}.dialog fieldset label{display:block;padding:3px 0}.row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.row input{flex:1;min-width:200px;padding:4px 8px;border:1px solid var(--line);border-radius:6px;background:var(--bg)}.qr{width:160px;margin-top:8px;background:#fff;padding:4px;border-radius:6px}.chips{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:10px}.chips button.on{background:var(--ink);color:var(--panel)}.gallery{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}.gallery button{width:100%;height:100%;flex-direction:column;align-items:flex-start;text-align:left;padding:8px 10px;gap:2px}.gallery .topic{font-size:11px;color:var(--accent)}.gallery .blurb{font-size:12.5px;color:var(--muted)}.keys kbd{background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:0 5px}.boundary{padding:16px;color:var(--err)}.blk.bind-def{box-shadow:0 0 0 2px var(--cons)}.blk.bind-use{box-shadow:0 0 0 1.5px var(--cons);background:color-mix(in srgb,var(--cons) 14%,transparent)!important}.blk.breakpoint:after{content:"";position:absolute;top:-4px;right:-4px;width:9px;height:9px;border-radius:50%;background:var(--err)}.cm-bind-def,.cm-bind-use{background:color-mix(in srgb,var(--cons) 18%,transparent)}.cm-breakpoint{border-bottom:2px solid var(--err)}.keyrow{display:none}@media(max-width:860px),(pointer:coarse){.keyrow{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px;font-family:var(--sans)}.keyrow button{min-width:40px;min-height:40px;justify-content:center;font-family:var(--mono)}.inline-edit{display:inline-flex;flex-direction:column}}.kids{display:contents}.compare-cols{display:grid;grid-template-columns:1fr 1fr;gap:12px}.compare-col .calltree{max-height:300px}.compare-vals{font-size:12px;white-space:pre-wrap;color:var(--muted)}.checks ul{list-style:none;padding:0;margin:0}.check.held{color:var(--ok)}.check.failed{color:var(--err)}.counts th,.counts td{text-align:right;padding:2px 8px}.gui-step{margin:6px 0 14px}.right-view{display:flex;flex-direction:column;flex:1;min-height:0}.right-view[hidden]{display:none}.editor-pane.view-text{grid-template-columns:minmax(0,1fr)}
