@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/jetbrains-mono-latin-400-normal.14425ba9c6.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,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:400;font-display:swap;src:url(/assets/fonts/jetbrains-mono-latin-ext-400-normal.505dfba8ec.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:italic;font-weight:400;font-display:swap;src:url(/assets/fonts/jetbrains-mono-latin-400-italic.87ddac4a62.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,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:italic;font-weight:400;font-display:swap;src:url(/assets/fonts/jetbrains-mono-latin-ext-400-italic.a53b6b29b1.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/assets/fonts/jetbrains-mono-latin-600-normal.400c6bfda1.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,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:600;font-display:swap;src:url(/assets/fonts/jetbrains-mono-latin-ext-600-normal.90899aac1c.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/assets/fonts/jetbrains-mono-latin-700-normal.d0d4e81880.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,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:700;font-display:swap;src:url(/assets/fonts/jetbrains-mono-latin-ext-700-normal.45a606d88f.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}:root{--bg: #fafafa;--fg: #111111;--body: #111111;--muted: #6b6b6b;--faint: #a3a3a3;--line: #e2e2e2;--code-bg: #f2f2f2;--accent: #009e56;--mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--shiki-foreground: #2a2a2a;--shiki-token-keyword: #000000;--shiki-token-function: #111111;--shiki-token-constant: #5f5f5f;--shiki-token-string: #6b6b6b;--shiki-token-string-expression: #6b6b6b;--shiki-token-comment: #6e6e6e;--shiki-token-punctuation: #6b6b6b;--shiki-token-parameter: #2a2a2a;--shiki-token-link: #2a2a2a;color-scheme:light}:root[data-theme=dark]{--bg: #0b0b0b;--fg: #e8e8e8;--body: #b4b4b4;--muted: #8c8c8c;--faint: #555555;--line: #232323;--code-bg: #121212;--shiki-foreground: #c8c8c8;--shiki-token-keyword: #ffffff;--shiki-token-function: #e8e8e8;--shiki-token-constant: #9a9a9a;--shiki-token-string: #8f8f8f;--shiki-token-string-expression: #8f8f8f;--shiki-token-comment: #808080;--shiki-token-punctuation: #8c8c8c;--shiki-token-parameter: #c8c8c8;--shiki-token-link: #c8c8c8;color-scheme:dark}@media(prefers-color-scheme:dark){:root[data-theme=auto]{--bg: #0b0b0b;--fg: #e8e8e8;--body: #b4b4b4;--muted: #8c8c8c;--faint: #555555;--line: #232323;--code-bg: #121212;--shiki-foreground: #c8c8c8;--shiki-token-keyword: #ffffff;--shiki-token-function: #e8e8e8;--shiki-token-constant: #9a9a9a;--shiki-token-string: #8f8f8f;--shiki-token-string-expression: #8f8f8f;--shiki-token-comment: #808080;--shiki-token-punctuation: #8c8c8c;--shiki-token-parameter: #c8c8c8;--shiki-token-link: #c8c8c8;color-scheme:dark}}:root[data-accent=green]{--accent: #009e56}:root[data-accent=amber]{--accent: #b87e01}:root[data-accent=cyan]{--accent: #0b98a3}:root[data-accent=magenta]{--accent: #ec3bc7}:root[data-accent=red]{--accent: #f54c4d}:root[data-accent=flutter]{--accent: #2a88fd}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--fg);font:400 15px/1.65 var(--mono);font-variant-ligatures:none;-webkit-font-smoothing:antialiased}::selection{background:var(--accent);color:#000}a{color:inherit;text-decoration:none}a:focus-visible,button:focus-visible,.dither:focus-visible{outline:1px solid var(--accent);outline-offset:3px}button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}.dim{color:var(--muted)}.faint{color:var(--faint)}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.page{width:min(100% - 32px,720px);margin-inline:auto}.nav a,.bracket{color:var(--muted)}.nav a:hover,.bracket:hover,.nav a[aria-current=page]{color:var(--fg)}.nav a:before,.bracket:before{content:"[";color:var(--faint)}.nav a:after,.bracket:after{content:"]";color:var(--faint)}.cmd{color:var(--muted)}.cmd .ps{color:var(--accent)}a.cmd:hover{color:var(--fg)}.cursor{display:inline-block;width:.55em;height:.9em;margin-left:.1em;background:var(--accent);vertical-align:-.08em;animation:blink 1.1s steps(1) infinite}.cursor.typing{animation:none}@keyframes blink{50%{opacity:0}}.top{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:64px}.brand{font-weight:700}.brand .dim{font-weight:400}.nav{display:flex;gap:20px}.controls{display:flex;align-items:center;gap:16px}.picker{position:relative;display:flex;align-items:center}.dot{width:12px;height:12px;border-radius:50%;background:var(--c);display:block}.picker-toggle{display:grid;place-items:center;width:24px;height:24px;border-radius:50%}.picker-toggle .dot{--c: var(--accent);box-shadow:0 0 0 3px var(--bg),0 0 0 4px var(--line)}.swatches{position:absolute;right:28px;top:50%;display:flex;gap:2px;padding-left:8px;transform:translateY(-50%);pointer-events:none}.swatch{display:grid;place-items:center;width:22px;height:24px;opacity:0;transform:translate(calc(var(--i) * 6px + 12px));transition:opacity .16s ease,transform .22s cubic-bezier(.2,.8,.2,1);transition-delay:calc((5 - var(--i)) * 18ms)}.swatch[aria-checked=true] .dot{box-shadow:0 0 0 2px var(--bg),0 0 0 3px var(--fg)}.picker.open .swatches{pointer-events:auto;background:var(--bg)}.picker.open .swatch{opacity:1;transform:none;transition-delay:calc(var(--i) * 18ms)}.theme-toggle{display:grid;place-items:center;width:24px;height:24px;color:var(--muted)}.theme-toggle:hover{color:var(--fg)}.theme-toggle svg{display:none;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}:root[data-theme=auto] .theme-toggle .i-auto,:root[data-theme=light] .theme-toggle .i-light,:root[data-theme=dark] .theme-toggle .i-dark{display:block}.hero{padding-block:72px 56px}.hero .cmd{display:block;margin:0 0 12px}.hero h1{margin:0 0 24px;font-size:48px;line-height:1.1;font-weight:700;letter-spacing:-.02em}.js .hero .typed:not(.go){visibility:hidden}.hero .lines{margin:0;font-size:18px;line-height:1.6;color:var(--muted);max-width:60ch}.block{margin-bottom:56px}.blog .block{margin-bottom:40px}.sec{display:flex;align-items:center;gap:12px;margin:0 0 12px;font-size:15px;font-weight:700}.blog .sec{margin-bottom:8px}.sec .hash{color:var(--faint);font-weight:400}.sec:after{content:"";flex:1;border-top:1px dashed var(--line)}.rows{list-style:none;margin:0;padding:0}.row{position:relative;display:grid;grid-template-columns:11ch 1fr;gap:16px;padding:7px 0}.rows.short .row{grid-template-columns:6ch 1fr}.row:before{content:">";position:absolute;left:-2ch;top:7px;color:var(--accent);opacity:0}.row:hover:before,.row:focus-within:before{opacity:1}.row time{color:var(--muted);font-variant-numeric:tabular-nums}.row a.title:hover{text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:4px}.rows.projects .row{grid-template-columns:14ch 1fr 2ch}.rows.projects p{margin:0;color:var(--muted)}.rows.projects .ext{color:var(--faint)}.rows.projects .row:hover .ext{color:var(--accent)}.more{display:inline-block;margin-top:10px}.back{display:inline-block;margin:8px 0 56px}.head{padding-block:56px 32px}.blog .head{padding-bottom:40px}.head .cmd{display:block;margin:0 0 12px;overflow-wrap:anywhere}.page-title{margin:0;font-size:32px;line-height:1.25;font-weight:700;letter-spacing:-.01em}.meta{display:flex;flex-wrap:wrap;gap:4px 1ch;margin:16px 0 0;color:var(--muted);font-size:.875rem}.meta .tags{display:flex;gap:12px}.meta .tags span:before{content:"#";color:var(--faint)}.meta.line{display:block;margin-top:12px}.count{margin:8px 0 0;color:var(--muted)}.toc{margin-bottom:48px}.toc ol{list-style:none;margin:0;padding:0}.toc li{display:flex;padding:2px 0}.toc .branch{color:var(--faint);white-space:pre;flex:none}.toc a{color:var(--muted)}.toc a:hover{color:var(--fg);text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:4px}.prose{padding-bottom:32px;color:var(--body)}.prose>*{margin:0 0 20px}.prose a{border-bottom:1px solid var(--faint)}.prose a:hover{border-color:var(--accent)}a.ext:after{content:"\2197" / "";margin-left:.2em;font-size:.85em;color:var(--faint)}a.ext:hover:after{color:var(--accent)}.prose strong{color:var(--fg)}.prose :is(h2,h3,h4){margin:48px 0 16px;font-size:17px;line-height:1.4;font-weight:700;color:var(--fg);scroll-margin-top:24px}.prose .minor{font-size:15px}.prose .hash{color:var(--faint);font-weight:400;margin-right:1ch}.prose :not(pre)>code{font-size:.875rem;font-weight:600}.prose ul{list-style:none;padding-left:2ch}.prose ul:not(.jobs)>li{position:relative;margin-bottom:8px}.prose ul:not(.jobs)>li:before{content:"-";position:absolute;left:-2ch;color:var(--faint)}.prose ol{padding-left:3ch}.prose ol>li::marker{color:var(--faint)}.prose blockquote{margin:28px 0;padding:12px 16px;border-left:2px solid var(--muted);background:var(--code-bg);color:var(--muted)}.prose blockquote p{margin:0}.prose sup{line-height:0}.prose img{max-width:100%;height:auto}.code{margin:28px 0;border:1px solid var(--line);background:var(--code-bg)}.code-bar{display:flex;justify-content:space-between;align-items:center;padding:4px 12px;border-bottom:1px solid var(--line);font-size:12px;color:var(--muted)}.copy{color:var(--muted)}.copy:before{content:"[";color:var(--faint)}.copy:after{content:"]";color:var(--faint)}.copy:hover{color:var(--fg)}.copy.done{color:var(--accent)}.code pre{margin:0;padding:14px 16px;overflow-x:auto;font-size:13px;line-height:1.6;tab-size:4;color:var(--shiki-foreground)}.code code{font-family:inherit}.t-keyword{color:var(--shiki-token-keyword);font-weight:700}.t-function{color:var(--shiki-token-function)}.t-constant{color:var(--shiki-token-constant)}.t-string,.t-string-expression{color:var(--shiki-token-string)}.t-comment{color:var(--shiki-token-comment);font-style:italic}.t-punctuation{color:var(--shiki-token-punctuation)}.t-parameter{color:var(--shiki-token-parameter)}.t-link{color:var(--shiki-token-link)}.t-inserted,.t-deleted{color:var(--shiki-foreground)}.dither{position:relative;width:fit-content;max-width:100%;margin:32px auto}.dither img{position:relative;z-index:1;display:block;max-width:100%;height:auto}.dither canvas{position:absolute;inset:0;width:100%;height:100%;image-rendering:pixelated}.js .dither{cursor:crosshair}.js .dither img{opacity:0;transition:opacity .18s ease}.js .dither.ready:is(:hover,:focus-visible,.on) img{opacity:1}.post-nav{display:grid;grid-template-columns:1fr 1fr;gap:24px;padding-block:24px;border-top:1px dashed var(--line)}.post-nav a{display:flex;flex-direction:column;gap:4px}.post-nav .next{text-align:right;grid-column:2}.post-nav .label{color:var(--muted);font-size:13px}.post-nav a:hover .t{text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:4px}.jobs{list-style:none;margin:0;padding:0!important}.job{display:grid;gap:2px;padding:10px 0}.job time{color:var(--faint);font-variant-numeric:tabular-nums}.job .where{color:var(--fg);font-weight:700}.job .role{color:var(--muted)}.job ul{margin:6px 0 0;font-size:.875rem;color:var(--muted)}.nf{padding-block:72px 80px}.digits{margin:0 0 48px;font:700 22px/1 var(--mono);color:var(--fg);white-space:pre;overflow:hidden}.digits .shade{color:var(--faint);font-weight:400}.digits .ghost{color:var(--accent)}.digits .noise{color:var(--muted);font-weight:400}.session p{margin:0 0 4px;min-height:1.65em;overflow-wrap:anywhere}.session .err{color:var(--muted)}.session .status{color:var(--faint)}.session .hit{padding-left:2ch}.session .hit time{color:var(--muted);margin-right:2ch}.session .hit a:hover{text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:4px}.session .links{display:flex;flex-wrap:wrap;gap:4px 32px;margin-top:16px}.session .cursor{width:.6em;height:1.1em;margin-left:.15em;vertical-align:-.2em}.js .reveal:not(.shown){display:none}footer{display:flex;justify-content:space-between;align-items:center;gap:12px 16px;flex-wrap:wrap;padding-block:20px 40px;border-top:1px solid var(--line);color:var(--muted);font-size:13px}footer nav{display:flex;gap:20px}.prefs{flex-basis:100%;display:flex;flex-wrap:wrap;gap:4px 20px;font-size:12px}.prefs .group{display:flex;gap:10px;white-space:nowrap}.prefs .label,.prefs button{color:var(--muted)}.prefs button:before{content:"[";color:var(--faint)}.prefs button:after{content:"]";color:var(--faint)}.prefs button:hover,.prefs button[aria-pressed=true]{color:var(--fg)}.prefs button[aria-pressed=true]:before,.prefs button[aria-pressed=true]:after{color:var(--accent)}@media(max-width:640px){.nav{gap:12px}.brand .dim{display:none}.hero{padding-block:48px 40px}.hero h1{font-size:34px}.hero .lines{font-size:15px}.head{padding-block:40px 32px}.page-title{font-size:26px}.row{grid-template-columns:1fr;gap:0}.rows.short .row{grid-template-columns:6ch 1fr;gap:16px}.row:before{display:none}.rows.projects .row{grid-template-columns:1fr auto}.rows.projects p{grid-column:1 / -1;grid-row:2}.code pre{font-size:12px;padding:12px}.post-nav{grid-template-columns:1fr}.post-nav .next{text-align:left;grid-column:1}.nf{padding-block:48px 56px}.digits{font-size:14px;margin-bottom:36px}}@media(prefers-reduced-motion:reduce){.cursor{animation:none}.swatch,.dither img{transition:none!important}}
