:root{color-scheme:light;--resume-paper:#f6f7f2;--resume-surface:#fff;--resume-ink:#182922;--resume-green:#285b45;--resume-muted:#647067;--resume-line:#dce2da;--resume-soft:#e9eee5;color:var(--resume-ink);background:var(--resume-paper);font-synthesis:none;font-family:Segoe UI,Microsoft YaHei UI,PingFang SC,sans-serif}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:2rem}body{-webkit-font-smoothing:antialiased;min-height:100dvh;margin:0;line-height:1.8}button,input,select,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer}a{color:inherit;text-underline-offset:.25em}a:hover{color:var(--resume-green)}img,video{max-width:100%;height:auto;display:block}figure,p,h1,h2,h3,h4{margin:0}figure{min-width:0}h1,h2,h3{text-wrap:balance;line-height:1.3}h1,h2{font-family:Noto Serif SC,Songti SC,STSong,Georgia,serif}::selection{color:#182922;background:#d5e4bc}:focus-visible{outline:3px solid var(--resume-green);outline-offset:5px}[hidden]{display:none!important}.resume-shell{width:min(1240px,100% - 96px);margin-inline:auto}.resume-skip{z-index:30;background:#fff;padding:.5rem 1rem;position:fixed;top:1rem;left:1rem;transform:translateY(-200%)}.resume-skip:focus{transform:none}.resume-header{border-bottom:1px solid var(--resume-line);justify-content:space-between;align-items:center;gap:2rem;min-height:98px;display:flex}.resume-brand{letter-spacing:-.05em;align-items:center;gap:1rem;font:700 1.8rem Georgia,serif;text-decoration:none;display:flex}.resume-brand span{border-left:1px solid var(--resume-line);letter-spacing:.08em;padding-left:1rem;font:500 .82rem Microsoft YaHei UI,sans-serif}.resume-header nav{align-items:center;gap:1.8rem;font-size:.86rem;display:flex}.resume-header nav a{text-decoration:none}.resume-header nav a[aria-current]{text-decoration:underline}.resume-header button{border:1px solid var(--resume-line);color:inherit;font-size:inherit;background:0 0;border-radius:5px;padding:.45rem .8rem}.resume-header button:hover{background:var(--resume-soft)}.resume-eyebrow{color:var(--resume-green);letter-spacing:.15em;margin-bottom:1.4rem;font-size:.78rem;font-weight:600;display:block}.resume-lead{color:var(--resume-muted);max-width:38rem;font-size:1.05rem;line-height:1.95}.resume-actions{flex-wrap:wrap;align-items:center;gap:.9rem;margin-top:2rem;display:flex}.resume-button{border:1px solid var(--resume-green);color:#fff;background:var(--resume-green);border-radius:5px;justify-content:space-between;align-items:center;gap:1.5rem;padding:.7rem 1.15rem;font-size:.9rem;text-decoration:none;transition:background .2s,transform .2s;display:inline-flex}.resume-button:hover{color:#fff;background:#1b4432;transform:translateY(-2px)}.resume-button.secondary{color:var(--resume-green);border-color:var(--resume-line);background:0 0}.resume-button.secondary:hover{background:var(--resume-soft)}.resume-tag-list{color:var(--resume-muted);flex-wrap:wrap;gap:.5rem .9rem;margin:1.4rem 0 0;padding:0;font-size:.76rem;list-style:none;display:flex}.resume-tag-list li{border-bottom:1px solid var(--resume-line);padding-bottom:.15rem}.resume-index-hero{grid-template-columns:1.6fr 1fr;align-items:end;gap:4rem;padding-block:88px 70px;display:grid}.resume-index-hero h1{letter-spacing:-.045em;font-size:clamp(2.8rem,4.3vw,4.6rem);line-height:1.3}.resume-index-hero .resume-lead{padding-bottom:.5rem;font-size:.96rem}.resume-project-label{border-bottom:1px solid var(--resume-line);justify-content:space-between;align-items:baseline;margin-bottom:1.6rem;padding-bottom:1.1rem;display:flex}.resume-project-label h2{font-family:inherit;font-size:.9rem;font-weight:500}.resume-project-label span{color:var(--resume-muted);font-size:.8rem}.resume-project-shortcuts{flex-wrap:wrap;gap:.7rem 1.5rem;margin-bottom:1.7rem;font-size:.85rem;display:flex}.resume-project-shortcuts a{color:var(--resume-muted);text-decoration:none}.resume-project-shortcuts a:hover{color:var(--resume-green);text-decoration:underline}.resume-project-stack{gap:2rem;display:grid}.resume-demo-link{font-size:.84rem}.resume-project-card{border:1px solid var(--resume-line);background:#fff;border-radius:9px;grid-template-columns:.85fr 1.15fr;display:grid;overflow:hidden}.resume-project-copy{align-self:center;padding:clamp(2rem,4vw,3.8rem)}.resume-project-copy h3{margin-bottom:.6rem;font:700 3rem Songti SC,STSong,Georgia,serif}.resume-project-copy .project-type{margin-bottom:1.5rem;font-size:1.1rem}.resume-project-copy p{color:var(--resume-muted);font-size:.92rem}.resume-project-image{background:#e5ebe1;align-items:center;min-height:410px;padding:2.5rem 2rem;display:flex}.resume-project-image a{width:100%}.resume-project-image img{aspect-ratio:4/3;object-fit:cover;object-position:top;border:1px solid #d4dbd0;border-radius:6px;width:100%;transition:transform .4s;box-shadow:0 12px 32px #20352212}.resume-project-image a:hover img{transform:translateY(-5px)}.resume-project-image--contain img{object-fit:contain;object-position:center;background:#fff}.resume-related{flex-wrap:wrap;align-items:baseline;gap:1rem 2rem;margin-top:4rem;font-size:.85rem;display:flex}.resume-related>span{color:var(--resume-muted);font-size:.75rem}.resume-related a{text-decoration:none}.resume-related a:hover{text-decoration:underline}.resume-index-note{max-width:780px;color:var(--resume-muted);margin-top:3rem;font-size:.9rem}.resume-footer{border-top:1px solid var(--resume-line);color:var(--resume-muted);justify-content:space-between;gap:1.5rem;margin-top:100px;padding-block:2rem;font-size:.8rem;display:flex}.resume-footer a{text-decoration:none}.resume-breadcrumb{color:var(--resume-muted);padding-top:2rem;font-size:.8rem}.resume-breadcrumb a{text-decoration:none}.resume-breadcrumb span{margin-inline:.75rem}.resume-case-hero{grid-template-columns:1.1fr .9fr;align-items:center;gap:4.5rem;padding-block:3.3rem 3.5rem;display:grid}.resume-case-hero h1{letter-spacing:-.05em;margin-bottom:1.5rem;font-size:clamp(3rem,5vw,5rem)}.resume-case-hero h1 span{letter-spacing:-.025em;margin-top:.65rem;font:500 clamp(1.3rem,2.3vw,2rem) Microsoft YaHei UI,sans-serif;display:block}.resume-case-visual{background:#e8ede3;border-radius:7px;padding:1.3rem}.resume-case-visual img{border:1px solid #d4dbd0;border-radius:3px;width:100%}.resume-case-visual figcaption{color:var(--resume-muted);margin-top:.8rem;font-size:.72rem}.resume-facts{border-block:1px solid var(--resume-line);grid-template-columns:.7fr 1.2fr 1.1fr 1.35fr;gap:2rem;padding:1.6rem 0;display:grid}.resume-facts dt{color:var(--resume-muted);margin-bottom:.4rem;font-size:.72rem}.resume-facts dd{margin:0;font-size:.84rem}.resume-case-grid{grid-template-columns:155px minmax(0,1fr);gap:60px;padding-top:75px;display:grid}.resume-contents{align-self:start;position:sticky;top:2rem}.resume-contents p{color:var(--resume-muted);margin-bottom:1rem;font-size:.73rem}.resume-contents a{border-left:1px solid var(--resume-line);color:var(--resume-muted);padding:.5rem 0 .5rem 1rem;font-size:.83rem;text-decoration:none;display:block}.resume-contents a[aria-current],.resume-contents a:hover{color:var(--resume-green);border-left:2px solid var(--resume-green)}.resume-case-section{margin-bottom:76px;scroll-margin-top:2rem}.resume-case-section>h2{letter-spacing:-.035em;margin-bottom:1.3rem;font-size:clamp(1.8rem,2.6vw,2.5rem)}.resume-section-intro{color:var(--resume-muted);max-width:49rem;margin-bottom:1.8rem;font-size:.95rem}.resume-prose p+p{margin-top:1rem}.resume-prose{font-size:.95rem}.resume-pullquote{border-left:3px solid var(--resume-green);margin:2rem 0;padding-left:1.2rem;font-family:Songti SC,STSong,serif;font-size:1.6rem}.resume-needs{grid-template-columns:1fr 1fr;gap:2rem 2.5rem;margin-top:2rem;display:grid}.resume-needs h3{margin-bottom:.6rem;font-size:1rem}.resume-needs p{color:var(--resume-muted);font-size:.88rem}.resume-flow{background:var(--resume-soft);border-radius:5px;flex-wrap:wrap;align-items:center;gap:.8rem;margin:2rem 0 0;padding:1.15rem 1.5rem;font-size:.82rem;list-style:none;display:flex}.resume-flow li:not(:last-child):after{content:"→";color:var(--resume-muted);margin-left:.8rem}.resume-architecture{color:#eef4e9;background:#1d3429;border-radius:7px;margin-block:1.8rem;padding:2rem}.resume-architecture>p{color:#adc0b1;margin-bottom:1.5rem;font-size:.8rem}.resume-architecture-grid{grid-template-columns:1fr 32px 1.3fr 32px 1fr;align-items:center;gap:.5rem;display:grid}.resume-architecture-grid article{border:1px solid #69816e;border-radius:4px;align-self:stretch;padding:1.1rem}.resume-architecture-grid h3{margin-bottom:.6rem;font-size:.92rem}.resume-architecture-grid p{color:#c1d0c3;font-size:.77rem}.resume-architecture-grid>span{text-align:center;color:#b7cdaf}.resume-architecture-store{color:#c1d0c3;border-top:1px solid #496151;grid-template-columns:1fr 1fr;gap:1rem;margin-top:1.3rem;padding-top:1.3rem;font-size:.8rem;display:grid}.resume-architecture-store strong{color:#eff4e9;margin-bottom:.2rem;font-weight:500;display:block}.resume-tech-list{grid-template-columns:1fr 1fr;gap:1.4rem 2rem;margin:0;display:grid}.resume-tech-list dt{font-size:.88rem;font-weight:600}.resume-tech-list dd{color:var(--resume-muted);margin:.2rem 0 0;font-size:.85rem}.resume-implementation{border:1px solid var(--resume-line);background:var(--resume-surface);border-radius:5px;margin-top:1.5rem}.resume-implementation+.resume-implementation{margin-top:.7rem}.resume-implementation summary{cursor:pointer;padding:1.1rem 1.3rem;font-size:.94rem;font-weight:600}.resume-implementation summary::marker{color:var(--resume-green)}.resume-implementation .detail-body{padding:0 1.3rem 1.3rem;font-size:.87rem}.resume-implementation p+p{margin-top:.7rem}.resume-implementation code,.resume-source code{overflow-wrap:anywhere;color:var(--resume-green);font-size:.78rem}.resume-implementation .code-path{color:var(--resume-muted);margin-top:1rem;font-size:.74rem}.resume-decision{grid-template-columns:1fr 1.7fr;gap:2rem;padding-block:1.5rem;display:grid}.resume-decision+.resume-decision{border-top:1px solid var(--resume-line)}.resume-decision h3{font-size:1rem}.resume-decision p{color:var(--resume-muted);font-size:.9rem}.resume-gallery{grid-template-columns:1fr 1fr;gap:2rem 1.2rem;display:grid}.resume-gallery a{border:1px solid var(--resume-line);background:#e8ede4;border-radius:5px;padding:.7rem;display:block}.resume-gallery img{aspect-ratio:16/11;object-fit:contain;background:#fff;width:100%}.resume-gallery figcaption{color:var(--resume-muted);margin-top:.65rem;font-size:.8rem}.resume-gallery figcaption strong{color:var(--resume-ink);margin-bottom:.2rem;font-size:.9rem;display:block}.resume-boundary{border-block:1px solid var(--resume-line);grid-template-columns:1fr 1fr;gap:2rem;margin-top:1.6rem;padding-block:1.7rem;display:grid}.resume-boundary h3{margin-bottom:.7rem;font-size:.95rem}.resume-boundary ul{color:var(--resume-muted);margin:0;padding-left:1.1rem;font-size:.85rem}.resume-boundary li+li{margin-top:.65rem}.resume-source{color:var(--resume-muted);margin-top:1.5rem;font-size:.76rem}.resume-case-end{border-top:1px solid var(--resume-line);justify-content:space-between;align-items:center;gap:1rem;padding-top:1.5rem;font-size:.88rem;display:flex}@media (width<=1000px){.resume-shell{width:calc(100% - 56px)}.resume-index-hero,.resume-case-hero{gap:2rem}.resume-case-grid{grid-template-columns:130px minmax(0,1fr);gap:30px}.resume-project-copy{padding:2rem}.resume-project-image{padding:1.5rem}.resume-architecture{padding:1.2rem}.resume-architecture-grid{grid-template-columns:1fr;gap:.4rem}.resume-architecture-grid>span{transform:rotate(90deg)}}@media (width<=720px){.resume-shell{width:calc(100% - 36px)}.resume-header{gap:.6rem;min-height:78px}.resume-brand{font-size:1.6rem}.resume-brand span{display:none}.resume-header nav{gap:.8rem;font-size:.73rem}.resume-header button{padding:.3rem .5rem}.resume-index-hero{grid-template-columns:1fr;gap:1.5rem;padding-block:55px 42px}.resume-index-hero h1{font-size:clamp(2.2rem,8.8vw,3.5rem)}.resume-index-hero .resume-lead{max-width:33rem}.resume-project-card,.resume-case-hero{grid-template-columns:1fr}.resume-project-copy{padding:1.5rem}.resume-project-image{min-height:0;padding:1.4rem}.resume-case-hero{padding-block:2.5rem}.resume-case-hero h1{font-size:3.4rem}.resume-facts{grid-template-columns:1fr 1fr;gap:1.4rem}.resume-case-grid{padding-top:2.8rem;display:block}.resume-contents{flex-wrap:wrap;gap:.3rem .9rem;margin-bottom:3rem;display:flex;position:static}.resume-contents p{width:100%;margin-bottom:.3rem}.resume-contents a{border-left:0;padding:.2rem 0}.resume-contents a[aria-current]{border:0;text-decoration:underline}.resume-case-section{margin-bottom:55px}.resume-needs{gap:1.5rem}.resume-gallery{grid-template-columns:1fr}.resume-gallery img{aspect-ratio:auto}.resume-boundary{grid-template-columns:1fr}.resume-decision{grid-template-columns:1fr;gap:.7rem}.resume-footer{flex-wrap:wrap;gap:.8rem;margin-top:65px}.resume-footer p{display:none}.resume-tech-list{gap:1.3rem}}@media (width<=380px){.resume-header nav{gap:.6rem}.resume-header nav>a:nth-child(2){display:none}.resume-needs,.resume-tech-list{grid-template-columns:1fr}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important;animation:none!important}}@media print{:root{color:#111;background:#fff}body{font-size:10pt}.resume-shell{width:100%}.resume-header nav,.resume-contents,.resume-actions,.resume-skip,.resume-footer a:last-child,.resume-related,.resume-project-shortcuts{display:none}.resume-header{min-height:50px}.resume-case-grid{padding-top:1rem;display:block}.resume-case-hero{gap:1rem;padding-block:1rem}.resume-case-hero h1{font-size:30pt}.resume-case-section{margin-bottom:20pt}.resume-case-section>h2{font-size:20pt}.resume-case-hero,figure,.resume-facts,.resume-needs>div,.resume-decision,.resume-implementation{break-inside:avoid}.resume-implementation .detail-body{display:block}.resume-architecture{print-color-adjust:exact}.resume-footer{margin-top:2rem}}
