:root{--paper:#fafbf9;--ink:#222923;--muted:#667066;--line:#d7dcd4;--accent:#456954;--wash:#edf0e9;font-family:Arial,Helvetica,sans-serif;color:var(--ink);background:var(--paper);font-synthesis:none;text-rendering:optimizeLegibility;scroll-behavior:smooth;scroll-padding-top:28px}
*{box-sizing:border-box}body{margin:0}a{color:inherit;text-decoration:none;text-underline-offset:4px}a:hover{color:var(--accent);text-decoration:underline}a:focus-visible{outline:2px solid var(--accent);outline-offset:5px}::selection{background:#d9e4d8}img{display:block;max-width:100%}p{font-size:16px;line-height:1.65;margin:0 0 18px}h1,h2,h3{font-weight:400;margin:0}h2{font-size:24px;letter-spacing:-.6px}h3{font-size:26px;line-height:1.2;letter-spacing:-.6px}strong{font-weight:600}.page{max-width:1248px;padding:0 56px;margin:auto}.header{display:flex;justify-content:space-between;align-items:center;padding:31px 0;border-bottom:1px solid var(--line);gap:24px}.wordmark{font-size:23px;letter-spacing:-1px}.wordmark span{color:var(--accent);margin-left:6px}.header nav{display:flex;gap:30px;font-size:14px}.hero{display:grid;grid-template-columns:1fr 2.25fr;gap:36px;padding:91px 0 83px}.hero-label{display:flex;flex-direction:column;justify-content:space-between;padding-top:9px}.eyebrow{font-family:'SFMono-Regular',Consolas,'Liberation Mono',monospace;font-size:12px;line-height:1.7;letter-spacing:.045em;color:var(--muted)}.index-mark{font-family:monospace;font-size:12px;color:var(--muted)}h1{font-size:clamp(42px,5.2vw,66px);line-height:1.07;letter-spacing:-3.2px}h1 span{color:var(--accent)}.intro{max-width:570px;color:#566153;margin:26px 0 31px;font-size:18px;line-height:1.55}.hero-meta{display:flex;justify-content:space-between;align-items:end;gap:20px;font-size:14px;line-height:1.65}.hero-meta>span{color:var(--muted)}.hero-meta a{color:var(--ink)}.text-link{white-space:nowrap}.text-link span{margin-left:20px}.section-heading{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--line);padding:24px 0 28px;gap:20px}.featured{display:grid;grid-template-columns:1.08fr 1fr;gap:38px;padding-bottom:40px}.feature-image{background:var(--wash);display:flex;align-items:center;padding:16px;min-height:300px}.feature-image img{width:100%;height:auto;max-height:390px;object-fit:contain;mix-blend-mode:multiply}.featured-copy{padding:7px 0}.paper-meta{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px;flex-wrap:wrap}.distinction{color:var(--accent);font-size:12px;border:1px solid #b9c9b9;padding:4px 8px}.featured h3{font-size:34px;letter-spacing:-1px}.paper-subtitle{margin:10px 0 15px;font-size:17px;line-height:1.4}.summary{color:var(--muted);margin-bottom:18px}.authors{font-size:13px;line-height:1.7;color:var(--muted);margin-bottom:7px}.authors strong{color:var(--ink)}.equal{font-size:12px;color:var(--muted)}.paper-links{display:flex;gap:23px;font-size:14px;margin-top:20px}.paper-links a{border-bottom:1px solid var(--line);padding-bottom:4px}.paper-row{display:grid;grid-template-columns:1fr 2.25fr;gap:36px;padding:35px 0;border-top:1px solid var(--line)}.project-image{background:var(--wash);align-self:start;overflow:hidden}.project-image img{width:100%;height:220px;object-fit:contain;transition:transform .4s ease}.project-image:hover img{transform:scale(1.025)}.venue{font-size:13px;color:var(--muted)}.paper-row .paper-meta{margin-bottom:12px}.paper-row .summary{margin-bottom:12px}.split-section{display:grid;grid-template-columns:1fr 2.25fr;gap:36px;border-top:1px solid var(--line);padding:44px 0;margin-top:14px}.section-label h2{margin-bottom:15px}.updates>div{display:grid;grid-template-columns:90px 1fr;gap:25px;padding:0 0 18px}.updates time{font-size:13px;color:var(--muted);line-height:1.9}.updates p{margin:0}.updates a,.bio a{border-bottom:1px solid #c0cbbd}.portrait{width:168px;height:196px;object-fit:cover;object-position:50% 30%;margin-top:32px;filter:saturate(.8)}.bio p{font-size:17px}.bio .personal{color:var(--muted)}.experience-list>div{position:relative;padding:0 0 21px;margin-bottom:21px;border-bottom:1px solid var(--line)}.experience-list>div:last-child{margin-bottom:0;border-bottom:0;padding-bottom:0}.experience-list h3{font-size:19px;letter-spacing:-.3px;max-width:65%}.experience-list p{font-size:14px;color:var(--muted);margin:7px 0 0}.dates{float:right;font-size:12px;color:var(--muted);line-height:1.8}.tactile{display:grid;grid-template-columns:120px 1fr;gap:24px}.tactile img{width:120px;height:145px;object-fit:cover}.tactile h3{font-size:21px;margin:9px 0 12px}.tactile p{font-size:15px;color:var(--muted)}.service{padding-top:24px;margin-top:18px;border-top:1px solid var(--line)}.service p{margin:8px 0 0}footer{border-top:1px solid var(--line);margin-top:30px;padding:43px 0 26px}.footer-top{display:flex;justify-content:space-between;align-items:end;gap:24px}.footer-top h2{font-size:44px;letter-spacing:-1.5px;margin-top:12px}.email{font-size:18px;border-bottom:1px solid var(--line);padding-bottom:7px}.footer-bottom{display:flex;justify-content:space-between;gap:20px;margin-top:70px;font-size:13px;color:var(--muted)}.footer-bottom>div{display:flex;flex-wrap:wrap;gap:25px}.skip{position:absolute;left:16px;top:-100px;background:var(--paper);padding:15px;z-index:10}.skip:focus{top:10px}
@media(min-width:1500px){.hero{padding-top:115px;padding-bottom:105px}}
@media(max-width:900px){.page{padding:0 30px}.hero{grid-template-columns:1fr 3fr;gap:22px}.hero-meta{align-items:start;flex-direction:column;gap:18px}.featured{gap:25px;grid-template-columns:1fr 1.1fr}.featured h3{font-size:29px}.feature-image{padding:8px;min-height:260px}.paper-row,.split-section{grid-template-columns:1fr 2.4fr;gap:25px}.project-image img{height:180px}.dates{float:none;display:block;margin-bottom:7px}.experience-list h3{max-width:none}.footer-top{align-items:start;flex-direction:column}.tactile{grid-template-columns:1fr}.tactile img{width:100%;height:170px;object-fit:contain;background:var(--wash)}}
@media(max-width:620px){.page{padding:0 22px}.header{padding:24px 0;gap:18px;flex-wrap:wrap}.header nav{gap:22px;font-size:14px}.wordmark{font-size:22px}.hero{display:block;padding:42px 0 45px}.hero-label{margin-bottom:28px}.hero-label br{display:none}.index-mark{display:none}h1{font-size:clamp(36px,8.8vw,54px);letter-spacing:-1.7px}.intro{font-size:17px;margin-top:22px}.hero-meta{font-size:14px}.section-heading{align-items:start;flex-direction:column;gap:9px;padding:22px 0}.featured,.paper-row{grid-template-columns:1fr;gap:23px}.feature-image{min-height:0;padding:16px}.feature-image img{max-height:320px}.featured-copy{padding:0}.featured h3{font-size:30px}.paper-row{padding:28px 0}.project-image img{height:240px}.paper-meta{margin-bottom:13px}.split-section{grid-template-columns:1fr;gap:20px;padding:30px 0}.section-label h2{margin-bottom:5px}.updates>div{grid-template-columns:74px 1fr;gap:16px}.portrait{width:120px;height:140px;margin-top:20px}.about .section-label{display:flex;justify-content:space-between;align-items:start}.about .portrait{margin:0}.bio p{font-size:16px}.tactile{grid-template-columns:1fr}.tactile img{height:210px}.footer-top h2{font-size:38px}.email{font-size:clamp(14px,4.3vw,18px);overflow-wrap:anywhere}.footer-bottom{flex-direction:column;margin-top:40px;gap:23px}.footer-bottom>div{gap:20px}.section-heading .eyebrow{font-size:11px}}
@media(prefers-reduced-motion:reduce){:root{scroll-behavior:auto}*,*::before,*::after{transition:none!important}}

/* Profile-first ordering, followed by highlights, news and publications. */
.profile-intro{display:grid;grid-template-columns:1fr 2.25fr;gap:36px;padding:64px 0 60px}.profile-aside .portrait{width:200px;height:240px;margin:0 0 25px}.profile-copy h1{font-size:54px;letter-spacing:-2px}.profile-tagline{font-size:22px;line-height:1.4;color:var(--accent);margin:15px 0 27px}.profile-copy .bio p{font-size:16px;margin-bottom:15px}.profile-copy .bio .personal{font-size:15px}.profile-links{display:flex;flex-wrap:wrap;gap:25px;font-size:14px;margin-top:25px}.profile-links a{border-bottom:1px solid var(--line);padding-bottom:4px}.highlight-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:25px;padding-bottom:35px}.highlight{display:block}.highlight:hover{text-decoration:none}.highlight-image{background:var(--wash);height:190px;padding:10px;display:flex;align-items:center;justify-content:center;overflow:hidden}.highlight-image img{width:100%;height:100%;object-fit:contain;transition:transform .3s ease}.highlight:hover img{transform:scale(1.025)}.highlight h3{font-size:21px;margin-top:18px;display:flex;justify-content:space-between;gap:10px}.highlight h3 span{font-size:17px}.highlight p{font-size:14px;color:var(--muted);line-height:1.5;margin:9px 0}.highlight .eyebrow{font-size:11px}#publications .section-heading{padding-bottom:0}#publications .paper-row:first-of-type{border-top:0}#news{margin-top:0}
@media(max-width:900px){.profile-intro{grid-template-columns:1fr 2.4fr;gap:25px}.profile-aside .portrait{width:100%;height:auto;aspect-ratio:5/6}.highlight-grid{gap:18px}.highlight-image{height:150px}.highlight h3{font-size:18px}.header nav{gap:20px;flex-wrap:wrap}}
@media(max-width:620px){.profile-intro{grid-template-columns:1fr;padding:35px 0 38px;gap:24px}.profile-aside{display:flex;align-items:center;gap:25px}.profile-aside .portrait{width:105px;height:126px;margin:0}.profile-copy h1{font-size:42px}.profile-tagline{font-size:21px;margin:13px 0 22px}.profile-links{gap:23px}.highlight-grid{grid-template-columns:1fr;gap:28px}.highlight-image{height:220px}.highlight h3{font-size:22px}.highlight p{font-size:16px}.header nav{column-gap:20px;row-gap:14px;font-size:14px}.highlight .eyebrow{font-size:12px}}

.publication-filters{display:flex;gap:8px;margin-top:22px}.publication-filters button{font:inherit;font-size:14px;color:var(--muted);background:transparent;border:1px solid transparent;border-radius:3px;padding:9px 17px;min-height:44px;cursor:pointer}.publication-filters button:hover{color:var(--ink);background:var(--wash)}.publication-filters button[aria-pressed="true"]{color:var(--ink);background:var(--wash);border-color:var(--line)}.publication-filters button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}#publications .paper[hidden],.publication-filters[hidden]{display:none}

