:root{color-scheme:light dark;--layout-width: min(72ch, 92vw);--prose-width: 66ch;--background: #faf8f4;--surface: #ffffff;--text: #2a2c31;--strong: #14161a;--hint: #74777e;--blue: #445a78;--blue-light: #869ac4;--line: #e4ded4;--sans: "Albert Sans", system-ui, sans-serif;--display: "Lexend Deca", "Albert Sans", system-ui, sans-serif}*{box-sizing:border-box}html{background:var(--background);color:var(--text);font-family:var(--sans);font-size:17px}body{margin:0;min-width:320px;min-height:100vh;overflow-x:hidden}::selection{background:#dce4ef}img{max-width:100%}a{color:var(--blue);text-decoration:none}main a{text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:3px}main a:hover{text-decoration-color:var(--blue)}h1,h2,h3{color:var(--strong);font-family:var(--display);letter-spacing:-.015em;text-wrap:pretty}p{text-wrap:pretty}.wrap{width:var(--layout-width);margin-inline:auto}.site-header{display:flex;align-items:center;justify-content:space-between;min-height:76px;padding-top:.35rem;border-bottom:1px solid var(--line)}.site-header nav{display:flex;align-items:center;gap:1.8rem}.logo,.logo img{display:block;width:34px;height:34px}.nav-links{display:flex;gap:1.55rem}.nav-links a,.header-github{position:relative;color:var(--hint);font-size:.92rem;text-decoration:none}.nav-links a:after{content:"";position:absolute;right:0;bottom:-.45rem;left:0;height:2px;background:var(--blue-light);transform:scaleX(0);transform-origin:left;transition:transform .16s ease}.nav-links a:hover,.nav-links a[aria-current=page],.header-github:hover{color:var(--strong)}.nav-links a:hover:after,.nav-links a[aria-current=page]:after{transform:scaleX(1)}.hero{display:flex;align-items:flex-start;gap:3rem;padding:4.5rem 0 3.75rem}.hero-copy{flex:1;max-width:var(--prose-width)}.kicker,.section-label{margin:0 0 .75rem;color:var(--blue);font-size:.76rem;font-weight:650;letter-spacing:.08em;text-transform:uppercase}.hero h1{margin:0 0 1.4rem;font-size:clamp(2rem,5vw,2.65rem);line-height:1.08}.hero .lede{margin:0 0 1.15rem;color:var(--strong);font-size:1.12rem;font-weight:600}.hero-copy>p:not(.kicker,.lede){margin:0 0 1.05rem;font-size:1.06rem;line-height:1.72}.portrait{width:152px;flex:0 0 152px;margin:.3rem 0 0}.portrait img{display:block;width:152px;height:152px;object-fit:cover;border-radius:12px}.current{width:var(--layout-width);margin:0 auto}.current-inner{width:100%;display:grid;grid-template-columns:6.5rem minmax(0,1fr);gap:1.5rem 2rem;align-items:baseline;padding:2rem 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.current .section-label{grid-row:1 / span 2;margin:0}.current p:not(.section-label){max-width:var(--prose-width);margin:0;line-height:1.65}.current a{grid-column:2;width:fit-content;font-size:.9rem}.home-grid{display:block;padding:0 0 4rem}.home-writing{max-width:var(--prose-width);padding-top:2.75rem}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:2rem;margin-bottom:1rem}.section-head h2{margin:0;font-size:1.25rem}.section-head>a,.work-note>a{font-size:.9rem}.post-list{list-style:none;padding:0;margin:0;border-top:1px solid var(--line)}.post-list li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1.5rem;align-items:baseline;padding:.95rem 0;border-bottom:1px solid var(--line)}.post-list li>a{display:grid;gap:.2rem;color:inherit;text-decoration:none}.post-title{color:var(--strong);font-weight:600}.post-list li>a:hover .post-title{color:var(--blue)}.post-description,.post-list time{color:var(--hint);font-size:.86rem;line-height:1.45}.post-list time{white-space:nowrap}.work-note{max-width:var(--prose-width);margin-top:3rem;padding-top:2.5rem;border-top:1px solid var(--line)}.work-note ol{list-style:none;padding:0;margin:0 0 1rem}.work-note li{display:grid;grid-template-columns:6rem 1fr;gap:1rem;padding:.45rem 0}.work-note li span,.work-note p{color:var(--hint);font-size:.92rem}.work-note p{max-width:56ch;line-height:1.65}.page{width:var(--layout-width);min-height:65vh;padding:3.5rem 0 4.5rem}.page h1{max-width:var(--prose-width);margin:0 0 1rem;font-size:clamp(1.9rem,5vw,2.5rem);line-height:1.15}.prose-intro>p:not(.kicker),.page-intro{max-width:var(--prose-width);margin:0 0 2.5rem;color:var(--hint);font-size:1rem;line-height:1.7}.prose-intro .post-list{max-width:var(--prose-width)}.now-page,.about-page,.work-page,.resume-page,.article-page{max-width:var(--layout-width)}.now-copy,.prose{max-width:var(--prose-width);margin-top:2.25rem}.now-copy p,.prose p{margin:0 0 1.2rem;font-size:1.04rem;line-height:1.76}.small-note{max-width:var(--prose-width);margin-top:2.5rem;padding-top:1.25rem;border-top:1px solid var(--line);color:var(--hint);font-size:.88rem}.about-heading{display:flex;align-items:flex-end;justify-content:space-between;max-width:var(--prose-width);gap:2rem}.about-heading img{width:112px;height:112px;object-fit:cover;border-radius:12px}.prose h2{margin:2.75rem 0 .6rem;font-size:1.28rem}.work-list{max-width:var(--prose-width);margin-top:2.75rem}.work-list article{display:grid;grid-template-columns:9rem minmax(0,1fr);column-gap:2rem;padding:1.75rem 0;border-top:1px solid var(--line)}.work-meta{grid-row:1 / span 2;display:grid;align-content:start;gap:.15rem}.work-meta span{color:var(--strong);font-weight:600}.work-meta time{color:var(--hint);font-size:.86rem}.work-list h2{margin:0 0 .6rem;font-size:1.15rem;line-height:1.4}.work-list p{margin:0;color:var(--hint);font-size:.96rem;line-height:1.65}.resume-header{display:flex;justify-content:space-between;gap:2rem;align-items:end;padding-bottom:1.75rem;border-bottom:2px solid var(--strong)}.resume-header h1{margin-bottom:.5rem;font-size:1.9rem}.resume-header p{margin:0;color:var(--hint)}.resume-section{display:grid;grid-template-columns:7rem 1fr;gap:2rem;padding:2rem 0;border-bottom:1px solid var(--line)}.resume-section>h2{margin:0;color:var(--blue);font-size:.75rem;letter-spacing:.08em;text-transform:uppercase}.resume-items article+article{margin-top:2rem}.resume-items header{display:flex;justify-content:space-between;gap:2rem}.resume-items h3,.resume-items p{margin:0}.resume-items p,.resume-items time,.resume-items li{color:var(--hint);font-size:.9rem}.resume-items ul{padding-left:1.2rem;line-height:1.55}.article-page{padding-top:3rem}.article-header,.article-body,.article-footer{max-width:var(--prose-width)}.back-link{display:inline-block;margin-bottom:2.25rem;font-size:.9rem}.back-link:before{content:"← "}.article-header h1{margin-bottom:.85rem;font-size:clamp(2rem,5vw,2.65rem);line-height:1.12}.article-description{margin:0 0 .6rem;color:var(--hint);line-height:1.6}.article-header time{color:var(--hint);font-size:.85rem}.article-body{margin-top:3rem;font-size:1rem;line-height:1.78}.article-body h2{margin:2.8rem 0 .7rem;font-size:1.4rem}.article-body h3{margin:2.2rem 0 .6rem;font-size:1.15rem}.article-body p,.article-body ul,.article-body ol,.article-body blockquote{margin-block:1.15rem}.article-body blockquote{margin-inline:0;padding-left:1rem;border-left:3px solid var(--blue-light);color:var(--hint)}.article-body pre{overflow-x:auto;padding:1rem;border-radius:.5rem;background:var(--surface);font-size:.88rem}.article-body img{height:auto}.article-footer{margin-top:3.5rem;padding-top:1.25rem;border-top:1px solid var(--line)}.article-footer a:before{content:"← "}.not-found p:not(.kicker){font-size:1rem}.site-footer{display:flex;justify-content:space-between;gap:2rem;padding:2rem 0 3rem;border-top:1px solid var(--line);color:var(--hint);font-size:.82rem}.site-footer p{margin:0}.footer-links{display:flex;flex-wrap:wrap;gap:1.1rem}@media(prefers-color-scheme:dark){:root{--background: #14161a;--surface: #1b1e24;--text: #d3d6db;--strong: #f0f1f3;--hint: #8b8f98;--blue: #a7b8d6;--blue-light: #869ac4;--line: #2b2f37}::selection{background:#33435a}}@media(max-width:720px){html{font-size:16px}.site-header{align-items:flex-start;padding:1.1rem 0}.site-header nav{align-items:flex-start;gap:1.15rem}.nav-links{flex-wrap:wrap;gap:.65rem 1.1rem}.header-github{display:none}.hero{flex-direction:column-reverse;gap:2rem;padding:3rem 0}.portrait,.portrait img{width:128px;height:128px}.current-inner{grid-template-columns:1fr;gap:.75rem}.current .section-label,.current a{grid-column:1;grid-row:auto}.post-list li{grid-template-columns:1fr;gap:.4rem}.work-list article,.resume-section{grid-template-columns:1fr;gap:1rem}.work-meta{grid-row:auto}.resume-header,.resume-items header,.site-footer{align-items:flex-start;flex-direction:column}.about-heading{align-items:flex-start;flex-direction:column-reverse}}@media print{.site-header,.site-footer{display:none}.page{padding:0}}
