:root{color-scheme:light;--bg:#f4f4f1;--surface:#fbfcf8;--ink:#212525;--muted:#6d736e;--line:#dcded7;--accent:#d5f47f;--accent-ink:#394b18;--mono:"SFMono-Regular",Consolas,"Liberation Mono",monospace;--body:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;--display:"Avenir Next","Helvetica Neue","Segoe UI",sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:32px}body{margin:0;color:var(--ink);background:var(--bg);font:14px/1.7 var(--body);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button,input,select{font:inherit;color:inherit}button,a,input,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{cursor:default}button{background:none}::selection{background:var(--accent);color:var(--ink)}[hidden]{display:none!important}:focus-visible{outline:2px solid #4e681e;outline-offset:4px}.page-shell{max-width:1440px;margin:auto;padding:0 clamp(24px,5.4vw,80px)}.skip-link{position:fixed;left:20px;top:-80px;background:var(--ink);color:var(--surface);padding:10px 18px;z-index:30}.skip-link:focus{top:16px}
.site-header{height:100px;display:flex;align-items:center;gap:68px;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:12px;font:600 25px/1 var(--display);letter-spacing:-1.2px}.brand-mark{display:grid;place-items:center;width:33px;height:37px;border-radius:8px;background:var(--ink);color:var(--accent);font-size:31px;letter-spacing:-2px;padding-right:2px;padding-bottom:3px;transform:rotate(-5deg);transition:transform .25s}.brand:hover .brand-mark{transform:rotate(0)}.site-header nav{display:flex;gap:34px;align-items:center;font-size:13px;color:var(--muted)}.site-header nav a{padding:12px 0}.site-header nav a:hover{color:var(--ink)}.site-header .nav-current{color:var(--ink);font-weight:600}.nav-current>span{font:10px/1 var(--mono);color:var(--muted);margin-left:6px;vertical-align:super}.header-note{display:flex;align-items:center;gap:8px;margin-left:auto;font-size:11px;color:var(--muted)}.header-note i{width:6px;height:6px;background:#809b51;border-radius:50%}
.intro{display:grid;grid-template-columns:1.35fr 1fr;gap:60px;align-items:end;padding:70px 0 64px}.eyebrow{margin:0 0 22px;display:flex;align-items:center;gap:8px;font:11px/1.5 var(--mono);letter-spacing:.04em;color:var(--muted)}.small-cross{color:var(--ink);font-size:17px}.intro h1{font-size:clamp(38px,4.1vw,62px);font-weight:500;line-height:1.35;letter-spacing:-.04em;margin:0}.title-emphasis{position:relative;white-space:nowrap;z-index:0}.title-emphasis svg{position:absolute;bottom:-2px;left:-3%;width:106%;height:12px;z-index:-1;stroke:var(--accent);stroke-width:9;stroke-linecap:round}.intro-aside{padding-bottom:5px;max-width:350px;justify-self:end}.intro-aside>p:first-child{font-size:19px;line-height:1.6;letter-spacing:.015em;margin:0 0 14px}.intro-detail{font-size:12px;line-height:1.9;color:var(--muted);margin:0 0 21px}.text-link{display:inline-flex;align-items:center;gap:28px;font-size:12px;line-height:1.8;border-bottom:1px solid #9da297;padding-bottom:4px}.text-link span{font-size:20px}.text-link:hover{border-color:var(--ink)}
.archive{scroll-margin-top:24px}.archive-heading{display:flex;justify-content:space-between;align-items:center;padding:24px 0 22px;border-top:1px solid var(--ink)}.archive-heading>div{display:flex;align-items:center;gap:14px}.section-index{font:11px/1.5 var(--mono);color:var(--muted)}h2{font-size:19px;font-weight:500;letter-spacing:.03em;margin:0}.archive-meta{font:10px/1.5 var(--mono);color:#7b8179;letter-spacing:.04em}.archive-meta span{margin-left:30px;color:var(--ink);font-size:17px}.archive-tools{display:flex;justify-content:space-between;gap:24px;align-items:center;min-height:52px}.categories{display:flex;align-items:center;flex-wrap:wrap;gap:5px}.category-button{border:1px solid transparent;border-radius:6px;padding:8px 15px;display:inline-flex;align-items:center;gap:10px;font-size:12px;color:var(--muted);line-height:1.8;transition:background .18s,border-color .18s,color .18s}.category-button>span{font:10px/1 var(--mono);opacity:.7}.category-button:hover{background:#e9ece3;color:var(--ink)}.category-button[aria-pressed=true]{background:var(--ink);color:#f6f8f0;border-color:var(--ink)}.category-button[aria-pressed=true]>span{color:var(--accent);opacity:1}.search-field{display:flex;align-items:center;gap:10px;width:248px;flex-shrink:0;padding:9px 11px;border:1px solid var(--line);border-radius:6px;background:#f8f9f4;cursor:text}.search-field svg{stroke:#8a9085;stroke-width:1.3;flex-shrink:0}.search-field:focus-within{border-color:#859768;box-shadow:0 0 0 2px #d5f47f55}.search-field input{border:0;outline:0;min-width:0;width:100%;background:none;font-size:12px}.search-field input::placeholder{color:#8a9085}.search-field input:focus-visible{outline:0}.search-field kbd{border:1px solid var(--line);padding:1px 5px;font:10px/1.6 var(--mono);border-radius:3px;color:#848a80}.archive-subbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:14px 0 19px;color:var(--muted);min-height:32px}.archive-subbar p{margin:0;font-size:11px}.view-controls{display:flex;align-items:center;gap:20px}.sort-label{display:flex;align-items:center;gap:10px;font-size:11px}.sort-label select{border:0;background:transparent;font-size:11px;cursor:pointer;padding:4px 20px 4px 0}.view-switch{display:flex;gap:2px;border-left:1px solid var(--line);padding-left:14px}.view-switch button{border:0;width:31px;height:31px;display:grid;place-items:center;border-radius:4px;color:#838a80}.view-switch button[aria-pressed=true]{background:#e2e6da;color:var(--ink)}.view-switch svg{stroke:currentColor;stroke-width:1.3}.view-switch button:hover{color:var(--ink)}
.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:36px 28px;align-items:start}.project-card{min-width:0;position:relative;animation:appear .24s ease both}.project-link{display:block;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--surface);transition:border-color .22s,box-shadow .22s}.project-link:hover{border-color:#a3aea0;box-shadow:0 8px 26px #272c2510}.project-cover{position:relative;aspect-ratio:1.65;overflow:hidden;background:#e7e4d8}.cover-stage{width:100%;height:100%;transition:transform .6s cubic-bezier(.22,.8,.24,1)}.project-cover img{display:block;width:100%;height:100%;object-fit:cover}.cover-interface{background:#e5e9e8}.cover-interface .cover-stage{padding:22px 24px 0;transform:translateY(5px);height:110%}.cover-interface img{object-fit:cover;object-position:top;border-radius:6px 6px 0 0;box-shadow:0 3px 16px #18292320;border:1px solid #d5deda}.project-link:hover .cover-stage{transform:scale(1.035)}.project-link:hover .cover-interface .cover-stage{transform:translateY(0)}.cover-open{position:absolute;right:16px;bottom:14px;display:flex;align-items:center;justify-content:center;padding:7px 12px;border-radius:4px;background:var(--ink);color:#f7f8f1;font-size:11px;opacity:0;transform:translateY(5px);transition:opacity .18s,transform .18s}.project-link:hover .cover-open,.project-link:focus-visible .cover-open{opacity:1;transform:translateY(0)}.project-body{padding:21px 24px 19px}.project-meta{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:10px;line-height:1.6;margin-bottom:13px}.project-category{color:var(--muted)}.meta-separator{padding:0 9px;color:#bec5b9}.project-status{display:inline-flex;align-items:center;gap:5px;color:#58684a;white-space:nowrap}.project-status i{width:4px;height:4px;background:#718c51;border-radius:50%}.project-card h3{display:flex;align-items:center;justify-content:space-between;gap:16px;font-size:clamp(18px,1.7vw,24px);font-weight:500;line-height:1.45;letter-spacing:-.02em;margin:0 0 9px}.project-arrow{font:22px/1 var(--display);font-weight:400;color:#757f71;flex-shrink:0;transition:color .2s,transform .2s}.project-link:hover .project-arrow{color:var(--ink);transform:translate(2px,-2px)}.project-description{font-size:12px;line-height:1.9;color:var(--muted);margin:0;min-height:46px}.project-bottom{display:flex;justify-content:space-between;align-items:center;gap:10px;padding-top:19px;margin-top:17px;border-top:1px solid #e8ebe1}.project-tags{display:flex;gap:5px 11px;list-style:none;flex-wrap:wrap;margin:0;padding:0;color:#687562;font-size:10px;line-height:1.7}.project-tags li::before{content:'#';opacity:.4;margin-right:1px}.project-bottom time{font:10px/1.5 var(--mono);color:#80877b;white-space:nowrap;flex-shrink:0}
.project-grid[data-view=list]{grid-template-columns:1fr;gap:12px}.project-grid[data-view=list] .project-link{display:grid;grid-template-columns:220px 1fr;align-items:stretch}.project-grid[data-view=list] .project-cover{height:100%;min-height:180px;aspect-ratio:auto}.project-grid[data-view=list] .project-body{padding:20px 26px}.project-grid[data-view=list] h3{font-size:21px}.project-grid[data-view=list] .project-description{min-height:0}.project-grid[data-view=list] .project-bottom{margin-top:13px;padding-top:12px}.project-grid[data-view=list] .project-meta{margin-bottom:9px}.empty-state{text-align:center;padding:64px 16px 80px;border:1px dashed #c9cfc0;border-radius:10px}.empty-state>span{font-size:40px;line-height:1;color:#b1be9d}.empty-state h3{font-size:19px;font-weight:500;margin:20px 0 7px}.empty-state p{color:var(--muted);font-size:12px;margin:0 0 24px}.reset-button{padding:9px 18px;border:1px solid var(--ink);border-radius:5px;font-size:12px;background:var(--ink);color:var(--surface)}.load-more-wrap{text-align:center;margin:36px 0 0}.load-more{border:1px solid #b9c4ac;padding:10px 30px;border-radius:5px;font-size:12px;background:#edf0e7;min-width:175px}.load-more span{padding-left:22px}.load-more:hover{background:var(--accent);border-color:#bacf91}.load-more-wrap p{color:var(--muted);font:10px/1.5 var(--mono);margin-top:12px}.no-script-note{font-size:12px;color:var(--muted);margin-top:20px}
.about{display:grid;grid-template-columns:1fr 1.5fr auto;gap:48px;align-items:start;padding:44px 0 55px;border-top:1px solid var(--line);margin-top:74px;scroll-margin-top:30px}.about-label{display:flex;align-items:center;gap:14px}.about-label h2{font-size:15px}.about-copy{max-width:480px}.about-copy p:first-child{font-size:18px;margin:0 0 11px}.about-copy p:last-child{color:var(--muted);font-size:12px;line-height:1.95;margin:0}.back-top{display:grid;place-items:center;width:39px;height:39px;border:1px solid #c5ceba;border-radius:50%;font-size:19px}.back-top:hover{background:var(--accent)}.site-footer{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:26px 0 33px;border-top:1px solid var(--line);color:var(--muted)}.footer-wordmark{font:600 20px/1 var(--display);letter-spacing:-1px;color:var(--ink)}.site-footer p{font-size:11px;margin:0}.site-footer>a{font-size:11px}.site-footer>a span{margin-left:8px}
@keyframes appear{from{opacity:.55;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
@media(min-width:1500px){.page-shell{max-width:1540px}.project-grid{grid-template-columns:repeat(auto-fit,minmax(330px,1fr))}.intro{padding-top:78px}}
@media(max-width:1060px){.page-shell{padding:0 36px}.site-header{gap:40px}.intro{gap:36px;padding:55px 0}.intro h1{font-size:44px}.intro-aside{max-width:270px}.intro-aside>p:first-child{font-size:17px}.project-grid{gap:24px}.project-body{padding:18px}.project-bottom{align-items:flex-start}.project-tags{gap:4px 7px}.project-bottom time{font-size:9px}.project-card h3{font-size:21px}.project-grid[data-view=list] .project-link{grid-template-columns:190px 1fr}}
@media(max-width:760px){.page-shell{padding:0 24px}.site-header{height:78px;gap:32px}.brand{font-size:23px;gap:9px}.brand-mark{width:29px;height:33px;font-size:28px}.site-header nav{gap:25px;font-size:12px}.header-note{display:none}.site-header nav{margin-left:auto}.intro{grid-template-columns:1fr;gap:24px;padding:44px 0 41px}.eyebrow{font-size:10px;margin-bottom:18px}.intro h1{font-size:43px;line-height:1.3}.intro h1 br{display:none}.intro-aside{max-width:none;justify-self:stretch;display:grid;grid-template-columns:1fr auto;gap:9px 20px;align-items:end}.intro-aside>p:first-child{font-size:14px;margin:0}.intro-aside>p:first-child br{display:none}.intro-detail{grid-column:1;grid-row:2;font-size:11px;line-height:1.8;margin:0}.text-link{grid-column:2;grid-row:1 / span 2;align-self:end;gap:13px;font-size:11px}.archive-heading{padding:20px 0 17px}.archive-heading :is(h1,h2){font-size:18px}.archive-meta{font-size:9px}.archive-meta span{margin-left:12px}.archive-tools{flex-wrap:wrap;gap:16px}.categories{gap:4px}.category-button{padding:7px 13px;font-size:11px}.search-field{width:100%;padding:9px 11px}.archive-subbar{margin:12px 0 17px}.view-controls{gap:10px}.view-switch{padding-left:10px}.project-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.project-card h3{font-size:19px}.project-body{padding:16px}.project-meta{font-size:9px;gap:6px}.meta-separator{padding:0 5px}.project-status{gap:3px}.project-description{font-size:11px}.project-bottom{flex-direction:column;gap:9px;padding-top:13px;margin-top:13px}.project-tags{font-size:9px}.project-bottom time{font-size:9px}.cover-interface .cover-stage{padding:15px 13px 0}.project-grid[data-view=list] .project-link{grid-template-columns:160px 1fr}.project-grid[data-view=list] .project-body{padding:16px 20px}.project-grid[data-view=list] .project-description{font-size:12px}.about{grid-template-columns:1fr auto;gap:24px;margin-top:52px;padding:30px 0 37px}.about-label{grid-column:1;grid-row:1}.about-copy{grid-column:1;grid-row:2}.back-top{grid-column:2;grid-row:1}.about-copy p:first-child{font-size:17px}.site-footer{padding:23px 0 27px}.site-footer p{font-size:10px}.site-footer>a{font-size:10px}}
@media(max-width:560px){.page-shell{padding:0 20px}.intro h1{font-size:38px;letter-spacing:-.045em}.project-grid{grid-template-columns:1fr;gap:25px}.project-cover{aspect-ratio:1.55}.project-body{padding:18px 19px}.project-meta{font-size:10px}.project-card h3{font-size:23px}.project-description{font-size:12px;min-height:0}.project-bottom{flex-direction:row;align-items:center;gap:10px;padding-top:16px;margin-top:15px}.project-tags{font-size:10px;gap:4px 8px}.project-bottom time{font-size:9px}.cover-interface .cover-stage{padding:18px 19px 0}.cover-open{opacity:1;transform:none;padding:5px 9px;font-size:10px;right:12px;bottom:11px}.project-grid[data-view=list] .project-link{grid-template-columns:92px 1fr;align-items:center;overflow:visible;background:transparent;border:0;border-top:1px solid var(--line);border-radius:0;padding:17px 0;gap:16px}.project-grid[data-view=list] .project-cover{height:76px;min-height:0;border-radius:5px}.project-grid[data-view=list] .cover-interface .cover-stage{padding:5px 5px 0}.project-grid[data-view=list] .project-body{padding:0}.project-grid[data-view=list] h3{font-size:17px;gap:8px;margin-bottom:5px}.project-grid[data-view=list] .project-meta{margin-bottom:5px;font-size:9px}.project-grid[data-view=list] .meta-separator,.project-grid[data-view=list] .project-status{display:none}.project-grid[data-view=list] .project-description{display:none}.project-grid[data-view=list] .project-tags{font-size:9px}.project-grid[data-view=list] .project-bottom{border:0;margin:0;padding:0;gap:7px;flex-wrap:wrap}.project-grid[data-view=list] .project-arrow{font-size:17px}.project-grid[data-view=list] .cover-open{display:none}.project-grid[data-view=list]{gap:0}.project-grid[data-view=list] .project-bottom time{font-size:9px}.sort-label{font-size:10px;gap:8px}.sort-label select{font-size:10px;max-width:103px}.view-switch button{width:29px;height:29px}.archive-subbar p{font-size:10px}.intro-detail br{display:none}.intro-aside{gap:10px 14px}.intro-detail{max-width:245px}.intro-aside>p:first-child{font-size:13px}.category-button{padding:7px 12px}.category-button>span{font-size:9px}.section-index{font-size:10px}.archive-heading>div{gap:10px}.about-label{gap:10px}.site-footer{flex-wrap:wrap;gap:18px}.site-footer p{margin-left:auto}.site-footer>a{display:none}.search-field input{font-size:12px}.project-description{line-height:1.85}}
/* Keep the catalogue close to the first screen on a small display. */
@media(max-width:560px){.intro{padding:32px 0 31px;gap:19px}.intro h1{font-size:35px}.intro h1 br{display:block}.intro-detail{font-size:11px}.intro-aside>p:first-child{display:none}.intro-aside{display:flex;align-items:flex-end;justify-content:space-between;gap:18px}.intro-detail{max-width:230px}.text-link{white-space:nowrap;flex-shrink:0}.archive-heading{padding:18px 0 15px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}.project-link:hover .cover-stage{transform:none}.project-link:hover .cover-interface .cover-stage{transform:translateY(5px)}}
