@layer reset{*,:before,:after{box-sizing:border-box}body,h1,h2,h3,h4,p,ul,ol,dl,dd,figure,pre,blockquote{margin:0}img,svg{max-width:100%;display:block}button{font:inherit;color:inherit}}@layer base{html{-webkit-text-size-adjust:100%}body{font-family:var(--font-sans);font-size:var(--text-base);background:var(--bg-primary);color:var(--text-primary);-webkit-font-smoothing:antialiased;line-height:1.6}h1,h2,h3{font-weight:700;line-height:1.2}a{color:var(--accent-primary);text-underline-offset:.2em;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}:focus-visible{outline:2px solid var(--accent-primary);outline-offset:3px}::selection{background:var(--accent-wash)}code,pre{font-family:var(--font-mono);font-variant-ligatures:none;font-size:.875em}[id]{scroll-margin-top:var(--space-4)}}@layer theme{:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--font-sans:"Archivo", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--stretch-display:112%;--bg-primary:#fbfbfa;--bg-secondary:#f0f0ed;--text-primary:#1a1a19;--text-secondary:#5c5c57;--border:#e0e0dc;--border-strong:#1a1a19;--accent-primary:#b8321a;--accent-wash:#f7e3dd;--danger:#b8321a;--code-fg:#1a1a19;--code-comment:#5c5c57;--code-punct:#5c5c57;--code-keyword:#b8321a;--code-type:#1a1a19;--code-annotation:#5c5c57;--code-string:#2f6b4f;--code-number:#2f6b4f;--code-fn:#1a1a19;--code-highlight:#e8e7e1;--code-add:#e2eee6;--code-remove:#f8e3de;--caution:#8a5a00;--text-base:1.0625rem;--text-small:.9375rem;--text-reading:1.125rem;--measure:66ch;--page-width:76rem;--col-head:12rem;--col-time:9.5rem;--gutter:1rem;--space-1:.25rem;--space-2:.5rem;--space-3:1rem;--space-4:1.5rem;--space-5:2.5rem;--space-6:4rem;--space-7:6rem}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-primary:#161616;--bg-secondary:#212120;--text-primary:#ececea;--text-secondary:#a3a39e;--border:#343432;--border-strong:#ececea;--accent-primary:#ff7a59;--accent-wash:#3a221b;--danger:#ff7a59;--code-fg:#ececea;--code-comment:#a3a39e;--code-punct:#a3a39e;--code-keyword:#ff7a59;--code-type:#ececea;--code-annotation:#a3a39e;--code-string:#9cc7a6;--code-number:#9cc7a6;--code-fn:#ececea;--code-highlight:#2b2b29;--code-add:#1d2c22;--code-remove:#3a221b;--caution:#e0b04f}@media (width>=40rem){:root{--gutter:2rem}}}@layer components{.page{flex-direction:column;min-height:100vh;display:flex}.page__main{flex:1}.wrap{width:100%;max-width:var(--page-width);padding-inline:var(--gutter);margin-inline:auto}.skip-link{left:var(--gutter);padding:var(--space-2) var(--space-3);background:var(--bg-primary);border:1px solid var(--border-strong);position:absolute;top:-3rem}.skip-link:focus{top:var(--space-2)}.site-nav{justify-content:space-between;align-items:center;gap:var(--space-2) var(--space-4);padding-block:var(--space-4);flex-wrap:wrap;display:flex}.site-nav__name{font-weight:700;font-stretch:var(--stretch-display);color:var(--text-primary);text-decoration:none}.site-nav__links{align-items:center;gap:var(--space-2) var(--space-4);font-size:var(--text-small);flex-wrap:wrap;padding:0;list-style:none;display:flex}.site-nav__links a{color:var(--text-primary);text-decoration:none}.site-nav__links a:hover,.site-nav__links a.active{text-decoration:underline;-webkit-text-decoration-color:var(--accent-primary);text-decoration-color:var(--accent-primary);text-decoration-thickness:2px}.site-footer{justify-content:space-between;gap:var(--space-2) var(--space-4);padding-block:var(--space-5);margin-top:var(--space-6);color:var(--text-secondary);font-size:var(--text-small);flex-wrap:wrap;display:flex}.button,.icon-button{align-items:center;gap:var(--space-2);border:1px solid var(--border-strong);color:var(--text-primary);cursor:pointer;background:0 0;border-radius:2px;font-weight:500;text-decoration:none;display:inline-flex}.button{padding:.625rem var(--space-3)}.icon-button{padding:var(--space-2);border-color:var(--border)}.button:hover,.icon-button:hover{background:var(--bg-secondary)}.button--primary{background:var(--text-primary);color:var(--bg-primary)}.button--primary:hover{background:var(--accent-primary);border-color:var(--accent-primary);color:var(--bg-primary)}.button__meta{opacity:.75;font-size:.875em;font-weight:400}.actions{gap:var(--space-2) var(--space-3);flex-wrap:wrap;align-items:center;display:flex}.link-row{gap:var(--space-2) var(--space-4);flex-wrap:wrap;padding:0;list-style:none;display:flex}.link-row a{align-items:center;gap:.375rem;display:inline-flex}.hero{gap:var(--space-5);padding-block:var(--space-5) var(--space-6);display:grid}@media (width>=64rem){.hero{column-gap:var(--space-6);padding-block:var(--space-6) var(--space-7);grid-template-columns:minmax(0,1fr) 21rem;align-items:end}}.hero__name{letter-spacing:-.035em;font-size:clamp(3.25rem,1rem + 9vw,7.5rem);font-weight:800;font-stretch:125%;line-height:.88}.hero__name span{display:block}.hero__focus{margin-top:var(--space-5);font-size:clamp(1.25rem,1rem + .8vw,1.5rem);font-weight:600;line-height:1.3}.hero__intro{max-width:56ch;margin-top:var(--space-3);color:var(--text-secondary)}.hero__actions{align-items:center;gap:var(--space-3) var(--space-5);margin-top:var(--space-5);flex-wrap:wrap;display:flex}.hero__facts{border-top:2px solid var(--border-strong);font-size:var(--text-small);display:grid}.hero__facts>div{gap:var(--space-3);border-bottom:1px solid var(--border);grid-template-columns:6.5rem minmax(0,1fr);padding-block:.75rem;display:grid}.hero__facts dt{color:var(--text-secondary)}.hero__facts dd{font-weight:500;line-height:1.45}.hero__aside{color:var(--text-secondary);font-weight:400}.section{gap:var(--space-4);padding-block:var(--space-5) var(--space-6);display:grid}.section,.site-footer{background:linear-gradient(var(--rule), var(--rule)) center top / calc(100% - 2 * var(--gutter)) var(--rule-weight,1px) no-repeat}.section{--rule:var(--border-strong);--rule-weight:2px}.site-footer{--rule:var(--border)}@media (width>=64rem){.section{grid-template-columns:var(--col-head) minmax(0, 1fr);column-gap:var(--space-5)}.section__head{top:var(--space-4);align-self:start;position:sticky}}.section__title{letter-spacing:-.01em;font-size:1.375rem;font-weight:800;font-stretch:125%}.section__note{max-width:30ch;margin-top:var(--space-2);color:var(--text-secondary);font-size:var(--text-small);line-height:1.5}.section__body{min-width:0}.section__more{margin-top:var(--space-4)}@media (width>=40rem){.section__more{padding-left:calc(var(--col-time) + var(--space-4))}}.entry,.posts__item,.skills__row{gap:var(--space-1) var(--space-4);display:grid}@media (width>=40rem){.entry,.posts__item,.skills__row{grid-template-columns:var(--col-time) minmax(0, 1fr)}.entry>*{max-width:var(--measure);grid-column:2}.entry>.entry__when{grid-area:1/1}.entry>.entry__facts{grid-area:2/1/span 4;align-self:start}.entry__facts span{display:block}}@media (width<=39.99rem){.entry__facts span+span:before{content:", "}}.entries{padding:0;list-style:none;display:grid}.entries>li+li{margin-top:var(--space-5);padding-top:var(--space-5);border-top:1px solid var(--border)}.entry__title{font-size:1.1875rem;font-weight:700}.entry__when{white-space:nowrap;color:var(--text-secondary);font-size:var(--text-small);padding-top:.2em}.entry__when.is-current{color:var(--accent-primary);font-weight:600}.entry__role{font-weight:500}.entry__facts,.entry__stack{color:var(--text-secondary);font-size:var(--text-small)}.entry__points{gap:var(--space-2);margin-block:var(--space-3);padding:0;list-style:none;display:grid}.entry__points li{padding-left:1.25rem;position:relative}.entry__points li:before{content:"–";color:var(--text-secondary);position:absolute;left:0}.entry__more{margin-top:var(--space-2);font-size:var(--text-small)}.entry__more summary{width:fit-content;color:var(--accent-primary);cursor:pointer}.entry__more .entry__points{margin-block:var(--space-2) 0}.entries--compact>li+li{margin-top:var(--space-4);padding-top:var(--space-4)}.entry .link-row{margin-top:var(--space-2)}.skills{display:grid}.skills__row{border-bottom:1px solid var(--border);padding-block:.75rem}.skills__row:first-child{padding-top:0}.skills__row dt{color:var(--text-secondary);font-size:var(--text-small);padding-top:.1em}.skills__row dd{font-weight:500}.posts{padding:0;list-style:none;display:grid}.posts__item{padding-block:var(--space-3);border-bottom:1px solid var(--border)}.posts__item:first-child{padding-top:0}.posts__date{color:var(--text-secondary);font-size:var(--text-small);padding-top:.2em}.posts__title{color:var(--text-primary);-webkit-text-decoration-color:var(--accent-primary);text-decoration-color:var(--accent-primary);font-size:1.1875rem;font-weight:600;line-height:1.35}.posts__meta{margin-top:var(--space-1);color:var(--text-secondary);font-size:var(--text-small)}.contact{gap:var(--space-4);justify-items:start;display:grid}.contact__email{letter-spacing:-.02em;overflow-wrap:anywhere;font-size:clamp(1.5rem,1rem + 2.4vw,2.5rem);font-weight:800;font-stretch:125%;line-height:1.1}.contact__email a{color:var(--text-primary);-webkit-text-decoration-color:var(--accent-primary);text-decoration-color:var(--accent-primary);text-decoration-thickness:3px}.contact__error{color:var(--danger)}.reading{max-width:calc(var(--measure) + 2 * var(--gutter));padding-block:var(--space-6)}.reading__head{margin-bottom:var(--space-5);padding-bottom:var(--space-4);border-bottom:1px solid var(--border-strong)}.reading__title{font-size:clamp(2rem,1.5rem + 2vw,2.5rem);font-stretch:var(--stretch-display);letter-spacing:-.015em}.reading__title--post{font-size:clamp(1.75rem,1.35rem + 1.6vw,2.25rem);line-height:1.15}.reading__lede,.reading__byline{margin-top:var(--space-3);color:var(--text-secondary)}.reading__back{margin-bottom:var(--space-5);font-size:var(--text-small)}.reading__back a,.reading__foot a{align-items:center;gap:var(--space-1);display:inline-flex}.reading__foot{gap:var(--space-3);margin-top:var(--space-6);padding-top:var(--space-4);border-top:1px solid var(--border-strong);display:grid}.reading .actions{margin-top:var(--space-4)}.articles{gap:var(--space-5);padding:0;list-style:none;display:grid}.articles__title{font-size:1.375rem;line-height:1.25}.articles__title a{color:var(--text-primary);-webkit-text-decoration-color:var(--accent-primary);text-decoration-color:var(--accent-primary)}.articles__meta{margin-top:var(--space-2);color:var(--text-secondary);font-size:var(--text-small)}.articles__summary{margin-top:var(--space-2)}.articles__tags{gap:var(--space-1) var(--space-3);margin-top:var(--space-2);font-size:var(--text-small);color:var(--text-secondary);flex-wrap:wrap;padding:0;list-style:none;display:flex}.prose{font-size:var(--text-reading);line-height:1.65}.prose>*+*{margin-top:1.1em}.prose h2{font-size:1.5rem;font-stretch:var(--stretch-display);margin-top:2.2em}.prose h3{margin-top:1.8em;font-size:1.25rem}.prose h2+*,.prose h3+*{margin-top:.6em}.prose ul,.prose ol{padding-left:1.5rem}.prose li+li{margin-top:.35em}.prose li::marker{color:var(--text-secondary)}.prose blockquote{padding-left:var(--space-3);border-left:2px solid var(--accent-primary);color:var(--text-secondary)}.prose hr{border:0;border-top:1px solid var(--border)}.prose :not(pre)>code{background:var(--bg-secondary);border-radius:2px;padding:.1em .3em}.prose img{height:auto}.table-scroll{overflow-x:auto}.table-scroll table{border-collapse:collapse;font-size:var(--text-small)}.table-scroll th,.table-scroll td{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border);text-align:left;vertical-align:top}.table-scroll th{border-bottom-color:var(--border-strong)}.post{padding-block:var(--space-6)}.post__head{max-width:var(--measure);margin-bottom:var(--space-5);padding-bottom:var(--space-4);border-bottom:1px solid var(--border-strong)}.post__title{font-size:clamp(1.875rem,1.35rem + 2vw,2.75rem);font-stretch:var(--stretch-display);letter-spacing:-.015em;line-height:1.1}.post__summary{margin-top:var(--space-3);color:var(--text-secondary);font-size:1.1875rem;line-height:1.5}.post__byline{gap:var(--space-1) var(--space-3);margin-top:var(--space-4);font-size:var(--text-small);color:var(--text-secondary);flex-wrap:wrap;display:flex}.post__byline>:first-child{color:var(--text-primary);font-weight:600}.post__byline>*+:before{content:"";width:3px;height:3px;margin-right:var(--space-3);vertical-align:middle;background:currentColor;border-radius:50%;display:inline-block}.post__layout{gap:var(--space-4);grid-template-columns:minmax(0,1fr);display:grid}.post__main{min-width:0;max-width:var(--measure)}.post__loading{min-height:60vh;color:var(--text-secondary)}.post__foot{gap:var(--space-4);margin-top:var(--space-6);display:grid}@media (width>=68rem){.post__layout{grid-template-columns:minmax(0, var(--measure)) minmax(12rem, 15rem);justify-content:space-between;column-gap:var(--space-6)}.post__aside{grid-area:1/2}.post__main{grid-area:1/1}}.post-actions{gap:var(--space-2);margin-top:var(--space-4);flex-wrap:wrap;display:flex}.post-actions__item{align-items:center;gap:var(--space-2);border:1px solid var(--border);color:var(--text-primary);font-size:var(--text-small);cursor:pointer;background:0 0;border-radius:2px;padding:.375rem .75rem;font-weight:500;text-decoration:none;display:inline-flex}.post-actions__item:hover{border-color:var(--border-strong);background:var(--bg-secondary)}.post-actions__item:disabled{color:var(--text-secondary);cursor:progress}.post-actions__next{border-color:var(--border-strong)}.toc__title{font-size:var(--text-small);font-weight:600}.toc__list{margin-top:var(--space-2);border-left:1px solid var(--border);font-size:var(--text-small);padding:0;line-height:1.4;list-style:none}.toc__link{padding:.3rem 0 .3rem var(--space-3);color:var(--text-secondary);border-left:2px solid #0000;margin-left:-1px;text-decoration:none;display:block}.toc__item--h3 .toc__link{padding-left:var(--space-5);font-size:.875rem}.toc__link:hover{color:var(--text-primary)}.toc__link[aria-current]{border-left-color:var(--accent-primary);color:var(--text-primary);font-weight:500}.toc--wide{display:none}.toc--narrow{margin-bottom:var(--space-5);padding:var(--space-2) var(--space-3);border:1px solid var(--border)}.toc--narrow summary{cursor:pointer}.toc--narrow .toc__list{margin-block:var(--space-2)}@media (width>=68rem){.toc--wide{top:var(--space-4);max-height:calc(100vh - 2 * var(--space-4));overscroll-behavior:contain;display:block;position:sticky;overflow-y:auto}.toc--narrow{display:none}}.prose :is(h2,h3,h4){scroll-margin-top:var(--space-4)}.heading-anchor{vertical-align:middle;color:var(--text-secondary);opacity:0;margin-left:.4em;display:inline-flex}.prose :is(h2,h3,h4):hover .heading-anchor,.heading-anchor:focus-visible{opacity:1}.heading-anchor:hover{color:var(--accent-primary)}.prose h4{margin-top:1.6em;font-size:1.0625rem}.code{border:1px solid var(--border);background:var(--bg-secondary);border-radius:2px;font-size:1rem}.code__bar{align-items:center;gap:var(--space-3);min-height:2.25rem;padding:var(--space-1) var(--space-2) var(--space-1) var(--space-3);border-bottom:1px solid var(--border);color:var(--text-secondary);font-size:.8125rem;display:flex}.code__title{font-family:var(--font-mono);color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.code__lang{font-family:var(--font-mono)}.code__lang--aside{margin-left:auto}.code__copy{align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);color:var(--text-secondary);cursor:pointer;background:0 0;border:0;margin-left:auto;display:inline-flex}.code__lang--aside+.code__copy{margin-left:0}.code__copy:hover{color:var(--text-primary)}.code__pre{padding-block:var(--space-3);line-height:1.6;overflow-x:auto}.code__pre>code{min-width:max-content;display:grid}.code__pre [data-line]{padding-inline:var(--space-3);border-left:2px solid #0000}.code__pre [data-highlighted-line],.code__pre .highlighted{border-left-color:var(--accent-primary);background:var(--code-highlight)}.code__pre [data-highlighted-chars]{background:var(--code-highlight);border-radius:2px;padding:.1em .2em}.code__pre.has-diff [data-line]:before{content:" ";width:2ch;color:var(--code-comment);display:inline-block}.code__pre .diff.add{border-left-color:var(--code-string);background:var(--code-add)}.code__pre .diff.add:before{content:"+";color:var(--code-string)}.code__pre .diff.remove{border-left-color:var(--code-keyword);background:var(--code-remove);opacity:.75}.code__pre .diff.remove:before{content:"-";color:var(--code-keyword)}.code__pre code[data-line-numbers]{counter-reset:line}.code__pre code[data-line-numbers]>[data-line]:before{counter-increment:line;content:counter(line);text-align:right;width:2ch;color:var(--code-comment);margin-right:2ch;display:inline-block}.code__pre code[data-line-numbers-max-digits="3"]>[data-line]:before{width:3ch}.prose>.figure,.prose>.code-figure+*,.prose>.figure+*{margin-top:1.6em}.figure__zoom,.figure__frame{border:1px solid var(--border);background:var(--bg-primary);width:100%;padding:0;display:block;position:relative}.figure__zoom{cursor:zoom-in}.figure__zoom img,.figure__frame img{width:100%;height:auto;display:block}.figure__zoom-hint{top:var(--space-2);right:var(--space-2);padding:var(--space-1);border:1px solid var(--border);background:var(--bg-primary);color:var(--text-secondary);opacity:0;display:inline-flex;position:absolute}.figure__zoom:hover .figure__zoom-hint,.figure__zoom:focus-visible .figure__zoom-hint{opacity:1}.figure__caption{margin-top:var(--space-2);font-size:var(--text-small);color:var(--text-secondary);line-height:1.5}.lightbox{max-width:min(96vw,110rem);max-height:96vh;padding:var(--space-5) var(--space-4) var(--space-4);border:1px solid var(--border);background:var(--bg-primary);color:var(--text-primary);margin:auto}.lightbox::backdrop{background:#000000b8}.lightbox__close{top:var(--space-2);right:var(--space-2);position:absolute}.lightbox__content{max-height:calc(96vh - 8rem);overflow:auto}.lightbox__image{object-fit:contain;max-width:100%;max-height:calc(96vh - 8rem);margin-inline:auto;display:block}.lightbox__caption{max-width:var(--measure);margin:var(--space-3) auto 0;font-size:var(--text-small);color:var(--text-secondary)}.diagram{padding:var(--space-4) var(--space-3);border:1px solid var(--border);overflow-x:auto}.diagram svg{margin-inline:auto;display:block}.figure__zoom .diagram{border:0}.diagram--full{border:0;min-width:min(90vw,72rem)}.diagram--full svg{width:100%;height:auto;max-width:none!important}.diagram .node.key :is(rect,polygon,circle,path){stroke:var(--accent-primary)!important;stroke-width:2px!important}.diagram--loading{background:var(--bg-secondary);min-height:12rem}.diagram--error{padding:var(--space-3)}.callout{--callout:var(--text-secondary);padding:var(--space-3) var(--space-4);border-left:3px solid var(--callout);background:color-mix(in srgb, var(--callout) 8%, var(--bg-primary))}.callout--tip{--callout:var(--code-string)}.callout--important{--callout:var(--accent-primary)}.callout--warning{--callout:var(--caution)}.callout__label{align-items:center;gap:var(--space-2);color:var(--callout);font-size:var(--text-small);font-weight:600;display:flex}.callout__body{margin-top:var(--space-2)}.callout__body>*+*{margin-top:.8em}.post-nav{gap:var(--space-3);padding-top:var(--space-4);border-top:1px solid var(--border-strong);display:grid}.post-nav__link{gap:var(--space-1);padding:var(--space-3);border:1px solid var(--border);color:var(--text-primary);text-decoration:none;display:grid}.post-nav__link:hover{border-color:var(--border-strong)}.post-nav__link:hover .post-nav__title{text-decoration:underline;-webkit-text-decoration-color:var(--accent-primary);text-decoration-color:var(--accent-primary)}.post-nav__dir{align-items:center;gap:var(--space-1);font-size:var(--text-small);color:var(--text-secondary);display:inline-flex}.post-nav__title{font-weight:600;line-height:1.3}.post-nav__link--next{text-align:right}.post-nav__link--next .post-nav__dir{justify-self:end}@media (width>=40rem){.post-nav{grid-template-columns:1fr 1fr}.post-nav__link--next{grid-column:2}}}@layer utilities{.num{font-variant-numeric:tabular-nums}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}}@font-face{font-family:Archivo;src:url(/fonts/archivo-latin-var.woff2)format("woff2");font-weight:100 900;font-stretch:62% 125%;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/fonts/jetbrains-mono-latin-var.woff2)format("woff2");font-weight:100 800;font-display:swap}
