:root{color-scheme:dark;--bg:#0b0c0e;--text:#f0efe9;--muted:#b7b8b8;--line:#3a3c3e;--accent:#e1e7c9}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:90px}body{margin:0;background:var(--bg);color:var(--text);font-family:"PingFang SC","Microsoft YaHei",sans-serif;-webkit-font-smoothing:antialiased}body.intro-active,body.modal-open{overflow:hidden}a{color:inherit;text-decoration:none;text-underline-offset:5px}button{font:inherit;color:inherit;cursor:pointer}button:disabled{cursor:default}a:focus-visible,button:focus-visible{outline:2px solid #e1e7c9;outline-offset:5px}::selection{background:#e1e7c9;color:#141714}*{scrollbar-color:#74776d #131516;scrollbar-width:thin}h1,h2,h3,p{margin:0}p{line-height:1.85}img{max-width:100%;display:block}svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.5;flex:none}.skip-link{position:fixed;left:16px;top:-100px;padding:16px;background:#fff;color:#111;z-index:100}.skip-link:focus{top:16px}.site-header{min-height:88px;padding:20px 5vw;display:flex;justify-content:space-between;align-items:center;gap:24px;border-bottom:1px solid var(--line)}.brand{font-size:18px;letter-spacing:.06em}.brand span{display:block;color:var(--muted);font-size:12px;letter-spacing:.06em;margin-top:5px}.site-header nav{display:flex;gap:32px;font-size:14px}.site-header nav a{min-height:44px;display:flex;align-items:center;border-bottom:1px solid transparent}.site-header nav a:hover,.site-header nav a.active{border-color:var(--text)}.showcase{position:relative;min-height:600px;height:min(78vw,780px);max-height:calc(100svh - 88px);isolation:isolate;overflow:hidden}.showcase-image{position:absolute;top:-13%;width:100%;height:126%;object-fit:cover;object-position:center;z-index:-2}.showcase:after{content:"";position:absolute;inset:0;background:linear-gradient(0deg,#07090bf0 0%,#07090b80 20%,transparent 55%);z-index:-1}.showcase-caption{position:absolute;bottom:48px;left:5vw;right:5vw;display:flex;justify-content:space-between;align-items:flex-end;gap:32px}.showcase h1{font-family:"Songti SC","STSong",serif;font-weight:500;font-size:clamp(52px,7vw,96px);line-height:1.2;letter-spacing:.02em}.showcase-caption>div>p{margin-top:14px;font-size:17px}.showcase-action{text-align:right}.showcase-action p{font-size:14px!important}.primary-action{border:1px solid var(--text);background:var(--text);color:#131614;display:inline-flex;align-items:center;justify-content:center;gap:28px;min-height:52px;padding:12px 22px;font-size:15px;margin-top:20px;transition:background .2s}.primary-action:hover{background:#dce2c7}.showcase-action .primary-action svg{fill:currentColor;stroke:none}.section{max-width:1600px;margin:0 auto;padding:104px 5vw}.section-intro{display:flex;justify-content:space-between;align-items:flex-end;gap:48px;margin-bottom:56px}h2{font-size:clamp(30px,3.4vw,48px);font-weight:500;letter-spacing:-.025em;line-height:1.45}.section-intro p{font-size:15px;color:var(--muted)}.project-pair{display:grid;grid-template-columns:1.08fr 1fr;gap:6vw}.work-item.offset{padding-top:120px}.artwork{display:block;position:relative;overflow:hidden;background:#17191b}.artwork img{width:100%;aspect-ratio:16/10;object-fit:cover;transition:transform .65s cubic-bezier(.2,.8,.2,1)}.artwork:hover img{transform:scale(1.035)}.artwork-link{display:flex;align-items:center;justify-content:space-between;gap:16px;background:#111c;color:#fff;padding:16px 20px;font-size:14px;position:absolute;bottom:0;left:0;right:0}.work-caption{padding-top:24px}.work-caption h3{font-size:28px;font-weight:500;line-height:1.5}.work-caption h3 span{display:block;font-size:19px;color:var(--muted);margin:4px 0 12px}.work-caption>p{font-size:14px;margin-top:10px}.description{color:var(--muted);font-size:15px;max-width:52ch}.wide-work{margin:100px 0}.wide-work .artwork img{aspect-ratio:2.15;object-position:50% 38%}.wide-caption{padding-top:28px;display:grid;grid-template-columns:1fr 1fr;gap:6vw}.wide-caption h3{font-size:32px;line-height:1.5;font-weight:500}.wide-caption h3 span{font-size:23px;color:var(--muted)}.wide-caption p+p{margin-top:12px}.volc-section{border-top:1px solid var(--line);background:#101416}.volc-intro{display:grid;grid-template-columns:1fr 1fr;gap:8vw}.volc-logo{width:180px;background:#fff;padding:10px;margin-bottom:28px}.volc-intro .role{font-size:16px;color:var(--text);margin-bottom:22px}.volc-intro>div>p{color:var(--muted);font-size:16px;max-width:55ch}.text-link{display:inline-flex;align-items:center;gap:24px;border-bottom:1px solid #bbb;padding:14px 0;margin-top:12px;min-height:48px}.external-note{display:block;font-size:14px;color:var(--muted);text-decoration:underline;margin-top:22px;line-height:1.8}.screening{margin-top:64px}.screening article{display:grid;grid-template-columns:1fr 1fr;gap:8vw;padding:40px 0;border-top:1px solid var(--line);align-items:center}.screening-copy h3{font-family:"Songti SC",serif;font-size:56px;font-weight:500}.screening-copy>p{margin-top:16px}.screening video{width:100%;max-width:420px;max-height:690px;display:block;justify-self:center;background:#000}.method-section{display:grid;grid-template-columns:1.2fr .8fr;gap:10vw;align-items:center}.method-copy p{max-width:48ch;color:var(--muted);font-size:16px}.document-name{font-size:22px!important;color:var(--text)!important;margin:28px 0 16px}.method-copy ul{margin:24px 0;padding-left:20px;color:var(--muted);line-height:2.2;font-size:15px}.document-actions{display:flex;align-items:center;gap:28px;flex-wrap:wrap;margin:28px 0}.document-actions .primary-action{margin:0}.document-actions>a{text-decoration:underline;min-height:44px;display:flex;align-items:center}.scope-note{font-size:13px!important}.method-cover{display:block;transform:rotate(2deg);box-shadow:12px 22px 44px #0008;transition:transform .3s}.method-cover:hover{transform:rotate(0)}.method-cover img{width:100%}.archive{border-top:1px solid var(--line);display:grid;grid-template-columns:1fr 2fr;gap:48px;padding-top:64px;padding-bottom:64px}.archive h2{font-size:26px}.archive>div{display:grid;grid-template-columns:1fr 1fr;column-gap:40px}.archive a{min-height:56px;display:flex;align-items:center;border-bottom:1px solid var(--line);font-size:15px;line-height:1.5;padding:12px 0}.archive a:hover{color:var(--accent)}footer{padding:28px 5vw;display:flex;justify-content:space-between;gap:24px;border-top:1px solid var(--line);font-size:13px;color:var(--muted)}footer a{min-height:44px;display:flex;align-items:center}dialog{width:min(1200px,96vw);height:92dvh;padding:0;background:#17191b;border:1px solid #575b5b;color:var(--text)}dialog::backdrop{background:#000c}.viewer-bar{display:flex;justify-content:space-between;align-items:center;padding:12px 20px;gap:16px;min-height:68px;border-bottom:1px solid var(--line);font-size:14px}.viewer-bar>div{display:flex;align-items:center;gap:20px}.viewer-bar a,.viewer-bar button{min-height:44px;display:inline-flex;align-items:center}.viewer-bar button{background:#292d2e;border:1px solid #666;padding:8px 16px}.viewer-bar a{text-decoration:underline}#viewer-frame{width:100%;height:calc(100% - 70px);border:0;background:#171717}
@media(min-width:1700px){.showcase{max-width:1800px;margin:auto}.section{padding-left:64px;padding-right:64px}}@media(max-width:900px){.site-header{padding:16px 5vw;gap:12px}.site-header nav{gap:16px}.showcase{min-height:560px;max-height:none;height:70svh}.showcase-caption{bottom:32px;align-items:flex-start;flex-direction:column;gap:12px}.showcase-action{text-align:left}.showcase-caption>div>p{font-size:15px}.section{padding:72px 6vw}.section-intro{display:block}.section-intro p{margin-top:24px}.project-pair{gap:28px}.work-item.offset{padding-top:72px}.wide-work{margin:72px 0}.wide-caption{gap:24px}.volc-intro{gap:40px}.method-section{gap:44px}.screening article{gap:40px}.showcase h1{font-size:64px}}
@media(max-width:600px){.site-header{flex-wrap:wrap;min-height:120px}.brand{font-size:17px}.brand span{font-size:12px}.site-header nav{width:100%;justify-content:space-between;font-size:14px}.showcase{min-height:530px;height:74svh}.showcase-image{object-position:58% center}.showcase-caption{left:6vw;right:6vw}.showcase h1{font-size:60px}.showcase-action p{font-size:13px!important}.section{padding:60px 6vw}.section-intro{margin-bottom:36px}.project-pair{grid-template-columns:1fr;gap:48px}.work-item.offset{padding-top:0}.artwork img{aspect-ratio:4/3}.artwork-link{font-size:13px;padding:14px}.work-caption h3{font-size:27px}.wide-work{margin:56px 0}.wide-work .artwork img{aspect-ratio:4/3}.wide-caption{grid-template-columns:1fr;gap:20px}.wide-caption h3{font-size:28px}.volc-intro,.method-section{grid-template-columns:1fr;gap:36px}.volc-logo{width:160px}.screening{margin-top:32px}.screening article{grid-template-columns:1fr;gap:24px;padding:32px 0}.screening-copy h3{font-size:40px}.screening video{max-width:360px;max-height:none}.method-cover{max-width:340px;margin:12px auto;transform:none}.archive{grid-template-columns:1fr;gap:24px}.archive>div{grid-template-columns:1fr}.archive a{font-size:15px}footer{flex-direction:column;padding:24px 6vw;gap:8px}dialog{margin:0;width:100vw;max-width:none;height:100dvh;max-height:none}.viewer-bar{padding:10px;font-size:13px}.viewer-bar>div{gap:12px}.viewer-bar a{font-size:13px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{transition:none!important;animation:none!important}}
/* Resume and reading interactions — same visual language as the film gallery. */
.reading-progress{position:fixed;top:0;left:0;right:0;height:2px;background:var(--accent);z-index:55;transform:scaleX(0);transform-origin:left;pointer-events:none}.intro-active .reading-progress{visibility:hidden}.site-header{position:sticky;top:0;z-index:30;background:#0b0c0ef5;transition:transform .35s cubic-bezier(.2,.8,.2,1),border-color .35s}.site-header.is-away{transform:translateY(-105%)}.site-header:focus-within{transform:none}.site-header nav{gap:24px}.site-header nav a{position:relative;border:0}.site-header nav a:after{content:"";position:absolute;bottom:4px;left:0;right:0;height:1px;background:var(--text);transform:scaleX(0);transform-origin:left;transition:transform .3s}.site-header nav a:hover:after,.site-header nav a.active:after{transform:scaleX(1)}.artwork-link svg{transition:transform .3s}.artwork:hover .artwork-link svg,.artwork:focus-visible .artwork-link svg{transform:translate(3px,-3px)}.live-action{border-top:1px solid var(--line)}.wanwu{display:grid;grid-template-columns:.75fr 1.25fr;gap:9vw;align-items:center}.wanwu-poster{max-width:400px;display:block}.wanwu-poster img{width:100%;height:auto}.wanwu-copy h3{font-family:"Songti SC",serif;font-size:64px;font-weight:500}.wanwu-copy>p{margin-top:18px;color:var(--muted);font-size:16px}.honors{list-style:none;margin:36px 0 0;padding:0}.honors li{border-top:1px solid var(--line);padding:18px 0;display:flex;flex-direction:column;gap:7px}.honors strong{font-size:16px;font-weight:500}.honors span{font-size:14px;line-height:1.7;color:var(--muted)}.film-credits{margin-top:56px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}summary{cursor:pointer;list-style:none;min-height:64px;display:flex;align-items:center;justify-content:space-between;gap:24px;font-size:17px}summary::-webkit-details-marker{display:none}summary:focus-visible{outline:2px solid var(--accent);outline-offset:5px}summary span{font-size:25px}.film-credits dl{margin:0 0 24px}.film-credits dl>div{display:grid;grid-template-columns:1fr 2fr;gap:24px;border-top:1px solid var(--line);padding:18px 0}.film-credits dt{font-size:18px}.film-credits dd{margin:0;color:var(--muted);font-size:15px;line-height:1.8}.about-section{display:grid;grid-template-columns:.8fr 1.2fr;gap:10vw;border-top:1px solid var(--line);align-items:start}.portrait img{height:auto;width:100%}.about-copy h2{font-family:"Songti SC",serif;font-size:64px}.about-copy>p{font-size:16px;line-height:1.9;margin-top:24px;color:var(--muted)}.about-copy .about-role{color:var(--text);font-size:21px;margin-top:8px}.resume-links{display:flex;gap:28px;align-items:center;flex-wrap:wrap;margin:32px 0}.resume-links .primary-action{margin:0}.resume-links>a:not(.primary-action){text-decoration:underline;min-height:44px;display:flex;align-items:center}.channel{border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.channel img{width:min(100%,320px);height:auto;margin-bottom:20px}.channel>a{display:inline-block;text-decoration:underline;font-size:14px;padding:12px 0 24px}#viewer-loading{position:absolute;top:70px;left:0;right:0;background:#17191b;padding:20px;text-align:center;z-index:1;font-size:14px}.showcase-caption .primary-action{transition:background .2s,transform .25s}.showcase-caption .primary-action:hover{transform:translateY(-2px)}
@media(max-width:900px){.site-header nav{gap:16px}.wanwu{gap:40px}.about-section{gap:44px}.wanwu-copy h3,.about-copy h2{font-size:48px}}@media(max-width:700px){.site-header{flex-wrap:wrap;padding:12px 5vw}.site-header nav{width:100%;justify-content:space-between;gap:8px;font-size:13px}.brand span{font-size:12px}.wanwu,.about-section{grid-template-columns:1fr;gap:32px}.wanwu-poster{max-width:280px;margin:auto}.wanwu-copy h3{font-size:52px}.film-credits dl>div{grid-template-columns:1fr;gap:8px}.portrait{max-width:280px}.about-copy h2{font-size:52px}.about-section{padding-top:64px}.honors li{padding:16px 0}.showcase{min-height:560px}.site-header nav a{min-height:44px}}@media(prefers-reduced-motion:reduce){.site-header,.artwork img,.artwork-link svg,.primary-action{transition:none!important}.site-header.is-away{transform:none}}

.film-credits summary{padding:16px 0}.film-credits summary:focus-visible{outline-offset:2px}
/* Shared curved image surface; semantic DOM links and typography stay in front. */
.portfolio-surface{position:fixed;inset:0;z-index:4;pointer-events:none;width:100%;height:100%}
.portfolio-light{position:fixed;inset:-30px;z-index:0;pointer-events:none;opacity:0;background:linear-gradient(118deg,transparent 16%,rgba(175,195,207,.026) 39%,rgba(213,219,201,.036) 48%,transparent 72%)}
.interactive-pair .artwork-link,.interactive-pair .work-caption{position:relative;z-index:5}
.interactive-pair .artwork-link{position:absolute}
.surface-target{overflow:visible}
.surface-ready{background:transparent}
.surface-ready>img{opacity:0;transform:none!important}
.interactive-pair .work-caption{pointer-events:auto}
.surface-target:focus-visible{outline-offset:10px}
.intro-active .portfolio-surface,.intro-active .portfolio-light{visibility:hidden}
@media(prefers-reduced-motion:reduce){.portfolio-surface,.portfolio-light{display:none}.surface-ready>img{opacity:1}.interactive-pair .work-caption{transform:none!important}}
/* Dense information lives inside calm, expandable project windows. */
.project-notes{border-top:1px solid var(--line);margin-top:18px;max-width:52ch}
.project-notes summary,.method-notes summary{min-height:46px;font-size:14px;color:var(--muted)}
.project-notes summary span,.method-notes summary span{font-size:20px}
.project-notes p{font-size:14px;color:var(--muted);padding:6px 0 18px;line-height:1.9}
.project-notes[open] summary,.project-notes summary:hover{color:var(--text)}
.project-notes[open] summary span,.method-notes[open] summary span{transform:rotate(45deg)}
#work .work-caption,#work .wide-caption,#work .artwork-link{position:relative;z-index:5}
#work .artwork-link{position:absolute}
#work .work-caption h3{font-size:26px}#work .work-caption h3 span{font-size:15px;margin-top:4px}
#work .work-caption>p{font-size:13px;color:var(--muted)}
#work .artwork-link{background:linear-gradient(transparent,#0b0c0ed9);padding-top:40px}
.method-notes{margin-top:20px;border-top:1px solid var(--line)}
details.archive{display:block;padding-top:26px;padding-bottom:26px}details.archive>summary{font-size:22px}details.archive>div{margin-top:22px}
.showcase{isolation:auto}.showcase-image{z-index:0}.showcase:after{z-index:5;pointer-events:none}.showcase-caption{z-index:6}
.showcase.surface-target{overflow:hidden}
.showcase.surface-ready>.showcase-image{opacity:0}
html[data-intro-seen] #cinema{display:none}html[data-intro-seen] body.intro-active #site{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){.showcase.surface-ready>.showcase-image{opacity:1}}

.project-notes[open] summary span,.method-notes[open] summary span{transform:none}
