@import url('https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Lora:wght@400;500;600;700&family=Manrope:wght@400;500;600;700&display=swap');

:root { --ink:#20201e; --muted:#6d6d68; --line:#e6e6e1; --accent:#0f6c5b; --paper:#fff; --soft:#f7f7f3; --serif:Lora,Georgia,serif; --sans:Manrope,system-ui,sans-serif; --mono:"DM Mono",ui-monospace,monospace; }
*{box-sizing:border-box} html{scroll-behavior:smooth} body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);line-height:1.6}.site-header,main,footer{width:min(100% - 3rem,70rem);margin-inline:auto}.site-header{height:68px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:1rem}.wordmark{color:var(--ink);font-weight:700;letter-spacing:-.04em;text-decoration:none;font-size:1.08rem}.site-header nav{display:flex;gap:1.1rem;white-space:nowrap}.site-header nav a{color:#555550;text-decoration:none;font-size:.83rem;font-weight:600}.site-header nav a:hover,footer a:hover{color:var(--ink);text-decoration:underline;text-underline-offset:.2em}.hero{padding:7rem 0 5.5rem;border-bottom:1px solid var(--line)}.eyebrow{margin:0 0 .9rem;color:var(--accent);font-family:var(--mono);font-size:.69rem;font-weight:500;letter-spacing:.07em;text-transform:uppercase}.hero h1{max-width:12ch;margin:0;color:#151513;font-family:var(--serif);font-size:clamp(3.4rem,9vw,7.4rem);font-weight:600;letter-spacing:-.075em;line-height:.95}.lead{max-width:39rem;margin:2rem 0 0;color:#464642;font-family:var(--serif);font-size:clamp(1.2rem,2.5vw,1.58rem);line-height:1.5}.hero-actions{display:flex;align-items:center;gap:1.4rem;margin-top:2.25rem}.button{display:inline-block;padding:.73rem 1rem;background:var(--ink);border:1px solid var(--ink);border-radius:.25rem;color:#fff;font-size:.84rem;font-weight:700;text-decoration:none}.button:hover{background:#3c3c37}.button-linkedin{background:transparent;color:var(--ink)}.button-linkedin:hover{background:var(--soft)}.text-link{color:var(--accent);font-size:.86rem;font-weight:700;text-decoration:none}.text-link:hover{text-decoration:underline;text-underline-offset:.22em}.facts{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin:5.2rem 0 0;padding:1.45rem 0 0;border-top:1px solid var(--line)}.facts dt{color:var(--muted);font-family:var(--mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.06em}.facts dd{margin:.28rem 0 0;font-size:.96rem;font-weight:600}.facts a{color:var(--ink)}.statement,.capabilities,.experience,.toolkit,.cv{padding:5.75rem 0;border-bottom:1px solid var(--line)}.statement{width:min(100%,54rem)}.statement h2,.section-intro h2,.cv h2{margin:0;color:#20201e;font-family:var(--serif);font-size:clamp(2rem,4.7vw,3.6rem);font-weight:600;letter-spacing:-.055em;line-height:1.1}.statement>p:last-child{max-width:43rem;margin:1.6rem 0 0;color:#4e4e49;font-family:var(--serif);font-size:1.15rem}.section-intro{margin-bottom:3rem}.capability-grid{display:grid;grid-template-columns:repeat(2,1fr);border-top:1px solid var(--line);border-left:1px solid var(--line)}.capability-grid article{min-height:14rem;padding:1.5rem;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.capability-grid h3{margin:0 0 .7rem;font-family:var(--serif);font-size:1.45rem;letter-spacing:-.035em}.capability-grid p{margin:0;color:#575752;font-size:.94rem}.timeline{margin:0;padding:0;list-style:none;border-top:1px solid var(--line)}.timeline li{display:grid;grid-template-columns:10.5rem 1fr;gap:2rem;padding:2.1rem 0;border-bottom:1px solid var(--line)}.timeline-meta{font-family:var(--mono);font-size:.68rem;line-height:1.55}.timeline-meta p{margin:0 0 .3rem;color:var(--muted)}.timeline h3{margin:0 0 .8rem;font-family:var(--serif);font-size:1.48rem;font-weight:600;letter-spacing:-.035em;line-height:1.2}.timeline h3 span{color:#686863;font-size:.8em;font-weight:400}.timeline article p{max-width:45rem;margin:0;color:#4f4f4a;font-size:.96rem}.footnote{margin:1.25rem 0 0;color:var(--muted);font-size:.74rem}.toolkit ul{display:flex;flex-wrap:wrap;gap:.6rem;margin:0;padding:0;list-style:none}.toolkit li{padding:.48rem .68rem;border:1px solid var(--line);border-radius:100px;background:var(--soft);font-size:.82rem;font-weight:600}.cv{padding-bottom:7rem}.cv p:not(.eyebrow){max-width:40rem;margin:1.3rem 0 2rem;color:#555550;font-family:var(--serif);font-size:1.1rem}footer{display:flex;justify-content:space-between;padding:1.7rem 0 2.7rem;color:var(--muted);font-size:.76rem}footer a{color:inherit;text-decoration:none}
.portfolio-teaser,.work-hero,.case-list,.open-source-work,.work-writing,.work-contact{padding:5.75rem 0;border-bottom:1px solid var(--line)}.portfolio-teaser{display:flex;justify-content:space-between;align-items:end;gap:2rem}.portfolio-teaser h2,.work-hero h1,.work-writing h2,.work-contact h2{margin:0;font-family:var(--serif);font-size:clamp(2rem,4.7vw,3.6rem);line-height:1.08;letter-spacing:-.055em}.portfolio-teaser p:not(.eyebrow),.work-hero>p:last-child,.work-contact>p:not(.eyebrow){max-width:42rem;color:#53534e;font-family:var(--serif);font-size:1.08rem}.work-hero{max-width:58rem}.case-study{display:grid;grid-template-columns:6rem 1fr;gap:2rem;padding:3.2rem 0;border-top:1px solid var(--line)}.case-study:first-child{border-top:0;padding-top:0}.case-index{color:var(--accent);font-family:var(--mono);font-size:.8rem}.case-copy h2{margin:0 0 .9rem;font-family:var(--serif);font-size:clamp(1.8rem,3.5vw,2.8rem);line-height:1.12;letter-spacing:-.045em}.case-lead{max-width:45rem;margin:0 0 1.7rem;color:#40403c;font-family:var(--serif);font-size:1.16rem}.case-facts{margin:0;border-top:1px solid var(--line)}.case-facts div{display:grid;grid-template-columns:8rem 1fr;gap:1rem;padding:1rem 0;border-bottom:1px solid var(--line)}.case-facts dt{color:var(--muted);font-family:var(--mono);font-size:.7rem;text-transform:uppercase}.case-facts dd{margin:0;color:#4f4f4a;font-size:.95rem}.case-note{margin:1.35rem 0 0;color:var(--muted);font-size:.92rem}.writing-card{display:block;max-width:48rem;padding:1.5rem 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);color:var(--ink);text-decoration:none}.writing-card p{margin:0 0 .5rem;color:var(--muted);font-family:var(--mono);font-size:.72rem}.writing-card h3{margin:0 0 .8rem;font-family:var(--serif);font-size:1.55rem;line-height:1.22;letter-spacing:-.03em}.writing-card span,.writing-footer a{color:var(--accent);font-size:.88rem;font-weight:700}.oss-card-featured{padding-top:2.1rem;border-top:2px solid var(--ink)}.writing-footer{margin:1rem 0 0}.open-source-work h2{margin:0;font-family:var(--serif);font-size:clamp(2rem,4.7vw,3.6rem);line-height:1.08;letter-spacing:-.055em}.oss-card{display:grid;grid-template-columns:1fr auto;gap:2rem;align-items:end;max-width:58rem;margin-top:2rem;padding:1.7rem;border:1px solid var(--line);background:var(--soft)}.oss-card h3{margin:0 0 .75rem;font-family:var(--serif);font-size:clamp(1.7rem,3vw,2.4rem);letter-spacing:-.045em}.oss-card h3 a{color:var(--ink);text-decoration:none}.oss-card>div>p:not(.eyebrow){max-width:42rem;margin:.8rem 0;color:#4f4f4a}.oss-actions{display:flex;flex-direction:column;gap:.7rem;align-items:flex-start;white-space:nowrap}.work-contact{padding-bottom:7rem}.work-contact .hero-actions{margin-top:1.7rem}
@media(max-width:640px){.site-header,main,footer{width:min(100% - 2.5rem,70rem)}.site-header{height:auto;min-height:62px;padding:.7rem 0;align-items:flex-start}.wordmark{padding:.45rem 0;font-size:1.05rem}.site-header nav{flex-wrap:wrap;justify-content:flex-end;gap:.1rem .35rem;max-width:14rem}.site-header nav a{padding:.42rem .25rem;font-size:.78rem}.hero{padding:4.25rem 0 3.5rem}.hero h1{font-size:clamp(3rem,15vw,4.6rem)}.lead{font-size:1.18rem}.facts{grid-template-columns:1fr;gap:1rem;margin-top:3.25rem}.facts dt{font-size:.74rem}.facts dd{font-size:1rem}.statement,.capabilities,.experience,.toolkit,.cv,.portfolio-teaser,.work-hero,.case-list,.open-source-work,.work-writing,.work-contact{padding:3.75rem 0}.statement>p:last-child{font-size:1.08rem}.portfolio-teaser{display:block}.portfolio-teaser .button{margin-top:1.4rem}.capability-grid{grid-template-columns:1fr}.capability-grid article{min-height:auto;padding:1.35rem}.capability-grid p{font-size:1rem;line-height:1.65}.timeline li,.case-study{grid-template-columns:1fr;gap:.7rem;padding:1.7rem 0}.timeline-meta{display:flex;gap:.65rem;font-size:.75rem}.timeline-meta p{margin:0}.timeline h3{font-size:1.38rem}.timeline article p{font-size:1rem;line-height:1.7}.case-copy h2{font-size:2rem}.case-lead{font-size:1.1rem}.case-facts div{grid-template-columns:1fr;gap:.28rem}.case-facts dd{font-size:1rem;line-height:1.65}.footnote{font-size:.82rem;line-height:1.6}.toolkit li{padding:.52rem .72rem;font-size:.86rem}.hero-actions{gap:.7rem;flex-wrap:wrap}.button{padding:.82rem 1.05rem;font-size:.9rem}.text-link{padding:.55rem 0;font-size:.9rem}.cv p:not(.eyebrow){font-size:1.08rem}footer{gap:1rem;flex-direction:column;padding-bottom:calc(2rem + env(safe-area-inset-bottom));font-size:.82rem}}
