.specular-button{--sb-radius: 18px;--sb-tint: #ffffff;--sb-tint-opacity: 0;--sb-blur: 0px;--sb-text-color: #f5f5f5;position:relative;display:inline-flex;align-items:center;justify-content:center;border:none;margin:0;font-family:inherit;font-weight:500;letter-spacing:.01em;line-height:1;color:var(--sb-text-color);background:color-mix(in srgb,var(--sb-tint) calc(var(--sb-tint-opacity) * 100%),transparent);border-radius:var(--sb-radius);backdrop-filter:blur(var(--sb-blur));-webkit-backdrop-filter:blur(var(--sb-blur));box-shadow:inset 0 1px #ffffff0a,0 8px 24px #00000040;cursor:pointer;outline:none;transition:transform .15s ease}.specular-button:active{transform:scale(.97)}.specular-button:focus-visible{outline:2px solid color-mix(in srgb,var(--sb-text-color) 60%,transparent);outline-offset:3px}.specular-button:disabled{opacity:.55;cursor:default}.specular-button:disabled:active{transform:none}.specular-button--sm{font-size:.85rem;padding:10px 22px}.specular-button--md{font-size:1rem;padding:14px 30px}.specular-button--lg{font-size:1.15rem;padding:18px 40px}.specular-button__fx{position:absolute;top:-20px;right:-20px;bottom:-20px;left:-20px;pointer-events:none;z-index:1}.specular-button__fx canvas{display:block;width:100%;height:100%}.specular-button__label{position:relative;z-index:2}#resume-cta{display:inline-flex}.resume-specular{font-size:13px;padding:14px 22px;line-height:normal;text-decoration:none}.resume-specular .specular-button__label{display:flex;align-items:center;gap:29px}@media(max-width:600px){.resume-specular{padding:12px 18px}.resume-specular .specular-button__label{gap:15px}}@media(prefers-reduced-motion:reduce){.specular-button{transition:none}}.scroll-stack-scroller{position:relative;width:100%;height:100%;overflow-y:auto;overflow-x:visible;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;scroll-behavior:smooth;-webkit-transform:translateZ(0);transform:translateZ(0);will-change:scroll-position}.scroll-stack-inner{padding:20vh 5rem 50rem;min-height:100vh}.scroll-stack-card-wrapper{position:relative}.scroll-stack-card{transform-origin:top center;will-change:transform,filter;backface-visibility:hidden;transform-style:preserve-3d;box-shadow:0 0 30px #0000001a;height:20rem;width:100%;margin:30px 0;padding:3rem;border-radius:40px;box-sizing:border-box;-webkit-transform:translateZ(0);transform:translateZ(0);position:relative}.scroll-stack-end{width:100%;height:1px}.work-stack.scroll-stack-scroller{width:100%;margin-inline:auto;height:auto;overflow:visible;overscroll-behavior:auto;transform:none;will-change:auto}.work-stack .scroll-stack-inner{padding:12px 0 55vh;min-height:0}.work-stack .scroll-stack-card{aspect-ratio:4 / 3;height:auto;max-height:max(360px,calc(100svh - 240px));margin:0;padding:24px;border-radius:32px;background:var(--paper);border:1px solid var(--line);box-shadow:0 12px 40px #2728220c}.work-stack .scroll-stack-card>div{height:100%}.work-stack .project{height:100%;display:flex;flex-direction:column}.work-stack .cover{width:100%;height:auto;flex:1;min-height:0;border-radius:18px}.work-stack .mini-browser{max-width:400px;height:240px}.work-stack .project:hover .cover{transform:none}.work-stack .project-info{width:100%;flex-shrink:0;padding:5px 4px 2px}@media(max-width:600px){.work-stack.scroll-stack-scroller{width:100%}.work-stack .scroll-stack-card{max-height:max(320px,calc(100svh - 110px));padding:14px;border-radius:24px}.work-stack .cover{height:auto;border-radius:14px}.work-stack .mini-browser{height:200px}.work-stack .mini-title{font-size:26px}.work-stack .project-info h3{font-size:16px}}@media(prefers-reduced-motion:reduce){.work-stack .scroll-stack-inner{padding-bottom:0}.work-stack .scroll-stack-card{transform:none!important;filter:none!important;margin-bottom:28px!important}}html.lenis,html.lenis body{height:auto}.lenis:not(.lenis-autoToggle).lenis-stopped{overflow:clip}.lenis [data-lenis-prevent],.lenis [data-lenis-prevent-wheel],.lenis [data-lenis-prevent-touch],.lenis [data-lenis-prevent-vertical],.lenis [data-lenis-prevent-horizontal]{overscroll-behavior:contain}.lenis.lenis-smooth iframe{pointer-events:none}.lenis.lenis-autoToggle{transition-property:overflow;transition-duration:1ms;transition-behavior:allow-discrete}#smooth-scroll-showcase,.smooth-scroll-contact-panel{width:var(--showcase-width, 100vw);margin-inline:calc(50% - var(--showcase-width, 100vw) / 2)}.smooth-scroll-contact-panel{position:relative;isolation:isolate;display:grid;place-content:center;padding:72px 0;border:0;background:var(--paper);color:var(--ink)}.smooth-scroll-showcase{position:relative;isolation:isolate;width:100%}.smooth-scroll-showcase>section{position:sticky;top:0;display:grid;place-content:center;grid-template-columns:1fr;width:100%;height:100vh;height:100svh;padding:0;border:0;background:#020617;color:#fff}.smooth-scroll-showcase>section:nth-child(2){background:#d1d5db;color:#000;border-radius:16px 16px 0 0;overflow:hidden}.smooth-scroll-showcase>section>div:not(.smooth-scroll-experience):not(.smooth-scroll-about):not(.smooth-scroll-work){position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background-image:linear-gradient(to right,#4f4f4f2e 1px,transparent 1px),linear-gradient(to bottom,#4f4f4f2e 1px,transparent 1px);background-size:54px 54px;-webkit-mask-image:radial-gradient(ellipse 60% 50% at 50% 0%,#000 70%,transparent 100%);mask-image:radial-gradient(ellipse 60% 50% at 50% 0%,#000 70%,transparent 100%)}.smooth-scroll-showcase h1{position:relative;margin:0;padding:0 32px;font-size:clamp(2rem,5vw,3.75rem);font-weight:600;text-align:center;letter-spacing:-.025em;line-height:1.2;overflow-wrap:anywhere}.smooth-scroll-showcase>section:nth-child(2) h1{font-size:clamp(2rem,4vw,2.25rem)}.smooth-scroll-showcase>section:nth-child(3) h1{font-size:clamp(2rem,4.5vw,3rem)}.smooth-scroll-showcase>.smooth-scroll-experience-panel,.smooth-scroll-showcase>.smooth-scroll-about-panel,.smooth-scroll-showcase>.smooth-scroll-dark-panel{height:auto;min-height:100svh;top:min(0px,calc(100svh - var(--panel-height, 100svh)))}.smooth-scroll-about{--ink: #111827;--muted: #4b5563;--line: #9ca3af;position:relative;z-index:1;width:100%;max-width:1240px;margin-inline:auto;padding:24px clamp(24px,5vw,56px)}.smooth-scroll-about .about-capabilities{padding:40px 0;border:0}.smooth-scroll-experience{--ink: #f8fafc;--muted: #cbd5e1;--line: #334155;--green: var(--brand-green);position:relative;z-index:1;width:100%;max-width:1240px;margin-inline:auto;padding:24px clamp(24px,5vw,56px)}.smooth-scroll-experience .resume-editorial{border:0}.smooth-scroll-experience .resume-row{border-left-color:#475569}.smooth-scroll-experience .resume-row:before{background:var(--brand-green)}.smooth-scroll-experience .resume-sticker{color:#272822}.smooth-scroll-experience .experience-points{font-size:13px;line-height:1.75}.smooth-scroll-experience .resume-action{color:#f8fafc;border-color:#cbd5e1}.smooth-scroll-work{--ink: #f8fafc;--muted: #cbd5e1;--line: #334155;--green: var(--brand-green);position:relative;z-index:1;width:100%;max-width:1240px;margin-inline:auto;padding:24px clamp(24px,5vw,56px)}.smooth-scroll-work .work-stack.scroll-stack-scroller{max-width:900px;margin-inline:auto}.smooth-scroll-work .work-stack .scroll-stack-card{--ink: #f8fafc;--muted: #cbd5e1;--line: rgba(255, 255, 255, .22);--green: var(--brand-green);color:var(--ink);background:#ffffff1a;border:1px solid var(--line);-webkit-backdrop-filter:blur(20px) saturate(140%);backdrop-filter:blur(20px) saturate(140%);box-shadow:inset 0 1px #ffffff29,0 16px 48px #0003}.smooth-scroll-work .cover{color:#272822}.smooth-scroll-contact{position:relative;z-index:1;padding:32px;text-align:center}.smooth-scroll-contact .eyebrow{justify-content:center;color:var(--green)}.smooth-scroll-contact h2{max-width:1100px;margin:24px auto;font-size:clamp(2rem,5.5vw,4.5rem);font-weight:600;line-height:1.3;letter-spacing:-.025em}.smooth-scroll-contact p{margin:0 0 32px;color:var(--muted);font-size:15px;line-height:1.8}.smooth-scroll-contact .pill{background:var(--ink);color:var(--paper);border-color:var(--ink)}.smooth-scroll-contact .pill:focus-visible{outline-color:var(--green)}.contact-methods{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;max-width:900px;margin:40px auto 0}.contact-method{display:flex;flex-direction:column;gap:12px;padding:24px;text-align:left;border:1px solid var(--line);border-radius:18px;background:#ffffff59;color:var(--ink);font-size:16px;overflow-wrap:anywhere;transition:background .2s,border-color .2s}.contact-method:hover{background:#fffc;border-color:var(--green)}.contact-method-label{font-size:11px;color:var(--muted);letter-spacing:2px}#wechat-dialog{max-width:460px;padding:24px;max-height:calc(100svh - 32px);overflow-y:auto}#wechat-dialog h2{font-size:22px;margin:0 0 20px}.wechat-qr{display:block;width:100%;height:auto;border-radius:12px}.wechat-original{display:block;margin-top:16px;text-align:center;font-size:13px;color:var(--green)}@media(max-width:700px){.contact-methods{grid-template-columns:1fr;max-width:400px}.contact-method{padding:20px}}@media(min-width:1536px){.smooth-scroll-showcase h1{font-size:4.5rem!important}}@media(prefers-reduced-motion:reduce){.smooth-scroll-showcase>section{position:relative}}.resume-editorial{grid-template-columns:260px minmax(0,1fr);gap:clamp(42px,6vw,90px);align-items:start;padding:40px 0}.resume-sidebar h2{font-size:28px;margin:10px 0 20px}.resume-photo-wrap{position:relative;margin:0 0 6px;width:210px;max-width:100%}.resume-photo{margin:0;padding:12px 12px 0;background:#181914}.resume-photo img{display:block;width:100%;height:auto;aspect-ratio:3/4;object-fit:cover}.resume-photo figcaption{padding:12px 0;font-size:10px;letter-spacing:1.1px;text-align:center;color:#f5f3ec}.resume-sticker{position:absolute;z-index:2;left:-22px;top:8px;transform:rotate(-18deg);padding:9px 13px;background:var(--brand-green);color:var(--ink);font-size:15px;letter-spacing:2px;box-shadow:0 3px 7px #27282214}.resume-sticker:before{content:"";position:absolute;left:16px;top:-28px;width:12px;height:42px;border:2px solid #7d8074;border-radius:9px;transform:rotate(28deg);box-shadow:inset 0 0 0 2px #f5f3ec}.resume-wordmark{font:italic 60px/.95 Georgia,Times New Roman,serif;letter-spacing:-4px;margin:12px 0 6px}.resume-sidebar .resume-action{margin-top:17px;gap:24px}.resume-timeline-panel{min-width:0;padding-top:6px}.resume-content{height:auto;overflow:visible}.resume-timeline-heading{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:20px;font-size:14px;color:var(--ink)}.resume-editorial .experience-list{padding:8px 0 20px 5px}.resume-editorial .resume-row{position:relative;margin-left:6px;border-left:1px solid #b9bcb0;border-bottom:0;padding:0 0 24px 27px}.resume-editorial .resume-row:before{content:"";position:absolute;left:-4px;top:8px;width:7px;height:7px;background:var(--ink);border-radius:50%}.resume-editorial .resume-row:last-child{padding-bottom:8px}.resume-editorial .resume-row h3{font-size:16px;line-height:1.5;font-weight:500}.resume-editorial .experience-head{gap:8px}.resume-editorial .experience-date{font-size:11px;line-height:1.8}.resume-editorial .resume-row .experience-company{font-size:12px;margin-top:5px;line-height:1.6;color:var(--ink)}.resume-editorial .experience-points{margin:10px 0 0;padding-left:15px;font-size:12px;line-height:1.75}.resume-editorial .experience-points li{margin:0 0 5px;padding-left:1px}@media(max-width:900px){.resume-editorial{grid-template-columns:210px minmax(0,1fr);gap:35px}.resume-photo-wrap{width:200px}.resume-wordmark{font-size:60px}.resume-editorial .experience-head{display:block}.resume-editorial .experience-date{display:block;margin-top:3px}}@media(max-width:600px){.resume-editorial{grid-template-columns:1fr;gap:32px;padding:42px 0}.resume-sidebar{width:100%}.resume-photo-wrap{width:190px}.resume-wordmark{font-size:60px}.resume-sidebar h2{margin-bottom:25px}.resume-timeline-panel{padding-top:0}.resume-editorial .resume-row{padding-left:21px}.resume-editorial .resume-row h3{font-size:16px}.resume-editorial .experience-points{font-size:13px;line-height:1.8}}.work-stack .contract-cover{display:block;position:relative;padding:0;background:#eef4ff;overflow:hidden;border:1px solid #d9e3f3}.contract-workbench-image{display:block;width:100%;height:100%;object-fit:cover;object-position:top center;transition:transform .45s ease}.project:hover .contract-workbench-image{transform:scale(1.015)}.work-stack .portfolio-cover{display:block;background:#f5f3ec}.portfolio-image{display:block;width:100%;height:100%;object-fit:contain}body>.wrap{padding-top:60px}.site-header{position:fixed;inset:0 0 auto;z-index:80;width:100%;height:60px;padding-inline:max(56px,calc((100vw - 1128px)/2));background:#f5f3ecf0;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-bottom:1px solid var(--line)}@media(max-width:900px){.site-header{padding-inline:30px}}@media(max-width:600px){body>.wrap{padding-top:56px}.site-header{height:56px;padding-inline:22px}}.music-toggle{position:fixed;left:24px;bottom:max(24px,env(safe-area-inset-bottom));z-index:60;display:inline-flex;align-items:center;gap:10px;border:1px solid #ffffff70;border-radius:50px;padding:13px 18px;background:#f5f3eceb;color:#272822;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:0 4px 20px #0002;font-size:12px}.music-toggle:hover{background:#fff}.music-toggle[aria-pressed=true]{background:var(--brand-green)}.music-toggle:disabled{cursor:wait;opacity:.8}#music-icon{font-size:11px;width:14px;text-align:center}@media(max-width:600px){.music-toggle{left:16px;bottom:max(16px,env(safe-area-inset-bottom));padding:11px 14px;font-size:11px}}.work-category-nav{display:flex;flex-wrap:wrap;gap:12px;max-width:900px;margin:0 auto 36px;font-size:12px}.work-category-nav a{padding:10px 18px;border:1px solid #ffffff35;border-radius:30px;background:#ffffff08}.work-category-nav a:hover{background:#ffffff18;border-color:var(--brand-green)}.work-group{max-width:900px;margin:0 auto;scroll-margin-top:24px}.work-group-heading{display:flex;justify-content:space-between;align-items:end;gap:20px;padding:26px 0 20px;border-top:1px solid #ffffff26}.work-group-label{font-size:10px;letter-spacing:2px;color:var(--brand-green);margin:0 0 10px}.work-group-heading h3{font-size:26px;font-weight:500;margin:0;letter-spacing:-.5px}.work-group-heading>p{font-size:12px;color:#cbd5e1;margin:0;line-height:1.6}.work-stack .snack-cover{display:block;position:relative;padding:0;background:#f7f6f1;overflow:hidden;border:1px solid #e4e5dd}@media(max-width:600px){.work-group-heading{align-items:start;gap:12px}.work-group-heading h3{font-size:22px}.work-group-heading>p{max-width:120px;text-align:right;font-size:11px}}@media(prefers-reduced-motion:reduce){.contract-workbench-image{transition:none}.project:hover .contract-workbench-image{transform:none}}
