@font-face{font-family:Syne;font-style:normal;font-weight:700;font-display:swap;src:url(../media/6c186216202f40aa-s.03emcql08-8t3.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Syne;font-style:normal;font-weight:700;font-display:swap;src:url(../media/84feb34116826df2-s.0pmc52xmq8tzu.woff2)format("woff2");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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Syne;font-style:normal;font-weight:700;font-display:swap;src:url(../media/9f3a8f528b429e0d-s.p.3aw7w7yacp2q7.woff2)format("woff2");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:Syne Fallback;src:local(Arial);ascent-override:93.93%;descent-override:27.93%;line-gap-override:0.0%;size-adjust:98.47%}.pyMn6q_className{font-family:Syne,Syne Fallback;font-style:normal;font-weight:700}.pyMn6q_variable{--font-syne:"Syne", "Syne Fallback"}
@font-face{font-family:Newsreader;font-style:italic;font-weight:400;font-display:swap;src:url(../media/7a4546d8114e54fa-s.13vdd402sevv2.woff2)format("woff2");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:Newsreader;font-style:italic;font-weight:400;font-display:swap;src:url(../media/b9e7b9c6ff7672ac-s.1h3_b8dq1_o36.woff2)format("woff2");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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Newsreader;font-style:italic;font-weight:400;font-display:swap;src:url(../media/8feca5bfbcc904f1-s.p.3_ijnwpkdx2cv.woff2)format("woff2");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:Newsreader;font-style:normal;font-weight:400;font-display:swap;src:url(../media/e484ef06964e3fd1-s.31i7usxn6xzi8.woff2)format("woff2");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:Newsreader;font-style:normal;font-weight:400;font-display:swap;src:url(../media/116f49b013842575-s.3p6-qd2_5i8k0.woff2)format("woff2");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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Newsreader;font-style:normal;font-weight:400;font-display:swap;src:url(../media/aaeb013c77132fba-s.p.11vj41fawvu--.woff2)format("woff2");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:Newsreader Fallback;src:local(Times New Roman);ascent-override:69.68%;descent-override:25.12%;line-gap-override:0.0%;size-adjust:105.48%}.CFC2hG_className{font-family:Newsreader,Newsreader Fallback;font-weight:400}.CFC2hG_variable{--font-newsreader:"Newsreader", "Newsreader Fallback"}
@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/d72c019e91ffb82f-s.23_tzllc9ug3l.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/8557ac4879842fb9-s.0v7f0_qic28v5.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/c847346577a98de0-s.2im-ylirbcr2x.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/db08d2e20377160a-s.2wq_0j16_l1ke.woff2)format("woff2");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:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/8394f9d71e076efc-s.1_84mggmphogq.woff2)format("woff2");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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/19087af2bdec32b5-s.p.0u70gkhz9e0b8.woff2)format("woff2");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:JetBrains Mono Fallback;src:local(Arial);ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.0%;size-adjust:134.59%}.mxk61W_className{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal;font-weight:400}.mxk61W_variable{--font-jetbrains:"JetBrains Mono", "JetBrains Mono Fallback"}
:root{--void:#000;--ink:#0c0c0c;--ash:#999;--bone:#ececec;--eye:#fff;--line:#ececec4d;--font-display:var(--font-syne),Arial,sans-serif;--font-body:var(--font-newsreader),Georgia,"Times New Roman",serif;--font-code:var(--font-jetbrains),"Courier New",monospace;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html{scroll-behavior:smooth;background:var(--void)}body{background:var(--void);color:var(--bone);font-family:var(--font-body);min-height:100vh;margin:0;font-size:18px;line-height:1.7}a{color:inherit;text-underline-offset:5px;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--ash);text-decoration-color:var(--ash)}a:hover{color:var(--eye);-webkit-text-decoration-color:var(--eye);text-decoration-color:var(--eye)}button,input{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:0}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--eye);outline-offset:4px}::selection{color:#000;background:#fff}.skip-link{z-index:100;color:#000;background:#fff;padding:8px 14px;position:fixed;top:8px;left:8px;transform:translateY(-160%)}.skip-link:focus{transform:none}.grain{pointer-events:none;z-index:5;opacity:.065;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.5'/%3E%3C/svg%3E");animation:.18s steps(2,end) infinite grain;position:fixed;inset:-50%}.seams{z-index:4;pointer-events:none;opacity:.07;background:linear-gradient(90deg,#0000 11.9%,#fff 12%,#0000 12.08% 71.9%,#fff 72%,#0000 72.08%);position:fixed;inset:0}@keyframes grain{0%{transform:translate(0)}50%{transform:translate(1%,-1%)}to{transform:translate(-1%,1%)}}.intro-screen{z-index:90;pointer-events:none;background:#000;place-items:center;animation:.85s ease-out forwards intro;display:grid;position:fixed;inset:0}.intro-eyes{color:#fff;letter-spacing:.2em;text-shadow:0 0 20px #fff;font-size:clamp(2rem,8vw,5rem);animation:.5s .1s both eyes-open}@keyframes intro{to{opacity:0;visibility:hidden}}@keyframes eyes-open{0%{transform:scaleY(.05)}to{transform:scaleY(1)}}.menu-trigger{z-index:31;justify-content:center;align-items:center;gap:9px;width:50px;height:40px;display:flex;position:fixed;top:24px;right:28px}.menu-trigger span{background:#fff;border-radius:50%;width:9px;height:9px;transition:transform .2s;box-shadow:0 0 11px #fff}.menu-trigger:hover span{transform:scale(1.25)}.menu-overlay{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:30;background:#000000f5;place-items:center;animation:.25s ease-out menu-in;display:grid;position:fixed;inset:0}.menu-close{font:48px/1 var(--font-display);position:absolute;top:22px;right:32px}.menu-panel{flex-direction:column;align-items:center;gap:10px;display:flex}.menu-panel a{font:700 clamp(2.5rem,8vw,5.7rem)/1.1 var(--font-display);letter-spacing:-.045em;text-decoration:none}.menu-panel a:hover{text-decoration:underline;transform:skew(-3deg)}@keyframes menu-in{0%{opacity:0}to{opacity:1}}h1,h2,h3,.display,.footer-name{font-family:var(--font-display);letter-spacing:-.04em;font-weight:700;line-height:1.1}h1{font-size:clamp(2.6rem,7vw,6rem)}h2{font-size:clamp(1.5rem,3vw,2rem)}.hero{text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:100svh;padding:76px 20px 60px;display:flex;position:relative;overflow:hidden}.ring-canvas,.rings-static{z-index:0;width:100%;height:100%;position:absolute;inset:0}.ring-canvas{opacity:.8}.rings-static{opacity:.55;background:radial-gradient(at 50% 42%,#0000 0 8%,#777 8.15% 8.3%,#080808 8.5% 9.1%,#999 9.3% 9.45%,#050505 9.65% 10.3%,#888 10.5% 10.65%,#050505 10.85% 11.5%,#777 11.7% 11.85%,#040404 12.05% 12.7%,#888 12.9% 13.05%,#050505 13.25% 14%,#888 14.2% 14.35%,#050505 14.55% 15.2%,#888 15.4% 15.55%,#050505 15.75% 16.4%,#777 16.6% 16.75%,#050505 16.95% 17.6%,#777 17.8% 17.95%,#050505 18.15% 18.8%,#777 19% 19.15%,#050505 19.35% 20%,#888 20.2% 20.35%,#050505 20.55% 21.2%,#888 21.4% 21.55%,#000 21.75% 100%);transform:scale(1.7)}.hero-content{z-index:1;flex-direction:column;align-items:center;display:flex;position:relative}.figure{--eye-x:0px;--eye-y:0px;width:min(72vw,430px);max-height:56svh;transition:transform .25s;overflow:visible}.figure:hover{transform:scale(1.025)}.figure-outline{stroke-dasharray:1000;animation:8s steps(8,end) infinite outline-breathe}.eyes{fill:#fff;transform:translate(var(--eye-x),var(--eye-y));transform-box:fill-box;transform-origin:50%;transition:transform .1s}.is-blinking .eyes{transform:translate(var(--eye-x),var(--eye-y)) scaleY(.08)}@keyframes outline-breathe{0%{stroke-dashoffset:0}50%{stroke-dashoffset:8px}to{stroke-dashoffset:0}}.hero h1{margin:4px 0 0;font-size:clamp(3.5rem,10vw,6rem)}.hero-tagline{color:var(--bone);margin:8px 0 20px;font-size:clamp(1rem,2.4vw,1.25rem)}.hero-links{gap:28px;display:flex}.hero-links a{font-family:var(--font-display);font-size:16px}.section{max-width:1100px;margin:auto;padding:96px 24px}.section-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:baseline;margin-bottom:18px;padding-bottom:16px;display:flex}.section-head h2{margin:0}.section-head a{font-family:var(--font-display);font-size:15px}.intro-copy{color:#c3c3c3;max-width:65ch}.page-shell{max-width:1100px;min-height:75vh;margin:0 auto;padding:128px 24px 96px}.page-shell>h1{margin:0 0 18px}.page-lede{color:#c3c3c3;max-width:65ch;margin:0 0 44px;font-size:20px}.archive{max-width:900px}.search-label{font-family:var(--font-display);margin-bottom:8px;font-size:14px;display:block}.search{background:var(--ink);width:100%;font-family:var(--font-body);border:1px solid #555;border-radius:0;padding:13px 15px}.tag-row{flex-wrap:wrap;gap:8px;margin:18px 0;display:flex}.tag{font:14px var(--font-code);color:#ccc;border:1px solid #555;padding:5px 11px}.tag:hover,.tag.active{color:#fff;background:#171717;border-color:#fff}.result-count{font:14px var(--font-code);color:#aaa;margin:22px 0 12px}.post-list{border-top:1px solid var(--line)}.post-row{border-bottom:1px solid var(--line);grid-template-columns:118px 1fr 28px;align-items:start;gap:18px;padding:22px 4px;display:grid;position:relative}.post-row time{color:#aaa;font:14px var(--font-code);padding-top:5px}.post-row h2{margin:0 0 5px;font-size:22px}.post-row p{color:#bdbdbd;margin:0 0 8px;font-size:16px}.post-tags{gap:10px;display:flex}.post-tags button{font:12px var(--font-code);color:#aaa;text-underline-offset:3px;padding:0;text-decoration:underline}.row-mark{font-family:var(--font-display);opacity:0;transition:opacity .2s}.post-row:hover .row-mark,.post-row:focus-within .row-mark{opacity:1}.empty-state{color:#ccc;padding:44px 0}.text-button{text-underline-offset:5px;padding:0;text-decoration:underline}.post-layout{grid-template-columns:minmax(0,70ch) 220px;align-items:start;gap:60px;display:grid}.post-article{max-width:70ch}.post-article h1{margin:0 0 18px;font-size:clamp(2.5rem,6vw,4.5rem)}.post-meta{font:14px var(--font-code);color:#aaa;flex-wrap:wrap;align-items:center;gap:14px;display:flex}.post-body{margin-top:56px}.post-body p{margin:0 0 26px}.post-body h2{margin:46px 0 16px}.post-body pre{font:15px/1.6 var(--font-code);background:var(--ink);border:1px solid #333;padding:20px;overflow-x:auto}.post-body code{font-family:var(--font-code);background:#111;padding:2px 4px;font-size:.88em}.callout{color:#ddd;border:1px solid #777;margin:32px 0;padding:16px 18px}.toc{border-left:1px solid #666;padding-left:18px;font-size:15px;position:sticky;top:36px}.toc summary{font-family:var(--font-display);cursor:pointer;font-weight:700}.toc ul{padding-left:18px}.post-nav{border-top:1px solid var(--line);justify-content:space-between;gap:20px;margin-top:60px;padding-top:22px;display:flex}.site-footer{border-top:1px solid var(--line);color:#aaa;flex-wrap:wrap;align-items:center;gap:18px;padding:28px max(24px,50% - 550px);font-size:14px;display:flex}.footer-name{color:#eee;font-size:18px;text-decoration:none}.site-footer nav{gap:16px;margin-left:auto;display:flex}.site-footer small{width:100%;font:12px var(--font-code)}.project-list{grid-template-columns:repeat(2,minmax(0,1fr));gap:40px;margin-top:42px;display:grid}.project{border-top:1px solid var(--line);padding:22px 0}.project h2{margin:0 0 12px}.project p{color:#bbb}.project-stack{font:13px var(--font-code);color:#aaa;flex-wrap:wrap;gap:12px;display:flex}.about-grid{grid-template-columns:1fr 1fr;gap:42px;display:grid}.about-grid h2{font-size:24px}.link-list{flex-direction:column;align-items:flex-start;gap:10px;display:flex}.not-found{text-align:center;padding:20vh 20px}.not-found .figure{width:190px;transform:scaleX(-1)}@media (max-width:700px){body{font-size:17px}.hero{min-height:94svh;padding-top:80px}.figure{width:min(84vw,360px);max-height:48svh}.section{padding:64px 20px}.page-shell{padding:108px 20px 64px}.post-row{grid-template-columns:1fr 22px;gap:6px 10px}.post-row time{grid-column:1/-1}.post-row h2{font-size:20px}.post-layout{flex-direction:column-reverse;gap:18px;display:flex}.toc{border-left:0;border-bottom:1px solid var(--line);width:100%;padding:0 0 14px;position:static}.toc:not([open]) ul{display:none}.post-body{margin-top:32px}.project-list,.about-grid{grid-template-columns:1fr;gap:22px}.site-footer{padding:24px 20px}.site-footer nav{order:2;width:100%;margin-left:0}.site-footer small{order:3}.menu-trigger{top:12px;right:14px}.menu-close{right:20px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.grain{animation:none}.ring-canvas{display:none}.rings-static{opacity:.45}}@media (prefers-contrast:more){:root{--ash:#c8c8c8;--line:#ffffffa6}.post-row time,.post-row p,.page-lede{color:#eee}}.grain{background-image:url(/brand/grain.png);background-size:256px 256px}.rings-static{background-image:url(/brand/rings-static.svg);background-position:50%;background-size:cover}.code-frame{background:var(--ink);border:1px solid #333;margin:28px 0}.code-label{color:#aaa;font:12px var(--font-code);border-bottom:1px solid #333;justify-content:space-between;align-items:center;padding:6px 12px;display:flex}.code-label button{color:#eee;font:12px var(--font-code);border:1px solid #666;padding:2px 8px}.code-label button:hover{border-color:#fff}.code-frame pre{border:0;margin:0}.image-zoom-trigger{text-align:left;width:100%;margin:30px 0;padding:0;display:block}.image-zoom-trigger img{cursor:zoom-in;border:1px solid #555;width:100%;height:auto;display:block}.image-zoom-overlay{z-index:80;cursor:zoom-out;background:#000000f0;place-items:center;padding:5vw;display:grid;position:fixed;inset:0}.image-zoom-overlay img{object-fit:contain;cursor:default;width:auto;max-width:90vw;height:auto;max-height:88vh}.image-zoom-close{font:48px/1 var(--font-display);position:absolute;top:20px;right:28px}.post-layout,.post-article,.post-body,.code-frame{min-width:0}.post-body figure[data-rehype-pretty-code-figure],.code-frame{max-width:100%;overflow-x:auto}.post-body figure[data-rehype-pretty-code-figure]{margin-inline:0}.code-frame pre{max-width:100%}@media (max-width:700px){.post-layout{align-items:stretch;width:100%}.post-article{flex:100%;width:100%;max-width:100%}.post-body figure[data-rehype-pretty-code-figure]{width:100%}}
