:root{--ivory:#f2ead7;--muted:#c4baa3;--gold:#c9af79;--line:#e1d1af38;--ease:cubic-bezier(.22,.65,.22,1);--sans:'PingFang SC','Microsoft YaHei',sans-serif;--serif:'Songti SC',STSong,SimSun,serif}
*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden}body{font-family:var(--sans);color:var(--ivory);background:#25271f;-webkit-font-smoothing:antialiased}button,a{-webkit-tap-highlight-color:transparent;touch-action:manipulation}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,summary:focus-visible{outline:1px solid var(--ivory);outline-offset:6px}h1,h2,h3,h4,p,figure{margin:0}h1{font-weight:400}img{display:block}[hidden]{display:none!important}::selection{background:#b89c69;color:#181b15}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.site-header{position:fixed;z-index:100;top:0;left:0;right:0;height:112px;padding:0 48px;display:flex;align-items:center;justify-content:space-between;pointer-events:none}.site-header button{pointer-events:auto}#identity-button{display:flex;align-items:center;gap:21px;padding:12px 0;text-shadow:0 2px 14px #10150f9e}.identity-name{font:500 28px/1.1 var(--serif);letter-spacing:.07em}.identity-subtitle{font:12px/1.4 var(--sans);letter-spacing:.2em;opacity:.8}
#painting-stage{position:fixed;inset:0;overflow:hidden;isolation:isolate;background:#25271f;contain:layout paint}#art-world{position:absolute;top:0;left:0;width:2953px;height:1688px;transform-origin:0 0}#original-painting{width:100%;height:100%;max-width:none;user-select:none;pointer-events:none}.top-shade{position:fixed;z-index:2;inset:0 0 auto;height:190px;background:linear-gradient(#13191250,transparent);pointer-events:none}#scene-hotspots{position:fixed;inset:0;z-index:5;pointer-events:none}.hotspot{position:absolute;min-height:48px;display:flex;align-items:center;gap:13px;padding:10px 9px;transform:translate(-50%,-50%);white-space:nowrap;pointer-events:auto;text-shadow:0 1px 5px #0b110cf0,0 2px 15px #0b110ccc,0 0 35px #10120bb3}.hotspot-number{font:11px/1.2 Georgia,serif;letter-spacing:.08em;color:#e9d7af;opacity:.85;transition:opacity .3s}.hotspot-title{font:500 25px/1.3 var(--serif);letter-spacing:.07em;transition:color .3s,transform .45s var(--ease)}.hotspot:hover .hotspot-title,.hotspot:focus-visible .hotspot-title{transform:translateY(-2px)}.hotspot:focus-visible{outline:0}.hotspot:focus-visible .hotspot-title{text-decoration:underline;text-underline-offset:8px;text-decoration-thickness:1px}body:not([data-state=overview]) #scene-hotspots{pointer-events:none}body:not([data-state=overview]) .hotspot{pointer-events:none}
#stage-dim{position:fixed;z-index:10;inset:0;background:#10150f;opacity:0;pointer-events:none}#reader-shade{position:fixed;z-index:11;inset:0;background:linear-gradient(90deg,transparent 16%,#14191138 43%,#141911c9 73%,#141911e3);opacity:0;pointer-events:none;transition:opacity .85s var(--ease)}body.reader-visible #reader-shade{opacity:1}body[data-scene=photography] #reader-shade{background:linear-gradient(90deg,#141911e3,#141911c9 27%,#14191138 57%,transparent 84%)}
#archive-reader{position:fixed;z-index:20;top:128px;bottom:36px;right:5.6vw;width:min(610px,47vw);display:flex;flex-direction:column;outline:none;text-shadow:0 1px 8px #0b120f20}.reader-heading{padding:0 22px 27px 0;flex:none}#archive-number{display:block;font:13px/1 Georgia,serif;color:var(--gold);letter-spacing:.15em;margin-bottom:18px}#archive-title{font:400 clamp(38px,3.8vw,58px)/1.15 var(--serif);letter-spacing:.045em;outline:none}.reader-scroll{overflow:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#c8bca455 transparent;padding:0 22px 32px 0;min-height:0;mask-image:linear-gradient(#000 calc(100% - 22px),transparent)}body[data-scene=photography] #archive-reader{right:auto;left:5.6vw}
.profile-actions{display:flex;align-items:center;gap:30px;margin:8px 0 32px}.primary-link,.text-link{font-size:12px;padding:9px 0;border-bottom:1px solid #d8c69d85}.primary-link>span{margin-left:20px}.primary-link:hover,.text-link:hover{color:#fff}.reading-section{border-top:1px solid var(--line);margin-top:31px;padding-top:24px}.reading-section>h3{font:400 21px var(--serif);margin-bottom:24px;color:#ddcfaf}.experience .period{font-size:11px;color:var(--muted);letter-spacing:.025em}.experience h4{font-size:22px;line-height:1.5;margin:10px 0 17px;font-weight:400}.experience h4>span{display:block;font-size:12px;color:var(--muted);margin-top:7px}.experience>p:not(.period){font-size:13px;line-height:2.1;color:#e4ddcd}.experience ul{font-size:12px;line-height:2.1;color:#d0c8b6;padding-left:18px;margin-top:18px}.experience li{margin:9px 0}.experience+.experience{margin-top:27px;padding-top:25px;border-top:1px solid var(--line)}.tool-list{margin:0}.tool-list>div{display:grid;grid-template-columns:140px 1fr;gap:20px;padding:16px 0;border-bottom:1px solid var(--line)}.tool-list dt{font-size:13px;line-height:1.8}.tool-list dd{font-size:12px;line-height:1.9;color:#cbc2af;margin:0}.education{display:flex;flex-wrap:wrap;gap:30px}.education strong{font-size:16px;font-weight:400}.education p{font-size:11px;color:var(--muted);margin-top:9px}.closing-line{font:24px/1.7 var(--serif);padding-left:20px;border-left:1px solid #c9b58370;margin-top:38px;color:#d9caa8}
.project{border-bottom:1px solid var(--line)}.project summary{cursor:pointer;list-style:none;padding:25px 38px 25px 0;position:relative}.project summary::-webkit-details-marker{display:none}.project-status{font-size:10px;color:var(--muted);display:flex;gap:6px;align-items:center}.project-status i{background:#b5bb92;width:4px;height:4px;border-radius:50%;display:inline-block}.project h3{font-size:25px;line-height:1.4;font-weight:400;margin:12px 0}.project-tools{font-size:10px;color:var(--muted);line-height:1.7}.expand-mark{position:absolute;right:2px;top:50%;font-size:24px;transform:translateY(-50%);font-weight:300;transition:transform .3s var(--ease);color:#d7c9aa}.project[open] .expand-mark{transform:translateY(-50%) rotate(45deg)}.project-body{font-size:13px;line-height:2.1;padding-bottom:27px;color:#dfd8c8}.project-body dl>div{display:grid;grid-template-columns:72px 1fr;gap:16px;padding:14px 0;border-bottom:1px solid var(--line)}.project-body dt{font-size:11px;color:var(--muted)}.project-body dd{margin:0;font-size:12px}.project-note{font-size:11px;color:var(--muted)}
.photo-note{font-size:13px;line-height:1.9;margin-top:5px;color:#ded5c2}.photo-frames{display:grid;grid-template-columns:1.2fr 1fr;gap:25px;margin-top:30px}.photo-frame>div{aspect-ratio:1.35;background:#d3c8a908;border:1px solid #cebc9445;display:grid;place-items:center}.photo-frame>div>span{font:21px var(--serif);color:#c0b18e70}.photo-frame.portrait{padding-top:45px}.photo-frame.portrait>div{aspect-ratio:.76}.photo-frame.daily{margin-top:-50px}.photo-frame figcaption{display:flex;justify-content:space-between;font-size:11px;margin-top:10px;gap:8px}.photo-frame figcaption>span{font-size:10px;color:var(--muted)}
.note-tabs{display:flex;gap:28px;border-bottom:1px solid var(--line);margin:0 0 28px}.note-tabs button{font-size:12px;padding:12px 0 16px;position:relative;color:var(--muted)}.note-tabs button[aria-selected=true]{color:var(--ivory)}.note-tabs button[aria-selected=true]::after{content:'';position:absolute;bottom:-1px;height:1px;background:#d6c296;left:0;right:0}.note-panel h3{font:400 27px/1.6 var(--serif)}.prose>p{font-size:13px;line-height:2.1;margin:17px 0;color:#ded6c5}.prose h4{font-size:18px;font-weight:400;margin:30px 0 14px}.prose blockquote{font:25px/1.7 var(--serif);margin:28px 0;padding-block:20px;border-block:1px solid var(--line);color:#e3d1a9}.article-byline{font-size:10px!important;color:var(--muted)!important}.now-list{padding:0;list-style:none}.now-list li{display:flex;gap:20px;border-bottom:1px solid var(--line);padding:22px 0}.now-list h4{font-size:19px;font-weight:400;margin:0}.now-list p{font-size:12px;line-height:1.8;color:var(--muted);margin-top:9px}.now-list>li>i{width:5px;height:5px;background:#b9bd95;border-radius:50%;margin-top:10px;flex:none}
#page-loader{position:fixed;z-index:80;inset:0;background:#25271f;display:grid;place-items:center}.loader-center{display:flex;flex-direction:column;align-items:center;gap:26px;transform:translateY(-6px)}#loader-mark{font:400 34px/1.4 var(--serif);letter-spacing:.16em;text-indent:.16em;color:#d8caaa}.loader-rule{height:1px;width:84px;background:#c9af792a;overflow:hidden}.loader-rule i{display:block;width:100%;height:100%;background:#b8a478;transform:scaleX(0);transform-origin:left center}#loading-error{position:fixed;z-index:90;inset:0;background:#25271f;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:24px}#loading-error p{font:20px var(--serif);color:#dfd2b7}#retry-load{font-size:12px;padding:10px 15px;border-bottom:1px solid #c9af7960}.no-script{position:fixed;z-index:101;bottom:30px;left:40px;font-size:13px}
@media(min-width:1800px){.site-header{padding-inline:64px;height:130px}.identity-name{font-size:32px}.identity-subtitle{font-size:13px}.hotspot-title{font-size:30px}#archive-reader{top:152px;right:7vw;width:670px}.reader-heading{padding-bottom:35px}.experience>p:not(.period),.prose>p,.project-body{font-size:14px}body[data-scene=photography] #archive-reader{left:7vw}}
@media(max-width:1050px) and (min-width:761px){.site-header{padding-inline:32px;height:96px}#archive-reader{top:110px;right:4vw;width:51vw;bottom:24px}body[data-scene=photography] #archive-reader{left:4vw}.hotspot-title{font-size:23px}.hotspot{gap:10px}.tool-list>div{grid-template-columns:1fr;gap:8px}.reader-heading{padding-bottom:22px}}
@media(max-width:760px){.site-header{height:90px;padding:0 24px}.identity-name{font-size:25px}.identity-subtitle{font-size:10px;letter-spacing:.14em}#identity-button{gap:15px}.top-shade{height:150px}.hotspot{gap:10px;padding:10px 7px}.hotspot-title{font-size:24px}.hotspot-number{font-size:10px}#archive-reader,body[data-scene=photography] #archive-reader{top:112px;left:26px;right:18px;width:auto;bottom:max(20px,env(safe-area-inset-bottom))}.reader-heading{padding:0 14px 24px 0}#archive-number{font-size:11px;margin-bottom:14px}#archive-title{font-size:39px}.reader-scroll{padding:0 14px 30px 0}#reader-shade,body[data-scene=photography] #reader-shade{background:linear-gradient(180deg,#12181005,#1218107a 17%,#121810ad 65%,#121810cf)}.profile-actions{gap:26px;margin:2px 0 28px}.primary-link,.text-link{font-size:11px}.experience h4{font-size:21px}.experience>p:not(.period){font-size:12px}.experience ul{font-size:11px}.tool-list>div{grid-template-columns:1fr;gap:8px}.reading-section{margin-top:25px;padding-top:22px}.reading-section>h3{font-size:19px;margin-bottom:20px}.education{gap:23px}.closing-line{font-size:22px}.project h3{font-size:23px}.project summary{padding-block:23px}.project-body{font-size:12px}.project-body dl>div{grid-template-columns:61px 1fr;gap:12px}.project-body dd{font-size:11px}.photo-frames{gap:18px}.photo-frame.daily{margin-top:-35px}.note-panel h3{font-size:24px}.prose>p{font-size:12px}.prose blockquote{font-size:23px}.note-tabs{gap:26px}.now-list h4{font-size:18px}#loader-mark{font-size:30px}}
@media(max-width:360px){.site-header{padding-inline:20px}.identity-name{font-size:23px}.identity-subtitle{font-size:9px}#identity-button{gap:13px}.hotspot-title{font-size:22px}#archive-reader,body[data-scene=photography] #archive-reader{left:22px;right:12px}.note-tabs{gap:22px}.photo-frame figcaption{font-size:10px}.photo-frame figcaption>span{font-size:9px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{transition:none!important;scroll-behavior:auto!important}}
/* Header enters only after the loading screen has disappeared. */
.site-header{opacity:0;visibility:hidden;transform:translateY(-6px);transition:opacity .45s ease,transform .55s var(--ease),visibility 0s .45s}
body.header-visible .site-header{opacity:1;visibility:visible;transform:none;transition-delay:0s}
body[data-state=loading] .site-header,body[data-state=error] .site-header{transition:none}
#opening-shade{position:absolute;inset:0;pointer-events:none;opacity:0;background:#10150f}
.header-actions{display:flex;align-items:center;gap:25px;pointer-events:auto}.header-actions button{min-height:44px;padding:10px 0;font-size:15px;letter-spacing:.12em;text-shadow:0 1px 6px #0b110fcc,0 2px 18px #0b110fbb;transition:color .25s,opacity .25s}#home-button{color:#f3ebd9}#home-button:hover{color:#fff}body[data-state=loading] #home-button{opacity:.8}.identity-name{font-size:30px}.identity-subtitle{font-size:13px}#identity-button{text-shadow:0 2px 8px #10150fcc,0 3px 20px #10150fa6}.hotspot{isolation:isolate;gap:14px}.hotspot::before{content:'';position:absolute;inset:-5px -15px;z-index:-1;border-radius:50%;background:radial-gradient(ellipse,#151a129e 0%,#151a1261 42%,transparent 72%);filter:blur(7px);pointer-events:none}.hotspot-title{font-size:30px;letter-spacing:.06em;text-shadow:0 2px 5px #0b110fe6,0 3px 15px #0b110faa}.hotspot-number{font-size:12px;opacity:.95}.experience>p:not(.period),.prose>p,.project-body,.photo-note{font-size:14px}.experience ul,.tool-list dd,.project-body dd{font-size:13px}.reader-scroll{text-shadow:0 1px 5px #0b120f80}.reader-heading{text-shadow:0 2px 9px #0b120f80}#loader-mark{font-size:35px;letter-spacing:.13em}
@media(min-width:1800px){.hotspot-title{font-size:34px}.identity-name{font-size:34px}.identity-subtitle{font-size:14px}}
@media(max-width:1050px) and (min-width:761px){.hotspot-title{font-size:27px}}
@media(max-width:760px){.site-header{padding-inline:24px}.identity-name{font-size:26px}.identity-subtitle{font-size:11px}#identity-button{gap:12px}.header-actions{gap:19px}.header-actions button{font-size:13px}.hotspot-title{font-size:27px}.hotspot-number{font-size:11px}.hotspot{gap:10px}.hotspot::before{inset:-4px -12px;filter:blur(6px)}.experience>p:not(.period),.prose>p,.project-body,.photo-note{font-size:13px}.experience ul,.tool-list dd,.project-body dd{font-size:12px}#loader-mark{font-size:30px}}
@media(max-width:360px){.site-header{padding-inline:19px}.identity-name{font-size:23px}.identity-subtitle{font-size:10px}#identity-button{gap:10px}.header-actions{gap:13px}.hotspot-title{font-size:25px}.hotspot-number{font-size:10px}}

/* The portrait belongs to the resume's opening paragraph, not its navigation. */
.resume-intro{display:grid;grid-template-columns:minmax(0,1fr) 166px;align-items:center;gap:36px;margin:4px 0 30px}
.resume-intro-copy>p{font:400 23px/1.85 var(--serif);color:#e4d8bd;letter-spacing:.025em}
.resume-intro .profile-actions{gap:24px;margin:25px 0 0;flex-wrap:wrap}
.resume-portrait{width:100%;aspect-ratio:1856/2304;filter:drop-shadow(0 12px 18px #080e0b55);pointer-events:none}
.resume-portrait img{width:100%;height:100%;object-fit:cover;filter:saturate(.8) sepia(.06);mask-image:linear-gradient(90deg,transparent,#000 3%,#000 97%,transparent),linear-gradient(transparent,#000 3%,#000 84%,transparent);mask-composite:intersect;-webkit-mask-composite:source-in}
.resume-intro+.reading-section{margin-top:0}

/* Two small line studies accompany the essay and project headings. */
.reader-heading{position:relative;isolation:isolate}
.reader-titles{position:relative;z-index:1}
body[data-scene=notes] .reader-heading,body[data-scene=experiments] .reader-heading{min-height:156px;padding:12px 212px 24px 0}
.archive-figure{position:absolute;top:-14px;right:6px;width:196px;aspect-ratio:5/4;isolation:isolate;--hairline-hi:#e2c991;--hairline-edge:#b79c6a;--hairline-mid:#8f7d59;--hairline-lo:#665e46;--hairline-plate:#22271d;--hairline-stroke:.85}
.archive-figure::before{content:'';position:absolute;inset:3% -6% -3%;z-index:-1;background:radial-gradient(ellipse,#22271ddb 12%,#22271d70 46%,transparent 73%);pointer-events:none}
.archive-figure>svg{opacity:.86;filter:drop-shadow(0 2px 6px #0c120b60)}
.archive-figure:focus-visible{outline:1px solid #b79c6a;outline-offset:1px}
@media(min-width:1800px){body[data-scene=notes] .reader-heading,body[data-scene=experiments] .reader-heading{min-height:168px}.resume-intro{grid-template-columns:minmax(0,1fr) 186px}}
@media(max-width:1050px) and (min-width:761px){body[data-scene=notes] .reader-heading,body[data-scene=experiments] .reader-heading{min-height:131px;padding-right:165px}.archive-figure{width:155px;right:0;top:-4px}.resume-intro{grid-template-columns:minmax(0,1fr) 135px;gap:22px}.resume-intro-copy>p{font-size:19px}.resume-intro .profile-actions{gap:18px;margin-top:18px}}
@media(max-width:760px){body[data-scene=notes] .reader-heading,body[data-scene=experiments] .reader-heading{min-height:135px;padding:12px 144px 24px 0}.archive-figure{width:142px;top:-3px;right:-4px;--hairline-stroke:.75}.resume-intro{grid-template-columns:minmax(0,1fr) 126px;gap:20px;margin:4px 0 25px}.resume-intro-copy>p{font-size:18px;line-height:1.8}.resume-intro .profile-actions{gap:16px;margin-top:16px}.resume-intro .primary-link>span{margin-left:7px}}
@media(max-width:360px){body[data-scene=notes] .reader-heading,body[data-scene=experiments] .reader-heading{padding-right:126px;min-height:122px}.archive-figure{width:123px}body:not([data-scene=photography]) #archive-title{font-size:34px}.resume-intro{grid-template-columns:minmax(0,1fr) 108px;gap:14px}.resume-intro-copy>p{font-size:16px}.resume-intro .profile-actions{gap:10px;margin-top:12px}}
@media(max-height:600px) and (min-width:761px){body[data-scene=notes] .reader-heading,body[data-scene=experiments] .reader-heading{min-height:112px;padding-top:0;padding-right:145px}.archive-figure{width:135px;top:-12px}.resume-intro{grid-template-columns:minmax(0,1fr) 112px;gap:20px}.resume-intro-copy>p{font-size:18px;line-height:1.65}.resume-intro .profile-actions{margin-top:10px}}

/* Fine contours resolve into the same Songti lettering as the archive. */
#loader-mark{width:clamp(250px,25vw,350px);font-size:0;line-height:0;text-indent:0;letter-spacing:0}
#loader-mark svg{display:block;width:100%;height:auto;overflow:visible}
.loader-contour{fill:none;stroke:#d7c397;stroke-width:.65;vector-effect:non-scaling-stroke;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1}
.loader-ink{fill:#d8caaa;fill-opacity:0}
.loader-center{gap:22px}
@media(max-width:760px){#loader-mark{width:250px}.loader-contour{stroke-width:.55}}
@media(prefers-reduced-motion:reduce){.loader-contour{stroke-dashoffset:0}.loader-ink{fill-opacity:1}}
