@font-face{font-family:"IBM VGA";src:url("/assets/ibm-vga-8x16.woff") format("woff");font-weight:400;font-style:normal;font-display:swap}.crt-filter{position:absolute;width:0;height:0;pointer-events:none}.crt-pointer{display:none;position:absolute;top:0;left:0;width:24px;height:32px;z-index:9999;pointer-events:none;color:#e6edf3}.crt-pointer[data-link=true]{color:#69d9ff}@media screen{:root[data-crt=on][data-crt-curved=ready][data-crt-pointer=visible]:not([data-application=doom]) .crt-viewport,:root[data-crt=on][data-crt-curved=ready][data-crt-pointer=visible]:not([data-application=doom]) .crt-viewport *{cursor:none !important}:root[data-crt=on][data-crt-curved=ready][data-crt-pointer=visible]:not([data-application=doom]) .crt-pointer{display:block}}.crt-screen,.crt-refresh-overlay{display:none;position:fixed;inset:0;z-index:10000;overflow:hidden;pointer-events:none;contain:strict}:root[data-crt=on]{font-family:"IBM VGA","Ubuntu Mono",monospace;font-size:clamp(24px,2.2vw,28px);font-synthesis:none}:root[data-crt=on] body,:root[data-crt=on] #command,:root[data-crt=on] #input-highlight{font-size:inherit}:root[data-crt=on] footer{font-size:20px}:root[data-crt=on] #vim-editor .cm-scroller,:root[data-crt=on] #vim-editor .cm-vim-panel{font-family:"IBM VGA","Ubuntu Mono",monospace;font-size:1rem}:root[data-crt=on] .markdown h1{font-size:1.4em}:root[data-crt=on] .markdown h2{font-size:1.15em}:root[data-crt=on] .crt-screen{display:block;background:radial-gradient(ellipse at center, transparent 48%, rgba(0, 0, 0, 0.34) 100%);box-shadow:inset 0 0 38px rgba(0,0,0,.24)}:root[data-crt=on] .crt-screen::before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(to bottom, transparent 0 2px, rgba(0, 0, 0, 0.28) 3px, transparent 4px),repeating-linear-gradient(to right, rgba(101, 186, 255, 0.008) 0 1px, rgba(112, 219, 172, 0.008) 1px 2px, transparent 2px 3px)}:root[data-crt=on] .crt-screen::after{content:"";position:absolute;top:0;left:0;width:100%;height:var(--crt-refresh-height, 14%);background:linear-gradient(to bottom, transparent, rgba(210, 235, 255, 0.008) 45%, rgba(210, 235, 255, 0.025) 85%, transparent);mask-image:repeating-linear-gradient(to bottom, #000 0 2px, rgba(0, 0, 0, 0.4) 2px 4px);animation:crt-refresh 8s steps(var(--crt-refresh-steps, 240)) infinite}@keyframes crt-refresh{from{transform:translateY(-100%)}to{transform:translateY(var(--crt-refresh-end, 100vh))}}@media screen{:root[data-crt=on][data-bloom=off] :is(#transcript,#input-highlight,#command-form>label,footer,#vim-editor){text-shadow:0 0 5px rgba(230,237,243,.35)}:root[data-crt=on][data-bloom=off] .crt-image-bloom[data-ready=true]{display:block;opacity:.6;transform:scale(1.08);filter:blur(5px);mask-image:linear-gradient(to right, transparent, #000 8%, #000 92%, transparent),linear-gradient(to bottom, transparent, #000 8%, #000 92%, transparent);mask-composite:intersect}}@supports(-moz-appearance: none){:root[data-crt=on] .crt-screen::after{display:none;animation:none}@media screen and (prefers-reduced-motion: no-preference){:root[data-crt=on]:not([data-application=doom]) .crt-refresh-overlay{display:block}:root[data-crt=on]:not([data-application=doom]) .crt-refresh-overlay::after{content:"";position:absolute;top:0;left:0;width:100%;height:var(--crt-refresh-height, 14%);background:linear-gradient(to bottom, transparent, rgba(210, 235, 255, 0.008) 45%, rgba(210, 235, 255, 0.025) 85%, transparent);mask-image:repeating-linear-gradient(to bottom, #000 0 2px, rgba(0, 0, 0, 0.4) 2px 4px);animation:crt-refresh 8s steps(var(--crt-refresh-steps, 240)) infinite;will-change:transform}}}.crt-image{position:relative;isolation:isolate}.crt-image>img{position:relative;z-index:1}.crt-image-bloom{display:none;position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}@media(prefers-reduced-motion: reduce){:root[data-crt=on] .crt-screen::after{display:none;animation:none}}@media print{:root[data-crt=on]{text-shadow:none}:root[data-crt=on] .crt-screen{display:none}}.crt-viewport{display:contents}:root[data-crt=on][data-crt-curved=ready] body{overflow:hidden;padding:0}:root[data-crt=on][data-crt-curved=ready] .crt-viewport{display:block;position:fixed;inset:0;overflow:hidden;background:var(--bg);filter:url("#crt-curve")}:root[data-crt=on][data-crt-curved=ready] main{height:100svh;min-height:0;overflow:auto;padding:var(--crt-inset, 28px);scrollbar-width:thin;scrollbar-color:var(--border) rgba(0,0,0,0)}:root[data-crt=on][data-crt-curved=ready] .terminal{flex-shrink:0}:root[data-crt=on][data-crt-curved=ready] #vim-editor{padding:var(--crt-inset, 28px)}:root[data-crt=on][data-crt-curved=ready] .crt-screen{position:absolute}@media print{:root[data-crt=on][data-crt-curved=ready] body{overflow:visible}:root[data-crt=on][data-crt-curved=ready] .crt-viewport{display:contents;filter:none}:root[data-crt=on][data-crt-curved=ready] main{height:auto;overflow:visible;padding:8px}}:root[data-application=doom][data-crt] body{overflow:hidden;padding:0}:root[data-application=doom][data-crt] main{display:none}:root[data-application=doom][data-crt] .crt-viewport{display:block;position:fixed;inset:0;overflow:hidden;background:var(--bg);filter:none}:root[data-application=doom][data-crt] .crt-screen{inset:auto;left:var(--doom-left);top:var(--doom-top);width:var(--doom-width);height:var(--doom-height);--crt-refresh-height: var(--doom-refresh-height);--crt-refresh-end: var(--doom-refresh-end);--crt-refresh-steps: var(--doom-refresh-steps);background:none;box-shadow:none}:root[data-application=doom][data-crt] .crt-screen::before,:root[data-application=doom][data-crt] .crt-screen::after{display:none}@font-face{font-family:Ubuntu Mono;src:url("/assets/ubuntu-mono-latin-ext-400-normal.woff2") format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+0100-02FF,U+1E00-1EFF}@font-face{font-family:Ubuntu Mono;src:url("/assets/ubuntu-mono-latin-400-normal.woff2") format("woff2");font-style:normal;font-weight:400;font-display:swap}@font-face{font-family:Ubuntu Mono;src:url("/assets/ubuntu-mono-latin-ext-700-normal.woff2") format("woff2");font-style:normal;font-weight:700;font-display:swap;unicode-range:U+0100-02FF,U+1E00-1EFF}@font-face{font-family:Ubuntu Mono;src:url("/assets/ubuntu-mono-latin-700-normal.woff2") format("woff2");font-style:normal;font-weight:700;font-display:swap}:root{color-scheme:dark;font-family:"Ubuntu Mono",monospace;font-size:16px;background:var(--bg);color:var(--text);--bg: #0b0d10;--surface: #14171d;--text: #c4c9d2;--bright: #edf0f5;--green: #70dbac;--cyan: #4dd9d0;--blue: #65baff;--muted: #8893a5;--warning: #efb85f;--border: #292f39;--selection: #354453}*{box-sizing:border-box}body{margin:0;padding:8px;line-height:1}main{overflow-anchor:none;min-height:calc(100svh - 16px);display:flex;flex-direction:column}.terminal{width:100%;min-width:0;flex:1}.entry{margin:0 0 .9em}.prompt-line{white-space:pre-wrap;overflow-wrap:anywhere}.cwd{color:var(--green)}.command-name{color:var(--cyan)}.argument{color:var(--text)}.markdown{display:flow-root;margin:.4em 0 0;max-width:min(100%,80ch);overflow-wrap:anywhere}.markdown h1,.markdown h2,.markdown h3{font-size:1em;line-height:inherit;font-weight:700;color:var(--bright);margin:.9em 0 .4em}.markdown h1:first-child{margin-top:0}.markdown h1::before{content:"# ";color:var(--muted)}.markdown h2::before{content:"## ";color:var(--muted)}.markdown h3::before{content:"### ";color:var(--muted)}.markdown p{margin:.4em 0}.markdown ul,.markdown ol{padding-left:2ch;margin:.4em 0}.markdown li{margin:.08em 0}.markdown li::marker{color:var(--muted)}a{color:var(--cyan);text-underline-offset:3px;text-decoration-thickness:1px;text-decoration-color:#386f73}a:hover{color:var(--bright);text-decoration-color:var(--cyan)}a:focus-visible,button:focus-visible{outline:1px solid var(--cyan);outline-offset:3px}.markdown pre,.output{font:inherit;white-space:pre-wrap;overflow-wrap:anywhere;margin:.4em 0}.markdown code{font:inherit;color:var(--text)}.markdown blockquote{margin:.4em 0;border-left:2px solid var(--border);padding-left:2ch}.markdown table{border-collapse:collapse;display:block;overflow:auto}.markdown td,.markdown th{padding:.25em 1ch;border:1px solid var(--border)}.error,#exit-status{color:var(--warning)}#command-form{display:flex;flex-wrap:wrap;align-items:baseline;gap:0;min-height:1.5em;margin:0 0 1.5em;white-space:pre}#command-form[hidden],[hidden]{display:none !important}.input-wrap{position:relative;flex:1 1 12ch;min-width:0;max-width:100%}#command,#input-highlight{font:inherit;line-height:inherit;letter-spacing:inherit;margin:0;padding:0;border:0;white-space:pre;width:100%;background:rgba(0,0,0,0)}#command{position:relative;z-index:1;outline:none;color:rgba(0,0,0,0);caret-color:rgba(0,0,0,0);border-radius:0}#command:disabled{opacity:.5}#input-highlight{position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;height:1.4em}#command::selection{background:var(--selection);color:var(--bright)}footer{font-size:14px;color:var(--muted);display:flex;gap:1ch;align-items:baseline;flex-wrap:wrap;border-top:1px solid var(--border);padding:.75em 0 .3em;margin-top:2em}.footer-controls{margin-left:auto;display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:baseline;gap:.5em 1ch}.footer-controls>*{white-space:nowrap}.footer-controls>:not([hidden])~:not([hidden])::before{content:"|"/"";margin-right:1ch;color:var(--muted)}footer a,footer button{color:var(--muted);text-decoration:none}button{font:inherit;background:none;border:0;padding:0;color:var(--cyan);cursor:pointer;text-decoration:underline;text-underline-offset:3px}.shell-status{min-height:1em}#status{margin-right:auto}.warning{color:var(--warning)}::selection{background:var(--selection);color:var(--bright)}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}@media(max-width: 600px){body{padding:8px;font-size:16px}.markdown{max-width:100%}footer{line-height:1.6}#command{font-size:16px}#input-highlight{font-size:16px}}.entry{content-visibility:auto;contain-intrinsic-size:auto 200px}textarea#command{display:block;resize:none;min-height:1em;max-height:240px;overflow:auto;white-space:pre}#input-highlight{height:100%;white-space:pre;overflow:hidden}.scrollback-note{color:var(--muted)}.markdown h1{font-size:1.6em;color:var(--bright);line-height:1.2;margin:.8em 0 .35em}.markdown h2{font-size:1.2em;color:var(--text);line-height:1.25;margin:1em 0 .4em}.markdown h3{font-size:1.08em;color:var(--bright);line-height:1.3}.markdown h4,.markdown h5,.markdown h6{font-size:1em;color:var(--text);margin:1em 0 .5em}.markdown h1::before,.markdown h2::before,.markdown h3::before{font-size:.65em;color:#707d90;font-weight:400}.markdown strong{color:var(--bright)}.markdown em{color:var(--text)}.markdown del{color:var(--muted)}.markdown code{background:var(--surface);border-radius:3px;padding:.08em .25em}.markdown pre{background:var(--surface);border:1px solid var(--border);border-radius:4px;padding:.75em 1em}.markdown pre code{background:none;padding:0;color:var(--text)}.markdown blockquote{border-left:2px solid var(--border);color:var(--muted);padding:.2em 1em}.markdown hr{border:0;border-top:1px solid var(--border);margin:1.2em 0}.markdown.error{border-left:2px solid var(--warning);padding-left:1ch}.user{color:var(--cyan);font-weight:700}.host{color:var(--blue);font-weight:700}.block-caret{display:inline-block;position:relative;width:0;height:1em;vertical-align:bottom}.block-caret::after{content:"";position:absolute;left:0;top:0;width:1ch;height:1em;background:var(--bright);mix-blend-mode:difference;pointer-events:none;animation:cursor-blink 1s steps(1, end) infinite}@keyframes cursor-blink{0%,100%{opacity:1}50%{opacity:0}}@media(prefers-reduced-motion: reduce){.block-caret::after{animation:none}}.input-wrap:has(textarea:disabled) .block-caret{opacity:.3}#command-form>label{max-width:100%;min-width:0;white-space:pre-wrap;overflow-wrap:anywhere}#vim-editor{position:fixed;inset:0;z-index:10;background:var(--bg);display:flex;flex-direction:column;min-width:0;padding:2px}.vim-title,.vim-status{padding:4px;color:var(--cyan);background:var(--surface);overflow-wrap:anywhere;flex-shrink:0}.vim-status{color:var(--muted)}.vim-document{flex:1;min-height:0;min-width:0}#vim-editor .cm-editor{outline:none}#vim-editor .cm-cursorLayer{animation:none !important}#vim-editor .cm-vim-panel{font-family:"Ubuntu Mono",monospace;font-size:16px;line-height:1}#vim-editor .cm-vim-panel,#vim-editor .cm-vim-panel *{font-family:inherit !important;font-size:inherit;line-height:inherit}#vim-editor .cm-vim-panel input{appearance:none;min-width:0;margin:0;padding:0;border:0;outline:0;color:inherit;background:rgba(0,0,0,0);caret-color:var(--bright)}.prompt-line,#command-form>label{color:var(--muted)}footer{column-gap:1.5ch;row-gap:.5em}footer a:hover,footer button:hover{color:var(--cyan)}#vim-editor .cm-fat-cursor{background:var(--cyan);color:var(--bg)}#vim-editor .cm-editor:not(.cm-focused) .cm-fat-cursor{background:rgba(0,0,0,0);outline:1px solid var(--cyan)}.markdown a{color:#aab9c5;text-decoration-color:#56626e}.markdown a:hover{color:var(--bright);text-decoration-color:var(--bright)}.markdown .blog-breadcrumb{margin:-0.35em 0 .75em;font-size:.9em;color:var(--muted)}.markdown .blog-breadcrumb a{color:var(--muted);text-decoration-color:rgba(0,0,0,0)}.markdown .blog-breadcrumb a:hover,.markdown .blog-breadcrumb a:focus-visible{color:var(--bright);text-decoration-color:currentColor}.markdown h1{color:#d5dae1}.markdown h3,.markdown strong{color:#d0d6de}.markdown img,.markdown .crt-image{display:block;width:100%;max-width:100%;height:auto;margin:.75em 0;border-radius:3px}.markdown .crt-image>img{margin:0}.downloads{display:flex;flex-wrap:wrap;gap:.5em 2ch;margin:.4em 0}.downloads a{color:var(--text)}#doom-game{position:absolute;left:var(--doom-left);top:var(--doom-top);width:var(--doom-width);height:var(--doom-height);z-index:1;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#000;outline:none}#doom-game canvas{display:block;flex:none;outline:none}#doom-game [hidden]{display:none}#doom-game p{max-width:90%;text-align:center;overflow-wrap:anywhere}.doom-actions{display:flex;gap:1em}.doom-actions button{padding:.5em;font:inherit;color:var(--cyan);background:var(--surface);border:1px solid var(--border);cursor:pointer}.youtube-video{display:block;width:100%;aspect-ratio:16/9;min-height:200px;margin:.75em 0}.youtube-video iframe{display:block;width:100%;height:100%;border:0;border-radius:3px}.markdown .image-right{float:right;margin:0 0 1em 2ch}.markdown .image-left{float:left;margin:0 2ch 1em 0}.markdown .image-center{margin-inline:auto}@media(max-width: 520px){.markdown .image-right,.markdown .image-left{float:none;margin:.75em 0}}:root[data-shell-boot=pending] #transcript{display:none}.entry:last-child{content-visibility:visible;contain-intrinsic-size:none}:root[data-animations=off] *,:root[data-animations=off] *::before,:root[data-animations=off] *::after{animation:none !important;transition:none !important}:root[data-animations=off] .crt-screen::after,:root[data-animations=off] .crt-refresh-overlay{display:none}#app{display:contents}