@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700;800;900&family=IBM+Plex+Mono:wght@400;500&display=swap');
:root{color-scheme:dark;--bg:#080f20;--panel:#0d1931;--ink:#f5f7ff;--muted:#a3aec7;--blue:#427aff;--line:#26334c;--mono:'IBM Plex Mono',monospace;--font:'DM Sans',system-ui,sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:30px}body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.7 var(--font);overflow-x:clip}a{color:inherit}button{font:inherit}a:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--blue);outline-offset:6px}.shell{max-width:1200px;margin-inline:auto;padding-inline:42px}.skip-link{position:absolute;top:-100px;background:white;color:var(--bg);padding:12px;z-index:100}.skip-link:focus{top:0}.header{min-height:92px;display:flex;align-items:center;gap:55px;border-bottom:1px solid var(--line)}.brand{text-decoration:none;font-weight:900;font-size:25px;letter-spacing:-2px}.brand span{color:var(--blue);font:10px var(--mono);vertical-align:top;margin-left:3px}.header nav{display:flex;gap:27px}.header nav a,.github{font-size:12px;text-decoration:none;color:var(--muted)}.header nav a:hover,.github:hover{color:white}.github{margin-left:auto;color:white}.hero{padding-block:38px 44px}.hero-topline{display:flex;justify-content:space-between;font:10px var(--mono);color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.hero-topline i{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--blue);margin-right:9px}.hero h1{font-size:clamp(82px,12.5vw,170px);letter-spacing:-.075em;line-height:.9;font-weight:800;margin:55px 0 42px}.hero h1 span{color:var(--blue)}.hero-bottom{display:grid;grid-template-columns:1fr 1fr;gap:90px;border-top:1px solid var(--line);padding-top:29px}.hero-statement{font-size:22px;line-height:1.4;margin:0}.hero-statement em{font-style:normal;color:var(--muted)}.hero-summary p{color:var(--muted);font-size:15px;margin:0 0 19px;max-width:480px}.action{display:inline-flex;align-items:center;justify-content:space-between;gap:34px;font-size:13px;text-decoration:none;border-bottom:1px solid var(--blue);padding:10px 0}.action span{font-size:21px;color:var(--blue)}.action:hover{color:#98b8ff}.interaction-note{font:10px/1.7 var(--mono);color:var(--muted);margin:42px 0 0}.interaction-note span{color:#7789ab}.section{padding-block:68px;border-top:1px solid var(--line)}.section-label{display:grid;grid-template-columns:1fr 2fr;gap:50px;margin-bottom:38px;align-items:start}.section-label>span,.kicker{font:10px/1.7 var(--mono);text-transform:uppercase;letter-spacing:.055em;color:var(--muted)}.section-label>span{padding-top:7px}.section-label h2{font-size:clamp(29px,3.4vw,46px);font-weight:600;letter-spacing:-.045em;line-height:1.1;margin:0}.section-label>p{font-size:24px;margin:0;letter-spacing:-.025em}.degree-list{margin-left:calc((100% - 50px)/3 + 50px)}.degree{display:grid;grid-template-columns:110px 1fr;gap:20px;padding:25px 0;border-top:1px solid var(--line)}.degree-abbr{color:var(--blue);font-size:29px;font-weight:500}.degree .kicker{margin:0 0 9px}.degree h3{font-size:24px;letter-spacing:-.025em;font-weight:500;margin:0}.degree-detail{font-size:14px;color:var(--muted);margin:8px 0}.degree a{font-size:12px;text-decoration:none;color:#9bbbff}.research-layout{display:grid;grid-template-columns:1.2fr .8fr;gap:65px;align-items:center}.blue{color:#82a7ff}.research-copy h2{font-size:clamp(26px,3vw,38px);line-height:1.17;letter-spacing:-.035em;font-weight:600;margin:17px 0 24px}.research-copy>p:not(.kicker){font-size:14px;color:var(--muted)}.tags{display:flex;flex-wrap:wrap;gap:17px;font:10px var(--mono);color:var(--muted);margin:25px 0}.filled{background:var(--blue);padding:13px 19px;color:white;border:0;margin-top:5px}.filled span{color:white}.filled:hover{background:#598aff;color:white}.research-figure{background:var(--panel);padding:26px;border:1px solid var(--line);position:relative}.figure-label,.research-figure>p{font:9px/1.6 var(--mono);color:var(--muted)}.research-figure svg{width:100%;display:block;margin:20px 0}.grid path{stroke:#314260;stroke-width:1;fill:none;opacity:.6}.signal{stroke:var(--blue);fill:none;stroke-width:2}.model-node{border:1px solid var(--blue);padding:14px;display:flex;justify-content:space-between;align-items:center}.model-node span{font:9px var(--mono);color:var(--muted)}.model-node strong{font-size:18px;font-weight:500}.figure-outputs{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}.figure-outputs div{font-size:11px;border-top:1px solid var(--line);padding-top:12px}.figure-outputs small{display:block;font:9px var(--mono);color:var(--blue);margin-bottom:7px}.research-figure>p{margin:25px 0 0;color:#8898b8}.project{display:grid;grid-template-columns:55px 1fr 300px;gap:35px;padding:36px 0;border-top:1px solid var(--line)}.project-number{font:12px var(--mono);color:var(--blue);padding-top:4px}.project-content .kicker{margin:0}.project h3{font-size:28px;letter-spacing:-.04em;line-height:1.2;font-weight:500;margin:14px 0}.project-content>p:not(.kicker){font-size:14px;color:var(--muted);max-width:490px}.text-link{font-size:13px;text-underline-offset:6px;text-decoration-color:var(--blue)}.project-preview{background:var(--panel);padding:23px;align-self:center;border:1px solid var(--line);aspect-ratio:1.3}.project-preview>span,.project-preview>small{font:8px var(--mono);color:var(--muted)}.project-preview svg{width:100%;margin-top:25px}.project-preview svg path{stroke:var(--blue);stroke-width:2;fill:none}.project-preview circle{stroke:#94b3ff;stroke-width:2;fill:var(--panel)}.project-preview>small{display:block;margin-top:12px}.evidence-preview>div{font:55px Georgia;color:var(--blue);margin-top:20px;line-height:.5}.evidence-preview p{font:18px/1.3 var(--font);color:var(--ink);letter-spacing:-.02em;margin:8px 0 25px}.about-columns{display:grid;grid-template-columns:1fr 1fr;gap:50px;margin-left:calc((100% - 50px)/3 + 50px)}.about h3{font-size:17px;font-weight:500;margin:0 0 12px}.about-columns p{font-size:13px;color:var(--muted)}.gallery-placeholder{border:1px dashed var(--line);padding:25px 10px;font:9px var(--mono);color:var(--muted);text-align:center}.contact{padding-block:70px 90px;border-top:1px solid var(--line)}.contact h2{font-size:clamp(35px,5vw,66px);font-weight:500;letter-spacing:-.045em;line-height:1.1;margin:30px 0}.contact h2 span{color:#8b9bb9}footer{border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:20px;font:10px var(--mono);color:var(--muted);padding-block:28px 85px}footer a{text-decoration:none}
/* Raw photograph, silhouette crop, and independent body joint. */
.mini-me{position:fixed;left:78vw;top:64vh;width:300px;height:390px;transform:scale(var(--avatar-scale,.58));transform-origin:top left;z-index:30;cursor:grab;touch-action:none;user-select:none;outline:none;will-change:left,top}.mini-me.is-dragging{cursor:grabbing}.head-frame{position:absolute;top:0;left:0;width:300px;height:225px;z-index:3;transform:rotate(var(--head-angle,0deg));transform-origin:50% 90%;filter:drop-shadow(0 4px 3px #0006)}.head-photo{display:block;width:300px;height:225px;object-fit:fill;pointer-events:none;clip-path:path('M70 0 L236 0 Q263 24 270 59 Q290 67 297 101 Q304 142 290 166 Q278 191 241 186 Q225 216 193 225 L108 225 Q76 217 61 186 Q25 195 10 166 Q-3 130 7 100 Q10 76 26 61 Q39 25 70 0 Z')}.googly-eye{position:absolute;top:35%;width:51px;height:41px;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(ellipse at 36% 28%,#fff 40%,#e9e9e6 78%,#b5b5b0);border:2px solid #635c53;box-shadow:1px 3px 4px #0008;overflow:hidden}.eye-left{left:34%;rotate:-5deg}.eye-right{left:65%;rotate:6deg;width:49px;height:44px}.pupil{display:block;width:22px;height:24px;border-radius:50%;background:#121722;position:absolute;left:50%;top:50%;transform:translate(calc(-50% + var(--px,0px)),calc(-50% + var(--py,0px)))}.pupil:after{content:'';position:absolute;width:5px;height:5px;border-radius:50%;background:white;top:4px;left:5px}.body-rig{position:absolute;top:214px;left:0;width:300px;height:170px;transform-origin:150px 0;transform:rotate(var(--body-angle,0deg));z-index:2}.tiny-body{position:absolute;left:42px;top:-27px;width:215px;height:190px;overflow:visible}.tiny-body path,.tiny-body circle{stroke:#0a0f19;stroke-width:7;stroke-linecap:round;stroke-linejoin:round}.arms{transform-origin:110px 62px;transform:rotate(var(--arm-angle,0deg))}.arms path{fill:none;stroke-width:15}.arms circle{fill:#d49d7a}.torso{fill:#2a55bc}.collar,.hem{fill:none;stroke:#153376!important;stroke-width:5!important}.pocket{fill:#8bafff;stroke-width:4!important}.legs{position:absolute;left:92px;top:114px;width:116px;display:flex;justify-content:space-between;z-index:0}.legs span{height:37px;width:42px;background:#232b3c;border:3px solid #0a0f19;border-radius:7px 7px 17px 17px;position:relative;transform-origin:50% 0;transform:rotate(var(--leg-angle,0deg))}.legs span:last-child{transform:rotate(calc(-1 * var(--leg-angle,0deg)))}.legs span:after{content:'';position:absolute;width:46px;height:14px;background:#d2d4dc;border:3px solid #0a0f19;bottom:-9px;left:-6px;border-radius:50% 50% 8px 8px}.held-boomerang{position:absolute;left:215px;top:78px;width:50px;height:50px;transform:rotate(-35deg);z-index:4}.held-boomerang path,.flying-boomerang path{fill:#e8b970;stroke:#5c381e;stroke-width:2;stroke-linejoin:round}.boomerang-stripe{fill:none!important;stroke:#2a55bc!important;stroke-width:5!important}.flying-boomerang{position:fixed;width:37px;height:37px;z-index:45;pointer-events:none;filter:drop-shadow(0 3px 3px #0005)}.flying-boomerang[hidden],.avatar-bubble[hidden]{display:none}.grab-tag{position:absolute;top:235px;left:95px;background:#162543;color:white;border:1px solid #48699b;padding:4px 8px;font:11px var(--mono);z-index:5;opacity:0;transition:opacity .15s}.mini-me:hover .grab-tag,.mini-me:focus-visible .grab-tag{opacity:1}.mini-me:focus-visible{outline:2px dashed var(--blue);outline-offset:4px}.avatar-bubble{position:fixed;z-index:40;width:245px;max-width:calc(100vw - 24px);padding:15px 17px;background:#f1f5ff;color:#101d36;border-radius:12px;box-shadow:0 8px 35px #0006;pointer-events:none}.avatar-bubble:after{content:'';position:absolute;left:50%;bottom:-7px;width:15px;height:15px;background:#f1f5ff;transform:rotate(45deg)}.avatar-bubble>span{font:8px var(--mono);text-transform:uppercase;color:#315bb3;letter-spacing:.04em}.avatar-bubble p{font-size:12px;line-height:1.5;margin:8px 0 0}
@media(max-width:950px){.shell{padding-inline:30px}.hero h1{font-size:125px}.hero-bottom{gap:40px}.research-layout{gap:30px}.project{grid-template-columns:35px 1fr 230px;gap:20px}.project-preview{padding:17px}.section-label{gap:25px}.degree-list,.about-columns{margin-left:0}}
@media(max-width:650px){.shell{padding-inline:22px}.header{min-height:77px;gap:20px;flex-wrap:wrap;padding-block:16px}.brand{font-size:23px}.header nav{order:3;width:100%;justify-content:space-between;gap:12px}.header nav a{font-size:11px}.github{font-size:11px}.hero{padding-block:30px}.hero-topline{font-size:8px}.hero h1{font-size:clamp(77px,18vw,112px);margin-block:40px 30px}.hero-bottom{grid-template-columns:1fr;gap:20px;padding-top:25px}.hero-statement{font-size:20px}.hero-summary p{font-size:14px}.interaction-note{margin-top:28px;font-size:9px;max-width:280px}.section{padding-block:45px}.section-label{grid-template-columns:1fr;gap:13px;margin-bottom:26px}.section-label h2{font-size:34px}.degree{grid-template-columns:75px 1fr;gap:12px;padding-block:22px}.degree-abbr{font-size:23px}.degree h3{font-size:21px}.degree-detail{font-size:12px}.kicker{font-size:9px}.research-layout{grid-template-columns:1fr;gap:28px}.research-copy h2{font-size:28px}.research-figure{max-width:420px}.project{grid-template-columns:25px 1fr;gap:14px;padding-block:28px}.project-preview{grid-column:2;max-width:330px;width:100%;aspect-ratio:1.6}.project h3{font-size:25px}.project-preview svg{height:125px;margin-top:15px}.about-columns{gap:24px;grid-template-columns:1fr}.contact{padding-block:50px}.contact h2{font-size:40px}.contact .action{font-size:12px}footer{font-size:9px;padding-bottom:90px}.avatar-bubble{width:220px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}
/* Portfolio details and readable alternatives. */
.hero{position:relative}.hero-intro{font-size:clamp(17px,2vw,25px);letter-spacing:-.025em;color:var(--muted);max-width:550px;margin:-13px 0 35px}.hero h1{position:relative;z-index:1}.hero:before{content:'';position:absolute;right:2%;top:120px;width:290px;height:290px;border:1px solid #427aff18;border-radius:50%;box-shadow:0 0 0 50px #427aff05,0 0 0 100px #427aff03;pointer-events:none}.secondary{margin-left:26px;border-color:var(--line)}.profile-strip{display:grid;grid-template-columns:1fr 1fr 1fr;border-top:1px solid var(--line);margin-top:38px;padding-top:20px;gap:24px;font-size:11px;color:var(--muted)}.profile-strip b{display:block;font-size:13px;color:var(--ink);font-weight:500;margin-bottom:2px}.quiet-toggle{margin-left:auto;border:1px solid var(--line);padding:7px 11px;border-radius:4px;background:transparent;color:var(--muted);font-size:11px;cursor:pointer}.header{gap:35px}.github{margin-left:0}.quiet-toggle:hover{color:white;border-color:var(--blue)}button:focus-visible,summary:focus-visible{outline:2px solid #8eb1ff;outline-offset:5px}.header nav a[aria-current]{color:white;text-decoration:underline;text-decoration-color:var(--blue);text-underline-offset:8px}.quiet-mode .mini-me,.quiet-mode .avatar-bubble,.quiet-mode .flying-boomerang{display:none!important}.research-controls{display:flex;gap:8px;margin-top:20px}.research-controls button{border:1px solid var(--line);background:transparent;color:var(--muted);padding:8px 10px;font-size:11px;cursor:pointer}.research-controls button[aria-pressed=true]{background:var(--blue);border-color:var(--blue);color:white}.research-figure .task-explanation{font:12px/1.65 var(--font);color:#c0cee6;min-height:100px}.research-figure[data-active=localization] .figure-outputs>div:last-child,.research-figure:not([data-active=localization]) .figure-outputs>div:first-child{border-color:var(--blue);color:white}.research-figure[data-active=localization] .signal{stroke:#9abaff;stroke-dasharray:4 3}.case-study{border-top:1px solid var(--line);margin-top:27px;max-width:500px}.case-study summary{display:flex;justify-content:space-between;align-items:center;cursor:pointer;list-style:none;font-size:12px;padding:15px 0;color:#a8c3ff}.case-study summary::-webkit-details-marker{display:none}.case-study summary span{font-size:20px}.case-study[open] summary span{transform:rotate(45deg)}.case-study dl{margin:0 0 5px}.case-study dt{font:10px var(--mono);text-transform:uppercase;letter-spacing:.04em;color:#e5ebff;margin-top:18px}.case-study dd{font-size:13px;color:var(--muted);margin:7px 0 0}.project:hover .project-number{color:#c6d7ff}.project-preview{transition:border-color .25s,transform .25s}.project:hover .project-preview{border-color:#427aff66;transform:translateY(-3px)}.personal-note{border-left:2px solid var(--blue);padding-left:16px;margin-top:25px!important;color:#cfdaee!important}.profile-actions{margin-top:35px;padding-top:24px;border-top:1px solid var(--line);margin-left:calc((100% - 50px)/3 + 50px)}.profile-actions>span{display:block;font:10px var(--mono);color:var(--muted);margin-bottom:9px}.profile-actions button{border:0;background:none;color:var(--ink);font-size:15px;cursor:pointer;padding:6px 0;border-bottom:1px solid var(--blue)}.profile-actions button span{margin-left:22px;color:var(--blue)}.profile-actions p{font-size:11px;color:var(--muted)}.contact-copy{color:var(--muted);max-width:520px;font-size:14px}.mini-me{height:450px}.head-frame,.head-photo{height:286px}.head-photo{object-fit:contain;clip-path:polygon(0% 22%,30% 0%,70% 0%,100% 29%,87% 38%,84% 47%,86% 99%,74% 99%,73% 89%,67% 100%,32% 100%,24% 89%,23% 78%,18% 75%,15% 64%,17% 54%,19% 40%,0% 30%)}.head-frame{transform-origin:50% 90%}.googly-eye{top:50%;width:44px;height:34px}.eye-left{left:38%;rotate:-3deg}.eye-right{left:61%;width:44px;height:34px;rotate:3deg}.pupil{width:20px;height:22px}.body-rig{top:274px}.grab-tag{top:295px}
@media(max-width:950px){.header{gap:22px}.profile-actions{margin-left:0}.hero:before{width:200px;height:200px;right:8%;top:150px}}
@media(max-width:650px){.header{gap:12px}.quiet-toggle{font-size:10px;margin-left:auto}.hero:before{display:none}.hero-intro{margin-top:-5px;font-size:18px;max-width:260px}.profile-strip{grid-template-columns:1fr 1fr;gap:15px;margin-top:28px}.profile-strip>span:last-child{grid-column:1/-1}.secondary{margin-left:18px}.research-controls button{flex:1}.profile-actions button{font-size:14px}.research-figure .task-explanation{min-height:0}}
@media print{ @page{margin:16mm} :root{color-scheme:light}body{background:white!important;color:#152036!important;font:10pt/1.5 Arial,sans-serif}.header,.mini-me,.avatar-bubble,.flying-boomerang,.interaction-note,.quiet-toggle,.profile-actions,.project-preview,.research-figure,.hero-topline,.hero-statement,footer,.skip-link{display:none!important}.shell{padding:0;max-width:none}.hero:before{display:none}.hero{padding:0 0 12pt}.hero h1{font-size:32pt;line-height:1;letter-spacing:-1px;margin:0 0 10pt}.hero h1 br{display:none}.hero h1 span:before{content:' '}.hero h1 span{color:#1d4bc0}.hero-intro{margin:0 0 10pt;font-size:12pt}.hero-bottom{display:block;padding-top:8pt}.hero-summary p{max-width:none;font-size:10pt}.hero-summary .action,.profile-strip{display:none}.section{padding:14pt 0;border-color:#ccd3df}.section-label{display:block;margin-bottom:10pt}.section-label>span{font-size:8pt}.section-label h2{font-size:18pt}.section-label h2 br{display:none}.section-label h2 br:after{content:' '}.degree-list,.about-columns{margin-left:0}.degree{padding:8pt 0;break-inside:avoid;grid-template-columns:65pt 1fr}.degree h3{font-size:13pt}.degree-abbr{font-size:16pt}.research-layout{display:block}.research-copy h2{font-size:17pt}.research-copy>p:not(.kicker),.project-content>p:not(.kicker){font-size:10pt}.project{grid-template-columns:25pt 1fr;padding:14pt 0;break-inside:avoid}.project h3{font-size:16pt}.project-content>p{max-width:none!important}.tags{margin:10pt 0}.case-study{display:none}.about-columns{gap:25pt}.about-columns p{font-size:10pt}.personal-note{display:none}.contact{padding:12pt 0}.contact h2{display:none}.contact-copy{font-size:10pt}.action,.filled{background:none;color:#1d4bc0;padding:0;font-size:10pt}a[href^=https]:after{content:' (' attr(href) ')';font:8pt Arial,sans-serif;overflow-wrap:anywhere;color:#344d74}.action span{display:none}p,.kicker,.tags,.degree-detail,.hero-summary p,.contact-copy{color:#344158!important}}
/* Project screenshots and academic affiliations. */
.section-meta>span{display:block;font:10px/1.7 var(--mono);color:var(--muted);letter-spacing:.055em;padding-top:7px}.section-meta>a{display:block;width:190px;margin-top:25px}.university-logo{display:block;width:100%;height:auto}.lab-affiliation{display:flex;align-items:center;gap:15px;width:fit-content;margin-top:20px!important;color:var(--muted)!important}.lab-affiliation img{width:84px;height:auto}.lab-affiliation span{font-size:11px}.project{grid-template-columns:32px minmax(0,1fr) minmax(0,44%);gap:28px;padding-block:42px;align-items:start}.project-content>p:not(.kicker){max-width:none}.project-media{min-width:0;align-self:start;margin:0;border:1px solid var(--line);background:var(--panel);overflow:hidden}.preview-link{display:block;text-decoration:none;transition:border-color .2s}.preview-link:hover{border-color:var(--blue)}.preview-link img{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover}.preview-link>span{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;font-size:11px;color:var(--muted)}.preview-link b{color:#82a7ff;font-size:17px;font-weight:400}.project .project-scope{font-size:12px!important;color:#8d9aba!important}.shape-demo video{display:block;width:100%;aspect-ratio:16/9;background:#000;object-fit:contain}.shape-demo figcaption{display:flex;justify-content:space-between;gap:14px;font-size:11px;padding:13px 16px 0}.shape-demo figcaption span{color:var(--muted)}.video-description{font-size:11px;color:var(--muted);padding:0 16px 14px;margin:5px 0 0}.case-study p{font-size:12px;color:var(--muted)}.case-study a{font-size:12px;text-underline-offset:4px}.shape-presentation{grid-column:2/-1;border-top:1px solid var(--line);padding-top:18px}.shape-presentation summary{font-size:12px;cursor:pointer;display:flex;justify-content:space-between;list-style:none}.shape-presentation summary span{color:var(--blue)}.shape-presentation>p{font-size:11px;color:var(--muted)}.presentation-gallery{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:22px}.presentation-gallery figure{margin:0}.presentation-gallery img{display:block;width:100%;height:240px;object-fit:contain;background:#fff}.presentation-gallery figcaption{font-size:11px;color:var(--muted);margin-top:9px}.about-profile{margin-left:calc((100% - 50px)/3 + 50px);font-size:14px;color:var(--muted)}.about-profile>p{margin-top:0;max-width:680px}.profile-facts{margin:25px 0 0}.profile-facts>div{display:grid;grid-template-columns:135px 1fr;gap:20px;border-top:1px solid var(--line);padding:15px 0}.profile-facts dt{color:var(--ink);font-size:12px}.profile-facts dd{margin:0;font-size:12px}.hero:before{opacity:.45}.contact h2{font-size:42px}.project-content .tags{gap:14px}
@media(max-width:950px){.project{grid-template-columns:26px minmax(0,1fr) minmax(0,43%);gap:20px}.about-profile{margin-left:0}.project h3{font-size:25px}.presentation-gallery img{height:200px}}
@media(max-width:650px){.project{grid-template-columns:22px minmax(0,1fr);gap:15px;padding-block:28px}.project-media{grid-column:2;width:100%}.shape-presentation{grid-column:2}.section-meta>a{width:160px;margin-top:18px}.section-label{gap:24px}.presentation-gallery{grid-template-columns:1fr}.presentation-gallery img{height:auto;max-height:300px}.shape-demo figcaption{flex-wrap:wrap;gap:2px}.profile-facts>div{grid-template-columns:1fr;gap:5px}.about-profile{font-size:13px}.contact h2{font-size:34px}}
@media print{.project-media,.shape-presentation{display:none!important}.project{grid-template-columns:25pt 1fr}.about-profile{margin-left:0;font-size:10pt;color:#344158}.profile-facts{margin-top:8pt}.profile-facts dt{color:#152036}.profile-facts dd{font-size:9pt}.university-logo,.lab-affiliation{display:none!important}.section-meta{display:none}.contact h2{display:none}}
/* Original graduation photo: silhouette retains the cap, face, and full visible neck. */
.mini-me{height:494px}.head-frame{left:0;width:300px;height:330.5px}.head-photo{width:300px;height:330.5px;object-fit:contain;clip-path:polygon(0% 28%,43% 0%,53% 0%,98% 32%,84% 42%,82% 48%,82% 60%,85% 90%,81% 94%,75% 91%,75% 69%,78% 61%,77% 57%,73% 55%,71% 71%,69% 84%,71% 92%,61% 100%,38% 100%,26% 91%,25% 80%,24% 72%,20% 68%,16% 62%,17% 56%,20% 54%,19% 43%)}.googly-eye{top:51%;width:44px;height:34px}.eye-left{left:37%;rotate:-3deg}.eye-right{left:60%;width:44px;height:34px;rotate:3deg}.body-rig{top:320px}.grab-tag{top:345px}

/* Light paper palette with multicolour accents; optional navy night mode. */
:root{color-scheme:light;--bg:#faf9f6;--panel:#f0f1f5;--ink:#222739;--muted:#606679;--blue:#365bdc;--line:#dddfe7;--coral:#c74f3e;--green:#227b66;--amber:#a56c12;--tag-bg:#e9eefc;--logo-bg:#0d1931}
:root[data-theme="dark"]{color-scheme:dark;--bg:#111722;--panel:#18212e;--ink:#e7ebf1;--muted:#adb7c6;--blue:#8baaf2;--line:#303b4b;--coral:#e4a18e;--green:#8fc6b3;--amber:#d7b673;--tag-bg:#233149}
.header{gap:30px}.header-controls{margin-left:auto;display:flex;gap:8px;align-items:center}.header .quiet-toggle{margin-left:0}.theme-toggle,.quiet-toggle{border:1px solid var(--line);background:transparent;color:var(--muted);padding:7px 11px;border-radius:4px;font-size:11px;white-space:nowrap;cursor:pointer}.theme-toggle:hover,.quiet-toggle:hover{color:var(--ink);border-color:var(--blue)}.header nav a:hover,.github:hover{color:var(--blue)}.github{color:var(--ink)}.brand span{color:var(--coral)}.hero h1 span{color:var(--coral)}.hero-statement{color:var(--blue)}.hero-statement:first-line{color:var(--green)}.hero-topline i{background:var(--green)}.hero:before{border-color:#365bdc25;box-shadow:0 0 0 45px #e3ba440b,0 0 0 90px #c74f3e07;opacity:1}.profile-strip b{color:var(--ink)}.section-label h2{color:var(--ink)}#education{border-top:3px solid var(--amber)}#thesis{border-top:3px solid var(--coral)}#projects{border-top:3px solid var(--blue)}#about{border-top:3px solid var(--green)}.section-meta>a{background:var(--logo-bg);padding:15px;width:210px;border-radius:4px}.lab-affiliation img{background:var(--logo-bg);padding:8px;width:99px;border-radius:3px}.lab-affiliation span{color:var(--muted)}.blue,.degree a,.action span,.preview-link b,.shape-presentation summary span,.case-study summary span{color:var(--blue)}.degree-abbr{color:var(--amber)}.degree:nth-child(2) .degree-abbr{color:var(--green)}.project-number{color:var(--blue)}.project:first-of-type .project-number{color:var(--green)}.shape-project .project-number{color:var(--coral)}.project .project-scope{color:var(--muted)!important}.tags{gap:8px!important}.tags span{padding:5px 9px;background:var(--tag-bg);color:var(--blue);border-radius:3px}.tags span:nth-child(2){color:var(--green);background:#227b6610}.tags span:nth-child(3){color:var(--coral);background:#c74f3e10}.research-figure>p{color:var(--muted)}.research-controls button[aria-pressed=true]{background:var(--blue);color:white}.grid path{stroke:var(--line)}.filled{background:var(--blue);color:white}.filled span{color:white}.filled:hover{background:var(--ink);color:var(--bg)}.action:hover{color:var(--blue)}.shape-demo figcaption span{color:var(--muted)}.avatar-bubble{background:var(--panel);color:var(--ink);border-color:var(--line)}.avatar-bubble p{color:var(--ink)}.avatar-bubble span{color:var(--blue)}.profile-actions button{color:var(--ink)}.profile-actions button span{color:var(--blue)}
@media(max-width:950px){.header{gap:17px}.header nav{gap:18px}.header-controls{gap:6px}}
@media(max-width:650px){.header{gap:12px}.header-controls{gap:6px}.theme-toggle,.quiet-toggle{padding:6px 8px;font-size:10px}.header nav{order:3}.section-meta>a{width:185px}.hero:before{display:none}}
@media print{:root,:root[data-theme="dark"]{--bg:white;--ink:#152036;--muted:#344158;--line:#ccd3df;--blue:#1d4bc0;--coral:#1d4bc0}.header-controls{display:none!important}.section{border-top:1px solid #ccd3df!important}.tags span{background:none;padding:0;color:#344158}.hero h1 span{color:#1d4bc0}}

.case-study summary{color:var(--blue)}.case-study dt{color:var(--ink)}.research-figure .task-explanation{color:var(--muted)}.avatar-bubble:after{background:var(--panel)}.interaction-note span{color:var(--muted)}

/* Graduation portrait, thesis figure carousel, and legible supporting text. */
:root{--muted:#444c5e}.header nav a[aria-current]{color:var(--ink)}.hero:before{display:none}.hero-identity{display:grid;grid-template-columns:minmax(0,1fr) 244px;align-items:center;gap:54px;padding:42px 0}.hero-identity h1{font-size:clamp(78px,12vw,160px);margin:0}.hero-portrait{margin:0;transform:rotate(2deg)}.hero-portrait img{display:block;width:100%;height:auto;border:5px solid white;box-shadow:8px 8px 0 #e5b73e;max-width:244px}.hero-portrait figcaption{font-size:12px;line-height:1.5;color:var(--muted);margin-top:18px}.section-meta>a{background:white;padding:10px;border:1px solid var(--line)}.lab-affiliation img{background:white;border:1px solid var(--line);padding:6px}.university-logo{height:auto}.hero-topline{font-size:11px}.section-label>span,.section-meta>span,.kicker{font-size:12px;line-height:1.6}.header nav a,.github{font-size:13px}.theme-toggle,.quiet-toggle{font-size:12px}.tags{font-size:12px}.degree-detail,.degree a{font-size:14px}.lab-affiliation span{font-size:13px}.project-content>p:not(.kicker),.research-copy>p:not(.kicker),.about-profile{font-size:15px}.project .project-scope{font-size:13px!important}.project-number{font-size:13px}.preview-link>span,.shape-demo figcaption,.video-description,.presentation-gallery figcaption,.shape-presentation>p{font-size:13px}.case-study p,.case-study a,.case-study summary,.shape-presentation summary{font-size:14px}.profile-strip{font-size:13px}.profile-strip b{font-size:14px}.profile-facts dt,.profile-facts dd{font-size:14px}.interaction-note{font-size:12px}.contact-copy{font-size:15px}footer{font-size:12px}.thesis-gallery{min-width:0;border:1px solid var(--line);background:var(--panel);padding:20px}.gallery-header{display:flex;justify-content:space-between;align-items:center;gap:12px;font-size:13px}.gallery-header>span{font-weight:600}.gallery-header p{margin:0;color:var(--muted)}.gallery-sections{display:flex;flex-wrap:wrap;gap:8px;margin:18px 0}.gallery-sections button,.gallery-navigation button{font:13px var(--font);border:1px solid var(--line);padding:9px 12px;background:transparent;color:var(--ink);cursor:pointer}.gallery-sections button[aria-pressed=true]{color:white;background:var(--blue);border-color:var(--blue)}.thesis-slide{margin:0}.thesis-slide[hidden]{display:none}.thesis-slide>a{display:flex;align-items:center;justify-content:center;background:white;height:300px;padding:10px;border:1px solid var(--line)}.thesis-slide img{display:block;width:100%;height:100%;object-fit:contain}.thesis-slide figcaption{min-height:98px;padding:16px 0 8px;font-size:14px;line-height:1.5}.thesis-slide figcaption strong{display:block;font-weight:500}.thesis-slide figcaption span{display:block;font-size:12px;color:var(--muted);margin-top:8px}.gallery-navigation{display:flex;align-items:center;justify-content:space-between;gap:12px;border-top:1px solid var(--line);padding-top:12px}.gallery-navigation button{font-size:20px;padding:2px 13px}.gallery-navigation span{font-size:12px;color:var(--muted)}.gallery-note{font-size:12px;line-height:1.6;color:var(--muted);margin-bottom:0}.tiny-body .grad-sleeve{fill:#282a34;stroke-width:5}.tiny-body .torso{fill:#23252f}.tiny-body .collar{fill:#e6c26e;stroke:#8e6c33!important;stroke-width:4!important}.tiny-body .gown-pleats{fill:none;stroke:#4a4d5b;stroke-width:3}.tiny-body .gown-fold{fill:none;stroke:#aa823e;stroke-width:3}.research-layout{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:45px}
@media(max-width:950px){.hero-identity{grid-template-columns:minmax(0,1fr) 190px;gap:30px}.hero-identity h1{font-size:clamp(72px,12vw,120px)}.header{gap:16px}.header nav{gap:15px}.research-layout{gap:26px}.thesis-slide>a{height:260px}}
@media(max-width:650px){.hero-identity{grid-template-columns:minmax(0,1fr) 108px;gap:14px;padding:30px 0}.hero-identity h1{font-size:clamp(36px,11vw,70px)}.hero-portrait img{border-width:3px;box-shadow:4px 4px 0 #e5b73e}.hero-portrait figcaption{font-size:11px;margin-top:10px}.header nav a,.github{font-size:12px}.theme-toggle,.quiet-toggle{font-size:11px;padding:6px}.research-layout{grid-template-columns:1fr}.hero-topline{font-size:10px}.section-label>span,.section-meta>span,.kicker{font-size:11px}.thesis-gallery{padding:16px}.thesis-slide>a{height:260px}.thesis-slide figcaption{min-height:100px}.gallery-navigation span{font-size:11px}.interaction-note{font-size:11px}.gallery-sections button{font-size:12px}.profile-actions button{font-size:14px}}
@media print{.hero-identity{display:block;padding:0}.hero-identity h1{font-size:32pt}.hero-portrait,.thesis-gallery{display:none}.research-layout{display:block}.kicker,.tags,.section-label>span{font-size:8pt}.project-content>p:not(.kicker),.research-copy>p:not(.kicker),.about-profile,.degree-detail,.profile-facts dt,.profile-facts dd,.contact-copy{font-size:10pt}.project .project-scope{font-size:9pt!important}}
#education{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);column-gap:50px;row-gap:30px}#education .section-label{display:contents}#education .section-meta{grid-column:1;grid-row:1 / span 2;min-width:0}#education .section-label h2{grid-column:2;grid-row:1}#education .degree-list{grid-column:2;grid-row:2;margin-left:0}#education .section-meta>a{display:block;padding:20px;margin-top:26px;max-width:320px}#education .university-logo{display:block;width:100%;max-width:none;height:auto}.education-index{margin-top:24px;max-width:320px}.education-index p{font-size:14px;color:var(--muted)}.education-index a{display:flex;justify-content:space-between;gap:16px;text-decoration:none;font-size:14px;padding:12px 0;border-bottom:1px solid var(--line)}.education-index a span{color:var(--blue)}.handi-gallery{align-self:start;border:1px solid var(--line);background:var(--panel);padding:18px}.handi-slide{margin:18px 0 12px}.handi-slide[hidden]{display:none}.handi-slide>a{display:flex;height:350px;justify-content:center}.handi-slide img{display:block;max-width:100%;width:auto;height:100%;object-fit:contain}.handi-slide figcaption{min-height:48px;font-size:13px;color:var(--muted);text-align:center;padding-top:14px;line-height:1.5}.handi-project .project-number{color:var(--green)}.outdoors{display:grid;grid-template-columns:1fr 2fr;gap:50px;margin-top:38px;padding-top:30px;border-top:1px solid var(--line)}.outdoors-copy h3{font-size:24px;font-weight:500;letter-spacing:-.025em;margin:12px 0}.outdoors-copy p:not(.kicker){font-size:15px;color:var(--muted)}.outdoors-copy .photo-location{font-size:13px!important}.camping-gallery{display:grid;grid-template-columns:1.5fr 1fr;gap:18px}.camping-gallery figure{margin:0;min-width:0}.camping-gallery a{display:block}.camping-gallery img{display:block;width:100%;height:260px;object-fit:cover;border:1px solid var(--line)}.camping-gallery figure:first-child img{object-position:62% center}.camping-gallery figure:last-child img{object-position:center 68%}.camping-gallery figcaption{font-size:12px;color:var(--muted);margin-top:8px}@media(max-width:950px){.outdoors{grid-template-columns:1fr;gap:20px}.handi-slide>a{height:300px}}@media(max-width:650px){#education{display:block}#education .section-label{display:block}#education .section-meta>a{max-width:260px;margin:18px 0}#education .section-label h2{margin:28px 0}.education-index{display:none}#education .degree-list{margin:0}.camping-gallery{grid-template-columns:1fr 1fr;gap:12px}.camping-gallery img{height:230px}.handi-gallery{padding:16px}.handi-slide>a{height:340px}}@media print{#education{display:block}#education .section-label{display:block}#education .section-meta,.education-index,.handi-gallery,.outdoors{display:none}#education .section-label h2{margin-bottom:20px}}
#education .section-meta>a{width:100%}
.publication-list{margin-left:calc((100% - 50px)/3 + 50px)}.publication{display:grid;grid-template-columns:95px minmax(0,1fr);gap:25px;border-top:1px solid var(--line);padding:30px 0}.publication-meta>span{font:22px var(--mono);color:var(--blue)}.publication-meta>p{font-size:12px;line-height:1.5;color:var(--muted);margin:10px 0}.publication h3{font-size:22px;line-height:1.4;letter-spacing:-.025em;font-weight:500;margin:0 0 16px}.publication h3 a{text-decoration:none}.publication h3 a:hover{color:var(--blue)}.publication h3 a span{font-size:18px;color:var(--blue);white-space:nowrap}.publication-authors{font-size:14px;line-height:1.75;color:var(--muted);margin:0 0 12px}.publication-authors strong,.publication-all-authors strong{font-weight:600;color:var(--ink)}.publication-venue{font-size:13px;color:var(--muted);margin:0 0 14px}.publication-doi{display:inline-block;font:12px/1.6 var(--mono);overflow-wrap:anywhere;text-underline-offset:4px;color:var(--blue)}.publication-all-authors{font-size:13px;line-height:1.75;margin-top:18px;color:var(--muted)}.publication-all-authors summary{cursor:pointer;color:var(--ink);width:fit-content}.publication-record{display:inline-block;font-size:13px;color:var(--blue);margin-top:16px;text-underline-offset:4px}.header{gap:32px}.header nav{gap:21px}@media(max-width:950px){.publication-list{margin-left:0}.header nav{gap:16px}}@media(max-width:650px){.header nav{flex-wrap:wrap;gap:9px 17px}.publication{grid-template-columns:1fr;gap:10px}.publication-meta{display:flex;align-items:center;gap:18px}.publication-meta>p{margin:0}.publication h3{font-size:20px}.publication-doi{font-size:11px}}@media print{.publication-list{margin-left:0}.publication{break-inside:avoid;padding:12px 0;grid-template-columns:65px 1fr;gap:15px}.publication h3{font-size:12pt}.publication-authors,.publication-venue{font-size:9pt}.publication-all-authors,.publication-record{display:none}.publication-doi{font-size:8pt}.publication-meta>span{font-size:12pt}.publication-meta>p{font-size:8pt}}

/* Softer accents and readable controls for the default dark palette. */
@media screen{[data-theme="dark"] .filled,[data-theme="dark"] .filled span,[data-theme="dark"] .gallery-sections button[aria-pressed="true"]{color:#111722}[data-theme="dark"] .filled:hover{background:#a3bdf5;color:#111722}[data-theme="dark"] .tags span:nth-child(2){background:#8fc6b314}[data-theme="dark"] .tags span:nth-child(3){background:#e4a18e14}[data-theme="dark"] .hero-portrait img{border-color:#dce1e8;box-shadow:8px 8px 0 var(--amber)}[data-theme="dark"] .thesis-slide>a{background:#e8ebf0}[data-theme="dark"] .theme-toggle,[data-theme="dark"] .quiet-toggle{background:var(--panel)}[data-theme="dark"] a:focus-visible,[data-theme="dark"] button:focus-visible{outline:2px solid var(--blue);outline-offset:4px}}

/* Workshop recording beside its publication; thumbnail loads without a video embed. */
.publication-with-video .publication-content{display:grid;grid-template-columns:minmax(0,1fr) 220px;gap:24px;align-items:start}.publication-video{display:block;text-decoration:none;margin-top:5px}.publication-video-image{display:block;position:relative;overflow:hidden;border:1px solid var(--line);border-radius:4px}.publication-video img{display:block;width:100%;height:auto;aspect-ratio:640/362;object-fit:cover;transition:transform .2s}.publication-video:hover img{transform:scale(1.03)}.video-play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:grid;place-items:center;width:46px;height:46px;border-radius:50%;background:#111722dd;color:#fff;font-size:19px;padding-left:3px}.publication-video strong{display:block;font-size:13px;font-weight:500;color:var(--blue);margin-top:10px}.publication-video>span:last-child{display:block;font-size:12px;color:var(--muted);margin-top:5px}@media(max-width:1100px){.publication-with-video .publication-content{grid-template-columns:1fr}.publication-video{max-width:300px}}@media print{.publication-with-video .publication-content{display:block}.publication-video{display:none}}

.conference-card{min-width:0}.conference-logo{display:block;background:#fff;padding:10px;border-radius:4px;border:1px solid var(--line)}.conference-logo img{display:block;width:100%;height:auto}.conference-location{font-size:13px;line-height:1.6;color:var(--ink);margin:12px 0}.conference-location span{color:var(--muted);font-size:12px}.conference-description{font-size:11px;line-height:1.6;color:var(--muted);margin:12px 0 0}@media(max-width:1100px){.conference-card{max-width:300px}}@media print{.conference-card{display:none}}
