:root{--blue:#1d5a87;--ink:#202a31;--muted:#63717b;--line:#e1e6ea}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:95px}body{margin:0;background:white;color:var(--ink);font:15px/1.75 Arial,Helvetica,sans-serif}a{color:var(--blue);text-decoration:none}a:hover{text-decoration:underline}button,input,select{font:inherit}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--blue);outline-offset:4px}.academic-header{position:sticky;top:0;z-index:5;display:flex;justify-content:flex-end;gap:30px;padding:19px max(30px,calc((100vw - 1180px)/2));background:rgba(255,255,255,.97);border-bottom:1px solid var(--line)}nav{display:flex;gap:22px;align-items:center;font-size:12px;flex-wrap:wrap}nav a{color:#46545e}.language{display:flex;gap:5px}.language button{border:0;padding:3px 5px;background:transparent;color:#75828b;font-size:11px;cursor:pointer}.language button[aria-pressed=true]{color:var(--blue);font-weight:bold;border-bottom:2px solid var(--blue)}.academic-layout{display:grid;grid-template-columns:238px minmax(0,1fr);gap:65px;max-width:1180px;padding:50px 30px;margin:auto}.profile{align-self:start;position:sticky;top:105px;font-size:12px;color:#5a6872;line-height:1.65}.profile img{width:205px;height:260px;object-fit:cover;object-position:50% 15%;display:block}.profile h1{font-size:25px;line-height:1.2;font-weight:600;letter-spacing:-.5px;color:var(--ink);margin:22px 0 10px}.profile p{margin:12px 0}.profile .position{font-size:14px;color:var(--ink)}.profile-email{display:block;font-size:12px;margin-top:20px;overflow-wrap:anywhere}.profile-links{display:flex;flex-wrap:wrap;gap:8px 17px;font-size:12px;margin-top:16px}.academic-section{padding:0 0 42px;margin:0 0 10px}.academic-section>h2{font-size:24px;line-height:1.3;color:#263c4b;font-weight:500;margin:0 0 23px;padding-bottom:12px;border-bottom:1px solid var(--line)}.academic-section>p{margin:0 0 18px}h3{font-size:16px;line-height:1.5;margin:0 0 12px;font-weight:600}p{margin:0 0 14px}ul{padding-left:23px;margin:4px 0 22px}li{padding-left:3px;margin:3px 0}.group-heading{font-size:12px;color:#6c7982;text-transform:uppercase;letter-spacing:1.2px;margin:0 0 23px;font-weight:500}.software-heading{padding-top:15px}.project{display:grid;grid-template-columns:235px minmax(0,1fr);gap:26px;margin:0 0 30px;padding:0 0 27px;border-bottom:1px solid #edf0f2}.project figure{margin:0}.project img{width:100%;height:154px;object-fit:contain;background:#f5f8fa;border:1px solid #e5ebef;display:block}.project figcaption{font-size:9px;color:var(--muted);margin-top:7px;line-height:1.5}.project p{font-size:13px;line-height:1.7;margin:0 0 10px}.project h3{color:var(--blue);margin-bottom:9px}.project .role{font-size:11px;color:#5e6d77}.project-link{font-size:12px}.funding-top{display:flex;justify-content:space-between;gap:25px}.funding-top h3{max-width:440px}.funding-amount{font-size:21px;color:var(--blue);white-space:nowrap;line-height:1.3}.funding-entry p{font-size:13px;margin-bottom:8px}.funding-entry .small{font-size:11px;color:var(--muted)}.funding-entry a{font-size:12px}.award-entry{display:grid;grid-template-columns:53px 1fr;gap:17px}.year{font-size:13px;color:var(--muted);padding-top:2px}.award-entry p{font-size:13px}.award-entry a{font-size:12px}.pub-toolbar{display:flex;gap:15px;flex-wrap:wrap;align-items:end;font-size:11px;margin-bottom:13px}.pub-toolbar label{display:flex;flex-direction:column;gap:5px}.pub-toolbar label:first-child{flex:1;min-width:200px}.pub-toolbar input,.pub-toolbar select{border:1px solid #cdd7df;background:white;padding:7px 9px;border-radius:3px;font-size:11px;min-width:0;max-width:100%}.pub-toolbar>a{padding:7px 0}.fine{font-size:10px;color:var(--muted)}.paper{display:grid;grid-template-columns:45px 1fr;gap:17px;padding:17px 0;border-bottom:1px solid #edf0f2}.paper h3{font-size:14px;font-weight:500;margin:3px 0 7px;line-height:1.6}.pub-year{font-size:12px;color:var(--muted);padding-top:3px}.pub-kind{font-size:8px;letter-spacing:.8px;text-transform:uppercase;color:#73818c}.authors{font-size:11px;color:#596772;margin:0 0 4px}.venue{font-size:11px;font-style:italic;color:#596772;margin:0 0 4px}.text-link{font-size:11px}.teaching-items article{display:grid;grid-template-columns:20px 1fr;gap:15px;margin:0 0 24px}.teaching-items h3{font-size:15px;margin:0 0 8px}.teaching-items p{font-size:13px;margin:0}.index{color:#7d8b94;font-size:10px;padding-top:4px}footer{border-top:1px solid var(--line);padding:20px 0;font-size:10px;color:var(--muted)}.skip{position:fixed;top:-100px;background:white;padding:10px;z-index:10}.skip:focus{top:5px}[hidden]{display:none!important}
@media(max-width:1050px){.academic-layout{grid-template-columns:200px minmax(0,1fr);gap:35px;padding:35px 25px}.profile img{width:185px;height:240px}.academic-header{padding:16px 25px;gap:15px}nav{gap:15px;font-size:11px}.project{grid-template-columns:180px minmax(0,1fr);gap:20px}.project img{height:135px}}
@media(max-width:760px){html{scroll-padding-top:115px}.academic-header{padding:12px 18px;gap:10px;align-items:start;justify-content:space-between}nav{gap:8px 15px;font-size:10px}.language{flex-shrink:0}.academic-layout{display:block;padding:26px 20px}.profile{position:static;display:grid;grid-template-columns:125px 1fr;gap:0 22px;margin-bottom:40px}.profile>a:first-child{grid-row:1/7}.profile img{width:125px;height:175px}.profile h1{font-size:23px;margin:3px 0 7px}.profile p{font-size:11px;margin:4px 0}.profile .position{font-size:12px}.profile-email{margin:9px 0 0;font-size:10px}.profile-links{grid-column:1/-1;margin-top:17px;gap:9px 20px;font-size:11px}.academic-section>h2{font-size:23px}.academic-section{padding-bottom:28px}.academic-section>p,li{font-size:14px}.project{grid-template-columns:1fr;gap:13px}.project img{height:190px}.project h3{font-size:16px}.funding-top{display:block}.funding-amount{display:block;margin-bottom:13px;font-size:23px}.pub-toolbar label:first-child{flex-basis:100%}.paper{gap:10px;grid-template-columns:35px 1fr}.award-entry{grid-template-columns:40px 1fr;gap:10px}.profile-links a{white-space:nowrap}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}@media print{.academic-header,.pub-toolbar{display:none}.profile{position:static}.academic-layout{padding:0;gap:25px}.project,.paper{break-inside:avoid}.academic-section{padding-bottom:20px}}
.academic-header{gap:17px;padding-left:25px;padding-right:25px}nav{gap:16px}.global-motion,.motion-toggle{font-size:10px;color:var(--blue);background:white;border:1px solid #d4dfe7;border-radius:3px;padding:4px 7px;cursor:pointer;white-space:nowrap}.project-tools{display:flex;flex-wrap:wrap;gap:12px;align-items:end;border:1px solid var(--line);background:#f8fafc;padding:14px}.project-tools label{font-size:11px;display:flex;flex-direction:column;gap:5px;flex:1;min-width:140px}.project-tools input,.project-tools select{min-width:0;max-width:100%;font-size:12px;border:1px solid #cbd6df;background:white;border-radius:3px;padding:8px}.project-tools button,.topic-actions button,.print-controls button{font-size:11px;border:1px solid #cbd6df;background:white;color:var(--blue);padding:8px 12px;cursor:pointer;border-radius:3px}.topic-actions{display:flex;gap:8px;flex-wrap:wrap}.topic-actions button:hover{background:#eaf2f8}.project details{font-size:12px;margin-top:13px}.project summary{color:var(--blue);cursor:pointer}.project details p{margin-top:10px;font-size:12px}.course-list{margin-bottom:30px}.course{display:flex;gap:25px;justify-content:space-between;padding:15px 0;border-bottom:1px solid var(--line)}.course h4,.career-row h4{font-size:14px;margin:0 0 5px}.course p,.career-row p{font-size:13px;margin:0}.course>span{font-size:11px;color:var(--muted);white-space:nowrap}.supervision-stats{background:#edf4f8;border-left:3px solid var(--blue);padding:14px 17px;font-size:14px}.small{font-size:11px;color:var(--muted)}.career-row{display:grid;grid-template-columns:130px 1fr;gap:20px;padding:15px 0;border-bottom:1px solid var(--line)}.career-date{font-size:11px;color:var(--muted)}#cv>h3{margin-top:25px}.cv-actions{margin:10px 0}.animated-concept svg{display:block;width:100%;height:155px;background:#f5f8fb;border:1px solid var(--line)}.moving-vehicle{offset-path:path('M110 90H430C520 90 520 215 430 215H110C20 215 20 90 110 90Z');offset-rotate:auto;animation:vehicle-motion 14s linear infinite}.vehicle-b{animation-delay:-7s}.network-pulse{transform-origin:280px 150px;animation:network-pulse 2.5s ease-out infinite}.energy-flow{display:flex;gap:8px;padding:5px 0}.energy-flow span{height:3px;background:#327ca6;flex:1;animation:energy-flow 1.8s ease-in-out infinite}.energy-flow span:nth-child(2){animation-delay:.3s}.energy-flow span:nth-child(3){animation-delay:.6s}.motion-paused *{animation-play-state:paused!important}.latest-news{background:#f5f8fb;border:1px solid #e3ebf1;padding:18px;margin-top:25px}.latest-news h3{font-size:14px}.latest-news a{font-size:12px}.latest-news-item{font-size:12px;margin-bottom:9px}.latest-news-item time{color:var(--muted);font-size:10px;margin-right:10px}.standalone{max-width:930px;margin:35px auto;padding:0 25px}.standalone h1{font-size:30px}.standalone h2{margin-top:30px}.print-controls{display:flex;justify-content:space-between;margin-bottom:30px}.news-tools{display:flex;gap:12px;flex-wrap:wrap;padding:15px 0;margin:20px 0;border-bottom:1px solid var(--line)}.news-tools input,.news-tools select{border:1px solid #cbd6df;padding:9px;border-radius:3px;max-width:100%}.news-card{border-bottom:1px solid var(--line);padding:23px 0}.news-card h2{font-size:20px;margin:8px 0;font-weight:500}.news-card p{font-size:14px;white-space:pre-line;overflow-wrap:anywhere}.news-card time,.news-meta{font-size:11px;color:var(--muted)}.news-tag{font-size:10px;text-transform:uppercase;letter-spacing:1px;color:var(--blue);margin-right:12px}.news-card a{font-size:12px}.standalone header{display:flex;justify-content:space-between;gap:20px}.standalone .language{align-items:center}
@keyframes vehicle-motion{to{offset-distance:100%}}@keyframes network-pulse{0%{transform:scale(.7);opacity:1}100%{transform:scale(1.7);opacity:0}}@keyframes energy-flow{0%,100%{opacity:.2;transform:scaleX(.65)}50%{opacity:1;transform:scaleX(1)}}
@media(max-width:760px){.academic-header{gap:7px;padding:10px 12px;flex-wrap:wrap}nav{gap:6px 12px;flex:1}.global-motion{font-size:9px}.course{gap:15px}.career-row{grid-template-columns:1fr;gap:5px}.project-tools label{min-width:120px}.animated-concept svg{height:auto}.standalone{padding:0 20px}.news-tools input{width:100%}}
@media(prefers-reduced-motion:reduce){.moving-vehicle,.network-pulse,.energy-flow span{animation:none!important}.vehicle-a{offset-distance:20%}.vehicle-b{offset-distance:70%}.network-pulse{opacity:.5}}
@media print{.print-controls,.project-tools,.motion-toggle,.global-motion,.topic-actions{display:none!important}.standalone{max-width:none;margin:0;padding:0}.career-row,.course{break-inside:avoid}.standalone h1{margin-top:0}.academic-section>h2{break-after:avoid}}
.figure-zoom{position:relative;border:0;background:white;padding:0;display:block;width:100%;cursor:zoom-in;text-align:center}.figure-zoom img{display:block;width:100%;height:190px;object-fit:contain;background:#fff;border:1px solid #e5e9ed}.zoom-hint{position:absolute;right:7px;bottom:7px;background:rgba(255,255,255,.92);border:1px solid #d9e3eb;padding:0 6px;color:var(--blue);font-size:13px}.project figure .figure-zoom img{height:190px;background:white}.project figcaption{font-size:9px;line-height:1.6}.project figcaption a{color:#657785}.concept-demo{border-top:1px solid var(--line);padding-top:10px;margin-top:15px}.concept-demo .animated-concept{max-width:360px;margin-top:12px}.figure-dialog{border:0;border-radius:4px;padding:30px;max-width:min(1100px,94vw);max-height:92vh;box-shadow:0 20px 90px #0006}.figure-dialog::backdrop{background:#12212dd4}.figure-dialog img{display:block;max-width:100%;max-height:74vh;object-fit:contain;margin:auto}.figure-dialog p{font-size:12px;color:var(--muted);margin:16px 0 0}.figure-dialog form{display:flex;justify-content:flex-end;margin:-16px -14px 8px 0}.figure-dialog form button{font-size:25px;line-height:1;background:white;border:0;color:#34566d;cursor:pointer}.research-layout{max-width:1280px;grid-template-columns:220px minmax(0,1fr);gap:60px}.research-layout main>h1{font-size:30px;font-weight:500;margin:0 0 12px}.research-intro{color:var(--muted);font-size:14px;margin-bottom:40px}.research-direction{margin-bottom:40px;border-bottom:1px solid var(--line);padding-bottom:35px}.research-direction>h2{font-size:23px;font-weight:500;color:#2c4659;margin:0 0 19px;line-height:1.35}.direction-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:32px;align-items:start}.direction-copy h3{font-size:16px;margin:0 0 14px;color:#273b49}.direction-copy ul{font-size:13px;line-height:1.8;padding-left:18px;margin:0 0 14px}.direction-copy li{margin-bottom:8px}.paper-links{font-size:12px;line-height:1.9}.paper-links strong{font-weight:400;color:var(--muted)}.direction-figure{margin:0}.direction-figure .figure-zoom img{height:205px}.direction-figure figcaption{font-size:9px;color:var(--muted);line-height:1.65;margin-top:9px}.secondary-figure-link{font-size:11px;border:0;background:none;padding:8px 0 0;color:var(--blue);cursor:pointer}.secondary-figure-link:hover{text-decoration:underline}.past-heading{font-size:14px;font-weight:500;color:#71818c;text-transform:uppercase;letter-spacing:1.4px;padding:20px 0 15px;border-top:1px solid var(--line);margin:20px 0 30px}.research-page-link a{font-size:13px;display:inline-block;border-bottom:1px solid #aac2d5;padding-bottom:4px}
@media(max-width:1100px){.research-layout{grid-template-columns:190px minmax(0,1fr);gap:35px}.direction-layout{grid-template-columns:minmax(0,1fr) 260px;gap:22px}.direction-figure .figure-zoom img{height:180px}}
@media(max-width:850px){.direction-layout{grid-template-columns:1fr}.direction-figure{max-width:500px}.direction-figure .figure-zoom img{height:230px}.research-layout{gap:25px}}
@media(max-width:760px){.research-layout{display:block}.research-direction{margin-bottom:30px;padding-bottom:27px}.direction-figure{max-width:none}.research-layout main>h1{font-size:28px}.research-direction>h2{font-size:23px}.figure-dialog{padding:20px}.project figure .figure-zoom img{height:215px}}
@media print{.zoom-hint,.figure-dialog{display:none}.figure-zoom{cursor:default}.research-direction{break-inside:avoid}}
