:root{--ink:#111;--ink-2:#3a3a3a;--ink-3:#4a4a4a;--muted:#6b6b6b;--rule-light:#ddd;--rule-faint:#e6e6e6;--paper:#fff;--paper-2:#f2f2f2;--red:#d0261c;--label-col:270px;--gap:24px}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--paper);color:var(--ink);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.5}a{color:inherit;text-decoration:none}a:hover{color:var(--red)}:focus-visible{outline:2px solid var(--red);outline-offset:2px}img{max-width:100%;height:auto;display:block}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.skip-link{background:var(--ink);color:var(--paper);z-index:10;padding:8px 12px;position:absolute;top:-48px;left:24px}.skip-link:focus{color:var(--paper);top:12px}.wrap{max-width:1200px;margin:0 auto;padding:0 24px}.row{gap:var(--gap);flex-wrap:wrap;display:flex}.row>.label{flex:0 1 var(--label-col)}.row>.main{flex:999 600px;min-width:0}.section{border-top:2px solid var(--ink);padding:20px 0 96px}.section-title{gap:12px;margin:0;font-size:15px;font-weight:600;display:flex}.index{color:var(--red);font-weight:600}.more-link{color:var(--red);margin-top:16px;padding:6px 0;font-size:14px;font-weight:600;display:inline-block}.more-link:hover{color:var(--ink)}.muted{color:var(--muted)}.site-header{border-bottom:2px solid var(--ink);align-items:center;padding:28px 0 20px}.brand{align-items:center;min-height:32px;font-size:15px;font-weight:600;display:inline-flex}.site-nav{flex-wrap:wrap;gap:8px 32px;font-size:15px;font-weight:500;display:flex}.site-nav a{margin:-8px 0;padding:8px 0}.site-nav a[aria-current=page]{color:var(--red)}.menu-button{display:none}@media (width<=720px){.site-header{padding:14px 0;position:relative}.site-header>.label{flex:auto}.brand{min-height:44px}.menu-button{width:44px;height:44px;color:var(--ink);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;margin-right:-10px;padding:0;display:flex}.site-nav{border-top:1px solid var(--ink);flex-direction:column;flex:100%;gap:0;font-size:20px;font-weight:600;display:none}.site-nav a{border-bottom:1px solid var(--rule-light);margin:0;padding:12px 0}.site-header[data-open] .site-nav{display:flex}}.site-footer{border-top:2px solid var(--ink);padding:20px 0 64px;font-size:14px}.site-footer .links{flex-wrap:wrap;gap:8px 32px;font-weight:500;display:flex}.site-footer .links a{align-items:center;gap:6px;display:inline-flex}.site-footer .icon{flex:none;width:16px;height:16px}.site-footer .links .edit{color:var(--muted);margin-left:auto}.hero{padding:96px 0 120px}.hero-byline{text-align:right;flex-direction:column;align-items:flex-end;gap:14px;display:flex}.hero-byline img{object-fit:cover;border-radius:50%;width:96px;height:96px}.quals{letter-spacing:.02em;color:var(--muted);margin:0;font-size:13px;line-height:1.5}.byline-name{letter-spacing:0;color:var(--ink);margin-bottom:2px;font-size:15px;font-weight:600;display:block}.hero-title{letter-spacing:-.03em;margin:0;font-size:clamp(32px,5vw,48px);font-weight:600;line-height:1.02}.hero-title span{color:#8a8a8a}.hero-lede{max-width:600px;color:var(--ink-2);margin:36px 0 0;font-size:19px}.hero-lede a{color:var(--ink);text-underline-offset:3px;text-decoration:underline 1px}.hero-lede a:hover{color:var(--red)}.hero-contact{color:var(--red);align-items:center;gap:8px;margin-top:28px;padding:6px 0;font-size:16px;font-weight:600;display:inline-flex}.hero-contact:hover{color:var(--ink)}.hero-contact .icon{flex:none;width:18px;height:18px}@media (width<=720px){.hero{padding:48px 0 64px}.hero-lede{margin-top:24px;font-size:17px}.hero-contact{overflow-wrap:anywhere;margin-top:20px}.hero-byline{text-align:left;flex-direction:row;flex-basis:100%;align-items:center;gap:16px;margin-bottom:16px}.hero-byline img{width:72px;height:72px}}.year-group{border-top:1px solid var(--ink);flex-wrap:wrap;gap:0 24px;padding:20px 0;display:flex}.year-group:first-child{border-top:0;padding-top:0}.year-group:last-child{border-bottom:1px solid var(--ink)}.year{letter-spacing:-.02em;flex:0 0 120px;font-size:40px;font-weight:300;line-height:1}.year-posts{flex-direction:column;flex:400px;gap:16px;min-width:0;padding-top:4px;display:flex}.post-link{flex-direction:column;gap:4px;display:flex}.post-link .title{letter-spacing:-.01em;font-size:22px;font-weight:600;line-height:1.25}.post-link .meta{color:var(--muted);font-size:14px}.year-posts.compact{gap:6px;padding-top:6px;font-size:17px;font-weight:500}@media (width<=720px){.year{flex-basis:100%;margin-bottom:10px;font-size:26px}.post-link .title{font-size:19px}.year-posts.compact{font-size:16px}}.project-cards{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:48px 24px;display:grid}.project-card{flex-direction:column;gap:16px;display:flex}.project-card img{aspect-ratio:16/10;object-fit:cover;object-position:left top;background:var(--paper-2);border:1px solid var(--rule-faint);width:100%}.project-card .body{flex-direction:column;gap:8px;display:flex}.project-card .index{font-size:14px}.project-card .name{letter-spacing:-.01em;font-size:26px;font-weight:600;line-height:1.15}.project-card .summary{color:var(--ink-3);font-size:15px}.project-card .site{border-top:1px solid var(--rule-light);color:var(--muted);margin-top:4px;padding-top:8px;font-size:14px}.project-list{border-top:1px solid var(--ink);grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:20px 24px;margin-top:56px;padding-top:16px;font-size:14px;display:grid}.project-list a{flex-direction:column;display:flex}.project-list .name{font-weight:600}.pub{flex-direction:column;gap:4px;display:flex}.pub+.pub{margin-top:6px}.pub .pub-title{font-size:18px;font-weight:500;line-height:1.35}.pub .pub-meta{color:var(--muted);font-size:14px}.pub .pub-meta .kind{color:var(--red);font-weight:600}.pub .pub-meta .me{color:var(--ink)}@media (width<=720px){.pub .pub-title{font-size:17px}}.bio p{max-width:660px;color:var(--ink-2);margin:0;font-size:17px}.bio .bio-label{color:var(--muted);margin:32px 0 8px;font-size:14px;font-weight:600}.bio .more-link{margin-top:32px}.page-head{padding:80px 0 64px}.page-title{letter-spacing:-.03em;margin:0;font-size:clamp(34px,5vw,54px);font-weight:600;line-height:1.04}.page-lede{max-width:640px;color:var(--ink-2);margin:24px 0 0;font-size:19px}@media (width<=720px){.page-head{padding:48px 0}}.tag-list{color:var(--ink-3);flex-wrap:wrap;gap:4px 14px;display:flex}.tag-cloud{color:var(--ink);gap:10px 24px;font-size:17px;font-weight:500}.post-head{padding:80px 0 64px}.post-meta{flex-direction:column;gap:2px;padding-top:12px;font-size:14px;display:flex}.post-title{letter-spacing:-.03em;max-width:820px;margin:0;font-size:clamp(34px,5vw,54px);font-weight:600;line-height:1.04}.post-aside{flex-direction:column;gap:32px;font-size:14px;display:flex}.post-aside .aside-title{margin-bottom:8px;font-weight:600;display:block}.toc{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.toc a{gap:10px;display:flex}.toc .index{flex:none;width:18px}@media (width>=1000px){.post-aside{align-self:flex-start;position:sticky;top:24px}}@media (width<=720px){.post-head{padding:48px 0 40px}.post-meta{flex-flow:wrap;gap:2px 12px;padding-top:0}.post-meta>*{white-space:nowrap}}.post-nav{border-top:2px solid var(--ink);margin-top:96px;padding-top:20px;padding-bottom:96px}.post-nav .main{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:24px;display:grid}.post-nav a{flex-direction:column;gap:6px;display:flex}.post-nav .dir{color:var(--muted);font-size:14px}.post-nav .title{letter-spacing:-.01em;font-size:22px;font-weight:600;line-height:1.2}.prose{counter-reset:h2;color:#1c1c1c;font-size:19px;line-height:1.65}.prose>*{max-width:660px}.prose>pre,.prose>figure,.prose>p:has(>img:only-child),.prose>table{max-width:none}.prose p,.prose ul,.prose ol{margin:0 0 24px}.prose li+li{margin-top:6px}.prose a{text-decoration:underline;text-decoration-color:var(--red);text-underline-offset:3px;text-decoration-thickness:1px}.prose strong{font-weight:600}.prose h2{counter-increment:h2;letter-spacing:-.01em;gap:14px;margin:56px 0 16px;scroll-margin-top:24px;font-size:26px;font-weight:600;line-height:1.2;display:flex}.prose h2:before{content:counter(h2);color:var(--red)}.prose h3{margin:40px 0 12px;font-size:21px;font-weight:600;line-height:1.3}.prose h4{margin:32px 0 8px;font-size:17px;font-weight:600}.prose>:first-child{margin-top:0}.prose img{background:var(--paper-2);margin:40px 0}.prose blockquote{border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);margin:40px 0;padding:20px 0 0}.prose pre{font-family:var(--font-mono);margin:32px 0;padding:20px 24px;font-size:14px;line-height:1.6;overflow-x:auto;background:var(--paper-2)!important}.prose code{font-family:var(--font-mono);font-size:.85em}.prose :not(pre)>code{background:var(--paper-2);padding:1px 5px}.prose hr{border:0;border-top:1px solid var(--ink);margin:48px 0}.prose table{border-collapse:collapse;margin:32px 0;font-size:16px;display:block;overflow-x:auto}.prose th,.prose td{border-bottom:1px solid var(--rule-light);text-align:left;padding:8px 16px 8px 0}@media (width<=720px){.prose{font-size:17px}.prose pre{margin-left:-24px;margin-right:-24px;padding:16px 24px}}.group-intro{max-width:660px;color:var(--ink-2);margin:0 0 40px;font-size:17px}.group-intro a{text-decoration:underline;text-decoration-color:var(--red);text-underline-offset:3px}.project-detail+.project-detail{border-top:1px solid var(--rule-light);margin-top:56px;padding-top:24px}.project-detail img{object-fit:cover;object-position:left top;background:var(--paper-2);border:1px solid var(--rule-faint);width:100%;display:block}.detail-hero img{aspect-ratio:16/9;margin-bottom:24px}.detail-index{margin-bottom:4px;font-size:14px;display:block}.detail-head{flex-direction:column;flex:0 220px;align-items:flex-start;font-size:14px;display:flex}.detail-head h3{letter-spacing:-.01em;margin:0;font-size:26px;font-weight:600;line-height:1.15}.detail-head .more-link{margin-top:6px;padding:0}.detail-thumb{width:100%;margin-top:14px;display:block}.detail-thumb img{aspect-ratio:16/9}.detail-thumb:hover img{border-color:var(--rule-light)}.detail-body{flex:999 400px;min-width:0;font-size:17px}.detail-body p:last-child{margin-bottom:0}.not-found{padding-bottom:160px}
