@font-face{font-family:display;src:url(../media/roboto_400-s.p.3748bjrmw_ck7.woff2)format("woff2");font-display:swap;font-weight:400;font-style:normal}@font-face{font-family:display;src:url(../media/roboto_500-s.p.43162ka3da5dh.woff2)format("woff2");font-display:swap;font-weight:500;font-style:normal}@font-face{font-family:display;src:url(../media/roboto_600-s.p.40ufq63sg6pt1.woff2)format("woff2");font-display:swap;font-weight:600;font-style:normal}@font-face{font-family:display Fallback;src:local(Arial);ascent-override:92.43%;descent-override:24.32%;line-gap-override:0.0%;size-adjust:100.37%}.display_e0cfd4ff-module__nc2ACG__className{font-family:display,display Fallback}.display_e0cfd4ff-module__nc2ACG__variable{--font-display:"display", "display Fallback"}
@font-face{font-family:Outfit;font-style:normal;font-weight:400;font-display:swap;src:url(../media/b2ea385cb5ae8625-s.1spbknb88wd48.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Outfit;font-style:normal;font-weight:400;font-display:swap;src:url(../media/1b99372b3eaef0c8-s.p.1gsd1jahc5dg_.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-weight:500;font-display:swap;src:url(../media/b2ea385cb5ae8625-s.1spbknb88wd48.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Outfit;font-style:normal;font-weight:500;font-display:swap;src:url(../media/1b99372b3eaef0c8-s.p.1gsd1jahc5dg_.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-weight:600;font-display:swap;src:url(../media/b2ea385cb5ae8625-s.1spbknb88wd48.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Outfit;font-style:normal;font-weight:600;font-display:swap;src:url(../media/1b99372b3eaef0c8-s.p.1gsd1jahc5dg_.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit Fallback;src:local(Arial);ascent-override:100.18%;descent-override:26.05%;line-gap-override:0.0%;size-adjust:99.82%}.outfit_73b98270-module__VGUZ5a__className{font-family:Outfit,Outfit Fallback;font-style:normal}.outfit_73b98270-module__VGUZ5a__variable{--font-sans:"Outfit", "Outfit Fallback"}
@font-face{font-family:Geist Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/5ce348bf30bf5439-s.31988l_ccedte.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/4fa387ec64143e14-s.2tuy5pz7dlieh.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/6306c77e7c8268e4-s.2dbetqa9o8jxf.woff2)format("woff2");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/7d817b4c03b0c5f1-s.1uyisp29ctx0d.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/bbc41e54d2fcbd21-s.1rgnod-3esatf.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Geist Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/797e433ab948586e-s.p.0r6juujl39pe6.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/5ce348bf30bf5439-s.31988l_ccedte.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/4fa387ec64143e14-s.2tuy5pz7dlieh.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/6306c77e7c8268e4-s.2dbetqa9o8jxf.woff2)format("woff2");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/7d817b4c03b0c5f1-s.1uyisp29ctx0d.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/bbc41e54d2fcbd21-s.1rgnod-3esatf.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Geist Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/797e433ab948586e-s.p.0r6juujl39pe6.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono Fallback;src:local(Arial);ascent-override:74.67%;descent-override:21.92%;line-gap-override:0.0%;size-adjust:134.59%}.geist_mono_3ae8f40c-module__0_BZ1q__className{font-family:Geist Mono,Geist Mono Fallback;font-style:normal}.geist_mono_3ae8f40c-module__0_BZ1q__variable{--font-mono:"Geist Mono", "Geist Mono Fallback"}
:root{--paper:#f4efe6;--ink:#1a1714;--muted:#5c564c;--line:#d9d0c3;--rust:#9c3b1e;--rust-deep:#6f2a14;--gutter:clamp(1.25rem, 4vw, 2.5rem);--measure:40rem;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*,:before,:after{box-sizing:border-box}::selection{color:var(--ink);background:#e8cbbd}:focus-visible{outline:2px solid var(--rust);outline-offset:3px}.ui-canvas{background:radial-gradient(900px 420px at 0% -10%, #9c3b1e12, transparent 55%), radial-gradient(700px 380px at 100% 0%, #2f3b2c0f, transparent 50%), var(--paper);min-height:100vh;color:var(--ink);font-family:var(--font-sans), "Avenir Next", "Segoe UI", sans-serif;flex-direction:column;margin:0;font-size:1.0625rem;line-height:1.6;display:flex}.ui-frame{width:min(100% - 2 * var(--gutter), var(--measure));margin-inline:auto;padding-top:1.25rem;padding-bottom:4rem}.eyebrow,.kicker,.ui-kicker{font-family:var(--font-mono), ui-monospace, monospace;letter-spacing:.14em;text-transform:uppercase;color:var(--rust);margin:0;font-size:.75rem;font-weight:500}.page-title,.ui-display{font-family:var(--font-display), "Avenir Next", "Segoe UI", sans-serif;letter-spacing:-.035em;text-wrap:balance;margin:0;font-size:clamp(3rem,8vw,5.4rem);font-weight:500;line-height:.92}.ui-title{font-family:var(--font-display), "Avenir Next", "Segoe UI", sans-serif;letter-spacing:-.03em;margin:.2rem 0 0;font-size:clamp(1.7rem,3vw,2.15rem);font-weight:500;line-height:1.15}.ui-app-name{font-family:var(--font-display), "Avenir Next", "Segoe UI", sans-serif;letter-spacing:-.03em;font-size:1.45rem;font-weight:500}.ui-mast{border-bottom:1px solid var(--line);padding-bottom:.85rem}.ui-mast-row,.ui-split{justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.ui-nav{flex-wrap:wrap;gap:.35rem 1.35rem;margin-top:.85rem;display:flex}.ui-nav-link{color:var(--muted);font-size:.98rem;text-decoration:none}.ui-nav-link:hover,.ui-nav-link[aria-current=page]{color:var(--ink)}.ui-nav-link[aria-current=page]{box-shadow:inset 0 -2px 0 var(--rust)}.ui-link{color:var(--rust-deep);text-underline-offset:.18em}.ui-button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}.ui-button:disabled{cursor:default;color:var(--muted);box-shadow:none;text-decoration:none}.ui-button-solid{background:var(--rust);color:var(--paper);border-radius:2px;padding:.55rem .85rem}.ui-button-solid:disabled{color:var(--muted);background:0 0}.ui-button-text{color:var(--rust-deep);text-underline-offset:.18em;text-decoration:underline}.ui-button-quiet{color:var(--muted)}.ui-button-quiet[aria-pressed=true],.ui-button-quiet[aria-current=true]{color:var(--ink);box-shadow:inset 0 -2px 0 var(--rust)}.ui-field{gap:.25rem;display:grid}.ui-field input,.ui-textarea{border:1px solid var(--line);width:100%;color:inherit;font:inherit;background:#fffdf8;border-radius:2px;padding:.65rem .75rem}.ui-textarea{resize:vertical;min-height:7.5rem;font-family:var(--font-display), "Avenir Next", "Segoe UI", sans-serif;letter-spacing:-.02em;font-size:1.35rem;font-weight:500;line-height:1.35}.ui-form{gap:1rem;margin-top:1.5rem;display:grid}.ui-choices{margin-top:1.5rem}.ui-choice{border-bottom:1px solid var(--line);cursor:pointer;grid-template-columns:.9rem 1fr;gap:.2rem .75rem;padding:.85rem 0;display:grid}.ui-choice input{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.ui-choice-mark{border:1px solid var(--ink);width:.85rem;height:.85rem;margin-top:.28rem}.ui-choice:has(:checked) .ui-choice-mark{background:var(--rust);border-color:var(--rust)}.ui-choice-detail{color:var(--muted);grid-column:2;font-size:.95rem}.ui-cluster{flex-wrap:wrap;align-items:center;gap:.75rem 1.25rem;display:flex}.ui-stack{gap:1.25rem;display:grid}.ui-space{margin-top:1.5rem}.ui-space-lg{margin-top:2rem}.ui-muted{color:var(--muted)}.ui-error{color:var(--rust-deep)}.ui-lines{font-family:var(--font-display), "Avenir Next", "Segoe UI", sans-serif;letter-spacing:-.02em;gap:.85rem;margin:1.75rem 0 0;padding:0;font-size:clamp(1.35rem,2.5vw,1.7rem);font-weight:500;line-height:1.25;list-style:none;display:grid}.ui-record-name{font-family:var(--font-display), "Avenir Next", "Segoe UI", sans-serif;letter-spacing:-.02em;font-size:1.35rem;font-weight:500;line-height:1.2}.ui-stat dt{font-family:var(--font-mono), ui-monospace, monospace;letter-spacing:.14em;text-transform:uppercase;color:var(--rust);font-size:.75rem;font-weight:500}.ui-stat dd{font-family:var(--font-display), "Avenir Next", "Segoe UI", sans-serif;letter-spacing:-.03em;margin:.2rem 0 0;font-size:clamp(1.8rem,3vw,2.4rem);font-weight:500;line-height:1}.ui-meter{background:var(--rust);height:.35rem;margin-top:.4rem}.ui-meter-quiet{background:var(--muted)}
*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth}a{color:inherit}p,h1,h2,dl,dd{margin:0}.skip{z-index:20;background:var(--ink);color:var(--paper);padding:.5rem .75rem;text-decoration:none;position:absolute;top:-4rem;left:1rem}.skip:focus{top:1rem}.wrap{width:min(100% - 2 * var(--gutter), 68rem);margin-inline:auto}.site-header{z-index:10;background:var(--paper);border-bottom:1px solid var(--line);position:sticky;top:0}.bar{justify-content:space-between;align-items:center;gap:1rem;min-height:4.25rem;display:flex}.mark{flex:none;width:2.5rem;height:2.5rem;line-height:0;display:block;overflow:hidden}.mark img{object-fit:cover;object-position:center 18%;width:100%;height:100%;display:block}.mark:hover img{outline:2px solid var(--rust);outline-offset:-2px}nav ul{flex-wrap:wrap;justify-content:flex-end;gap:.35rem 1.35rem;margin:0;padding:0;list-style:none;display:flex}main{flex:1 0 auto;padding-bottom:2rem}.hero{padding-top:80px;padding-bottom:.5rem;container-type:inline-size}.hero h1{font-family:var(--font-display), "Avenir Next", "Segoe UI", sans-serif;letter-spacing:-.04em;white-space:nowrap;margin-top:0;font-size:clamp(2.35rem,13.5cqi,8.5rem);font-weight:500;line-height:1}.lede,.page-intro,.role-copy,.note{max-width:var(--measure);text-wrap:pretty}.lede{margin-top:1.5rem;font-size:clamp(1.2rem,2vw,1.4rem);line-height:1.45}.lede+.lede{color:var(--muted);margin-top:.85rem;font-size:1.05rem;line-height:1.55}.dateline,.spec{border-top:1px solid var(--line);grid-template-columns:repeat(3,minmax(0,1fr));gap:1.25rem 1.5rem;margin-top:2.5rem;padding-top:1.15rem;display:grid}.dateline dt,.spec dt{font-family:var(--font-mono), ui-monospace, monospace;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-size:.72rem;font-weight:500}.dateline dd,.spec dd{margin-top:.25rem;font-size:1.05rem}.dateline a,.prose a,.more a,.project-links a,.footer-links a,.note a,.missing a{color:var(--rust-deep);text-underline-offset:.18em}.section{margin-top:3.75rem}.section-head{justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:.85rem;display:flex}.section-head a{color:var(--rust-deep);text-underline-offset:.18em;white-space:nowrap}.stack>.index-row,.stack>.role,.stack>.project,.stack>.edu{border-top:1px solid var(--line)}.stack>:last-child{border-bottom:1px solid var(--line)}.index-row{color:inherit;grid-template-columns:2.4rem minmax(0,1fr) auto;align-items:baseline;gap:.35rem 1rem;margin-inline:-.35rem;padding:1.05rem .35rem;text-decoration:none;display:grid}.index-row:hover{background:#9c3b1e0f}.index-row:hover .index-title{color:var(--rust-deep)}.idx{font-family:var(--font-mono), ui-monospace, monospace;color:var(--rust);font-size:.78rem}.index-main{flex-direction:column;min-width:0;display:flex}.index-title{letter-spacing:-.015em;font-size:1.15rem;font-weight:600}.index-sub,.index-meta,.role-title,.place{color:var(--muted)}.index-sub{font-size:.95rem}.index-meta{font-family:var(--font-mono), ui-monospace, monospace;text-align:right;font-size:.78rem}.more{flex-wrap:wrap;align-items:baseline;gap:.35rem .85rem;margin-top:1.15rem;display:flex}.more-note{color:var(--muted);font-size:.95rem}.page{padding-top:clamp(2rem,5vw,3.5rem)}.page-intro{margin-top:1rem;font-size:1.15rem;line-height:1.5}.page .stack,.page .edu-block{margin-top:2.5rem}.role,.project,.edu{grid-template-columns:9.5rem minmax(0,1fr);gap:.75rem 2rem;padding:1.75rem 0;scroll-margin-top:5.5rem;display:grid}.role h2,.project h2,.edu h2{font-family:var(--font-display), "Avenir Next", "Segoe UI", sans-serif;letter-spacing:-.03em;font-size:clamp(1.7rem,3vw,2.25rem);font-weight:500;line-height:1.1}.role h2 a{color:inherit;text-decoration:none}.role h2 a:hover{color:var(--rust-deep)}.role-when{font-family:var(--font-mono), ui-monospace, monospace;letter-spacing:.02em;color:var(--muted);padding-top:.45rem;font-size:.78rem}.role-title{margin-top:.3rem}.role-copy{margin-top:.75rem}.role-points{max-width:var(--measure);margin:.75rem 0 0;padding:0;list-style:none}.role-points li{text-wrap:pretty;padding-left:.95rem;position:relative}.role-points li+li{margin-top:.45rem}.role-points li:has(.role-point-label)+li{margin-top:.95rem}.role-point-label{font-weight:600;display:block}.role-points li:before{content:"";background:var(--rust);width:.4rem;height:1px;position:absolute;top:.72em;left:0}.role-skills{max-width:var(--measure);margin-top:.9rem;font-size:.98rem}.role-skills-label{font-family:var(--font-mono), ui-monospace, monospace;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:.15rem;font-size:.72rem;font-weight:500;display:block}.project-links{flex-wrap:wrap;gap:.5rem 1.25rem;margin-top:.9rem;display:flex}.project{grid-template-columns:minmax(0,1fr)}.project-main{display:contents}.project.has-shot{grid-template-columns:minmax(0,1fr) minmax(8.5rem,14rem);align-items:center;padding-block:0}.project.has-shot .project-copy{padding-block:1.75rem}.project-shot-wrap{width:100%;aspect-ratio:var(--shot-aspect);justify-self:center;position:relative}.project-shot{cursor:zoom-in;background:0 0;border:0;width:100%;height:100%;margin:0;padding:0;line-height:0;position:absolute;inset:0}.project-shot img{object-fit:cover;object-position:top center;width:100%;height:100%;display:block}.shot-dialog img{width:100%;height:auto;display:block}.project-shot:hover{box-shadow:inset 0 0 0 1px var(--rust)}.shot-dialog{border:1px solid var(--line);background:var(--paper);width:fit-content;max-width:calc(100vw - 2rem);max-height:calc(100dvh - 2rem);color:var(--ink);margin:auto;padding:.85rem}.shot-dialog::backdrop{background:#1a17148c}.shot-dialog form{justify-content:flex-end;margin:0 0 .65rem;display:flex}.shot-close{color:var(--rust-deep);font:inherit;text-underline-offset:.18em;cursor:pointer;background:0 0;border:0;margin:0;padding:0;text-decoration:underline}.shot-dialog img{width:auto;max-width:min(36rem,100vw - 4rem);max-height:calc(100dvh - 6.5rem)}.also{max-width:var(--measure);color:var(--muted);margin-top:1rem}.languages{color:var(--muted);margin-top:1.25rem}.contact-list{gap:0;margin-top:2rem;display:grid}.contact-row{border-top:1px solid var(--line);justify-content:space-between;align-items:baseline;gap:1rem;padding:1.15rem 0;text-decoration:none;display:flex}.contact-list .contact-row:last-child{border-bottom:1px solid var(--line)}.contact-row:hover .contact-label{color:var(--rust-deep)}.contact-label{font-family:var(--font-display), "Avenir Next", "Segoe UI", sans-serif;letter-spacing:-.03em;font-size:clamp(1.8rem,4vw,2.6rem);font-weight:500;line-height:1.1}.contact-meta{color:var(--muted);font-family:var(--font-mono), ui-monospace, monospace;font-size:.8rem}.note{color:var(--muted);margin-top:1.75rem}.site-footer{border-top:1px solid var(--line);margin-top:3.5rem;padding-block:1.75rem 2.5rem}.footer-grid{gap:.25rem;display:grid}.footer-name{font-family:var(--font-display), "Avenir Next", "Segoe UI", sans-serif;letter-spacing:-.02em;font-size:1.45rem}.footer-links{gap:1rem;margin-top:.35rem;display:flex}.colophon{color:var(--muted);margin-top:.85rem;font-size:.92rem}.missing{padding-block:4rem 3rem}.missing p{max-width:var(--measure);margin-top:1rem}@media (max-width:720px){.dateline,.spec{grid-template-columns:1fr;gap:1rem}.index-row{grid-template-columns:2.1rem minmax(0,1fr)}.index-meta{text-align:left;grid-column:2}.role,.project,.edu{grid-template-columns:1fr;gap:.35rem}.project.has-shot{grid-template-columns:minmax(0,1fr) auto;gap:0 1rem}.project.has-shot .project-main{flex-direction:column;grid-area:1/1;gap:.35rem;min-width:0;display:flex}.project.has-shot .project-copy{padding-top:0}.project.has-shot .project-shot-wrap{grid-area:1/2;justify-self:center;width:min(8.5rem,40vw)}.role-when{padding-top:0}.contact-row{flex-direction:column;gap:.2rem}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important;animation:none!important}}
