:root{--paper:#f7f7f2;--white:#fff;--ink:#1b1d1b;--muted:#60635e;--line:#d7d8d0;--blue:#2047dc;--mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Consolas,monospace;font-family:"Inter Tight","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px;line-height:1.6;color:var(--ink);background:var(--paper);font-synthesis:none}*{box-sizing:border-box}body{margin:0}a{color:inherit;text-decoration:none}p,h1,h2,h3,h4,figure,ul,ol{margin:0}img{display:block;max-width:100%}a:focus-visible,summary:focus-visible{outline:3px solid currentColor;outline-offset:7px}a:hover{text-decoration:underline;text-underline-offset:5px}.shell{width:min(1240px,calc(100% - 112px));margin-inline:auto}.skip-link{position:fixed;top:-90px;left:20px;padding:12px 20px;background:white;z-index:10}.skip-link:focus{top:20px}.header{height:104px;display:flex;align-items:center;justify-content:space-between;gap:32px;border-bottom:1px solid var(--ink)}.brand{font-weight:750;font-size:1.5rem;letter-spacing:-.065em;line-height:1}.brand span{color:var(--blue)}.header nav{display:flex;gap:30px;font-size:.9375rem}.cv-link{font-size:.9375rem}.cv-link span{font: .75rem var(--mono);margin-left:9px;color:var(--muted)}.cover{padding:28px 0 0}.cover-meta{display:flex;justify-content:space-between;font: .75rem/1.5 var(--mono);letter-spacing:.04em}.cover-grid{display:grid;grid-template-columns:1.65fr 1fr;gap:8%;align-items:center;padding:58px 0 48px}.hello{font-size:1.125rem;margin-bottom:22px}h1{font-size:clamp(3.4rem,7.8vw,7.4rem);line-height:.98;letter-spacing:-.075em;font-weight:650}h1 span{color:var(--blue)}.intro{max-width:390px;margin:32px 0 26px;font-size:1.125rem;line-height:1.65;color:#4f554e}.cover-action{display:inline-flex;gap:44px;align-items:center;font-size:.9375rem;font-weight:550;padding-bottom:9px;border-bottom:1px solid var(--ink)}.cover-action span{font-size:1.3rem}.portrait{position:relative;max-width:390px;justify-self:end;width:100%;margin-top:32px}.portrait:before{content:'';position:absolute;top:-20px;right:-20px;width:68%;height:70%;background:var(--blue);z-index:0}.portrait img{position:relative;width:100%;height:auto;aspect-ratio:1 / 1.14;object-fit:cover;object-position:50% 45%}.portrait figcaption{position:relative;display:flex;justify-content:space-between;gap:16px;padding-top:12px;font:.75rem/1.6 var(--mono);color:var(--muted)}.cover-bottom{display:flex;align-items:center;justify-content:space-between;gap:30px;padding:24px 0 36px;border-top:1px solid var(--ink)}.cover-bottom p:first-child{display:flex;align-items:center;gap:18px;font-size:1rem}.cover-bottom p:first-child>span{font:.75rem var(--mono);color:var(--muted)}.cover-bottom small{font-size:.8125rem;color:var(--muted)}.cover-note{font:.8125rem/1.5 var(--mono);color:var(--muted)}.projects-section{background:var(--white);padding:86px 0 70px}.section-heading{display:grid;grid-template-columns:1fr 2.3fr;gap:44px;margin-bottom:48px}.section-index{font:.75rem/1.6 var(--mono);letter-spacing:.04em;padding-top:9px}.section-heading h2{font-size:clamp(2.4rem,4vw,3.7rem);line-height:1.07;font-weight:550;letter-spacing:-.055em}.section-heading h2 span{color:var(--blue)}.section-heading>div>p{margin-top:20px;color:var(--muted);font-size:1rem}.projects{border-top:1px solid var(--ink)}.project{border-bottom:1px solid var(--ink);scroll-margin-top:25px}.project>summary{padding:35px 25px 35px 0;display:grid;grid-template-columns:70px minmax(0,1fr) 40px;gap:26px;cursor:pointer;list-style:none}.project>summary::-webkit-details-marker{display:none}.project-number{font: .875rem var(--mono);padding-top:5px}.project-category{font:.75rem/1.6 var(--mono);color:var(--muted)}.project-heading h3{font-size:clamp(1.55rem,2.3vw,2.2rem);line-height:1.2;letter-spacing:-.035em;font-weight:550;margin:10px 0 13px}.project-heading>p{font-size:1rem;color:var(--muted);max-width:720px;line-height:1.6}.tags{display:flex;flex-wrap:wrap;gap:8px 21px;list-style:none;padding:0;margin-top:22px;font:.75rem/1.6 var(--mono);color:var(--muted)}.tags li+li{position:relative}.tags li+li:before{content:'/';position:absolute;left:-13px;color:#9b9d96}.project-toggle{font-size:2rem;line-height:1.1;align-self:center;justify-self:end;font-weight:300;transition:transform .18s ease}.project[open] .project-toggle{transform:rotate(45deg)}.project>summary:hover .project-heading h3{text-decoration:underline;text-underline-offset:5px;text-decoration-thickness:1px}.project.featured{background:var(--blue);color:white;border-color:var(--blue)}.project.featured>summary{padding-left:26px}.featured .project-heading>p,.featured .project-category,.featured .tags{color:#e4e9ff}.featured .tags li+li:before{color:#b5c4ff}.project-body{display:grid;grid-template-columns:1.2fr 1fr;gap:30px 60px;padding:38px 40px 40px 96px;background:#f1f3f5;color:var(--ink)}.featured .project-body{background:#eaf0ff;padding-left:40px}.project-body h4{font:.75rem var(--mono);text-transform:uppercase;color:var(--blue);margin-bottom:10px;letter-spacing:.025em}.project-brief>div+div{margin-top:25px}.project-brief p{font-size:1rem;color:#505b66}.project-flow ol{list-style:none;padding:0}.project-flow li{display:flex;gap:20px;padding:14px 0;border-bottom:1px solid #c9d0d9}.project-flow li>span{font:.75rem var(--mono);color:#636c76;padding-top:5px}.project-flow strong{font-size:1rem;font-weight:550}.project-flow li p{font:.8125rem/1.6 var(--mono);color:#58636d;margin-top:3px}.project-decisions{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,1fr);gap:30px;padding-top:22px;border-top:1px solid #c9d0d9;margin:0}.project-decisions dt{font-size:.9375rem;font-weight:650;margin-bottom:8px}.project-decisions dd{margin:0;font-size:1rem;color:#505b66}.project-context{grid-column:1/-1;font-size:.875rem;color:#58636d;max-width:900px}.source-links{grid-column:1/-1;display:flex;gap:20px 28px;flex-wrap:wrap;font-size:.875rem;color:#4a5969;align-items:center}.project-repo{color:var(--blue);font-weight:600;border-bottom:1px solid;padding-bottom:4px}.more-work{display:flex;justify-content:space-between;gap:24px;padding-top:25px;font-size:.875rem;color:var(--muted)}.more-work>a{color:var(--blue);white-space:nowrap}.about-section{padding:90px 0}.about-grid{display:grid;grid-template-columns:1fr 2.3fr;gap:44px}.about-statement{font-size:clamp(1.8rem,3vw,2.8rem);line-height:1.2;font-weight:550;letter-spacing:-.04em;color:var(--blue)}.about-copy{max-width:700px;color:var(--muted)}.about-copy p+p{margin-top:19px}.about-copy .lead{font-size:1.35rem;line-height:1.5;color:var(--ink);letter-spacing:-.02em}.skills{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;border-top:1px solid var(--ink);margin-top:56px;padding-top:28px}.skill-group h3{font-size:.875rem;font-weight:550;line-height:1.5}.skill-group p{font-size:.9375rem;color:var(--muted);line-height:1.8;margin-top:12px}.skill-group span{color:#9b9d96}.career-section{padding:80px 0 90px;background:#efefea}.timeline{list-style:none;padding:0;border-top:1px solid var(--ink)}.experience-item{padding:26px 0;display:grid;grid-template-columns:1fr 1.2fr 1fr;gap:8px 28px;border-bottom:1px solid var(--line)}.experience-item>h3,.experience-top{grid-column:1;grid-row:1}.experience-item h3{font-size:1.2rem;letter-spacing:-.02em;font-weight:550}.experience-top{display:flex;gap:14px;align-items:center;flex-wrap:wrap}.job-role{grid-column:2;grid-row:1;font-size:1rem}.job-date{grid-column:3;grid-row:1;font:.8125rem/1.7 var(--mono);color:var(--muted);text-align:right}.job-description{grid-column:2/4;font-size:1rem;color:var(--muted)}.current-label{font:.6875rem var(--mono);background:var(--blue);color:white;padding:4px 6px}.company-note{font-size:1rem;color:var(--muted)}.education-section{display:grid;grid-template-columns:1fr 2.3fr;gap:44px;padding-top:60px;scroll-margin-top:30px}.education-heading h3{font-size:1.4rem;line-height:1.3;letter-spacing:-.025em;font-weight:550;margin-top:18px}.education+.education{margin-top:28px;border-top:1px solid var(--line);padding-top:26px}.education-meta{display:flex;justify-content:space-between;gap:20px;font:.75rem/1.6 var(--mono);color:var(--muted);margin-bottom:12px}.education h3{font-size:1.2rem;font-weight:550}.education>p{margin-top:5px;font-size:1rem;color:var(--muted)}.contact-section{background:var(--blue);color:white;padding:55px 0 70px}.contact-grid{display:grid;grid-template-columns:1.7fr 1fr;gap:50px;margin-top:28px;align-items:end}.contact-grid h2{font-size:clamp(2.9rem,5.5vw,5rem);line-height:1.04;font-weight:550;letter-spacing:-.06em}.contact-grid h2>span{color:#c4d0ff}.contact-grid>div>p{font-size:1.125rem;color:#e4e9ff;margin-bottom:24px}.contact-grid a{display:block;padding:12px 0;border-top:1px solid #ffffff50;font-size:1rem}.footer{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:32px 0}.footer p,.footer>a:last-child{font-size:.8125rem;color:var(--muted)}
@media(min-width:1600px){.cover-grid{padding-block:70px 65px}.portrait{max-width:400px}.projects-section{padding-top:100px}}
@media(max-width:1050px){.shell{width:calc(100% - 72px)}.header nav{gap:20px}.cover-grid{gap:7%;grid-template-columns:1.4fr 1fr}h1{font-size:clamp(3.4rem,8vw,5.7rem)}.cover-bottom p:first-child{flex-wrap:wrap;gap:7px 14px}.portrait:before{right:-13px;top:-13px}.project>summary{grid-template-columns:42px minmax(0,1fr) 28px;gap:18px}.project-body{padding:30px;gap:30px}.skills{grid-template-columns:repeat(2,1fr)}.section-heading,.about-grid,.education-section{grid-template-columns:1fr 2fr;gap:35px}.job-date{font-size:.75rem}.experience-item{grid-template-columns:1fr 1.2fr 1fr;gap:10px 20px}}
@media(max-width:760px){.shell{width:calc(100% - 40px)}.header{height:auto;min-height:92px;padding:24px 0 20px;flex-wrap:wrap;gap:22px}.brand{font-size:1.4rem}.header nav{order:3;flex-basis:100%;justify-content:space-between;font-size:.875rem;gap:12px}.cv-link{margin-left:auto;font-size:.875rem}.cover{padding-top:22px}.cover-meta{font-size:.6875rem;gap:14px}.cover-meta span:last-child{text-align:right}.cover-grid{grid-template-columns:1fr;gap:34px;padding:34px 0 30px}.hello{font-size:1rem;margin-bottom:20px}h1{font-size:clamp(3.6rem,14vw,6.5rem);letter-spacing:-.065em;line-height:1}.intro{font-size:1.0625rem;max-width:440px;margin-top:24px}.cover-action{font-size:.9375rem}.portrait{max-width:340px;width:80%;justify-self:end;margin:10px 12px 0 0}.portrait img{aspect-ratio:1/1.04}.portrait:before{width:60%;height:72%}.portrait figcaption{font-size:.75rem;flex-wrap:wrap;gap:4px 14px}.cover-bottom{padding:20px 0 28px}.cover-bottom p:first-child{font-size:.9375rem}.cover-bottom p:first-child>span{flex-basis:100%}.cover-note{display:none}.projects-section,.about-section,.career-section{padding-block:55px}.section-heading,.about-grid{grid-template-columns:1fr;gap:20px}.section-heading{margin-bottom:30px}.section-heading h2{font-size:clamp(2.3rem,8vw,3.4rem)}.section-heading>div>p{margin-top:16px}.section-index{font-size:.75rem;padding-top:0}.project>summary{padding:26px 0;grid-template-columns:24px minmax(0,1fr) 22px;gap:12px}.project.featured>summary{padding:26px 16px;grid-template-columns:minmax(0,1fr) 22px}.featured .project-number{grid-column:1/-1}.project-heading h3{font-size:1.6rem;margin-top:10px;line-height:1.2}.project-category{font-size:.75rem}.project-heading>p{font-size:1rem}.project-number{font-size:.75rem}.project-toggle{font-size:1.7rem}.tags{font-size:.75rem;gap:7px 18px;margin-top:18px}.project-body,.featured .project-body{padding:25px 18px;grid-template-columns:1fr;gap:25px}.project-decisions{grid-template-columns:1fr;gap:20px}.project-context{font-size:.875rem}.project-flow li{padding:12px 0}.source-links{font-size:.875rem;gap:18px}.more-work{flex-direction:column;gap:12px;font-size:.875rem}.about-statement{font-size:2rem;margin-bottom:4px}.about-copy .lead{font-size:1.25rem}.skills{gap:26px 24px;margin-top:35px}.skill-group h3{font-size:.875rem}.skill-group p{font-size:.9375rem}.experience-item{grid-template-columns:1fr auto;gap:8px 16px;padding:22px 0}.experience-item>h3,.experience-top{grid-column:1;grid-row:1}.experience-item h3{font-size:1.0625rem}.job-date{grid-column:1/-1;grid-row:2;text-align:left;font-size:.75rem}.job-role{grid-column:1/-1;grid-row:3;margin-top:7px;font-size:1rem}.job-description{grid-column:1/-1;font-size:.9375rem}.education-section{grid-template-columns:1fr;gap:26px;padding-top:45px}.education-heading h3{margin-top:12px;font-size:1.5rem}.education-meta{flex-direction:column;gap:4px}.education h3{font-size:1.125rem}.contact-section{padding:36px 0 45px}.contact-grid{grid-template-columns:1fr;gap:35px;margin-top:25px}.contact-grid h2{font-size:clamp(3rem,11vw,4.3rem)}.contact-grid>div>p{font-size:1rem}.contact-grid a{font-size:1rem}.footer{padding:26px 0;flex-wrap:wrap;gap:22px}.footer>.brand{flex-basis:100%}.footer p,.footer>a:last-child{font-size:.8125rem}}
@media(max-width:380px){.skills{grid-template-columns:1fr}.shell{width:calc(100% - 32px)}.header nav{font-size:.8125rem;gap:8px}.cover-meta{font-size:.6875rem}.project>summary{gap:9px}.project-heading h3{font-size:1.4rem}.project-number{font-size:.75rem}.portrait{width:85%}}
@media(prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}a,summary{transition:color .15s ease}}
@media print{.shell{width:100%}.header,.cover-action,.cv-link,.source-links,.contact-section,.footer,.more-work{display:none}.cover-grid{grid-template-columns:2fr 1fr;gap:35px;padding:30px 0}.portrait:before{display:none}.portrait{margin:0}h1{font-size:4rem}.projects-section,.about-section,.career-section{padding:30px 0}.project{break-inside:avoid}.project.featured{background:white;color:black}.featured .project-category,.featured .project-heading>p,.featured .tags{color:#555}.project>summary{padding:20px 0!important}.project-toggle{display:none}.project-body{display:none}.section-heading h2{font-size:2rem}.cover-bottom{padding:15px 0}.skills{grid-template-columns:repeat(2,1fr)}body{background:white}}
