@font-face{font-family:Pacifico;src:url('site-assets/fonts/pacifico.woff2') format('woff2');font-display:swap;font-style:normal;font-weight:400}
:root{color-scheme:light;--paper:#fafbf9;--ink:#202a31;--muted:#596861;--blue:#285681;--line:#d9e1d7;--soft:#eef3ea;--serif:Georgia,'Times New Roman',serif;--sans:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:16px}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:24px}body{margin:0;background:var(--paper);color:var(--ink);font:400 1rem/1.8 var(--serif);-webkit-font-smoothing:antialiased}a{color:var(--blue);text-decoration:none;text-underline-offset:5px}a:hover{text-decoration:underline}button,input{font:400 1rem/1.6 var(--sans)}button{cursor:pointer}button:disabled{cursor:wait;opacity:.6}a:focus-visible,button:focus-visible,input:focus-visible{outline:2px solid var(--blue);outline-offset:4px}img{display:block;max-width:100%}h1,h2,h3,h4,p,figure{margin:0}h1,h2,h3,h4{font-weight:500;line-height:1.4}p+p{margin-top:12px}[hidden]{display:none!important}.shell{width:min(1140px,100%);margin:auto;padding-inline:42px}.site-header{min-height:108px;display:flex;align-items:center;justify-content:space-between;gap:30px;border-bottom:1px solid var(--line)}.wordmark{font:400 27px/1.7 Pacifico,cursive;color:var(--ink);white-space:nowrap}nav{display:flex;gap:25px;align-items:center;font:400 1rem/1.6 var(--sans)}nav a{color:var(--ink);padding:8px 0}nav a[aria-current]{border-bottom:2px solid #6d8967;color:var(--blue)}.home{padding-top:43px}.intro{display:grid;grid-template-columns:1fr 196px;gap:48px;align-items:start}.eyebrow{font:500 1rem/1.6 var(--sans);letter-spacing:.65px;color:var(--muted)}h1{font-size:56px;line-height:1.4;margin-top:15px}.script-name{font:400 58px/1.6 Pacifico,cursive}.name-cn{font-family:'Songti SC','STSong',serif;font-size:25px;letter-spacing:3px;color:#697771;white-space:nowrap;display:inline-block;margin-left:16px}.position{font-family:var(--sans);font-weight:600;margin-top:17px!important}.affiliation{line-height:1.8;margin-top:10px!important}.affiliation a{color:var(--ink)}.profile-links{display:flex;flex-wrap:wrap;gap:12px 23px;font:400 1rem/1.7 var(--sans);margin:22px 0}.intro-copy{line-height:1.85}.portrait{margin-top:21px}.portrait img{width:196px;height:280px;object-fit:cover;object-position:center 32%;border:7px solid white;box-shadow:0 3px 16px #23352a15;border-radius:3px}.portrait figcaption{text-align:center;color:var(--muted);font:400 1rem/1.7 var(--sans);margin-top:11px}mark{background:linear-gradient(transparent 32%,#f4e6a8 32%,#f4e6a8 93%,transparent 93%);color:inherit;padding:0 .12em;box-decoration-break:clone;-webkit-box-decoration-break:clone}.recruitment{margin-top:33px;border:1px solid #d6dfcf;border-left:4px solid #698760;border-radius:4px;background:var(--soft);padding:23px 25px;display:flex;gap:16px}.recruit-dot{width:8px;height:8px;flex-shrink:0;margin-top:13px;border-radius:50%;background:#648658;box-shadow:0 0 0 5px #64865816}.recruitment h2{font-size:25px}.recruitment p{margin-top:9px}.recruit-mails{display:flex;flex-wrap:wrap;gap:7px 23px;font:400 1rem/1.7 var(--sans);margin-top:14px}.news{margin-top:34px}.news h2{font-size:28px}.news-item{display:grid;grid-template-columns:108px 1fr;gap:22px;align-items:baseline;margin-top:18px}.news-item time{font:500 1rem/1.7 var(--sans);color:#3f6044;background:#e5eddf;border-radius:4px;text-align:center;padding:3px 5px}.major-section{padding-top:44px}.section-heading{display:flex;gap:20px;align-items:baseline}.section-number{font:400 1rem/1.6 var(--sans);color:var(--muted)}.section-heading h1{font-size:43px;margin:0;line-height:1.3;letter-spacing:-.6px}.section-intro{color:var(--muted);margin-top:17px}.research-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:37px 42px;margin-top:34px}.research-grid article{border-top:2px solid var(--line);padding-top:18px}.research-grid article>span{font:400 1rem/1.6 var(--sans);color:var(--muted)}.research-grid h3{font-size:25px;margin-top:11px}.research-grid p{color:var(--muted);margin-top:10px}.publication-toolbar{margin-top:28px}.filters{display:flex;flex-wrap:wrap;gap:9px}.filters button{background:transparent;border:1px solid #c5d0c0;padding:8px 12px;border-radius:4px;color:var(--ink)}.filters button[aria-pressed=true]{background:var(--ink);color:white;border-color:var(--ink)}.filters button:hover{border-color:var(--ink)}.search-label{display:block;margin-top:18px;max-width:450px}.search-label input{width:100%;background:white;border:1px solid #b8c3b8;border-radius:4px;padding:12px 14px;color:var(--ink)}.publication-meta{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px 20px;margin-top:20px;color:var(--muted);font:400 1rem/1.7 var(--sans)}.publication-meta p{margin:0}.publication-group{margin-top:38px}.publication-group>h3{font-size:27px;border-bottom:1px solid var(--line);padding-bottom:13px;display:flex;justify-content:space-between;gap:20px}.publication-group>h3 span{font:400 1rem/1.8 var(--sans);color:var(--muted);padding-top:3px}.group-description{color:var(--muted);margin-top:14px}.publication{display:grid;grid-template-columns:50px 1fr;gap:22px;padding:27px 0;border-bottom:1px solid #e1e8dd}.pub-year{font:500 1rem/1.7 var(--sans);color:var(--muted);padding-top:3px}.publication h4{font-size:21px}.authors{margin-top:9px;color:#55645e}.authors strong{color:var(--ink);font-weight:600;background:linear-gradient(transparent 58%,#f4e6a880 58%)}.venue{font-style:italic;margin-top:5px;color:#40584e}.pub-note{font:400 1rem/1.65 var(--sans);color:var(--muted);margin-top:9px}.paper-links{display:flex;gap:23px;font:500 1rem/1.7 var(--sans);margin-top:12px}.cv-block{margin-top:35px}.cv-block h3{font-size:28px;margin-bottom:17px}.timeline-row{display:grid;grid-template-columns:185px 1fr;gap:22px;margin-top:26px}.date{font:400 1rem/1.8 var(--sans);color:var(--muted);padding-top:3px}.timeline-row h4{font-size:20px}.timeline-row p{margin-top:5px}.muted{color:var(--muted)}.cv-caption{margin-top:-7px!important}.cv-columns{display:grid;grid-template-columns:1fr 1.5fr;gap:45px}.plain-list{padding-left:19px;margin-top:8px}.honors{list-style:none;margin:0;padding:0}.honors li{display:flex;gap:20px;margin-bottom:15px}.honors span{font:400 1rem/1.8 var(--sans);color:var(--muted)}.school-record{display:grid;grid-template-columns:88px 1fr;gap:24px;align-items:start}.school-logo{width:88px;height:88px;object-fit:contain;background:white;padding:4px;border-radius:50%}.team-grid{display:grid;grid-template-columns:1fr 1fr;gap:35px;margin-top:34px}.person{display:grid;grid-template-columns:112px 1fr;gap:24px}.person img{width:112px;height:150px;object-fit:cover;object-position:top;border-radius:4px}.person h3{font-size:29px;margin-top:4px}.person p:not(.eyebrow){margin-top:10px}.person .person-interest{color:var(--muted)}.person a{display:inline-block;margin-top:13px;font-family:var(--sans)}.qq-inline{margin-top:35px;display:flex;gap:25px;align-items:center;padding:25px 29px;background:var(--soft);border-radius:5px}.qq-inline img{object-fit:contain;width:90px;height:100px;filter:url(#qq-soft-edge)}.qq-inline h3{font-size:25px}.qq-inline p{color:var(--muted);margin-top:7px}.contact-section>p{margin-top:19px;color:var(--muted)}.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:35px;margin-top:35px}.contact-grid a{display:block;font:400 1rem/2 var(--sans);overflow-wrap:anywhere}.contact-grid .eyebrow{display:block;margin-bottom:13px}main{min-height:calc(100vh - 360px)}footer{border-top:1px solid var(--line);margin-top:54px!important;padding-top:23px;padding-bottom:35px;color:var(--muted);font:400 1rem/1.8 var(--sans)}.footer-main{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px 24px}.visitor-count{margin-top:20px;display:flex;align-items:center;flex-wrap:wrap;gap:7px 12px;padding-top:19px;border-top:1px dotted var(--line)}.visitor-count strong{color:#416342}.counter-credit{margin-left:auto;color:var(--muted)}.skip-link{position:fixed;top:-100px;background:white;padding:8px 20px;z-index:100}.skip-link:focus{top:10px}.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}#no-results{padding:28px 0;color:var(--muted)}.svg-defs{position:absolute;width:0;height:0;overflow:hidden}
@media(max-width:1000px){.shell{padding-inline:29px}.site-header{flex-wrap:wrap;justify-content:center;gap:8px;padding-top:15px;padding-bottom:15px}.wordmark{margin-right:auto}nav{gap:19px}.intro{grid-template-columns:1fr 165px;gap:30px}.script-name{font-size:49px}.name-cn{display:block;margin-left:0}.portrait img{width:165px;height:242px}.team-grid{grid-template-columns:1fr}.person{grid-template-columns:125px 1fr}.person img{width:125px;height:160px}.contact-grid{grid-template-columns:1fr}.qq-welcome{padding:20px 22px;gap:22px}.qq-copy .eyebrow{letter-spacing:0}.cv-columns{grid-template-columns:1fr 1.2fr}.timeline-row{grid-template-columns:160px 1fr}.school-record{grid-template-columns:70px 1fr;gap:19px}.school-logo{width:70px;height:70px}}
@media(max-width:660px){.shell{padding-inline:21px}.site-header{justify-content:flex-start}.wordmark{font-size:26px}.site-header nav{width:100%;gap:5px 19px;flex-wrap:wrap;justify-content:flex-start}nav a{padding:5px 0}.qq-welcome{margin-top:22px;grid-template-columns:97px 1fr;gap:13px;padding:20px 16px}.qq-stage{height:130px;align-self:start;margin-top:34px}.qq-dog{width:100px;height:130px}.qq-ground{width:80px;left:9px;bottom:0}.qq-copy h2{font-size:27px}.qq-copy .eyebrow{letter-spacing:0}.qq-copy>p:not(.eyebrow){min-height:0}.qq-actions{gap:9px}.qq-actions button{padding:7px 10px}.qq-bottom{gap:9px}.qq-treat{font-size:29px;left:38px;top:69px}.home{padding-top:31px}.intro{display:block;position:relative}.bio>.eyebrow{padding-right:112px;font-size:16px}.bio h1{padding-right:112px;margin-top:12px}.script-name{font-size:38px;line-height:1.55;display:block}.name-cn{font-size:24px;margin-top:5px}.portrait{position:absolute;right:0;top:18px;margin:0;width:101px}.portrait img{width:101px;height:145px;border-width:4px}.portrait figcaption{display:none}.position{margin-top:21px!important}.affiliation{margin-top:11px!important}.profile-links{gap:10px 20px;margin:20px 0}.recruitment{padding:19px 17px;gap:12px}.recruitment h2{font-size:23px}.recruit-mails{overflow-wrap:anywhere}.news-item{grid-template-columns:1fr;gap:12px}.news-item time{justify-self:start;padding:3px 10px}.major-section{padding-top:31px}.section-heading{gap:13px}.section-heading h1{font-size:35px}.research-grid{grid-template-columns:1fr;gap:29px}.publication-group>h3{font-size:25px}.publication{grid-template-columns:1fr;gap:8px}.pub-year{padding:0}.publication h4{font-size:21px}.timeline-row{grid-template-columns:1fr;gap:10px}.school-record{grid-template-columns:64px 1fr;gap:17px}.school-logo{width:64px;height:64px}.cv-columns{grid-template-columns:1fr;gap:0}.person{grid-template-columns:82px 1fr;gap:18px}.person img{width:82px;height:110px}.person h3{font-size:27px}.qq-inline{padding:20px 17px;gap:18px}.qq-inline img{width:63px;flex-shrink:0}.contact-grid a{overflow-wrap:anywhere}.counter-credit{margin-left:0;width:100%}.footer-main{justify-content:flex-start;gap:10px 21px}}
@media(max-width:380px){.qq-welcome{grid-template-columns:1fr}.qq-stage{height:115px;margin-top:0}.qq-dog{width:106px;height:122px}.qq-ground{left:calc(50% - 40px)}.qq-treat{left:45%;top:65px}.qq-copy{text-align:center}.qq-actions,.qq-bottom{justify-content:center}.bio h1{padding-right:100px}.script-name{font-size:34px}.portrait{width:90px}.portrait img{width:90px;height:133px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}.qq-stage.is-eating .qq-treat{opacity:1}}
@media print{nav,.qq-welcome,.filters,.search-label,.visitor-count{display:none!important}.shell{width:100%;padding:0}.site-header{border:0;min-height:60px}.publication,.person,.timeline-row{break-inside:avoid}body{background:white}.publication-group[hidden],.publication[hidden]{display:block!important}.major-section{padding-top:20px}footer{margin-top:20px!important}}
.school-logo{border-radius:4px;padding:0}
@media(max-width:660px){.qq-copy{display:contents}.qq-stage{grid-column:1;grid-row:1/4;margin-top:9px;height:145px}.qq-copy>.eyebrow,.qq-copy>h2,.qq-copy>#qq-status{grid-column:2;margin-top:0}.qq-welcome{gap:6px 14px}.qq-actions{grid-column:1/-1;margin-top:11px;justify-content:center}.qq-bottom{grid-column:1/-1;justify-content:center;margin-top:8px}.qq-actions button{padding:8px 10px}.qq-copy>h2{font-size:25px}}
@media(max-width:380px){.qq-welcome{grid-template-columns:80px 1fr}.qq-dog{width:86px;height:115px}.qq-stage{height:122px}.qq-copy>.eyebrow{text-align:left}.qq-copy>h2,.qq-copy>#qq-status{text-align:left}.qq-ground{left:0}.qq-treat{left:30px;top:62px}}
/* QQ is a jointed vector character: paws, tail, ears and face move separately. */
@font-face{font-family:'Yuji Boku';src:url('site-assets/fonts/yuji-boku-name.ttf') format('truetype');font-display:swap;font-weight:400}
.name-cn{font-family:'Yuji Boku','STKaiti',serif;font-size:38px;color:#35443e;letter-spacing:3px}
body[data-page=home] main{position:relative}.qq-world{position:absolute;inset:0;pointer-events:none;z-index:3}.qq-rover{position:absolute;left:0;top:0;width:158px;pointer-events:none;will-change:transform}.qq-rover-label{display:block;text-align:center;color:#697771;font:400 16px/1.4 var(--serif)}.qq-avatar{width:100%;border:0;background:none;padding:0;display:block;pointer-events:auto;cursor:grab;line-height:0}.qq-facing{display:block}.qq-facing svg{width:100%;height:auto;overflow:visible}.faces-left .qq-facing{transform:scaleX(-1)}.qq-hello{position:relative;display:grid;grid-template-columns:185px 1fr;gap:24px;align-items:center;padding:25px 0 22px;min-height:225px;background:none;border:0}.qq-intro-spacer{height:150px}.qq-hello h2{font-size:29px}.qq-hello p{margin-top:5px;color:var(--muted)}.qq-actions{display:flex;flex-wrap:wrap;gap:8px 20px;margin-top:12px}.qq-actions button{border:0;border-bottom:1px solid #c5cfc3;border-radius:0;background:transparent;color:var(--blue);padding:4px 0}.qq-actions button:hover{border-color:var(--blue)}.qq-bottom{display:flex;flex-wrap:wrap;gap:8px 22px;margin-top:12px;color:var(--muted);font:400 16px/1.7 var(--sans)}#qq-motion{border:0;background:transparent;padding:0;color:var(--muted);text-decoration:underline;text-underline-offset:4px}.qq-tail,.qq-leg,.qq-head,.qq-ear,.qq-eye,.qq-mouth,.qq-tongue{transform-box:fill-box}.qq-tail{transform-origin:85% 85%;animation:tail-wag .8s ease-in-out infinite}.qq-eye{transform-origin:center;animation:eye-blink 5.3s infinite}.qq-leg{transform-origin:50% 8%}.qq-head{transform-origin:42% 85%}.qq-ear{transform-origin:50% 12%}.qq-mouth,.qq-tongue{transform-origin:50% 0}.qq-rover[data-state=walk] .leg-back-near,.qq-rover[data-state=walk] .leg-front-far{animation:paw-step .56s ease-in-out infinite}.qq-rover[data-state=walk] .leg-front-near,.qq-rover[data-state=walk] .leg-back-far{animation:paw-step .56s ease-in-out -.28s infinite}.qq-rover[data-state=walk] .qq-ear{animation:ear-flop .56s ease-in-out infinite}.qq-rover[data-state=walk] .qq-head{animation:head-walk .56s ease-in-out infinite}.qq-rover[data-state=greet] .leg-front-near{animation:paw-wave .55s ease-in-out infinite}.qq-rover[data-state=greet] .qq-tail,.qq-rover[data-state=pet] .qq-tail{animation-duration:.3s}.qq-rover[data-state=pet] .qq-head{animation:head-cuddle 1.1s ease-in-out infinite}.qq-rover[data-state=pet] .qq-eye{animation:none;transform:scaleY(.15)}.qq-rover[data-state=eat] .qq-head{animation:head-nibble .38s ease-in-out infinite}.qq-rover[data-state=eat] .qq-mouth{animation:chew .19s ease-in-out infinite}.qq-rover[data-state=eat] .qq-tongue{animation:chew .19s ease-in-out reverse infinite}.qq-effects{position:absolute;inset:0;pointer-events:none}.qq-effect{position:absolute;left:56%;top:35%;color:#cf8b90;font-size:28px;animation:qq-heart 1.5s ease-out forwards}.qq-food{position:absolute;left:70%;top:66%;font-size:28px;opacity:0;pointer-events:none}.faces-left .qq-food{left:5%}.qq-rover[data-state=eat] .qq-food{animation:snack-disappear 2.2s ease-in-out forwards}.qq-rover.motion-paused *{animation-play-state:paused!important}.qq-rover.motion-paused .qq-effect{display:none}
@keyframes paw-step{0%,100%{transform:rotate(-23deg)}50%{transform:rotate(24deg)}}@keyframes tail-wag{0%,100%{transform:rotate(-15deg)}50%{transform:rotate(18deg)}}@keyframes eye-blink{0%,44%,48%,100%{transform:scaleY(1)}46%{transform:scaleY(.08)}}@keyframes ear-flop{0%,100%{transform:rotate(-6deg)}50%{transform:rotate(7deg)}}@keyframes head-walk{0%,100%{transform:rotate(-2deg)}50%{transform:rotate(3deg)}}@keyframes paw-wave{0%,100%{transform:rotate(-65deg)}50%{transform:rotate(-105deg)}}@keyframes head-cuddle{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(5deg)}}@keyframes head-nibble{0%,100%{transform:rotate(9deg)}50%{transform:rotate(15deg)}}@keyframes chew{0%,100%{transform:scaleY(.6)}50%{transform:scaleY(1.15)}}@keyframes snack-disappear{0%{opacity:0;transform:translateY(15px)}15%,70%{opacity:1}100%{opacity:0;transform:translateY(-8px) scale(.1)}}@keyframes qq-heart{0%{opacity:0;transform:translate(0,0) scale(.7)}20%{opacity:1}100%{opacity:0;transform:translate(var(--drift),-85px) scale(1.2)}}
@media(max-width:660px){.name-cn{font-size:32px}.qq-hello{grid-template-columns:105px 1fr;gap:12px;padding-top:22px;min-height:270px}.qq-intro-spacer{align-self:start;height:120px}.qq-rover{width:105px}.qq-hello h2{font-size:25px}.qq-hello-copy{display:contents}.qq-hello h2,.qq-hello #qq-status{grid-column:2}.qq-intro-spacer{grid-column:1;grid-row:1/3}.qq-actions,.qq-bottom{grid-column:1/-1;justify-content:flex-start;margin-top:3px}.qq-actions{gap:10px 18px}.qq-food{font-size:24px}}
@media print{.qq-world,.qq-hello{display:none!important}}
/* Watercolor frame animation preserves QQ’s photographed face and fluffy coat. */
.qq-rover{width:175px;mix-blend-mode:multiply}.qq-facing{width:100%;aspect-ratio:1;filter:brightness(1.045) saturate(.88)}.qq-sprite{display:block;width:100%;height:100%;background-image:url('site-assets/qq-sprites-v4.png');background-repeat:no-repeat;background-size:400% 500%;background-position:0 0}.qq-avatar{border-radius:50%}.qq-hello{grid-template-columns:190px 1fr;min-height:252px}.qq-rover-label{font-style:italic}.qq-play-actions{display:flex;flex-wrap:wrap;gap:8px 20px;margin-top:8px}.qq-play-actions button{border:0;background:none;padding:2px 0;color:var(--muted);text-decoration:underline;text-decoration-color:#c5cfc3;text-underline-offset:5px}.qq-play-actions button:hover{color:var(--blue)}.qq-butterfly{position:absolute;left:0;top:0;width:38px;height:32px;pointer-events:none}.butterfly-wing{transform-box:fill-box;animation:butterfly-flap .22s ease-in-out infinite alternate}.wing-l{transform-origin:100% 50%}.wing-r{transform-origin:0 50%}@keyframes butterfly-flap{to{transform:scaleX(.2)}}
.icon-links{gap:18px}.icon-links a{display:grid;place-items:center;width:42px;height:42px;color:var(--blue);border-radius:50%;transition:background .15s}.icon-links a:hover{background:#e8eee5}.icon-links svg{width:26px;height:26px}.school-logo{background:transparent;border-radius:0;padding:0}.advisor{font-size:16px}.team-grid{grid-template-columns:1fr;gap:35px}.person{grid-template-columns:112px 1fr;max-width:850px}.person+.person{border-top:1px solid var(--line);padding-top:30px}.person-interest{max-width:660px}
@media(max-width:660px){.qq-rover{width:112px}.qq-hello{grid-template-columns:105px 1fr;min-height:330px}.qq-play-actions{grid-column:1/-1;gap:8px 18px;margin-top:0}.qq-hello .qq-actions,.qq-hello .qq-bottom{margin-top:3px}.qq-butterfly{width:30px}.person{grid-template-columns:82px 1fr}.icon-links{gap:17px}}
.qq-world{mix-blend-mode:multiply}.qq-rover{mix-blend-mode:normal}.team-columns{display:grid;grid-template-columns:1fr;gap:44px;margin-top:34px}.team-group>h2{font-size:29px;border-bottom:1px solid var(--line);padding-bottom:12px}.team-group .team-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:35px;margin-top:25px}.team-group .person{grid-template-columns:88px minmax(0,1fr);gap:20px;max-width:none}.team-group .person+.person{border-top:0;padding-top:0}.team-group .person img{width:88px;height:122px}.team-group .person h3{font-size:27px}
@media(max-width:660px){.team-group .team-grid{grid-template-columns:1fr}.team-group .person{grid-template-columns:78px minmax(0,1fr);gap:17px}.team-group .person img{width:78px;height:109px}}
