@charset "UTF-8";
:root{--paper:#f3faff;--ink:#122d48;--blue:#315887;--accent:#739cd2;--line:#b4cce9;--muted:#8195b0;--display:'Bodoni Moda','Bodoni 72',Didot,Georgia,serif;--serif:'Noto Serif SC','Songti SC',serif;--sans:Arial,'PingFang SC','Microsoft YaHei',sans-serif;--gutter:4.6875vw;--header:8.8vh;--motion:650ms}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-snap-type:y proximity;scroll-padding-top:0}body{margin:0;color:var(--ink);background:var(--paper);font-family:var(--serif);-webkit-font-smoothing:antialiased}body::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:-1;background:radial-gradient(ellipse at 35% 38%,#fff8,transparent 68%),linear-gradient(115deg,#f5faff,#f1f9fc 70%,#f5faff)}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}button:disabled{cursor:default}img{display:block;max-width:100%;height:auto}h1,h2,h3,h4,p{margin:0}ul,ol{margin:0;padding:0;list-style:none}svg{display:block}.icon{display:inline-block;width:1.08em;height:1.08em;vertical-align:-.1em;flex-shrink:0}::selection{background:#c3e0f9;color:#071f45}:focus-visible{outline:2px solid #266cbf;outline-offset:7px;border-radius:2px}.skip-link{position:fixed;left:1rem;top:-80px;background:white;padding:12px;z-index:100}.skip-link:focus{top:10px}
.site-header{height:var(--header);position:fixed;left:var(--gutter);right:var(--gutter);top:0;z-index:15;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #98b0ca;background:linear-gradient(var(--paper) 40%,#f3faffed);backdrop-filter:blur(8px)}.wordmark{font-family:var(--display);font-size:clamp(25px,2.06vw,38px);font-weight:600;letter-spacing:-.055em;line-height:1}.site-header nav{display:flex;gap:2.8vw;font-family:var(--sans);font-size:clamp(11px,.98vw,17px);letter-spacing:.025em;align-self:stretch;align-items:center}.site-header nav a{position:relative;padding:12px 0;line-height:1}.site-header nav a::after{content:"";position:absolute;bottom:0;left:0;right:0;height:3px;background:#82a9d7;transform:scaleX(0);transform-origin:left;transition:transform 250ms}.site-header nav a[aria-current]::after,.site-header nav a:hover::after{transform:scaleX(1)}
.scene{position:relative;min-height:720px;height:100svh;scroll-snap-align:start;padding:0 var(--gutter);isolation:isolate;overflow:clip}.display{font-family:var(--display);font-weight:800;letter-spacing:-.055em;line-height:1.05}.short-rule{display:block;height:1px;width:7.1vw;background:#82aafa}.eyebrow{font-family:var(--sans);font-size:clamp(16px,1.68vw,28px);letter-spacing:.11em;font-weight:400}.quiet{color:#71839b;font-family:var(--sans);letter-spacing:.09em;font-size:clamp(12px,.9vw,15px)}.outline-button{border:1px solid #5f87bc;display:inline-flex;gap:.65em;justify-content:center;align-items:center;min-height:48px;padding:.8em 1.25em;font-family:var(--sans);font-size:clamp(14px,1.35vw,23px);letter-spacing:.03em;transition:background 200ms,box-shadow 200ms}.outline-button:hover{background:#e4f1fc;box-shadow:0 3px 14px #41689812}.portrait-parallax{transform:translate(var(--mx,0),var(--my,0));transition:transform .6s cubic-bezier(.2,.8,.2,1)}.wave{position:absolute;width:110%;left:-5%;height:60px;fill:none;stroke:#a6c9fb;stroke-width:.8;pointer-events:none}.wave path:last-child{opacity:.55}.section-footer{position:absolute;bottom:4.6vh;left:var(--gutter);right:var(--gutter);border-top:1px solid #a9bfdc;padding-top:2.6vh;display:flex;align-items:center;justify-content:space-between;font-size:clamp(15px,1.35vw,23px)}.section-footer a{display:flex;gap:.5em;align-items:center}.section-footer a:hover .icon{transform:translate(2px,-2px)}.section-footer .icon{transition:transform .2s}
/* Home */
.home-copy{position:absolute;left:6.7vw;top:31.1%;z-index:2}.home-copy h1{font-size:14vw;transform:scaleX(.93);transform-origin:left center;line-height:1.1;letter-spacing:-.065em;margin-left:-.9vw}.home-copy .short-rule{margin:1.5vh 0 3.4vh}.hero-description{font-size:2.8vw;line-height:1.6;font-weight:500;letter-spacing:.01em}.hero-portrait{position:absolute;width:43vw;right:4.2vw;top:19.2%;}.hero-portrait img{width:100%;object-fit:contain}.scroll-cue{display:inline-flex;align-items:center;gap:2.2vw;margin-top:5.1vh;font-family:var(--sans)}.scroll-cue svg{width:24px;height:76px;fill:none;stroke:#426696;stroke-width:1.2}.scroll-cue b{font-weight:400;display:block;letter-spacing:.25em;font-size:clamp(12px,1.16vw,20px)}.scroll-cue small{display:block;letter-spacing:.26em;font-size:clamp(11px,.98vw,17px);margin-top:10px}.scroll-cue:hover svg{animation:arrow-down 1.3s infinite}.home-wave{bottom:5.4vh;animation:wave-drift 12s ease-in-out infinite alternate}.floating{animation:float 7s ease-in-out infinite}.home-scene:not(.in-view) .floating{animation-play-state:paused}@keyframes float{50%{transform:translateY(-8px)}}@keyframes arrow-down{50%{transform:translateY(7px)}}@keyframes wave-drift{to{transform:translateX(3%) translateY(5px)}}
/* About */
.about-story{position:absolute;top:15.4%;left:var(--gutter);width:60.8vw;height:80%}.about-story h2{font-size:7.72vw;margin:.5vh 0 2.0vh;white-space:nowrap}.about-description{font-size:2.12vw;line-height:1.52;letter-spacing:.005em}.sketch-wrap{position:relative;height:56vh;width:55.5vw;margin-top:-1.2vh}.sketch-wrap>img{position:absolute;height:100%;width:auto;left:6.6vw;top:0;object-fit:contain}.hair-note{position:absolute;left:36.5vw;top:1.6vh;display:flex;font-family:var(--sans);font-size:1.18vw;line-height:1.45;align-items:flex-start}.hair-note svg{width:7.2vw;height:6.9vw;margin-top:1vh;margin-right:.6vw;overflow:visible;stroke:#7aa4d6;stroke-width:1.25;fill:none}.hair-note circle{fill:#78a4d4;stroke:#fff}.hair-note span{white-space:nowrap}.sketch-guides{position:absolute;left:4.8vw;top:16%;width:38vw;height:76%;border-left:1px solid #b6d5f466;border-bottom:1px solid #b6d5f466;transform:rotate(-.5deg)}.sketch-guides span{width:25px;height:1px;background:#aed2f5;position:absolute}.sketch-guides span::after{content:'';position:absolute;width:1px;height:25px;background:#aed2f5;top:-12px;left:12px}.sketch-guides span:nth-child(1){left:-12px;top:0}.sketch-guides span:nth-child(2){right:0;top:-8%}.sketch-guides span:nth-child(3){left:-12px;bottom:0}.resume-hook{position:absolute;border-left:1px solid #bcd5f0;left:65.5%;right:var(--gutter);top:14.65%;height:79.7%;padding-left:7.1vw;padding-top:4.2vh;display:flex;flex-direction:column;align-items:flex-start}.resume-hook>h3{font-size:4.3vw;line-height:1.1;font-weight:700}.resume-hook>p{font-family:var(--sans);font-size:1.45vw;letter-spacing:.12em;margin-top:.5vh}.resume-hook>.short-rule{width:2.3vw;margin-top:1.5vh;margin-bottom:2.9vh}.mini-trigger{width:20.4vw;height:45.6vh;transition:transform .4s,filter .4s;flex-shrink:0;text-align:left}.mini-trigger:hover{transform:translateY(-6px) rotate(-.6deg);filter:drop-shadow(0 8px 12px #35587c18)}.resume-mini{height:100%;width:100%;background:#fff;box-shadow:0 5px 14px #365c8126;padding:1.65vw 1.55vw;color:#112d50;font-family:var(--serif);display:flex;flex-direction:column;overflow:hidden;position:relative}.resume-mini::before{content:'';width:32%;height:21%;position:absolute;right:4%;top:3%;opacity:.35;background:repeating-linear-gradient(118deg,transparent 0 3px,#c2def1 3.2px 3.5px,transparent 3.7px 8px),linear-gradient(90deg,transparent,#c7e2f8)}.resume-mini header{position:relative;padding-bottom:1.3vw;border-bottom:1px solid #e7eef6;flex-shrink:0}.resume-mini header b{font-size:1.56vw;font-weight:600;line-height:1.2;white-space:nowrap;letter-spacing:-.06em}.resume-mini header small{display:block;font-size:.75vw;line-height:1.5;margin-top:.3vw;white-space:nowrap}.mini-section{border-bottom:1px solid #e0eaf5;display:grid;grid-template-columns:1.2vw 1fr;gap:.6vw;flex:1;padding:.55vw 0;min-height:0}.mini-section:last-child{border:0}.mini-section>.icon{width:.95vw;height:.95vw;margin-top:.05vw}.mini-section h4{font-size:.8vw;line-height:1.25;font-weight:500;margin-bottom:.33vw}.mini-lines{display:flex;flex-direction:column;gap:.28vw}.mini-lines i{height:.25vw;width:var(--line);background:#dce4eb;display:block}.resume-open{margin-top:3.1vh;width:20.4vw;min-height:5.8vh}.resume-hook>.quiet{text-align:center;width:20.4vw;margin-top:1.8vh}
/* Build */
.build-intro{position:absolute;left:var(--gutter);top:18.1%;width:42vw}.build-intro h2{font-size:15.6vw;line-height:.96;transform:scaleX(.92);transform-origin:left center}.build-intro>p{font-size:3.45vw;letter-spacing:.16em;line-height:1.25;margin-top:-1vh;color:#425b78}.build-art{position:absolute;left:0;top:19vh;width:39vw}.build-art img{width:100%;height:auto}.project-index{position:absolute;left:48.4%;right:var(--gutter);top:16.7%;bottom:9.1%;}.index-label{color:#7896bf;font-size:1.21vw;letter-spacing:.17em;display:flex;gap:1.3vw;align-items:center;margin-bottom:3vh}.index-label>span{width:5vw;height:1px;background:#bad4ef}.project-list{position:relative;margin-left:4.7vw;height:calc(100% - 5vh);border-left:1px solid #b2cbeb;display:flex;flex-direction:column}.project-list li{position:relative;flex:1;margin-left:2.3vw;border-bottom:1px solid #bdd4ed;display:flex;align-items:center}.project-list li::before{content:'';position:absolute;width:6px;height:6px;border-radius:50%;background:#7ca0d1;left:calc(-2.3vw - 3px);top:40%}.project-list li::after{content:'';width:2px;height:14px;background:#7598c7;position:absolute;right:0;bottom:-7px}.project-list li>a,.project-list li>button,.project-static{display:flex;align-items:center;width:100%;min-height:70%;text-align:left;gap:10px;position:relative}.project-name{font-family:var(--serif);font-size:4.15vw;line-height:1.3;white-space:nowrap;font-weight:500;letter-spacing:-.03em;transition:transform .3s}.project-list li:nth-child(even) .project-name{padding-left:5.8vw}.project-number{position:absolute;left:-7vw;top:35%;transform:translateY(-50%);font:italic 400 2.65vw var(--display);color:#6085ba}.project-list li:nth-child(even) .project-number{left:0}.project-arrow{opacity:0;margin-left:auto;width:22px;color:#628abf;transition:opacity .3s}.project-list a:hover .project-arrow,.project-list button:hover .project-arrow{opacity:1}.project-list a:hover .project-name,.project-list button:hover .project-name{transform:translateX(6px)}
/* Write */
.write-intro{position:absolute;left:var(--gutter);top:23.7%}.write-intro h2{font-size:13.5vw;line-height:1.02;transform:scaleX(.91);transform-origin:left center}.write-intro>p{font-size:3.05vw;font-weight:600;margin-top:1vh}.write-intro>.short-rule{margin-top:3.6vh;width:9.5vw}.writing-index{position:absolute;left:53.1%;right:var(--gutter);top:24.7%;bottom:25.2%;display:flex;flex-direction:column;justify-content:space-between}.writing-category{position:relative;border-top:1px solid #b4cde9;min-height:17.4vh;padding:3.4vh 0 1vh 2.3vw;border-left:1px solid #b4cde9}.writing-category::after{content:'';position:absolute;right:0;top:-7px;height:16px;width:2px;background:#6489bf}.writing-category:nth-child(2){margin-left:-2.4vw}.category-number{position:absolute;left:-5vw;top:3.7vh;font:italic 400 2.65vw var(--display);color:#5c82b9}.category-number::after{content:'';height:5px;width:5px;background:#7e9aca;border-radius:50%;position:absolute;left:calc(5vw - 2px);top:50%}.writing-category h3{font-size:3.9vw;font-weight:500;line-height:1.3}.writing-category h3>span{font-size:1.2vw;letter-spacing:.14em;color:#6284b3;margin-left:1.1vw;vertical-align:middle;font-weight:400}.write-scene .section-footer{font-size:1.3vw;font-family:var(--sans);color:#546887}.article-list,.channel-list{margin-top:1rem}.article-list li,.channel-list li{padding:1rem 0;border-bottom:1px solid var(--line)}.article-list a,.article-list button,.channel-list a{font-size:1.2rem;display:flex;gap:1em;text-align:left}.article-list time{font-size:.75rem;color:var(--muted);display:block;margin-top:.5em}.article-list p,.channel-list p{font-size:.9rem;margin-top:.5em;color:#536c88;line-height:1.8}.write-scene:has(.article-list),.write-scene:has(.channel-list){height:auto;min-height:100svh;padding-top:24vh;padding-bottom:180px;display:grid;grid-template-columns:1fr 1fr;gap:6vw}.write-scene:has(.article-list) .write-intro,.write-scene:has(.channel-list) .write-intro{position:static}.write-scene:has(.article-list) .writing-index,.write-scene:has(.channel-list) .writing-index{position:static;gap:80px}
/* Contact */
.contact-copy{position:absolute;left:6.05vw;top:16.0%}.contact-copy .eyebrow{font-size:1.22vw;letter-spacing:.3em}.contact-copy h2{font-size:7.95vw;font-weight:500;line-height:1.15;letter-spacing:-.02em;margin-top:2.4vh}.contact-copy .short-rule{width:3.4vw;height:2px;margin:2.6vh 0 1.5vh}.signature{font-family:var(--display);font-style:italic;font-size:2vw}.wechat{position:absolute;left:67.7%;top:15.7%;width:20.7vw;text-align:center}.contact-context{font-size:1.5vw;white-space:nowrap;letter-spacing:.05em;margin-bottom:2.5vh}.wechat h3{font-size:1.42vw;letter-spacing:.01em;margin:0 0 1.2vh;font-weight:500}.qr-button{display:block;width:20vw;aspect-ratio:1;overflow:hidden;padding:0;background:#fff;transition:box-shadow .3s,transform .3s}.qr-button:hover{box-shadow:0 7px 25px #7193b227;transform:translateY(-3px)}.qr-crop{display:block;position:relative;width:100%;height:100%;overflow:hidden;background:white}.qr-crop img{max-width:none;position:absolute;width:147.86%;height:auto;left:-23.93%;top:-65.18%;}.qr-caption{font-size:1.35vw;color:#7187ae;letter-spacing:.12em;margin-top:1.1vh}.contact-flow{position:absolute;left:0;right:0;top:61.8%;height:10.8%;min-height:80px;display:flex;align-items:center;overflow:hidden;background:linear-gradient(transparent,#e9f6fc88,transparent)}.flow-track{display:flex;width:max-content;animation:flow 50s linear infinite;will-change:transform}.flow-group{display:flex;gap:2.6vw;align-items:center;padding-right:2.6vw;flex-shrink:0;font-family:var(--serif);font-size:1.55vw;white-space:nowrap;color:#10336c}.flow-group i{font-style:normal;color:#72a1d9}.contact-flow .wave{height:30px}.flow-top{top:-6px}.flow-bottom{bottom:0}.flow-toggle{position:absolute;right:1vw;bottom:0;font:12px var(--sans);color:#5275a3;padding:4px;background:#f3faffa6;opacity:0;transition:opacity .2s}.contact-flow:hover .flow-track,.contact-flow:focus-within .flow-track,.contact-flow.paused .flow-track{animation-play-state:paused}.contact-flow:hover .flow-toggle,.flow-toggle:focus-visible,.contact-flow.paused .flow-toggle{opacity:1}@keyframes flow{to{transform:translateX(-50%)}}.contact-actions{position:absolute;top:77.6%;left:5vw;right:4.9vw;display:flex;align-items:center;justify-content:space-between;font-family:var(--sans);font-size:1.4vw;color:#0758db}.contact-actions>div{display:flex;align-items:center;gap:1.5vw}.contact-actions a{display:flex;align-items:center;gap:.3em}.contact-actions .action-divider{height:1.2em;width:1px;background:#658ac7}.contact-actions .outline-button{border-color:#0758db;min-height:5.7vh;font-size:1.4vw}.contact-actions button:hover,.contact-actions a:hover{color:#103368}.contact-scene .section-footer{color:#173776}
/* Shared dialogs and genuine resume */
.modal-open{overflow:hidden}dialog{color:var(--ink);font-family:var(--serif);border:0;padding:0}dialog::backdrop{background:#244c7140;backdrop-filter:blur(5px);animation:backdrop-in .3s ease}.resume-dialog{background:transparent;width:min(1100px,72vw);max-width:calc(100vw - 32px);max-height:94svh;overflow:visible;border-radius:32px;animation:modal-in .45s cubic-bezier(.18,.8,.2,1);box-shadow:0 22px 60px #24466a1a;}.glass-panel{position:relative;border:2px solid #8de2ff;border-radius:32px;background:linear-gradient(116deg,#fff9,#d8eeffb8 30%,#eaf6ffeb 65%,#cfefffca);backdrop-filter:blur(30px);padding:4.3vh 3.8vw 2vh;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 6px #8fd4f29c,inset 0 0 0 9px #fff9,inset 0 0 23px 11px #85cbf35c,0 0 0 1px #fff,0 0 15px #96deff88;max-height:94svh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#aecae3 transparent}.glass-panel::before{content:"";pointer-events:none;position:absolute;inset:5px;border-radius:27px;border:1px solid #fff;background:linear-gradient(128deg,#fff0 4%,#fff9 5%,#fff0 6%,transparent 96%,#fff9 97%,#fff0 98%);}.resume-toolbar{position:absolute;top:1.8vh;right:2.6vw;display:flex;gap:16px;align-items:center;font-family:var(--sans);font-size:12px;z-index:1}.resume-toolbar button{opacity:.7;padding:4px}.resume-toolbar button:hover{opacity:1}.resume-toolbar [data-close]{font-size:16px;display:flex;gap:10px;align-items:center;opacity:1}.resume-toolbar [data-close] .icon{font-size:24px}.resume-heading{padding-bottom:1.7vh}.resume-heading h2{font-family:var(--display);font-size:clamp(32px,4.1vw,64px);font-weight:700;line-height:1.08;letter-spacing:-.04em}.resume-heading h2>span{font-family:var(--serif);font-size:.85em;letter-spacing:-.03em}.resume-role{font-size:clamp(17px,1.7vw,27px);color:#145dca;line-height:1.5;margin-top:.5vh}.resume-contacts{display:flex;flex-wrap:wrap;align-items:center;gap:12px;font-size:clamp(12px,1.26vw,20px);margin-top:.6vh;line-height:1.5}.resume-section{display:grid;grid-template-columns:10.4vw 1fr;border-top:1px solid #72c5ec;padding:1.2vh 0;gap:1vw;line-height:1.6;font-size:clamp(12px,1.1vw,17px)}.resume-section h3{font-size:clamp(15px,1.42vw,23px);display:flex;gap:12px;align-items:flex-start;white-space:nowrap;font-weight:600}.resume-section h3 .icon{font-size:27px;margin-top:2px}.resume-record+.resume-record{margin-top:1vh}.record-title{display:flex;flex-wrap:wrap;gap:.25em .5em}.record-title>span::before,.record-title>time::before{content:'|';padding-right:.5em;color:#6b8aa7}.record-title strong{font-weight:600}.skills-list{display:grid;grid-template-columns:1fr 1fr;column-gap:1.8vw;row-gap:.35vh;padding-left:1em;list-style:disc}.skills-list li{padding-right:.3em}.skills-list li:nth-child(2){grid-column:1;grid-row:2}.skills-list li:nth-child(3){grid-column:2;grid-row:1}.skills-list li:nth-child(4){grid-column:2;grid-row:2}.certificates>span{padding:0 .45em}.resume-dialog.paper{border-radius:6px}.paper .glass-panel{border:1px solid #e3eef7;background:#fff;border-radius:6px;box-shadow:0 20px 70px #243e4f25}.paper .glass-panel::before{display:none}.paper .resume-section{border-color:#a9cbea}@keyframes modal-in{from{opacity:0;transform:translateY(15px) scale(.97)}to{opacity:1;transform:none}}@keyframes backdrop-in{from{opacity:0}to{opacity:1}}.detail-dialog{width:min(850px,90vw);max-height:88svh;background:var(--paper);box-shadow:0 20px 80px #12324944;padding:50px;border:1px solid #b3cfea;animation:modal-in .3s}.dialog-close{position:absolute;right:18px;top:18px;font-size:25px;z-index:2}.detail-content h2{font-size:clamp(26px,3.5vw,48px);margin:1rem 0}.detail-content>p{line-height:1.9;margin:1.2em 0}.detail-content .eyebrow{font-size:13px;color:#5b7eab}.detail-content time{font:13px var(--sans);color:#7d91ad}.detail-content video,.detail-cover{width:100%;margin:2rem 0}.detail-content figure{margin:1rem 0}.detail-links{display:flex;gap:24px;margin-top:2rem;color:#0d59aa}.tags{display:flex;gap:10px;flex-wrap:wrap;margin-top:1.5rem;font:12px var(--sans);color:#536e94}.tags li{padding:6px 10px;border:1px solid var(--line)}.copy-fallback{width:100%;padding:12px;border:1px solid var(--line);font:16px var(--sans);background:white;color:var(--ink)}.qr-dialog{background:#fff;width:min(400px,90vw);max-height:90svh;padding:20px 24px;text-align:center;box-shadow:0 20px 80px #12324944}.qr-dialog h2{font-size:18px;font-weight:400;margin:15px 0 5px}.qr-dialog>img{width:100%;max-height:70svh;object-fit:contain}.qr-dialog>p{font:14px var(--sans);overflow-wrap:anywhere;padding:10px 0}#toast{position:fixed;bottom:28px;left:50%;transform:translate(-50%,10px);opacity:0;pointer-events:none;background:#16324feF;color:white;border:1px solid #b8dbf34d;backdrop-filter:blur(10px);border-radius:2px;padding:12px 22px;font:14px var(--sans);z-index:100;transition:opacity .2s,transform .2s}#toast.visible{opacity:1;transform:translate(-50%,0)}
@media(min-width:1700px){.resume-dialog{width:72vw;max-width:1350px}.resume-section{font-size:clamp(16px,1.06vw,20px)}.resume-heading h2{font-size:4.1vw}}
@media(min-width:901px) and (max-height:800px){.scene{height:800px}.site-header{height:70px}.home-copy{top:29%}.home-copy .short-rule{margin:10px 0 20px}.scroll-cue{margin-top:22px}.hero-portrait{width:40vw;right:5vw;top:21%}.sketch-wrap{height:440px}.resume-hook{padding-top:25px}.mini-trigger{height:350px}.resume-hook>.short-rule{margin-bottom:24px}.build-art{top:220px;width:39vw}.project-index{bottom:55px}.contact-copy{top:130px}.wechat{top:125px}.contact-flow{top:62%}.resume-dialog{width:84vw}.glass-panel{padding:34px 40px 20px}.resume-heading h2{font-size:42px}.resume-heading{padding-bottom:10px}.resume-role{font-size:20px}.resume-contacts{font-size:15px}.resume-section{font-size:13px;padding:7px 0;grid-template-columns:125px 1fr}.resume-section h3{font-size:17px}.resume-section h3 .icon{font-size:21px}}
@media(max-width:900px){:root{--gutter:6vw;--header:76px}.scene{min-height:800px;height:100svh}.site-header nav{gap:3vw;font-size:11px}.wordmark{font-size:28px}.home-copy{top:23%;left:7vw}.home-copy h1{font-size:18vw}.hero-description{font-size:3.1vw}.hero-portrait{width:51vw;right:0;top:38%}.scroll-cue{margin-top:40px;gap:20px}.home-wave{bottom:35px}.about-story{top:125px;width:60vw}.about-story h2{font-size:8.1vw;white-space:normal}.about-description{font-size:2.6vw}.about-story .eyebrow{font-size:17px}.sketch-wrap{width:60vw;height:430px;margin-top:20px}.sketch-wrap>img{left:0;top:20px;width:56vw;height:auto}.hair-note{left:36vw;top:0;font-size:12px}.hair-note svg{width:50px;height:60px}.resume-hook{left:68%;top:125px;right:4vw;padding:25px 0 0 3vw;height:620px}.resume-hook>h3{font-size:4.5vw}.resume-hook>p{font-size:15px}.mini-trigger{width:24vw;height:34vw}.resume-hook>.short-rule{margin-bottom:35px}.resume-mini header b{font-size:1.8vw}.resume-mini header small{font-size:.9vw}.mini-section h4{font-size:1.05vw}.mini-section>.icon{width:1.1vw;height:1.1vw}.mini-section{padding:.9vw 0;grid-template-columns:1.3vw 1fr}.mini-lines{gap:.4vw}.resume-open{width:24vw;font-size:12px;padding:10px 6px}.resume-hook>.quiet{width:24vw;font-size:11px}.build-intro{top:160px}.build-intro h2{font-size:17vw}.build-intro>p{font-size:4vw}.build-art{top:195px;width:47vw;left:-3vw}.project-index{top:150px;left:50%;bottom:130px}.index-label{font-size:12px}.project-name{font-size:3.6vw}.project-number{font-size:3.5vw}.writing-index{left:53%;top:28%;bottom:24%}.write-intro{top:28%}.write-intro h2{font-size:15vw}.write-intro>p{font-size:3.5vw}.writing-category h3{font-size:4.3vw}.writing-category h3>span{font-size:1.5vw;display:block;margin:8px 0 0}.category-number{font-size:3vw}.contact-copy{top:155px}.contact-copy .eyebrow{font-size:13px}.contact-copy h2{font-size:8vw}.wechat{left:65%;width:28vw;top:165px}.contact-context{font-size:1.6vw}.wechat h3{font-size:16px}.qr-button{width:27vw}.qr-caption{font-size:13px}.contact-actions{font-size:16px;top:78%}.contact-actions .outline-button{font-size:15px}.flow-group{font-size:20px;gap:28px;padding-right:28px}.contact-flow{top:63%;}.signature{font-size:25px}.section-footer,.write-scene .section-footer{font-size:15px}.resume-dialog{width:94vw;max-width:94vw;max-height:90svh;overflow:visible}.glass-panel{max-height:90svh;padding:62px 26px 26px}.resume-toolbar{top:18px;right:24px;font-size:11px}.resume-toolbar [data-close]{font-size:14px}.resume-heading h2{font-size:42px}.resume-section{grid-template-columns:115px 1fr;font-size:13px;line-height:1.8;padding:12px 0;gap:12px}.resume-section h3{font-size:17px;gap:8px}.resume-section h3 .icon{font-size:21px}.resume-role{font-size:20px}.resume-contacts{font-size:13px}.skills-list{column-gap:20px}}
@media(max-width:600px){:root{--gutter:6vw;--header:70px}html{scroll-snap-type:none}.scene{height:auto;min-height:0;padding:110px var(--gutter) 60px;overflow:hidden}.site-header{left:var(--gutter);right:var(--gutter)}.wordmark{font-size:25px}.site-header nav{gap:15px;font-size:10px;letter-spacing:.02em}.site-header nav a{padding:15px 0}.site-header nav a::after{height:2px;bottom:3px}.display{letter-spacing:-.06em}.eyebrow{font-size:14px}.home-scene{height:max(850px,100svh);min-height:0;padding-top:120px}.home-copy{position:relative;left:0;top:auto}.home-copy h1{font-size:24vw;margin-left:-1vw;line-height:1.1}.home-copy .short-rule{margin:20px 0;width:60px}.hero-description{font-size:5.0vw;line-height:1.75;letter-spacing:-.03em;white-space:nowrap}.hero-portrait{width:88vw;right:3vw;top:365px}.scroll-cue{position:absolute;top:620px;left:0;gap:20px;margin:0;z-index:3}.scroll-cue svg{height:50px;width:17px}.scroll-cue b{font-size:11px}.scroll-cue small{font-size:10px;margin-top:7px}.home-wave{bottom:24px;height:35px}.about-story{position:relative;left:auto;top:auto;width:100%;height:auto}.about-story .eyebrow{font-size:14px}.about-story h2{font-size:11.2vw;white-space:nowrap;margin:16px 0 20px;letter-spacing:-.05em}.about-description{font-size:4.4vw;line-height:1.85;letter-spacing:-.035em}.about-description br{display:none}.sketch-wrap{width:100%;height:94vw;margin-top:24px}.sketch-wrap>img{width:88vw;height:auto;left:-3vw;top:20px}.hair-note{font-size:11px;left:57vw;top:0}.hair-note svg{height:65px;width:38px;margin-top:5px;margin-right:3px}.sketch-guides{left:0;top:15%;width:80vw;height:75%}.resume-hook{position:relative;left:auto;right:auto;top:auto;width:100%;height:auto;margin-top:24px;padding:35px 0 0;border-left:0;border-top:1px solid var(--line);align-items:center}.resume-hook>h3{font-size:56px}.resume-hook>p{font-size:16px;letter-spacing:.12em}.resume-hook>.short-rule{width:30px;margin:15px 0 25px}.mini-trigger{width:230px;height:336px}.resume-mini{padding:21px 20px}.resume-mini header{padding-bottom:12px}.resume-mini header b{font-size:19px}.resume-mini header small{font-size:9px;margin-top:5px}.mini-section{grid-template-columns:16px 1fr;gap:7px;padding:6px 0}.mini-section>.icon{width:12px;height:12px}.mini-section h4{font-size:10px;margin-bottom:5px}.mini-lines{gap:3px}.mini-lines i{height:3px}.resume-open{width:230px;font-size:15px;min-height:46px;margin-top:24px}.resume-hook>.quiet{width:100%;font-size:11px;margin-top:14px}.build-scene{padding-top:120px}.build-intro{position:relative;left:auto;top:auto;width:100%}.build-intro h2{font-size:31vw;line-height:1.03}.build-intro>p{font-size:29px;letter-spacing:.15em;margin-top:5px}.build-art{position:relative;top:auto;left:-5vw;width:90vw;margin-top:-5px}.project-index{position:relative;left:auto;right:auto;top:auto;bottom:auto;width:100%;margin-top:20px}.index-label{font-size:12px;margin-bottom:30px;gap:20px}.index-label>span{width:60px}.project-list{margin-left:35px;height:auto}.project-list li{min-height:106px;margin-left:22px}.project-list li::before{left:-25px;top:50%;width:5px;height:5px}.project-list li>a,.project-list li>button,.project-static{min-height:106px}.project-number{font-size:24px;left:-56px;top:50%}.project-name{font-size:clamp(21px,6vw,30px);white-space:normal}.project-list li:nth-child(even) .project-name{padding-left:28px}.project-list li:nth-child(even) .project-number{left:-56px}.project-arrow{width:18px;opacity:1}.write-scene{min-height:690px;padding-top:125px;padding-bottom:130px}.write-intro{position:relative;left:auto;top:auto}.write-intro h2{font-size:29vw}.write-intro>p{font-size:26px;margin-top:0}.write-intro>.short-rule{width:70px;margin-top:25px}.writing-index{position:relative;left:auto;right:auto;top:auto;bottom:auto;margin:65px 0 0 38px;gap:55px}.writing-category{padding:20px 0 15px 20px;min-height:95px}.writing-category:nth-child(2){margin-left:0}.writing-category h3{font-size:31px}.writing-category h3>span{display:inline-block;font-size:11px;margin-left:12px;letter-spacing:.13em}.category-number{font-size:23px;left:-39px;top:26px}.category-number::after{left:37px}.section-footer,.write-scene .section-footer{font-size:13px;bottom:30px;padding-top:17px}.write-scene:has(.article-list),.write-scene:has(.channel-list){display:block;padding-top:125px;padding-bottom:130px}.write-scene:has(.article-list) .writing-index,.write-scene:has(.channel-list) .writing-index{gap:45px}.contact-scene{padding-top:120px;padding-bottom:145px;min-height:980px}.contact-copy{position:relative;left:auto;top:auto}.contact-copy .eyebrow{font-size:11px;letter-spacing:.22em}.contact-copy h2{font-size:16.3vw;margin-top:27px;line-height:1.18}.contact-copy .short-rule{width:40px;margin:22px 0 14px}.signature{font-size:23px}.wechat{position:relative;left:auto;top:auto;width:100%;margin-top:38px;display:flex;flex-direction:column;align-items:center}.contact-context{font-size:14px;margin:0 0 15px}.wechat h3{font-size:15px;margin-bottom:12px}.qr-button{width:180px}.qr-caption{font-size:12px;margin-top:12px}.contact-flow{position:relative;left:calc(-1 * var(--gutter));right:auto;width:100vw;top:auto;height:78px;min-height:78px;margin-top:30px}.flow-group{font-size:17px;gap:24px;padding-right:24px}.flow-toggle{opacity:.7;right:8px}.contact-actions{position:relative;left:auto;right:auto;top:auto;margin-top:28px;font-size:14px;gap:18px;flex-wrap:wrap}.contact-actions>div{gap:16px}.contact-actions .outline-button{font-size:13px;padding:10px 14px;min-height:42px}.contact-scene .section-footer{bottom:28px}.resume-dialog{width:96vw;max-width:96vw;max-height:92svh;border-radius:20px}.glass-panel{max-height:92svh;padding:65px 20px 25px;border-radius:20px;box-shadow:inset 0 0 0 2px #fff,inset 0 0 0 4px #8fd4f29c,inset 0 0 15px 5px #85cbf35c,0 0 0 1px #fff}.glass-panel::before{border-radius:15px;inset:3px}.resume-toolbar{left:18px;right:18px;top:17px;gap:12px;font-size:10px;justify-content:flex-end}.resume-toolbar [data-close]{font-size:12px;gap:3px}.resume-toolbar [data-close] .icon{font-size:20px}.resume-heading h2{font-size:31px}.resume-role{font-size:17px;margin:8px 0}.resume-contacts{gap:4px 7px;font-size:11px}.resume-section{display:block;font-size:13px;padding:18px 0;line-height:1.9}.resume-section h3{font-size:18px;gap:9px;margin-bottom:12px}.resume-section h3 .icon{font-size:23px}.record-title{display:block;line-height:1.8;margin-bottom:5px}.record-title strong{display:block}.record-title>span::before{display:none}.record-title time{font-size:12px}.resume-record+.resume-record{margin-top:18px}.skills-list{display:block}.skills-list>li{margin-bottom:8px}.certificates>span{padding:0 4px}.detail-dialog{padding:45px 22px 30px;width:94vw;max-height:90svh}.qr-dialog{padding:15px 18px}.outline-button{min-height:44px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto;scroll-snap-type:none}*,*::before,*::after{animation:none!important;transition:none!important}.portrait-parallax{transform:none!important}.flow-toggle{display:none}}
@media print{@page{size:A4;margin:10mm}html,body{background:white!important;overflow:visible!important;font-size:10pt}body::before,.site-header,main,.skip-link,#toast,#detail-dialog,#qr-dialog,.resume-toolbar{display:none!important}#resume-dialog{display:block!important;position:static!important;width:100%!important;max-width:none!important;max-height:none!important;margin:0!important;padding:0!important;overflow:visible!important;box-shadow:none!important;border:0!important;animation:none!important}dialog::backdrop{display:none!important}.glass-panel{position:static!important;border:0!important;box-shadow:none!important;background:white!important;backdrop-filter:none!important;border-radius:0!important;max-height:none!important;overflow:visible!important;padding:0!important}.glass-panel::before{display:none!important}.resume-heading{padding:0 0 12pt}.resume-heading h2{font-size:30pt}.resume-role{font-size:16pt;margin-top:4pt;color:#315887}.resume-contacts{font-size:10pt;margin-top:5pt}.resume-section{display:grid!important;grid-template-columns:76pt 1fr!important;font-size:9pt!important;line-height:1.6!important;padding:9pt 0!important;gap:10pt!important;break-inside:avoid}.resume-section h3{font-size:12pt!important;margin:0!important;gap:5pt!important}.resume-section h3 .icon{font-size:17pt!important}.record-title{display:flex!important;flex-wrap:wrap;margin:0!important}.record-title strong{display:inline!important}.record-title>span::before{display:inline!important}.record-title time{font-size:9pt!important}.resume-record+.resume-record{margin-top:7pt!important}.skills-list{display:grid!important;column-gap:12pt!important}.skills-list>li{margin:0!important}a{color:inherit!important;text-decoration:none!important}}

/* Refined desktop proportions; fluid content remains editable. */
@media(min-width:901px){.project-list li:first-child{flex:.83}.resume-hook .resume-open{margin-top:3.1vh}}
@media(max-width:600px){.home-copy h1,.build-intro h2,.write-intro h2{transform:none}.hero-description{font-size:5vw;font-weight:400;letter-spacing:-.03em}.build-art{left:-5vw;top:auto;width:90vw}.build-intro>p{margin-top:5px}.home-copy .short-rule{margin:20px 0}.contact-copy h2{margin-top:27px}}
.presentation{max-width:980px;margin:auto}.presentation h2{font-size:clamp(32px,5vw,68px);font-weight:500;line-height:1.25;padding-bottom:28px;border-bottom:1px solid var(--line)}.presentation>p{font-size:clamp(16px,1.4vw,20px);line-height:1.95;margin:1.4em 0}.presentation .eyebrow{font-size:13px;letter-spacing:.16em}.presentation .detail-summary{font-size:clamp(20px,2vw,28px);color:#52769a}.project-presentation{width:min(1160px,94vw);padding:65px 5vw;max-height:92svh}.project-presentation>.dialog-close{font:14px var(--sans);display:flex;align-items:center;gap:14px;right:30px;top:24px}.detail-links:empty{display:none}.detail-links a{padding:10px 0;display:inline-flex;gap:8px;align-items:center}.detail-content{overflow-wrap:anywhere}.project-list a:focus-visible .project-arrow{opacity:1}.qr-button{padding:5px}.flow-top,.flow-bottom{animation:wave-drift 10s ease-in-out infinite alternate}.contact-flow.paused .wave,.contact-flow:hover .wave{animation-play-state:paused}.scene:target .index-label{animation:section-enter .65s ease both}@keyframes section-enter{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@media(max-width:600px){.project-presentation{padding:65px 24px 30px}.project-presentation>.dialog-close{right:20px}.project-name{overflow-wrap:anywhere}}
/* Wider phones need their own vertical rhythm, not an enlarged small-phone hero. */
@media(min-width:451px) and (max-width:600px){.home-scene{height:1020px}.hero-portrait{width:390px;top:460px;right:calc((100vw - 390px)/2)}.scroll-cue{top:790px}.home-wave{bottom:25px}}
.index-label{color:#56779f}.quiet{color:#61758e}.qr-caption{color:#5c7497}
@media(min-width:901px) and (max-height:800px){.build-art{top:195px;width:min(39vw,440px)}}
/* The index grows with new projects instead of squeezing additional rows. */
@media(min-width:601px){.build-scene.expanded-index{height:auto;min-height:100svh;display:grid;grid-template-columns:44% 1fr;gap:6%;padding-top:160px;padding-bottom:90px}.expanded-index .build-intro,.expanded-index .project-index{position:relative;inset:auto;width:100%}.expanded-index .build-art{position:relative;top:auto;left:0;width:100%;margin-top:20px}.expanded-index .project-list{height:auto}.expanded-index .project-list li{min-height:160px}.expanded-index .project-name{white-space:normal}}
/* Keep the exit control available while reading long content. */
.resume-toolbar{background:#e9f6ffc9;backdrop-filter:blur(10px);border-radius:4px}.paper .resume-toolbar{background:#ffffffdf}.detail-dialog{overflow:visible}.detail-content{max-height:calc(88svh - 100px);overflow-y:auto;padding-right:8px;scrollbar-width:thin;scrollbar-color:#aecae3 transparent}.project-presentation .detail-content{max-height:calc(92svh - 130px)}.detail-content video{aspect-ratio:16/9;max-height:60svh;object-fit:contain;background:#e8f3fc}.detail-content figure img{width:100%;max-height:70svh;object-fit:contain}@media(max-width:600px){.detail-content,.project-presentation .detail-content{max-height:calc(90svh - 95px)}}
@media(prefers-reduced-motion:reduce){dialog::backdrop{animation:none!important}}
