:root{color-scheme:light;--bg: oklch(97.5% .018 87);--paper: oklch(99% .012 87);--paper-deep: oklch(94.5% .025 86);--ink: oklch(19% .026 70);--ink-soft: oklch(42% .027 70);--ink-faint: oklch(57% .025 72);--rule: oklch(84% .034 82);--rule-strong: oklch(72% .052 82);--pine: oklch(31% .07 168);--pine-dark: oklch(24% .058 168);--claret: oklch(36% .112 21);--ochre: oklch(62% .12 78);--max: 1160px;--content: 780px;--radius: 6px;--ease: cubic-bezier(.19, 1, .22, 1);font-family:Avenir Next,Gill Sans,Trebuchet MS,ui-sans-serif,sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:radial-gradient(circle at 18% 8%,color-mix(in oklch,var(--ochre) 12%,transparent),transparent 28rem),linear-gradient(180deg,var(--paper),var(--bg) 45rem);color:var(--ink);font-size:16px;line-height:1.58;text-rendering:optimizeLegibility}body:before{position:fixed;inset:0;z-index:-1;pointer-events:none;content:"";background-image:linear-gradient(color-mix(in oklch,var(--rule) 20%,transparent) 1px,transparent 1px);background-size:100% 32px;opacity:.48;mask-image:linear-gradient(to bottom,#000 0 54%,transparent 92%)}a{color:var(--pine);text-decoration-color:color-mix(in oklch,var(--pine) 48%,transparent);text-decoration-thickness:1px;text-underline-offset:.22em;transition:color .18s var(--ease),border-color .18s var(--ease),background-color .18s var(--ease),transform .18s var(--ease)}a:hover{color:var(--claret)}a:focus-visible,button:focus-visible{outline:2px solid var(--ochre);outline-offset:4px}img{max-width:100%;display:block}.site-header{position:sticky;top:0;z-index:20;border-bottom:1px solid color-mix(in oklch,var(--rule) 72%,transparent);background:color-mix(in oklch,var(--paper) 88%,transparent);backdrop-filter:blur(16px) saturate(1.04)}.nav{width:min(var(--max),calc(100% - 44px));margin:0 auto;min-height:66px;display:flex;align-items:center;justify-content:space-between;gap:24px}.brand{display:inline-flex;align-items:center;color:var(--ink);text-decoration:none}.brand-name{font-family:Georgia,Times New Roman,serif;font-size:20px;line-height:1}.nav-links{display:flex;align-items:center;gap:clamp(14px,2.4vw,28px);font-size:12px;font-weight:700;letter-spacing:.02em}.nav-links a{position:relative;color:var(--ink-soft);text-decoration:none}.nav-links .language-link{margin-left:clamp(2px,1vw,8px);border:1px solid var(--rule-strong);border-radius:999px;padding:5px 10px;color:var(--pine-dark)}.nav-links a:after{position:absolute;left:0;right:0;bottom:-8px;height:1px;content:"";background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .22s var(--ease)}.nav-links a:hover,.nav-links a[aria-current=page]{color:var(--ink)}.nav-links .language-link:after{display:none}.nav-links .language-link:hover{border-color:var(--claret);color:var(--claret)}.nav-links a:hover:after,.nav-links a[aria-current=page]:after{transform:scaleX(1)}.main{width:min(var(--max),calc(100% - 44px));margin:0 auto}.hero{min-height:calc(82svh - 66px);display:grid;grid-template-columns:minmax(0,1fr) minmax(200px,260px);gap:clamp(34px,6vw,88px);align-items:center;padding:clamp(42px,6vw,78px) 0 clamp(44px,6vw,68px);border-bottom:1px solid var(--rule)}.hero-copy{max-width:790px}.page-title,.hero h1{margin:0;color:var(--ink);font-family:Georgia,Times New Roman,serif;font-weight:500;letter-spacing:0}.hero h1{max-width:780px;font-size:clamp(58px,9.2vw,116px);line-height:.9}.page-title{font-size:clamp(52px,7.6vw,104px);line-height:.9}.role{max-width:640px;margin:clamp(18px,2.4vw,26px) 0 0;color:var(--pine-dark);font-family:Georgia,Times New Roman,serif;font-size:clamp(22px,2.8vw,32px);line-height:1.18}.institution{margin:12px 0 0;color:var(--ink-soft);font-size:16px}.hero-statement{max-width:620px;margin-top:clamp(22px,3vw,34px);display:grid;grid-template-columns:1fr;gap:12px;color:var(--ink-soft)}.hero-statement p{margin:0;color:var(--ink);font-size:17px;line-height:1.55}.actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:26px}.button{min-height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--pine-dark);border-radius:var(--radius);padding:8px 14px;background:var(--pine-dark);color:var(--paper);font-size:13px;font-weight:560;letter-spacing:0;text-decoration:none}.button.secondary{background:transparent;color:var(--pine-dark)}.button:hover{border-color:var(--claret);background:var(--claret);color:var(--paper);transform:translateY(-1px)}.portrait-panel{align-self:center}.portrait-frame{position:relative;margin:0;overflow:hidden;border:1px solid var(--ink);border-radius:0;background:var(--paper);box-shadow:10px 10px 0 var(--paper-deep)}.portrait-frame img{width:100%;aspect-ratio:311 / 402;object-fit:cover;filter:saturate(.92) contrast(1.04)}.portrait-caption{margin:16px 0 0;color:var(--ink-soft);font-size:13px;line-height:1.45}.portrait-links{margin:7px 0 0;font-size:13px;line-height:1.3}.page-hero{min-height:0;display:grid;grid-template-columns:minmax(0,.78fr) minmax(320px,.62fr);gap:clamp(28px,5vw,72px);align-items:center;padding:clamp(38px,5vw,62px) 0 clamp(34px,4vw,52px);border-bottom:1px solid var(--rule)}.page-hero-simple{grid-template-columns:1fr}.page-meta,.section-label{margin:0;color:color-mix(in oklch,var(--claret) 84%,var(--ink-soft));font-size:11px;font-weight:650;letter-spacing:.045em;text-transform:uppercase}.page-kicker{max-width:610px;margin:0;color:var(--ink-soft);font-size:clamp(16px,1.75vw,20px);line-height:1.5}.intro-section{max-width:720px;padding:clamp(24px,3vw,36px) 0 0}.intro-section p{margin:0;color:var(--ink-soft);font-size:clamp(16px,1.75vw,20px);line-height:1.5}.research-intro{max-width:none;padding-top:clamp(20px,2.6vw,30px)}.research-intro p{max-width:100%}.section{padding:clamp(38px,5vw,62px) 0}.section.compact{padding-top:48px}.section-header{display:grid;grid-template-columns:minmax(128px,.25fr) minmax(0,1fr);gap:clamp(20px,4vw,54px);align-items:baseline;margin-bottom:clamp(20px,3vw,30px)}.section-header.framed{padding-top:0}.section-header.no-label{grid-template-columns:1fr}.section-header.label-only{grid-template-columns:1fr;margin-bottom:clamp(18px,2.4vw,26px)}.section-title-label{color:color-mix(in oklch,var(--claret) 88%,var(--ink-soft));font-size:clamp(17px,1.8vw,22px);font-weight:650;line-height:1.12;letter-spacing:.035em}.section-heading{margin:0;max-width:780px;font-family:Georgia,Times New Roman,serif;font-size:clamp(26px,3vw,38px);font-weight:500;line-height:1.08}.field-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-top:1px solid var(--ink);border-left:1px solid var(--ink);background:color-mix(in oklch,var(--paper) 70%,transparent)}.field-item{min-height:clamp(96px,11vw,132px);display:flex;align-items:flex-end;border-right:1px solid var(--ink);border-bottom:1px solid var(--ink);padding:clamp(15px,2vw,22px);color:var(--pine-dark);font-family:Georgia,Times New Roman,serif;font-size:clamp(19px,2vw,24px);line-height:1.12;transition:background-color .22s var(--ease),color .22s var(--ease)}.field-item:hover{background:var(--pine-dark);color:var(--paper)}.research-section{padding:clamp(28px,3.6vw,46px) 0}.research-section .section-header.label-only{margin-bottom:12px}.research-section .section-title-label{font-size:clamp(16px,1.5vw,20px)}.paper-list{display:grid;border-top:1px solid color-mix(in oklch,var(--ink) 82%,var(--paper))}.paper-item{display:grid;grid-template-columns:42px minmax(0,1fr);gap:clamp(14px,2.4vw,28px);padding:clamp(13px,1.7vw,19px) 0;border-bottom:1px solid color-mix(in oklch,var(--rule) 64%,transparent);transition:border-color .22s var(--ease),transform .22s var(--ease)}.paper-item:hover{border-bottom-color:color-mix(in oklch,var(--ink) 55%,var(--rule));transform:translate(4px)}.paper-item:last-child{border-bottom:0}.paper-index{display:grid;align-content:start;padding-top:2px;color:var(--claret)}.paper-index span{width:28px;height:28px;display:inline-grid;place-items:center;border:1px solid var(--claret);border-radius:50%;background:var(--claret);color:var(--paper);font-family:Georgia,Times New Roman,serif;font-size:13px;font-variant-numeric:tabular-nums;font-weight:700;line-height:1}.paper-content{max-width:910px}.paper-title{margin:0;max-width:860px;font-family:Georgia,Times New Roman,serif;font-size:clamp(19px,2vw,25px);font-weight:500;line-height:1.13}.paper-meta{max-width:820px;margin:6px 0 0;color:var(--ink-soft);font-size:13px;line-height:1.36}.paper-meta span{display:inline}.paper-meta span:not(:last-child):after{content:". "}[lang=zh-CN]{font-family:Avenir Next,PingFang SC,Hiragino Sans GB,Noto Sans CJK SC,Microsoft YaHei,ui-sans-serif,sans-serif}[lang=zh-CN] .brand-name,[lang=zh-CN] .page-title,[lang=zh-CN] .hero h1,[lang=zh-CN] .role,[lang=zh-CN] .section-heading,[lang=zh-CN] .paper-title,[lang=zh-CN] .course-group h2,[lang=zh-CN] .course-title,[lang=zh-CN] .footer-identity strong{font-family:Songti SC,STSong,"Noto Serif CJK SC","Source Han Serif SC",Georgia,serif}[lang=zh-CN] .paper-meta span:not(:last-child):after{content:"；"}.paper-venue{color:var(--ink);font-weight:700}.paper-links{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.paper-links a{min-height:23px;display:inline-flex;align-items:center;border:1px solid color-mix(in oklch,var(--rule-strong) 76%,var(--paper));border-radius:999px;padding:3px 8px;background:color-mix(in oklch,var(--paper) 88%,var(--pine) 4%);color:var(--pine-dark);font-size:11px;font-weight:650;letter-spacing:0;text-decoration:none}[lang=zh-CN] .paper-links a{font-weight:600}.paper-links a:hover{border-color:var(--claret);background:color-mix(in oklch,var(--claret) 9%,var(--paper));color:var(--claret);transform:translateY(-1px)}.paper-intro{margin-top:12px}.cv-version{margin:0 0 14px;color:var(--ink-soft);font-size:15px;line-height:1.4}.paper-intro summary{display:inline-flex;align-items:center;min-height:27px;border:1px solid color-mix(in oklch,var(--rule-strong) 62%,var(--paper));border-radius:999px;padding:4px 9px;color:var(--pine-dark);font-size:12px;font-weight:560;line-height:1.2;cursor:pointer;list-style:none}.paper-intro summary::-webkit-details-marker{display:none}.paper-intro summary:after{margin-left:7px;content:"+";color:var(--claret)}.paper-intro[open] summary:after{content:"-"}.paper-intro p{max-width:780px;margin:10px 0 0;color:var(--ink-soft);font-size:14px;line-height:1.5}.section-empty{border-bottom:0;padding-bottom:clamp(52px,8vw,96px)}.split{display:grid;grid-template-columns:minmax(0,.8fr) minmax(270px,.4fr);gap:clamp(28px,5vw,68px);align-items:start}.note-panel{position:relative;padding:24px 0 0;color:var(--ink-soft)}.note-panel:before{position:absolute;top:0;left:0;width:92px;height:3px;content:"";background:var(--ochre)}.note-panel p{margin-top:0}.course-group+.course-group{margin-top:clamp(30px,5vw,48px)}.course-group h2{margin:0 0 16px;color:var(--pine-dark);font-family:Georgia,Times New Roman,serif;font-size:clamp(28px,3vw,38px);font-weight:500;line-height:1.08}.course-list{border-top:1px solid var(--ink)}.course-item{display:grid;grid-template-columns:minmax(0,1fr) 150px minmax(170px,.42fr);gap:clamp(18px,4vw,42px);padding:14px 0;border-bottom:1px solid var(--rule)}.course-item-simple{grid-template-columns:1fr;gap:0}.course-title{color:var(--ink);font-family:Georgia,Times New Roman,serif;font-size:20px;line-height:1.24}.course-site-link{display:inline-block;margin-top:7px;color:var(--pine-dark);font-size:14px;line-height:1.35;overflow-wrap:anywhere}.course-site-link:hover{color:var(--claret)}.course-description{max-width:760px;margin:6px 0 0;color:var(--ink-soft);font-size:15px;line-height:1.45}.course-years,.course-note{color:var(--ink-soft);font-size:14px}.teaching-summary{max-width:820px;margin:0 0 clamp(22px,3vw,34px);color:var(--ink-soft);font-size:clamp(18px,2vw,22px);line-height:1.55}.material-list{border-top:1px solid color-mix(in oklch,var(--ink) 82%,var(--paper))}.material-item{padding:clamp(18px,2.8vw,30px) 0;border-bottom:1px solid var(--rule)}.material-title{margin:0;color:var(--ink);font-family:Georgia,Times New Roman,serif;font-size:clamp(28px,3vw,40px);font-weight:500;line-height:1.12}.material-url{display:inline-block;margin-top:10px;color:var(--pine-dark);font-size:16px;line-height:1.35;overflow-wrap:anywhere;text-decoration-thickness:1px;text-underline-offset:4px}.material-url:hover{color:var(--claret)}.material-description{max-width:880px;margin:14px 0 0;color:var(--ink-soft);font-size:17px;line-height:1.55}.project-intro{padding-top:clamp(24px,3.6vw,42px)}.project-section{padding-top:clamp(46px,6vw,76px)}.resource-feature{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(280px,.52fr);gap:clamp(22px,4vw,52px);align-items:start;border-top:1px solid color-mix(in oklch,var(--ink) 82%,var(--paper));padding-top:clamp(18px,2.6vw,30px)}.poster-frame{display:block;border:1px solid color-mix(in oklch,var(--rule-strong) 68%,var(--paper));background:color-mix(in oklch,var(--paper) 70%,var(--pine) 3%);padding:8px;text-decoration:none}.poster-frame img{width:100%;height:auto;border:1px solid color-mix(in oklch,var(--rule) 70%,transparent)}.resource-copy{padding-top:2px}.resource-eyebrow{margin:0 0 10px;color:color-mix(in oklch,var(--claret) 84%,var(--ink-soft));font-size:13px;font-weight:560;line-height:1.35}.resource-copy h2,.github-strip h2,.project-card h3{margin:0;color:var(--ink);font-family:Georgia,Times New Roman,serif;font-weight:500;line-height:1.12}.resource-copy h2{max-width:560px;font-size:clamp(26px,3vw,38px)}.resource-copy p,.github-strip p,.project-card p{color:var(--ink-soft)}.resource-copy>p:not(.resource-eyebrow){margin:14px 0 0;font-size:16px;line-height:1.55}.resource-share-note{color:var(--pine-dark);font-weight:560}.resource-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}.tag-list{display:flex;flex-wrap:wrap;gap:8px;margin:18px 0 0;padding:0;list-style:none}.tag-list li{border:1px solid color-mix(in oklch,var(--rule-strong) 62%,var(--paper));border-radius:999px;padding:4px 9px;color:var(--pine-dark);font-size:12px;line-height:1.2}.github-strip{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:clamp(20px,4vw,48px);align-items:end;border-top:1px solid color-mix(in oklch,var(--ink) 82%,var(--paper));padding-top:clamp(18px,2.6vw,30px)}.github-strip h2{font-size:clamp(32px,4vw,52px)}.github-strip p:not(.resource-eyebrow){max-width:720px;margin:10px 0 0;font-size:16px;line-height:1.55}.compact-button{min-height:42px;padding:9px 15px;white-space:nowrap}.project-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:clamp(20px,3vw,32px)}.project-card{display:grid;gap:22px;align-content:space-between;min-height:190px;border-top:1px solid var(--rule-strong);border-bottom:1px solid var(--rule);padding:18px 0}.project-card h3{font-size:clamp(22px,2.4vw,30px)}.project-card p{margin:10px 0 0;font-size:15px;line-height:1.52}.project-card-footer{display:flex;justify-content:space-between;gap:16px;color:var(--ink-faint);font-size:13px}.site-footer{width:min(var(--max),calc(100% - 44px));margin:0 auto;padding:clamp(28px,4vw,44px) 0 clamp(34px,5vw,54px);display:grid;grid-template-columns:minmax(0,1fr) minmax(240px,.42fr);gap:32px;color:var(--ink-soft);font-size:14px}.footer-identity strong{color:var(--ink);font-family:Georgia,Times New Roman,serif;font-size:22px;font-weight:500}.footer-contact{text-align:right}.footer-links{display:flex;justify-content:flex-end;gap:14px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition:none!important}}@media(min-width:1180px){.hero-statement{max-width:720px}}@media(max-width:760px){body{background:radial-gradient(circle at 18% 8%,color-mix(in oklch,var(--ochre) 10%,transparent),transparent 22rem),linear-gradient(180deg,var(--paper),var(--bg) 45rem)}.hero,.page-hero,.split,.section-header{grid-template-columns:1fr}.hero{min-height:auto;align-items:start}.hero-statement{grid-template-columns:1fr}.portrait-panel{max-width:260px}.page-kicker{max-width:760px}.field-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.course-item{grid-template-columns:1fr;gap:5px}.resource-feature,.github-strip,.project-list{grid-template-columns:1fr}.github-strip{align-items:start}.compact-button{width:fit-content}}@media(max-width:640px){body{font-size:16px}.nav{width:min(var(--max),calc(100% - 28px));min-height:66px}.brand-name{font-size:18px}.nav-links{gap:13px;font-size:12px}.main,.site-footer{width:min(var(--max),calc(100% - 28px))}.hero{padding-top:44px}.hero h1,.page-title{font-size:clamp(56px,19vw,78px)}.field-grid{grid-template-columns:1fr}.field-item{min-height:104px}.paper-item{grid-template-columns:1fr;gap:16px;transform:none}.paper-item:hover{transform:none}.paper-index{display:flex;align-items:center;gap:12px}.site-footer{grid-template-columns:1fr}.footer-contact{text-align:left}.footer-links{justify-content:flex-start}}
