:root{--color-paper: #f6f2e9;--color-paper-2: #eee9de;--color-ink: #2b2a25;--color-muted: #727067;--color-faint: #969287;--color-border: #dfd9cc;--color-accent: #74715e;--color-accent-2: #a59a78;--color-code: #24241f;--color-code-text: #efede4;--font-serif: "Newsreader", "Iowan Old Style", "Palatino Linotype", "Book Antiqua", Georgia, serif;--font-sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--content-width: 1160px;--reading-width: 720px;--measure-wide: 880px;--space-1: .3rem;--space-2: .55rem;--space-3: .8rem;--space-4: 1.1rem;--space-5: 1.5rem;--space-6: 2rem;--space-7: 3rem;--space-8: 4.5rem;--space-9: 6.5rem;--space-10: 9rem;color-scheme:light}html[data-theme=dark]{--color-paper: #1c1c19;--color-paper-2: #24241f;--color-ink: #ece9df;--color-muted: #aaa79c;--color-faint: #89877d;--color-border: #3d3c36;--color-accent: #aaa684;--color-accent-2: #bdb080;--color-code: #11120f;--color-code-text: #eeeae0;color-scheme:dark}*{box-sizing:border-box}html{background:var(--color-paper)}body{margin:0;min-width:320px;background:var(--color-paper);color:var(--color-ink);font-family:var(--font-sans);font-size:16px;line-height:1.6;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}::selection{background:var(--color-accent-2);color:var(--color-paper)}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:.15em}a:hover{color:var(--color-accent)}button,input,select{font:inherit}button{color:inherit}img{max-width:100%;height:auto}:focus-visible{outline:2px solid var(--color-accent);outline-offset:4px}.site-shell{width:min(calc(100% - 40px),var(--content-width));margin-inline:auto}.skip-link{position:fixed;top:12px;left:12px;z-index:100;padding:.45rem .7rem;background:var(--color-ink);color:var(--color-paper);transform:translateY(-180%)}.skip-link:focus{transform:translateY(0)}.serif{font-family:var(--font-serif)}.muted{color:var(--color-muted)}.faint{color:var(--color-faint)}.eyebrow{margin:0;color:var(--color-muted);font-size:.68rem;line-height:1.25;letter-spacing:.1em;text-transform:uppercase}.rule{border:0;border-top:1px solid var(--color-border);margin:0}.section-heading{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin-bottom:1.5rem}.section-heading h2{margin:0;font-family:var(--font-serif);font-size:clamp(1.55rem,2.1vw,2rem);font-weight:500;letter-spacing:-.02em}.section-heading .section-number{color:var(--color-faint);font-family:var(--font-sans);font-size:.68rem;text-decoration:none}.empty-state{margin:0;padding-block:1rem;color:var(--color-muted);font-family:var(--font-serif)}@media(max-width:720px){.site-shell{width:min(calc(100% - 28px),var(--content-width))}}body,button,input,select{font-variant-numeric:oldstyle-nums proportional-nums}h1,h2,h3,h4,p{text-wrap:pretty}.page-title{margin:0;max-width:980px;font-family:var(--font-serif);font-size:clamp(3rem,7vw,6rem);font-weight:500;line-height:.97;letter-spacing:-.045em}.editorial-lead{margin:0;max-width:24ch;font-family:var(--font-serif);font-size:clamp(2rem,4vw,3.35rem);font-weight:400;line-height:1.05;letter-spacing:-.025em}.article-body{width:min(100%,var(--reading-width));margin-inline:auto;font-family:var(--font-serif);font-size:clamp(1.08rem,1.6vw,1.23rem);line-height:1.82;text-wrap:pretty}.article-body>p{margin-block:1.55em}.article-body h2{margin-top:3.8em;margin-bottom:.75em;font-size:clamp(1.8rem,3vw,2.55rem);line-height:1.08;font-weight:500;letter-spacing:-.02em}.article-body h3{margin-top:2.8em;margin-bottom:.6em;font-size:clamp(1.3rem,2vw,1.7rem);line-height:1.2;font-weight:600}.article-body a{color:var(--color-accent)}.article-body strong{font-weight:650}.article-body em{font-style:italic}.article-body ul,.article-body ol{margin-block:1.3em;padding-inline-start:1.4em}.article-body li{margin-block:.5em;padding-inline-start:.15em}.article-body blockquote{margin:2.3rem 0;padding:.25rem 0 .25rem 1.3rem;border-left:1px solid var(--color-accent);color:var(--color-muted);font-size:1.07em}.article-body code{padding:.08rem .28rem;background:var(--color-paper-2);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.83em}.article-body pre{overflow-x:auto;margin-block:2rem;padding:1rem 1.1rem;border:1px solid var(--color-border);border-radius:2px;background:var(--color-code);color:var(--color-code-text);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.8rem;line-height:1.65;tab-size:2}.article-body pre code{padding:0;background:transparent;color:inherit}.article-body table{width:100%;margin-block:2rem;border-collapse:collapse;font-family:var(--font-sans);font-size:.88rem}.article-body th,.article-body td{padding:.65rem .75rem;border-bottom:1px solid var(--color-border);text-align:left;vertical-align:top}.article-body th{font-weight:650}.article-body figure{margin:2.8rem 0}.article-body figcaption{margin-top:.65rem;color:var(--color-muted);font-family:var(--font-sans);font-size:.74rem;line-height:1.45}.drop-cap:first-letter{float:left;margin:.07em .12em 0 0;font-family:var(--font-serif);font-size:4.4em;line-height:.78}@media(max-width:720px){.article-body{font-size:1.08rem;line-height:1.78}.page-title{font-size:clamp(2.7rem,14vw,4.2rem)}}.site-sidebar{position:fixed;inset:0 auto 0 0;width:220px;z-index:40;border-right:1px solid var(--color-border);background:var(--color-paper)}.sidebar-inner{min-height:100%;display:flex;flex-direction:column;padding:1.7rem 1.5rem 1.6rem}.brand{display:inline-flex;width:fit-content;font-family:var(--font-serif);font-size:1.45rem;text-decoration:none;letter-spacing:-.035em}.site-nav{margin-top:4.5rem}.nav-list{display:grid;gap:.85rem;margin:0;padding:0;list-style:none}.nav-list a{color:var(--color-muted);font-size:.76rem;text-decoration:none}.nav-list a:hover,.nav-list a[aria-current=page]{color:var(--color-ink)}.sidebar-footer{margin-top:auto;display:flex;align-items:center}.theme-button{border:0;padding:.3rem;background:transparent;color:var(--color-muted);cursor:pointer;font-size:.8rem;line-height:1}.theme-button:hover{color:var(--color-ink)}.mobile-header,.mobile-sidebar,.mobile-sidebar-backdrop{display:none}.home-page{padding-bottom:3rem}.home-intro{padding-block:clamp(7rem,16vw,13rem) clamp(7rem,13vw,11rem)}.home-intro-main{max-width:760px}.home-section+.home-section{margin-top:clamp(6rem,12vw,10rem)}.home-projects{padding-bottom:2rem}.archive-list{display:grid}.archive-row{display:grid;grid-template-columns:34px minmax(0,1fr);gap:1.4rem;align-items:start;padding-block:1.65rem;border-bottom:1px solid var(--color-border);text-decoration:none}.archive-row:first-child{border-top:1px solid var(--color-border)}.archive-number{color:var(--color-faint);font-size:.68rem;padding-top:.25rem}.archive-content{min-width:0}.archive-title{margin:0;font-family:var(--font-serif);font-size:clamp(1.3rem,2.1vw,1.85rem);line-height:1.12;font-weight:500}.archive-meta{display:flex;gap:.65rem;margin-top:.55rem;color:var(--color-muted);font-size:.68rem;white-space:nowrap}.archive-category:after{content:"·";margin-left:.65rem;color:var(--color-faint)}.project-list{display:grid}.project-row{display:grid;grid-template-columns:34px minmax(0,1fr);gap:1.4rem;padding-block:1.45rem;border-bottom:1px solid var(--color-border)}.project-row:first-child{border-top:1px solid var(--color-border)}.project-name{margin:0;font-family:var(--font-serif);font-size:1.45rem;font-weight:500}.project-description{margin:.35rem 0 0;color:var(--color-muted);max-width:62ch}.project-stack,.project-status{color:var(--color-muted);font-size:.72rem}.project-stack{margin:.65rem 0 0}.project-status{margin:.2rem 0 0}.page-intro{padding-block:clamp(5rem,10vw,8rem) 4.5rem}.compact-intro{padding-bottom:3.5rem}.archive-page{padding-bottom:5rem}.archive-year-section+.archive-year-section{margin-top:5.5rem}.year-heading{font-size:1.65rem;font-weight:500}.article-header{padding-block:clamp(5rem,10vw,8rem) 3.25rem}.article-header-content{width:min(100%,var(--measure-wide));margin-inline:auto;padding-inline:clamp(0rem,2vw,2rem)}.article-title{margin:0;max-width:1000px;font-family:var(--font-serif);font-size:clamp(3rem,7vw,6.2rem);line-height:.96;font-weight:500;letter-spacing:-.045em}.article-byline{margin-top:1.35rem;color:var(--color-muted);font-size:.74rem}.article-main{display:grid;grid-template-columns:minmax(150px,.55fr) minmax(0,var(--reading-width));gap:clamp(2rem,7vw,7rem);align-items:start;padding-bottom:5rem}.article-body-column{min-width:0}.article-toc{position:sticky;top:1.5rem;min-width:0}.toc-label{margin:0 0 .7rem;color:var(--color-faint);font-size:.66rem;letter-spacing:.09em;text-transform:uppercase}.toc-list{margin:0;padding:0;list-style:none;border-top:1px solid var(--color-border)}.toc-list li{border-bottom:1px solid var(--color-border)}.toc-list a{display:block;padding:.6rem 0;color:var(--color-muted);font-size:.73rem;line-height:1.4;text-decoration:none}.toc-list a[aria-current=true]{color:var(--color-ink);font-weight:600}.toc-list .toc-number{color:var(--color-faint);margin-right:.5rem}.references{width:min(100%,var(--reading-width));margin:4rem auto 0;padding-top:1.2rem;border-top:1px solid var(--color-border)}.references h2{margin:0 0 1rem;font-family:var(--font-serif);font-size:1.7rem;font-weight:500}.reference-list{margin:0;padding:0;list-style:none}.reference-list li{display:grid;grid-template-columns:34px 1fr;gap:.7rem;padding-block:.55rem;font-size:.8rem}.reference-number{color:var(--color-faint)}.article-nav{display:grid;grid-template-columns:1fr 1fr;gap:2rem;margin:4rem auto 0;width:min(100%,var(--measure-wide));padding-top:1.15rem;border-top:1px solid var(--color-border)}.article-nav-item{text-decoration:none}.article-nav-item:last-child{text-align:right}.article-nav-label{display:block;margin-bottom:.55rem;color:var(--color-faint);font-size:.66rem;letter-spacing:.09em;text-transform:uppercase}.article-nav-title{font-family:var(--font-serif);font-size:1.25rem;line-height:1.15}.footer{margin-top:4rem;padding-block:1.2rem 2.2rem;border-top:1px solid var(--color-border)}.footer-inner{display:grid;grid-template-columns:auto 1fr auto;gap:1.5rem;align-items:baseline}.footer-brand{font-family:var(--font-serif);font-size:1.1rem}.footer-links{display:flex;justify-content:center;flex-wrap:wrap;gap:1.1rem}.footer-links a{color:var(--color-muted);font-size:.7rem;text-decoration:none}.footer-links a:hover{color:var(--color-ink)}.footer-meta{color:var(--color-faint);font-size:.68rem}.notes-list{display:grid}.note-row{display:grid;grid-template-columns:34px minmax(0,1fr);gap:1.4rem;padding-block:1.45rem;border-bottom:1px solid var(--color-border)}.note-row:first-child{border-top:1px solid var(--color-border)}.note-index{color:var(--color-faint);font-size:.68rem;padding-top:.25rem}.note-content{min-width:0}.note-date{display:block;margin-bottom:.3rem;color:var(--color-faint);font-size:.68rem}.note-link{text-decoration:none}.note-title{margin:0;max-width:55ch;font-family:var(--font-serif);font-size:clamp(1.2rem,1.9vw,1.55rem);line-height:1.18;font-weight:500}.note-link:hover .note-title,.note-link:focus-visible .note-title{color:var(--color-accent)}.note-page{padding-block:clamp(5rem,10vw,8rem) 6rem}.note-page-header{width:min(100%,860px);margin-inline:auto}.note-back{display:inline-block;margin-bottom:2.5rem;color:var(--color-muted);font-size:.72rem;text-decoration:none}.note-page-meta{display:flex;flex-wrap:wrap;gap:.55rem;margin-bottom:.85rem;color:var(--color-faint);font-size:.68rem}.note-page-title{margin:0;max-width:850px;font-family:var(--font-serif);font-size:clamp(2.5rem,6vw,5rem);line-height:.98;font-weight:500;letter-spacing:-.04em}.note-page-body{width:min(100%,var(--reading-width));margin:clamp(3rem,7vw,5rem) auto 0}.about-page{display:grid;grid-template-columns:minmax(0,1fr) minmax(170px,260px);gap:clamp(3rem,9vw,9rem);padding-bottom:7rem}.about-copy{max-width:780px}.about-body{max-width:680px;margin-top:3.5rem;margin-left:10%;font-family:var(--font-serif);font-size:1.16rem;line-height:1.82}.about-body p+p{margin-top:1.8rem}.about-links{align-self:start;display:grid;gap:.55rem;padding-top:1rem}.about-links a{color:var(--color-muted);font-size:.76rem;text-decoration:none}.about-links a:hover{color:var(--color-ink)}.error-page{min-height:62vh;display:grid;align-content:center;padding-bottom:5rem}.error-page .page-title{max-width:16ch}.error-link{margin-top:2rem;font-family:var(--font-serif);font-size:1.1rem}.error-link a{text-decoration:none}@media(min-width:1101px){main,footer{margin-left:220px}}@media(max-width:1100px){.site-sidebar{display:none}.mobile-header{position:relative;z-index:41;display:flex;align-items:center;justify-content:space-between;padding:1.2rem 20px 1rem}.mobile-menu-button,.mobile-close-button{border:0;padding:0;background:transparent;color:var(--color-muted);cursor:pointer;font-size:.74rem}.mobile-menu-button:hover,.mobile-close-button:hover{color:var(--color-ink)}.mobile-sidebar{position:fixed;inset:0 auto 0 0;width:min(82vw,300px);z-index:60;display:block;background:var(--color-paper);border-right:1px solid var(--color-border);transform:translate(-100%)}.mobile-sidebar[data-open=true]{transform:translate(0)}.mobile-sidebar-inner{min-height:100%;display:flex;flex-direction:column;padding:1.3rem 1.4rem 1.5rem}.mobile-sidebar-head{display:flex;align-items:center;justify-content:space-between}.mobile-sidebar nav{margin-top:4rem}.mobile-sidebar .nav-list{gap:1rem}.mobile-sidebar .nav-list a{font-size:.82rem}.mobile-sidebar .sidebar-footer{margin-top:auto}.mobile-sidebar-backdrop{position:fixed;inset:0;z-index:50;background:#00000038}.mobile-sidebar-backdrop[data-open=true]{display:block}main,footer{margin-left:0}.article-main{grid-template-columns:1fr;gap:2.5rem}.article-toc{order:-1}.about-page{grid-template-columns:1fr;gap:3.5rem}.about-body{margin-left:8%}}@media(max-width:900px){.article-toc{display:none}}@media(max-width:720px){.home-intro{padding-block:6rem 7rem}.archive-row{grid-template-columns:28px minmax(0,1fr);gap:.9rem}.archive-meta{flex-wrap:wrap;white-space:normal}.project-row{grid-template-columns:28px minmax(0,1fr);gap:.9rem}.footer-inner{grid-template-columns:1fr;gap:.8rem}.footer-links{justify-content:flex-start}.notes-list .note-row{grid-template-columns:28px minmax(0,1fr);gap:.9rem}.article-nav{grid-template-columns:1fr}.article-nav-item:last-child{text-align:left}.about-body{margin-left:0}.about-page{padding-bottom:4rem}}
