:root{--paper:#f3f1eb;--ink:#292b29;--muted:#65685e;--line:rgba(49,56,42,.2);--accent:#a0b45f;--serif:Georgia,'Times New Roman',serif;--sans:Arial,'PingFang SC','Microsoft YaHei',sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;border:0;background:none}a,button{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible{outline:2px solid #52734d;outline-offset:6px}p,h1,h2,h3,h4{margin:0}img{max-width:100%;display:block}em{font-family:var(--serif);font-weight:400}::selection{background:#d9e9b6;color:#222}body.menu-open{overflow:hidden}.skip-link{position:fixed;top:-60px;left:20px;z-index:100;background:white;padding:12px}.skip-link:focus{top:20px}[hidden]{display:none!important}
#webgl{position:fixed;inset:0;width:100%;height:100%;z-index:0;touch-action:pan-y;outline:0}.paper-grain{position:fixed;inset:0;z-index:7;pointer-events:none;opacity:.045;background-image:none}.site-nav{position:fixed;left:0;right:0;top:0;padding:26px 40px;z-index:30;display:flex;align-items:center;gap:32px;pointer-events:none}.site-nav>*{pointer-events:auto}.wordmark{font-size:26px;letter-spacing:-1.8px;font-weight:500;margin-right:auto}.wordmark span{font-size:10px;vertical-align:top;display:inline-block;letter-spacing:0;margin:3px 0 0 4px}.site-nav>nav{display:flex;gap:30px;font-size:14px}.site-nav>nav a{position:relative;padding:10px 0}.site-nav>nav a:after{content:'';position:absolute;bottom:4px;height:1px;left:0;width:100%;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .3s}.site-nav>nav a:hover:after{transform:scaleX(1)}.menu-toggle{width:48px;height:48px;border-radius:50%;background:rgba(255,255,255,.8);display:flex;align-items:center;justify-content:center;gap:5px;box-shadow:0 1px 15px #5551}.menu-toggle span{width:4px;height:4px;border-radius:50%;background:#292b29;transition:transform .4s}.menu-open .menu-toggle span:first-child{height:16px;width:1px;transform:translateX(3px) rotate(45deg)}.menu-open .menu-toggle span:last-child{height:16px;width:1px;transform:translateX(-3px) rotate(-45deg)}.eyebrow{font-size:11px;letter-spacing:.13em;line-height:1.8;font-weight:500}.runway{position:relative;pointer-events:none}.held{position:sticky;top:0;height:100svh;min-height:600px}.hero{height:180vh}.hero-stage{display:flex;align-items:center;justify-content:center}.hero-kicker{position:absolute;top:21%;font-size:10px;letter-spacing:.2em}.hero-copy{text-align:center;position:relative;pointer-events:auto}.hero-copy h1{font-family:var(--serif);font-size:clamp(78px,13.2vw,220px);font-weight:400;font-style:italic;letter-spacing:-.075em;line-height:1.1;padding:0 .12em .06em 0;white-space:nowrap;cursor:default}.hero-copy h1 span{display:inline-block;transform-origin:50% 65%;will-change:transform}.hero-subtitle{font-size:14px;letter-spacing:.18em;margin:18px 0 36px}.hero-subtitle i{font-style:normal;margin:0 14px;color:#777}.pill{padding:14px 24px;border-radius:32px;display:inline-flex;align-items:center;gap:32px;font-size:12px;background:rgba(255,255,255,.88);box-shadow:0 3px 20px #393e3710;transition:background .3s,color .3s,transform .3s}.pill:hover{background:var(--ink);color:white;transform:translateY(-2px)}.pill span{font-size:18px}.hero-bottom{position:absolute;bottom:34px;left:40px;right:40px;display:flex;align-items:flex-end;justify-content:space-between;font-size:11px;line-height:1.9;padding-left:35px}.hero-bottom p>span{display:block;color:#5c6056}.hero-year{font-size:10px;letter-spacing:.08em}.scroll-cue{display:flex;align-items:center;gap:16px;font-size:9px;letter-spacing:.12em;pointer-events:auto}.scroll-cue b{font-size:20px;font-weight:400}
.works{height:650vh}.work-stage{pointer-events:none}.works-heading{position:absolute;top:125px;left:40px;max-width:260px}.works-heading h2{font-size:clamp(38px,4.6vw,72px);font-weight:400;line-height:1.05;letter-spacing:-.055em;margin-top:14px}.works-heading h2 em{letter-spacing:-.06em}.filters{display:flex;flex-wrap:wrap;gap:14px;margin-top:28px;pointer-events:auto}.filters button{font-size:11px;color:#72766a;padding:5px 0;border-bottom:1px solid transparent;transition:color .2s,border .2s}.filters button.active{color:var(--ink);border-color:var(--ink)}.work-index{position:absolute;bottom:100px;left:40px;width:260px;display:flex;flex-direction:column;gap:7px;pointer-events:auto}.work-index button{padding:5px 0;display:flex;gap:12px;text-align:left;font-size:11px;line-height:1.5;opacity:.5;transition:opacity .3s,transform .3s}.work-index button span{font-size:10px;font-variant-numeric:tabular-nums}.work-index button.active,.work-index button:hover{opacity:1;transform:translateX(5px)}.work-current{position:absolute;bottom:102px;right:40px;width:280px;pointer-events:auto}.work-counter{display:flex;align-items:baseline;gap:10px;margin-bottom:20px;font-size:11px;font-variant-numeric:tabular-nums}.work-counter b{font-size:34px;font-weight:400;font-family:var(--serif);font-style:italic}.work-counter i{font-style:normal;color:#8c9282}.work-current>p:first-of-type{font-size:10px;letter-spacing:.05em;margin-bottom:12px}.work-current h3{font-size:23px;font-weight:400;line-height:1.4;letter-spacing:-.03em}.work-current>p:last-of-type{font-size:12px;line-height:1.9;color:var(--muted);margin:12px 0 20px;max-width:260px}.text-link{display:flex;align-items:center;justify-content:space-between;padding:12px 0;border-bottom:1px solid var(--line);font-size:12px}.text-link span{font-size:20px;transition:transform .3s}.text-link:hover span{transform:translate(3px,-3px)}.work-bottom{position:absolute;bottom:35px;left:40px;right:40px;display:flex;justify-content:space-between;font-size:10px;letter-spacing:.04em;padding-left:35px}.work-bottom a{pointer-events:auto}.work-bottom a span{margin-left:24px}.fallback-gallery{display:none}
.about{position:relative;display:grid;grid-template-columns:44% 56%;min-height:320vh;pointer-events:none;padding:0 40px}.about-left{height:100svh;min-height:650px;position:sticky;top:0;padding:125px 0 55px;display:flex;flex-direction:column;pointer-events:none}.about-left h2{font-size:clamp(36px,4.6vw,70px);font-weight:400;line-height:1.1;letter-spacing:-.055em;margin-top:18px}.about-object-space{flex:1}.about-caption{font-size:12px;line-height:1.9}.about-caption p{margin-top:12px;color:var(--muted)}.about-state{font-size:10px;letter-spacing:.1em}.about-right{padding:140px 0 100px 5%;position:relative}.about-panel{margin:0 0 100px;pointer-events:auto;perspective:1100px}.about-visual{width:100%;aspect-ratio:1.5;position:relative;overflow:hidden;transform-origin:50% 50%;will-change:transform;box-shadow:0 18px 35px #393c3610}.visual-index{position:absolute;top:24px;left:24px;font-size:11px}.visual-label{position:absolute;bottom:24px;left:24px;font-size:9px;letter-spacing:.16em}.visual-product{background:#dfe6cc;color:#4d6044}.product-diagram{position:absolute;inset:0;display:flex;justify-content:center;align-items:center;gap:4%;font-size:26px;font-family:var(--serif)}.product-diagram>span{border:1px solid #9aa98b;border-radius:50%;width:24%;aspect-ratio:1;display:flex;align-items:center;justify-content:center;transform:rotate(-10deg);font-family:var(--sans);font-size:clamp(15px,1.8vw,25px)}.product-diagram i{font-style:normal;font-size:20px}.visual-ai{background:#d5deda;color:#29493d}.ai-word{position:absolute;font-size:clamp(52px,7vw,110px);letter-spacing:-.065em;line-height:.9;top:50%;left:50%;transform:translate(-50%,-50%)}.ai-word em{white-space:nowrap}.about-text{padding-top:28px}.about-text h3{font-size:clamp(26px,3vw,43px);line-height:1.35;font-weight:400;letter-spacing:-.04em;margin:14px 0 22px}.about-text>p{font-size:14px;line-height:2.1;max-width:490px;color:#53594f}.experience-panel{padding:0 0 40px;border-top:1px solid var(--line)}.experience-list{margin-top:36px}.experience-list>div{border-bottom:1px solid var(--line);padding:25px 0}.experience-list time{font-size:10px;letter-spacing:.06em;color:var(--muted)}.experience-list h4{font-size:20px;font-weight:400;margin:14px 0 8px}.experience-list>div>span{font-size:11px}.experience-list p{font-size:13px;line-height:2;margin-top:15px;color:#60665b;max-width:480px}.education{margin-top:28px!important;font-size:12px!important}.education span{font-size:10px;letter-spacing:.04em}.visual-sticker{background:#f7eee1}.visual-sticker img{width:100%;height:100%;object-fit:contain;mix-blend-mode:multiply}.review-status{display:inline-block;font-size:10px;margin-top:20px;padding-bottom:6px;border-bottom:1px solid var(--line)}.sticker-panel{margin-bottom:0}
.contact{position:relative;z-index:2;background:var(--paper);padding:100px 40px 24px;min-height:100vh;border-radius:50px 50px 0 0;box-shadow:0 -1px 0 #353c2a18;overflow:hidden}.contact-top{display:flex;justify-content:space-between;align-items:center;font-size:11px}.contact-layout{display:grid;grid-template-columns:1.15fr 1fr;gap:8vw;align-items:center;padding:90px 0 110px}.animation-slot{width:100%;aspect-ratio:1.2;border:1px solid #8e988238;border-radius:22px;position:relative;background:#f9f8f338}.animation-slot i{position:absolute;width:10px;height:10px;border-color:#a8af9e;border-style:solid}.animation-slot i:nth-child(1){left:20px;top:20px;border-width:1px 0 0 1px}.animation-slot i:nth-child(2){right:20px;top:20px;border-width:1px 1px 0 0}.animation-slot i:nth-child(3){right:20px;bottom:20px;border-width:0 1px 1px 0}.animation-slot i:nth-child(4){left:20px;bottom:20px;border-width:0 0 1px 1px}.contact-copy h2{font-size:clamp(50px,6vw,90px);font-weight:400;letter-spacing:-.06em;line-height:1.2;white-space:nowrap}.contact-copy>p{font-size:12px;color:var(--muted);margin:20px 0 45px}.contact-copy>a{display:grid;grid-template-columns:1fr 26px;align-items:center;border-top:1px solid var(--line);padding:20px 0;gap:10px}.contact-copy small{font-size:9px;letter-spacing:.13em;grid-column:1}.contact-copy a span{font-size:clamp(14px,1.6vw,23px);letter-spacing:-.02em;grid-column:1}.contact-copy b{font-size:24px;font-weight:400;grid-column:2;grid-row:1/3;transition:transform .3s}.contact-copy a:hover b{transform:translate(4px,-4px)}.footer-line{border-top:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;padding-top:24px;font-size:10px}.footer-line a{padding:10px}.motion-toggle{position:fixed;z-index:35;left:24px;bottom:20px;width:34px;height:34px;border-radius:50%;background:#ffffffe0;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 20px #2221}.motion-bars{height:12px;display:flex;gap:2px;align-items:center}.motion-bars i{height:9px;width:2px;background:#404939}.motion-bars i:nth-child(2){height:14px}.motion-bars i:nth-child(3){height:6px}.motion-text{position:absolute;left:42px;white-space:nowrap;font-size:9px;background:#fffd;padding:6px 8px;border-radius:4px;opacity:0;pointer-events:none;transition:opacity .2s}.motion-toggle:hover .motion-text,.motion-toggle:focus-visible .motion-text{opacity:1}.motion-paused .motion-bars i{height:8px}
.full-menu{position:fixed;inset:0;background:#e7ecdd;z-index:25;padding:140px 12vw 50px;display:flex;flex-direction:column;justify-content:center}.full-menu>nav{margin-top:25px}.full-menu nav>a{display:flex;align-items:baseline;border-bottom:1px solid #29312430;padding:17px 0;font-size:clamp(34px,5vw,74px);letter-spacing:-.05em}.full-menu small{font-size:10px;letter-spacing:0;width:50px}.full-menu nav>a>span{font-family:var(--serif);font-style:italic;font-size:.55em;margin-left:auto}.menu-email{margin-top:35px;font-size:14px}.full-menu a{transition:color .3s}.full-menu a:hover{color:#7a8e5b}#cursor{position:fixed;z-index:100;left:0;top:0;width:24px;height:24px;border:1px solid #3a4c4570;border-radius:50%;pointer-events:none;transform:translate(-100px,-100px);display:flex;align-items:center;justify-content:center;transition:width .25s,height .25s,background .25s;backdrop-filter:blur(.4px)}#cursor span{font-size:8px;white-space:nowrap}#cursor.over-link{width:48px;height:48px;background:#ffffffe0;border-color:transparent}#transition-image{position:fixed;z-index:45;pointer-events:none;display:none;overflow:hidden;will-change:transform,clip-path;background-size:cover;background-position:center;box-shadow:0 12px 50px #3332}#transition-image img{width:100%;height:100%;object-fit:cover}body.in-detail #webgl{opacity:0;pointer-events:none}body.in-detail .paper-grain{opacity:.025}#detail-view{position:relative;z-index:3;background:var(--paper);min-height:100vh}.noscript-note{position:fixed;bottom:0;z-index:50;background:#fff;padding:20px;left:0;right:0}
.no-webgl #webgl{display:none}.no-webgl .hero{height:110vh;background:radial-gradient(ellipse at 70% 30%,#f7ded0,transparent 55%),linear-gradient(120deg,#e5eddf,#f4ede5)}.no-webgl .works{height:auto;pointer-events:auto;padding:90px 40px}.no-webgl .work-stage{position:relative;height:auto;min-height:0}.no-webgl .works-heading{position:static;max-width:none}.no-webgl .works-heading h2 br{display:none}.no-webgl .work-index,.no-webgl .work-current,.no-webgl .work-bottom{display:none}.no-webgl .fallback-gallery{display:grid;grid-template-columns:1fr 1fr;gap:50px 30px;margin-top:45px}.fallback-gallery a{display:block}.fallback-gallery img,.fallback-cover{width:100%;aspect-ratio:1.5;object-fit:cover;background:#dee4d6}.fallback-gallery h3{font-size:18px;font-weight:400;margin:15px 0 10px}.fallback-gallery p{font-size:13px;line-height:1.8;color:var(--muted)}.fallback-cover{display:flex;align-items:center;justify-content:center;font-size:34px}.no-webgl .about-left{background:radial-gradient(ellipse at 40% 50%,#dce4cf,transparent 55%)}
@media(min-width:1600px){.site-nav{padding:32px 60px}.works-heading,.work-index{left:60px}.work-current{right:60px;width:320px}.about{padding:0 60px}.contact{padding-left:60px;padding-right:60px}}
@media(max-width:1100px){.works-heading{max-width:190px}.works-heading h2{font-size:48px}.work-index{width:190px}.work-current{width:220px}.work-current h3{font-size:20px}.work-current>p:last-of-type{font-size:11px}.about{grid-template-columns:40% 60%;padding:0 30px}.about-left h2{font-size:43px}.about-right{padding-left:8%}.contact-layout{gap:5vw}.contact-copy h2{font-size:64px}}
@media(max-width:900px){.site-nav{padding:20px 22px;gap:20px}.wordmark{font-size:23px}.site-nav>nav{gap:18px;font-size:12px}.menu-toggle{width:39px;height:39px}.held{min-height:560px}.hero-kicker{top:24%;font-size:8px}.hero-copy h1{font-size:16.3vw;letter-spacing:-.075em}.hero-subtitle{font-size:11px;margin:18px 0 30px;letter-spacing:.1em}.hero-subtitle i{margin:0 8px}.pill{font-size:11px;padding:13px 20px;gap:24px}.hero-bottom{left:22px;right:22px;bottom:27px;padding-left:32px}.hero-bottom p{font-size:10px}.hero-bottom p>span{font-size:9px}.hero-year{display:none}.scroll-cue{font-size:8px;gap:10px}.hero{height:165vh}.works{height:650vh}.works-heading{top:100px;left:22px;max-width:none}.works-heading .eyebrow{font-size:9px}.works-heading h2{font-size:38px;line-height:1.05;margin-top:8px}.works-heading h2 br{display:none}.works-heading h2 em{margin-left:8px}.filters{margin-top:14px;gap:20px}.filters button{font-size:10px}.work-index{left:auto;right:22px;top:108px;bottom:auto;width:auto;gap:6px}.work-index button{padding:3px;display:none;font-size:10px}.work-index button.active{display:flex}.work-index button .index-title{display:none}.work-current{left:22px;right:22px;bottom:82px;width:auto;background:linear-gradient(0deg,#f3f1ebeb,#f3f1eb00);padding-top:25px}.work-counter{position:absolute;right:0;top:24px;margin:0}.work-counter b{font-size:25px}.work-current>p:first-of-type{font-size:9px;margin-bottom:8px}.work-current h3{font-size:22px;max-width:80%}.work-current>p:last-of-type{font-size:11px;max-width:280px;margin:10px 0}.text-link{width:145px;font-size:11px;padding:8px 0}.work-bottom{left:22px;right:22px;bottom:29px;padding-left:32px;font-size:9px}.about{grid-template-columns:1fr;padding:0 22px}.about-left{position:sticky;top:0;min-height:0;height:48svh;padding:95px 0 20px;z-index:1}.about-left h2{font-size:35px;margin-top:8px}.about-left>.eyebrow{font-size:9px}.about-caption{position:absolute;right:0;bottom:18px;font-size:9px;max-width:160px;text-align:right}.about-caption p{display:none}.about-right{padding:30px 0 70px;z-index:2;margin-top:0}.about-panel{margin-bottom:70px}.about-visual{aspect-ratio:1.4}.about-text{padding:24px 3px 0;background:linear-gradient(#f3f1ebee,#f3f1ebcc);backdrop-filter:blur(6px)}.about-text h3{font-size:30px}.about-text>p{font-size:13px}.product-diagram>span{font-size:18px}.ai-word{font-size:76px}.visual-label{font-size:8px;bottom:18px;left:18px}.visual-index{top:18px;left:18px}.experience-list h4{font-size:19px}.contact{padding:70px 22px 20px;border-radius:28px 28px 0 0;min-height:auto}.contact-top{font-size:9px;gap:14px}.contact-top .eyebrow{font-size:9px}.contact-layout{grid-template-columns:1fr;gap:45px;padding:40px 0 55px}.animation-slot{aspect-ratio:1.55;border-radius:16px}.contact-copy h2{font-size:64px}.contact-copy>p{margin-bottom:30px;font-size:11px}.contact-copy a span{font-size:21px}.footer-line{font-size:8px;gap:12px;flex-wrap:wrap}.footer-line>span:nth-child(2){display:none}.motion-toggle{left:14px;bottom:20px;width:29px;height:29px}.full-menu{padding:110px 24px 50px}.full-menu nav>a{font-size:40px;padding:20px 0}.full-menu small{width:35px}.full-menu>p{font-size:9px}.no-webgl .works{padding:90px 22px}.no-webgl .fallback-gallery{grid-template-columns:1fr}.no-webgl .about-left{position:relative}.no-webgl .hero{height:100svh}}
@media(hover:none){#cursor{display:none}.motion-text{display:none}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}#cursor{display:none}}

#home-view{position:relative;z-index:1;pointer-events:none}.contact{pointer-events:auto}


.motion-paused #cursor{display:none}html:not([data-scene='ready']) #webgl{visibility:hidden}

/* Keep navigation readable when project planes travel behind it. */
.site-nav::before{content:'';position:absolute;inset:0;z-index:-1;background:linear-gradient(180deg,rgba(250,244,248,.94),rgba(250,244,248,.62),rgba(250,244,248,0));pointer-events:none}
@media(max-width:900px){.work-stage::before{content:'';position:absolute;left:0;right:0;top:75px;height:160px;background:linear-gradient(180deg,rgba(243,241,235,.96) 0%,rgba(243,241,235,.94) 64%,rgba(243,241,235,0));pointer-events:none}.works-heading,.work-index{z-index:1}.site-nav::before{background:rgba(250,244,248,.88);backdrop-filter:blur(12px)}}


.work-current{padding:20px 20px 16px;background:rgba(245,246,239,.88);backdrop-filter:blur(18px);border-top:1px solid rgba(80,95,62,.2);border-radius:0 0 6px 6px}.work-current>p:last-of-type{max-width:none}.work-current .work-counter{margin-bottom:14px}@media(max-width:900px){.work-current{padding:18px 18px 14px;bottom:75px;background:rgba(245,246,239,.9)}.work-counter{right:18px;top:15px}.work-current .work-counter{margin:0}.work-current>p:last-of-type{max-width:75%}}

/* 首屏：用户建筑摄影背景（粉 / 淡紫 / 珍珠白）。文字与导航仅做配色与层级协调，结构与交互不变。 */
.hero-fallback{position:absolute;inset:0;background:url('assets/hero-bg.webp') center/cover no-repeat;transform:scale(1.045)}
html[data-scene='ready'] .hero-fallback{display:none}
.hero-copy h1{color:#3d2f3c;text-shadow:0 2px 26px rgba(255,236,246,.5),0 0 6px rgba(255,240,248,.28)}
.hero-subtitle{color:#4a3c49;text-shadow:0 1px 18px rgba(255,240,248,.8)}
.hero-kicker{color:#5a4a58;text-shadow:0 1px 14px rgba(255,244,250,.8)}
.hero-bottom{color:#453642;text-shadow:0 1px 16px rgba(255,240,248,.85)}
.hero-bottom p>span{color:#5c4c58}
/* 低高度视口：首屏舞台不强制超出屏幕，避免底部信息被裁切。仅作用于首屏，不影响滚动衔接。 */
@media(max-height:620px){.hero-stage.held{min-height:100svh}.hero-bottom{bottom:20px}}

/* 仅中央主标题 CaoLijun 使用 Instrument Serif Italic（自托管），其余文字字体不变。 */
@font-face{font-family:'Instrument Serif';font-style:italic;font-weight:400;font-display:swap;src:url('assets/fonts/instrument-serif-italic.woff2') format('woff2')}
.hero-copy h1{font-family:'Instrument Serif',Georgia,'Times New Roman',serif;font-style:italic;font-weight:400;letter-spacing:-.015em}
.hero-subtitle .lw{display:inline-block}
/* 液态文字覆盖层：仅在启用时隐藏对应 HTML 文字（保留布局盒用于测量），由 WebGL 纹理接管绘制。 */
#liquid-text{position:fixed;inset:0;width:100%;height:100%;z-index:2;pointer-events:none}
.liquid-text-on #hero-title,.liquid-text-on .hero-kicker,.liquid-text-on .hero-subtitle .lw{visibility:hidden}



/* Align the two-line signature with the bottom music disc. */
.hero-bottom>p{position:relative;top:8px}
