@font-face{font-family:space grotesk;font-style:normal;font-weight:300 700;font-display:swap;src:url(/fonts/space-grotesk-latin.woff2)format("woff2")}@font-face{font-family:inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/inter-latin.woff2)format("woff2")}@font-face{font-family:jetbrains mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/fonts/jetbrains-mono-latin.woff2)format("woff2")}:root{--bg:#f6f8fc;--panel:#ffffff;--fg:#0c1222;--mut:#4f5b70;--rule:rgba(12, 18, 34, 0.12);--glow:#dde6ff;--c1:#0479a3;--c2:#077a54;--c3:#6d4ae8;--edge:0.5;--link:#0567a0;--btn-bg:#0c1222;--btn-fg:#f6f8fc;--display:"Space Grotesk", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Microsoft YaHei", system-ui, sans-serif;--body:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Microsoft YaHei", sans-serif;--mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;color-scheme:light}:root[data-theme=dark]{--bg:#05070d;--panel:#0b1020;--fg:#e9edf5;--mut:#94a0b8;--rule:rgba(148, 160, 184, 0.16);--glow:#10183a;--c1:#38e1ff;--c2:#4ff0b0;--c3:#a78bfa;--edge:0.35;--link:#7fe9ff;--btn-bg:#e9edf5;--btn-fg:#05070d;color-scheme:dark}.c-only{display:none!important}*{box-sizing:border-box}html{font-size:17px;-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--body);line-height:1.6}a{color:var(--link);text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:3px}.wrap{max-width:70rem;margin:0 auto;padding:0 24px}.narrow{max-width:52rem}.mut{color:var(--mut)}.skip{position:absolute;left:-9999px;top:8px;z-index:20;padding:6px 12px;background:var(--btn-bg);color:var(--btn-fg);border-radius:6px}.skip:focus{left:8px}.tag{font-family:var(--mono);font-size:.78rem;color:var(--c1);margin:0 0 12px}.tag::before{content:"// ";color:var(--mut)}header.site{position:absolute;top:0;left:0;right:0;z-index:5}header .bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 28px;padding-top:20px}.logo{display:inline-grid;place-items:center;width:42px;height:42px;border:1.5px solid var(--fg);border-radius:10px;color:var(--fg);font-family:var(--display);font-weight:700;font-size:1rem;letter-spacing:.02em}.logo:hover{border-color:var(--c1);color:var(--c1);text-decoration:none}header .end{display:flex;flex-wrap:wrap;align-items:center;gap:8px 22px}header nav{display:flex;flex-wrap:wrap;gap:6px 24px;font-size:.92rem;font-weight:500}header nav a{color:var(--fg);opacity:.82}header nav a:hover{opacity:1;color:var(--c1);text-decoration:none}header nav a[aria-current=page]{opacity:1;box-shadow:0 2px 0 var(--c1)}.theme{display:inline-grid;place-items:center;width:34px;height:34px;padding:0;border:1px solid var(--rule);border-radius:9px;background:color-mix(in srgb,var(--panel) 70%,transparent);color:var(--fg);cursor:pointer}.theme[hidden],.looks[hidden]{display:none}.looks{display:inline-flex;padding:3px;gap:2px;border:1px solid var(--rule);border-radius:9px;background:color-mix(in srgb,var(--panel) 70%,transparent)}.looks button{font:inherit;font-size:.8rem;font-weight:500;padding:3px 10px;border:0;border-radius:6px;background:0 0;color:var(--mut);cursor:pointer}.looks button:hover{color:var(--fg)}.looks button[aria-pressed=true]{background:var(--btn-bg);color:var(--btn-fg)}.theme:hover{border-color:var(--c1);color:var(--c1)}.theme svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.theme .sun,:root[data-theme=dark] .theme .moon{display:none}:root[data-theme=dark] .theme .sun{display:block}.hero,.band{position:relative;overflow:hidden;background:radial-gradient(50rem 32rem at 50% 45%,var(--glow) 0%,var(--bg) 70%)}canvas.net{position:absolute;inset:0;width:100%;height:100%}.hero::after,.band::after{content:"";position:absolute;inset:auto 0 0 0;height:30%;background:linear-gradient(transparent,var(--bg));pointer-events:none}.hero{min-height:100vh;min-height:100svh;display:grid;place-items:center;text-align:center}.hero .inner{position:relative;z-index:2;padding:110px 16px 90px;max-width:54rem}.avatar{position:relative;width:clamp(176px,16vw,232px);aspect-ratio:1;margin:0 auto 28px;padding:5px;border-radius:50%}.avatar::before{content:"";position:absolute;inset:0;border-radius:50%;background:conic-gradient(from 0,var(--c1),var(--c2),var(--c3),var(--c1));animation:spin 8s linear infinite}.avatar img{position:relative;display:block;width:100%;height:100%;border-radius:50%;object-fit:cover;background:var(--panel);border:5px solid var(--bg)}@keyframes spin{to{transform:rotate(1turn)}}.hero h1{font-family:var(--display);font-weight:700;font-size:clamp(3.2rem,10vw,7rem);line-height:.95;letter-spacing:-.035em;margin:0 0 22px}.claim{font-family:var(--display);font-size:clamp(1.25rem,2.6vw,1.75rem);font-weight:500;margin:0 0 14px}.rot{display:inline-block;min-width:6.2em;text-align:left;color:var(--c1)}.rot::after{content:"";display:inline-block;width:.14em;height:1em;margin-left:3px;vertical-align:-.12em;background:var(--c2);animation:blink 1s steps(1)infinite}html[lang=zh-CN] .rot{min-width:0}@keyframes blink{50%{opacity:0}}.hero .role{color:var(--mut);margin:0 0 30px;font-size:.95rem}.btns{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}.btn{display:inline-flex;align-items:center;padding:11px 20px;border-radius:10px;font-size:.9rem;font-weight:600;transition:transform .15s,box-shadow .2s,border-color .2s}.btn:hover{text-decoration:none}.btn.solid{background:var(--btn-bg);color:var(--btn-fg)}.btn.solid:hover{transform:translateY(-2px);box-shadow:0 10px 30px -10px var(--c1)}.btn.ghost{color:var(--fg);border:1px solid var(--rule);background:color-mix(in srgb,var(--panel) 60%,transparent);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.btn.ghost:hover{border-color:var(--c1)}.scroll{position:absolute;z-index:2;bottom:26px;left:50%;transform:translateX(-50%);font-family:var(--mono);font-size:.72rem;color:var(--mut);letter-spacing:.1em}.scroll:hover{text-decoration:none;color:var(--fg)}.scroll::after{content:"";display:block;width:1px;height:34px;margin:8px auto 0;background:linear-gradient(var(--c1),transparent);transform-origin:top;animation:drop 1.8s ease-in-out infinite}@keyframes drop{0%{transform:scaleY(0)}50%{transform:scaleY(1)}100%{transform:scaleY(1);opacity:0}}.legend{position:absolute;z-index:2;right:24px;bottom:26px;display:grid;gap:4px;text-align:left;font-family:var(--mono);font-size:.7rem;color:var(--mut)}.legend i{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:8px}.legend .c1{background:var(--c1)}.legend .c2{background:var(--c2)}.legend .c3{background:var(--c3)}.band{padding:128px 0 40px}.band .wrap{position:relative;z-index:2}.band h1{font-family:var(--display);font-weight:700;font-size:clamp(2.6rem,7vw,4.6rem);line-height:1;letter-spacing:-.03em;margin:0}main h2{font-family:var(--display);font-weight:700;font-size:clamp(1.6rem,3vw,2.2rem);line-height:1.1;letter-spacing:-.02em;margin:64px 0 22px}main h3{font-family:var(--display);font-weight:600;font-size:1.2rem;line-height:1.25;margin:0 0 6px}.lede,.bio{font-size:1.08rem}.page>:first-child{margin-top:24px}section.block{padding-top:96px}section.block h2{font-size:clamp(1.9rem,3.6vw,2.8rem);margin:0 0 14px}.intro{color:var(--mut);max-width:40rem;margin:0 0 40px}section.block>h2+ul,section.block>h2+ol{margin-top:32px}.lines{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.line{--c:var(--c1);position:relative;overflow:hidden;padding:28px 24px;border:1px solid transparent;border-radius:16px;background:linear-gradient(var(--panel),var(--panel))padding-box,linear-gradient(140deg,var(--c),var(--rule) 60%)border-box;transition:transform .25s}.line:nth-child(3n+2){--c:var(--c2)}.line:nth-child(3n+3){--c:var(--c3)}.line::after{content:"";position:absolute;width:180px;height:180px;right:-60px;top:-60px;border-radius:50%;background:var(--c);opacity:.12;filter:blur(30px);transition:opacity .25s;pointer-events:none}.line:hover{transform:translateY(-4px)}.line:hover::after{opacity:.3}.line .dot{display:inline-block;width:10px;height:10px;border-radius:50%;background:var(--c);box-shadow:0 0 14px var(--c);margin-bottom:22px}.line h3{font-size:1.3rem;margin-bottom:10px}.line p{margin:0;color:var(--mut);font-size:.95rem}.line p+p{margin-top:8px}ul.dated{list-style:none;margin:0;padding:0 0 0 28px;position:relative}ul.dated::before{content:"";position:absolute;left:5px;top:8px;bottom:8px;width:1px;background:linear-gradient(var(--c1),var(--c3));opacity:.6}ul.dated li{position:relative;padding:0 0 22px}ul.dated li:last-child{padding-bottom:0}ul.dated li::before{content:"";position:absolute;left:-28px;top:6px;width:11px;height:11px;border-radius:50%;background:var(--bg);border:2px solid var(--c1)}ul.dated li.grant::before{border-color:var(--c2)}ul.dated li.service::before,ul.dated li.teaching::before{border-color:var(--c3)}ul.dated .when{display:block;font-family:var(--mono);font-size:.78rem;color:var(--fg)}ul.dated .kind{font-family:var(--mono);font-size:.78rem;color:var(--mut);margin-left:10px}ul.dated .text{display:block;margin-top:2px}ol.pubs{list-style:none;margin:0;padding:0;counter-reset:p}li.pub{counter-increment:p;display:grid;grid-template-columns:4.5rem 1fr;gap:18px;padding:22px 0;border-top:1px solid var(--rule)}li.pub:last-child{border-bottom:1px solid var(--rule)}li.pub::before{content:counter(p,decimal-leading-zero);font-family:var(--display);font-size:2rem;font-weight:700;line-height:1;color:transparent;-webkit-text-stroke:1px var(--mut);transition:color .2s,-webkit-text-stroke-color .2s}li.pub:hover::before{color:var(--c1);-webkit-text-stroke-color:var(--c1)}li.pub .cite{display:flex;flex-direction:column;align-items:flex-start}li.pub .p{display:none}li.pub .title{order:-1;display:block;font-family:var(--display);font-size:1.18rem;font-weight:600;line-height:1.3;color:var(--fg);margin-bottom:4px}li.pub a.title:hover{color:var(--c1);text-decoration:none}li.pub .by{display:block;color:var(--mut);font-size:.92rem}li.pub .venue{display:block;margin-top:6px;font-family:var(--mono);font-size:.76rem;color:var(--c1)}li.pub .venue em{font-style:normal}li.pub details{margin-top:8px}li.pub summary{cursor:pointer;font-family:var(--mono);font-size:.76rem;color:var(--mut);text-transform:lowercase}li.pub summary:hover{color:var(--fg)}li.pub details p{margin:8px 0 0;font-size:.95rem}.more{display:inline-block;margin-top:26px;font-family:var(--mono);font-size:.85rem;color:var(--c1);text-transform:lowercase}ul.books{list-style:none;margin:0;padding:0}ul.books li{padding:12px 0;border-top:1px solid var(--rule)}ul.books li:last-child{border-bottom:1px solid var(--rule)}ul.books .gloss{display:block;font-family:var(--display);font-weight:600}.courses{display:grid;gap:18px}.courses .line p.meta{font-family:var(--mono);font-size:.76rem;color:var(--c);margin:0 0 10px}.courses .line p.award{color:var(--fg);font-style:italic}footer.site{margin-top:120px;padding:40px 0 48px;border-top:1px solid var(--rule);color:var(--mut);font-size:.88rem}footer .wrap{display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px 24px}footer p{margin:0}footer .links{display:flex;flex-wrap:wrap;gap:6px 18px}footer a{color:var(--fg)}footer a:hover{color:var(--c1);text-decoration:none}@media(max-width:860px){.lines{grid-template-columns:1fr}li.pub{grid-template-columns:3rem 1fr;gap:12px}li.pub::before{font-size:1.6rem}.legend{display:none}}@media(max-width:560px){html{font-size:16px}.wrap{padding:0 16px}header nav{gap:6px 16px;font-size:.88rem}.avatar{width:168px}.rot{min-width:0}section.block{padding-top:72px}.band{padding-top:120px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.avatar::before,.rot::after,.scroll::after{animation:none}}