:root{--paper:#f2f0e9;--surface:#fffefa;--ink:#1b2a24;--body:#46534a;--muted:#5c695b;--line:#d5d9ce;--green:#43634e;--rust:#944b32;--dark:#1e3026;--ease:cubic-bezier(.2,.7,.2,1);--width:1200px}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:110px}body{margin:0;background:var(--paper);color:var(--body);font:16px/1.7 "Segoe UI",Arial,"Noto Sans SC","PingFang SC","Microsoft YaHei",sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button,input{font:inherit}button,a,input{-webkit-tap-highlight-color:transparent;touch-action:manipulation}button{cursor:pointer}button:disabled{cursor:default}a,button,input,summary{outline-offset:5px}:focus-visible{outline:2px solid var(--rust)}h1,h2,h3,p,figure{margin:0}h1,h2,h3{color:var(--ink);font-weight:500;line-height:1.12;letter-spacing:-.035em}img{display:block;max-width:100%}p+p{margin-top:18px}[hidden]{display:none!important}.wrap{width:min(calc(100% - 96px),var(--width));margin-inline:auto}.mono,.kicker,.meta,.count{font:11px/1.6 Consolas,"SFMono-Regular","Noto Sans SC",monospace;letter-spacing:.04em}.kicker{color:var(--green);margin-bottom:16px}.muted{color:var(--muted)}.arrow{display:inline-block;transition:transform 220ms var(--ease)}a:hover .arrow,button:hover .arrow{transform:translate(3px,-3px)}.inline-link{display:inline-flex;gap:20px;align-items:center;font-size:14px;color:var(--ink);padding-bottom:5px;border-bottom:1px solid #adb8a9;transition:border-color 180ms}.inline-link:hover{border-color:var(--ink)}.button-link{display:inline-flex;align-items:center;justify-content:center;gap:25px;min-height:48px;padding:12px 20px;background:var(--ink);color:var(--surface);font-size:13px;transition:background 180ms}.button-link:hover{background:var(--green)}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.skip-link{position:fixed;top:-80px;left:20px;z-index:100;background:var(--ink);color:#fff;padding:12px 20px}.skip-link:focus{top:10px}
#header{position:sticky;top:0;background:#f2f0e9f5;backdrop-filter:blur(14px);z-index:30;border-bottom:1px solid var(--line)}.nav{height:82px;display:flex;align-items:center;gap:34px}.brand{margin-right:auto;display:flex;align-items:baseline;gap:12px;color:var(--ink)}.brand-name{font-size:23px;font-weight:650;letter-spacing:-.055em}.brand-cn{font-size:12px;font-weight:450;color:#73806e}.nav-links{display:flex;align-items:center;gap:32px;height:100%}.nav-links>a{font-size:13px;display:flex;align-items:center;height:100%;position:relative;color:#56634f}.nav-links>a:after{content:"";position:absolute;bottom:21px;left:0;width:0;height:1px;background:var(--green);transition:width 200ms var(--ease)}.nav-links>a:hover:after,.nav-links>a[aria-current="page"]:after{width:100%}.nav-links>a[aria-current="page"]{color:var(--ink)}.lang{display:flex;gap:9px;align-items:center;padding-left:25px;border-left:1px solid var(--line)}.lang button{padding:8px 0;border:0;background:none;font-size:11px;color:#73806b;min-height:40px}.lang button[aria-pressed="true"]{color:var(--ink);font-weight:700}.lang span{font-size:11px;color:#a6afa0}.menu-button{display:none}
.home-intro{display:grid;grid-template-columns:230px 1fr;column-gap:80px;padding:70px 0 64px}.identity{padding-top:9px}.identity-name{font-size:29px;font-weight:500;letter-spacing:-.04em;color:var(--ink);margin-bottom:8px}.identity-location{font-size:12px;color:var(--muted)}.identity-advisory{margin-top:28px;font-size:12px;line-height:1.8}.identity-advisory strong{font-weight:500;color:var(--ink);display:block}.home-intro h1{font-size:clamp(35px,4.25vw,59px);line-height:1.1;max-width:820px;letter-spacing:-.052em}.home-intro h1 span{color:var(--green)}.home-intro .lead{max-width:690px;margin-top:25px;font-size:17px;line-height:1.7}.home-intro .intro-links{display:flex;gap:30px;margin-top:26px}.intro-links a{font-size:12px}.section-bar{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--line);padding:19px 0 23px}.section-bar h2{font:12px/1.6 Consolas,"Noto Sans SC",monospace;letter-spacing:.055em}.section-bar>a{font-size:12px}
.feature{display:grid;grid-template-columns:310px minmax(0,1fr);gap:48px;background:var(--dark);color:#dae1d4;padding:40px}.feature .kicker{color:#bdc7a9;font-size:10px;margin-bottom:23px}.feature h2{font-size:35px;line-height:1.14;color:#f2f0e7;max-width:300px}.feature-copy>p:not(.kicker){font-size:14px;line-height:1.85;color:#c4cfbe;margin-top:22px}.feature-copy .resource-links{margin-top:25px}.feature .inline-link{color:#e3d4b7;border-color:#778572;font-size:12px}.feature-copy .meta{font-size:10px;color:#abb79f;margin-top:21px}.feature-copy{align-self:center}.viewer{min-width:0}.viewer-heading{display:flex;justify-content:space-between;align-items:center;color:var(--body);font-size:10px;margin-bottom:10px;gap:15px}.feature .viewer-heading{color:#c4cfbe}.comparison{position:relative;overflow:hidden;aspect-ratio:2/1;background:#d5d7ce;--reveal:50%;isolation:isolate}.comparison img{position:absolute;inset:0;width:100%;height:100%;object-fit:fill;pointer-events:none}.comparison .original{z-index:1;clip-path:inset(0 calc(100% - var(--reveal)) 0 0)}.compare-line{position:absolute;top:0;bottom:0;left:var(--reveal);width:2px;background:#fff;z-index:3;pointer-events:none}.compare-line:after{content:"↔";position:absolute;top:50%;left:0;transform:translate(-50%,-50%);display:grid;place-items:center;border-radius:50%;width:35px;height:35px;background:#fff;color:#1b2a24;font-size:17px;box-shadow:0 1px 10px #0002}.comparison input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;z-index:4;cursor:ew-resize}.comparison:focus-within{outline:2px solid #b7d0a5;outline-offset:5px}.image-label{position:absolute;top:12px;z-index:2;color:white;background:#17261cbb;padding:4px 9px;font:10px/1.5 Consolas,"Noto Sans SC",monospace;pointer-events:none}.image-label.before{left:12px}.image-label.after{right:12px}.viewer-controls{display:flex;gap:8px;align-items:center;margin-top:12px}.sample-button{width:49px;height:32px;padding:0;border:2px solid transparent;background:#fff;overflow:hidden;transition:opacity 180ms,border-color 180ms;opacity:.52}.sample-button img{width:100%;height:100%;object-fit:cover}.sample-button[aria-pressed="true"]{border-color:#e6ddbc;opacity:1}.sample-button:hover{opacity:1}.viewer-caption{font-size:10px;line-height:1.65;color:#b1bfa8;margin-top:15px;max-width:560px}.viewer-caption a{text-decoration:underline;text-underline-offset:3px}.compare-hint{font-size:10px;color:#bdc9b5;margin-left:auto;padding-left:10px;line-height:1.5;text-align:right}.home-work{padding-bottom:90px}.work-list{margin-top:30px}.work-row{display:grid;grid-template-columns:36px 1fr 240px 28px;align-items:start;gap:22px;padding:28px 5px;border-bottom:1px solid var(--line);transition:background 200ms,padding 200ms}.work-row:hover{background:#e8eadf;padding-inline:14px}.work-row .count{color:#64705a;padding-top:6px}.work-row h3{font-size:25px;line-height:1.25}.work-row p{font-size:13px;line-height:1.7;margin-top:8px;max-width:640px}.row-tags{font-size:11px;color:#5d6b54;padding-top:8px;line-height:1.8}.row-arrow{font-size:22px;color:var(--green)}.all-work{display:flex;justify-content:flex-end;padding-top:25px}.all-work a{font-size:13px}.home-background{display:grid;grid-template-columns:230px 1fr;gap:80px;padding:54px 0 74px;border-top:1px solid var(--line)}.home-background h2{font-size:24px}.home-background p{font-size:19px;max-width:760px;line-height:1.7;color:var(--ink)}.home-background .inline-link{margin-top:21px;font-size:12px}
.page-heading{padding:65px 0 55px;border-bottom:1px solid var(--line);display:grid;grid-template-columns:230px 1fr;gap:80px;align-items:end}.page-heading h1{font-size:clamp(44px,5.6vw,74px);line-height:1.02}.page-heading p{font-size:18px;max-width:740px}.work-layout{display:grid;grid-template-columns:190px 1fr;gap:65px;padding:45px 0 85px;align-items:start}.work-index{position:sticky;top:120px;display:grid;gap:5px}.work-index>a{font-size:12px;padding:9px 0;color:#66725c;line-height:1.6;display:grid;grid-template-columns:24px 1fr}.work-index>a:hover,.work-index>a[aria-current="location"]{color:var(--ink)}.work-index>a[aria-current="location"]:before{content:"";position:absolute;left:-14px;margin-top:8px;width:4px;height:4px;background:var(--rust);border-radius:50%}.work-index .count{font-size:9px;padding-top:1px;color:#67725e}.work-entry{padding-bottom:42px;margin-bottom:42px;border-bottom:1px solid var(--line);scroll-margin-top:110px}.work-entry:last-child{margin-bottom:0;padding-bottom:0;border:0}.entry-top{display:flex;justify-content:space-between;gap:20px;margin-bottom:17px}.entry-top .kicker{margin:0;font-size:10px}.entry-top .count{color:var(--muted)}.work-entry h2{font-size:32px;line-height:1.2;max-width:780px}.work-description{font-size:16px;line-height:1.85;margin-top:20px;max-width:760px}.tags{list-style:none;display:flex;flex-wrap:wrap;gap:5px 18px;padding:0;margin:19px 0 0;color:#5b6d52;font-size:11px}.tags li:before{content:"/";margin-right:8px;color:#9da992}.resource-links{display:flex;align-items:center;flex-wrap:wrap;gap:14px 25px;margin-top:22px}.resource-links .inline-link{font-size:12px}.work-entry .viewer{background:var(--dark);padding:27px;margin-top:30px}.work-entry .viewer-heading{color:#c4cfbe}.figure-details{margin-top:22px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.figure-details summary{display:flex;justify-content:space-between;align-items:center;gap:20px;cursor:pointer;padding:16px 0;list-style:none;font-size:12px;color:var(--ink)}.figure-details summary::-webkit-details-marker{display:none}.figure-details summary:after{content:"+";font-size:22px;font-weight:300;transition:transform 200ms}.figure-details[open] summary:after{transform:rotate(45deg)}.figure-details .diagram{padding:20px;background:#fff;margin-bottom:18px}.figure-details .diagram img{width:100%;height:auto}.figure-details figcaption{font-size:11px;line-height:1.7;margin-top:15px;color:var(--muted)}.project-number{display:inline-flex;align-items:center;gap:15px}
.about-layout{display:grid;grid-template-columns:230px 1fr;gap:80px;padding:52px 0 60px}.about-aside{padding-top:3px}.about-photo{width:190px;height:190px;border-radius:4px;object-fit:cover}.about-aside .meta{margin-top:18px}.about-aside .advisory{font-size:12px;line-height:1.8;margin-top:27px}.advisory strong{font-weight:500;color:var(--ink);display:block}.bio p{font-size:18px;line-height:1.8;max-width:770px}.bio .profile-files{margin-top:30px;border-top:1px solid var(--line);padding-top:22px}.profile-files h2{font-size:13px;letter-spacing:0;margin-bottom:14px}.file-links{display:flex;flex-wrap:wrap;gap:14px 25px}.file-links a{font-size:12px;color:var(--green);text-decoration:underline;text-underline-offset:4px}.background-section{display:grid;grid-template-columns:230px 1fr;gap:80px;padding:36px 0 46px;border-top:1px solid var(--line)}.background-section>h2{font-size:22px}.experience-row{display:grid;grid-template-columns:100px 1fr;gap:25px;padding-bottom:28px;margin-bottom:27px;border-bottom:1px solid var(--line)}.experience-row:last-child{border:0;margin:0;padding-bottom:0}.experience-row h3{font-size:19px;line-height:1.3}.experience-row .date{font:11px/1.7 Consolas,"Noto Sans SC",monospace;padding-top:5px;color:var(--muted)}.experience-row .focus{font-size:12px;color:var(--rust);margin-top:8px}.experience-row .description{font-size:14px;line-height:1.8;margin-top:12px}.institution-en{display:block;font-size:11px;line-height:1.7;margin-top:7px;color:var(--muted)}.experience-row .school{font-size:12px;line-height:1.8;margin-top:13px}.toolset{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,1fr);gap:20px;font-size:13px;color:var(--ink)}.toolset li{padding-bottom:15px;border-bottom:1px solid var(--line)}.about-page{padding-bottom:45px}
#contact{background:var(--dark);color:#d4decd;padding-top:48px}.contact-main{display:grid;grid-template-columns:230px 1fr;gap:80px;padding-bottom:42px}.contact-main h2{font-size:25px;color:#eceddf}.contact-main .email{font-size:clamp(23px,3vw,36px);line-height:1.3;color:#e3d6b9;letter-spacing:-.03em;display:inline-flex;gap:28px}.contact-links{display:flex;align-items:center;flex-wrap:wrap;gap:25px;margin-top:24px;color:#c2d0b6;font-size:12px}.copy-email{border:0;border-bottom:1px solid #73816b;color:#c2d0b6;background:transparent;padding:3px 0;font-size:12px}.copy-email:hover{color:#f2f0e7}.contact-bottom{border-top:1px solid #526048;display:flex;justify-content:space-between;gap:20px;padding-block:20px;font-size:10px;color:#b5c2a9}.contact-bottom a{font-size:10px}.page-enter{animation:enter 420ms var(--ease) both}@keyframes enter{from{opacity:.2;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}
html[lang="zh-CN"] h1,html[lang="zh-CN"] h2,html[lang="zh-CN"] h3{letter-spacing:.015em}html[lang="zh-CN"] .home-intro h1{font-size:clamp(35px,4.1vw,55px);line-height:1.28}html[lang="zh-CN"] .lead{line-height:1.9}html[lang="zh-CN"] .work-description{line-height:1.95}html[lang="zh-CN"] .kicker{letter-spacing:.08em}html[lang="zh-CN"] .feature h2{font-size:32px;line-height:1.3}html[lang="zh-CN"] .work-row h3{font-size:23px}
@media(min-width:1600px){:root{--width:1300px}.home-intro{padding-top:82px;padding-bottom:78px}.feature{grid-template-columns:340px 1fr;gap:60px;padding:45px}.feature h2{font-size:39px}}
@media(max-width:1050px){.wrap{width:calc(100% - 64px)}.home-intro,.home-background,.page-heading,.about-layout,.background-section,.contact-main{grid-template-columns:190px 1fr;gap:45px}.feature{grid-template-columns:250px 1fr;gap:30px;padding:30px}.feature h2{font-size:30px}.work-row{grid-template-columns:30px 1fr 160px 20px;gap:15px}.work-row h3{font-size:23px}.work-layout{grid-template-columns:150px 1fr;gap:35px}.about-photo{width:165px;height:165px}.sample-button{width:39px;height:29px}.compare-hint{font-size:9px}.feature-copy>p:not(.kicker){font-size:13px}.feature-copy .meta{font-size:9px}.home-intro h1{font-size:46px}}
@media(max-width:760px){.wrap{width:calc(100% - 44px)}.nav{height:70px;gap:23px}.nav-links{gap:21px}.lang{padding-left:20px}.home-intro{grid-template-columns:1fr;gap:25px;padding:40px 0}.identity{display:flex;gap:16px;align-items:center;flex-wrap:wrap;padding:0}.identity-name{font-size:24px;margin:0}.identity-location{font-size:11px}.identity-advisory{display:none}.home-intro h1{font-size:44px;max-width:620px}.home-intro .lead{font-size:16px;max-width:560px;margin-top:21px}.home-intro .intro-links{margin-top:20px}.feature{grid-template-columns:1fr;gap:25px;padding:28px}.feature-copy{display:grid;grid-template-columns:1fr 1fr;gap:0 30px}.feature-copy .kicker{grid-column:1/-1;margin-bottom:14px}.feature h2{font-size:29px;max-width:300px}.feature-copy>p:not(.kicker){margin-top:0}.feature-copy .resource-links{margin-top:18px}.feature-copy .meta{margin-top:18px}.viewer-heading{font-size:10px}.sample-button{width:45px;height:31px}.work-row{grid-template-columns:24px 1fr 20px;gap:15px;padding:25px 0}.row-tags{display:none}.work-row h3{font-size:24px}.work-row p{font-size:13px}.home-work{padding-bottom:55px}.home-background{grid-template-columns:1fr;gap:21px;padding:35px 0 50px}.home-background p{font-size:17px}.page-heading{grid-template-columns:1fr;gap:22px;padding:42px 0 35px}.page-heading h1{font-size:55px}.page-heading p{font-size:16px}.work-layout{grid-template-columns:1fr;padding-top:30px;gap:30px}.work-index{position:static;display:flex;overflow-x:auto;gap:20px;border-bottom:1px solid var(--line);padding-bottom:13px}.work-index a{min-width:150px;max-width:180px;font-size:10px;grid-template-columns:20px 1fr;padding:0}.work-index>a[aria-current="location"]:before{display:none}.work-entry h2{font-size:31px}.work-description{font-size:15px}.work-entry .viewer{padding:23px}.about-layout{grid-template-columns:1fr;gap:30px;padding-top:35px}.about-aside{display:grid;grid-template-columns:105px 1fr;gap:10px 25px;align-items:center}.about-photo{width:105px;height:105px;grid-row:1/3}.about-aside .meta{margin:0;align-self:end}.about-aside .advisory{margin:0;align-self:start;font-size:11px}.bio p{font-size:16px}.background-section{grid-template-columns:1fr;gap:25px;padding-block:30px}.experience-row{grid-template-columns:86px 1fr;gap:18px}.experience-row h3{font-size:18px}.toolset{font-size:12px}.contact-main{grid-template-columns:1fr;gap:25px}.contact-main .email{font-size:30px}.contact-main h2{font-size:22px}html[lang="zh-CN"] .home-intro h1{font-size:40px}}
@media(max-width:480px){html{scroll-padding-top:90px}.wrap{width:calc(100% - 36px)}.nav{height:64px;gap:14px}.brand-name{font-size:22px}.brand-cn{display:none}.nav-links{position:absolute;top:64px;inset-inline:0;height:auto;padding:15px 18px 22px;background:var(--paper);border-bottom:1px solid var(--line);display:none;gap:0}.nav-links.open{display:flex;flex-direction:column;align-items:stretch}.nav-links a{height:47px;font-size:17px}.nav-links a:after{display:none}.lang{border:0;padding:0;gap:8px}.menu-button{display:flex;order:3;width:38px;height:40px;background:none;border:0;align-items:center;justify-content:center;gap:5px;flex-direction:column}.menu-button span{width:19px;height:1px;background:var(--ink);transition:transform 180ms}.menu-button[aria-expanded="true"] span:first-child{transform:translateY(3px) rotate(45deg)}.menu-button[aria-expanded="true"] span:last-child{transform:translateY(-3px) rotate(-45deg)}.home-intro{padding:31px 0 34px;gap:24px}.home-intro h1{font-size:35px;letter-spacing:-.045em;line-height:1.14}.home-intro .lead{font-size:14px;line-height:1.8;margin-top:19px}.home-intro .intro-links{gap:24px}.section-bar{padding-block:15px 18px}.section-bar h2{font-size:10px}.section-bar>a{font-size:10px}.feature{padding:22px 18px;gap:23px;margin-inline:-18px}.feature-copy{display:block}.feature-copy .kicker{font-size:9px;margin-bottom:15px}.feature h2{font-size:32px;max-width:320px}.feature-copy>p:not(.kicker){font-size:13px;margin-top:16px}.feature-copy .meta{display:none}.feature-copy .resource-links{margin-top:17px;gap:20px}.feature .inline-link{font-size:11px}.sample-button{width:36px;height:27px}.viewer-controls{gap:6px}.compare-hint{max-width:95px;font-size:9px}.viewer-caption{font-size:9px}.image-label{font-size:9px;top:8px;padding:3px 6px}.image-label.before{left:8px}.image-label.after{right:8px}.work-row{gap:10px;grid-template-columns:21px 1fr 18px;padding:23px 0}.work-row h3{font-size:21px;line-height:1.3}.work-row p{font-size:12px}.row-arrow{font-size:18px}.work-row:hover{padding-inline:0}.home-work{padding-bottom:40px}.home-background h2{font-size:22px}.home-background p{font-size:16px}.page-heading h1{font-size:48px}.page-heading p{font-size:15px}.page-heading{padding-block:35px 30px}.work-entry h2{font-size:28px}.work-description{font-size:14px;line-height:1.85}.entry-top .kicker{font-size:9px}.tags{font-size:10px;gap:4px 13px}.work-entry .viewer{padding:19px 15px;margin-inline:-18px}.figure-details .diagram{padding:12px}.figure-details figcaption{font-size:10px}.work-entry{margin-bottom:33px;padding-bottom:33px}.about-layout{padding-block:29px 35px}.bio p{font-size:15px;line-height:1.85}.experience-row{grid-template-columns:1fr;gap:10px}.experience-row .date{font-size:10px}.experience-row h3{font-size:18px}.experience-row .description{font-size:13px}.toolset{grid-template-columns:1fr 1fr;gap:16px;font-size:12px}.contact-main .email{font-size:25px;gap:18px}.contact-main h2{font-size:22px}.contact-links{gap:22px;font-size:11px}.copy-email{font-size:11px}.contact-bottom{font-size:9px;gap:15px}.contact-bottom a{font-size:9px}html[lang="zh-CN"] .home-intro h1{font-size:32px;line-height:1.35}html[lang="zh-CN"] .feature h2{font-size:29px}html[lang="zh-CN"] .work-row h3{font-size:21px}}
.experience-role{font-size:12px;color:var(--muted);margin-top:6px}.viewer-controls{flex-wrap:wrap}.viewer-caption{font-size:12px}.viewer-heading{font-size:12px}.sample-button{width:44px;height:40px;flex:0 0 44px}.compare-hint{font-size:11px}.figure-details figcaption{font-size:12px}
@media(max-width:480px){.sample-button{height:44px}.compare-hint{flex-basis:100%;max-width:none;margin:3px 0 0;padding:0;text-align:left}.viewer-caption{font-size:12px;line-height:1.75}.viewer-heading{font-size:11px;align-items:start}.viewer-heading .mono{font-size:10px;white-space:nowrap}.image-label{font-size:10px}.figure-details figcaption{font-size:12px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}::view-transition-old(root),::view-transition-new(root){animation:none!important}}
@media print{#header,.intro-links,.viewer-controls,.comparison input,.compare-hint,.copy-email,.work-index{display:none!important}.wrap{width:100%}.home-intro,.about-layout,.background-section,.work-layout{display:block;padding:20px 0}.identity{margin-bottom:20px}.feature{background:#fff;color:#111;border:1px solid #aaa;display:block}.feature h2,.feature p,.feature .kicker,.feature .meta{color:#111!important}.feature .viewer{margin-top:20px}.home-intro h1{font-size:35px}.work-entry{break-inside:avoid}.page-enter{animation:none}#contact{background:#fff;color:#111}#contact h2,#contact a{color:#111}.contact-main{display:block}.about-photo{width:100px;height:100px}.work-row{break-inside:avoid}}

.feature :focus-visible,.viewer :focus-visible,#contact :focus-visible{outline-color:#e4edcf}
