@font-face{font-family:Playfair Display;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/playfair-display-latin-400-normal.woff2)format("woff2")}@font-face{font-family:Playfair Display;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/playfair-display-latin-400-italic.woff2)format("woff2")}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/source-serif-4-latin-400-normal.woff2)format("woff2")}@font-face{font-family:"Source Serif 4";font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/source-serif-4-latin-400-italic.woff2)format("woff2")}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/source-serif-4-latin-500-normal.woff2)format("woff2")}@font-face{font-family:"Source Serif 4";font-style:italic;font-weight:500;font-display:swap;src:url(/fonts/source-serif-4-latin-500-italic.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/jetbrains-mono-latin-400-normal.woff2)format("woff2")}:root{--font-display:"Playfair Display", Georgia, serif;--font-body:"Source Serif 4", Georgia, serif;--font-mono:"JetBrains Mono", Menlo, monospace;--column:42rem;--measure:34em;--radius-code:3px;--paper:#0e0e11;--raised:#1a1a1f;--rule:#2a2a30;--faint:#7c776e;--ink:#e8e4dc;--ink-dim:#a8a399;--accent:#b48ee6;--body-weight:400;--label-size:12px;color-scheme:dark}html.light{--paper:#f5f2ea;--raised:#e4e0d5;--rule:#cfc9bb;--faint:#4a4843;--ink:#0e0e10;--ink-dim:#0e0e10;--accent:#432578;--body-weight:500;--label-size:13px;color-scheme:light}*,:before,:after{box-sizing:border-box}body{background-color:var(--paper);color:var(--ink);font-family:var(--font-body);font-size:18px;font-weight:var(--body-weight);-webkit-font-smoothing:antialiased;margin:0;line-height:1.65;transition:color .15s,background-color .15s}h1,h2,h3,p,ul,ol,dl,dd,figure{margin:0}a{color:var(--accent);text-underline-offset:4px;text-decoration:underline;text-decoration-color:color-mix(in srgb, var(--accent) 50%, transparent);transition:text-decoration-color .15s,color .15s}a:hover{text-decoration-color:var(--accent)}h1,h2,h3{font-family:var(--font-display);font-weight:400}h1{letter-spacing:-.01em;text-wrap:balance;font-size:44px;line-height:1.1}h2{font-size:26px;line-height:1.2}h3{font-size:22px;line-height:1.25}code,pre{font-family:var(--font-mono)}img{max-width:100%;height:auto}.label{font-family:var(--font-mono);font-size:var(--label-size);letter-spacing:.06em;text-transform:uppercase;color:var(--faint)}.text-dim{color:var(--ink-dim)}.site{min-height:100vh;max-width:var(--column);flex-direction:column;margin:0 auto;padding:2.5rem 1.5rem;display:flex}.site-main{flex:1;padding-top:3.5rem}.site-nav{border-bottom:1px solid var(--rule);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.75rem 2rem;padding-bottom:1.25rem;display:flex}.site-nav__name{font-family:var(--font-display);white-space:nowrap;color:var(--ink);font-size:20px;text-decoration:none}.site-nav__links{flex-wrap:wrap;align-items:baseline;gap:.5rem 1.25rem;padding:0;list-style:none;display:flex}@media (width>=640px){.site-nav__links{column-gap:1.75rem}}.site-nav__links a{text-decoration:none}.site-nav__links a:hover{color:var(--ink)}.site-nav__links a[aria-current=page]{color:var(--accent)}.theme-toggle{cursor:pointer;color:var(--faint);background:0 0;border:0;padding:0}.theme-toggle:hover{color:var(--ink)}.site-footer{border-top:1px solid var(--rule);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.5rem 2rem;margin-top:4rem;padding-top:1.25rem;display:flex}.site-footer p{white-space:nowrap}.site-footer__links{flex-wrap:wrap;gap:.5rem 1.25rem;padding:0;list-style:none;display:flex}.site-footer__links a{text-decoration:none}.site-footer__links a:hover{color:var(--ink)}.page-header{margin-bottom:4rem}.page-header h1{margin-bottom:1rem}.intro{max-width:var(--measure);color:var(--ink-dim)}.post-list{padding:0;list-style:none}.post-list li{border-top:1px solid var(--rule);grid-template-columns:1fr;gap:.5rem;padding:1.5rem 0;display:grid}.post-list li:last-child{border-bottom:1px solid var(--rule)}@media (width>=640px){.post-list li{grid-template-columns:7.5rem 1fr;gap:1.5rem}}.post-list time{padding-top:.375rem}.post-list h2 a{color:var(--ink);text-decoration:none}.post-list h2 a:hover{text-decoration:underline}.post-list__excerpt{color:var(--ink-dim);margin-top:.5rem}.post-header{margin-bottom:2.5rem}.post-title{margin-top:.75rem;font-size:40px}.adjacent{border-top:1px solid var(--rule);justify-content:space-between;gap:1.5rem;margin-top:4rem;padding-top:1.5rem;display:flex}.adjacent__newer{text-align:right}.adjacent .label{margin-bottom:.25rem}.adjacent a{font-family:var(--font-display);color:var(--ink);text-decoration:none}.adjacent a:hover{text-decoration:underline}.project-group{margin-bottom:3.5rem}.project-group h2{margin-bottom:.5rem}.project-list{padding:0;list-style:none}.project-list li{border-top:1px solid var(--rule);padding:1.25rem 0}.project-list li:last-child{border-bottom:1px solid var(--rule)}.project-list li p{color:var(--ink-dim);margin-top:.25rem}.project-list__links{gap:1rem;margin-top:.5rem;display:flex}.project-list__links a{color:var(--accent);text-decoration:none}.project-list__links a:hover{text-decoration:underline}.portrait{background-color:var(--raised);width:144px;height:144px;margin-bottom:1.5rem;display:block}@media (width>=640px){.portrait{float:right;margin:0 0 1rem 2rem}}.contact-list{max-width:var(--measure)}.contact-list dd{margin:.25rem 0 1.25rem}.prose{max-width:var(--measure)}.prose>p:first-of-type{font-size:19px}.prose p,.prose ul,.prose ol,.prose pre,.prose blockquote{margin:0 0 1em}.prose h2,.prose h3{margin:2em 0 .5em}.prose h2{font-size:22px;line-height:1.25}.prose ul,.prose ol{padding-left:1.5em}.prose ul{list-style:outside}.prose ol{list-style:decimal}.prose blockquote{font-family:var(--font-display);color:var(--ink-dim);border-left:2px solid var(--accent);max-width:30em;padding-left:1rem;font-size:22px;font-style:italic;line-height:1.4}.prose code{background-color:var(--raised);border-radius:var(--radius-code);padding:1px 6px;font-size:.85em}.prose pre{background-color:var(--raised);padding:14px 16px;font-size:13px;line-height:1.5;overflow-x:auto}.prose pre code{font-size:inherit;background:0 0;border-radius:0;padding:0}
