@font-face{font-family:__plexSans_66298a;src:url(/_next/static/media/a7358d2e3dd919a9-s.p.woff2) format("woff2");font-display:swap;font-weight:100 700;font-style:normal}@font-face{font-family:__plexSans_Fallback_66298a;src:local("Arial");ascent-override:101.35%;descent-override:27.19%;line-gap-override:0.00%;size-adjust:101.13%}.__className_66298a{font-family:__plexSans_66298a,__plexSans_Fallback_66298a;font-style:normal}.__variable_66298a{--font-plex:"__plexSans_66298a","__plexSans_Fallback_66298a"}:root{--paper:#fff;--surface:#f5f5f5;--ink:#202020;--muted:#616161;--accent:#315c86;--line:#e5e5e5;--font-sans:var(--font-plex),"Helvetica Neue",sans-serif;--font-serif:var(--font-sans);--font-mono:var(--font-sans);color-scheme:light}html.dark{--paper:#161616;--surface:#242424;--ink:#ededed;--muted:#adadad;--accent:#9ebede;--line:#343434;color-scheme:dark}*,:after,:before{box-sizing:border-box}html{scroll-padding-top:32px}body,html{background:var(--paper)}body{margin:0;padding-inline:env(safe-area-inset-left,0) env(safe-area-inset-right,0);color:var(--ink);font:1rem/1.65 var(--font-sans);-webkit-font-smoothing:antialiased}::-moz-selection{background:var(--accent);color:var(--paper)}::selection{background:var(--accent);color:var(--paper)}a{color:inherit;text-decoration-color:var(--line);text-underline-offset:4px}a:hover{color:var(--accent);text-decoration-color:currentColor}button{color:inherit;font:inherit;cursor:pointer}a,button,summary{-webkit-tap-highlight-color:transparent}a,button{transition:color .15s ease,background-color .15s ease}button:disabled{cursor:default;opacity:.5}:focus-visible{outline:2px solid var(--accent);outline-offset:5px}main:focus{outline:none}h1,h2,h3,h4,h5,p{margin:0}h1,h2,h3,h4,h5{text-wrap:balance}dd,dl,ol{margin:0}article[id],section[id]{scroll-margin-top:32px}.page-shell{width:min(800px,calc(100% - 64px));margin-inline:auto}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;z-index:100;top:12px;left:12px;padding:10px 16px;background:var(--ink);color:var(--paper);transform:translateY(-200%)}.skip-link:focus{transform:translateY(0);color:var(--paper)}.site-header{display:flex;align-items:center;gap:24px;min-height:100px}.brand{display:inline-flex;align-items:center;min-width:44px;min-height:44px;margin-right:auto;font-size:15px;font-weight:550;letter-spacing:-.01em;text-decoration:none;white-space:nowrap}.site-navigation{display:flex;flex-wrap:wrap;gap:22px}.site-navigation a{display:inline-flex;align-items:center;min-width:44px;min-height:44px;font-size:14px;text-decoration:none}.theme-toggle{display:grid;place-items:center;flex:0 0 44px;height:44px;padding:0;border:0;background:transparent;border-radius:4px}.theme-toggle:hover{background:var(--surface)}.theme-toggle__icon{position:relative;display:block;width:17px;height:17px;border:1.5px solid;border-radius:50%;overflow:hidden}.theme-toggle__icon:after{content:"";display:block;width:50%;height:100%;background:currentColor}.theme-toggle[aria-pressed=true] .theme-toggle__icon{transform:rotate(180deg)}.intro{padding-block:37px 44px}.intro h1{font-size:clamp(1.7rem,3.5vw,2.15rem);line-height:1.25;font-weight:550;letter-spacing:-.035em}.intro__location{margin-top:10px;font-size:13px;color:var(--muted)}.intro__about{padding-top:24px;max-width:70ch;color:var(--muted);font-size:1rem;line-height:1.75}.intro__about p+p{margin-top:14px}.intro__about a{color:var(--ink);text-decoration-color:var(--muted)}.intro__links{display:flex;align-items:center;flex-wrap:wrap;gap:26px;margin-top:24px}.button{display:inline-flex;align-items:center;justify-content:center;gap:22px;min-height:44px;padding:10px 18px;background:var(--ink);color:var(--paper);border:1px solid var(--ink);border-radius:4px;font-size:14px;font-weight:550;text-decoration:none}.button:hover{color:var(--paper);background:var(--accent);border-color:var(--accent)}.text-link{display:inline-flex;align-items:center;gap:7px;min-height:44px;color:var(--ink);font-size:14px;text-decoration:none}.text-link:hover{text-decoration:underline}.text-link span{color:var(--muted)}.section-layout{padding-block:35px 44px;border-top:1px solid var(--line)}.section-label{display:flex;align-items:baseline;justify-content:space-between;gap:20px;margin-bottom:27px}.section-label h2{font-size:1.2rem;font-weight:550;line-height:1.4;letter-spacing:-.015em}.section-label>p{font-size:12px;color:var(--muted)}.section-label>a{font-size:13px;color:var(--muted)}.project+.project{margin-top:36px;padding-top:36px;border-top:1px solid var(--line)}.project__heading{display:flex;align-items:baseline;justify-content:space-between;gap:16px}.project__heading h3{font-size:1.125rem;font-weight:600;letter-spacing:-.02em;line-height:1.5}.project__period{color:var(--muted);font-size:12px;white-space:nowrap}.project__role{color:var(--muted);font-size:13px;margin-top:3px}.project h4{margin-top:17px;margin-bottom:7px;font-size:1rem;line-height:1.5;font-weight:500}.project__description{color:var(--muted);max-width:70ch;line-height:1.75}.project__stack{margin-top:20px;font-size:12px;color:var(--muted);line-height:1.7}.project__links{display:flex;flex-wrap:wrap;gap:22px;margin-top:8px}.project__results{margin-block:23px 4px;padding-block:17px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.metrics>div{display:flex;flex-direction:column}.metrics dd{order:-1;font-size:1.5rem;font-weight:500;line-height:1.25;letter-spacing:-.025em;font-variant-numeric:tabular-nums}.metrics dt{margin-top:5px}.metrics dt,.source-note{font-size:12px;color:var(--muted)}.source-note{margin-top:14px}.project-details{margin-top:16px}.project-details summary{display:flex;justify-content:space-between;align-items:center;gap:20px;min-height:44px;border-bottom:1px solid var(--line);cursor:pointer;font-size:13px;list-style:none}.project-details summary::-webkit-details-marker{display:none}.project-details summary:hover{color:var(--accent)}.details-mark{position:relative;width:12px;height:12px;flex:0 0 12px}.details-mark:after,.details-mark:before{content:"";position:absolute;top:50%;left:0;width:12px;height:1px;background:currentColor}.details-mark:after{transform:rotate(90deg)}details[open] .details-mark:after{transform:rotate(0)}.project-details__body{padding:22px 0 4px}.project-details__body>div+div{margin-top:18px}.project-details__body h5{font-size:14px;font-weight:600;margin-bottom:5px}.project-details__body p{color:var(--muted);font-size:14px;line-height:1.8}.experience-list{list-style:none;padding:0}.experience-row{display:grid;grid-template-columns:150px minmax(0,1fr);-moz-column-gap:32px;column-gap:32px;padding-block:23px;border-bottom:1px solid var(--line)}.experience-row:first-child{padding-top:0}.experience-row__period{font-size:12px;color:var(--muted);padding-top:4px}.experience-row h3{font-size:16px;line-height:1.5;font-weight:650}.experience-row__role{font-size:14px;margin-top:3px}.experience-row__summary{color:var(--muted);font-size:13px;margin-top:5px;line-height:1.7}.tools-section{padding-top:32px}.tools-section>h3{font-size:16px;font-weight:600;margin-bottom:18px}.tools-list>div{display:grid;grid-template-columns:115px minmax(0,1fr);gap:20px;margin-top:10px;font-size:13px;line-height:1.75}.tools-list dt{font-weight:550}.research-intro,.tools-list dd{color:var(--muted)}.research-intro{max-width:65ch;line-height:1.8}.publications{margin-top:28px}.publication{padding-block:23px;border-top:1px solid var(--line)}.publication__venue{color:var(--muted);font-size:12px;margin-bottom:8px}.publication h3{font-size:1rem;font-weight:500;line-height:1.65;text-wrap:pretty}.publication h3 a{text-decoration:none}.publication h3 a:hover{text-decoration:underline}.publication h3 span{color:var(--accent);white-space:nowrap}.publication__authors{color:var(--muted);font-size:12px;margin-top:8px}.education-list{display:grid;grid-template-columns:1fr 1fr;gap:28px;margin-top:10px;padding-top:24px;border-top:1px solid var(--line)}.education-list h3{font-size:15px;font-weight:600}.education-list p{font-size:13px;margin-top:4px}.education-list .education-list__period{font-size:12px;color:var(--muted)}.contact{padding-bottom:68px}.contact__intro{color:var(--muted);max-width:58ch}.contact__email{display:inline-block;margin-top:19px;min-height:44px;font-size:clamp(1.1rem,2.3vw,1.35rem);letter-spacing:-.015em;overflow-wrap:anywhere}.contact__email,.contact__email:hover{text-decoration:underline}.contact__links{display:flex;align-items:center;flex-wrap:wrap;gap:24px;margin-top:15px}.copy-email{background:transparent;border:0;padding:0}.site-footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:16px;padding-block:24px 40px;border-top:1px solid var(--line);font-size:12px;color:var(--muted)}.site-footer>div{display:flex;gap:28px}.site-footer a{display:inline-flex;align-items:center;min-height:44px;text-decoration:none}.site-footer>span{align-self:center}.resume{max-width:860px;padding-bottom:80px}.resume-toolbar{display:flex;align-items:center;justify-content:space-between;gap:20px;padding-block:32px 48px}.resume-heading h1{font-size:2.1rem;font-weight:550;line-height:1.2;letter-spacing:-.025em}.resume-heading__role{font-size:19px;margin-top:10px}.resume-heading>p:not(.resume-heading__role):not(.resume-summary){color:var(--muted);font-size:14px;margin-top:5px}.resume-heading__links{display:flex;flex-wrap:wrap;gap:4px 20px;margin-top:12px;font-size:12px}.resume-summary{margin-top:22px;color:var(--muted)}.resume-section{margin-top:36px;padding-top:22px;border-top:1px solid var(--line)}.resume-section>h2{font-size:1.2rem;font-weight:550;line-height:1.4;margin-bottom:22px}.resume-job{margin-top:25px}.resume-job__heading{display:flex;justify-content:space-between;gap:20px;align-items:baseline}.resume-job h3{font-size:17px;font-weight:650}.resume-job__heading>p{font-size:12px;color:var(--muted);flex-shrink:0}.resume-job__role{margin-top:2px;font-size:14px}.resume-job ul{margin-block:10px 0;padding-left:18px;font-size:14px;color:var(--muted)}.resume-job li+li{margin-top:5px}.resume-education+.resume-education,.resume-paper+.resume-paper{margin-top:18px}.resume-education h3,.resume-paper h3{font-size:15px;font-weight:550;line-height:1.65}.resume-education p,.resume-paper p{font-size:12px;color:var(--muted);margin-top:3px}@media (max-width:760px){.page-shell{width:calc(100% - 40px)}.site-header{min-height:82px;gap:14px}.brand{font-size:14px}.site-navigation{gap:16px}.site-navigation a{font-size:13px}.intro{padding-block:32px 34px}.intro__about{padding-top:22px;max-width:65ch}.intro__links{gap:12px 22px;margin-top:24px}.intro__links .button{margin-right:2px}.section-layout{padding-block:28px 36px}.section-label{margin-bottom:23px}.project__description{font-size:1rem}.metrics{gap:15px}.experience-row{grid-template-columns:126px minmax(0,1fr);gap:20px}.contact{padding-bottom:44px}.resume-toolbar{padding-block:25px 35px}.resume-job__heading{flex-wrap:wrap;gap:3px 20px}}@media (max-width:600px){.site-header{display:grid;grid-template-columns:1fr 44px;gap:0;padding-top:12px}.brand{grid-column:1;grid-row:1;justify-self:start;font-size:15px}.theme-toggle{grid-column:2;grid-row:1}.site-navigation{grid-column:1/-1;grid-row:2;justify-content:space-between;gap:12px;padding-block:4px}.site-navigation a{min-height:44px}.intro__links{gap:8px 19px}.intro__links .button{flex-basis:100%;justify-content:space-between;margin-bottom:5px}.metrics{gap:8px}.metrics dd{font-size:1.35rem}.experience-row{grid-template-columns:1fr;gap:7px;padding-block:21px}.tools-list>div{grid-template-columns:1fr;gap:2px;margin-top:15px}.education-list{grid-template-columns:1fr;gap:22px}.site-footer{flex-direction:column;padding-bottom:28px;gap:10px}.site-footer>span{align-self:start}.site-footer>div{justify-content:space-between}.resume-toolbar{align-items:flex-start;gap:10px}.resume-heading__links,.resume-toolbar{flex-direction:column}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation:none!important;transition:none!important;scroll-behavior:auto!important}}@page{size:A4;margin:14mm}@media print{:root,html.dark{--paper:#fff;--surface:#fff;--ink:#222;--muted:#444;--line:#bbb;--accent:#222;color-scheme:light}body{font-size:10pt;line-height:1.4}.resume-toolbar,.site-footer,.site-header,.skip-link{display:none!important}.resume.page-shell{width:100%;max-width:none;padding:0}.resume-heading h1{font-size:27pt}.resume-heading__role{font-size:12pt;margin-top:5px}.resume-heading>p:not(.resume-heading__role):not(.resume-summary){font-size:9pt}.resume-heading__links{font-size:8pt;gap:4px 14px;margin-top:8px}.resume-summary{font-size:9.5pt;margin-top:12px}.resume-section{margin-top:19px;padding-top:12px}.resume-section+.resume-section{-moz-column-break-inside:avoid;break-inside:avoid}.resume-section>h2{font-size:16pt;margin-bottom:12px;-moz-column-break-after:avoid;break-after:avoid}.resume-job{margin-top:14px;-moz-column-break-inside:avoid;break-inside:avoid}.resume-job h3{font-size:10.5pt}.resume-job__heading>p,.resume-job__role{font-size:9pt}.resume-job ul{font-size:9pt;margin-top:6px}.resume-job li+li{margin-top:3px}.tools-list>div{font-size:9pt;margin-top:5px;grid-template-columns:105px 1fr;gap:12px}.resume-education,.resume-paper{-moz-column-break-inside:avoid;break-inside:avoid}.resume-education h3,.resume-paper h3{font-size:9.5pt}.resume-education p,.resume-paper p{font-size:8pt}.resume-education+.resume-education,.resume-paper+.resume-paper{margin-top:10px}a{text-decoration:none}}