:root{--bg:#fff;--bg-subtle:#fafafa;--ink-900:#111;--ink-800:#1f1f1f;--ink-600:#4a4a4a;--ink-500:#6e6e6e;--ink-400:#757575;--ink-200:#a3a3a3;--line:#e6e6e6;--line-soft:#f0f0f0;--font-serif:"Source Serif 4", "Songti SC", "Noto Serif SC", Georgia, serif;--font-sans:Inter, -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Source Han Sans SC", sans-serif;--font-mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--s1:8px;--s2:16px;--s3:24px;--s4:32px;--s6:48px;--s8:64px;--s12:96px;--w-wide:1120px;--w-text:720px;--pad:clamp(24px, 5vw, 48px);--nav-h:64px;--dur-fast:.15s;--dur-base:.24s;--dur-slow:.4s;--ease-out:cubic-bezier(.22, .61, .36, 1);--ease-enter:cubic-bezier(.16, 1, .3, 1)}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{background:var(--bg);color:var(--ink-800);font-family:var(--font-sans);letter-spacing:.01em;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:1.0625rem;line-height:1.75}img{max-width:100%;height:auto;display:block}[hidden]{display:none!important}figure{margin:0}a{color:inherit;text-decoration:none}h1,h2,h3{text-wrap:balance;margin:0;font-weight:600}p{text-wrap:pretty;margin:0}ol,ul{margin:0;padding:0;list-style:none}:focus-visible{outline:2px solid var(--ink-900);outline-offset:3px;border-radius:1px}.wrap{width:100%;max-width:var(--w-wide);padding-inline:var(--pad);margin-inline:auto}.sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip{z-index:100;background:var(--bg);border:1px solid var(--ink-900);padding:10px 16px;position:fixed;top:8px;left:8px;transform:translateY(-200%)}.skip:focus{transform:none}.site-header{z-index:50;pointer-events:none;position:fixed;inset:0 0 auto}.site-header:before{content:"";background:var(--bg);border-bottom:1px solid var(--line);opacity:1;transition:opacity var(--dur-base) var(--ease-out);position:absolute;inset:0}.js .site-header:before{opacity:0}.js.nav-on .site-header:before,.js.menu-open .site-header:before{opacity:1}.site-header .wrap{height:var(--nav-h);align-items:center;gap:var(--s4);display:flex;position:relative}.brand,.site-nav{pointer-events:auto}.js .brand,.js .site-nav{opacity:0;pointer-events:none;transition:opacity var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out);transform:translateY(-6px)}.js.nav-on .brand,.js.nav-on .site-nav,.js.menu-open .brand{opacity:1;pointer-events:auto;transform:none}.brand{align-items:center;margin-right:auto;display:flex}.brand img{width:104px;height:auto}.site-nav{align-items:center;gap:var(--s4);display:flex}.site-nav a{letter-spacing:.02em;color:var(--ink-600);transition:color var(--dur-fast) var(--ease-out);padding-block:4px;font-size:.875rem;position:relative}.site-nav a:after{content:"";background:var(--ink-900);transform-origin:0;height:1px;transition:transform var(--dur-base) var(--ease-out);position:absolute;bottom:0;left:0;right:0;transform:scaleX(0)}.site-nav a:hover{color:var(--ink-900)}.site-nav a:hover:after{transform:scaleX(1)}.lang{font-family:var(--font-mono);letter-spacing:.04em;pointer-events:auto;align-items:center;gap:10px;font-size:.8125rem;display:flex}.lang-bar{padding-left:var(--s3);border-left:1px solid var(--line)}.js:not(.nav-on) .lang-bar{border-left-color:#0000}.lang a{color:var(--ink-400);transition:color var(--dur-fast) var(--ease-out);padding:2px 0}.lang a:hover{color:var(--ink-600)}.lang a[aria-current=true]{color:var(--ink-900);cursor:default}.menu-toggle{pointer-events:auto;cursor:pointer;background:0 0;border:0;width:40px;height:40px;margin-right:-10px;padding:0;display:none;position:relative}.menu-toggle .bars,.menu-toggle .bars:before,.menu-toggle .bars:after{content:"";background:var(--ink-900);width:20px;height:1px;transition:transform var(--dur-base) var(--ease-out), opacity var(--dur-fast) var(--ease-out);margin-left:-10px;position:absolute;left:50%}.menu-toggle .bars{top:50%}.menu-toggle .bars:before{margin-left:0;top:-6px;left:0}.menu-toggle .bars:after{margin-left:0;top:6px;left:0}.menu-open .menu-toggle .bars{background:0 0}.menu-open .menu-toggle .bars:before{transform:translateY(6px)rotate(45deg)}.menu-open .menu-toggle .bars:after{transform:translateY(-6px)rotate(-45deg)}.menu-panel{background:var(--bg);border-bottom:1px solid var(--line);padding:var(--s2) var(--pad) var(--s4);gap:var(--s2);pointer-events:auto;flex-direction:column;display:flex;position:absolute;top:100%;left:0;right:0}.menu-panel a{color:var(--ink-900);padding-block:6px;font-size:1.125rem}.lang-panel{margin-top:var(--s2);padding-top:var(--s3);border-top:1px solid var(--line)}.banner{min-height:100svh;padding-block:calc(var(--nav-h) + var(--s12)) var(--s12);flex-direction:column;justify-content:center;display:flex;position:relative}.wordmark{width:min(46vw,420px);margin-bottom:clamp(40px,7vw,76px);display:block}.wordmark img{width:100%;height:auto}.banner h1{font-family:var(--font-serif);letter-spacing:-.015em;color:var(--ink-900);max-width:16em;font-size:clamp(2.25rem,5.4vw,4rem);font-weight:500;line-height:1.14}.banner .lede{margin-top:var(--s6);max-width:var(--w-text);color:var(--ink-600);font-size:clamp(1rem,1.4vw,1.125rem);line-height:1.85}.js .banner h1,.js .banner .lede{opacity:0}.js .banner h1{animation:rise var(--dur-slow) var(--ease-enter) 1.55s forwards}.js .banner .lede{animation:rise var(--dur-slow) var(--ease-enter) 1.7s forwards}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.section{padding-block:clamp(96px,11vw,150px) 0}.section:last-child{padding-bottom:clamp(48px,6vw,80px)}.section-head{margin-bottom:var(--s8)}.section-head h2{letter-spacing:-.015em;color:var(--ink-900);font-size:clamp(1.75rem,2.8vw,2.25rem)}.work-item{border-bottom:1px solid var(--line)}.work-item:first-child{border-top:1px solid var(--line)}.work-link{grid-template-columns:5fr 7fr;align-items:center;gap:clamp(24px,4vw,56px);padding-block:clamp(28px,3.5vw,44px);display:grid}.work-figure{border:1px solid var(--line);background:var(--bg-subtle);overflow:hidden}.work-figure img{aspect-ratio:16/10;object-fit:cover;width:100%;transition:transform var(--dur-slow) var(--ease-out)}.work-body{flex-direction:column;gap:14px;display:flex}.work-body h3{letter-spacing:-.01em;color:var(--ink-900);align-self:flex-start;font-size:1.375rem;display:inline-block;position:relative}.work-body h3:after{content:"";background:var(--ink-900);transform-origin:0;height:1px;transition:transform var(--dur-base) var(--ease-out);position:absolute;bottom:-2px;left:0;right:0;transform:scaleX(0)}.work-body p{color:var(--ink-600);max-width:38em}@media (hover:hover){.work-link:hover .work-figure img{transform:scale(1.025)}.work-link:hover .work-body h3:after{transform:scaleX(1)}}.tl-group{grid-template-columns:104px 1fr;gap:0;display:grid}.tl-year{top:calc(var(--nav-h) + 24px);font-family:var(--font-mono);letter-spacing:.08em;color:var(--ink-400);padding-top:var(--s3);align-self:start;font-size:.8125rem;position:sticky}.tl-entries{padding-left:clamp(24px,3vw,40px);position:relative}.tl-entries:before{content:"";background:var(--line);width:1px;height:100%;position:absolute;top:0;left:0}.signal{padding-block:var(--s3) var(--s4);position:relative}.signal+.signal:not([hidden]){border-top:1px solid var(--line-soft)}.signal-meta{font-family:var(--font-mono);letter-spacing:.06em;color:var(--ink-500);margin-bottom:8px;font-size:.75rem}.signal h3{color:var(--ink-900);margin-bottom:6px;font-size:1.0625rem}.signal p{color:var(--ink-600);max-width:40em}.signal .out{font-family:var(--font-mono);color:var(--ink-400);border-bottom:1px solid var(--line);transition:color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);align-items:center;gap:6px;margin-top:10px;padding-bottom:2px;font-size:.75rem;display:inline-flex}.signal .out:hover{color:var(--ink-900);border-color:var(--ink-900)}.tl-more{width:100%;margin-top:var(--s8);cursor:pointer;border:1px solid var(--line);font-family:var(--font-mono);letter-spacing:.06em;color:var(--ink-500);transition:color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);background:0 0;padding-block:18px;font-size:.8125rem;display:block}.tl-more:hover{color:var(--ink-900);border-color:var(--ink-900)}.js .reveal{opacity:0;transform:translateY(10px)}.js .reveal.in{opacity:1;transition:opacity var(--dur-slow) var(--ease-enter) var(--d,0s), transform var(--dur-slow) var(--ease-enter) var(--d,0s);transform:none}.site-footer{border-top:1px solid var(--line);padding-block:var(--s12) var(--s8)}.site-footer .wrap{justify-content:space-between;align-items:flex-end;gap:var(--s6);flex-wrap:wrap;display:flex}.site-footer img{width:118px;height:auto}.foot-right{text-align:right;color:var(--ink-500);font-size:.8125rem;line-height:2}.foot-right a{border-bottom:1px solid var(--line)}.foot-right a:hover{color:var(--ink-900);border-color:var(--ink-900)}@media (width<=860px){body{font-size:1rem}.work-link{gap:var(--s3);grid-template-columns:1fr}.tl-group{grid-template-columns:1fr}.tl-year{margin-bottom:var(--s2);border-bottom:1px solid var(--line);padding-bottom:6px;position:static}.site-footer .wrap{flex-direction:column;align-items:flex-start}.foot-right{text-align:left}.wordmark{width:min(72vw,320px)}.brand img{width:88px}.site-nav,.lang-bar{display:none}.menu-toggle{display:block}}@media (width>=861px){.menu-panel{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.js .reveal,.js .banner h1,.js .banner .lede{opacity:1;transform:none}}.section-first{padding-top:calc(var(--nav-h) + clamp(56px, 7vw, 96px))}.error-page{text-align:center;min-height:100svh;padding:var(--nav-h) var(--pad) var(--s12);flex-direction:column;justify-content:center;align-items:center;display:flex}.err-code{letter-spacing:-.045em;color:var(--ink-900);font-size:clamp(7rem,22vw,17rem);font-weight:700;line-height:.88}.err-title{letter-spacing:-.015em;color:var(--ink-900);margin-top:clamp(20px,3vw,36px);font-size:clamp(1.75rem,2.8vw,2.25rem)}
