@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{--neon:#eaff3d;--sans:"Geist Variable", "Geist", system-ui, -apple-system, sans-serif;--mono:"Geist Mono Variable", "Geist Mono", ui-monospace, "SFMono-Regular", monospace;--edge:29px;--col:696px;--ease:cubic-bezier(.2, .8, .2, 1);--ground-light:radial-gradient(58% 52% at 82% 10%, #fffffc9e 0%, #fffffc00 70%), linear-gradient(118deg, #ededf0 0%, #f3eee6 46%, #e9d5b6 100%);--ground-dark:radial-gradient(58% 52% at 18% 6%, #afb4c329 0%, #afb4c300 70%), linear-gradient(118deg, #3f4459 0%, #31364a 46%, #1e2434 100%);color-scheme:light;--ink:#211f1c;--mid:#211f1ca8;--faint:#211f1c7a;--hair:#211f1c26;--ground:radial-gradient(58% 52% at 82% 10%, #fffffc9e 0%, #fffffc00 70%), linear-gradient(118deg, #ededf0 0%, #f3eee6 46%, #e9d5b6 100%);--ground-solid:#f0ebe3;--frost:linear-gradient(118deg, #f0f0f2f0 0%, #f2f1eeed 50%, #f6f1e8ed 100%);--header-fade:#f0ede8db;--square-edge:inset 0 0 0 1px #211f1c;--code-bg:#211f1c12}:root[data-theme=dark]{color-scheme:dark;--ink:#f1eee8;--mid:#f1eee8b8;--faint:#f1eee880;--hair:#f1eee82b;--ground:radial-gradient(58% 52% at 18% 6%, #afb4c329 0%, #afb4c300 70%), linear-gradient(118deg, #3f4459 0%, #31364a 46%, #1e2434 100%);--ground-solid:#2e3345;--frost:linear-gradient(118deg, #3a3f53f2 0%, #2e3346f2 50%, #202636f2 100%);--header-fade:#2e3345e0;--square-edge:none;--code-bg:#f1eee817}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--ground-solid);min-height:100dvh;color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:16px;line-height:24px}.ground{z-index:-1;position:fixed;inset:0}.ground span{transition:opacity .5s;position:absolute;inset:0}.ground-light{background:var(--ground-light)}.ground-dark{background:var(--ground-dark);opacity:0}:root[data-theme=dark] .ground-light{opacity:0}:root[data-theme=dark] .ground-dark{opacity:1}:root.theming *,:root.theming :before,:root.theming :after{transition:color .4s,background-color .4s,border-color .4s,box-shadow .4s,opacity .4s!important}.flash{z-index:40;pointer-events:none;background:var(--neon);opacity:0;position:fixed;inset:0}:root[data-neon=more] .flash.is-on{animation:.46s ease-out flash}@keyframes flash{0%{opacity:0}35%{opacity:.13}to{opacity:0}}.progress{z-index:25;background:var(--neon);transform-origin:0;opacity:0;height:2px;transition:opacity .3s;position:fixed;top:0;left:0;right:0;transform:scaleX(0)}:root[data-neon=more] .scrolled .progress{opacity:1}a{color:inherit;text-decoration:none}p{text-wrap:pretty;margin:0}h1,h2,h3{margin:0}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}:focus-visible{outline:1.5px solid var(--ink);outline-offset:3px;border-radius:2px}::selection{background:var(--neon);color:#211f1c}.skip{left:var(--edge);z-index:50;font-family:var(--mono);background:var(--neon);color:#211f1c;padding:4px 8px;font-size:13px;position:absolute;top:-60px}.skip:focus{top:8px}.icon{vertical-align:middle;flex:none;display:inline-block}.hl{color:var(--neon)}:root:not([data-theme=dark]) .hl{color:inherit;background-image:linear-gradient(transparent 60%, var(--neon) 60%, var(--neon) 94%, transparent 94%);-webkit-box-decoration-break:clone;box-decoration-break:clone;padding:0 .06em}.chip{color:var(--neon)}:root:not([data-theme=dark]) .chip{background:var(--neon);color:#211f1c;margin:0 -3px;padding:1px 3px}.mark{color:var(--neon)}:root:not([data-theme=dark]) .mark{color:inherit;background:var(--neon);-webkit-box-decoration-break:clone;box-decoration-break:clone;margin:0 -.02em;padding:0 .14em}.sq{background:var(--neon);width:8px;height:8px;box-shadow:var(--square-edge);flex:none;display:inline-block}.site-header{z-index:20;height:72px;padding:0 var(--edge);justify-content:space-between;align-items:center;display:flex;position:fixed;inset:0 0 auto}.site-header:before{content:"";z-index:-1;background:linear-gradient(var(--header-fade) 40%, transparent);backdrop-filter:blur(10px);opacity:0;transition:opacity .2s;position:absolute;inset:0 0 -18px;-webkit-mask-image:linear-gradient(#000 55%,#0000);mask-image:linear-gradient(#000 55%,#0000)}.scrolled .site-header:before{opacity:1}.menu-open .site-header:before{opacity:0}.brand{letter-spacing:-.45px;white-space:nowrap;font-size:23px;font-weight:600;line-height:28px}.brand .dot{color:var(--ink)}:root[data-theme=dark] .brand .dot{color:var(--neon)}.header-actions{font-family:var(--mono);align-items:center;gap:30px;font-size:15px;display:flex}.header-actions button{align-items:center;gap:8px;padding:6px 0;display:inline-flex}.header-actions button:hover .btn-text{text-underline-offset:4px;text-decoration:underline 1px}.open-label,.close-label{align-items:center;gap:8px;display:inline-flex}.close-label,.menu-open .open-label{display:none}.menu-open .close-label{display:inline-flex}.menu{z-index:15;background:var(--frost);backdrop-filter:blur();opacity:0;visibility:hidden;transition:opacity .3s,-webkit-backdrop-filter .4s,backdrop-filter .4s,visibility .4s;position:fixed;inset:0;overflow-y:auto}.menu-open .menu{opacity:1;visibility:visible;backdrop-filter:blur(24px);transition:opacity .28s,-webkit-backdrop-filter .45s,backdrop-filter .45s}.menu-open{overflow:hidden}.menu-nav li,.menu-contact,.menu-meta{opacity:0;transition:opacity .3s ease, transform .5s var(--ease);transform:translateY(14px)}.menu-open .menu-nav li,.menu-open .menu-contact,.menu-open .menu-meta{opacity:1;transform:none}.menu-open .menu-nav li:first-child{transition-delay:60ms}.menu-open .menu-nav li:nth-child(2){transition-delay:.11s}.menu-open .menu-nav li:nth-child(3){transition-delay:.16s}.menu-open .menu-nav li:nth-child(4){transition-delay:.21s}.menu-open .menu-nav li:nth-child(5){transition-delay:.26s}.menu-open .menu-contact{transition-delay:.2s}.menu-open .menu-meta{transition-delay:.3s}.menu-sweep{background:var(--neon);transform-origin:0;opacity:0;height:2px;position:absolute;top:0;left:0;right:0;transform:scaleX(0)}:root[data-neon=more] .menu-open .menu-sweep{opacity:1;transition:transform .55s var(--ease);transform:scaleX(1)}.menu-inner{grid-template-columns:243px 420px;width:663px;margin:0 auto;padding:218px 0 120px;display:grid}.menu-nav{margin:0;padding:0;list-style:none}.menu-nav li+li{margin-top:25px}.menu-title{letter-spacing:-.35px;align-items:center;gap:12px;margin-top:2px;font-size:27px;font-weight:600;line-height:32px;display:flex}.menu-nav a:hover .menu-word{text-underline-offset:5px;text-decoration:underline 1.5px}.menu-new{font-family:var(--mono);letter-spacing:0;color:var(--mid);align-items:center;gap:6px;font-size:12px;font-weight:400;display:inline-flex}.menu-contact{padding-top:168px}.menu-contact p{margin-top:14px;font-size:16px;line-height:23px}.menu-meta{left:var(--edge);position:fixed;bottom:34px}.num{font-family:var(--mono);color:var(--faint);font-size:10px;line-height:15px}.meta-value{font-family:var(--mono);margin-top:3px;font-size:15px;line-height:22px}.alink{font-family:var(--mono);color:var(--mid);align-items:center;gap:3px;font-size:15px;transition:color .15s;display:inline-flex}.alink:hover{color:var(--ink)}.alink:hover .icon,.row-title:hover .icon,.item-title:hover .icon{transform:translate(1px,-1px)}.icon{transition:transform .15s}.alink.action{color:var(--ink)}:root[data-theme=dark] .alink.action{color:var(--neon)}.links{flex-wrap:wrap;gap:10px 26px;margin-top:18px;display:flex}.page{width:100%;max-width:calc(var(--col) + 2 * var(--edge));padding:120px var(--edge) 140px;margin:0 auto}.page-title{letter-spacing:-.35px;margin-top:3px;font-size:35px;font-weight:600;line-height:40px}.lede{max-width:446px;margin-top:12px}.section{margin-top:96px}.section h2{letter-spacing:-.3px;font-size:25px;font-weight:600;line-height:30px}.rows{margin-top:34px}.row+.row{margin-top:30px}.row-head{border-bottom:1px solid var(--hair);justify-content:space-between;align-items:center;gap:24px;padding-bottom:10px;display:flex}.row-title{align-items:center;gap:9px;min-width:0;font-weight:600;display:inline-flex}.row-date{font-family:var(--mono);color:var(--mid);white-space:nowrap;font-size:15px}.row-text{max-width:470px;color:var(--mid);margin-top:14px;font-size:14.5px;line-height:21px}.row-text a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--hair);text-underline-offset:3px}.row-text a:hover{text-decoration-color:var(--ink)}.row-extra{flex-wrap:wrap;gap:6px 22px;margin-top:10px;display:flex}.row-extra .alink{font-size:13px}a.row-title:hover .t,a.item-title:hover .t{text-underline-offset:4px;text-decoration:underline 1px}.grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:34px;margin-top:36px;display:grid}.item-title{border-bottom:1px solid var(--hair);align-items:center;gap:4px;padding-bottom:10px;font-weight:600;display:flex}.item-text{color:var(--mid);margin-top:14px;font-size:14.5px;line-height:21px}.intro{justify-content:space-between;gap:40px;margin-top:54px;display:flex}.intro-text{max-width:420px}.intro-text:only-child{max-width:540px}.intro-text p{letter-spacing:-.15px;font-size:20.5px;line-height:27px}.intro-text p+p{margin-top:22px}.portrait{object-fit:cover;border-radius:6px;flex:none;width:212px;height:212px}.job{margin-top:48px}.job-head,.job-body{grid-template-columns:336px 360px;display:grid}.job-head{border-bottom:1px solid var(--hair);align-items:center;padding-bottom:10px}.job-body{align-items:start;margin-top:16px}.job-role{padding-right:24px;font-size:14.5px;font-weight:600;line-height:21px}.job-text p{color:var(--mid);font-size:14.5px;line-height:21px}.job-text p+p{margin-top:16px}.commits{margin-top:30px;padding:0;list-style:none}.commit{border-bottom:1px solid var(--hair);grid-template-columns:104px 190px minmax(0,1fr);align-items:baseline;gap:0 12px;padding:10px 0;font-size:14.5px;line-height:21px;display:grid}.commit-date,.commit-repo{font-family:var(--mono);color:var(--faint);font-size:13px}.commit-repo{color:var(--mid)}.commit a{overflow-wrap:anywhere;min-width:0}.commit a:hover .t{text-underline-offset:3px;text-decoration:underline 1px}.commit a .icon{vertical-align:-1px;margin-left:4px}.post-date{font-family:var(--mono);color:var(--mid);margin-top:12px;font-size:15px}.prose{max-width:560px;margin-top:48px}.prose p{font-size:17px;line-height:27px}.prose p+p{margin-top:18px}.prose code{font-family:var(--mono);background:var(--code-bg);border-radius:3px;padding:1px 4px;font-size:.86em}.back{margin-bottom:28px}.home-page{height:100dvh;overflow:hidden}.home{height:100dvh;position:relative}.hero{left:var(--edge);max-width:640px;padding-right:var(--edge);position:absolute;top:94px}.hero p{letter-spacing:-.2px;text-wrap:balance;font-size:26px;line-height:34px}.corner{position:absolute;bottom:34px}.corner.left{left:var(--edge)}.corner.right{right:var(--edge)}.corner .meta-value{align-items:center;display:flex}.rule{background:var(--hair);width:86px;height:1px;margin:0 14px;display:inline-block}.clock{font-variant-numeric:tabular-nums}.now-link{align-items:center;gap:10px;display:inline-flex}.now-link:hover .t{text-underline-offset:4px;text-decoration:underline 1px}@media (width<=760px){:root{--edge:16px}.brand{font-size:19px}.header-actions{gap:20px;font-size:14px}.theme-toggle .btn-text{display:none}.menu-inner{width:auto;padding:116px var(--edge) 120px;grid-template-columns:1fr}.menu-contact{padding-top:56px}.menu-meta{margin:56px var(--edge) 0;padding-bottom:40px;position:static}.page{padding-top:104px}.section{margin-top:72px}.grid{grid-template-columns:1fr;gap:28px}.intro{flex-direction:column-reverse;gap:28px;margin-top:40px}.intro-text p{font-size:19px;line-height:26px}.portrait{width:132px;height:132px}.job-head,.job-body{grid-template-columns:1fr}.job-head{gap:2px}.job-body{gap:10px}.row-head{flex-wrap:wrap;gap:2px 16px}.commit{grid-template-columns:auto minmax(0,1fr);gap:2px 12px}.commit a{grid-column:1/-1}.hero{top:88px}.hero p{font-size:23px;line-height:30px}.corner.right{left:var(--edge);max-width:calc(100% - 2 * var(--edge));bottom:34px;right:auto}.corner.left{bottom:106px}.corner.right .meta-value,.now-link{min-width:0;max-width:100%}.now-link .t{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.rule{width:36px;margin:0 12px}}@media (height<=540px){.home-page{height:auto;overflow:auto}.home{min-height:540px}}:root[data-neon=more] .alink:hover,:root[data-neon=more] .header-actions button:hover .btn-text{text-decoration:underline;text-decoration-color:var(--neon);text-underline-offset:4px;text-decoration-thickness:2px}:root[data-neon=more][data-theme=dark] .alink:hover,:root[data-neon=more][data-theme=dark] .theme-toggle .icon,:root[data-neon=more][data-theme=dark] .menu-toggle .icon{color:var(--neon)}:root[data-neon=more][data-theme=dark] :focus-visible{outline-color:var(--neon);outline-width:2px}:root[data-neon=more] .row-head:has(a:hover),:root[data-neon=more] .job-head:has(a:hover),:root[data-neon=more] a.item-title:hover,:root[data-neon=more] .commit:hover{border-color:var(--neon)}:root[data-neon=more] .section>h2:before{content:"";vertical-align:2px;background:var(--neon);width:8px;height:8px;box-shadow:var(--square-edge);margin-right:12px;display:inline-block}:root[data-neon=more] .sq{animation:2.6s ease-in-out infinite pulse}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}:root[data-neon=more] main{animation:rise .55s var(--ease) both}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}.menu-nav li,.menu-contact,.menu-meta{opacity:1;transform:none}}:root[data-theme=dark] .show-light,:root:not([data-theme=dark]) .show-dark{display:none}.show-light,.show-dark{display:inline-flex}
