.project-gallery{--gallery-bg:#e7eee5;--gallery-ink:#355f50;min-width:0;width:100%}.gallery-tone--blue{--gallery-bg:#e4ebf4;--gallery-ink:#365d83}.gallery-tone--ink{--gallery-bg:#dde5e6;--gallery-ink:#28454e}.gallery-tone--sand{--gallery-bg:#efe7d7;--gallery-ink:#756647}.gallery-tone--rose{--gallery-bg:#f0e4df;--gallery-ink:#886155}.gallery-heading{display:flex;justify-content:space-between;gap:12px;align-items:center;padding-bottom:12px;color:var(--gallery-ink);font-size:11px;letter-spacing:.025em}.gallery-edition{font:8px ui-monospace,monospace;letter-spacing:.12em;opacity:.65;white-space:nowrap}.gallery-stage{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:13px;padding:20px;background:var(--gallery-bg);border-radius:3px;isolation:isolate}.gallery-shot{position:relative;min-width:0;padding:0;background:#fffefa;box-shadow:0 8px 18px -10px #253a3960;border:1px solid #ffffffb3;text-align:left;transition:transform .2s,box-shadow .2s;overflow:hidden;border-radius:3px}.gallery-shot:hover{transform:translateY(-3px);box-shadow:0 14px 24px -10px #253a3966;z-index:4}.gallery-shot:focus-visible{outline:3px solid var(--blue);outline-offset:4px;z-index:5}.gallery-image-wrap{display:flex;align-items:center;justify-content:center;width:100%;overflow:hidden;background:#f7f8f4;aspect-ratio:1.72}.gallery-image-wrap img{width:100%;height:100%;object-fit:contain;min-height:0}.gallery-shot-caption{display:flex;align-items:center;justify-content:space-between;gap:7px;min-height:31px;padding:7px 10px;font-size:9px;line-height:1.5;color:var(--gallery-ink);background:#fffefa}.gallery-shot-caption svg{opacity:.55;flex:none}.gallery-shot-caption small{font-size:8px;font-weight:400;opacity:.7;display:inline-block;margin-left:7px}.gallery-shot--1{grid-column:1/-1}.gallery-shot--1 .gallery-image-wrap{aspect-ratio:1.72}.gallery-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:9px;font-size:9px;line-height:1.7;color:#778479}.gallery-footer>span{max-width:75%}.gallery-footer>button{display:flex;align-items:center;gap:4px;min-height:36px;padding:2px 0;background:none;font-size:10px;white-space:nowrap;color:var(--gallery-ink);border-bottom:1px solid transparent}.gallery-footer>button:hover{border-color:currentColor}.gallery--devices .gallery-stage{display:block;aspect-ratio:1.28;padding:0;overflow:hidden}.gallery--devices .gallery-shot{position:absolute}.gallery--devices .gallery-shot--1{left:4%;top:8%;width:82%;transform:rotate(-2deg)}.gallery--devices .gallery-shot--1:hover{transform:rotate(-2deg) translateY(-3px)}.gallery--devices .gallery-shot--2{right:4%;top:22%;width:24%;z-index:2;border-radius:4px;border:4px solid #fffefa;box-shadow:0 14px 26px -10px #1c322b80}.gallery--devices .gallery-shot--phone{border-radius:13px;border-color:#243c34}.gallery--devices .gallery-shot--2 .gallery-image-wrap{aspect-ratio:auto}.gallery--devices .gallery-shot--2 img{height:auto}.gallery--devices .gallery-shot--2 .gallery-shot-caption{font-size:8px;padding:5px 6px;min-height:26px}.gallery--devices .gallery-shot--3{left:8%;bottom:5%;width:48%;z-index:1;transform:rotate(1.5deg)}.gallery--devices .gallery-shot--3 .gallery-image-wrap{aspect-ratio:2.8}.gallery--devices .gallery-shot--3:hover{transform:rotate(1.5deg) translateY(-3px)}.gallery--phones .gallery-stage{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding:22px 17px 14px;align-items:start}.gallery--phones .gallery-shot{grid-column:auto;border-radius:5px;border:0}.gallery--phones .gallery-shot--2{margin-top:24px}.gallery--phones .gallery-shot--3{margin-top:8px}.gallery--phones .gallery-image-wrap{aspect-ratio:auto}.gallery--phones .gallery-image-wrap img{height:auto}.gallery--phones .gallery-shot-caption{font-size:8px;padding:6px 5px;min-height:34px;justify-content:center;text-align:center}.gallery--phones .gallery-shot-caption svg{display:none}.gallery--duo .gallery-stage{grid-template-columns:1fr 1fr;padding:23px 18px;gap:14px;align-items:center}.gallery--duo .gallery-shot{grid-column:auto;transform:rotate(-2deg)}.gallery--duo .gallery-shot--2{transform:rotate(2deg);margin-top:25px}.gallery--duo .gallery-shot:hover{transform:rotate(0) translateY(-3px)}.gallery--duo .gallery-image-wrap{aspect-ratio:.84}.gallery--duo .gallery-shot--3{grid-column:1/-1;transform:none;margin-top:0}.gallery--duo .gallery-shot--3 .gallery-image-wrap{aspect-ratio:3}.gallery--single .gallery-stage{display:block;padding:22px}.gallery--single .gallery-shot{width:100%}.gallery--single .gallery-image-wrap{aspect-ratio:1.45}.gallery--pair .gallery-stage{display:block;aspect-ratio:1.3;padding:0;overflow:hidden}.gallery--pair .gallery-shot{position:absolute;left:4%;top:5%;width:87%;transform:rotate(-1.5deg)}.gallery--pair .gallery-shot--2{left:auto;right:4%;top:auto;bottom:5%;width:68%;transform:rotate(2deg)}.gallery--pair .gallery-shot:hover{transform:rotate(0) translateY(-3px)}.gallery--pair .gallery-shot--2 .gallery-image-wrap{aspect-ratio:1.9}.gallery--app .gallery-stage{display:grid;grid-template-columns:1fr 2fr;padding:26px;align-items:center;gap:25px}.gallery--app .gallery-shot--1{grid-column:2;grid-row:1;transform:rotate(1.5deg)}.gallery--app .gallery-shot--2{grid-column:1;grid-row:1;border:0;background:transparent;box-shadow:none}.gallery--app .gallery-image-wrap{aspect-ratio:1;background:transparent}.gallery--app .gallery-shot--2 .gallery-shot-caption{justify-content:center;background:none;text-align:center}.gallery--app .gallery-shot--2 .gallery-shot-caption svg{display:none}.gallery-shot--compact .gallery-image-wrap{aspect-ratio:3.9}.image-dialog.has-gallery{width:min(1240px,calc(100% - 40px));max-height:94dvh;padding:20px 24px}.gallery-dialog-content{display:flex;flex-direction:column;gap:10px;min-width:0}.gallery-viewer-image{width:100%;height:56dvh;object-fit:contain;background:#e8ece6}.gallery-viewer-caption{display:flex;justify-content:space-between;gap:12px;font-size:12px;line-height:1.6}.gallery-viewer-caption>span{font-size:10px;color:#6d7f70;white-space:nowrap}.gallery-navigation{display:flex;align-items:center;gap:12px;justify-content:center}.gallery-navigation>button{width:44px;height:44px;flex:none;background:#e9eee5;border-radius:50%;display:grid;place-items:center}.gallery-navigation>button:disabled{opacity:.3;cursor:default}.gallery-thumbnails{display:flex;gap:8px;overflow-x:auto;overscroll-behavior-x:contain;max-width:100%;padding:5px}.gallery-thumbnails>button{border:2px solid transparent;background:#e7ebe2;flex:0 0 76px;height:50px;padding:2px;border-radius:3px;opacity:.6}.gallery-thumbnails>button[aria-current=true]{border-color:var(--blue);opacity:1}.gallery-thumbnails img{width:100%;height:100%;object-fit:contain}.gallery-count{font:10px ui-monospace,monospace;color:#7b8779;text-align:center}@media(min-width:761px){.project:has(.project-gallery){grid-template-columns:minmax(0,4.3fr) minmax(0,7.7fr);gap:42px}.project:has(.project-gallery) .project-copy h2{font-size:clamp(29px,3vw,41px)}.project-haoyu:has(.project-gallery) .project-copy h2{font-size:47px}}@media(max-width:1100px){.gallery-stage{padding:14px;gap:10px}.gallery-shot-caption{font-size:8px;padding:6px 8px;min-height:29px}.gallery-heading{font-size:10px}.gallery-footer{font-size:8px}.project:has(.project-gallery){gap:26px}.gallery--phones .gallery-stage{gap:9px;padding:17px 12px 12px}.gallery--phones .gallery-shot{border-width:2px}}@media(max-width:760px){.gallery-heading{font-size:10px;padding-bottom:10px}.gallery-stage{padding:13px;gap:10px}.gallery-shot-caption{font-size:9px;min-height:32px}.gallery-footer{font-size:9px;padding-top:6px;gap:8px}.gallery-footer>span{max-width:70%}.gallery-footer>button{font-size:10px;min-height:40px}.gallery--devices .gallery-stage{aspect-ratio:1.35}.gallery--devices .gallery-shot--2{border-width:3px;top:25%;width:25%}.gallery--devices .gallery-shot--3{bottom:5%;width:49%}.gallery--devices .gallery-shot--2 .gallery-shot-caption{font-size:7px;padding:4px}.gallery--phones .gallery-stage{gap:8px;padding:16px 10px 10px}.gallery--phones .gallery-shot-caption{font-size:7px;min-height:29px;padding:5px 3px}.gallery--duo .gallery-stage{padding:18px 12px;gap:10px}.gallery--single .gallery-stage{padding:13px}.image-dialog.has-gallery{width:calc(100% - 16px);padding:15px;max-height:94dvh}.gallery-viewer-image{height:48dvh}.gallery-viewer-caption{font-size:11px}.gallery-viewer-caption>span{font-size:9px}.gallery-navigation{gap:6px}.gallery-thumbnails>button{flex-basis:55px;height:42px}.gallery-thumbnails{gap:5px}.gallery-navigation>button{width:38px;height:38px}.gallery-count{font-size:9px}}@media(prefers-reduced-motion:reduce){.gallery-shot{transition:none}}@media(max-width:760px){.gallery--devices .gallery-stage{aspect-ratio:1.12}.gallery--devices .gallery-shot--2{top:20%}.gallery--app .gallery-stage{padding:18px;gap:15px}.gallery-shot-caption small{font-size:7px;margin-left:4px}}.gallery-tone--signal{--gallery-bg:#e6e9e2;--gallery-ink:#202322}.analytics-settings-link{background:none;padding:8px 0;min-height:44px;color:inherit;font-size:inherit;text-decoration:underline;text-underline-offset:4px;text-decoration-color:#b2beaa}.analytics-settings-link:hover{color:var(--ink)}.analytics-settings-dialog{width:min(510px,calc(100% - 32px));font-size:13px;line-height:1.9}.analytics-settings-dialog>p{color:#617360;margin-bottom:14px}.analytics-choice{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:17px 0;margin-top:10px;border-block:1px solid #d9e1d3}.analytics-choice>span{font-size:12px;color:#3b5c49}.analytics-choice>button{border-radius:5px;background:#2e6957;color:#fff;padding:10px 15px;min-height:44px;white-space:nowrap;font-size:12px}.analytics-choice>button:disabled{background:#e0e7d9;color:#7b8972;cursor:default}.analytics-settings-dialog>.analytics-settings-note{font-size:11px;margin-top:14px;margin-bottom:0;color:#7c8974}@media(max-width:480px){.analytics-choice{gap:12px}.analytics-choice>span{font-size:11px}.analytics-settings-dialog .dialog-heading h2{font-size:24px}}@font-face{font-family:"Portfolio Serif";font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/portfolio-serif-0.woff2) format("truetype")}@font-face{font-family:"Portfolio Serif";font-style:normal;font-weight:900;font-display:swap;src:url(/fonts/portfolio-serif-1.woff2) format("truetype")}@font-face{font-family:Portfolio Sans;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/portfolio-sans-0.woff2) format("truetype")}@font-face{font-family:Portfolio Sans;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/portfolio-sans-1.woff2) format("truetype")}:root{--paper:#faf8f2;--white:#fffefa;--ink:#162a36;--muted:#68716e;--line:#dddeda;--blue:#2053b1;--green:#2e6957;--serif:"Portfolio Serif","Songti SC",serif;--sans:"Portfolio Sans","PingFang SC",sans-serif;font-family:var(--sans);font-synthesis:none;color:var(--ink);background:var(--paper)}*{box-sizing:border-box}html{scroll-behavior:auto;scroll-padding-top:32px}body{margin:0;min-width:320px;-webkit-font-smoothing:antialiased}button,a{-webkit-tap-highlight-color:transparent;touch-action:manipulation}button,input,textarea{font:inherit}button{cursor:pointer;border:0;color:inherit}a{color:inherit;text-decoration:none}img{max-width:100%;display:block}svg{flex:none;vertical-align:middle}h1,h2,h3,p,figure,ol{margin:0}button:focus-visible,a:focus-visible,textarea:focus-visible{outline:3px solid var(--blue);outline-offset:5px}.page-width{width:min(1264px,calc(100% - 112px));margin-inline:auto}.skip-link{position:fixed;top:12px;left:12px;z-index:100;padding:12px 18px;background:#fff;transform:translateY(-180%)}.skip-link:focus{transform:none}.site-header{height:92px;border-bottom:1px solid var(--line)}.header-inner{height:100%;width:min(1264px,calc(100% - 112px));margin:auto;display:flex;align-items:center;justify-content:space-between}.site-brand{font-family:var(--serif);font-weight:900;font-size:26px;letter-spacing:-1.2px;display:flex;gap:18px;align-items:baseline}.site-brand span{font:italic 18px Georgia,serif;letter-spacing:-.3px;color:var(--blue)}.header-links{display:flex;align-items:center;gap:30px;font-size:13px}.header-links a{display:flex;gap:8px;align-items:center;min-height:44px}.header-links a span{font:10px ui-monospace,monospace;color:#818b80;align-self:flex-start;margin-top:9px}.header-links a:hover{color:var(--blue)}.intro{padding-top:34px}.intro-topline{display:flex;justify-content:space-between;align-items:center;font-size:11px;letter-spacing:.12em}.intro-topline>span:first-child{display:flex;align-items:center;gap:10px;letter-spacing:.09em;color:var(--green)}.intro-topline i{height:6px;width:6px;border-radius:50%;background:var(--green)}.intro-topline>span:last-child{color:#828983;font:10px ui-monospace,monospace;letter-spacing:.1em}.intro-grid{display:grid;grid-template-columns:minmax(0,max-content) minmax(0,320px);justify-content:center;align-items:center;gap:56px;max-width:920px;margin-inline:auto;padding:48px 0 58px}.intro-copy{min-width:0}.intro-greeting{font-size:14px;color:var(--green);letter-spacing:.08em;margin-bottom:24px}.intro h1{font-family:var(--serif);font-size:clamp(48px,6.3vw,84px);font-weight:900;line-height:1.28;letter-spacing:-.065em;width:max-content;max-width:100%}.intro-line{display:block;white-space:nowrap;color:var(--ink)}.intro-line--accent{color:var(--blue)}.intro-signoff{display:flex;align-items:center;gap:24px;font:700 22px/1.6 var(--serif);letter-spacing:.05em;margin-top:30px}.intro-rule{width:60px;height:1px;background:#9cae9e}.intro-portrait{width:100%;max-width:320px;justify-self:start;padding:10px 10px 14px;background:#fffefa;border:1px solid #e0e1d8;transform:rotate(2deg);box-shadow:0 14px 30px -26px #223c3677}.intro-portrait img{width:100%;height:auto;aspect-ratio:1;object-fit:cover}.intro-portrait figcaption{display:flex;justify-content:space-between;gap:10px;padding-top:13px;color:#7d897c;font:8px ui-monospace,monospace;letter-spacing:.08em}.projects{display:flex;flex-direction:column;gap:26px}.project{min-width:0;scroll-margin-top:30px;border:1px solid var(--line);background:var(--white);overflow:hidden;position:relative;display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);align-items:center;padding:46px 42px;gap:46px;min-height:390px}.project-copy{min-width:0}.project-eyebrow{display:flex;align-items:center;gap:13px;color:var(--green);font-size:11px;letter-spacing:.035em;margin-bottom:20px}.project-number{font:11px ui-monospace,monospace;color:#869182;border-right:1px solid #d8dbd0;padding-right:12px}.project-copy h2{font-family:var(--serif);font-size:clamp(29px,3.15vw,43px);line-height:1.28;font-weight:900;letter-spacing:-.045em;text-wrap:balance;overflow-wrap:anywhere}.project-english{font:italic .7em Georgia,serif;color:#708178;display:block;letter-spacing:-.035em;margin-top:5px}.project-headline{font-family:var(--serif);font-size:20px;font-weight:700;line-height:1.65;margin-top:23px;letter-spacing:-.02em;text-wrap:pretty}.project-description{font-size:13px;line-height:1.95;color:var(--muted);margin-top:12px;max-width:410px;text-wrap:pretty}.project-status{margin-top:24px;display:flex;align-items:center;gap:7px;font-size:11px;color:#778371;line-height:1.7}.project-status>span{height:4px;width:4px;flex:none;background:#71907c;border-radius:50%}.project-status.is-paused{color:#997756}.project-status.is-paused>span{background:#b1956e}.project-contact{display:inline-flex;align-items:center;gap:10px;margin-top:23px;min-height:44px;font-size:12px;color:var(--green);border-bottom:1px solid #9aaf9b;line-height:1.7}.project-contact:hover{color:var(--blue);border-color:var(--blue)}.github-stars{display:inline-flex;align-items:center;gap:6px;font:11px/1.5 var(--sans);color:#7b682b;border:1px solid #d9d8c3;border-radius:3px;background:#fffdf1;padding:7px 10px;margin-top:13px}.github-stars strong{font-weight:600}.project-actions{display:flex;gap:18px;align-items:center;flex-wrap:wrap;margin-top:20px}.project-action{display:inline-flex;align-items:center;justify-content:center;gap:9px;min-height:44px;font-size:12px;white-space:nowrap;border-radius:5px;transition:background .15s,transform .15s}.project-action--primary{background:var(--blue);color:#fff;padding:11px 17px}.project-action--primary:hover{background:#173f88;transform:translateY(-1px)}.project-action--secondary{color:var(--ink);padding-block:8px}.project-action--secondary:hover{color:var(--blue)}.project-action--secondary>svg:last-child{margin-left:2px}.project-media{position:relative;min-width:0;width:100%}.media-open{display:block;width:100%;padding:0;position:relative;background:#f2f2ed;border:1px solid #e0e2da;overflow:hidden;text-align:initial}.product-image{width:100%;height:auto;object-fit:contain;transition:transform .35s ease}.media-open:hover .product-image{transform:scale(1.012)}.zoom-hint{position:absolute;right:11px;bottom:11px;display:flex;align-items:center;gap:5px;font-size:10px;color:#2b483d;background:#fffffff0;padding:7px 9px;border:1px solid #a5b6a645;border-radius:4px;opacity:0;transform:translateY(3px);transition:.18s}.media-open:hover .zoom-hint,.media-open:focus-visible .zoom-hint{opacity:1;transform:none}.project-media figcaption{display:flex;justify-content:space-between;gap:15px;margin-top:11px;font-size:9px;color:#87917f;line-height:1.6}.media-corner{font:8px ui-monospace,monospace;letter-spacing:.04em;white-space:nowrap}.html-frame{position:relative;width:100%;aspect-ratio:1100/660;overflow:hidden;--preview-scale:.5}.html-frame .product-html{position:absolute;top:0;right:0;bottom:0;left:0;width:1100px;height:660px;border:0;pointer-events:none;transform-origin:0 0;transform:scale(var(--preview-scale));background:#f4f1e7}.parrot-companion{position:absolute;right:8%;top:-50px;width:112px;height:112px;pointer-events:none;transform-origin:57% 88%;animation:parrot-breathe 6.4s ease-in-out infinite}.parrot-companion img{width:100%;height:auto;filter:drop-shadow(0 5px 4px #102e2012)}@keyframes parrot-breathe{0%,to{transform:translateY(0) rotate(-1deg)}45%{transform:translateY(-3px) rotate(1.5deg)}70%{transform:translateY(-1px) rotate(0)}}.project-haoyu{background:#f3f6f9;border-color:#d7dfe7}.project-haoyu .media-open{background:#fff;border-color:#dde3e8;border-radius:7px;box-shadow:0 17px 35px -20px #31445944}.project-haoyu .project-copy h2{font-size:49px}.project-haoyu .project-english{display:inline;margin-left:14px;color:#6d7e9b;font-size:.57em}.project-haoyu .project-eyebrow{color:var(--blue)}.project-parrot-note{background:#f1f4eb;border-color:#d9dfce;min-height:430px}.project-parrot-note .media-open{border-radius:7px;box-shadow:0 20px 35px -20px #24362370}.project-document{border-color:#e2ddca}.project-too-long-to-read{background:#fcfaf0}.project-too-long-to-read .project-action--primary{background:#edd365;color:#342e15}.project-always-yes{background:#f0f4fb}.project-always-yes .media-open{border:0;background:#e6edf9;display:grid;place-items:center;aspect-ratio:1100/660}.project-always-yes .product-image{width:42%;aspect-ratio:1;filter:drop-shadow(0 15px 17px #1a388320)}.project-task-cost-estimator{background:#f4f6f2}.project-bencao{background:#f2eedf;border-color:#e0d9c1}.project-bencao .project-action--primary{background:#5e6541}.project-bencao .media-open{border-color:#d9d3be;box-shadow:0 20px 32px -22px #53452677}.book-numbers{display:flex;gap:34px;margin-top:25px;font-size:10px;color:#8d886d}.book-numbers strong{font:34px Georgia,serif;color:#686743;display:block;margin-bottom:4px}.project-earth-online{background:#eef2ee}.project-earth-online .media-open{border-color:#d0d9d0}.project-geo{background:#f5f6f4}.project-fishing{background:#eef3ef;border-color:#d8e1d8}.media-fishing .media-open{display:flex;align-items:flex-start;justify-content:center;gap:18px;padding:20px 26px;background:#dce9dd;border-color:#dce9dd;border-radius:5px;max-height:445px;overflow:hidden}.media-fishing .product-image,.media-fishing .fishing-map{width:calc(50% - 9px);height:auto;box-shadow:0 12px 18px -13px #183c3360;border-radius:7px}.media-fishing .fishing-map{margin-top:36px}.project-xiaozhong{background:#fbf5eb}.project-xiaozhong .project-action--primary{background:#9a7143}.project-yanhuo{background:#f2f4ed}.project-desktop-pet{background:#f5f1e9}.project-aunt-panic .project-action--primary{background:#ad4537}.project-transformer{background:#eef1f5;border-color:#d5dce5}.project-transformer .media-open{border-color:#c6d0dc}.project-skyhome{background:#ecece1;border-color:#d4d6c5;padding-block:58px}.project-skyhome .project-headline{font-size:21px}.project-skyhome .project-action--primary{background:#395c49}.project-skyhome .project-number{color:#5a7357}.project-skyhome .media-open{border-color:#d5d5c4;box-shadow:0 20px 30px -24px #21322577}.reading-preview{background:#fffef9;width:100%;padding:24px 31px 0;border:1px solid #e7e3d3;box-shadow:6px 7px #f2edda,7px 8px #e6dec5;transform:rotate(-1.2deg)}.document-top{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #e6e4d8;padding-bottom:17px;color:#818474;font:10px ui-monospace,monospace}.document-label{color:#9a893f;font-size:10px;margin-top:23px;letter-spacing:.1em}.reading-preview h3{font:900 28px/1.4 var(--serif);letter-spacing:-.035em;margin-top:10px}.reading-preview ol{list-style:none;padding:20px 0 22px}.reading-preview li{display:flex;align-items:center;gap:15px;font-size:13px;padding:9px 0}.reading-preview li span{font:11px ui-monospace,monospace;color:#ad9241}.document-bottom{padding:13px 0;border-top:1px solid #e6e4d8;font:8px ui-monospace,monospace;letter-spacing:.06em;color:#8f9484}.command-preview{background:#182c2a;color:#d3e0d0;border:1px solid #284540;padding:26px;min-width:0}.terminal-top{display:flex;justify-content:space-between;font:10px ui-monospace,monospace;color:#92ad9b;border-bottom:1px solid #355047;padding-bottom:14px}.command-preview pre{font:12px/1.9 ui-monospace,monospace;margin:23px 0;white-space:pre-wrap;overflow-wrap:anywhere}.terminal-comment{color:#96ae9a}.terminal-prompt{color:#e0c474}.terminal-flag{color:#9ebdac}.terminal-fields{display:flex;flex-wrap:wrap;gap:12px 18px;font-size:10px;color:#b7c9ae;padding-top:17px;border-top:1px solid #355047}.command-preview>p{font-size:9px;color:#98b4a2;margin-top:15px}.about-section{margin-top:80px;padding:74px 0;background:#edf1eb;border-block:1px solid #d7dfd4;scroll-margin-top:0}.about-inner{display:grid;grid-template-columns:330px minmax(0,1fr);gap:84px;align-items:center;max-width:1050px}.about-portrait{padding:11px 11px 16px;background:#fffdfa;box-shadow:0 18px 34px -24px #203a3055;transform:rotate(-2deg)}.about-portrait img{width:100%;height:auto}.about-portrait>span{display:block;font:8px ui-monospace,monospace;letter-spacing:.08em;color:#929889;text-align:center;padding-top:13px}.about-eyebrow{font-size:11px;color:#73846e;letter-spacing:.1em;margin-bottom:18px}.about-copy h2{font:900 49px/1.2 var(--serif);letter-spacing:-.06em}.about-copy h2 span{font:italic 26px Georgia,serif;letter-spacing:-.03em;color:#59776b;margin-left:20px}.about-motto{font:700 27px/1.6 var(--serif);letter-spacing:-.04em;margin-top:16px}.about-description{font-size:13px;color:#6f806f;margin-top:7px;line-height:1.8}.social-links{display:grid;grid-template-columns:1fr;gap:16px;margin-top:26px}.social-link{display:flex;align-items:center;gap:18px}.social-qr{width:92px;flex:none;padding:5px;background:#fff;border:1px solid #d5ded3;border-radius:0}.social-qr img{width:100%;height:auto;image-rendering:auto}.social-link>a:not(.social-qr)>span,.social-link>div>span{font-size:12px;display:flex;align-items:center;gap:12px}.social-link small{display:block;font:10px/1.6 var(--sans);letter-spacing:.05em;color:#6f7f69;margin-top:8px}.site-footer{display:flex;flex-wrap:wrap;column-gap:16px;justify-content:space-between;align-items:center;padding-block:24px;font-size:10px;color:#7e8a79}.site-footer>a{display:flex;align-items:center;gap:10px;min-height:44px;color:var(--ink)}.portfolio-dialog{border:1px solid #d9ded3;border-radius:9px;background:var(--paper);color:var(--ink);padding:30px;max-height:88dvh;box-shadow:0 20px 100px #0d291d33}.portfolio-dialog::backdrop{background:#132c28a8;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.skill-dialog{width:min(850px,calc(100% - 36px))}.dialog-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:23px}.dialog-heading>div>p{font:10px/1.6 var(--sans);color:#7d8f7d;letter-spacing:.08em;margin-bottom:8px}.dialog-heading h2{font:900 28px/1.4 var(--serif);letter-spacing:-.04em}.icon-button{width:44px;height:44px;flex:none;display:grid;place-items:center;background:none;border-radius:50%}.icon-button:hover{background:#dce6da}.skill-instruction{font-size:13px;line-height:1.85;color:#758473;margin-bottom:19px}.skill-dialog textarea{width:100%;height:42dvh;resize:vertical;border:1px solid #ced8c9;border-radius:5px;background:#fffef8;color:#324d3d;padding:18px;font:12px/1.8 ui-monospace,monospace}.skill-actions{display:flex;align-items:center;flex-wrap:wrap;gap:12px 25px;margin-top:20px}.image-dialog{width:min(1250px,calc(100% - 40px));padding:22px}.image-dialog .dialog-heading{margin-bottom:16px}.image-dialog .dialog-heading h2{font-size:23px}.expanded-media{width:100%;height:auto;max-height:70dvh;object-fit:contain;background:#e9eee6}.toast{position:fixed;bottom:25px;left:50%;z-index:100;transform:translate(-50%,12px);max-width:calc(100% - 32px);width:max-content;background:#1c382d;color:#fff;border-radius:5px;box-shadow:0 5px 20px #0002;padding:13px 18px;font-size:12px;opacity:0;pointer-events:none;transition:.2s}.toast.visible{opacity:1;transform:translate(-50%)}@media(max-width:1100px){.page-width,.header-inner{width:calc(100% - 64px)}.intro-grid{grid-template-columns:minmax(0,max-content) minmax(0,290px);gap:44px;padding-block:42px 50px}.intro h1{font-size:clamp(50px,6.6vw,72px)}.intro-greeting{margin-bottom:17px}.intro-signoff{font-size:20px;margin-top:22px}.project{padding:34px 29px;gap:32px;min-height:340px}.project-copy h2{font-size:33px}.project-haoyu .project-copy h2{font-size:42px}.project-headline{font-size:18px;margin-top:19px}.project-description{font-size:12px}.project-actions{gap:12px}.project-action{font-size:11px}.parrot-companion{width:94px;height:94px;top:-43px}.reading-preview{padding:20px 23px 0}.reading-preview h3{font-size:25px}.about-inner{gap:55px;grid-template-columns:280px 1fr}.about-motto{font-size:24px}.media-fishing .media-open{padding:16px;gap:12px;max-height:380px}.media-fishing .product-image,.media-fishing .fishing-map{width:calc(50% - 6px)}.project-skyhome{padding-block:43px}}@media(max-width:760px){html{scroll-padding-top:20px}.page-width,.header-inner{width:calc(100% - 40px)}.site-header{height:76px}.site-brand{font-size:22px;gap:10px}.site-brand span{font-size:15px}.header-links{gap:18px;font-size:11px}.header-links a span{font-size:9px}.header-links a>svg{display:none}.intro{padding-top:27px}.intro-topline{font-size:10px}.intro-topline>span:last-child{display:none}.intro-grid{grid-template-columns:minmax(0,max-content) minmax(0,clamp(122px,28vw,195px));gap:clamp(18px,4vw,30px);padding:35px 0 39px}.intro-greeting{font-size:11px;letter-spacing:0;margin-bottom:15px}.intro h1{font-size:clamp(32px,6.5vw,49px);line-height:1.36;letter-spacing:-.065em}.intro-signoff{font-size:15px;letter-spacing:.02em;margin-top:18px;gap:12px}.intro-rule{width:23px}.intro-portrait{padding:5px 5px 8px}.intro-portrait figcaption{padding-top:8px;font-size:6px;letter-spacing:0;justify-content:center}.intro-portrait figcaption>span:last-child{display:none}.projects{gap:18px}.project{display:flex;flex-direction:column;align-items:stretch;padding:27px 22px;gap:27px;min-height:0}.project-copy h2{font-size:32px;line-height:1.28}.project-haoyu .project-copy h2{font-size:40px}.project-eyebrow{font-size:10px;margin-bottom:15px}.project-number{font-size:10px}.project-headline{font-size:19px;margin-top:18px}.project-description{font-size:13px;line-height:1.85;max-width:none;margin-top:10px}.project-status{font-size:11px;margin-top:18px}.project-contact{font-size:12px;margin-top:17px}.project-actions{gap:10px 18px;margin-top:18px}.project-action{font-size:12px;min-height:44px}.project-action--primary{padding-inline:14px}.project-media figcaption{margin-top:9px;font-size:9px}.media-corner{display:none}.zoom-hint{opacity:1;transform:none;right:7px;bottom:7px;padding:5px 7px;font-size:9px}.parrot-companion{width:98px;height:98px;top:-48px;right:2%}.project-parrot-note .project-media{margin-top:20px}.reading-preview{transform:rotate(-.7deg);padding:20px 23px 0}.reading-preview h3{font-size:27px}.reading-preview ol{padding-block:15px}.reading-preview li{font-size:12px}.document-top{font-size:8px}.document-bottom{font-size:7px}.command-preview{padding:19px}.command-preview pre{font-size:11px}.terminal-fields{font-size:9px;gap:13px}.book-numbers{margin-top:20px;gap:30px}.book-numbers strong{font-size:29px}.media-fishing .media-open{padding:14px 12px;gap:10px;max-height:360px}.media-fishing .product-image,.media-fishing .fishing-map{width:calc(50% - 5px);border-radius:4px}.media-fishing .fishing-map{margin-top:24px}.project-skyhome{padding-block:34px}.project-skyhome .project-headline{font-size:19px}.about-section{margin-top:50px;padding:48px 0 42px}.about-inner{display:flex;flex-direction:column;align-items:flex-start;gap:38px}.about-portrait{width:230px;align-self:center}.about-portrait>span{font-size:7px}.about-copy{width:100%}.about-eyebrow{font-size:10px;margin-bottom:15px}.about-copy h2{font-size:43px}.about-copy h2 span{font-size:24px;margin-left:16px}.about-motto{font-size:24px;margin-top:13px}.about-description{font-size:12px}.social-links{gap:18px;margin-top:24px}.social-qr{width:94px}.site-footer{padding-block:22px;flex-wrap:wrap;gap:7px;font-size:9px}.site-footer>span:nth-child(2){display:none}.portfolio-dialog{padding:23px 20px;max-height:88dvh}.dialog-heading h2{font-size:25px}.dialog-heading{gap:12px;margin-bottom:23px}.skill-dialog textarea{font-size:11px;padding:12px;height:39dvh}.skill-actions{gap:10px 18px}.image-dialog{width:calc(100% - 20px);padding:15px}.image-dialog .dialog-heading h2{font-size:20px}.expanded-media{max-height:70dvh}.toast{font-size:11px;bottom:20px}}@media(max-width:410px){.page-width,.header-inner{width:calc(100% - 32px)}.site-brand{font-size:21px}.site-brand span{display:none}.header-links{gap:16px}.intro-grid{grid-template-columns:minmax(0,max-content) minmax(0,115px);gap:17px}.intro h1{font-size:clamp(27px,8.5vw,33px)}.intro-signoff{font-size:14px;gap:9px}.intro-rule{width:15px}.project{padding:25px 20px}.project-copy h2{font-size:29px}.project-headline{font-size:18px}.social-link{gap:15px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}}.message-launcher{position:fixed;z-index:35;right:max(14px,calc((100vw - 1264px)/2 - 100px));top:50%;display:flex;flex-direction:column;align-items:center;gap:3px;width:92px;padding:8px 8px 13px;background:#fffefa;border:1px solid #d5dfd2;border-radius:18px;box-shadow:0 8px 28px #203c291b;color:#2e6957;font-size:12px;font-weight:500;letter-spacing:.06em;opacity:0;visibility:hidden;pointer-events:none;transform:translate(10px,-50%);transition:opacity .2s ease,transform .2s ease,visibility .2s}.message-launcher.is-visible{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(-50%)}.message-launcher:hover{border-color:#a0b59b;background:#fffffc;color:var(--blue)}.message-launcher img{width:64px;height:64px;object-fit:contain}.message-mobile-clearance{display:none}.message-dialog{width:min(510px,calc(100% - 36px));max-height:calc(100dvh - 48px);padding:28px;border-radius:15px;background:#fffef9;overflow:auto;overscroll-behavior:contain}.message-dialog::backdrop{background:#19362d80;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.message-dialog-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.message-host{display:flex;align-items:center;gap:13px;min-width:0}.message-host>img{width:58px;height:58px;object-fit:contain;flex:none}.message-host>div>p{font-size:10px;color:#758572;letter-spacing:.08em;margin-bottom:6px}.message-host h2{font:900 27px/1.35 var(--serif);letter-spacing:-.04em}.message-dialog-heading>.icon-button{width:36px;height:36px;margin:-5px -7px 0 0}.message-privacy{display:flex;align-items:center;gap:7px;color:#6a8065;font-size:11px;line-height:1.7;margin-top:18px;padding-bottom:20px;border-bottom:1px solid #e0e6d9}.message-privacy>span{width:5px;height:5px;flex:none;border-radius:50%;background:#77966a}.message-form{padding-top:22px}.message-field+.message-field{margin-top:19px}.message-field>label{display:flex;align-items:baseline;gap:9px;font-size:13px;font-weight:600;margin-bottom:9px}.message-field>label>span{font-size:10px;font-weight:400;color:#869080}.message-field textarea,.message-field input{display:block;width:100%;border:1px solid #d7decf;border-radius:7px;background:#fafbf5;padding:13px 14px;color:var(--ink);font:13px/1.8 var(--sans);transition:border-color .15s,background .15s}.message-field textarea{min-height:156px;max-height:38dvh;resize:vertical}.message-field input{min-height:47px}.message-field textarea::placeholder,.message-field input::placeholder{color:#939b8b}.message-field textarea:focus,.message-field input:focus{border-color:#70916b;background:#fffffc;outline:2px solid #75977024;outline-offset:2px}.message-field textarea:disabled,.message-field input:disabled{opacity:.7;cursor:wait}.message-count{display:block;text-align:right;color:#89917f;font:10px/1.6 var(--sans);margin-top:6px}.message-contact-help{display:flex;justify-content:space-between;gap:12px;font-size:10px;line-height:1.65;color:#87917e;margin-top:7px}.message-contact-help>span:last-child{flex:none}.message-count.is-invalid,.message-contact-help>.is-invalid{color:#a04d39}.message-error{padding:11px 13px;margin-top:17px;background:#fbf0e9;border:1px solid #ecd9ca;border-radius:6px;color:#94543e;font-size:12px;line-height:1.75;overflow-wrap:anywhere}.message-form-footer{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-top:25px}.message-footer-note{font-size:11px;color:#86907d}.message-submit{display:inline-flex;justify-content:center;align-items:center;gap:9px;min-height:44px;padding:11px 17px;background:#2e6957;color:#fff;border:1px solid #2e6957;border-radius:6px;font-size:12px;white-space:nowrap;transition:background .15s}.message-submit:hover:not(:disabled){background:#215642}.message-submit:disabled{background:#e5eadd;border-color:#e0e5d8;color:#8e9b84;cursor:not-allowed}.message-form[aria-busy=true] .message-submit:disabled{color:#476b49;background:#edf1e8;border-color:#d8e3d0;cursor:wait}.message-spinner{width:13px;height:13px;border:1.5px solid #78986a55;border-top-color:#527345;border-radius:50%;animation:message-spin .8s linear infinite}@keyframes message-spin{to{transform:rotate(360deg)}}.message-screen-reader{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.message-success{text-align:center;padding:32px 0 10px}.message-success-mark{display:inline-grid;place-items:center;width:53px;height:53px;border-radius:50%;color:#477747;background:#eef3e6;border:1px solid #dbe6ce;margin-bottom:20px}.message-success h3{font:700 23px/1.5 var(--serif);letter-spacing:-.03em;outline:none}.message-success>p{font-size:12px;line-height:1.9;color:#78866f;margin-top:12px}.message-receipt{display:block;font:9px/1.8 var(--sans);color:#929b86;margin-top:17px;overflow-wrap:anywhere}.message-success-actions{display:flex;justify-content:center;align-items:center;gap:20px;margin-top:27px}.message-another{background:none;min-height:44px;color:#6c8062;font-size:12px;padding:8px 0}.message-another:hover{color:var(--blue)}@media(max-width:760px){.message-launcher{top:auto;bottom:max(18px,calc(env(safe-area-inset-bottom) + 12px));right:14px;flex-direction:row;gap:6px;width:auto;min-height:51px;padding:5px 15px 5px 7px;border-radius:28px;font-size:12px;transform:translateY(8px)}.message-launcher.is-visible{transform:translateY(0)}.message-launcher img{width:40px;height:40px}.message-mobile-clearance{display:block;height:calc(72px + env(safe-area-inset-bottom))}.message-dialog{width:calc(100% - 24px);max-height:calc(100dvh - 24px);padding:22px 20px;border-radius:13px}.message-host{gap:10px}.message-host>img{width:51px;height:51px}.message-host h2{font-size:25px}.message-host>div>p{font-size:9px}.message-privacy{font-size:10px;margin-top:16px;padding-bottom:17px}.message-form{padding-top:18px}.message-field textarea,.message-field input{font-size:16px;padding:11px 12px}.message-field textarea{min-height:142px;max-height:34dvh}.message-field+.message-field{margin-top:15px}.message-field input{min-height:46px}.message-field input::placeholder{font-size:13px}.message-field textarea::placeholder{font-size:14px}.message-contact-help{font-size:9px;gap:9px}.message-form-footer{margin-top:20px}.message-footer-note{font-size:10px}.message-success h3{font-size:22px}.message-success{padding-top:27px}}.language-select{display:flex;align-items:center;gap:6px;min-width:0;font:11px/1.4 var(--sans);color:var(--ink)}.language-select>span{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.language-select select{font:inherit;color:inherit;background:#fffefa;border:1px solid #dce2d5;border-radius:5px;padding:7px;max-width:210px;min-height:36px}.language-select select:focus-visible{outline:2px solid #2e6957;outline-offset:3px}.header-inner{flex-wrap:wrap;gap:14px}.header-links{flex-wrap:wrap;justify-content:flex-end;gap:16px}.project-copy,.intro-copy,.about-copy,.gallery-shot-caption>span{min-width:0;overflow-wrap:anywhere}.project-action,.project-contact,.message-submit,.message-another{white-space:normal;max-width:100%;text-align:left;overflow-wrap:anywhere}.project-action svg,.message-submit svg,.project-contact svg{flex-shrink:0}html:not([lang^=zh]) .intro-grid{grid-template-columns:minmax(0,620px) minmax(0,230px);gap:34px;max-width:920px}html:not([lang^=zh]) .intro-line{white-space:normal;overflow-wrap:anywhere}html:not([lang^=zh]) #intro-title{font-size:clamp(32px,4.2vw,60px);line-height:1.2}html[lang=ta] #intro-title{font-size:clamp(28px,3.2vw,48px);line-height:1.5}html[lang=ta] .project h2{line-height:1.6}.gallery-heading,.gallery-footer,.gallery-viewer-caption,.message-form-footer,.social-links{flex-wrap:wrap}.gallery-edition,.gallery-footer>button,.gallery-viewer-caption>span{white-space:normal}.gallery-footer>span{max-width:100%;flex:1 1 180px}.gallery-footer>button{flex:0 1 auto;text-align:left}.gallery-shot-caption{overflow-wrap:anywhere}@media(max-width:760px){.header-inner{gap:9px}.header-links{gap:12px}.language-select select{max-width:175px}.site-brand{font-size:15px}html:not([lang^=zh]) .intro-grid{grid-template-columns:minmax(0,1fr);gap:26px}html:not([lang^=zh]) .intro-portrait{width:min(65vw,230px);margin-inline:auto}html:not([lang^=zh]) .intro-copy{text-align:center}html:not([lang^=zh]) #intro-title{font-size:clamp(30px,7vw,48px)}.gallery-footer>span{max-width:100%}.message-footer-note{flex:1 1 120px}}.site-header{height:auto;min-height:92px}.header-inner{height:auto;min-height:92px;padding-block:16px}html:not([lang^=zh]) .site-brand{font-family:var(--sans);font-size:22px;letter-spacing:0}@media(max-width:760px){.site-header{min-height:0}.header-inner{min-height:76px;padding-block:12px}.header-links{width:100%;justify-content:flex-start}html:not([lang^=zh]) .site-brand{font-size:18px}.language-select select{max-width:175px}}.project-finder{margin-block:0 26px;color:var(--muted);font-size:13px;line-height:1.8}.project-finder summary{cursor:pointer;width:fit-content;padding-block:8px}.project-finder nav{display:flex;flex-wrap:wrap;gap:8px 22px;padding-block:10px}.project-finder a{color:inherit;text-decoration:underline;text-underline-offset:4px;overflow-wrap:anywhere}.project-finder a:focus-visible,.project-finder summary:focus-visible{outline:2px solid var(--blue);outline-offset:4px}.site-filing{flex-basis:100%;text-align:center}.site-filing a{display:inline-flex;align-items:center;min-height:44px;color:var(--ink);text-decoration:underline;text-underline-offset:3px}.site-filing a:focus-visible{outline:3px solid var(--blue);outline-offset:4px}
