@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*),[data-astro-transition-scope]{animation:none!important}}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/_astro/archivo-vietnamese-standard-normal.rJmnGBSt.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/_astro/archivo-latin-ext-standard-normal.7khWdh9v.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/_astro/archivo-latin-standard-normal.DY7AcnAa.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:DM Sans Variable;font-style:normal;font-display:swap;font-weight:100 1000;src:url(/_astro/dm-sans-latin-ext-wght-normal.BOFOeGcA.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:DM Sans Variable;font-style:normal;font-display:swap;font-weight:100 1000;src:url(/_astro/dm-sans-latin-wght-normal.Xz1IZZA0.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2)format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-500-normal.Ael50iVv.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2)format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-500-normal.CZ70TYgx.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{color-scheme:dark;--bg:#171b19;--surface:#232a24;--surface-hover:#2c352d;--text:#dcdac9;--muted:#b1b5a5;--faint:#98a18f;--line:#3f4a40;--accent:#ce967d;--blue:#becaa6;--sans:"DM Sans Variable", sans-serif;--heading:"Archivo Variable", sans-serif;--mono:"IBM Plex Mono", monospace}:root[data-theme=light]{color-scheme:light;--bg:#e8e4d7;--surface:#dcd9c9;--surface-hover:#cfcebc;--text:#29352c;--muted:#485546;--faint:#4c5947;--line:#b9beac;--accent:#8b523d;--blue:#4d6340}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:32px}body{background:var(--bg);color:var(--text);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.6}a{color:inherit;text-decoration:none}button,input{font:inherit}button{color:inherit;cursor:pointer;border:0}button,input{-webkit-tap-highlight-color:transparent}svg{flex-shrink:0}::selection{background:var(--accent);color:var(--bg)}:focus-visible{outline:2px solid var(--accent);outline-offset:7px}[hidden]{display:none!important}h1,h2,h3,p{margin:0}h1,h2,h3{font-family:var(--heading);font-weight:720;font-stretch:85%}h1{letter-spacing:-.06em;font-size:clamp(52px,8vw,112px);line-height:.98}.mono{font-family:var(--mono)}.accent{color:var(--accent)}.eyebrow{color:var(--muted);font-family:var(--mono);letter-spacing:.09em;font-size:11px;line-height:1.5}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{background:var(--text);color:var(--bg);z-index:100;padding:10px 18px;position:fixed;top:10px;left:10px;transform:translateY(-160%)}.skip-link:focus{transform:none}.site-frame{flex-direction:column;max-width:1304px;min-height:100dvh;margin:0 auto;padding:0 52px;display:flex}.site-header{border-bottom:1px solid var(--line);grid-template-columns:1fr auto 1fr;align-items:center;gap:40px;height:110px;display:grid}.wordmark{width:109px;color:var(--text);display:inline-flex}.wordmark-art{width:100%;height:auto;display:block;overflow:visible}.wordmark-seam{fill:var(--bg)}.wordmark-ink{fill:var(--accent);opacity:0;transition:opacity .2s}.interactive-wordmark:hover .wordmark-ink{opacity:1}.main-nav{gap:33px;font-size:13px;display:flex}.nav-link{color:var(--muted);align-items:center;min-height:40px;padding:12px 0;display:inline-flex;position:relative}.nav-link:after{content:"";background:var(--accent);width:0;height:2px;transition:width .2s;position:absolute;bottom:4px;left:0}.nav-link:hover,.nav-link.active{color:var(--text)}.nav-link.active:after,.nav-link:hover:after{width:100%}.header-actions{justify-content:flex-end;align-items:center;gap:20px;display:flex}.search-trigger,.theme-toggle{min-width:24px;min-height:38px;color:var(--muted);background:0 0;align-items:center;gap:9px;padding:8px 0;display:none}.js .search-trigger,.js .theme-toggle{display:flex}.search-trigger:hover,.theme-toggle:hover{color:var(--accent)}kbd{font:10px var(--mono);border:1px solid var(--line);color:var(--muted);padding:2px 5px;line-height:1.5}.theme-sun,.theme-moon{display:flex}[data-theme=dark] .theme-moon,[data-theme=light] .theme-sun{display:none}main{flex:1;min-width:0;padding-bottom:120px}main:focus{outline:none}.text-link,.subtle-link,.large-text-link{color:var(--text);justify-content:space-between;align-items:center;gap:14px;line-height:1.5;display:inline-flex}.text-link{border-bottom:1px solid var(--accent);background:0 0;padding:0 0 6px;font-size:14px}.text-link svg,.large-text-link svg{transition:transform .25s}.text-link:hover,.large-text-link:hover{color:var(--accent)}.text-link:hover svg,.large-text-link:hover svg{transform:translate(5px)}.large-text-link{border-bottom:1px solid var(--line);min-width:228px;padding:11px 0;font-size:22px;font-weight:500}.masthead{border-bottom:1px solid var(--line);padding-top:40px;padding-bottom:38px}.masthead-label{color:var(--muted);justify-content:space-between;margin-bottom:28px;font-size:11px;display:flex}.hero-composition{grid-template-columns:minmax(0,1fr) 300px;align-items:center;gap:70px;display:grid}.display-name{width:60%;max-width:320px;line-height:0}.hero-description{color:var(--muted);margin-top:29px;font-size:17px;line-height:1.7}.hero-actions{flex-wrap:wrap;align-items:center;gap:28px;margin-top:25px;display:flex}.hero-pill{background:var(--text);min-height:46px;color:var(--bg);-webkit-text-fill-color:var(--bg);border-radius:999px;justify-content:center;align-items:center;gap:22px;padding:11px 21px;font-size:13px;font-weight:500;transition:transform .3s cubic-bezier(.22,.61,.36,1),background .3s;display:inline-flex}.hero-pill:hover{background:var(--accent);transform:translateY(-2px)}.hero-project-link{min-height:40px;color:var(--muted);align-items:center;gap:12px;font-size:13px;display:inline-flex}.hero-project-link:hover{color:var(--accent)}.hero-object{pointer-events:none;width:300px;height:330px;margin:0;position:relative}.hero-object canvas,.object-fallback{width:100%;height:100%;display:block;position:absolute;inset:0}.hero-object canvas{display:none}.hero-object.render-ready canvas{display:block}.hero-object.render-ready .object-fallback{display:none}.js .hero-description{animation:.6s cubic-bezier(.22,.61,.36,1) both hero-entry}.js .hero-actions{animation:.6s cubic-bezier(.22,.61,.36,1) .12s both hero-entry}.hero-actions:focus-within{animation:none}@keyframes hero-entry{0%{opacity:0;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}.research-section{margin-top:69px}.section-heading{justify-content:space-between;align-items:baseline;gap:20px;padding-bottom:26px;display:flex}.section-heading h2{letter-spacing:-.045em;font-size:35px}.section-heading>span{color:var(--muted);font-size:11px}.research-spread{grid-template-columns:1.25fr 1fr;gap:68px;display:grid}.research-feature{min-width:0;display:block}.feature-2{margin-top:112px}.cover{aspect-ratio:18/13;position:relative;overflow:hidden}.poster{width:100%;height:100%;display:block}.poster-type{font-family:var(--heading);font-stretch:90%}.poster-mono{font-family:var(--mono)}.poster-shift{transform-origin:50%;transition:transform .6s cubic-bezier(.2,.8,.2,1)}.research-feature:hover .poster-shift,.research-feature:focus-visible .poster-shift{transform:translate(var(--shift-x,8px), var(--shift-y,-6px))}.cover-open{background:var(--bg);width:64px;height:64px;color:var(--text);place-items:center;transition:background .25s,color .25s;display:grid;position:absolute;bottom:0;right:0}.research-feature:hover .cover-open{background:var(--accent);color:var(--bg)}.feature-meta{color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:10px;margin-top:21px;font-size:10px;display:flex}.feature-meta>span:first-child{color:var(--accent)}.research-feature h3{letter-spacing:-.045em;margin-top:16px;font-size:clamp(27px,2.8vw,39px);font-weight:660;line-height:1.12}.research-feature:hover h3{text-underline-offset:6px;text-decoration:underline 1px}.ctf-section{margin-top:80px}.ctf-all{color:var(--muted);align-items:center;gap:12px;min-height:36px;font-size:11px;display:inline-flex}.ctf-all:hover{color:var(--accent)}.ctf-list{border-top:1px solid var(--line)}.ctf-preview{border-bottom:1px solid var(--line);grid-template-columns:150px minmax(0,1fr) 24px;align-items:center;gap:32px;padding:28px 0;display:grid}.ctf-cover{aspect-ratio:18/13;overflow:hidden}.ctf-copy h3{letter-spacing:-.04em;margin:9px 0;font-size:35px;line-height:1.2}.ctf-copy p{color:var(--muted);max-width:680px;font-size:14px}.ctf-preview>svg,.ctf-preview:hover h3{color:var(--accent)}.ctf-preview:hover .poster-shift{transform:translate(5px,-3px)}.site-footer{border-top:1px solid var(--line);grid-template-columns:1fr 1fr auto;align-items:center;gap:25px;padding:38px 0;display:grid}.footer-brand{font:800 29px/.9 var(--heading);letter-spacing:-.06em;font-stretch:75%}.footer-brand .accent{margin-left:5px;font-weight:500}.footer-copyright{color:var(--faint);font-size:11px}.site-footer>div{color:var(--muted);gap:24px;font-size:11px;display:flex}.site-footer a:hover{color:var(--accent)}.page-intro{padding:73px 0 60px}.page-intro h1{margin-top:22px;font-weight:780;font-stretch:75%}.page-intro p{color:var(--muted);margin-top:26px;font-size:16px}.page-heading-line{justify-content:space-between;align-items:center;gap:24px;display:flex}.entry-count{color:var(--muted);white-space:nowrap;align-self:flex-end;padding-bottom:12px;font-size:12px}.archive-controls{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:40px;padding-bottom:25px;display:none}.js .archive-controls{display:flex}.filter-group{gap:27px;display:flex}.filter-button{color:var(--muted);background:0 0;border-bottom:2px solid #0000;align-items:center;gap:10px;padding:9px 0;font-size:13px;display:inline-flex}.filter-button span{color:var(--faint);font-size:10px}.filter-button.selected{color:var(--text);border-bottom-color:var(--accent)}.filter-button:hover{color:var(--text)}.search-box{width:300px;min-width:0;color:var(--muted);border-bottom:1px solid var(--line);align-items:center;gap:12px;padding:10px 0;display:flex}.search-box:focus-within{border-color:var(--accent)}.search-box input{color:var(--text);background:0 0;border:none;outline:none;width:100%;min-width:0;padding:2px 0;font-size:12px}input::placeholder{color:var(--faint);opacity:1}.archive-meta{color:var(--faint);flex-wrap:wrap;justify-content:space-between;gap:12px;padding:22px 0 12px;font-size:10px;display:flex}.archive-entry{border-bottom:1px solid var(--line)}.archive-entry>a{grid-template-columns:47px minmax(0,1fr) 174px 22px;align-items:center;gap:34px;padding:38px 0;display:grid}.archive-number{color:var(--accent);align-self:flex-start;margin-top:8px;font-size:12px}.archive-entry-content{min-width:0}.entry-meta{color:var(--muted);flex-wrap:wrap;align-items:center;gap:16px;font-size:11px;display:flex}.category-label{font-family:var(--mono);color:var(--accent);font-size:10px}.category-label.research{color:var(--blue)}.archive-entry h2{letter-spacing:-.045em;margin:16px 0 15px;font-size:clamp(27px,3vw,40px);font-weight:630;line-height:1.15}.archive-entry p{color:var(--muted);max-width:620px;font-size:14px}.archive-tags,.article-tags{color:var(--faint);flex-wrap:wrap;gap:14px;font-size:10px;display:flex}.archive-tags{margin-top:15px}.archive-art{aspect-ratio:18/13;width:174px;transition:transform .4s cubic-bezier(.2,.8,.2,1);transform:rotate(-4deg)}.archive-entry:nth-child(2n) .archive-art{transform:rotate(4deg)}.archive-entry:hover .archive-art,.archive-entry a:focus-visible .archive-art{transform:rotate(0)scale(1.06)}.archive-entry a>svg,.archive-entry a:hover h2{color:var(--accent)}.empty-state{text-align:center;border-bottom:1px solid var(--line);padding:80px 0}.empty-state h2{letter-spacing:-.04em;font-size:35px}.empty-state p{color:var(--muted);margin:15px 0 26px;font-size:14px}.page-end-link{margin-top:40px}.noscript-note{color:var(--muted);margin-top:22px;font-size:13px}.project-card{border-top:1px solid var(--line);grid-template-columns:47px minmax(0,1fr) 240px 32px;align-items:center;gap:35px;padding:39px 0;display:grid}.project-card:last-child{border-bottom:1px solid var(--line)}.project-number{color:var(--accent);align-self:flex-start;margin-top:6px;font-size:12px}.project-card h2{letter-spacing:-.045em;margin:17px 0 16px;font-size:clamp(30px,3.5vw,46px);font-weight:660;line-height:1.1}.project-card p{color:var(--muted);font-size:14px}.repo-name{color:var(--faint);overflow-wrap:anywhere;margin-top:22px;font-size:10px;display:block}.project-art{aspect-ratio:18/13;width:240px;overflow:hidden}.project-art .poster-shift{transition-duration:.5s}.project-card:hover .poster-shift{transform:translate(10px,-6px)}.project-card:hover h2,.project-card>svg{color:var(--accent)}.profile-layout{grid-template-columns:360px minmax(0,1fr);gap:94px;display:grid}.profile-art{align-self:start}.profile-art>svg{width:100%;display:block}.about-bio{padding-top:8px}.about-bio h2{letter-spacing:-.045em;margin-bottom:26px;font-size:48px;font-stretch:80%;line-height:1.1}.about-bio p{color:var(--muted);max-width:620px;margin-bottom:22px;font-size:16px;line-height:1.85}.about-bio .text-link{margin-top:8px}.about-details{border-top:1px solid var(--line);grid-template-columns:1fr 1fr;gap:35px;margin-top:44px;padding-top:25px;display:grid}.about-details h3{font-family:var(--mono);color:var(--accent);font-size:11px;font-weight:400}.about-details ul{color:var(--muted);gap:9px;margin:17px 0 0;padding:0;font-size:13px;list-style:none;display:grid}.article-header{border-bottom:1px solid var(--line);max-width:975px;padding:60px 0 40px}.back-link{color:var(--muted);margin-bottom:42px;font-size:12px;display:inline-block}.back-link:hover{color:var(--accent)}.article-header h1{letter-spacing:-.045em;margin-top:24px;font-size:clamp(40px,5.5vw,69px);font-stretch:85%;line-height:1.06}.article-description{color:var(--muted);max-width:760px;margin-top:24px;font-size:17px;line-height:1.75}.article-byline{align-items:center;gap:12px;margin-top:30px;font-size:13px;display:flex}.article-source{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:24px;max-width:975px;padding:23px 0;display:flex}.article-source p{color:var(--muted);margin-top:5px;font-size:12px}.article-source a{min-height:40px;color:var(--accent);align-items:center;gap:10px;font-size:12px;display:inline-flex}.article-source a:hover{text-underline-offset:5px;text-decoration:underline}.article-cover{aspect-ratio:18/9;max-width:700px;margin-top:38px;overflow:hidden}.article-cover .poster{object-fit:cover}.brand-mark{color:var(--accent);font:800 34px/.9 var(--heading);font-stretch:75%}.share-button{color:var(--muted);border:0;margin-left:auto;padding:0;font-size:12px;display:none}.js .share-button{display:flex}.article-grid{grid-template-columns:minmax(0,700px) 190px;gap:85px;max-width:975px;padding-top:45px;display:grid}.article-toc nav{position:sticky;top:40px}.article-toc ol{gap:14px;margin:18px 0 0;padding:0;list-style:none;display:grid}.article-toc a{color:var(--muted);border-left:1px solid var(--line);padding-left:15px;font-size:12px;display:block}.article-toc a:hover,.article-toc a.current{color:var(--accent);border-color:var(--accent)}.article-toc .toc-subheading{margin-left:10px}.article-end{max-width:975px}.not-found{max-width:850px;padding-top:110px}.not-found .text-link{margin-top:36px}.prose{overflow-wrap:anywhere;min-width:0;font-size:17px;line-height:1.9}.prose>h1:first-child{display:none}.prose>:first-child{margin-top:0}.prose p,.prose ul,.prose ol{margin:0 0 22px}.prose h2{letter-spacing:-.03em;margin:37px 0 17px;font-size:29px;line-height:1.4}.prose h3{margin:29px 0 15px;font-size:19px}.prose a{color:var(--accent);text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:4px}.prose a:hover{text-decoration-color:var(--accent)}.prose a code{color:var(--text)}.prose strong{font-weight:620}.prose img{border-radius:8px;max-width:100%;height:auto;margin:28px 0;display:block}.prose table{border-collapse:collapse;max-width:100%;margin:25px 0;font-size:14px;line-height:1.6;display:block;overflow-x:auto}.prose th,.prose td{overflow-wrap:normal;text-align:left;border-bottom:1px solid var(--line);padding:12px 14px 12px 0}.prose th{color:var(--muted);font-weight:550}.prose blockquote{border-left:2px solid var(--accent);color:var(--muted);margin:26px 0;padding:0 0 0 22px}.prose code{font:.82em var(--mono);background:var(--surface);border-radius:3px;padding:3px 5px}.prose pre{background:var(--surface);border:1px solid var(--line);border-radius:8px;margin:25px 0;padding:44px 20px 20px;line-height:1.7;position:relative;overflow:auto}.prose pre code{background:0 0;padding:0;font-size:12px}.astro-code,.astro-code span{color:var(--shiki-dark);background-color:var(--shiki-dark-bg)}[data-theme=light] .astro-code,[data-theme=light] .astro-code span{color:var(--shiki-light);background-color:var(--shiki-light-bg)}.copy-code{font:9px var(--mono);color:var(--muted);background:var(--surface);border:1px solid var(--line);border-radius:4px;padding:5px 8px;position:absolute;top:10px;right:10px}.article-end{border-top:1px solid var(--line);justify-content:space-between;align-items:center;gap:24px;margin-top:33px;padding-top:28px;display:flex}.article-tags a:hover{color:var(--accent)}.reading-progress{z-index:20;pointer-events:none;height:2px;position:fixed;top:0;left:0;right:0}#reading-progress-bar{background:var(--accent);transform-origin:0;width:100%;height:100%;transform:scaleX(0)}.command-menu{border:1px solid var(--line);background:var(--surface);color:var(--text);border-radius:2px;width:min(560px,100vw - 32px);max-height:75dvh;margin:min(18vh,140px) auto auto;padding:0;box-shadow:0 24px 100px #0005}.command-menu::backdrop{backdrop-filter:blur(4px);background:#080c10a6}.command-menu[open]{animation:.15s ease-out command-appear}.command-input{border-bottom:1px solid var(--line);color:var(--muted);align-items:center;gap:13px;padding:19px 20px;display:flex}.command-input input{width:100%;min-width:0;color:var(--text);background:0 0;border:0;outline:none;font-size:14px}.command-close{color:var(--muted);background:0 0;place-items:center;padding:4px;display:grid}.command-results{max-height:48dvh;padding:8px;overflow:auto}.command-result{border-radius:0;justify-content:space-between;align-items:center;gap:25px;padding:12px;font-size:13px;display:flex}.command-result>div{min-width:0}.command-result span{color:var(--muted);margin-top:3px;font-size:10px;display:block}.command-result.active,.command-result:hover{background:var(--surface-hover)}.command-result.active{box-shadow:inset 2px 0 var(--accent)}.command-result>span{color:var(--faint);flex-shrink:0}.command-empty{color:var(--muted);text-align:center;padding:30px 12px;font-size:13px}.command-footer{border-top:1px solid var(--line);color:var(--faint);justify-content:space-between;gap:16px;padding:12px 20px;font-size:9px;display:flex}.toast{z-index:50;background:var(--surface);color:var(--text);border:1px solid var(--line);opacity:0;pointer-events:none;border-radius:2px;width:max-content;max-width:calc(100% - 30px);padding:11px 18px;font-size:12px;transition:opacity .2s,transform .2s;position:fixed;bottom:30px;left:50%;transform:translate(-50%,10px);box-shadow:0 8px 30px #0003}.toast.visible{opacity:1;transform:translate(-50%)}@keyframes command-appear{0%{transform:translateY(-8px)}to{transform:translateY(0)}}@media (width<=1050px){.site-frame{padding:0 36px}.hero-composition{grid-template-columns:minmax(0,1fr) 240px;gap:40px}.hero-object{width:240px;height:280px}.site-header{gap:25px}.main-nav{gap:24px}.research-spread{gap:42px}.feature-2{margin-top:82px}.archive-entry>a{grid-template-columns:30px minmax(0,1fr) 140px 22px;gap:25px}.archive-art{width:140px}.project-card{grid-template-columns:30px minmax(0,1fr) 190px 26px;gap:25px}.project-art{width:190px}.profile-layout{grid-template-columns:270px minmax(0,1fr);gap:55px}.article-grid{grid-template-columns:minmax(0,1fr) 160px;gap:48px}}@media (width<=760px){.site-header{grid-template-columns:1fr auto;row-gap:23px;height:auto;padding:27px 0 20px}.wordmark{width:91px}.header-actions{grid-area:1/2;gap:19px}.main-nav{grid-area:2/1/auto/-1;justify-content:space-between;gap:20px;font-size:13px}.nav-link{padding:7px 0}.nav-link:after{bottom:0}.search-trigger kbd{display:none}.masthead{padding-top:34px;padding-bottom:30px}.hero-composition{grid-template-columns:minmax(0,1fr) 175px;gap:27px}.hero-object{width:175px;height:235px}.hero-description{margin-top:24px;font-size:15px}.hero-actions{gap:18px;margin-top:20px}.hero-pill{gap:16px;min-height:44px;padding:10px 17px;font-size:12px}.hero-project-link{gap:8px;font-size:12px}.header-actions button{justify-content:center;min-width:36px;min-height:40px}.masthead-label{margin-bottom:21px;font-size:10px}.large-text-link{min-width:154px;font-size:17px}.large-text-link svg{width:21px}.research-section{margin-top:43px}.ctf-section{margin-top:50px}.ctf-preview{grid-template-columns:105px minmax(0,1fr) 20px;gap:22px}.ctf-copy h3{font-size:29px}.ctf-copy p{font-size:13px}.section-heading h2{font-size:30px}.section-heading>span{font-size:10px}.research-spread{gap:29px}.feature-2{margin-top:62px}.research-feature h3{font-size:28px}.feature-meta{font-size:9px}.cover-open{width:44px;height:44px}.cover-open svg{width:22px}.page-intro{padding:48px 0 40px}.page-intro h1{font-size:83px}.page-intro p{font-size:14px}.entry-count{padding-bottom:5px;font-size:10px}.archive-controls{flex-direction:column;align-items:stretch;gap:22px}.filter-group{gap:20px}.search-box{width:100%}.archive-entry>a{grid-template-columns:25px minmax(0,1fr) 20px;gap:19px;padding:31px 0}.archive-art{display:none}.archive-entry h2{font-size:31px}.archive-entry p{font-size:13px}.entry-meta{gap:11px;font-size:10px}.project-card{grid-template-columns:25px minmax(0,1fr) 20px;gap:19px;padding:31px 0}.project-art{display:none}.project-card h2{font-size:34px}.profile-layout{grid-template-columns:175px minmax(0,1fr);gap:35px}.about-bio h2{font-size:38px}.about-bio p{font-size:14px}.about-details{gap:20px}.article-header{padding-top:43px}.article-header h1{font-size:49px}.article-description{font-size:15px}.article-grid{grid-template-columns:minmax(0,1fr);gap:35px;padding-top:30px}.article-toc{border-bottom:1px solid var(--line);grid-row:1;padding-bottom:25px}.article-toc nav{position:static}.article-toc ol{flex-wrap:wrap;gap:20px;display:flex}.article-toc a{border:0;padding-left:0}.prose{font-size:16px}.site-footer{grid-template-columns:1fr auto;row-gap:24px}.footer-copyright{grid-row:2;font-size:10px}.site-footer>div{grid-area:1/2/3;gap:17px;font-size:10px}main{padding-bottom:80px}}@media (width<=540px){.site-frame{padding-left:max(23px, env(safe-area-inset-left,0px));padding-right:max(23px, env(safe-area-inset-right,0px))}.site-header{padding-top:max(27px, calc(env(safe-area-inset-top,0px) + 15px))}.site-footer{padding-bottom:max(38px, calc(env(safe-area-inset-bottom,0px) + 16px))}.hero-composition{grid-template-columns:minmax(0,1fr) 110px;gap:0 10px}.hero-copy{display:contents}.display-name{grid-column:1/-1;width:45%}.hero-description{grid-area:2/1;margin-top:26px;font-size:14px}.hero-actions{flex-direction:column;grid-area:3/1;align-items:flex-start;gap:0;margin-top:17px}.hero-object{grid-area:2/2/4;align-self:start;width:110px;height:165px;margin-top:20px}.hero-project-link{margin-top:8px}.ctf-preview{grid-template-columns:76px minmax(0,1fr);align-items:start;gap:17px;padding:24px 0}.ctf-preview>svg{display:none}.ctf-copy .eyebrow{font-size:9px}.ctf-copy h3{font-size:27px}.ctf-copy p{font-size:12px;line-height:1.6}.ctf-all{gap:8px;font-size:10px}.article-source{flex-direction:column;align-items:flex-start;gap:9px}.article-cover{aspect-ratio:18/12;margin-top:26px}.large-text-link{gap:16px;min-width:140px;font-size:16px}.research-spread{grid-template-columns:minmax(0,1fr);gap:42px}.feature-2{margin-top:0;margin-left:28px}.research-feature h3{font-size:32px;line-height:1.1}.feature-meta{margin-top:17px;font-size:9px}.section-heading{padding-bottom:23px}.page-intro h1{font-size:66px}.entry-count{font-size:9px}.filter-group{justify-content:space-between;gap:10px}.filter-button{gap:7px;font-size:12px}.filter-button span{font-size:9px}.archive-meta{gap:8px;font-size:9px}.archive-entry>a{grid-template-columns:18px minmax(0,1fr) 16px;gap:13px}.archive-entry h2{font-size:29px}.archive-number{margin-top:2px;font-size:10px}.archive-entry a>svg{width:17px}.entry-meta{gap:8px;font-size:9px}.category-label{font-size:9px}.archive-tags{gap:10px;font-size:9px}.project-card{grid-template-columns:18px minmax(0,1fr) 20px;gap:15px}.project-card h2{font-size:34px}.repo-name{font-size:9px}.profile-layout{grid-template-columns:minmax(0,1fr);gap:28px}.profile-art{width:108px;height:138px}.about-bio h2{font-size:40px}.about-details{margin-top:35px}.about-details ul{font-size:12px}.article-header h1{font-size:43px}.article-description,.prose{font-size:15px}.prose h2{font-size:27px}.prose table{font-size:12px}.article-end{gap:20px}.article-end .text-link{font-size:12px}.footer-brand{font-size:25px}.site-footer>div{gap:14px;font-size:9px}.not-found{padding-top:70px}.not-found h1{font-size:52px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}.poster-shift,.archive-art{transform:none!important}.wordmark-ink{display:none}.js .hero-description,.js .hero-actions{animation:none}::view-transition-old(root),::view-transition-new(root){animation:none!important}}
