@layer reset{*,:before,:after{box-sizing:border-box}*{margin:0}html{-webkit-text-size-adjust:100%;interpolate-size:allow-keywords}body{min-height:100svh;line-height:var(--leading-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img,picture,video,canvas,svg{max-width:100%;display:block}img{height:auto}input,button,textarea,select{font:inherit;color:inherit}p,h1,h2,h3{overflow-wrap:break-word}h1,h2,h3{text-wrap:balance}p{text-wrap:pretty}:target{scroll-margin-block:14svh}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}}@layer base{html{background:var(--bg);overflow-x:clip}body{background:var(--bg);color:var(--text);font-family:var(--font-text);font-size:var(--text-base);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;font-weight:400}a{color:inherit;text-decoration:none}button{cursor:pointer;background:0 0;border:0;padding:0}::selection{background:var(--accent);color:var(--accent-on)}:where(a,button,[role=button],input,textarea,select,summary):focus-visible{outline:2px solid var(--focus);outline-offset:3px;border-radius:2px}.skip-link{top:0;left:var(--gutter);z-index:9999;background:var(--text);color:var(--bg);font:400 var(--text-xs) / 1 var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;transition:transform var(--dur-2) var(--ease-out);padding:12px 18px;position:fixed;transform:translateY(-120%)}.skip-link:focus-visible{outline-offset:0;transform:translateY(0)}}@layer components{.gutter{padding-inline:var(--gutter)}.measure{max-width:62ch}.measure-narrow{max-width:44ch}.section-index{justify-content:space-between;align-items:baseline;gap:var(--space-s);padding-bottom:var(--space-xs);border-bottom:var(--hairline) solid var(--border-strong);font:400 var(--text-xs) / 1.2 var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--text-muted);display:flex}.section-index b{color:var(--text);font-weight:400}.eyebrow{font:400 var(--text-xs) / 1.3 var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--text-muted);align-items:center;gap:.7em;display:flex}.eyebrow .pulse{background:var(--signal);border-radius:50%;flex:0 0 7px;width:7px;height:7px}.btn{min-height:48px;font:700 var(--text-sm) / 1 var(--font-text);letter-spacing:.02em;border:var(--hairline) solid var(--border-strong);background:var(--accent);color:var(--accent-on);box-shadow:5px 5px 0 var(--signal);transition:transform var(--dur-1) var(--ease-out), box-shadow var(--dur-1) var(--ease-out);justify-content:center;align-items:center;gap:1.5em;padding-inline:1.15em;display:inline-flex}.btn svg{width:17px;height:17px}.btn:active{box-shadow:0 0 0 var(--signal);transform:translate(5px,5px)}.link-quiet{min-height:48px;font:700 var(--text-sm) / 1 var(--font-text);color:var(--text);align-items:center;gap:.55em;display:inline-flex}.link-quiet svg{width:17px;height:17px}.link-quiet .label{padding-bottom:3px;position:relative}.link-quiet .label:after{content:"";height:var(--hairline);transform-origin:0;transition:transform var(--dur-2) var(--ease-out);background:currentColor;position:absolute;bottom:0;left:0;right:0;transform:scaleX(1)}.link-quiet:active{transform:translateY(1px)}.text-link{transition:background-size var(--dur-2) var(--ease-out);background-image:linear-gradient(currentColor,currentColor);background-position:0 100%;background-repeat:no-repeat;background-size:100% 1px;display:inline}.text-link--short{background-size:0% 1px}@media (hover:hover) and (pointer:fine){.btn:hover{box-shadow:3px 3px 0 var(--signal);transform:translate(2px,2px)}.link-quiet:hover .label:after{transform-origin:100%;transform:scaleX(0)}.text-link--short:hover{background-size:100% 1px}}.loader-overlay{z-index:1000;background:var(--bg);color:var(--text);isolation:isolate;transition:opacity .9s var(--ease-out);place-items:center;display:grid;position:fixed;inset:0;overflow:clip}.loader-overlay.reveal{opacity:0}.loader-blackhole{place-items:center;display:grid;position:absolute;inset:0}.loader-blackhole canvas{width:100%;height:100%;position:absolute;inset:0}.loader-btn{z-index:2;aspect-ratio:1;width:min(248px,62vw);color:var(--text-faint);cursor:default;font:400 var(--text-sm) / 1 var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;font-variant-numeric:tabular-nums;transition:opacity var(--dur-3) var(--ease-out), color var(--dur-3) var(--ease-out);background:0 0;border:0;border-radius:50%;place-items:center;padding:0;display:grid;position:relative}.loader-btn.ready{cursor:pointer}.loader-btn.open{opacity:0;pointer-events:none}.loader-btn span{align-items:center;gap:.75rem;display:flex}.loader-btn span:before,.loader-btn span:after{content:"";background:currentColor;flex:0 0 15px;width:15px;height:1px}@media (hover:hover) and (pointer:fine){.loader-btn.ready:hover{color:var(--text)}}.site-content{z-index:1001;clip-path:circle(0 at 50% 50vh);pointer-events:none;min-height:100svh;position:relative}.site-content.revealed{clip-path:circle(150vmax at 50% 50vh);pointer-events:auto;transition:clip-path 1.3s var(--ease-line)}.site-content.finished{clip-path:none}.site-header{z-index:60;height:var(--header-h);padding-inline:var(--gutter);background:var(--bg);border-bottom:var(--hairline) solid var(--border-strong);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:clamp(1rem,3vw,2.5rem);display:grid;position:sticky;top:0}.brand{font-family:var(--font-display);letter-spacing:.01em;align-items:center;gap:.7rem;font-size:.9375rem;font-weight:700;display:inline-flex}.brand-avatar{object-fit:cover;border:var(--hairline) solid var(--border-strong);background:var(--bg-raised);width:34px;height:34px;transition:transform var(--dur-2) var(--ease-out)}.site-nav{font:400 var(--text-xs) / 1 var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;justify-content:center;gap:clamp(1.25rem,3.4vw,3rem);display:flex}.site-nav a{padding-block:.6rem;position:relative}.site-nav a:after{content:"";height:var(--hairline);transform-origin:0;transition:transform var(--dur-2) var(--ease-out);background:currentColor;position:absolute;bottom:.35rem;left:0;right:0;transform:scaleX(0)}.site-nav a[aria-current=true]:after{transform:scaleX(1)}.theme-toggle{border:var(--hairline) solid var(--border-strong);width:38px;height:38px;color:var(--text);transition:background-color var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out);place-items:center;display:grid}.theme-toggle svg{width:17px;height:17px}.theme-toggle:active{transform:translateY(1px)}.theme-toggle .sun-icon{display:none}html.dark .theme-toggle .sun-icon{display:block}html.dark .theme-toggle .moon-icon{display:none}@media (hover:hover) and (pointer:fine){.brand:hover .brand-avatar{transform:rotate(-4deg)scale(1.06)}.site-nav a:hover:after{transform:scaleX(1)}.theme-toggle:hover{background:var(--text);color:var(--bg)}}.hero{min-height:calc(100svh - var(--header-h));padding:clamp(3.5rem, 9vh, 7.5rem) var(--gutter) clamp(5.5rem, 13vh, 9.5rem);border-bottom:var(--hairline) solid var(--border-strong);flex-direction:column;justify-content:center;display:flex;position:relative;overflow:clip}.hero-copy{z-index:2;max-width:min(100%,50rem);position:relative}.hero h1{margin:var(--space-l) 0 0;font-family:var(--font-display);font-weight:700;font-size:var(--text-h1);line-height:var(--leading-display);letter-spacing:var(--tracking-display);text-wrap:nowrap}.hero h1 .line{padding-bottom:.05em;display:block;overflow:hidden}.hero h1 .line>span{display:block}.hero-sub{margin-top:var(--space-l);max-width:30ch;font-size:var(--text-lg);color:var(--text-muted);font-weight:400;line-height:1.55}.hero-actions{align-items:center;gap:var(--space-l);margin-top:var(--space-xl);flex-wrap:wrap;display:flex}.scroll-cue{left:var(--gutter);z-index:6;font:400 var(--text-2xs) / 1 var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--text-muted);align-items:center;gap:.75rem;display:flex;position:absolute;bottom:26px}.scroll-track{width:20px;height:46px;display:block;position:relative}.scroll-mouse{border:var(--hairline) solid var(--border-strong);background:var(--bg);border-radius:9px;width:17px;height:27px;position:absolute;top:0;left:50%;transform:translate(-50%)}.scroll-mouse i{background:var(--text);border-radius:50%;width:3px;height:3px;position:absolute;top:5px;left:50%;transform:translate(-50%)}.line-drawing{z-index:1;width:min(54vw,660px);color:var(--text);pointer-events:none;position:absolute;bottom:0;right:0;overflow:clip}.line-drawing__layer{width:100%;height:auto}.line-drawing__layer svg{width:100%;height:auto;display:block}.line-drawing__layer--draw{z-index:1;position:relative}.line-drawing__layer--trace{z-index:2;opacity:0;transition:opacity var(--dur-4) var(--ease-out);position:absolute;inset:0}.line-drawing__layer--trace svg path{fill:currentColor;stroke:none}.line-drawing.is-trace-shown .line-drawing__layer--trace{opacity:1}.line-drawing__credit{z-index:3;font:400 var(--text-2xs) / 1.4 var(--font-mono);letter-spacing:.03em;color:var(--text);background:var(--bg-raised);border:1px solid var(--border);opacity:0;transition:opacity var(--dur-4) var(--ease-out), transform var(--dur-4) var(--ease-out);pointer-events:auto;border-radius:999px;align-items:baseline;gap:.4rem;padding:3px 9px;display:flex;position:absolute;bottom:8px;right:10px;transform:translateY(4px)}.line-drawing.is-trace-shown .line-drawing__credit,.line-drawing--static .line-drawing__credit{opacity:.85;transform:translateY(0)}.line-drawing__credit-src{opacity:.55;font-size:var(--text-2xs);text-transform:uppercase;letter-spacing:.08em}.section{padding-block:var(--section-normal) var(--section-tight);padding-inline:var(--gutter)}.about-content{grid-template-columns:minmax(0,1.12fr) minmax(0,.88fr);align-items:start;gap:clamp(2.5rem,7vw,8rem);padding-top:clamp(2rem,4.5vw,3.5rem);display:grid}.section h2{font-family:var(--font-display);font-weight:700;font-size:var(--text-h2);line-height:var(--leading-heading);letter-spacing:var(--tracking-display)}.section h2 em{background:var(--accent);color:var(--accent-on);-webkit-box-decoration-break:clone;box-decoration-break:clone;padding-inline:.1em;font-style:normal}.about-detail>p{max-width:46ch;font-size:var(--text-base);color:var(--text-muted);line-height:1.85}.about-detail dl{border-top:var(--hairline) solid var(--border-strong);margin:clamp(2rem,4vw,3rem) 0 0}.about-detail dl>div{gap:var(--space-m);border-bottom:1px solid var(--border);grid-template-columns:minmax(0,auto) minmax(0,1fr);align-items:center;padding-block:.8rem;display:grid}.about-detail dt{font:400 var(--text-2xs) / 1.3 var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--text-faint)}.about-detail dd{text-align:right;font-size:var(--text-sm);justify-content:flex-end;align-items:center;gap:.5rem;font-weight:700;display:flex}.live-dot{background:var(--live);border-radius:50%;flex:0 0 7px;width:7px;height:7px;position:relative}.projects{background:var(--inverse-bg);color:var(--inverse-text);padding-block:var(--section-tight);padding-inline:var(--gutter)}.projects .section-index{border-bottom-color:var(--inverse-border-strong);color:var(--inverse-muted)}.projects .section-index b{color:var(--inverse-text)}.projects h2{font-family:var(--font-display);font-weight:700;font-size:var(--text-h2);line-height:var(--leading-heading);letter-spacing:var(--tracking-display);margin:clamp(2rem,5vw,3.5rem) 0 clamp(3rem,7vw,5.5rem)}.projects h2 em{color:var(--accent);background:0 0;padding-inline:0;font-style:normal}.project-list{border-top:1px solid var(--inverse-border)}.project{border-bottom:1px solid var(--inverse-border);position:relative}.project-main-link{gap:var(--space-m) clamp(1rem, 3vw, 2.5rem);grid-template-columns:3.25rem minmax(0,1fr) auto;align-items:start;padding-block:clamp(1.75rem,4vw,3rem);display:grid}.project-number{font:400 var(--text-xs) / 1.6 var(--font-mono);color:var(--accent)}.project-copy>p{font:400 var(--text-2xs) / 1.4 var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--inverse-muted)}.project-copy h3{font-family:var(--font-display);font-weight:700;font-size:var(--text-h3);letter-spacing:-.01em;margin:.75rem 0 .9rem;line-height:1.2}.project-copy h3 .label{transition:background-size var(--dur-3) var(--ease-out);background-image:linear-gradient(currentColor,currentColor);background-position:0 100%;background-repeat:no-repeat;background-size:0% 2px}.project-copy>span{max-width:52ch;font-size:var(--text-base);color:var(--inverse-muted);line-height:1.75;display:block}.project-arrow{border:1px solid var(--inverse-border-strong);width:44px;height:44px;transition:background-color var(--dur-2) var(--ease-out), color var(--dur-2) var(--ease-out), transform var(--dur-2) var(--ease-out);place-items:center;display:grid}.project-arrow svg{width:19px;height:19px}.project-visual{z-index:40;aspect-ratio:2;border:1px solid var(--inverse-border-strong);background:var(--inverse-raised);opacity:0;pointer-events:none;will-change:transform;width:min(27vw,380px);transition:opacity var(--dur-2) var(--ease-out);margin:0;position:fixed;top:0;left:0;overflow:clip}.project-visual img{object-fit:cover;width:100%;height:100%}.project.is-previewing .project-visual{opacity:1}@media (hover:hover) and (pointer:fine){.project-main-link:hover .project-copy h3 .label{background-size:100% 2px}.project-main-link:hover .project-arrow{background:var(--accent);color:var(--accent-on);transform:translate(3px,-3px)}}.project-main-link:active .project-arrow{transform:translate(1px,-1px)}.connect{background:var(--accent);color:var(--accent-on);padding-block:var(--section-tight);padding-inline:var(--gutter)}.connect .section-index{border-bottom-color:var(--accent-on);color:color-mix(in oklab, var(--accent-on) 62%, var(--accent))}.connect .section-index b{color:var(--accent-on)}.connect-heading{padding:clamp(2rem,5vw,3.5rem) 0 clamp(2.5rem,6vw,4.5rem)}.connect h2{font-family:var(--font-display);font-weight:700;font-size:var(--text-h2);line-height:var(--leading-heading);letter-spacing:var(--tracking-display)}.connect h2 em{color:var(--accent-on);text-underline-offset:.14em;background:0 0;padding-inline:0;font-style:normal;text-decoration:underline;text-decoration-thickness:3px}.contact-list{border-top:var(--hairline) solid var(--accent-on)}.contact-row{gap:var(--space-m) clamp(1rem, 3vw, 2.5rem);min-height:clamp(80px,9vw,112px);padding-block:var(--space-xs);border-bottom:var(--hairline) solid var(--accent-on);transition:padding-inline var(--dur-2) var(--ease-out);grid-template-columns:3.25rem minmax(0,1fr) auto;align-items:center;display:grid}.contact-row>svg,.contact-row .contact-icon{width:30px;height:30px}.contact-row .contact-icon svg{fill:currentColor;stroke:none;width:100%;height:100%}.contact-row .contact-icon--line svg{fill:none;stroke:currentColor;stroke-width:1.7px}.contact-name{flex-direction:column;gap:.35rem;display:flex}.contact-name b{font-family:var(--font-display);font-weight:700;font-size:var(--text-xl);letter-spacing:-.01em;line-height:1.15}.contact-name small{font:400 var(--text-2xs) / 1.4 var(--font-mono);letter-spacing:.06em;opacity:.72}.contact-row .row-arrow{width:21px;height:21px;transition:transform var(--dur-2) var(--ease-out)}.contact-row:active{padding-inline:var(--space-s)}@media (hover:hover) and (pointer:fine){.contact-row:hover{padding-inline:var(--space-s)}.contact-row:hover .row-arrow{transform:translate(3px,-3px)}}.site-footer{background:var(--signal);color:var(--signal-on);padding:var(--section-tight) var(--gutter) var(--space-m);overflow:clip}.footer-top{justify-content:flex-end;display:flex}.footer-top>a{border:var(--hairline) solid var(--signal-on);width:46px;height:46px;transition:transform var(--dur-2) var(--ease-out);place-items:center;display:grid}.footer-top svg{width:19px;height:19px}.footer-top>a:active{transform:translateY(2px)}.footer-wordmark{width:100%;height:1.15em;font-family:var(--font-display);font-weight:700;font-size:var(--text-display);letter-spacing:-.035em;white-space:nowrap;margin:clamp(3rem,8vw,7rem) 0 clamp(2rem,5vw,4.5rem);line-height:1.05;position:relative}.footer-wordmark-text{align-items:center;display:flex;position:absolute;inset:0}.footer-wordmark-text .tick{color:var(--accent)}.footer-distortion{opacity:0;width:100%;height:100%;display:block;position:absolute;inset:0}.footer-distortion canvas{width:100%;height:100%;display:block}.has-wordmark-distortion .footer-wordmark-text{opacity:0;pointer-events:none}.has-wordmark-distortion .footer-distortion{opacity:1}.footer-meta{justify-content:space-between;gap:var(--space-s);padding-top:var(--space-xs);border-top:var(--hairline) solid var(--signal-on);font:400 var(--text-2xs) / 1.5 var(--font-mono);letter-spacing:.05em;flex-wrap:wrap;display:flex}.footer-meta a{text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px}@media (hover:hover) and (pointer:fine){.footer-top>a:hover{transform:translateY(-4px)}.footer-meta a:hover{text-decoration-thickness:2px}}.site-page{flex-direction:column;min-height:100svh;display:flex}.site-page>main{flex:1}.page.section{padding-block:clamp(2rem, 5vw, 3.5rem) var(--section-tight)}.page-head{padding-top:clamp(2.5rem,6vw,4.5rem)}.section-index h1{font:inherit;color:var(--text)}.page-lede{max-width:46ch;margin-top:var(--space-m);color:var(--text-muted);font-size:var(--text-base);line-height:1.85}.page-actions{margin-top:clamp(2rem,5vw,3.5rem)}.page--notfound .page-head{padding-block:clamp(3rem,9vw,6rem) clamp(2rem,5vw,4rem)}.page-title{font-family:var(--font-prose);font-weight:700;font-size:var(--text-h2);line-height:var(--leading-heading);letter-spacing:var(--tracking-display);text-wrap:balance}.post-list{border-top:var(--hairline) solid var(--border-strong);margin:clamp(2rem,5vw,3.5rem) 0 0;padding:0;list-style:none}.post-list--flush{margin-top:var(--space-m);border-top:0}.post-list--timeline{--timeline-width:clamp(4.25rem, 9vw, 6.5rem);--timeline-gap:clamp(1rem, 3vw, 2.25rem);--timeline-line:calc(var(--timeline-width) + var(--timeline-gap) / 2);--title-line:calc(var(--text-xl) * 1.3);--dot-offset:calc(var(--space-m) + var(--title-line) / 2)}.post-row{position:relative}.post-link{column-gap:var(--space-m);padding-block:var(--space-m);border-bottom:1px solid var(--border);transition:padding-inline var(--dur-2) var(--ease-out);grid-template-columns:minmax(0,1fr) auto;align-items:start;display:grid}.post-list--timeline .post-link{grid-template-columns:var(--timeline-width) minmax(0, 1fr) auto;column-gap:var(--timeline-gap)}.post-list--timeline .post-row:before{content:"";left:calc(var(--timeline-line) - var(--hairline) / 2);width:var(--hairline);background:var(--border);position:absolute;top:0;bottom:0}.post-list--timeline>.post-row:last-child:before{height:calc(var(--dot-offset) + 3.5px);bottom:auto}.post-list--timeline .post-row:after{content:"";left:var(--timeline-line);top:var(--dot-offset);border:var(--hairline) solid var(--border-strong);background:var(--bg);width:7px;height:7px;transition:background-color var(--dur-2) var(--ease-out), border-color var(--dur-2) var(--ease-out);border-radius:50%;position:absolute;transform:translate(-50%,-50%)}.post-year{grid-template-columns:var(--timeline-width) minmax(0, 1fr) auto;column-gap:var(--timeline-gap);--year-pad:var(--space-l);padding-block:var(--year-pad) var(--space-xs);display:grid;position:relative}.post-list--timeline .post-year:before{content:"";left:calc(var(--timeline-line) - var(--hairline) / 2);width:var(--hairline);background:var(--border);position:absolute;top:0;bottom:0}.post-list--timeline .post-year:after{content:"";left:var(--timeline-line);top:calc(var(--year-pad) + var(--text-h3) / 2);background:var(--text);border-radius:50%;width:11px;height:11px;position:absolute;transform:translate(-50%,-50%)}.post-year-label{font-family:var(--font-display);font-weight:700;font-size:var(--text-h3);letter-spacing:var(--tracking-display);color:var(--text-muted);grid-column:2;line-height:1}.post-time{min-height:var(--title-line);align-items:center;display:flex}.post-time time{font:400 var(--text-xs) / 1 var(--font-mono);letter-spacing:.02em;color:var(--text-faint);transition:color var(--dur-2) var(--ease-out)}.post-copy{flex-direction:column;gap:.45rem;min-width:0;display:flex}.post-title{font-family:var(--font-prose);font-weight:700;font-size:var(--text-xl);letter-spacing:-.01em;line-height:1.3}.post-meta{font:400 var(--text-2xs) / 1.4 var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint);flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.post-list--timeline .post-meta time{display:none}.post-summary{white-space:nowrap;text-overflow:ellipsis;font-family:var(--font-prose);color:var(--text-muted);overflow:hidden}.post-arrow{width:21px;height:21px;color:var(--text-muted);transition:transform var(--dur-2) var(--ease-out);margin-top:.1rem}.post-link:active{padding-inline:var(--space-s)}.post-row:has(.post-link:focus-visible) .post-time time{color:var(--text-muted)}.post-row:has(.post-link:focus-visible):after{border-color:var(--accent);background:var(--accent)}@media (hover:hover) and (pointer:fine){.post-row:hover .post-link{padding-inline:var(--space-s)}.post-row:hover .post-time time{color:var(--text-muted)}.post-row:hover:after{border-color:var(--accent);background:var(--accent)}.post-row:hover .post-arrow{transform:translate(3px,-3px)}}.writing-head{padding-top:clamp(2rem,5vw,3.5rem)}.section.writing h2{font-family:var(--font-prose);letter-spacing:var(--tracking-display)}.writing-more{margin-top:var(--space-m);justify-content:flex-end;display:flex}.pager{justify-content:space-between;align-items:center;gap:var(--space-m);padding-top:var(--space-s);border-top:var(--hairline) solid var(--border-strong);margin-top:clamp(2rem,5vw,3.5rem);display:flex}.pager-step{min-height:44px;font-family:var(--font-prose);font-weight:700;font-size:var(--text-sm);color:var(--text);align-items:center;display:inline-flex}.pager-step--off{color:var(--text-faint)}.pager-pages{font:400 var(--text-xs) / 1 var(--font-mono);letter-spacing:var(--tracking-label);align-items:center;gap:.25rem;display:flex}.pager-page{min-width:34px;min-height:34px;color:var(--text-muted);transition:background-color var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out);justify-content:center;align-items:center;display:inline-flex}.pager-page[aria-current=page]{background:var(--accent);color:var(--accent-on)}@media (hover:hover) and (pointer:fine){.pager-step:hover{color:var(--text-muted)}.pager-page:hover{background:var(--text);color:var(--bg)}}.post-layout{--post-measure:calc(44 * var(--text-lg));--toc-width:clamp(11rem, 16vw, 15rem);grid-template-columns:minmax(0, var(--post-measure)) var(--toc-width);justify-content:center;align-items:start;column-gap:clamp(1.5rem,3vw,3rem);margin-top:clamp(2.5rem,6vw,4rem);display:grid}.post-main{grid-area:1/1;min-width:0}.post-aside{top:calc(var(--header-h) + var(--space-m));grid-area:1/2;position:sticky}.post-toc{display:none}.toc-label{border-bottom:var(--hairline) solid var(--border-strong);min-height:48px;font:400 var(--text-2xs) / 1.4 var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--text-faint);align-items:center;display:flex}.toc-list{margin:0;padding:0;list-style:none}.toc-item a{font-family:var(--font-prose);font-size:var(--text-base);color:var(--text-muted);transition:background-color var(--dur-2) var(--ease-out), color var(--dur-2) var(--ease-out);padding:.5rem .6rem;line-height:1.5;display:block}.toc-item a[aria-current=true]{background:var(--accent);color:var(--accent-on)}.toc-item--deep a{font-size:var(--text-sm);padding-left:1.4rem}.post-toc summary{justify-content:space-between;align-items:center;gap:var(--space-s);padding-block:var(--space-s);border-block:var(--hairline) solid var(--border-strong);font:400 var(--text-2xs) / 1.4 var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--text-muted);cursor:pointer;display:flex}.post-toc summary::-webkit-details-marker{display:none}.post-toc summary:after{content:"＋";font-size:var(--text-sm)}.post-toc[open] summary:after{content:"−"}.post-toc[open] summary{margin-bottom:var(--space-2xs)}@media (hover:hover) and (pointer:fine){.toc-item a:hover{color:var(--text)}}.post-head{align-items:flex-start;gap:var(--space-m);flex-direction:column;display:flex}.post-back{color:var(--text-muted)}.post-tags{font-family:var(--font-prose);font-size:var(--text-2xs);flex-wrap:wrap;gap:.4rem;display:flex}.post-tags span{border:var(--hairline) solid var(--border);color:var(--text-muted);padding:.3em .5em}.prose{font-family:var(--font-prose);font-size:var(--text-lg);color:var(--text);margin-top:clamp(2.5rem,6vw,4rem);line-height:1.95}.prose>*+*{margin-top:var(--space-m)}.prose p{text-indent:2em}.prose li p{text-indent:0}.prose p:has(>img:only-child){text-indent:0}.prose h2,.prose h3{font-weight:700;line-height:var(--leading-heading);letter-spacing:-.01em}.prose h2{font-size:var(--text-h3);margin-top:clamp(2.5rem,6vw,4rem)}.prose h3{font-size:var(--text-xl);margin-top:clamp(1.75rem,4vw,2.5rem)}.prose>h2:first-child,.prose>h3:first-child{margin-top:0}.prose ul,.prose ol{padding-left:1.4em}.prose li+li{margin-top:.4em}.prose blockquote{padding-left:var(--space-s);border-left:var(--hairline) solid var(--accent);color:var(--text-muted)}.prose hr{margin-block:var(--space-xl);border:0;border-top:var(--hairline) solid var(--border)}.prose mark{background:var(--accent);color:var(--accent-on);-webkit-box-decoration-break:clone;box-decoration-break:clone;padding-inline:.1em}.prose a{text-decoration:underline;text-decoration-thickness:var(--hairline);text-underline-offset:.18em}.prose a[target=_blank]:after{content:"↗";opacity:.75;margin-left:.15em;font-size:.8em}.prose img{border:var(--hairline) solid var(--border);margin-inline:auto}.prose figure.figure{width:fit-content;max-width:100%;margin-inline:auto}.prose .figure-open{cursor:zoom-in;width:100%;display:block}.prose figure.figure figcaption{margin-top:var(--space-2xs);font-family:var(--font-prose);font-size:var(--text-sm);text-align:center;color:var(--text-muted);line-height:1.7}.prose table{border-collapse:collapse;width:fit-content;max-width:100%;font-size:var(--text-base);margin-inline:auto;display:block;overflow-x:auto}.prose th,.prose td{border-bottom:1px solid var(--border);text-align:left;padding:.6em .8em}.prose th{font:400 var(--text-2xs) / 1.4 var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--text-muted)}.prose :not(pre)>code{border:1px solid var(--border);background:var(--bg-sunk);font-family:var(--font-mono);padding:.15em .38em;font-size:.88em}.prose figure.code{border:var(--hairline) solid var(--border-strong);background:var(--bg-sunk)}.prose .code-bar{justify-content:space-between;align-items:center;gap:var(--space-s);border-bottom:var(--hairline) solid var(--border);font:400 var(--text-2xs) / 1 var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--text-muted);padding:.4rem .4rem .4rem .75rem;display:flex}.prose .code-copy{border:var(--hairline) solid var(--border);min-height:30px;font:inherit;letter-spacing:inherit;text-transform:inherit;color:var(--text-muted);transition:background-color var(--dur-1) var(--ease-out), border-color var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out);padding-inline:.7rem}.prose .code-copy:active{transform:translateY(1px)}.prose .shiki,.prose .shiki span{color:var(--shiki-light)}html.dark .prose .shiki,html.dark .prose .shiki span{color:var(--shiki-dark)}.prose pre.shiki{padding:var(--space-s);font-family:var(--font-mono);font-size:var(--text-sm);font-variant-ligatures:none;-webkit-user-select:text;user-select:text;margin:0;line-height:1.7;overflow-x:auto}.prose pre.shiki code{font-family:inherit;font-size:inherit}@media (hover:hover) and (pointer:fine){.prose .code-copy:hover{background:var(--text);border-color:var(--text);color:var(--bg)}}.post-nav{gap:var(--space-m);padding-top:var(--space-s);border-top:var(--hairline) solid var(--border-strong);grid-template-columns:repeat(2,minmax(0,1fr));margin-top:clamp(3rem,8vw,5rem);display:grid}.post-nav-item{align-items:center;gap:var(--space-s);min-height:64px;padding-block:var(--space-xs);display:flex}.post-nav-item--next{text-align:right;grid-column:2;justify-content:flex-end}.post-nav-item svg{width:18px;height:18px;color:var(--text-faint);transition:transform var(--dur-2) var(--ease-out);flex:0 0 18px}.post-nav-copy{flex-direction:column;gap:.35rem;min-width:0;display:flex}.post-nav-label{font:400 var(--text-2xs) / 1 var(--font-mono);letter-spacing:var(--tracking-label);text-transform:uppercase;color:var(--text-faint)}.post-nav-title{font-family:var(--font-prose);font-weight:700;font-size:var(--text-sm);color:var(--text-muted);transition:color var(--dur-2) var(--ease-out)}@media (hover:hover) and (pointer:fine){.post-nav-item:hover .post-nav-title,.post-nav-item:hover svg{color:var(--text)}.post-nav-item--previous:hover svg{transform:translate(-3px)}.post-nav-item--next:hover svg{transform:translate(3px)}}.zoom{z-index:200;touch-action:none;position:fixed;inset:0;overflow:hidden}.zoom:focus{outline:none}.zoom-scrim{background:var(--scrim);opacity:0;animation:zoom-scrim-in var(--dur-3) var(--ease-out) forwards;position:absolute;inset:0}.zoom--closing .zoom-scrim{animation:zoom-scrim-out var(--dur-2) var(--ease-out) forwards}@keyframes zoom-scrim-in{to{opacity:1}}@keyframes zoom-scrim-out{to{opacity:0}}.zoom-image{border:var(--hairline) solid var(--border-strong);background:var(--bg-raised);cursor:zoom-out;position:absolute}.zoom--zoomed .zoom-image{cursor:grab}.zoom--zoomed .zoom-image:active{cursor:grabbing}.zoom-close{top:var(--space-s);right:var(--gutter);border:var(--hairline) solid var(--border-strong);background:var(--bg-raised);width:44px;height:44px;color:var(--text);transition:background-color var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out);place-items:center;display:grid;position:absolute}.zoom-close svg{width:20px;height:20px}@media (hover:hover) and (pointer:fine){.zoom-close:hover{background:var(--text);color:var(--bg)}}@media (width<=1000px){.post-layout{grid-template-columns:minmax(0, var(--post-measure))}.post-main{grid-area:2/1}.post-aside{display:none}.post-toc{grid-area:1/1;display:block}}@media (width<=860px){.post-list--timeline .post-link,.post-list--timeline .post-year{column-gap:var(--space-m);grid-template-columns:minmax(0,1fr) auto}.post-list--timeline .post-time{display:none}.post-list--timeline .post-meta time{display:inline}.post-list--timeline .post-row:before,.post-list--timeline .post-row:after,.post-list--timeline .post-year:before,.post-list--timeline .post-year:after{display:none}.post-list--timeline .post-year-label{grid-column:1}.post-nav{grid-template-columns:minmax(0,1fr)}.post-nav-item--next{text-align:left;grid-column:1;justify-content:flex-start}}@media (width<=1000px){.about-content{grid-template-columns:minmax(0,1fr);gap:clamp(2rem,6vw,3.5rem)}.about-content .about-detail{max-width:42rem}}@media (width<=860px){:root{--header-h:64px}.site-header{gap:var(--space-s)}.site-nav{font-size:var(--text-2xs);letter-spacing:.06em;gap:1rem}.hero{min-height:auto;padding-top:clamp(2.5rem,7vh,4.5rem);padding-bottom:var(--space-xl)}.hero-copy{max-width:100%}.scroll-cue{display:none}.project-main-link{gap:var(--space-s);grid-template-columns:2.25rem minmax(0,1fr) 40px}.project-arrow{width:38px;height:38px}.project-visual{opacity:1;width:100%;margin-top:var(--space-m);position:static;transform:none!important}.contact-row{gap:var(--space-s);grid-template-columns:2.25rem minmax(0,1fr) auto;min-height:76px}.contact-row .contact-icon,.contact-row>svg{width:24px;height:24px}.contact-name b{font-size:var(--text-lg)}}@media (width<=560px){.brand span{display:none}.site-nav{justify-content:flex-end;gap:.85rem}.hero-actions{gap:var(--space-m);margin-top:var(--space-l)}.btn{gap:1em;padding-inline:1em}.footer-meta{gap:var(--space-2xs);flex-direction:column}}}@layer motion{.site-motion .hero .enter{opacity:0;transition:opacity var(--dur-3) var(--ease-out), transform var(--dur-3) var(--ease-out);transition-delay:var(--d,0s);transform:translateY(14px)}.is-ready .hero .enter{opacity:1;transform:none}.hero .enter--eyebrow{--d:60ms}.hero .enter--sub{--d:.42s}.hero .enter--actions{--d:.52s}.hero .enter--cue{--d:.76s}.site-motion .hero h1 .line>span{transition:transform .94s var(--ease-out);transition-delay:var(--d,0s);transform:translateY(110%)}.is-ready .hero h1 .line>span{transform:translateY(0)}.hero h1 .line:first-child>span{--d:.12s}.hero h1 .line:nth-child(2)>span{--d:.25s}[data-reveal=lines] .line{white-space:nowrap;padding-bottom:.05em;display:block;overflow:hidden}.site-motion [data-reveal=lines] .line>span{transition:transform .88s var(--ease-out);transition-delay:var(--d,0s);display:block;transform:translateY(104%)}.site-motion [data-reveal=lines].is-in .line>span{transform:translateY(0)}[data-reveal=lines] .line:first-child>span{--d:0s}[data-reveal=lines] .line:nth-child(2)>span{--d:.11s}[data-reveal=lines] .line:nth-child(3)>span{--d:.22s}.site-motion [data-reveal=rows]>*{opacity:0;transform:translateY(9px)}.site-motion [data-reveal=rows].is-in>*{opacity:1;animation:rows-in .52s var(--ease-out) backwards;animation-delay:var(--d,0s);transform:none}@keyframes rows-in{0%{opacity:0;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}[data-reveal=rows]>:first-child{--d:40ms}[data-reveal=rows]>:nth-child(2){--d:.13s}[data-reveal=rows]>:nth-child(3){--d:.22s}[data-reveal=rows]>:nth-child(4){--d:.31s}[data-reveal=rows]>:nth-child(5){--d:.4s}[data-reveal=rows]>:nth-child(6){--d:.49s}.site-motion [data-reveal=rule] .section-index{position:relative}.site-motion [data-reveal=rule] .section-index:after{content:"";left:0;bottom:calc(var(--hairline) * -1);width:100%;height:var(--hairline);transform-origin:0;transition:transform .76s var(--ease-line);background:currentColor;position:absolute;transform:scaleX(0)}.site-motion [data-reveal=rule].is-in .section-index:after{transform:scaleX(1)}.scroll-mouse{animation:cue-drop 2.6s var(--ease-in-out) infinite}@keyframes cue-drop{0%{opacity:0;transform:translate(-50%)}22%{opacity:1}70%{opacity:1}to{opacity:0;transform:translate(-50%,21px)}}.live-dot:after{content:"";background:var(--live);animation:live-pulse 2.8s var(--ease-in-out) infinite;border-radius:50%;position:absolute;inset:0}@keyframes live-pulse{0%{opacity:.75;transform:scale(1)}70%{opacity:0;transform:scale(2.8)}to{opacity:0;transform:scale(2.8)}}}@font-face{font-family:Bricolage;src:url(/fonts/bricolage-bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Instrument;src:url(/fonts/instrument-regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Instrument;src:url(/fonts/instrument-bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Plex Mono;src:url(/fonts/plexmono-regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Noto Sans SC;src:url(/fonts/notosanssc.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Bricolage Fallback;src:local(Arial Bold),local(Arial);size-adjust:97%;ascent-override:96%;descent-override:28%;line-gap-override:0%}@font-face{font-family:Instrument Fallback;src:local(Arial);size-adjust:101%;ascent-override:96%;descent-override:25%;line-gap-override:0%}@font-face{font-family:Plex Mono Fallback;src:local(Consolas),local(Courier New);size-adjust:98%;ascent-override:105%;descent-override:28%;line-gap-override:0%}@font-face{font-family:Noto Sans SC Fallback;src:local(Microsoft YaHei),local(PingFang SC),local(Hiragino Sans GB);size-adjust:100%;ascent-override:100%;descent-override:20%;line-gap-override:0%}:root{--paper-000:#fffdf7;--paper-050:#f9f6ec;--paper-100:#f4f1e8;--paper-200:#e7e3d4;--paper-300:#d6d1be;--ink-900:#121715;--ink-800:#1b2320;--ink-700:#2b3431;--ink-500:#5b6560;--ink-300:#98a19c;--ink-200:#c2c7c2;--lime-400:#d8f76a;--lime-500:#c9f04b;--lime-600:#aad224;--ember-500:#ff6846;--ember-600:#d74224;--bg:var(--paper-100);--bg-raised:var(--paper-000);--bg-sunk:var(--paper-200);--text:var(--ink-900);--text-muted:color-mix(in oklab, var(--ink-900) 62%, var(--paper-100));--text-faint:color-mix(in oklab, var(--ink-900) 38%, var(--paper-100));--border:color-mix(in oklab, var(--ink-900) 20%, transparent);--border-strong:color-mix(in oklab, var(--ink-900) 78%, transparent);--hairline:1.5px;--accent:var(--lime-500);--accent-hover:var(--lime-600);--accent-on:var(--ink-900);--accent-soft:color-mix(in oklab, var(--lime-500) 26%, var(--bg));--signal:var(--ember-500);--signal-strong:var(--ember-600);--signal-on:var(--ink-900);--focus:var(--ember-600);--scrim:color-mix(in oklab, var(--bg) 82%, transparent);--live:#2f8f2a;--inverse-bg:var(--ink-900);--inverse-raised:var(--ink-800);--inverse-text:#f1f5ec;--inverse-muted:color-mix(in oklab, #f1f5ec 60%, var(--ink-900));--inverse-faint:color-mix(in oklab, #f1f5ec 34%, var(--ink-900));--inverse-border:oklab(96.4642% -.00747854 .0101547/.24);--inverse-border-strong:oklab(96.4642% -.00747854 .0101547/.7);--font-display:"Bricolage", "Bricolage Fallback", "Noto Sans SC", "Noto Sans SC Fallback", sans-serif;--font-text:"Instrument", "Instrument Fallback", "Noto Sans SC", "Noto Sans SC Fallback", sans-serif;--font-mono:"Plex Mono", "Plex Mono Fallback", "Noto Sans SC", "Noto Sans SC Fallback", monospace;--font-prose:system-ui, -apple-system, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--text-2xs:.6875rem;--text-xs:.75rem;--text-sm:.8125rem;--text-base:.9375rem;--text-lg:clamp(1rem, .95rem + .28vw, 1.1875rem);--text-xl:clamp(1.25rem, 1.1rem + .7vw, 1.75rem);--text-h3:clamp(1.375rem, 1.05rem + 1.5vw, 2rem);--text-h2:clamp(2.125rem, 1.35rem + 3.6vw, 4.75rem);--text-h1:clamp(3rem, .8rem + 9.6vw, 7.5rem);--text-display:clamp(3rem, 1.2rem + 11vw, 12rem);--leading-display:1.22;--leading-heading:1.28;--leading-body:1.6;--tracking-display:-.02em;--tracking-label:.11em;--space-3xs:.25rem;--space-2xs:.5rem;--space-xs:.75rem;--space-s:1rem;--space-m:1.5rem;--space-l:2.5rem;--space-xl:4rem;--space-2xl:6rem;--section-tight:clamp(2.5rem, 1.6rem + 3.6vw, 5rem);--section-normal:clamp(4.5rem, 2.8rem + 6.4vw, 9rem);--section-loose:clamp(6rem, 3.4rem + 10vw, 14rem);--dur-1:.13s;--dur-2:.24s;--dur-3:.44s;--dur-4:.76s;--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--ease-line:cubic-bezier(.72, 0, .2, 1);--gutter:clamp(20px, 5vw, 76px);--header-h:72px;--radius:0px}html.dark{--bg:#0b100e;--bg-raised:#121917;--bg-sunk:#070b09;--text:#e9efe6;--text-muted:oklab(64.9331% -.00926047 .00659442);--text-faint:oklab(44.6972% -.00905878 .00454524);--border:oklab(94.5086% -.00955525 .00958937/.18);--border-strong:oklab(94.5086% -.00955525 .00958937/.74);--accent:var(--lime-400);--accent-hover:var(--lime-500);--accent-on:#0b100e;--accent-soft:color-mix(in oklab, var(--lime-400) 18%, var(--bg));--signal:#ff7d5e;--signal-strong:#ff9b81;--signal-on:#0b100e;--focus:var(--lime-400);--scrim:oklab(16.6782% -.00877952 .00170791/.78);--live:#6fd45e;--inverse-bg:#050807;--inverse-raised:#0d1211;--inverse-text:#eef3ea;--inverse-muted:oklab(60.9924% -.00788437 .00599518);--inverse-faint:oklab(39.4522% -.00749811 .00360002);--inverse-border:oklab(95.7882% -.00850833 .00986427/.2);--inverse-border-strong:oklab(95.7882% -.00850833 .00986427/.64)}@media (prefers-reduced-motion:reduce){.site-content{clip-path:none;opacity:1;pointer-events:auto}*,:before,:after{transition-duration:.01ms!important;transition-delay:0s!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.hero .enter,.hero h1 .line>span,[data-reveal]>*,[data-reveal=lines] .line>span{opacity:1!important;transform:none!important}.site-motion [data-reveal=rule] .section-index:after{transform:scaleX(1)}.line-drawing__layer--trace{opacity:1}.line-drawing__credit{opacity:.85;transform:none}.site-content{clip-path:none!important;opacity:1!important}.loader-overlay{opacity:0!important;pointer-events:none!important}}
