@font-face{font-family:"Averia Serif Libre";font-style:italic;font-weight:300;font-display:swap;src:url(/_next/static/media/4fafff4a0a9a6a75-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:"Averia Serif Libre";font-style:italic;font-weight:400;font-display:swap;src:url(/_next/static/media/d62eeeefdf00efec-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:"Averia Serif Libre";font-style:italic;font-weight:700;font-display:swap;src:url(/_next/static/media/de0e48ef74e52fe6-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:"Averia Serif Libre";font-style:normal;font-weight:300;font-display:swap;src:url(/_next/static/media/7e0029dff07248dd-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:"Averia Serif Libre";font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/4c9022eda93cbc91-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:"Averia Serif Libre";font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/12dfa0104b317c6e-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:"Averia Serif Libre Fallback";src:local("Arial");ascent-override:86.33%;descent-override:21.96%;line-gap-override:8.69%;size-adjust:103.40%}.__className_48650e{font-family:"Averia Serif Libre","Averia Serif Libre Fallback"}.__variable_48650e{--font-display:"Averia Serif Libre","Averia Serif Libre Fallback"}@font-face{font-family:Inclusive Sans;font-style:normal;font-weight:300 700;font-display:swap;src:url(/_next/static/media/1df69b2f1ce8f7a6-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Inclusive Sans;font-style:normal;font-weight:300 700;font-display:swap;src:url(/_next/static/media/5678f814eca5c2ab-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Inclusive Sans;font-style:normal;font-weight:300 700;font-display:swap;src:url(/_next/static/media/9f00717ceecbaf1c-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Inclusive Sans Fallback;src:local("Arial");ascent-override:88.79%;descent-override:23.36%;line-gap-override:0.00%;size-adjust:107.00%}.__className_8cf9f2{font-family:Inclusive Sans,Inclusive Sans Fallback;font-style:normal}.__variable_8cf9f2{--font-body:"Inclusive Sans","Inclusive Sans Fallback"}:root{--paper:#ffffff;--card:#f6f6f3;--ink:#141a15;--body:#5b625d;--muted:#7b837d;--line:#e4e6e1;--accent:#4d6b3d;--accent-ink:#2f4f3b;--accent-soft:rgba(47,79,59,0.1);--green-bg:#0f1c16;--radius:28px;--radius-sm:18px}.on-dark{--ink:#f1f4ea;--body:#d3dacb;--muted:#a9b7a1;--line:rgba(241,244,234,0.18);--accent:#b9d28c;--accent-ink:#c9e0a0;--accent-soft:rgba(201,224,160,0.14);color:var(--ink)}*,:after,:before{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:24px}body,html{overflow-x:clip}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-body),system-ui,sans-serif;font-size:1.0625rem;line-height:1.65;-webkit-font-smoothing:antialiased}img{max-width:100%;height:auto;display:block}a{color:inherit}ul{list-style:none;margin:0;padding:0}h1,h2,h3{font-family:var(--font-display),Georgia,serif;font-weight:700;line-height:1.12;letter-spacing:0;margin:0;overflow-wrap:break-word}:focus-visible{outline:3px solid var(--accent);outline-offset:3px;border-radius:6px}.skip-link{position:absolute;left:12px;top:-60px;z-index:10000;background:#141a15;color:#fff;padding:10px 14px;border-radius:8px}.skip-link:focus{top:12px}.split{display:grid;grid-template-columns:minmax(0,1fr)}.left{position:relative;overflow:hidden;background:var(--green-bg);padding:44px 24px 76px}.left-inner{position:relative;z-index:3;display:flex;flex-direction:column;gap:28px}.name{font-size:clamp(2.5rem,9vw,3.5rem);font-weight:400;font-style:italic}.role{margin:12px 0 0;font-size:1.2rem;color:var(--accent-ink)}.tagline{margin:8px 0 0;color:var(--muted);max-width:30ch}.side-nav ul{display:flex;gap:20px;flex-wrap:wrap}.side-nav a{display:inline-flex;align-items:center;gap:12px;text-decoration:none;color:var(--muted);font-size:1rem;padding:4px 0;transition:color .2s ease}.side-nav a.is-active,.side-nav a:hover{color:var(--ink)}.social{display:flex;gap:20px;flex-wrap:wrap}.social a{color:var(--muted);text-decoration:underline;text-underline-offset:4px;transition:color .2s ease}.social a:hover{color:var(--accent-ink)}.right{position:relative;z-index:2;background:var(--paper);border-radius:var(--radius) var(--radius) 0 0;margin-top:-28px;padding:36px 20px 64px}.section{max-width:760px;margin-bottom:56px}.section-title{font-size:1.75rem;margin-bottom:20px}.prose{margin:0 0 1.1em;color:var(--body);max-width:62ch}.panel{background:var(--card);border-radius:var(--radius);padding:28px}.panel .section-title{margin-bottom:16px}.panel .prose:last-child{margin-bottom:0}@media (min-width:900px){.split{grid-template-columns:minmax(340px,40%) minmax(0,1fr)}.left{position:-webkit-sticky;position:sticky;top:0;height:100vh;padding:80px 40px 56px 7vw}.left-inner{height:100%;justify-content:space-between}.side-nav ul{flex-direction:column;gap:14px}.side-nav a:before{content:"";width:24px;height:2px;background:var(--line);transition:width .25s ease,background-color .25s ease}.side-nav a:hover:before{width:40px;background:var(--muted)}.side-nav a.is-active:before{width:56px;background:var(--accent)}.right{border-radius:0;margin-top:0;padding:72px 6vw 96px 56px}.section{margin-bottom:72px}.panel{padding:36px}}.cards{display:grid;grid-gap:24px;gap:24px}.card{background:var(--card);border-radius:var(--radius);padding:14px}.card-link{display:block;text-decoration:none}.card-media{overflow:hidden;border-radius:var(--radius-sm);background:#e5ebe3}.card-media img{width:100%;transition:transform .5s ease}.card-link:focus-visible .card-media img,.card-link:hover .card-media img{transform:scale(1.03)}.card-body{padding:20px 10px 10px}.card-title{font-size:1.5rem;margin-bottom:8px;transition:color .2s ease}.card-link:hover .card-title{color:var(--accent-ink)}.card-desc{margin:0 0 16px;color:var(--body);max-width:56ch}.pills{display:flex;flex-wrap:wrap;gap:8px}.pills li{background:var(--accent-soft);color:var(--accent-ink);font-size:.85rem;font-weight:500;line-height:1;padding:8px 12px;border-radius:999px}.actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:20px}.button{display:inline-block;text-decoration:none;background:var(--ink);color:#fff;font-weight:600;padding:14px 26px;border-radius:999px;transition:background-color .2s ease}.button:hover{background:var(--accent-ink)}.button-outline{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 2px var(--ink);transition:background-color .2s ease,color .2s ease}.button-outline:hover{background:var(--ink);color:#fff}.footer{margin:28px 0 0;color:var(--muted);font-size:.9rem}.hero{position:relative;z-index:2;overflow-x:clip;background:var(--green-bg);padding:20px 20px 0}.hero-inner{position:relative;z-index:3;max-width:1100px;margin:0 auto}.topbar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.pill-link,.pill-nav a{display:inline-block;text-decoration:none;background:rgba(255,255,255,.92);color:#141a15;border-radius:999px;font-weight:600;transition:background-color .2s ease}.pill-link{padding:10px 20px}.pill-nav{display:flex;gap:6px;padding:6px;border-radius:999px;background:rgba(255,255,255,.14)}.pill-nav a{padding:8px 16px;font-size:.95rem}.pill-link:hover,.pill-nav a:hover{background:var(--accent)}.hero-title{margin:clamp(48px,9vw,110px) auto 0;max-width:20ch;text-align:center;font-size:clamp(2rem,5.2vw,3.6rem);font-style:italic;font-weight:400;text-wrap:balance}.hero-meta{display:flex;flex-wrap:wrap;justify-content:center;gap:4px 22px;margin:26px 0 0;color:var(--body);font-size:1.1rem}.hero-meta li+li:before{content:"\2022";margin-right:22px;color:var(--accent-ink)}.hero-shot{position:relative;z-index:4;width:min(1000px,100%);margin:48px auto 0;border-radius:var(--radius-sm);overflow:hidden;background:#fff;box-shadow:0 30px 80px rgba(0,0,0,.28);transform:translateY(80px)}.project-body{position:relative;padding:144px 20px 96px}.wrap{max-width:1100px;margin:0 auto}.grid{display:grid;grid-template-columns:minmax(0,1fr);grid-gap:16px;gap:16px;align-items:start}.grid>*{min-width:0}.col-left{display:grid;grid-template-columns:minmax(0,1fr);grid-gap:16px;gap:16px}.panel-title{font-size:1.7rem;margin-bottom:14px}.sub{font-style:italic;font-weight:400;color:var(--muted);margin-left:.4em}.block+.block{margin-top:32px;padding-top:32px;border-top:1px solid var(--line)}.block .prose:last-child{margin-bottom:0}.details{margin:0 0 20px}.detail{padding:14px 0;border-top:1px solid var(--line)}.detail:first-child{border-top:0;padding-top:0}.detail dt{font-weight:600;color:var(--ink)}.detail dd{margin:2px 0 0;color:var(--body)}.result-list{display:grid;grid-gap:10px;gap:10px;margin:0 0 1.2em}.result-list li{background:#fff;border-radius:14px;padding:14px 18px;font-weight:600}.next{margin-top:72px;padding-top:28px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:4px}.next span{color:var(--muted);font-size:.9rem}.next a{font-family:var(--font-display),Georgia,serif;font-size:1.5rem;text-decoration:none}.next a:hover{color:var(--accent-ink)}@media (min-width:900px){.hero{padding:28px 32px 0}.hero-shot{transform:translateY(130px)}.project-body{padding:210px 32px 112px}.grid{grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:20px}.col-left{position:-webkit-sticky;position:sticky;top:24px;gap:20px}}.bg-gradient{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none;contain:paint;isolation:isolate}.bg-gradient span{position:absolute;border-radius:50%;filter:blur(80px);opacity:.55;will-change:transform,translate;translate:calc(var(--mx, 0) * var(--depth) * 1px) calc((var(--my, 0) * var(--depth) + var(--sy, 0) * var(--scroll)) * 1px)}.bg-gradient span:first-child{--depth:200;--scroll:-320;width:45vmax;height:45vmax;top:-12%;left:-25%;background:#2f4f3b;animation:drift-a 26s ease-in-out infinite alternate}.bg-gradient span:nth-child(2){--depth:-150;--scroll:260;width:40vmax;height:40vmax;top:30%;right:-30%;background:#3f5a37;animation:drift-b 32s ease-in-out infinite alternate}.bg-gradient span:nth-child(3){--depth:120;--scroll:-220;width:38vmax;height:38vmax;bottom:-20%;left:5%;background:#274539;animation:drift-c 38s ease-in-out infinite alternate}.bg-gradient--fade:before{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(185,206,165,0) 50%,rgba(185,206,165,.55))}.bg-gradient:after{content:"";position:absolute;inset:0;z-index:2;opacity:.22;mix-blend-mode:soft-light;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");background-size:240px 240px}@keyframes drift-a{to{transform:translate3d(18vmax,12vmax,0) scale(1.1)}}@keyframes drift-b{to{transform:translate3d(-16vmax,14vmax,0) scale(.92)}}@keyframes drift-c{to{transform:translate3d(14vmax,-12vmax,0) scale(1.08)}}.cursor{position:fixed;top:0;left:0;width:0;height:0;z-index:9999;pointer-events:none;mix-blend-mode:difference}.cursor span{position:absolute;width:14px;height:14px;margin:-12px 0 0 -12px;border-radius:50%;background:#fff;opacity:0;transition:transform .2s ease,opacity .2s ease}.cursor.is-visible span{opacity:1}.cursor.is-hover span{transform:scale(1.8)}.cursor.is-down span{transform:scale(.8)}.cursor.is-hover.is-down span{transform:scale(1.5)}@media (hover:hover) and (pointer:fine){html.has-custom-cursor,html.has-custom-cursor *{cursor:none!important}}.hero,.project-body,.split{animation:fade .6s ease both}@keyframes fade{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:after,:before{animation:none!important;transition:none!important}}.text-link{display:inline-block;margin-top:18px;font-weight:600;color:var(--ink);text-underline-offset:4px;transition:color .2s ease}.text-link:hover{color:var(--accent-ink)}.hero--compact{padding-bottom:72px}.hero-lede{margin:22px auto 0;max-width:46ch;text-align:center;color:var(--body);font-size:1.1rem}.project-body.about-body{padding-top:48px}@media (min-width:900px){.hero--compact{padding-bottom:96px}.project-body.about-body{padding-top:64px}}.skill-group+.skill-group{margin-top:22px}.skill-group h3{font-size:1.05rem;margin-bottom:10px}.job+.job{margin-top:28px}.job h3{font-size:1.25rem}.job-meta{margin:2px 0 10px;color:var(--muted)}.bullets{display:grid;grid-gap:8px;gap:8px;color:var(--body)}.bullets li{position:relative;padding-left:18px}.bullets li:before{content:"";position:absolute;left:0;top:.7em;width:6px;height:6px;border-radius:50%;background:var(--accent)}.link-list{display:grid;grid-gap:10px;gap:10px}.link-list a{color:var(--ink);text-underline-offset:4px}.link-list a:hover{color:var(--accent-ink)}.hero--compact{background:#14241c}.hero--compact .bg-gradient span{filter:blur(120px);opacity:.7}.hero--compact .bg-gradient--fade:before{background:linear-gradient(180deg,rgba(185,206,165,0) 30%,rgba(185,206,165,.15))}.hero--compact .bg-gradient:after{opacity:.22;mix-blend-mode:soft-light}