@font-face{font-family:Catamaran Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/fonts/catamaran-latin.woff2) format("woff2")}:root{color-scheme:dark;--background: #0c0b0b;--panel: #10100f;--foreground: #f4f3f1;--secondary: #bab8b5;--muted: #a6a39e;--line: #343230;--signal: #e9d0ae;--edge: clamp(24px, 5.38vw, 104px);--ease: cubic-bezier(.16, 1, .3, 1);font-family:Catamaran Variable,sans-serif;font-synthesis:none;font-weight:400;background:var(--background);color:var(--foreground)}*{box-sizing:border-box}body{margin:0}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit}a{color:inherit;text-decoration:none;text-underline-offset:.3em}button{border:0;cursor:pointer;background:none}button:disabled{cursor:default;opacity:.5}a,button{touch-action:manipulation}button,a{transition:color .18s var(--ease),opacity .18s var(--ease)}@media(hover:hover){a:hover,button:hover{color:#fff}}button:active,.text-link:active{transform:translateY(1px)}:focus-visible{outline:2px solid var(--signal);outline-offset:6px;border-radius:2px}::selection{background:#d6c1a1;color:#10100f}svg{display:block;width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}[hidden]{display:none!important}.skip-link{position:fixed;top:12px;left:12px;z-index:10;padding:12px 20px;background:var(--foreground);color:var(--background);transform:translateY(-180%)}.skip-link:focus{transform:translateY(0)}.page-frame{position:relative;isolation:isolate;display:grid;grid-template-rows:auto 1fr auto;min-height:max(720px,100svh);overflow:clip}.scene-viewport{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;overflow:hidden;pointer-events:none}.scene-viewport:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,#0c0b0b66,#0c0b0b2e 36%,transparent 60%)}.neural-scene{position:absolute;top:0;right:0;bottom:0;left:0}.neural-scene canvas{position:absolute;top:0;right:0;bottom:0;left:0;display:block;width:100%;height:100%;opacity:0;transition:opacity .4s ease-out}.neural-scene.is-ready canvas{opacity:1}.neural-scene.is-static{background:url(/art/neural-field.jpg) center / cover no-repeat}.neural-scene.is-static canvas{display:none}.page-frame.has-scene{cursor:grab;touch-action:pan-y pinch-zoom}.page-frame.has-scene.is-pointing{cursor:pointer}.page-frame.has-scene.is-dragging{cursor:grabbing;-webkit-user-select:none;user-select:none}.has-scene :is(.hero-copy>*,.site-header,.site-footer){cursor:auto}.hero-copy>:is(.eyebrow,h1,.intro){width:fit-content}.site-header{position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between;gap:32px;padding:clamp(28px,4.6vh,64px) var(--edge) 0}.wordmark,.panel-brand{font-size:clamp(24px,1.9vw,32px);line-height:1;letter-spacing:-.04em;white-space:nowrap}.wordmark{display:flex;align-items:center;min-height:44px}.entry-nav{display:flex;gap:clamp(26px,2.6vw,48px);align-items:center}.entry-nav a{display:inline-flex;align-items:center;gap:8px;min-height:44px;white-space:nowrap;font-size:clamp(16px,1.2vw,19px);letter-spacing:-.01em;color:#d0ceca}.entry-nav a svg{width:13px;height:13px;color:var(--secondary)}@media(hover:hover){.entry-nav a:hover{color:var(--signal)}}.entry-nav [aria-current]{color:var(--foreground);text-decoration:underline;text-decoration-color:var(--signal);text-underline-offset:8px}@media(hover:hover){.entry-nav a:hover svg{transform:translate(1px,-1px)}}.entry-nav svg{transition:transform .18s var(--ease)}#main{outline:none;display:grid;min-width:0}.hero{display:flex;align-items:center;padding:clamp(64px,8vh,112px) var(--edge)}.hero-copy{position:relative;z-index:1;width:54%;max-width:760px;transform:translateY(-8px)}.eyebrow{margin:0 0 36px;color:#bbb8b2;font-size:clamp(10px,.78vw,13px);font-weight:500;line-height:1.5;letter-spacing:.19em}h1{margin:0;font-size:clamp(60px,5.7vw,100px);font-weight:400;line-height:1.04;letter-spacing:-.025em}h1 span{display:block;white-space:nowrap}h1 span+span{color:var(--secondary)}@supports ((-webkit-background-clip: text) or (background-clip: text)){h1 span{--lit: color-mix(in srgb, var(--glint) calc(var(--li, .6) * 100%), var(--mid));background-image:radial-gradient(circle at var(--lx, 135%) var(--ly, 20%),transparent calc(var(--rr, 0px) - 320px),rgb(255 226 184 / min(var(--ri, 0),var(--ring-cap, .6))) var(--rr, 0px),transparent calc(var(--rr, 0px) + 110px)),radial-gradient(circle at var(--sx, -100vw) var(--sy, 0px),rgb(255 228 188 / var(--si, 0)),transparent 4em),radial-gradient(circle at var(--lx, 135%) var(--ly, 20%),var(--lit),var(--mid) calc(var(--lr, 120vw) * .46),var(--shade) calc(var(--lr, 120vw) * .9));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}h1 span:first-child{--glint: #fff6e8;--mid: #f2efea;--shade: #b0aca6}h1 span+span{--glint: #e9d0ae;--mid: #bdb9b3;--shade: #7c7873;--ring-cap: .45}h1 span::selection{-webkit-text-fill-color:#10100f}}@media(forced-colors:active){h1 span{background:none;-webkit-text-fill-color:currentColor}}.intro{margin:28px 0 48px;font-size:clamp(18px,1.45vw,24px);letter-spacing:0;line-height:1.5;color:#bbb8b2}.text-link{display:inline-flex;align-items:center;justify-content:space-between;gap:28px;padding:0 0 9px;min-height:44px;border-bottom:1px solid #8d8881;font-size:clamp(20px,1.44vw,24px);line-height:1.4}.text-link svg{width:22px;height:22px;transition:transform .24s var(--ease)}@media(hover:hover){.text-link:hover{color:var(--signal);border-color:var(--signal)}}@media(hover:hover){.text-link:hover svg{transform:translate(4px)}}.site-footer{position:relative;margin:0 var(--edge);padding-bottom:max(24px,env(safe-area-inset-bottom));display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:24px;z-index:2}.footer-location{grid-column:3;justify-self:end;color:#c1bdb7;font-size:13px;letter-spacing:.2em;white-space:nowrap}.scene-controls{grid-column:1;margin-left:-3px;display:flex;gap:20px;align-items:center}.scene-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:0 3px;min-height:44px;min-width:44px;color:var(--muted);font-size:14px;line-height:1.2}.motion-toggle{min-width:66px}@media(hover:hover){.scene-button:hover{color:var(--foreground)}}.scene-button svg{width:12px;height:12px}.signal-dot{width:4px;height:4px;border-radius:50%;background:var(--signal);transition:transform .24s var(--ease)}@media(hover:hover){.connect-button:hover .signal-dot{transform:scale(1.5)}}.motion-toggle .play-icon{display:none}.motion-toggle[data-paused=true] .play-icon{display:block}.motion-toggle[data-paused=true] .pause-icon{display:none}.drag-hint{color:var(--muted);font-size:14px;line-height:1.2;white-space:nowrap;opacity:0;transition:opacity .4s ease-out}.drag-hint.is-shown{opacity:.8}dialog{position:fixed;top:0;right:0;bottom:0;left:0;margin:0;padding:0;width:100%;max-width:none;height:100%;max-height:none;border:0;background:var(--panel);color:var(--foreground);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#514d46 var(--panel)}dialog::backdrop{background:#0c0b0b}dialog{transition:background-color .2s ease-in,overlay .34s allow-discrete,display .34s allow-discrete}dialog[open]{transition:background-color .24s ease-out,overlay 0s allow-discrete,display 0s allow-discrete}dialog::backdrop{opacity:0;transition:opacity .22s ease-out .12s}dialog[open]::backdrop{opacity:1;transition:opacity .24s ease-out}.panel-header{transition:background-color .24s ease-out,border-color .24s ease-out}.panel-actions,.panel-nav--stacked,#panel-content,.panel-footer,dialog:before{transition:opacity .14s ease-in}dialog:not([open]){pointer-events:none;background-color:transparent}dialog:not([open]) .panel-header{background-color:transparent;border-color:transparent}dialog:not([open]) :is(.panel-actions,.panel-nav--stacked,#panel-content,.panel-footer),dialog:not([open]):before{opacity:0}@starting-style{dialog[open]{background-color:transparent}dialog[open]::backdrop{opacity:0}dialog[open] .panel-header{background-color:transparent;border-color:transparent}}dialog:before{content:"";position:absolute;z-index:2;inset:0 0 auto;height:100vh;background:radial-gradient(70vw 55vh at 86% -6vh,rgba(233,208,174,.06),transparent 70%);pointer-events:none}.panel-shell{min-height:100%;display:flex;flex-direction:column;padding:0 var(--edge) max(24px,env(safe-area-inset-bottom));max-width:2000px;margin:auto}.panel-header{display:flex;align-items:center;justify-content:space-between;gap:24px}.panel-header{position:sticky;top:0;z-index:1;padding:clamp(28px,4.6vh,64px) 0 clamp(20px,3vh,32px);background:var(--panel);border-bottom:1px solid var(--line)}.panel-actions{display:flex;align-items:center;gap:40px}.panel-nav--stacked{display:none}.close-button{display:flex;align-items:center;gap:20px;min-height:44px;padding:0 0 0 12px;font-size:18px}.close-button svg{width:20px;height:20px}#panel-content{width:min(100%,760px);margin:76px auto 100px;flex:1}.panel-title:focus{outline:none}.panel-title{font-size:clamp(38px,4.3vw,68px);line-height:1.12;letter-spacing:-.035em;font-weight:400;margin:0 0 26px;text-wrap:balance}.panel-lead,.notes-intro{color:var(--secondary);font-size:clamp(19px,1.8vw,25px);line-height:1.5;margin:0 0 48px;max-width:55ch}.directory-list{display:grid}.directory-row{display:grid;grid-template-columns:1fr auto;gap:28px;padding:30px 0;border-top:1px solid var(--line);align-items:center}.directory-row:last-child{border-bottom:1px solid var(--line)}.row-title{display:block;font-size:clamp(27px,2.8vw,40px);line-height:1.2;letter-spacing:-.025em}.row-subtitle{display:block;color:var(--muted);margin-top:8px;font-size:18px;line-height:1.5}.row-meta{display:block;margin-top:10px;color:#8d8881;font-size:14px;line-height:1.4;letter-spacing:.01em}.directory-row>svg{width:24px;height:24px;transition:transform .2s var(--ease)}@media(hover:hover){.directory-row[data-external]:hover>svg{transform:translate(3px,-3px)}}@media(hover:hover){.directory-row:not([data-external]):hover>svg{transform:translate(4px)}}@media(hover:hover){.directory-row:hover .row-title{color:var(--signal)}}.writing-empty{margin-top:70px;border-top:1px solid var(--line);padding-top:28px;color:var(--muted);font-size:21px}.about-copy{font-size:clamp(21px,1.65vw,25px);line-height:1.65;color:var(--secondary);max-width:52ch}.about-copy p{margin:0 0 30px}.about-aside{border-top:1px solid var(--line);padding-top:30px;margin-top:48px;font-size:19px;color:var(--secondary)}.about-aside h3{color:var(--foreground);font:inherit;margin:0 0 12px}.about-aside p{margin:0;max-width:60ch;line-height:1.6}.panel-footer{display:flex;justify-content:space-between;gap:24px;font-size:14px;color:var(--muted)}.intro,.row-subtitle,.about-copy p,.about-aside p,.writing-empty{text-wrap:pretty}.row-title,.panel-lead{text-wrap:balance}@media(min-width:1101px){dialog[data-view=projects] #panel-content{width:100%;display:grid;grid-template-columns:minmax(260px,.75fr) minmax(0,1.25fr);grid-template-rows:auto 1fr;column-gap:clamp(64px,8vw,160px);align-content:start}dialog[data-view=projects] .panel-title{grid-column:1;grid-row:1;font-size:clamp(40px,3.6vw,58px);max-width:12ch}dialog[data-view=projects] .panel-lead{grid-column:1;grid-row:2;font-size:21px;max-width:26ch}dialog[data-view=projects] .directory-list{grid-column:2;grid-row:1 / span 2;align-self:start}dialog[data-view=projects] .row-title{font-size:clamp(28px,2.4vw,38px)}.row-subtitle{max-width:44ch}}@media(max-width:1100px)and (min-width:701px){.entry-nav{gap:20px}.entry-nav a{font-size:15px;gap:6px}.wordmark,.panel-brand{font-size:25px}h1{font-size:clamp(50px,5.8vw,64px)}.intro{font-size:20px}}@media(max-width:700px),(max-width:1100px)and (max-aspect-ratio:4/3){.page-frame{min-height:max(840px,100svh)}.hero{display:block;padding:clamp(64px,7vh,100px) var(--edge) 0}.hero-copy{width:100%;max-width:640px;transform:none}.hero:after{content:"";display:block;height:clamp(330px,60vw,560px)}h1{font-size:clamp(52px,7.5vw,80px)}.neural-scene.is-static{background-position:80% calc(100% - 72px);background-size:190% auto}.scene-viewport:after{background:linear-gradient(180deg,var(--background),#0c0b0bf5 31%,#0c0b0b55 48%,transparent 63%,#0c0b0b18 82%,var(--background))}}@media(max-width:700px){:root{--edge: 26px}.site-header{padding-top:max(24px,env(safe-area-inset-top));display:block}.wordmark{width:fit-content;font-size:28px}.entry-nav{justify-content:space-between;gap:16px;margin-top:12px}.entry-nav a{font-size:15px;gap:6px}.entry-nav a svg{width:11px;height:11px}.hero{padding-top:48px}.hero:after{height:clamp(280px,55vw,360px)}.eyebrow{font-size:10px;letter-spacing:.17em;margin-bottom:24px}h1{font-size:clamp(46px,10.9vw,70px);line-height:1.07}.intro{margin:24px 0 32px;font-size:clamp(17px,4.5vw,19px)}.text-link{font-size:19px;gap:28px;padding-bottom:7px}.text-link svg{width:19px;height:19px}.site-footer{gap:10px;padding-bottom:max(20px,env(safe-area-inset-bottom))}.footer-location{font-size:10px;letter-spacing:.14em}.scene-controls{gap:8px}.drag-hint{display:none}.scene-button{font-size:13px;gap:6px}.motion-toggle{min-width:60px}.scene-button svg{width:11px;height:11px}.panel-header{padding:max(24px,env(safe-area-inset-top)) 0 20px}.panel-brand{font-size:28px}.panel-header .panel-nav{display:none}.panel-nav--stacked{display:flex}.close-button{font-size:16px;gap:12px}#panel-content{margin:36px 0 72px}.panel-title{font-size:42px;margin-bottom:24px}.panel-lead,.notes-intro{font-size:20px;margin-bottom:34px}.directory-row{padding:25px 0;gap:20px}.row-title{font-size:30px}.row-subtitle{font-size:17px}.panel-footer{flex-direction:column;gap:6px;font-size:13px}.about-copy{font-size:21px}.about-aside{font-size:18px}.writing-empty{margin-top:48px;font-size:19px}}@media(max-width:600px){.entry-nav{justify-content:flex-start;gap:32px}.entry-nav a{font-size:16px}}@media(max-width:370px){:root{--edge: 21px}h1{font-size:43px}.entry-nav{gap:26px}.site-footer{gap:8px}.scene-controls{gap:5px}.scene-button{font-size:12px}.footer-location{font-size:9px}}@media(prefers-reduced-motion:no-preference){html:not(.is-returning) .hero-copy>:not(h1){animation:rise .68s var(--ease) both}html:not(.is-returning) .hero-copy h1 span{animation:dawn .68s var(--ease) both}html:not(.is-returning) .hero-copy>.eyebrow{animation-delay:40ms}html:not(.is-returning) .hero-copy h1 span:first-child{animation-delay:.1s}html:not(.is-returning) .hero-copy h1 span+span{animation-delay:.16s}html:not(.is-returning) .hero-copy>.intro{animation-delay:.2s}html:not(.is-returning) .hero-copy>.text-link{animation-delay:.28s}html:not(.is-returning) .page-frame>.site-header{animation:fade .6s ease-out both}html:not(.is-returning) .page-frame>.site-footer{animation:fade .6s .42s ease-out both}dialog[open] :is(.panel-actions,.panel-nav--stacked,.panel-footer),dialog[open]:before{animation:fade .32s .16s ease-out both}dialog[open] #panel-content{animation:rise .52s .16s var(--ease) both}}@keyframes rise{0%{opacity:0;transform:translateY(10px)}}@keyframes dawn{0%{filter:brightness(.35);transform:translateY(10px)}}@keyframes fade{0%{opacity:0}}@media(prefers-reduced-motion:reduce){*,*:before,*:after,::backdrop{animation-duration:.01ms!important;transition-duration:.01ms!important;transition-delay:0s!important}.text-link:hover svg,.entry-nav a:hover svg,.directory-row[data-external]:hover>svg,.directory-row:not([data-external]):hover>svg{transform:none}}:root{background:var(--panel)}.writing-page{min-height:100svh;display:flex;flex-direction:column;background:radial-gradient(70vw 55vh at 86% -6vh,rgba(233,208,174,.06),transparent 70%) no-repeat}.writing-header{padding-bottom:32px}.writing-main{width:min(1040px,calc(100% - 2 * var(--edge)));margin:clamp(64px,8vw,120px) auto 120px;flex:1;outline:none}.writing-title{font-size:clamp(44px,5vw,68px);font-weight:400;line-height:1.12;letter-spacing:-.035em}.writing-intro>p{margin:24px 0 72px;color:var(--secondary);font-size:clamp(20px,2vw,25px);line-height:1.5;text-wrap:balance}.writing-list{list-style:none;margin:0;padding:0}.writing-row{display:grid;grid-template-columns:170px minmax(0,1fr) 24px;gap:32px;align-items:start;padding:38px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.writing-list li+li .writing-row{border-top:0}.writing-row time{color:var(--muted);font-size:17px;padding-top:4px}.writing-row h2{font-family:PingFang SC,Noto Sans CJK SC,Microsoft YaHei,sans-serif;font-size:30px;font-weight:400;line-height:1.4;margin:0 0 15px;transition:color .18s var(--ease)}.writing-row p{font-family:PingFang SC,Noto Sans CJK SC,Microsoft YaHei,sans-serif;color:var(--secondary);font-size:16px;line-height:1.8;margin:0;text-wrap:pretty}.writing-row>svg{margin-top:10px;width:24px;height:24px;transition:transform .18s var(--ease)}@media(hover:hover){.writing-row:hover h2{color:var(--signal)}}@media(hover:hover){.writing-row:hover>svg{transform:translate(4px)}}.writing-footer{display:flex;justify-content:space-between;gap:24px;color:var(--muted);margin:0 var(--edge);padding:28px 0 max(28px,env(safe-area-inset-bottom));border-top:1px solid var(--line);font-size:15px}.writing-main--article{margin-top:clamp(40px,5vw,72px)}.article-header,.article-body,.article-end{width:min(100%,720px);margin-inline:auto}.back-link{display:inline-flex;align-items:center;gap:10px;min-height:44px;font-size:17px;color:var(--secondary)}.article-title{font-family:PingFang SC,Noto Sans CJK SC,Microsoft YaHei,sans-serif;font-size:clamp(38px,4vw,58px);font-weight:400;line-height:1.3;letter-spacing:.015em;margin:36px 0 26px}.article-meta{display:flex;gap:10px 24px;flex-wrap:wrap;align-items:baseline;font-size:16px;line-height:1.5;color:var(--muted)}.article-meta a{text-decoration:underline;text-decoration-color:var(--line)}.article-cover{margin:48px 0 64px}.article-cover img,.article-body img{display:block;width:100%;height:auto}.article-body{font-family:PingFang SC,Noto Sans CJK SC,Microsoft YaHei,sans-serif;font-size:18px;line-height:1.95;letter-spacing:.015em;color:#d0ceca;overflow-wrap:break-word}.article-body p{margin:0 0 1.5em;text-wrap:pretty}.article-body h2{color:var(--foreground);font-size:26px;line-height:1.5;font-weight:500;letter-spacing:0;margin:2.9em 0 1em;text-wrap:balance}.article-body strong{font-weight:600;color:var(--foreground)}.article-body a{color:var(--signal);text-decoration:underline;text-decoration-color:#8d8881;overflow-wrap:anywhere}.article-body p>a{display:block;font-size:.9em;margin-top:.5em}.article-body ul{padding-left:1.5em;margin:0 0 1.5em}.article-body li{padding-left:.3em;margin:.5em 0}.article-body figure{margin:36px 0 44px}.article-body figure a{display:block;cursor:zoom-in}.article-body .article-figure--compact{max-width:420px;margin-inline:auto}.article-end{display:flex;justify-content:space-between;align-items:center;gap:20px;border-top:1px solid var(--line);margin-top:64px;padding-top:24px;font-size:16px;color:var(--secondary)}@media(max-width:700px){.writing-header{padding-bottom:12px}.writing-main{margin-top:48px;margin-bottom:80px}.writing-intro>p{margin-bottom:44px}.writing-row{grid-template-columns:minmax(0,1fr) 24px;gap:16px;padding:28px 0 32px}.writing-row time{grid-column:1 / -1;font-size:15px;padding:0}.writing-row h2{font-size:27px;margin-bottom:12px}.writing-row>svg{margin-top:7px}.writing-footer{flex-direction:column;gap:6px;font-size:14px}.writing-main--article{margin-top:26px}.article-title{margin-top:28px;margin-bottom:22px}.article-meta{font-size:15px;gap:8px 20px}.article-cover{margin:32px 0 36px}.article-body{font-size:17px;line-height:1.9;letter-spacing:.01em}.article-body h2{font-size:23px;margin-top:2.4em}.article-body figure{margin:28px 0 32px}.article-end{margin-top:44px;flex-direction:column;align-items:flex-start;gap:8px}}@media(prefers-reduced-motion:reduce){.writing-row:hover>svg{transform:none}}@media print{:root{color-scheme:light}.writing-page{background:#fff;color:#000}.writing-header,.writing-footer,.back-link,.article-end{display:none}.writing-main{width:100%;margin:0}.article-title,.article-body,.article-body h2,.article-body strong{color:#000}.article-body a,.article-meta{color:#333}.article-body figure{break-inside:avoid}}