.oral{color:#a34518;font-weight:600}.distinction:has(.oral){border-color:#dab39a;background:#fbf0e8}.highlight .oral{font-size:inherit}.research-video{display:block;width:100%;height:100%;object-fit:contain;background:#e9ede7}.highlight-image{height:260px;padding:0}.project-image .research-video{height:220px}.highlight h3 a{display:flex;justify-content:space-between;gap:10px;width:100%}.highlight:has(video):hover{color:var(--ink)}
@media(max-width:900px){.highlight-image{height:210px}.project-image .research-video{height:180px}}
@media(max-width:620px){.highlight-image{height:240px}.project-image .research-video{height:240px}}

/* Highlights follow the original video proportions, with a shared height. */
.highlight-grid{grid-template-columns:minmax(0,1.775147929fr) minmax(0,.844444444fr);align-items:start}
.highlight-image{position:relative;height:auto;aspect-ratio:600/338;background:transparent}
.highlight:last-child .highlight-image{aspect-ratio:608/720}
.highlight-image .research-video{position:absolute;inset:0;width:100%;height:100%;background:transparent}
@media(max-width:620px){.highlight-grid{grid-template-columns:minmax(0,1fr)}.highlight:last-child{width:min(100%,220px)}.highlight-image{height:auto}}

/* Natural publication media inside a consistent text-aligned column. */
#publications .project-image{display:flex;justify-content:center;align-items:flex-start;background:transparent;overflow:visible}
#publications .project-image .research-video{width:100%;height:auto;max-height:260px;object-fit:contain;background:transparent}
@media(max-width:620px){#publications .project-image .research-video{max-height:280px}}

#other-projects .section-heading{padding-bottom:0}#other-projects .paper-row{border-top:0}#other-projects .project-image{background:transparent}#other-projects .project-image img{height:auto;max-height:260px;object-fit:contain}#academic-service p{margin-bottom:0}

#open-source-tools .section-heading{padding-bottom:0}.tool-row{display:grid;grid-template-columns:1fr 2.25fr;gap:36px;padding:35px 0}.tool-heading{display:flex;align-items:baseline;flex-wrap:wrap;gap:12px 18px;margin-bottom:14px}.tool-heading h3{overflow-wrap:anywhere}.coming-soon{font-size:12px;color:var(--muted);border:1px solid var(--line);padding:4px 9px;white-space:nowrap}.tool-row .summary{margin-bottom:0}@media(max-width:900px){.tool-row{grid-template-columns:1fr 2.4fr;gap:25px}}@media(max-width:620px){.tool-row{grid-template-columns:1fr;gap:15px;padding:28px 0}}

.tool-media{display:flex;justify-content:center;align-items:flex-start}.tool-media .research-video{width:100%;height:auto;max-height:260px;background:transparent;object-fit:contain}@media(max-width:620px){.tool-media .research-video{max-height:280px}}

/* Three demos share a height while retaining their native aspect ratios. */
.highlight-grid{grid-template-columns:minmax(0,1.777777778fr) minmax(0,1.775147929fr) minmax(0,.844444444fr)}
.highlight-simduoreal .highlight-image{aspect-ratio:16/9}
@media(max-width:620px){.highlight-grid{grid-template-columns:minmax(0,1fr)}}

.demo-pending{align-items:baseline;gap:12px;flex-wrap:wrap}.demo-link{border-bottom:1px solid var(--line);padding-bottom:4px;font-size:14px;color:var(--ink);cursor:default}.demo-note{font-size:12px;color:var(--muted)}
