:root{--paper:#fbfbf8;--ink:#161614;--ink-2:#4d4d47;--ink-3:#97978e;--line:#e7e7df;--line-strong:#161614;--serif:"Songti SC","STSong","Noto Serif SC","Source Han Serif SC",Georgia,"Times New Roman",serif;--sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Arial,sans-serif;--content-width:64rem;--ease:cubic-bezier(0.22,0.61,0.36,1)}*{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:1rem;line-height:1.8;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;overflow-x:hidden}::selection{background:var(--ink);color:var(--paper)}a{color:inherit;text-decoration:none}a:focus-visible,button:focus-visible,summary:focus-visible{outline:1.5px solid var(--ink);outline-offset:4px;border-radius:1px}.container{width:100%;max-width:var(--content-width);margin:0 auto;padding:0 1.75rem}.display{font-family:var(--serif);font-weight:700;font-size:clamp(2.8rem,8vw,5rem);line-height:1.18;letter-spacing:.015em}.eyebrow{font-size:.78rem;letter-spacing:.28em;color:var(--ink-3);margin-bottom:2rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap;border:0}.u-line{background-image:linear-gradient(currentColor,currentColor);background-size:0 1px;background-repeat:no-repeat;background-position:0 100%;transition:background-size .3s var(--ease);padding-bottom:2px}a:hover .u-line,button:hover .u-line{background-size:100% 1px}.site-nav{border-bottom:1px solid var(--line)}.site-nav-inner{display:flex;align-items:baseline;justify-content:space-between;padding:1.5rem 2.75rem}.nav-group{display:flex;gap:2.25rem;font-size:.9rem;letter-spacing:.08em}.nav-group a{color:var(--ink-2);transition:color .2s var(--ease)}.nav-group a:hover{color:var(--ink)}.nav-group a[aria-current=page]{color:var(--ink);font-weight:600}.home-hero{padding:clamp(5rem,14vh,8.5rem) 0 clamp(4rem,10vh,6.5rem)}.home-hero .display{font-family:Helvetica Neue,Helvetica,Arial,Songti SC,STSong,"Noto Serif SC","Source Han Serif SC",serif;white-space:pre-line;text-box-trim:trim-end;text-box-edge:cap alphabetic}.hero-body{margin-top:2.5rem;font-size:1.05rem;line-height:2;color:var(--ink-2);max-width:38rem;hanging-punctuation:first allow-end}.hero-tag{margin-top:3rem;font-size:.78rem;letter-spacing:.28em;color:var(--ink-3)}.social-row{list-style:none;flex-wrap:wrap;align-items:center;gap:1.35rem;margin-top:2.6rem}.social-item,.social-row{display:flex}.social-item[data-social=douyin]{--brand:#fe2c55}.social-item[data-social=xiaohongshu]{--brand:#ff2442}.social-item[data-social=github]{--brand:#181717}.social-item[data-social=x]{--brand:#000000}.social-link{display:inline-flex;align-items:center;justify-content:center;font-size:1.3rem;line-height:1;color:var(--ink-2);transition:color .2s var(--ease),transform .3s var(--ease)}.social-link:focus-visible,.social-link:hover{color:var(--brand,var(--ink));transform:translateY(-2px)}.social-link.is-pending{cursor:default}.home-entries{border-top:1px solid var(--line-strong);padding-bottom:clamp(4rem,10vh,7rem)}.entry-link{display:grid;grid-template-columns:3.5rem 1fr auto;align-items:baseline;grid-gap:1rem;gap:1rem;padding:2.2rem 0;border-bottom:1px solid var(--line);transition:padding-left .3s var(--ease)}.entry-link:hover{padding-left:.5rem}.entry-index{font-family:var(--serif);font-size:.95rem;color:var(--ink-3);transition:color .2s var(--ease)}.entry-link:hover .entry-index{color:var(--ink)}.entry-main{display:flex;flex-direction:column;gap:.35rem}.entry-title{font-family:var(--serif);font-size:1.5rem;font-weight:700;letter-spacing:.02em;align-self:flex-start}.entry-desc{font-size:.88rem;color:var(--ink-3)}.entry-arrow{font-size:1.2rem;color:var(--ink-3);transition:transform .3s var(--ease),color .2s var(--ease)}.entry-link:hover .entry-arrow{transform:translateX(6px);color:var(--ink)}.page-body{position:relative}.print-corner{position:absolute;top:2.2rem;right:2.75rem;font-size:.85rem;letter-spacing:.06em}.print-corner button{background:none;border:none;padding:0 0 2px;font:inherit;color:var(--ink-2);cursor:pointer;background-image:linear-gradient(currentColor,currentColor);background-size:0 1px;background-repeat:no-repeat;background-position:0 100%;transition:background-size .3s var(--ease),color .2s var(--ease)}.print-corner button:hover{background-size:100% 1px;color:var(--ink)}.resume-header{padding:2.6rem 0 0;text-align:center}.resume-header .display{font-size:clamp(3rem,8vw,4.4rem)}.resume-photo,.resume-print-summary{display:none}.resume-header .contact{margin-top:1.2rem;font-size:.88rem;letter-spacing:.06em;color:var(--ink-3)}.resume-header .contact a{text-decoration:underline;text-underline-offset:.25em;-webkit-text-decoration-color:var(--line);text-decoration-color:var(--line);text-decoration-thickness:1px;transition:-webkit-text-decoration-color .2s var(--ease);transition:text-decoration-color .2s var(--ease);transition:text-decoration-color .2s var(--ease),-webkit-text-decoration-color .2s var(--ease)}.resume-header .contact a:hover{-webkit-text-decoration-color:var(--ink);text-decoration-color:var(--ink)}.header-rule{margin-top:2.8rem;border-top:1px solid var(--line)}.resume-section{padding:2.2rem 0 .6rem}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;border-bottom:1px solid var(--line);padding-bottom:.9rem;margin-bottom:1.8rem}.section-en-big{font-family:var(--font-dm-serif-display),"Songti SC",serif;font-style:normal;font-weight:400;font-size:clamp(1.9rem,4.5vw,2.5rem);line-height:1.1;letter-spacing:.01em}.section-zh{font-size:.76rem;letter-spacing:.3em;color:var(--ink-3);white-space:nowrap}.section-index{display:none}.item{margin-bottom:1.7rem}.item:last-child{margin-bottom:0}.item-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:.2rem}.item-title{font-family:var(--serif);font-weight:700;font-size:1.08rem;letter-spacing:.02em}.company-info{position:relative;max-width:100%}.company-info summary{display:inline-flex;align-items:center;flex-wrap:wrap;gap:.65rem;list-style:none;cursor:pointer}.company-discovery{display:inline-flex;align-items:center;gap:.3rem;padding:.15rem .55rem;border:1px solid #d7e3e8;border-radius:999px;background:#edf4f6;color:#446b7c;font-family:var(--sans);font-size:.65rem;font-weight:500;letter-spacing:.03em;line-height:1.5;transition:box-shadow .2s,border-color .2s}.company-discovery svg{width:1rem;height:1rem}.company-info:focus-within .company-discovery,.company-info:hover .company-discovery{border-color:#a9c7d3;box-shadow:0 0 12px rgb(75 131 153/16%)}@media (prefers-reduced-motion:reduce){.company-discovery{transition:none}}.company-info summary::-webkit-details-marker{display:none}.company-products{position:absolute;bottom:0;left:calc(100% + .65rem);z-index:10;width:240px;max-width:calc(100vw - 3rem);padding:.8rem;background:var(--paper);border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 24px rgb(0 0 0/10%)}.company-products:before{content:"";position:absolute;top:0;right:100%;width:.65rem;height:100%}@media (max-width:640px){.company-products{top:100%;bottom:auto;left:0}}.company-products-label{margin:0 0 .5rem;color:var(--ink-3);font-size:.75rem}.company-products a{display:flex;align-items:center;gap:.7rem;padding:.6rem;border-radius:6px;font-size:.88rem}.company-products a:focus-visible,.company-products a:hover{background:var(--line)}.company-products img{flex-shrink:0;object-fit:contain}.company-product-arrow{margin-left:auto;color:var(--ink-3)}.item-title-link{display:inline-flex;align-items:baseline;gap:.4rem;min-width:0}.item-title-link .item-title{background-image:linear-gradient(currentColor,currentColor);background-size:0 1px;background-repeat:no-repeat;background-position:0 100%;transition:background-size .3s var(--ease);padding-bottom:2px}.item-title-link:hover .item-title{background-size:100% 1px}.item-link-arrow{font-size:.72rem;color:var(--ink-3);transition:transform .3s var(--ease),color .2s var(--ease)}.item-title-link:hover .item-link-arrow{transform:translate(2px,-2px);color:var(--ink)}.item-date{font-size:.8rem;letter-spacing:.08em;color:var(--ink-3);white-space:nowrap;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.item-sub{font-size:.88rem;color:var(--ink-2);margin-bottom:.6rem}.item ul{list-style:none}.item ul li{position:relative;padding-left:1.5rem;margin-bottom:.35rem;font-size:.94rem;color:var(--ink-2);hanging-punctuation:first allow-end}.item ul li:before{content:"—";position:absolute;left:0;color:var(--ink-3)}.tags-line{margin-top:.6rem;font-size:.8rem;letter-spacing:.06em;color:var(--ink-3)}.skill-group{display:grid;grid-template-columns:8rem 1fr;grid-gap:1.5rem;gap:1.5rem;padding:1.1rem 0;border-bottom:1px solid var(--line)}.skill-group:last-child{border-bottom:none}.skill-group h3{font-size:.85rem;font-weight:600;letter-spacing:.06em;color:var(--ink)}.skill-group p{font-size:.92rem;color:var(--ink-2)}.deck-page{display:flex;flex-direction:column;height:100vh;height:100dvh;overflow:hidden}.deck-wrap{flex:1 1 auto;min-height:0;display:flex;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:thin}.deck-wrap:focus-visible{outline:1.5px solid var(--ink);outline-offset:-3px}.deck{display:flex;width:100%}.deck-panel{flex:0 0 100%;width:100%;height:100%;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scroll-snap-align:start;scroll-snap-stop:always}.deck-inner{padding-top:clamp(2.2rem,6vh,4rem);padding-bottom:3rem}.deck-cover .display{font-size:clamp(2.6rem,7vw,4.2rem)}.deck-hint{margin-top:2.2rem;font-size:.76rem;letter-spacing:.18em;color:var(--ink-3)}.deck-page .site-footer{flex:0 0 auto;margin-top:0;padding:1.1rem 0 1.4rem}.portfolio-lead{margin-top:1.8rem;max-width:44rem;font-size:1rem;line-height:2;color:var(--ink-2);hanging-punctuation:first allow-end}.work-index{list-style:none;margin-top:3.2rem;border-top:1px solid var(--line)}.work-index li{border-bottom:1px solid var(--line)}.work-index-link{display:grid;grid-template-columns:2.6rem 1fr;align-items:baseline;grid-gap:.4rem 1rem;gap:.4rem 1rem;padding:1.1rem 0;transition:padding-left .3s var(--ease)}.work-index-link:hover{padding-left:.4rem}.work-index-num{font-family:var(--serif);font-size:.9rem;color:var(--ink-3)}.work-index-title{font-family:var(--serif);font-size:1.12rem;font-weight:700;letter-spacing:.02em;justify-self:start}.work-index-kind{grid-column:2;font-size:.82rem;color:var(--ink-3)}.work{scroll-margin-top:0}.work-head{display:grid;grid-template-columns:3.4rem 1fr auto;grid-gap:.4rem 1rem;gap:.4rem 1rem;align-items:baseline;padding-bottom:1.3rem;border-bottom:1px solid var(--line-strong)}.work-head-nav{display:flex;gap:.9rem;align-self:start}.work-head-arrow{font-size:1.05rem;line-height:1;color:var(--ink-3);transition:color .2s var(--ease),transform .3s var(--ease)}.work-head-arrow:hover{color:var(--ink);transform:translateX(2px)}.work-head-nav .work-head-arrow:first-child:hover{transform:translateX(-2px)}.work-nav{margin-top:3rem;padding-top:1.6rem;padding-left:4.4rem;border-top:1px solid var(--line);display:flex;align-items:baseline;justify-content:space-between;gap:1.5rem}.work-nav-link{display:inline-flex;align-items:baseline;gap:.45rem;font-size:.9rem;color:var(--ink-2);transition:color .2s var(--ease)}.work-nav-link:hover{color:var(--ink)}.work-title{font-family:var(--serif);font-size:clamp(1.6rem,3.4vw,2.1rem);font-weight:700;letter-spacing:.015em;line-height:1.3}.work-kind{margin-top:.5rem;font-size:.9rem;color:var(--ink-2)}.work-meta{margin-top:.35rem;font-size:.8rem;letter-spacing:.06em;color:var(--ink-3)}.work-meta-sep{margin:0 .5rem}.work-summary{margin-top:1.8rem;padding-left:4.4rem;max-width:46rem;font-size:1.02rem;line-height:1.95;color:var(--ink);hanging-punctuation:first allow-end}.work-links{margin-top:1.4rem;padding-left:4.4rem;display:flex;flex-wrap:wrap;gap:1.6rem;font-size:.92rem}.work-link{display:inline-flex;align-items:baseline;gap:.3rem;color:var(--ink)}.work-link span[aria-hidden=true]{font-size:.8rem;color:var(--ink-3);transition:transform .3s var(--ease),color .2s var(--ease)}.work-link:hover span[aria-hidden=true]{transform:translate(2px,-2px);color:var(--ink)}.work-group{margin-top:2.4rem;padding-left:4.4rem}.work-group-title{font-size:.78rem;letter-spacing:.28em;font-weight:600;color:var(--ink-3);margin-bottom:1.1rem}.work-text{margin-top:1.6rem;padding-left:4.4rem;max-width:46rem;font-size:.96rem;line-height:2;color:var(--ink-2);hanging-punctuation:first allow-end}.work-list{list-style:none;max-width:48rem}.work-list li{position:relative;padding-left:1.5rem;margin-bottom:.7rem;font-size:.94rem;line-height:1.9;color:var(--ink-2);hanging-punctuation:first allow-end}.work-list li:before{content:"—";position:absolute;left:0;color:var(--ink-3)}.work-list-ordered{counter-reset:work-item}.work-list-ordered li{counter-increment:work-item}.work-list-ordered li:before{content:counter(work-item,decimal-leading-zero);font-family:var(--serif);font-size:.82rem;top:.15em}.work-layers{list-style:none;counter-reset:work-layer;max-width:48rem;border-top:1px solid var(--line)}.work-layer{counter-increment:work-layer;padding:1.25rem 0;border-bottom:1px solid var(--line)}.work-layer-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:.4rem .9rem}.work-layer-head:before{content:"L" counter(work-layer);font-family:var(--serif);font-size:.78rem;letter-spacing:.06em;color:var(--ink-3);flex:0 0 auto}.work-layer-name{font-family:var(--serif);font-size:1.05rem;font-weight:700;letter-spacing:.02em;flex:0 0 auto}.work-layer-role{flex:1 1 22rem;font-size:.9rem;line-height:1.85;color:var(--ink-2)}.work-layer-modules{list-style:none;display:flex;flex-wrap:wrap;gap:.5rem;margin:.75rem 0 0 2.1rem}.work-layer-modules li{font-size:.76rem;letter-spacing:.04em;color:var(--ink-2);border:1px solid var(--line);border-radius:999px;padding:.2rem .7rem}.work-flow{margin-top:1.4rem;max-width:48rem;padding-left:1.5rem;border-left:1px solid var(--line-strong);font-size:.9rem;line-height:1.95;color:var(--ink-2)}.work-media{display:flex;flex-direction:column;gap:2rem;max-width:52rem}.work-figure{border:1px solid var(--line);background:#fff}.work-shot{display:block;width:100%;height:auto;border-bottom:1px solid var(--line)}.work-caption{padding:.85rem 1.1rem;line-height:1.7}.work-caption,.work-note{font-size:.82rem;color:var(--ink-3)}.work-note{margin-top:2rem;padding-left:4.4rem;max-width:46rem;line-height:1.85}.work-tags{margin-top:2.2rem;padding-left:4.4rem;display:flex;flex-wrap:wrap;gap:.6rem}.work-tag{font-family:ui-monospace,SF Mono,SFMono-Regular,Menlo,Consolas,monospace;font-size:.72rem;letter-spacing:.06em;color:var(--ink-3);border:1px solid var(--line);border-radius:999px;padding:.22rem .7rem}.placeholder{padding:clamp(5rem,14vh,8.5rem) 0}.placeholder-body{margin-top:2rem;color:var(--ink-2);max-width:30rem}.placeholder-links{margin-top:3rem;display:flex;gap:2.5rem;font-size:.92rem}.site-footer{margin-top:3.5rem;border-top:1px solid var(--line);padding:1.8rem 0 2.8rem}.footer-inner{display:flex;justify-content:center;text-align:center;gap:1.4rem;font-family:ui-monospace,SF Mono,SFMono-Regular,Menlo,Consolas,monospace;font-size:.72rem;letter-spacing:.08em;color:var(--ink-3)}.skill-items{list-style:none;margin:0}.skill-items li{position:relative;padding-left:1.5rem;margin-bottom:.45rem}.skill-items li:last-child{margin-bottom:0}.skill-items li:before{content:"—";position:absolute;left:0;color:var(--ink-3)}@media (max-width:40rem){.container{padding:0 1.4rem}.site-nav-inner{padding:1.2rem 1.4rem}.nav-group{gap:1.4rem}.print-corner{position:static;text-align:center;margin-top:2rem}.entry-link{grid-template-columns:2.4rem 1fr auto;padding:1.8rem 0}.entry-link:hover{padding-left:0}.social-row{gap:1.15rem;margin-top:2.2rem}.work-head{grid-template-columns:1fr auto;gap:.35rem .8rem}.work-head>.work-index-num{grid-column:1/-1}.work-index-link{grid-template-columns:2.2rem 1fr}.work-group,.work-links,.work-nav,.work-note,.work-summary,.work-tags,.work-text{padding-left:0}.work-nav{gap:1rem;font-size:.86rem}.work-layer-modules{margin-left:0}.work-layer-head{flex-wrap:wrap;gap:.35rem .6rem}.work-media{gap:1.5rem}.section-zh{letter-spacing:.2em}.skill-group{grid-template-columns:1fr;gap:.3rem}}@media print{@page{size:A4;margin:10mm 14mm 9mm}.print-corner,.site-footer,.site-nav{display:none!important}:root{--print-ink:#1f2933;--print-muted:#68707a;--print-line:#d9dee5;--print-accent:#24394f;--print-accent-2:#6f8a9c}body{background:#fff;color:var(--print-ink);font-family:PingFang SC,Microsoft YaHei,Noto Sans CJK SC,Arial,sans-serif;font-size:10.15px;line-height:1.5;letter-spacing:0;-webkit-print-color-adjust:exact;print-color-adjust:exact}.page-body{min-height:0}.container{max-width:none;padding:0}.resume-header{position:relative;min-height:31.8mm;padding:0 30mm 4.2mm 0;text-align:left;border-bottom:0}.resume-photo{display:block;position:absolute;top:0;right:0;width:24mm;height:31.8mm;border:1px solid #eef1f4;background-color:#f5f7f8;object-fit:cover;object-position:center 18%}.resume-header .display{color:var(--print-accent);font-family:PingFang SC,Microsoft YaHei,Noto Sans CJK SC,Arial,sans-serif;font-size:30px;font-weight:800;letter-spacing:0;line-height:1}.resume-header .contact{margin-top:7px;color:var(--print-muted);font-size:10.4px;line-height:1.55}.resume-header .contact a{text-decoration:none}.resume-print-summary{display:block;max-width:146mm;margin-top:5px;color:#3f4854;font-size:10.4px;line-height:1.42}.resume-print-summary-title{margin-bottom:2px;color:var(--print-accent);font-weight:800}.resume-print-summary ul{margin:0;padding-left:14px;list-style:disc}.resume-print-summary li{margin:0 0 .6mm;padding-left:1px}.resume-print-summary li::marker{color:var(--print-accent-2)}.header-rule{display:none}.resume-section{padding:0;margin:0 0 2.6mm;page-break-inside:auto;break-inside:auto;orphans:3;widows:3}.section-head{display:block;margin:2.6mm 0 1.8mm;padding:0;border-bottom:0}.section-en-big{display:none}.section-zh{display:flex;align-items:center;gap:7px;color:var(--print-accent);font-size:13.5px;font-weight:800;letter-spacing:0;line-height:1.1}.section-zh:before{content:"";width:5px;height:13px;flex:0 0 auto;border-radius:99px;background:var(--print-accent)}.item{margin-bottom:2.25mm;page-break-inside:auto;break-inside:auto;color:var(--print-ink)}.item-head{align-items:baseline;gap:12px;margin-bottom:1.3mm}.item-title,.item-title-link .item-title{color:#111827;font-family:PingFang SC,Microsoft YaHei,Noto Sans CJK SC,Arial,sans-serif;font-size:11.8px;font-weight:800;letter-spacing:0;line-height:1.28;padding-bottom:0}.item-title-link{gap:0}.item-title-link .item-title{background-image:none}.company-discovery,.company-products,.item-link-arrow{display:none}.item-date{color:var(--print-muted);font-size:9.6px;letter-spacing:0}.item-sub{margin:0 0 1.2mm;color:#3f4854;font-size:10.15px;line-height:1.5}.item ul{margin:0;padding-left:14px;list-style:disc}.item ul li{position:static;margin:0 0 .75mm;padding-left:1px;color:#2f3741;font-size:9.85px;line-height:1.42}.item ul li:before{content:none}.item ul li::marker,.skill-items li::marker{color:var(--print-accent-2)}.tags-line{margin-top:.6rem;color:var(--print-muted);font-size:9.6px;letter-spacing:0}.skill-group{display:grid;grid-template-columns:26mm 1fr;grid-gap:7mm;gap:7mm;padding:1mm 0;border-bottom:0;page-break-inside:auto;break-inside:auto}.skill-group h3{color:var(--print-accent);font-size:10px;font-weight:800;letter-spacing:0}.skill-group p,.skill-items li{color:#2f3741;font-size:9.85px;line-height:1.42}.skill-items{padding-left:14px;list-style:disc}.skill-items li{position:static;margin-bottom:.75mm;padding-left:1px}.skill-items li:before{content:none}}