*{box-sizing:border-box}html{background:#090909;scrollbar-width:thin;scrollbar-color:#777 #111;scroll-behavior:smooth}body{margin:0;color:#fff;font-family:Arial,"Helvetica Neue","PingFang SC","Microsoft YaHei",sans-serif;-webkit-font-smoothing:antialiased;overflow-x:clip}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit}a{color:inherit}button:focus-visible,a:focus-visible{outline:2px solid #fff;outline-offset:6px}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.skip{position:fixed;left:20px;top:-80px;z-index:100;background:#fff;color:#090909;padding:12px}.skip:focus{top:20px}.scene-backdrop,#scene,.scene-shade{position:fixed;inset:0;width:100%;height:100%;pointer-events:none}.scene-backdrop{background:#10201b url('./assets/scene-0.webp') center/cover no-repeat;z-index:-3}#scene{z-index:-2}.scene-shade{z-index:-1;background:#090909;opacity:0}.navigation{position:fixed;top:0;left:0;right:0;z-index:30;padding:24px max(24px,calc((100vw - 1120px)/2));background:linear-gradient(#09090933,transparent);pointer-events:none}.navigation nav{display:flex;align-items:center;gap:28px;pointer-events:auto;width:max-content}.navigation a{text-decoration:none;font-size:14px;line-height:24px;color:#ffffffb3;transition:color .2s,text-shadow .2s}.navigation a:hover,.navigation a[aria-current="page"]{color:#fff;text-shadow:0 0 20px #fff5}.scene-section{position:relative;height:155vh;height:155svh}.scene-sticky{height:100vh;height:100svh;position:sticky;top:0;overflow:hidden;display:flex;align-items:center}.home{height:145vh;height:145svh}.ring-stage{position:absolute;inset:0;display:grid;place-items:center;perspective:1050px;transform-style:preserve-3d;will-change:transform,opacity}.ring-tilt{width:0;height:0;transform-style:preserve-3d;transform:rotateX(-24deg) rotateZ(-13deg)}#portfolio-ring{transform-style:preserve-3d;animation:orbit 29s linear infinite}#portfolio-ring span{position:absolute;left:0;top:0;display:block;text-align:center;font-size:clamp(48px,6.2vw,100px);line-height:1;font-weight:400;letter-spacing:-.05em;backface-visibility:visible;transform-style:preserve-3d;transform:translate(-50%,-50%) rotateY(var(--angle)) translateZ(var(--radius,290px));text-shadow:0 0 1px #fff6}@keyframes orbit{to{transform:rotateY(-360deg)}}.chapter-heading{position:relative;margin-left:max(8vw,calc((100vw - 900px)/2));width:min(660px,78vw);will-change:transform,opacity;padding:25px 0}.chapter h2{font-weight:400;font-size:clamp(52px,5.3vw,82px);line-height:1.06;letter-spacing:-.055em;margin:0 0 26px}.chapter-heading>p{font-size:clamp(14px,1.13vw,18px);line-height:1.5;letter-spacing:-.025em;max-width:640px;margin:0;color:#fff}.content-section{position:relative;padding:72px 24px 115px;min-height:100vh;background:#090909;isolation:isolate}.content-wrap{max-width:1120px;margin:0 auto;will-change:transform,opacity}.section-heading{display:grid;grid-template-columns:1fr 1fr;gap:70px;align-items:start;margin-bottom:30px}.section-heading h2{margin:0;font-size:clamp(29px,2.8vw,42px);line-height:1.08;letter-spacing:-.04em;font-weight:400}.description{max-width:460px;justify-self:end;font-size:14px;line-height:1.55;color:#999;letter-spacing:-.015em}.description p{margin:0 0 16px}.emphasis{color:#f8f8f8;text-decoration:underline;text-decoration-color:#777;text-underline-offset:5px;line-height:1.6}.video-frame{aspect-ratio:16/9;position:relative;overflow:hidden;background:#111}.interactive-showcase-frame{position:relative;width:100%;aspect-ratio:16/9;overflow:hidden;background:#071015}.interactive-showcase-frame iframe{display:block;width:100%;height:100%;border:0;background:#071015}.video-frame video{width:100%;height:100%;display:block;object-fit:cover}.play-button{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);height:58px;width:58px;border:0;border-radius:50%;background:#222b;color:white;display:grid;place-items:center;cursor:pointer;transition:transform .2s,background .2s}.play-button:hover{transform:translate(-50%,-50%) scale(1.1);background:#111e}.play-button svg{width:30px;fill:currentColor}.video-frame.playing .play-button{opacity:0;pointer-events:none}.experience-grid,.project-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px;margin-top:40px}.experience-grid h3,.project-grid h3{font-weight:400;color:#f5f5f5;font-size:14px;line-height:1.5;margin:0 0 9px;text-decoration:underline;text-decoration-color:#777;text-underline-offset:4px}.experience-grid p,.project-grid p{font-size:13px;color:#999;line-height:1.6;margin:0}.project-grid{margin-top:32px;gap:22px}.project-grid img{display:block;object-fit:cover;width:100%;height:auto;aspect-ratio:1/1;margin-bottom:13px}.panther-video{background:#060606}.panther-video video{object-fit:contain}.connect{height:145vh;height:145svh}.connect .chapter-heading{max-width:690px}.connect .chapter-heading>p{max-width:660px}.contact-actions{display:flex;flex-wrap:wrap;gap:9px;margin-top:29px;align-items:center}.contact-actions a,.contact-actions button{border-radius:30px;min-height:42px;padding:10px 18px;font-size:14px;line-height:20px;text-decoration:none;display:inline-flex;align-items:center;justify-content:center}.email{color:#121212;background:#fff;border:1px solid #fff}.contact-actions button{background:#09090980;border:1px solid #ffffff40;color:#fff;cursor:pointer;gap:8px;transition:background .2s}.contact-actions button:hover{background:#090909dd}.contact-actions svg{height:16px;width:16px;stroke:currentColor;stroke-width:1.3}.copy-status{display:block;font-size:13px;margin-top:14px;min-height:18px;color:#ddd}.reduced-motion .scene-section{height:100svh}.reduced-motion #portfolio-ring{animation:none}.reduced-motion .scene-sticky{position:relative}@media(min-width:1800px){.navigation{padding-left:calc((100vw - 1320px)/2)}.content-wrap{max-width:1320px}}@media(max-width:760px){.navigation{padding:16px 22px}.navigation nav{gap:24px}.navigation a{font-size:13px}.scene-section{height:135svh}.home{height:130svh}.chapter-heading{margin-left:8vw;width:84vw}.chapter h2{font-size:56px;margin-bottom:20px}.chapter-heading>p{font-size:15px;max-width:350px}.content-section{padding:60px 22px 70px}.section-heading{grid-template-columns:1fr;gap:28px;margin-bottom:28px}.section-heading h2{font-size:34px}.description{justify-self:start;font-size:14px;max-width:none}.experience-grid{grid-template-columns:1fr;gap:28px;margin-top:32px}.experience-grid p{font-size:14px}.experience-grid h3{font-size:14px}.project-grid{gap:12px}.project-grid h3{font-size:13px}.project-grid p{font-size:12px}.ring-stage{perspective:650px}.ring-tilt{transform:rotateX(-24deg) rotateZ(-14deg)}#portfolio-ring span{font-size:56px}.contact-actions{gap:8px;margin-top:24px}.contact-actions a,.contact-actions button{font-size:12px;padding:8px 13px;min-height:39px}.connect .chapter-heading>p{max-width:350px}.play-button{width:46px;height:46px}}@media(max-width:420px){.project-grid{grid-template-columns:1fr;gap:26px}.project-grid img{aspect-ratio:1.25}.project-grid p{font-size:14px}.project-grid h3{font-size:14px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}#portfolio-ring{animation:none}.scene-section{height:100svh}.scene-sticky{position:relative}}
#portfolio-ring span{font-size:var(--type-size,96px)}
#native-scene-root{position:fixed;inset:0;z-index:-2;pointer-events:none}#native-scene-root #background-container{position:fixed;inset:0;width:100%;height:100lvh;overflow:hidden;background:#090909}#native-scene-root canvas{display:block;width:100%;height:100%}.native-scene-group{position:relative}html[data-scene-engine="native"] #scene,html[data-scene-engine="native"] .scene-backdrop{visibility:hidden}html:not([data-scene-engine="native"]) #native-scene-root{opacity:0}html[data-scene-engine="native"] #native-scene-root{opacity:1}
html[data-scene-engine="native"] .ring-stage{visibility:hidden}
.site-loader{position:fixed;inset:0;z-index:9999;display:grid;place-items:center;background:#090909;opacity:1;visibility:visible;transition:opacity .72s cubic-bezier(.22,.61,.36,1),visibility 0s linear .72s;contain:strict}.is-ready .site-loader{opacity:0;visibility:hidden}.is-loading{overflow:hidden}.is-loading body{overflow:hidden}.is-loading main,.is-loading .navigation{visibility:hidden}.loader-particles{position:relative;width:116px;height:116px;filter:drop-shadow(0 0 5px #ffffff24);animation:loader-breathe 1.7s ease-in-out infinite}.loader-particles i{position:absolute;left:50%;top:50%;width:3px;height:3px;border-radius:50%;background:#e8e8e8;opacity:.18;transform:translate(var(--x),var(--y)) scale(var(--s));animation:loader-speck 1.55s ease-in-out infinite;animation-delay:var(--d)}.loader-particles i:nth-child(1){--x:-38px;--y:-11px;--s:.65;--d:-.2s}.loader-particles i:nth-child(2){--x:-29px;--y:12px;--s:1;--d:-1.1s}.loader-particles i:nth-child(3){--x:-22px;--y:-27px;--s:.75;--d:-.7s}.loader-particles i:nth-child(4){--x:-15px;--y:3px;--s:1.35;--d:-.4s}.loader-particles i:nth-child(5){--x:-8px;--y:24px;--s:.7;--d:-1.3s}.loader-particles i:nth-child(6){--x:-3px;--y:-16px;--s:1.1;--d:-.9s}.loader-particles i:nth-child(7){--x:5px;--y:8px;--s:.8;--d:-.1s}.loader-particles i:nth-child(8){--x:11px;--y:-32px;--s:.55;--d:-1.4s}.loader-particles i:nth-child(9){--x:17px;--y:-8px;--s:1.25;--d:-.55s}.loader-particles i:nth-child(10){--x:23px;--y:19px;--s:.7;--d:-1.2s}.loader-particles i:nth-child(11){--x:31px;--y:-21px;--s:.85;--d:-.35s}.loader-particles i:nth-child(12){--x:39px;--y:5px;--s:.6;--d:-.8s}.loader-particles i:nth-child(13){--x:-44px;--y:27px;--s:.45;--d:-1.45s}.loader-particles i:nth-child(14){--x:-34px;--y:-36px;--s:.5;--d:-.6s}.loader-particles i:nth-child(15){--x:-19px;--y:37px;--s:.45;--d:-.15s}.loader-particles i:nth-child(16){--x:-2px;--y:39px;--s:.65;--d:-1s}.loader-particles i:nth-child(17){--x:8px;--y:-45px;--s:.45;--d:-.45s}.loader-particles i:nth-child(18){--x:28px;--y:35px;--s:.55;--d:-1.35s}.loader-particles i:nth-child(19){--x:44px;--y:-31px;--s:.4;--d:-.75s}.loader-particles i:nth-child(20){--x:47px;--y:23px;--s:.5;--d:-.25s}.loader-particles i:nth-child(21){--x:-49px;--y:-3px;--s:.35;--d:-1.15s}.loader-particles i:nth-child(22){--x:2px;--y:1px;--s:1.5;--d:-.5s}.loader-particles i:nth-child(23){--x:15px;--y:30px;--s:.45;--d:-1.5s}.loader-particles i:nth-child(24){--x:35px;--y:-1px;--s:.7;--d:-.95s}@keyframes loader-speck{0%,100%{opacity:.12}48%{opacity:.92}65%{opacity:.35}}@keyframes loader-breathe{0%,100%{transform:scale(.9) rotate(-2deg)}50%{transform:scale(1.08) rotate(2deg)}}@media(prefers-reduced-motion:reduce){.loader-particles,.loader-particles i{animation:none}.site-loader{transition-duration:.2s}}
.content-section{padding-top:52px}
html[data-scene-engine="native"] .content-section{background:transparent}
.description{font-size:12px}.description p{ text-align:justify;text-align-last:left }
.description .emphasis{ text-decoration:none }
.experience-grid,.project-grid{align-items:start}
.experience-link,.project-card-link{display:block;color:inherit;text-decoration:none}
.experience-image{display:block;width:100%;aspect-ratio:1;overflow:hidden;margin-bottom:13px}.experience-image img{display:block;width:100%;height:100%;object-fit:cover;object-position:center}
.description p{margin:0}.description .emphasis{display:inline-block;margin:0}
.experience-grid h3,.project-grid h3{font-size:12px}
.experience-grid p,.project-grid p{font-size:11px;text-align:justify;text-align-last:left}
.project-grid{grid-template-columns:repeat(3,minmax(0,1fr));row-gap:38px}
.project-card-link:hover h3,.experience-link:hover h3{color:#fff}
@media(max-width:760px){.experience-grid p{font-size:12px}.experience-grid h3{font-size:12px}.project-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.project-grid h3{font-size:12px}.project-grid p{font-size:11px}}
@media(max-width:420px){.project-grid{grid-template-columns:1fr}.project-grid p{font-size:11px}.project-grid h3{font-size:12px}}

.project-jump{position:fixed;z-index:25;left:max(24px,calc((100vw - 1120px)/2));right:max(24px,calc((100vw - 1120px)/2));bottom:24px;display:grid;grid-template-columns:1.2fr 2fr;gap:70px;align-items:end;padding:18px 0;color:#fff;transition:none}.project-jump-intro{font-size:14px;max-width:190px;line-height:1.2}.project-jump-links{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px 28px}.project-jump-links a{font-size:11px;line-height:13px;text-decoration:underline;text-underline-offset:3px}.project-jump-toggle{display:none}.project-jump.is-compact{left:50%;right:auto;bottom:22px;display:block;width:190px;padding:0;color:#111;transform:translateX(-50%)}.project-jump.is-compact .project-jump-intro{display:none}.project-jump.is-compact .project-jump-toggle{display:flex;width:100%;align-items:center;justify-content:space-between;border:0;border-radius:999px;padding:10px 14px;background:#fff;color:#111;font-size:12px;cursor:pointer}.project-jump.is-compact .project-jump-toggle i{font-style:normal;font-size:11px}.project-jump.is-compact .project-jump-links{position:absolute;left:0;bottom:0;width:100%;display:flex;flex-direction:column;gap:0;padding:12px 10px 42px;border-radius:16px;background:#fff;opacity:0;visibility:hidden;transform:translateY(8px);transition:.2s;box-shadow:0 12px 35px #0004}.project-jump.is-compact:not(.suppress-expand):hover .project-jump-links,.project-jump.is-compact.is-open .project-jump-links{opacity:1;visibility:visible;transform:none}.project-jump.is-compact .project-jump-links a{padding:3px 2px;color:#555;text-decoration:none;font-size:12px}.project-jump.is-compact .project-jump-links a:hover{color:#000}.project-jump.is-compact .project-jump-toggle{position:relative;z-index:2}@media(max-width:760px){.project-jump{left:22px;right:22px;grid-template-columns:1fr;gap:12px}.project-jump-links{grid-template-columns:repeat(2,1fr)}.project-jump.is-compact{left:50%;width:190px}}
.project-jump.is-compact.suppress-expand .project-jump-links{opacity:0!important;visibility:hidden!important;transform:translateY(8px)!important;pointer-events:none!important;transition:none!important}

.project-overlay{position:fixed;inset:0;width:100%;height:100%;border:0;background:#050505;z-index:50}.project-overlay-open{overflow:hidden}.project-overlay-open body{overflow:hidden}

#visual-content,html[data-scene-engine="native"] #visual-content{background:transparent}
#visual-content .content-wrap{position:relative;z-index:1}
#visual-content .interactive-showcase-frame,#visual-content .interactive-showcase-frame iframe{background:transparent}
#visual-content .visual-content-mask{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
#visual-content .visual-content-mask span{position:absolute;display:block;background:#090909}
#visual-content .mask-top{inset:0 0 auto;height:100%}
#visual-content.window-ready .mask-top{height:var(--window-top)}
#visual-content .mask-bottom{top:var(--window-bottom);bottom:0;left:0;right:0}
#visual-content .mask-left{top:var(--window-top);bottom:var(--window-bottom-gap);left:0;width:var(--window-left)}
#visual-content .mask-right{top:var(--window-top);bottom:var(--window-bottom-gap);left:var(--window-right);right:0}

/* Let the Visual scene continue behind its interactive showcase. */

/* Prevent focus inside the scaled interview from scrolling its frame. */
.interactive-showcase-frame{overflow:clip;overflow-anchor:none}

.project-overlay-open main *{animation-play-state:paused!important}

.wechat-contact{margin-top:12px}.wechat-id{font-size:14px;line-height:20px;padding:10px 18px;border:1px solid #fff;border-radius:30px;background:#fff;color:#121212;user-select:text}
@media(max-width:767px){.wechat-id{font-size:12px;padding:8px 13px}}

.contact-details{zoom:.7}

.project-card-link{cursor:pointer}
.project-card-link img{transition:transform .22s ease,filter .22s ease}
.project-card-link h3{transition:color .22s ease,text-decoration-color .22s ease}
@media(hover:hover) and (pointer:fine){
  .project-card-link:hover img{transform:translateY(-3px);filter:brightness(1.07)}
  .project-card-link:hover h3{color:#fff;text-decoration-color:#fff}
}
.project-card-link:focus-visible{outline:2px solid #fff;outline-offset:5px;border-radius:2px}
@media(prefers-reduced-motion:reduce){.project-card-link img,.project-card-link h3{transition:none}.project-card-link:hover img{transform:none}}
