:root{color-scheme:light;--page:#fbfbfa;--text:#171716;--muted:#62625f;--subtle:#81817d;--rule:#deded9;--control-border:#e1e1dd;--control-hover:#f0f0ed;--inline-code:#f0efeb;--selection:#e5e1d8;--link-hover:#050505;--body-copy:#222220;--serif:"Iowan Old Style", "Palatino Linotype", "Book Antiqua", Georgia, serif;--sans:"Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Inter", ui-sans-serif;font-synthesis:none;font-optical-sizing:auto;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:root[data-theme=dark]{color-scheme:dark;--page:#050505;--text:#f4f0e8;--muted:#a6a6a1;--subtle:#82827d;--rule:#292927;--control-border:#30302d;--control-hover:#151514;--inline-code:#191919;--selection:#34312b;--link-hover:#fff;--body-copy:#e5e3dd}*{box-sizing:border-box}html{background:var(--page);scroll-behavior:smooth;min-width:320px}body{background:var(--page);min-height:100vh;color:var(--text);font-family:var(--sans);margin:0;font-size:16px;font-weight:400;line-height:1.65;transition:background-color .16s,color .16s}::selection{background:var(--selection)}a{color:inherit;text-underline-offset:3px;text-decoration-thickness:1px}a:hover{text-decoration-thickness:1.5px}a:focus-visible,button:focus-visible{outline-offset:4px;border-radius:2px;outline:2px solid}.site-header{z-index:2;justify-content:space-between;align-items:center;width:100%;padding:25px 28px 0 32px;display:flex;position:absolute;top:0;left:0}.site-wordmark{color:var(--text);font-family:var(--serif);letter-spacing:-.045em;font-size:19px;font-style:italic;line-height:1;text-decoration:none}.theme-toggle{appearance:none;width:clamp(40px,3vw,44px);height:clamp(40px,3vw,44px);box-shadow:none;color:var(--text);cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none;border-radius:0;flex:none;justify-content:center;align-items:center;padding:0;transition:color .16s,transform .14s;display:inline-flex}.theme-toggle:hover{color:var(--muted);background:0 0}.theme-toggle:active{transform:scale(.96)}.theme-toggle:focus-visible{outline-offset:4px;border-radius:2px;outline:2px solid}.theme-icon{flex:none;width:20px;height:20px;display:block}.theme-icon--moon,:root[data-theme=dark] .theme-icon--sun{display:none}:root[data-theme=dark] .theme-icon--moon{display:block}.home-shell{width:min(555px,100% - 48px);margin:0 auto;padding:53px 0 34px}.identity-block{align-items:center;gap:18px;min-width:0;display:flex}.profile-image{object-fit:cover;border-radius:11px;flex:0 0 83px;width:83px;height:83px;display:block}.identity-copy{min-width:0}.identity-name{font-family:var(--serif);letter-spacing:-.065em;margin:0;font-size:clamp(40px,4.1vw,53px);font-style:italic;font-weight:400;line-height:.98}.identity-tagline{color:var(--muted);letter-spacing:.025em;margin:7px 0 0;font-size:16.5px;line-height:1.45}.home-copy{color:var(--body-copy);margin-top:38px;font-size:15.5px;font-weight:400;line-height:1.75}.home-copy p{margin:0 0 17px}.home-copy a{color:var(--text);text-underline-offset:3px;font-weight:600;text-decoration-thickness:1px}.home-copy a:hover{color:var(--link-hover)}.site-navigation{flex-wrap:wrap;gap:10px 28px;margin-top:30px;font-size:17px;font-weight:500;line-height:1.6;display:flex}.site-navigation a{color:#222220;font-weight:500;text-decoration:none;transition:color .13s}:root[data-theme=dark] .site-navigation a{color:#e5e3dd}.site-navigation a:hover{color:var(--link-hover);text-decoration:none}.home-footer{color:var(--text);flex-wrap:wrap;align-items:baseline;gap:0 10px;margin-top:39px;font-size:14.5px;font-weight:500;line-height:1.5;display:flex}.footer-separator{color:var(--subtle)}.copyright{color:var(--subtle);margin:25px 0 0;font-size:12px}.page-shell{width:min(580px,100% - 48px);margin:0 auto;padding:84px 0 80px}.back-link{color:var(--muted);font-size:15px;line-height:1.5;text-decoration:none;display:inline-block}.back-link:hover{color:var(--text);text-decoration:underline}.page-intro{margin-top:14px}.page-title{font-family:var(--serif);letter-spacing:-.065em;margin:0;font-size:42px;font-style:italic;font-weight:400;line-height:1.05}.page-deck{color:var(--muted);margin:10px 0 0;font-size:15.5px;line-height:1.65}.page-note{color:var(--muted);margin:10px 0 0;font-size:15.5px;line-height:1.7}.page-note a{color:var(--text)}.post-list,.project-list{border-top:1px solid var(--rule);margin:34px 0 0;padding:0;list-style:none}.post-entry{border-bottom:1px solid var(--rule);padding:20px 0 22px}.post-date,.article-date{color:var(--muted);letter-spacing:.045em;text-transform:uppercase;font-size:12.5px;font-weight:400;line-height:1.5;display:block}.post-title{font-family:var(--serif);letter-spacing:-.045em;margin:8px 0 0;font-size:21px;font-weight:400;line-height:1.3}.post-title a{text-decoration:none}.post-title a:hover{text-underline-offset:3px;text-decoration:underline}.empty-state{border-top:1px solid var(--rule);color:var(--muted);margin-top:39px;padding-top:23px;font-size:15.5px;line-height:1.75}.empty-state p{margin:0 0 10px}.empty-state p:first-child{color:var(--text)}.notes-intro{margin-bottom:0}.notes-kicker{color:var(--subtle);letter-spacing:.105em;text-transform:uppercase;margin:0 0 10px;font-size:11px;font-weight:500;line-height:1.5}.notes-list{border-top:1px solid var(--rule);margin:34px 0 0;padding:0;list-style:none}.note-entry{border-bottom:1px solid var(--rule);grid-template-columns:26px minmax(0,1fr) 14px;align-items:start;column-gap:12px;padding:21px 0 23px;display:grid}.note-index{color:var(--subtle);font-variant-numeric:tabular-nums;padding-top:4px;font-size:12px;line-height:1.5}.note-copy{min-width:0}.note-title{font-family:var(--sans);letter-spacing:-.035em;margin:0;font-size:18px;font-weight:400;line-height:1.28}.note-title a{color:var(--text);text-decoration:none;transition:color .13s}.note-title a:hover{color:var(--muted);text-decoration:none}.note-description{max-width:58ch;color:var(--muted);margin:8px 0 0;font-size:15.5px;line-height:1.7}.note-tags{color:var(--subtle);letter-spacing:.025em;flex-wrap:wrap;gap:6px 12px;margin:11px 0 0;font-size:11.5px;display:flex}.note-tags span+span:before{content:"·";color:var(--rule);margin-right:12px}.note-arrow{color:var(--subtle);padding-top:3px;font-size:13px;line-height:1.5;transition:color .13s,transform .13s}.note-entry:hover .note-arrow{color:var(--text);transform:translate(1px,-1px)}.notes-footnote{color:var(--subtle);margin:23px 0 0;font-size:13px;line-height:1.65}.note-article-header{margin-bottom:26px}.note-article-header .notes-kicker{margin-bottom:12px}.note-article-deck{margin-top:13px}.note-page-shell .prose,.note-page-shell .prose h2:first-child{margin-top:0}.project-list{margin-top:35px}.project-entry{border-bottom:1px solid var(--rule);padding:23px 0 25px}.project-title{font-family:var(--serif);letter-spacing:-.04em;margin:0;font-size:23px;font-weight:400;line-height:1.3}.project-entry p{color:var(--muted);margin:10px 0 0;font-size:15.5px;line-height:1.75}.project-entry .project-meta{color:var(--subtle);letter-spacing:.035em;margin-top:11px;font-size:12.5px}.project-footnote{color:var(--subtle);margin:23px 0 0;font-size:13px}.article-shell{max-width:700px}.article-content{margin-top:24px}.article-header{margin-bottom:28px}.article-title{font-size:clamp(36px,5vw,48px);font-style:normal;line-height:1.12}.article-date{margin-top:15px}.prose{overflow-wrap:anywhere;font-size:15.5px;line-height:1.8}.prose>*{margin-top:0;margin-bottom:1.35em}.prose h2,.prose h3,.prose h4{font-family:var(--serif);letter-spacing:-.035em;margin-top:1.8em;margin-bottom:.55em;font-weight:400;line-height:1.25}.prose h2{font-size:30px}.prose h3{font-size:25px}.prose h4{font-size:21px}.prose p{margin-bottom:1.25em}.prose a{text-underline-offset:3px;text-decoration-thickness:1px}.prose ul,.prose ol{padding-left:1.45em}.prose li{margin:.35em 0;padding-left:.2em}.prose blockquote{border-left:2px solid var(--rule);color:var(--muted);margin-left:0;padding-left:19px}.prose code{background:var(--inline-code);border-radius:3px;padding:.13em .33em;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.86em}.prose pre{border:1px solid var(--rule);background:var(--inline-code);tab-size:2;border-radius:4px;padding:18px 20px;line-height:1.65;overflow-x:auto}.prose pre code{background:0 0;padding:0;font-size:13.5px}.prose img{max-width:100%;height:auto}.prose hr{border:0;border-top:1px solid var(--rule);margin:2.5em 0}.article-back-bottom{margin-top:16px}@media (width>=1200px){.home-shell{padding-top:53px}}@media (width<=680px){.site-header{padding:17px 18px 0 21px}.site-wordmark{font-size:18px}.theme-toggle{width:40px;height:40px}.home-shell{width:calc(100% - 44px);padding-top:76px}.identity-block{align-items:center;gap:14px}.profile-image{border-radius:9px;flex-basis:67px;width:67px;height:67px}.identity-name{font-size:clamp(33px,8vw,41px)}.identity-tagline{letter-spacing:.005em;margin-top:6px;font-size:13.5px;line-height:1.4}.home-copy{margin-top:31px;font-size:15.5px;line-height:1.75}.home-copy p{margin-bottom:16px}.site-navigation{gap:8px 22px;margin-top:25px;font-size:16.5px}.home-footer{margin-top:33px;font-size:13.5px}.page-shell{width:calc(100% - 44px);padding-top:82px}.page-intro{margin-top:17px}.page-title{font-size:38px}.page-deck,.page-note{font-size:15.5px}.post-list{margin-top:32px}.post-entry{padding:21px 0 23px}.note-entry{grid-template-columns:22px minmax(0,1fr) 12px;column-gap:10px;padding:19px 0 21px}.note-title{font-size:21px}.post-title,.project-title{font-size:20px}.post-date,.article-date{font-size:12.5px}.project-entry p{font-size:15.5px}.article-title{font-size:36px}.prose{font-size:15.5px;line-height:1.8}.prose h2{font-size:27px}.prose h3{font-size:23px}}@media (width<=390px){.home-shell,.page-shell{width:calc(100% - 36px)}.identity-block{gap:11px}.profile-image{flex-basis:59px;width:59px;height:59px}.identity-name{font-size:32px}.identity-tagline{font-size:12.5px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@keyframes title-rise{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}.post-list .post-title{animation:.7s cubic-bezier(.22,1,.36,1) both title-rise}.post-list .post-entry:first-child .post-title{animation-delay:80ms}.post-list .post-entry:nth-child(2) .post-title{animation-delay:.16s}.post-list .post-entry:nth-child(3) .post-title{animation-delay:.24s}.post-list .post-entry:nth-child(4) .post-title{animation-delay:.32s}.post-list .post-entry:nth-child(5) .post-title{animation-delay:.4s}@media (prefers-reduced-motion:reduce){.post-list .post-title{opacity:1;animation:none;transform:none}}
