@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-cyrillic-ext-wght-normal.DjL33-gN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-cyrillic-wght-normal.BEAKL7Jp.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-vietnamese-wght-normal.6IgcOCM7.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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-latin-ext-wght-normal.DC-KSUi6.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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-latin-wght-normal.BgDaEnEv.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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-cyrillic-ext-wght-normal.X_5orZeX.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-cyrillic-wght-normal.DiZS0aHC.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-symbols2-wght-normal.CO5SzqOn.woff2)format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-vietnamese-wght-normal.DadHysG0.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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-latin-ext-wght-normal.Bwz-egvJ.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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-latin-wght-normal.XN7g48iV.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}:root{--bg:#f6f5f0;--ink:#1e211a;--soft:#6a6e5c;--faint:#a3a794;--sage:#9ea976;--butter:#efdfa4;--rule:#5e683e38;--sans:"Geist Variable", "Helvetica Neue", Arial, sans-serif;--mono:"Geist Mono Variable", ui-monospace, "SF Mono", Menlo, monospace}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font:400 17px/1.6 var(--sans);-webkit-font-smoothing:antialiased;margin:0;padding-inline:24px;overflow-x:clip}h1,h2{letter-spacing:-.035em;text-wrap:balance;margin:0;font-weight:400}p{margin:0}a{color:inherit}:focus-visible{outline:1.5px solid var(--ink);outline-offset:4px;border-radius:4px}#field{z-index:0;pointer-events:none;width:100%;height:100%;position:fixed;inset:0}.wrap{z-index:1;max-width:1180px;margin-inline:auto;position:relative}.label{font:400 12px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--soft)}nav{top:env(safe-area-inset-top,0px);z-index:20;pointer-events:none;justify-content:space-between;align-items:center;padding:20px 24px;display:flex;position:fixed;left:0;right:0}nav a{pointer-events:auto;text-decoration:none}.logo{letter-spacing:-.01em;align-items:center;gap:10px;font-weight:500;display:flex}.logo svg{width:26px;height:30px;overflow:visible}.nav-right{gap:24px;display:flex}.nav-link{color:var(--soft);font-size:14px}.nav-link:hover{color:var(--ink)}.hero{isolation:isolate;align-content:center;gap:20px;min-height:92vh;margin-inline:calc(50% - 50vw);padding-block:140px 80px;padding-inline:max(24px,50vw - 590px);display:grid;position:relative}#hero-img{z-index:-1;width:100%;height:100%;display:block;position:absolute;inset:0}.hero h1{max-width:9ch;font-size:clamp(40px,5.4vw,78px);font-weight:300;line-height:1}.hero p{color:var(--soft);max-width:22em;font-size:19px}nav .logo,nav .nav-link{transition:color .3s}@media (width>=821px){nav.on-photo .nav-link{color:#f4f2ea}nav.on-photo .nav-link:hover{color:#fff}}.block{grid-template-columns:220px 1fr;gap:24px;padding-block:96px;display:grid}.block h2{max-width:16ch;font-size:clamp(30px,4.6vw,58px);font-weight:300;line-height:1.05}.block .body{gap:22px;display:grid}.block .body>p{color:var(--soft);max-width:34em;font-size:18px}.steps{grid-template-columns:repeat(4,minmax(0,1fr));gap:24px;margin-top:18px;display:grid}.steps.three{grid-template-columns:repeat(3,minmax(0,1fr))}.step{border-top:1px solid var(--rule);gap:8px;padding-top:16px;display:grid}.step .label{color:var(--faint)}.step b{font-size:17px;font-weight:500}.step span{color:var(--soft);font-size:15px}#try{height:280vh;position:relative}.stage{height:100vh;margin-inline:calc(50% - 50vw);position:sticky;top:0}#map{width:100%;height:100%;display:block;position:absolute;inset:0}.stage-copy{pointer-events:none;gap:18px;width:min(34vw,400px);display:grid;position:absolute;top:50%;left:max(24px,50vw - 590px);transform:translateY(-50%)}.stage-copy h2{font-size:clamp(30px,4.2vw,54px);font-weight:300;line-height:1.05}.stage-copy p{color:var(--soft)}.readout{font:400 13px/1.4 var(--mono);color:var(--soft);font-variant-numeric:tabular-nums;gap:6px;min-height:5.6em;display:grid}.readout b{color:var(--ink);font-weight:400}.credit{font:10px/1 var(--sans);color:var(--faint);opacity:0;transition:opacity .4s;position:absolute;bottom:10px;right:12px}.credit.on{opacity:1}.layers{margin-top:8px;display:grid}.layer{border-top:1px solid var(--rule)}.layer:last-child{border-bottom:1px solid var(--rule)}.layer summary{cursor:pointer;grid-template-columns:120px 1fr 24px;align-items:baseline;gap:20px;padding:22px 0;list-style:none;display:grid}.layer summary::-webkit-details-marker{display:none}.layer summary:hover b{text-underline-offset:5px;text-decoration:underline 1px;text-decoration-color:var(--sage)}.toggle{align-self:center;width:14px;height:14px;position:relative}.toggle:before,.toggle:after{content:"";background:var(--ink);height:1px;transition:transform .25s;position:absolute;top:50%;left:0;right:0}.toggle:after{transform:rotate(90deg)}.layer[open] .toggle:after{transform:rotate(0)}.layer-detail{gap:22px;padding:4px 0 36px 140px;display:grid}.note{color:var(--soft);font-size:15px}.diagram-wrap{overflow-x:auto}.diagram{width:100%;min-width:680px;height:auto;font-family:var(--sans);display:block}.d-box{fill:#ffffff8c;stroke:var(--rule);stroke-width:1px}.d-box.hi{fill:#9ea97624;stroke:var(--sage)}.d-title{fill:var(--ink);letter-spacing:-.01em;font-size:17px}.d-item{fill:var(--soft);font-size:13.5px}.d-label{font-family:var(--mono);letter-spacing:.08em;fill:var(--faint);font-size:10.5px}.d-hex{fill:none;stroke:var(--faint);stroke-width:1px}.d-hex.hi{fill:var(--butter);stroke:var(--ink)}.d-link{stroke:var(--ink);stroke-width:1px;stroke-dasharray:3 4}.d-arrow{fill:var(--ink)}.photos{grid-template-rows:auto auto;grid-template-columns:2fr 1fr;gap:14px;display:grid}.photo{gap:8px;margin:0;display:grid}.photo.main{grid-row:span 2}.photo img{aspect-ratio:4/3;object-fit:cover;background:#2a3040;border-radius:4px;width:100%;height:100%;display:block}.photo .ph{aspect-ratio:4/3;border:1px dashed var(--rule);font:400 12px/1 var(--mono);color:var(--faint);background:repeating-linear-gradient(135deg,#0000 0 10px,#5e683e0d 10px 11px);border-radius:4px;place-items:center;display:grid}.photo figcaption{font:400 12px/1.4 var(--mono);color:var(--faint)}.layer-body{gap:4px;display:grid}.layer-body b{letter-spacing:-.02em;font-size:22px;font-weight:400}.layer-body span{color:var(--soft);font-size:16px}.cad{grid-template-columns:1fr 1fr;align-items:center;gap:40px;margin-top:12px;display:grid}.code{border-left:1px solid var(--sage);gap:10px;padding-left:18px;display:grid}#cad-src{resize:none;width:100%;min-height:230px;font:400 14px/1.75 var(--mono);color:var(--ink);field-sizing:content;background:0 0;border:0;padding:0}#cad-src:focus{outline:none}#cad-msg{font:400 12px/1.4 var(--mono);color:var(--faint);min-height:1.4em}#cad-view{aspect-ratio:1;justify-self:center;width:100%;max-width:440px;overflow:visible}.cad-stats{font:400 13px/1.4 var(--mono);color:var(--soft);font-variant-numeric:tabular-nums;justify-content:center;gap:28px;margin-top:8px;display:flex}.cad-stats b{color:var(--ink);font-weight:400}.posts{margin:6px 0 0;padding:0;list-style:none;display:grid}.posts li{border-top:1px solid var(--rule)}.posts li:last-child{border-bottom:1px solid var(--rule)}.posts a,.posts .soon{grid-template-columns:110px 1fr auto;align-items:baseline;gap:20px;padding:20px 0;text-decoration:none;display:grid}.posts b{letter-spacing:-.02em;font-size:22px;font-weight:400}.posts .arrow{font:400 13px/1 var(--mono);color:var(--soft)}.posts a:hover b{text-underline-offset:5px;text-decoration:underline 1px;text-decoration-color:var(--sage)}.posts .soon{color:var(--faint)}.article{gap:22px;max-width:680px;padding-block:150px 40px;display:grid}.article h1{letter-spacing:-.04em;font-size:clamp(40px,6.4vw,84px);font-weight:300;line-height:1}.article .meta{font:400 13px/1 var(--mono);color:var(--faint)}.article.solo{padding-bottom:220px}.article.solo p{color:var(--soft);max-width:34em;font-size:18px}.prose{gap:20px;padding-block:24px;display:grid}.prose>*{max-width:680px}.prose>#try{max-width:none}.prose h2{margin-top:18px;font-size:clamp(24px,3vw,34px);font-weight:400;line-height:1.15}.prose p,.prose li{color:#3f4336;font-size:18px}.prose ul{gap:12px;margin:0;padding:0;list-style:none;display:grid}.prose li{padding-left:22px;position:relative}.prose li:before{content:"";background:var(--sage);clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);width:10px;height:11.5px;position:absolute;top:9px;left:0}.prose strong{color:var(--ink);font-weight:500}.prose a{text-underline-offset:4px;text-decoration-thickness:1px;text-decoration-color:var(--sage)}.back{font:400 13px/1 var(--mono);color:var(--soft);text-decoration:none}.back:hover{color:var(--ink)}.contact{gap:18px;padding-block:96px 120px;display:grid}.contact h2{font-size:clamp(36px,6vw,80px);font-weight:300;line-height:1}.contact-for{color:var(--soft);font-size:18px}.mail{flex-wrap:wrap;align-items:center;gap:14px;display:flex}.mail span{user-select:all;font-size:20px}.mail button{font:400 13px/1 var(--mono);border:1px solid var(--rule);background:var(--bg);color:var(--soft);cursor:pointer;border-radius:999px;padding:9px 12px}.mail button:hover{color:var(--ink);border-color:var(--sage)}footer{border-top:1px solid var(--rule);color:var(--faint);flex-wrap:wrap;justify-content:space-between;gap:16px;padding-block:24px 40px;font-size:13px;display:flex}@media (width<=820px){.block{grid-template-columns:1fr;gap:14px}.steps,.steps.three{grid-template-columns:1fr 1fr}.cad{grid-template-columns:1fr}.layer summary{grid-template-columns:1fr 24px;gap:8px 16px}.layer summary .label{grid-column:1/-1}.layer-detail{padding-left:0}.photos{grid-template-columns:1fr 1fr}.photo.main{grid-area:auto/1/auto/-1}.stage-copy{top:calc(76px + env(safe-area-inset-top,0px));gap:10px;width:auto;right:24px;transform:none}.stage-copy h2{font-size:32px}.readout{min-height:0}}@media (width<=520px){body{padding-inline:16px}nav{padding:16px}.stage-copy{left:16px;right:16px}.steps,.steps.three{grid-template-columns:1fr}.posts a,.posts .soon{grid-template-columns:1fr;gap:6px}.posts .arrow{display:none}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}.list-page{max-width:680px;padding-bottom:180px}
