@font-face{font-family:JetBrains Mono;src:url(/assets/JetBrainsMono-Regular-C8L8B0wz.woff2)format("woff2");font-weight:400;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/assets/JetBrainsMono-SemiBold-sXPXaUtJ.woff2)format("woff2");font-weight:600 700;font-display:swap}:root{--fs:13px;--lh:18px;--t-display:var(--fs);--t-display-lh:var(--lh);--t-title:var(--fs);--t-title-lh:var(--lh);--t-lede:var(--fs);--t-lede-lh:var(--lh);--t-heading:var(--fs);--t-meta:var(--fs);--font:"JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace}:root[data-theme=light]{--bg:#fafafa;--panel:#fafafa;--ink:#171717;--muted:#666;--faint:#666;--line:#a3a3a3;--decor:#c7c7c7;--sel-bg:#171717;--sel-ink:#fafafa;--ok:#1a7f37;--warn:#9a6700;--bad:#cf222e;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--bg:#0a0a0a;--panel:#0a0a0a;--ink:#ededed;--muted:#a1a1a1;--faint:#a1a1a1;--line:#5c5c5c;--decor:#333;--sel-bg:#ededed;--sel-ink:#0a0a0a;--ok:#3fb950;--warn:#d29922;--bad:#f85149;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{background:var(--bg);color:var(--ink);font-family:var(--font);font-size:var(--fs);line-height:var(--lh);font-variant-ligatures:none;-webkit-font-smoothing:antialiased;text-align:justify;font-variant-numeric:tabular-nums}pre,.mono{font-family:var(--font);font-variant-ligatures:none;letter-spacing:0;white-space:pre;margin:0}button,input,textarea,select{font:inherit;color:inherit;line-height:var(--lh)}a{color:inherit}::selection{background:var(--sel-bg);color:var(--sel-ink)}.muted{color:var(--muted)}.faint{color:var(--faint)}.ok{color:var(--ok)}.warn{color:var(--warn)}.bad{color:var(--bad)}.sel{background:var(--sel-bg);color:var(--sel-ink)}.art{line-height:1.2;font-family:var(--font);letter-spacing:0;white-space:pre;font-variant-ligatures:none;color:var(--ink);margin:0}.desk{place-items:center;min-height:100vh;padding:32px 16px;display:grid}.window{background:var(--bg);flex-direction:column;width:100%;max-width:780px;height:min(640px,100vh - 64px);display:flex;position:relative;overflow:hidden}.titlebar,.statusbar{min-height:calc(var(--t-title-lh) + 12px);white-space:nowrap;flex:none;align-items:center;gap:2ch;padding:0 2ch;display:flex;overflow:hidden}.statusbar{color:var(--muted);font-size:var(--t-meta);min-height:calc(var(--lh) + 12px)}.titlebar .grow,.statusbar .grow{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.viewport{min-height:0;padding:var(--lh) 2ch;flex:1;position:relative;overflow:auto}.viewport,.scroll{scrollbar-width:none}.viewport::-webkit-scrollbar{display:none}.scroll::-webkit-scrollbar{display:none}.viewport.flush{padding:0;overflow:hidden}@media (width<=640px){.desk{padding:0;display:block}.window{max-width:none;height:100dvh}.viewport,.titlebar,.statusbar{padding-left:1ch;padding-right:1ch}}.frame-wrap{width:100%}.frame{position:relative}.frame-border{pointer-events:none;color:var(--line);line-height:var(--lh);position:absolute;inset:0;overflow:hidden}.frame-border .t{color:var(--ink)}.frame-body{position:relative}.btn{cursor:pointer;white-space:pre;background:0 0;border:0;padding:0}.btn:focus-visible,.btn.active{background:var(--sel-bg);color:var(--sel-ink);outline:none}.btn:hover{text-decoration:underline}.field-input{caret-color:#0000;background:0 0;border:0;outline:none;width:100%;padding:0}.caret{background:var(--ink);width:1ch;animation:1s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}.row{align-items:baseline;gap:2ch;display:flex}.stack>*+*{margin-top:var(--lh)}.h{font-size:var(--t-heading);font-weight:600;line-height:var(--lh)}.display{font-size:var(--t-display);line-height:var(--t-display-lh);text-align:left;font-weight:600}.title{font-size:var(--t-title);line-height:var(--t-title-lh);font-weight:600}.lede{font-size:var(--t-lede);line-height:var(--t-lede-lh);color:var(--muted);max-width:64ch}.meta{font-size:var(--t-meta)}.prose{max-width:68ch}.decor{color:var(--decor)}.list-item{cursor:pointer;white-space:pre;gap:1ch;display:flex}.grid2{gap:var(--lh) 2ch;grid-template-columns:1fr 1fr;display:grid}@media (width<=640px){.grid2{grid-template-columns:1fr}}.scene-canvas canvas{display:block}.center{place-items:center;display:grid}.kbd{color:var(--ink)}h1,h2,h3,.display,.title,.h,.meta{text-align:left}@media (width<=640px){.footer-grid{grid-template-columns:1fr 1fr!important}.footer-grid>:first-child{grid-column:1/-1}}pre,.mono{text-align:left}@font-face{font-family:ascii\.rest mono;src:url(data:font/woff2;base64,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)format("woff2");unicode-range:U+B0,U+B7,U+2022,U+2500-259F,U+25CF;font-display:block}.mark{font-family:"ascii.rest mono", var(--font);letter-spacing:0;white-space:pre}.toaster{z-index:50;pointer-events:none;flex-direction:column;gap:8px;width:min(48ch,100vw - 32px);display:flex;position:fixed;bottom:16px;right:16px}.toast{pointer-events:auto;background:var(--bg);animation:.18s steps(3,end) toast-in}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}}@media (width<=640px){.toaster{width:auto;left:16px;right:16px}}.badge{color:var(--ink);margin-left:1ch;font-weight:600}.modal-backdrop{z-index:40;background:color-mix(in srgb, var(--bg) 80%, transparent);place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{background:var(--bg);max-height:calc(100vh - 32px);overflow:auto}.popover{z-index:45;background:var(--bg);position:fixed}@media (prefers-reduced-motion:reduce){.toast{animation:none}}.fullterm{z-index:60;background:var(--bg);flex-direction:column;padding:8px 16px 16px;display:flex;position:fixed;inset:0}.fullterm-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:2ch;padding-bottom:8px;display:flex}.fullterm-body{flex:1;min-height:0}.term-grid{gap:var(--lh) 2ch;grid-template-columns:repeat(auto-fit,minmax(min(100%,46ch),1fr));display:grid}.xterm .xterm-viewport{scrollbar-width:none}.xterm .xterm-viewport::-webkit-scrollbar{display:none}.wrap-btn,.wrap-btn .btn{white-space:normal;text-align:left}.wrap-btn{display:inline-flex}
