*,::after,::before{box-sizing:border-box}html{-webkit-tap-highlight-color:transparent;overflow-y:scroll;-webkit-text-size-adjust:100%;text-size-adjust:100%}a,button,body,h1,h2,h3,h4,h5,h6{color:var(--primary)}body{font-family:-apple-system,BlinkMacSystemFont,segoe ui,Roboto,Oxygen,Ubuntu,Cantarell,open sans,helvetica neue,sans-serif;font-size:18px;line-height:1.6;word-break:break-word;background:var(--theme)}article,aside,figcaption,figure,header,hgroup,main,nav,section,table{display:block}h1,h2,h3,h4,h5,h6{line-height:1.2}h1,h2,h3,h4,h5,h6,p{margin-top:0;margin-bottom:0}ul{padding:0}a{text-decoration:none}body,figure,ul{margin:0}table{width:100%;border-collapse:collapse;border-spacing:0;overflow-x:auto;word-break:keep-all}button,input,textarea{padding:0;font:inherit;background:0 0;border:0}input,textarea{outline:0}button,input[type=button],input[type=submit]{cursor:pointer}input:-webkit-autofill,textarea:-webkit-autofill{box-shadow:0 0 0 50px var(--theme)inset}img{display:block;max-width:100%}:root{--main-width:780px;--main-padding:1.4em;--main-padding-bottom:3rem;--caption-padding:calc(.25 * var(--main-padding));--header-top-gap:2rem;--header-bottom-gap:2rem;--header-menu-side-gap:.5rem;--header-menu-top-gap:1rem;--h1-margin-top:2rem;--h1-margin-bottom:1.5rem;--h2-margin-top:2rem;--h2-margin-bottom:1.5rem;--hx-margin-top:1.5rem;--hx-margin-bottom:1rem;--p-margin-top:1rem;--p-margin-bottom:1rem;--code-margin-top:2rem;--code-margin-bottom:2rem;--h1-font-size:2em;--h2-font-size:1.8em;--hx-font-size:1.3em;--p-font-size:1em;--p-line-height:1.5em;--caption-font-size:.8em;--li-indent:1.5rem;--ul-margin-top:1rem;--ul-margin-bottom:1rem;--toc-margin-top:2rem;--toc-margin-bottom:3rem;--code-padding:1.5rem;--code-border-radius:10px;--social-icons-bottom-margin:3rem;--footer-height:3rem;--content-height:calc(100vh - var(--footer-height));--table-cell-padding:.5rem;--table-margin-top:1.5rem;--table-margin-bottom:1.5rem}@media screen and (max-width:1024px){:root{--main-width:750px;--header-top-gap:1rem;--caption-padding:calc(.25 * var(--main-padding))}}@media screen and (max-width:640px){:root{--header-top-gap:1rem;--social-icons-bottom-margin:0rem;--caption-padding:calc(2 * var(--main-padding))}}.flex{display:flex}.bold{font-weight:700}.italic{font-style:italic}.small{font-size:medium}.monospace{font-family:monaspace}@font-face{font-family:literata;src:url(/fonts/Literata/Literata-Light.woff2)format('woff2');font-weight:light;font-style:normal}@font-face{font-family:literata;src:url(/fonts/Literata/Literata-LightItalic.woff2)format('woff2');font-weight:light;font-style:italic}@font-face{font-family:literata;src:url(/fonts/Literata/Literata-SemiBold.woff2)format('woff2');font-weight:700;font-style:normal}@font-face{font-family:literata;src:url(/fonts/Literata/Literata-SemiBoldItalic.woff2)format('woff2');font-weight:700;font-style:italic}@font-face{font-family:monaspace;src:url(/fonts/Monaspace/MonaspaceArgon-Regular.woff)format('woff');font-weight:400;font-style:normal}@font-face{font-family:monaspace;src:url(/fonts/Monaspace/MonaspaceArgon-SemiBold.woff)format('woff');font-weight:700;font-style:normal}html{scroll-behavior:smooth}body{font-family:literata;margin:auto;max-width:var(--main-width);padding-left:var(--main-padding);padding-right:var(--main-padding);color:var(--content-primary);background:var(--background)}.content{min-height:var(--content-height)!important}h1{margin-top:var(--h1-margin-top);margin-bottom:var(--h1-margin-bottom);font-size:var(--h1-font-size)}h2{margin-top:var(--h2-margin-top);margin-bottom:var(--h2-margin-bottom);font-size:var(--h2-font-size)}h3,h4,h5,h6{font-size:var(--hx-font-size);margin-top:var(--hx-margin-top);margin-bottom:var(--hx-margin-bottom)}p{margin-top:var(--p-margin-top);margin-bottom:var(--p-margin-bottom);font-size:var(--p-font-size);line-height:var(--p-line-height)}ul{margin-top:var(--ul-margin-top);margin-bottom:var(--ul-margin-bottom)}li{margin-left:var(--li-indent)}a{text-decoration:underline}pre{padding:var(--code-padding);border:1px solid var(--code-border);overflow:scroll;border-radius:var(--code-border-radius);margin-top:var(--code-margin-top);margin-bottom:var(--code-margin-bottom);background-color:var(--code-background)!important;overflow-x:auto;-ms-overflow-style:none;scrollbar-width:none;line-height:1.3em}pre::-webkit-scrollbar{display:none}code span{display:inline!important}code{-webkit-font-smoothing:antialiased;-moz-font-feature-settings:"liga=1, dlig=1";-ms-font-feature-settings:"liga","dlig";-webkit-font-feature-settings:"liga","dlig";-o-font-feature-settings:"liga","dlig";font-feature-settings:"liga","dlig";font-variant-ligatures:contextual;font-family:monaspace;font-size:.9em;line-height:0}.katex-display{overflow-x:auto;overflow-y:hidden;-ms-overflow-style:none;scrollbar-width:none}.katex-display::-webkit-scrollbar{display:none}.footnotes{margin-top:3rem;border-style:none}hr{border:none;height:1px;background:var(--content-secondary);margin-top:2rem;margin-bottom:2rem}.header{padding-top:var(--header-top-gap);margin-bottom:var(--header-bottom-gap)}.header p{font-family:monospace;margin-top:var(--header-menu-top-gap);margin-right:var(--header-menu-side-gap)}.header-title{font-size:2.6em;font-weight:700;margin-bottom:0;margin-top:0}footer{font-size:small;display:flex;justify-content:center;align-items:center;max-height:var(--footer-height)}footer a{font-family:monaspace;margin-left:.2rem;margin-right:.2rem}.post-line{margin-bottom:.5rem;display:flex;align-items:baseline}.tag-line{margin-bottom:.5rem;display:flex;align-items:baseline}.post-line p{margin-top:0;margin-bottom:0}.line-date{font-size:small;font-family:monaspace;min-width:120px;max-width:120px;text-align:right;padding-right:1rem;margin-top:0;margin-bottom:0}.line-title{margin:0}.tag-title{margin:0}.line-summary{font-size:small;margin-top:.2rem!important;color:var(--content-secondary)}.list-container{padding-bottom:3rem}.pagination{display:flex;align-items:center;margin-top:1rem;margin-bottom:0;justify-content:center}.pagination-control{min-width:3rem;margin-left:.5rem;margin-right:.5rem;text-align:center;align-items:center}.page-number{min-width:3rem;margin-left:.5rem;margin-right:.5rem;display:flex;align-items:center;justify-content:center;align-items:center;font-weight:700}.social-icons{padding:12px 0;margin-bottom:var(--social-icons-bottom-margin)}.social-icons a{text-decoration:none}.social-icons a:not(:last-of-type){margin-inline-end:12px}.social-icons a svg{height:20px;width:20px}.single-intro-container{margin-top:1rem;margin-bottom:2rem}.single-title{margin-bottom:.5rem}.single-readtime{margin-top:.5rem;color:var(--content-secondary)}.single-summary{margin-bottom:0;color:var(--content-secondary)}.single-content{margin-bottom:5rem}.single-tags{margin-top:-1rem}.single-tags span{margin-right:.3rem}.single-pagination{margin-top:3rem;margin-bottom:3rem}.single-pagination a{margin-left:.4rem;margin-right:.4rem}.single-pagination hr{margin:0}.single-pagination-text{display:flex;justify-content:center;align-items:center;min-height:100%}.single-pagination-prev{min-width:50%;margin-top:1rem;margin-bottom:1rem;text-align:right}.single-pagination-next{min-width:50%;margin-top:1rem;margin-bottom:1rem;text-align:left}.single-pagination-container-next{display:flex;min-height:100%;padding:.5rem}.single-pagination-container-prev{display:flex;min-height:100%;padding:.5rem;float:right}.toc{font-size:var(--p-font-size);line-height:calc(.9 * var(--p-line-height));margin-top:var(--toc-margin-top);margin-bottom:var(--toc-margin-bottom)}.toc ul{margin-top:.1rem;margin-bottom:.1rem}.toc li{margin-top:.1rem;margin-bottom:.1rem}.autonumber{counter-reset:h2-counter 0}.autonumber h2{counter-increment:h2-counter 1;counter-reset:h3-counter 0}.autonumber h3{counter-increment:h3-counter 1;counter-reset:h4-counter 0}.autonumber h4{counter-increment:h4-counter 1}.autonumber h2:before{content:counter(h2-counter)"\00a0\00a0"}.autonumber h3:before{content:counter(h2-counter)"." counter(h3-counter)"\00a0\00a0"}.autonumber h4:before{content:counter(h2-counter)"." counter(h3-counter)"." counter(h4-counter)"\00a0\00a0"}.dark .img-light{display:none!important}.light .img-dark{display:none!important}.img-small div{display:flex;align-items:center;justify-content:center}.img-small img{scale:80%}.img-full div{display:flex;align-items:center;justify-content:center}.img-full img{width:100vw!important;max-width:100vw!important}.caption-container{display:flex;justify-content:center}figcaption{color:var(--content-secondary);padding-left:var(--caption-padding);padding-right:var(--caption-padding);font-size:var(--caption-font-size);margin-top:1rem;margin-bottom:1rem}.not-found{display:flex;align-items:center;justify-content:center}.not-found div{text-align:center}.not-found div h1{font-size:6rem;margin-bottom:3rem}.breadcrumbs{font-size:.8em;margin-bottom:calc(-.5 * var(--h1-margin-top))}.giscus{margin-top:3rem}.back-to-top{text-align:center;font-family:monaspace;font-size:small;margin-bottom:2rem}p code{background-color:var(--code-background);border-radius:3px;padding:2px}table{border-collapse:collapse;margin-top:var(--table-margin-top);margin-bottom:var(--table-margin-bottom);font-size:var(--p-font-size);line-height:var(--p-line-height);color:var(--content-primary)}th,td{padding:var(--table-cell-padding);border:1px solid var(--code-border);text-align:left}th{background-color:var(--code-background);font-weight:700}table code{background-color:var(--code-background);border-radius:3px;padding:2px}blockquote{margin:1.5rem;margin-left:0;margin-right:0;border-left:solid 2px;color:var(--content-secondary)}blockquote p{margin-left:1rem;margin-right:1rem}@font-face{font-family:literata;src:url(/fonts/Literata/Literata-Regular.woff2)format("woff2");font-display:swap;font-style:normal;font-weight:400}@font-face{font-family:literata;src:url(/fonts/Literata/Literata-Italic.woff2)format("woff2");font-display:swap;font-style:italic;font-weight:400}@font-face{font-family:literata;src:url(/fonts/Literata/Literata-SemiBold.woff2)format("woff2");font-display:swap;font-style:normal;font-weight:600}@font-face{font-family:literata;src:url(/fonts/Literata/Literata-SemiBoldItalic.woff2)format("woff2");font-display:swap;font-style:italic;font-weight:600}@font-face{font-family:monaspace;src:url(/fonts/Monaspace/MonaspaceArgon-Regular.woff)format("woff");font-display:swap;font-style:normal;font-weight:400}@font-face{font-family:monaspace;src:url(/fonts/Monaspace/MonaspaceArgon-SemiBold.woff)format("woff");font-display:swap;font-style:normal;font-weight:600}:root{color-scheme:light;--main-width:920px;--article-width:740px;--main-padding:24px;--background:#fbfaf7;--content-primary:#211e1b;--content-secondary:#67625b;--content-tertiary:#948d83;--surface:#f4f1eb;--surface-strong:#ece6dc;--code-background:#f7f4ee;--code-border:#ded5c8;--border-soft:#e7dfd4;--accent:#176b5f;--accent-soft:rgba(23, 107, 95, 0.12);--accent-ink:#0f4f46;--shadow-color:rgba(43, 35, 24, 0.08);--serif:"Literata", ui-serif, Georgia, Cambria, "Times New Roman", serif;--mono:"Monaspace", "SF Mono", "Fira Code", "Cascadia Code", monospace}*{box-sizing:border-box}html{scroll-behavior:smooth;text-rendering:optimizeLegibility}body{width:100%;max-width:none;min-height:100vh;margin:0;padding:0;background:radial-gradient(circle at 8% 0%,rgba(23,107,95,7%),transparent 28rem),linear-gradient(180deg,#fffefa 0%,var(--background) 42rem);color:var(--content-primary);font-family:var(--serif);font-size:18px;line-height:1.72;font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dark{--background:#11100f;--content-primary:#f1ede6;--content-secondary:#b6aca0;--content-tertiary:#8c8277;--surface:#1c1a18;--surface-strong:#26221e;--code-background:#171513;--code-border:#3d372f;--border-soft:#342f29;--accent:#76c9b5;--accent-soft:rgba(118, 201, 181, 0.12);--accent-ink:#b6eadc;--shadow-color:rgba(0, 0, 0, 0.24);background:radial-gradient(circle at 8% 0%,rgba(118,201,181,8%),transparent 28rem),linear-gradient(180deg,#171513 0%,var(--background) 42rem)}.site-shell{width:min(var(--main-width),calc(100vw - (2 * var(--main-padding))));min-height:calc(100vh - 104px);margin:0 auto}.main{position:relative}a{color:var(--content-primary);text-decoration-color:rgba(23,107,95,.34);text-decoration-thickness:.08em;text-underline-offset:.18em;transition:color 140ms ease,text-decoration-color 140ms ease,background-color 140ms ease}a:hover{color:var(--accent-ink);text-decoration-color:initial}p,ul,ol{margin-top:0;margin-bottom:1.1rem}li{margin-left:1.35rem;padding-left:.2rem}li+li{margin-top:.25rem}h1,h2,h3,h4,h5,h6{color:var(--content-primary);font-family:var(--serif);font-weight:600;letter-spacing:0;line-height:1.15}h1{margin:0 0 1.2rem;font-size:clamp(2.35rem,7vw,5.2rem)}h2{margin-top:3.2rem;margin-bottom:1rem;font-size:clamp(1.45rem,3vw,2.15rem)}h3,h4,h5,h6{margin-top:2.1rem;margin-bottom:.8rem;font-size:1.12rem}strong{font-weight:600}hr{height:1px;margin:2.4rem 0;border:0;background:var(--border-soft)}::selection{background:var(--accent-soft)}.site-header{display:flex;align-items:center;justify-content:space-between;width:min(var(--article-width),100%);margin-right:auto;margin-left:auto;gap:1rem;padding:28px 0 44px;font-family:var(--mono);font-size:.78rem;line-height:1}.site-wordmark{display:inline-flex;align-items:center;gap:.55rem;color:var(--content-primary);text-decoration:none}.wordmark-dot{width:.58rem;height:.58rem;border:1px solid var(--accent);border-radius:999px;background:var(--accent-soft);box-shadow:0 0 0 5px rgba(23,107,95,5%)}.site-nav{display:flex;align-items:center;gap:.32rem}.site-nav a{padding:.45rem .62rem;border-radius:999px;color:var(--content-secondary);text-decoration:none}.site-nav a:hover,.site-nav a.is-active{background:var(--surface);color:var(--content-primary)}.home-visual{position:relative;max-width:var(--article-width);margin-right:auto;margin-left:auto;min-height:180px;padding:0 0 1.35rem;border-bottom:1px solid var(--border-soft);display:flex;align-items:flex-end}.home-bio{position:relative;z-index:2;max-width:var(--article-width);margin:0;color:var(--content-secondary);font-size:1.05rem;line-height:1.65}.plotter{pointer-events:none;color:var(--accent)}.plotter-svg{display:block;width:100%;height:auto;overflow:visible}.plotter-hero{position:absolute;inset:0 -36px auto auto;z-index:1;width:min(72vw,700px);opacity:.34}.plotter-subtle,.plotter-article{position:absolute;top:0;right:0;z-index:-1;width:min(46vw,420px);opacity:.16;transform:translateY(-24px)}.plotter-article{top:18px;opacity:.14}.plotter-grid,.plotter-line{fill:none;vector-effect:non-scaling-stroke}.plotter-grid{stroke:currentColor;stroke-width:1;stroke-dasharray:2 10;opacity:.26}.plotter-line{stroke:currentColor;stroke-width:1.45;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:880;stroke-dashoffset:880;animation:plotter-draw 9s cubic-bezier(.66,0,.2,1)infinite}.plotter-line-b{animation-delay:1.2s;opacity:.74}.plotter-line-c{animation-delay:2.2s;opacity:.58}@keyframes plotter-draw{0%{stroke-dashoffset:880;opacity:0}14%{opacity:.74}54%,78%{stroke-dashoffset:0}100%{stroke-dashoffset:-880;opacity:0}}.list-container{position:relative;padding:4.2rem 0 3rem}.home-posts{max-width:var(--article-width);margin-right:auto;margin-left:auto;padding-top:3.2rem}.archive-page{max-width:var(--article-width);margin-right:auto;margin-left:auto}.section-heading,.archive-header{display:grid;grid-template-columns:minmax(0,1fr)auto;align-items:baseline;gap:1rem;margin-bottom:1.4rem}.section-heading h2,.archive-header h1{margin:0;font-size:clamp(1.3rem,3vw,2rem)}.section-heading span,.single-readtime,.breadcrumbs,.line-date{color:var(--content-tertiary);font-family:var(--mono);font-size:.74rem;line-height:1.4}.post-list{border-top:1px solid var(--border-soft)}.post-line{display:grid;grid-template-columns:minmax(0,1fr)auto;gap:1.4rem;align-items:baseline;margin:0;padding:1.1rem 0;border-bottom:1px solid var(--border-soft)}.post-link{display:grid;gap:.28rem;text-decoration:none}.line-title{color:var(--content-primary);font-size:1.05rem;line-height:1.35}.line-date{justify-self:end;min-width:0;max-width:none;padding-right:0;text-align:right;white-space:nowrap}.line-summary{color:var(--content-secondary);font-size:.9rem;line-height:1.55}.post-line:hover .line-title{color:var(--accent-ink)}.archive-copy{grid-column:1/-1;max-width:44rem;color:var(--content-secondary)}.breadcrumbs{margin-bottom:1.7rem}.page-single .breadcrumbs{max-width:var(--article-width);margin-right:auto;margin-left:auto}.breadcrumbs a{color:var(--content-tertiary);text-decoration:none}.breadcrumbs-current{color:var(--content-secondary)}.article{position:relative;max-width:var(--article-width);margin:0 auto}.article-header{padding:30px 0}.single-title{margin-bottom:1rem;font-size:clamp(2rem,5.2vw,3.6rem);line-height:1.06}.single-summary{max-width:39rem;color:var(--content-secondary);font-size:1.15rem}.single-readtime{display:flex;gap:.55rem;align-items:center;margin-top:1.1rem}.single-content{font-size:1rem}.single-content h2{margin-top:3rem;margin-bottom:.8rem}.single-content a{color:var(--accent-ink)}.single-content>p:first-child:has(a){margin-top:-.25rem;margin-bottom:1.45rem;color:var(--content-tertiary);font-family:var(--mono);font-size:.78rem;line-height:1.6}.single-content img{display:block;max-width:100%;height:auto;margin:0 auto;border-radius:8px;box-shadow:0 14px 36px var(--shadow-color)}figure{margin:2.5rem 0}figcaption{max-width:38rem;margin:.75rem auto 0;color:var(--content-secondary);font-family:var(--mono);font-size:.72rem;line-height:1.5;text-align:center}blockquote{margin:2rem 0;padding:.2rem 0 .2rem 1.2rem;border-left:2px solid var(--accent);color:var(--content-secondary)}blockquote p:last-child{margin-bottom:0}code{font-family:var(--mono);font-size:.88em}p code,li code,td code{padding:.1rem .32rem;border:1px solid var(--code-border);border-radius:5px;background:var(--code-background);color:var(--content-primary)}pre{position:relative;margin:2rem 0;padding:1.4rem;border:1px solid var(--code-border);border-radius:8px;background:var(--code-background)!important;box-shadow:inset 0 1px rgba(255,255,255,.55);line-height:1.55;overflow-x:auto}pre code{font-size:.82rem;line-height:1.55}table{display:block;width:100%;margin:2rem 0;border-collapse:collapse;overflow-x:auto;font-size:.92rem}th,td{padding:.72rem .78rem;border:1px solid var(--border-soft);vertical-align:top}th{background:var(--surface);font-family:var(--mono);font-size:.72rem;font-weight:600;text-transform:uppercase}.toc{margin:0 0 2rem;padding:1rem 1.1rem;border:1px solid var(--border-soft);border-radius:8px;background:rgba(255,255,255,.34);font-size:.9rem}.single-tags,.pagination,.single-pagination,.back-to-top{font-family:var(--mono);font-size:.78rem}.single-tags{max-width:var(--article-width);margin:-1.6rem auto 2.4rem}.single-tags span{margin-right:.55rem}.single-tags a,.pagination a,.single-pagination a,.back-to-top a{color:var(--content-secondary);text-decoration:none}.pagination{display:flex;justify-content:center;gap:.8rem;margin-top:2rem}.single-pagination{max-width:var(--article-width);margin:4rem auto 2.5rem}.single-pagination hr{background:var(--border-soft)}.back-to-top{margin:0 auto 4rem;text-align:center}.site-footer{width:min(var(--article-width),calc(100vw - (2 * var(--main-padding))));margin:0 auto;padding:2rem 0 2.4rem;border-top:1px solid var(--border-soft);color:var(--content-tertiary);font-family:var(--mono);font-size:.72rem}.site-footer p{margin:0}.site-footer a{color:var(--content-secondary);text-decoration:none}.not-found{position:relative;min-height:52vh;padding:4rem 0}.not-found h1{margin-bottom:1rem}.not-found p{color:var(--content-secondary)}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.plotter-line{stroke-dashoffset:0}}@media screen and (max-width:760px){:root{--main-padding:18px}body{font-size:17px}.site-header{padding:20px 0 28px}.home-visual{min-height:138px;padding-bottom:1.2rem}.single-title{max-width:12ch}.plotter-hero{inset:0 -90px auto auto;width:112vw;opacity:.16}.plotter-subtle,.plotter-article{width:84vw;opacity:.1}.section-heading,.archive-header{display:block}.section-heading span{display:block;margin-top:.3rem}.post-line{grid-template-columns:1fr;gap:.35rem;padding:1rem 0}.line-date{order:-1;justify-self:start;text-align:left}.article{max-width:none}.article-header{padding-top:18px}.single-content{font-size:1rem}}:root{--content-primary:rgb(36, 36, 36);--content-secondary:rgb(117, 117, 117);--background:rgb(255, 255, 255);--code-background:rgb(249, 249, 249);--code-border:rgb(229, 229, 229)}.dark{--content-primary:rgb(218, 218, 218);--content-secondary:rgb(140, 140, 140);--background:rgb(20, 20, 20);--code-background:rgb(30, 30, 30);--code-border:rgb(50, 50, 50)}:root{--content-primary:rgb(0, 0, 0);--content-secondary:rgb(0, 0, 0);--background:rgb(255, 255, 255);--code-background:rgb(255, 255, 255);--code-border:rgb(0, 0, 0)}.dark{--content-primary:rgb(255, 255, 255);--content-secondary:rgb(255, 255, 255);--background:rgb(0, 0, 0);--code-background:rgb(0, 0, 0);--code-border:rgb(255, 255, 255)}