@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{--mono:"Geist Mono Variable", ui-monospace, "SF Mono", Menlo, monospace;--paper:#f2efe6;--ink:#272724;--muted:#6b6b65;--faint:#9d9c94;--line:#dfdbcf;--g0:#0f3b2c;--g:var(--g0);--w:780px;--pad:28px;--fs:16px}html[data-theme=dark]{--paper:#121311;--ink:#e8e8e3;--muted:#a0a099;--faint:#6a6a65;--line:#262723;--g:color-mix(in oklab, var(--g0) 48%, #eef0ea);color-scheme:dark}*{box-sizing:border-box}html{background:var(--paper);scroll-behavior:smooth}body{background:var(--paper);color:var(--muted);font:400 var(--fs)/1.75 var(--mono);-webkit-font-smoothing:antialiased;margin:0;transition:background .25s,color .25s;position:relative;overflow-x:clip}a{color:inherit}em{color:var(--ink);font-style:normal}:focus-visible{outline:1px solid var(--g);outline-offset:4px}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}.page{max-width:var(--w);padding:18px var(--pad) 160px;margin:0 auto}.bar{color:var(--faint);justify-content:space-between;align-items:center;gap:12px;font-size:13px;display:flex}.bar .right{align-items:center;gap:2px;margin-left:auto;display:flex}.bar .lang{display:flex}.bar .lang a,.bar .lang span{min-height:40px;color:var(--faint);align-items:center;padding:0 6px;text-decoration:none;display:inline-flex}.bar .lang a:hover,.bar .lang [aria-current]{color:var(--ink)}.theme{cursor:pointer;width:36px;height:36px;color:var(--ink);border:1px solid var(--line);background:0 0;border-radius:8px;place-items:center;margin-left:10px;transition:border-color .15s;display:grid}.theme:hover{border-color:var(--faint)}.theme svg{width:16px;height:16px}html[data-theme=dark] .theme .moon,html:not([data-theme=dark]) .theme .sun{display:none}.agent{position:relative}.agent summary{cursor:pointer;color:var(--muted);align-items:center;min-height:40px;list-style:none;display:flex}.agent summary::-webkit-details-marker{display:none}.agent summary:hover,.agent[open] summary{color:var(--ink)}.agent summary .arr{color:var(--g);margin-left:6px}.agent .short{display:none}.agent .menu{z-index:15;background:var(--paper);border:1px solid var(--line);border-radius:8px;min-width:250px;padding:6px;position:absolute;top:42px;left:0;box-shadow:0 6px 20px #0000000f}.agent .menu a,.agent .menu button{width:100%;font:inherit;color:var(--ink);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:5px;justify-content:space-between;padding:9px 10px;text-decoration:none;display:flex}.agent .menu a:hover,.agent .menu button:hover{background:color-mix(in srgb, var(--g0) 9%, transparent)}.agent .menu .hint{color:var(--faint);padding:8px 10px 6px;font-size:12px;line-height:1.5}.agent .menu .k{color:var(--faint)}.intro{padding:80px 0 0}.intro h1{font:400 clamp(30px, 6vw, calc(var(--fs) * 2.8))/1.1 var(--mono);letter-spacing:-.03em;color:var(--ink);margin:0}.intro .sub{font-size:clamp(17px, 2.6vw, calc(var(--fs) * 1.35));color:var(--g);margin:12px 0 0;line-height:1.45}.bio{margin-top:56px}.bio p{margin:0 0 18px}.bio a,.prose a,.story a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:4px}.bio a:hover,.prose a:hover,.story a:hover{text-decoration-color:var(--g)}h2{font:400 var(--fs)/1 var(--mono);color:var(--ink);margin:64px 0 14px}.projects{border-top:1px solid var(--line);margin:0;padding:0;list-style:none}.projects details{border-bottom:1px solid var(--line)}.projects summary{cursor:pointer;grid-template-columns:minmax(0,1fr) auto 16px;align-items:baseline;gap:18px;min-height:52px;padding:13px 0;list-style:none;display:grid}.projects summary::-webkit-details-marker{display:none}.pname{color:var(--ink)}.pdesc{color:var(--faint);margin-left:10px}.pmeta{color:var(--faint);white-space:nowrap;font-size:13px}.pmeta .st{color:var(--g);margin-left:8px}.sign{color:var(--faint);text-align:right}.sign:before{content:"+"}details[open] .sign:before{content:"−"}summary:hover .pname{text-decoration:underline;text-decoration-color:var(--faint);text-underline-offset:5px}summary:hover .sign{color:var(--ink)}.story{font-size:calc(var(--fs) - 1px);padding:0 0 22px;line-height:1.75}.story p{margin:0 0 12px}.story ul{margin:0 0 12px;padding:0;list-style:none}.story li{padding-left:18px;position:relative}.story li:before{content:"-";color:var(--faint);position:absolute;left:0}.story .tech{color:var(--faint);margin:14px 0 0;font-size:12px}.story .plinks{flex-wrap:wrap;gap:4px 18px;margin-top:10px;font-size:13px;display:flex}@supports (interpolate-size:allow-keywords){:root{interpolate-size:allow-keywords}.projects details::details-content{opacity:0;height:0;transition:height .25s ease, opacity .2s, content-visibility .25s allow-discrete;overflow:clip}.projects details[open]::details-content{opacity:1;height:auto}}.empty{border-top:1px solid var(--line);color:var(--faint);margin:0;padding:14px 0}.list{margin:0;padding:0;list-style:none}.list li{grid-template-columns:112px 1fr;gap:14px;padding:5px 0;display:grid}.list .d{color:var(--faint);padding-top:1px;font-size:13px}.list .t{color:var(--ink);text-decoration:none}.list .t:hover{text-decoration:underline;text-decoration-color:var(--faint);text-underline-offset:5px}.contact p{margin:0 0 16px}.links{flex-wrap:wrap;gap:4px 22px;display:flex}.links a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:5px;padding:8px 0}.links a:hover{text-decoration-color:var(--g);color:var(--g)}footer{border-top:1px solid var(--line);color:var(--faint);margin-top:72px;padding-top:18px;font-size:12px}.dock{z-index:20;pointer-events:none;padding:30px 18px max(18px, env(safe-area-inset-bottom));background:linear-gradient(to top, var(--paper) 35%, transparent);justify-content:center;display:flex;position:fixed;bottom:0;left:0;right:0}.card{pointer-events:auto;width:100%;max-width:calc(var(--w) - 2 * var(--pad));background:var(--paper);border:1px solid var(--line);border-radius:12px;align-items:center;gap:16px;padding:10px 10px 10px 18px;display:flex;box-shadow:0 4px 18px #0000000d}.card p{min-width:0;color:var(--faint);flex:1;margin:0;font-size:12px;line-height:1.5}.card p b{color:var(--ink);font-size:13px;font-weight:400;display:block}.go{min-height:42px;font:400 13px/1 var(--mono);color:#f2f2ec;background:var(--g0);border-radius:8px;flex-shrink:0;align-items:center;gap:8px;padding:0 14px;text-decoration:none;transition:filter .15s;display:inline-flex}.go:hover{filter:brightness(1.15)}.go svg{width:13px;height:13px}html[data-theme=dark] .go{box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--g) 30%, transparent)}.back{color:var(--faint);margin-top:56px;padding:8px 0;font-size:13px;text-decoration:none;display:inline-block}.back:hover{color:var(--ink)}.post h1{font:400 clamp(24px, 4.5vw, 32px)/1.25 var(--mono);letter-spacing:-.02em;color:var(--ink);text-wrap:balance;margin:24px 0 8px}.post .date{color:var(--faint);margin:0 0 40px;font-size:13px}.prose p,.prose ul,.prose ol{margin:0 0 18px}.prose ul,.prose ol{padding-left:22px}.prose li{margin:4px 0}.prose h2{font-size:calc(var(--fs) + 2px);margin:44px 0 14px;line-height:1.4}.prose h3{font:500 var(--fs)/1.4 var(--mono);color:var(--ink);margin:32px 0 10px}.prose strong{color:var(--ink);font-weight:500}.prose code{background:color-mix(in srgb, var(--ink) 6%, transparent);border-radius:4px;padding:1px 5px;font-size:.92em}.prose pre{border:1px solid var(--line);border-radius:8px;margin:0 0 18px;padding:14px 16px;font-size:13.5px;line-height:1.6;overflow-x:auto}.prose pre code{font-size:inherit;background:0 0;padding:0}.prose pre.astro-code{background-color:color-mix(in srgb, var(--ink) 4%, var(--paper))!important}html[data-theme=dark] .astro-code span{color:var(--shiki-dark)!important}.prose blockquote{border-left:2px solid var(--line);margin:0 0 18px;padding-left:16px}.prose img{border-radius:8px;max-width:100%;height:auto}.prose hr{border:0;border-top:1px solid var(--line);margin:40px 0}.notfound{padding-top:80px}.notfound p{margin:0 0 12px}@media (width<=560px){html{--fs:15px}.page{padding:10px 20px 150px}.agent .long{display:none}.agent .short{display:inline}.intro{padding-top:52px}.bio{margin-top:44px}.projects summary{grid-template-columns:minmax(0,1fr) 16px;row-gap:4px}.pdesc{margin:0;display:block}.pmeta{grid-area:2/1}.sign{grid-area:1/2}.list li{grid-template-columns:1fr;gap:0;padding:7px 0}.card{gap:10px;padding:9px 9px 9px 14px}}
