@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-sans-400-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:IBM Plex Sans;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-sans-400-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-sans-500-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:IBM Plex Sans;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-sans-500-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/ibm-plex-sans-600-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:IBM Plex Sans;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/ibm-plex-sans-600-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-mono-400-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-mono-400-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-mono-500-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-mono-500-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/ibm-plex-mono-600-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/ibm-plex-mono-600-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,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:500;font-display:swap;src:url(/fonts/jetbrains-mono-500-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:500;font-display:swap;src:url(/fonts/jetbrains-mono-500-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,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(/fonts/jetbrains-mono-700-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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(/fonts/jetbrains-mono-700-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper:#f4f2ec;--paper-2:#faf8f3;--sunk:#eeece3;--ink:#14130c;--body:#423f36;--quiet:#6e6a5f;--rule:#14130c24;--rule-2:#14130c47;--moss:#5e7f33;--moss-deep:#48621f;--clay:#96552c;--clay-deep:#7a4320;--clay-tint:#f3e9de;--mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--sans:"IBM Plex Sans", ui-sans-serif, system-ui, -apple-system, sans-serif;--term:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace}*{box-sizing:border-box}body{background:var(--paper);color:var(--body);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.66}.wrap{max-width:780px;margin:0 auto;padding:0 24px}.col{max-width:66ch}h1,h2,h3,h4{font-family:var(--mono);color:var(--ink);letter-spacing:-.02em;text-wrap:balance;margin:0;font-weight:600}h1{font-size:30px;line-height:1.16}h2{margin:30px 0 12px;font-size:19px;line-height:1.3}h3{margin:24px 0 10px;font-size:16px;line-height:1.35}p{margin:0 0 15px}a{color:var(--moss);text-underline-offset:3px;text-decoration:underline}a:hover{color:var(--moss-deep)}ul,ol{margin:0 0 15px;padding-left:22px}li{margin:0 0 6px}hr{border:0;border-top:1px solid var(--rule);margin:30px 0}img{max-width:100%;height:auto}.label{font-family:var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--moss);margin:0 0 12px;font-size:10.5px;font-weight:500}.meta{font-family:var(--mono);color:var(--quiet);letter-spacing:.02em;margin:0;font-size:11.5px}.num{font-variant-numeric:tabular-nums}code{font-family:var(--term);color:var(--ink);background:var(--sunk);border:1px solid var(--rule);padding:1px 5px;font-size:.9em;font-weight:500}.mast{border-bottom:1px solid var(--rule);flex-wrap:wrap;align-items:baseline;gap:26px;margin:0 0 34px;padding:26px 0 18px;display:flex}.mast .wordmark{font-family:var(--mono);color:var(--ink);letter-spacing:-.03em;margin:0;font-size:17px;font-weight:600;text-decoration:none}.mast nav{flex-wrap:wrap;gap:18px;margin-left:auto;display:flex}.mast nav a{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--quiet);font-size:12px;text-decoration:none}.mast nav a:hover{color:var(--ink)}.mast nav a[aria-current]{color:var(--moss)}.index{margin:0;padding:0;list-style:none}.index li{border-top:1px solid var(--rule);align-items:baseline;gap:18px;padding:9px 0;display:flex}.index li:first-child{border-top:0}.index .d{font-family:var(--mono);color:var(--quiet);flex:none;font-size:11.5px}.index .t{color:var(--ink);font-size:15.5px;text-decoration:none}.index .t:hover{color:var(--moss-deep);text-underline-offset:3px;text-decoration:underline}pre{background:var(--sunk);border:1px solid var(--rule);border-left:2px solid var(--moss);font-family:var(--term);color:var(--ink);margin:0 0 15px;padding:15px 17px;font-size:13.5px;font-weight:500;line-height:1.6;overflow-x:auto}pre code{font-size:inherit;background:0 0;border:0;padding:0}.hljs-comment,.hljs-quote{color:var(--quiet);font-style:italic}.hljs-punctuation,.hljs-operator,.hljs-meta{color:var(--quiet)}.hljs-keyword,.hljs-selector-tag,.hljs-doctag,.hljs-section{color:var(--moss-deep)}.hljs-built_in,.hljs-type,.hljs-tag,.hljs-selector-class,.hljs-selector-id{color:var(--moss)}.hljs-string,.hljs-regexp,.hljs-char,.hljs-symbol{color:var(--clay-deep)}.hljs-number,.hljs-literal,.hljs-bullet{color:var(--clay)}.hljs-title,.hljs-title_,.hljs-name,.hljs-attr,.hljs-property,.hljs-variable,.hljs-params,.hljs-subst{color:var(--ink)}.hljs-title,.hljs-title_,.hljs-name{font-weight:700}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-addition{color:var(--moss-deep)}.hljs-deletion{color:var(--clay-deep)}blockquote{border-left:3px solid var(--moss);color:var(--ink);margin:22px 0;padding:2px 0 2px 20px;font-size:19px;line-height:1.5}blockquote.aside{border-left-color:var(--clay)}blockquote p{margin:0}blockquote cite{font-style:normal;font-family:var(--mono);color:var(--quiet);margin-top:8px;font-size:11.5px;display:block}.note{background:var(--clay-tint);border:1px solid #96552c47;margin:22px 0;padding:14px 17px;font-size:15px}.note>:last-child{margin-bottom:0}.note .note-l{font-family:var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--clay-deep);margin:0 0 5px;font-size:10.5px;font-weight:500}.roles{border-top:1px solid var(--rule);border-left:1px solid var(--rule);grid-template-columns:repeat(4,1fr);margin:0 0 30px;display:grid}@media (width<=700px){.roles{grid-template-columns:repeat(2,1fr)}}.role{border-right:1px solid var(--rule);border-bottom:1px solid var(--rule);padding:15px 17px 17px}.role .n{font-family:var(--mono);letter-spacing:.18em;color:var(--moss);margin:0 0 7px;font-size:10.5px}.role .t{font-family:var(--mono);color:var(--ink);letter-spacing:-.01em;margin:0;font-size:13.5px;font-weight:600}.work{margin:0 0 30px;padding:0;list-style:none}.work li{border-top:1px solid var(--rule);align-items:baseline;gap:18px;padding:10px 0;display:flex}.work .y{font-family:var(--mono);color:var(--quiet);flex:none;font-size:11.5px}.work .c{color:var(--ink);flex:none;font-weight:600}.hire{background:var(--clay-tint);border:1px solid #96552c47;flex-wrap:wrap;align-items:center;gap:20px;margin:34px 0 0;padding:22px 24px;display:flex}.hire h3{margin:0 0 4px;font-size:17px}.hire p{max-width:52ch;margin:0;font-size:15px}.hire .cta{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--paper-2);background:var(--clay);border:1px solid var(--clay-deep);flex:none;margin-left:auto;padding:11px 18px;font-size:12px;text-decoration:none}.hire .cta:hover{background:var(--clay-deep)}.post-head{margin:0 0 28px}.post-head h1{margin:0 0 8px}.post-nav{border-top:1px solid var(--rule);font-family:var(--mono);flex-wrap:wrap;gap:20px;margin:40px 0 0;padding:18px 0 0;font-size:12px;display:flex}footer.site{border-top:1px solid var(--rule);margin:60px 0 0;padding:22px 0 50px}footer.site p{font-family:var(--mono);color:var(--quiet);margin:0;font-size:11.5px}a:focus-visible,button:focus-visible{outline:2px solid var(--moss);outline-offset:2px}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
