@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:italic;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-ext-400-italic.CBjNughH.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-400-italic.B4oTjJdl.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:italic;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-400-italic.CBJ8pzag.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-400-italic.2syK4fUT.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:italic;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-vietnamese-400-italic.DRuN92E5.woff2)format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-400-italic.D6eaYXMU.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:italic;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-ext-400-italic.B7_fu1kp.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-400-italic.Bg0ZHwF4.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:italic;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-400-italic.BqAiT5Ww.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-400-italic.66oory27.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:600;src:url(/_astro/ibm-plex-mono-cyrillic-ext-600-normal.V-xxqcpd.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-600-normal.9HEixskS.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:600;src:url(/_astro/ibm-plex-mono-cyrillic-600-normal.CTOM6hUh.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-600-normal.fLZuRloM.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:600;src:url(/_astro/ibm-plex-mono-vietnamese-600-normal.D2EvbN8M.woff2)format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-600-normal.iLQfcSjf.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:600;src:url(/_astro/ibm-plex-mono-latin-ext-600-normal.D38SheWl.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-600-normal.DmB0ttJJ.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:600;src:url(/_astro/ibm-plex-mono-latin-600-normal.BgSNZQsw.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-600-normal.DWFSQ4vo.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:Departure Mono;src:url(/fonts/DepartureMono-Regular.woff2)format("woff2");font-display:swap}:root{--bg:#0d0b07;--bg-raised:#15110a;--fg:#ffb000;--fg-soft:#e8c47a;--dim:#9c7a3c;--faint:#5a4724;--line:#2b2213;--ok:#3dff6e;--err:#ff5f45;--sel:#ffb000;--sel-fg:#0d0b07;--glow:0 0 6px #ffb00073;--scan:#00000038;--font-display:"Departure Mono", "IBM Plex Mono", ui-monospace, monospace;--font-body:"IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;--col:920px;color-scheme:dark}:root[data-theme=paper]{--bg:#f3ead6;--bg-raised:#ebe0c7;--fg:#1c1608;--fg-soft:#3a2f18;--dim:#7a6640;--faint:#b3a07a;--line:#d6c7a4;--ok:#1d7a35;--err:#b8321e;--sel:#1c1608;--sel-fg:#f3ead6;--glow:none;--scan:transparent;color-scheme:light}*{box-sizing:border-box}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{background:var(--bg);color:var(--fg-soft);font:15px/1.7 var(--font-body);margin:0;padding-bottom:44px;overflow-x:hidden}::selection{background:var(--sel);color:var(--sel-fg)}body:before,body:after{content:"";pointer-events:none;z-index:90;position:fixed;inset:0}body:before{background:repeating-linear-gradient(to bottom, transparent 0 2px, var(--scan) 2px 3px)}body:after{background:radial-gradient(#0000 55%,#00000073 100%);animation:6s step-end infinite flicker}:root[data-theme=paper] body:after{display:none}@keyframes flicker{0%,to{opacity:1}47%{opacity:.94}48%{opacity:1}83%{opacity:.97}}@media (prefers-reduced-motion:reduce){body:after{animation:none}}a{color:var(--fg);text-decoration:underline;text-decoration-color:var(--faint);text-underline-offset:3px}a:hover,a:focus-visible{background:var(--fg);color:var(--bg);outline:none;text-decoration:none}h1,h2,h3{font-family:var(--font-display);color:var(--fg);text-shadow:var(--glow);letter-spacing:.01em;font-weight:400;line-height:1.25}pre,code{font-family:var(--font-body)}pre{white-space:pre;color:var(--fg-soft);margin:0;font-size:13.5px;line-height:1.6;overflow-x:auto}strong{color:var(--fg);font-weight:600}.dim{color:var(--dim)}.faint{color:var(--faint)}.ok{color:var(--ok)}.fg{color:var(--fg)}.wrap{max-width:var(--col);margin:0 auto;padding:0 16px}.cursor{background:var(--fg);vertical-align:text-bottom;width:.6em;height:1.05em;box-shadow:var(--glow);margin-left:2px;animation:1.05s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}@media (prefers-reduced-motion:reduce){.cursor{animation:none}}.topbar{z-index:50;background:var(--bg);border-bottom:1px solid var(--line);position:sticky;top:0}.topbar .wrap{scrollbar-width:none;align-items:center;gap:4px;height:44px;display:flex;overflow-x:auto}.topbar .wrap::-webkit-scrollbar{display:none}.brand{font-family:var(--font-display);color:var(--fg);white-space:nowrap;margin-right:12px;text-decoration:none}.tab{white-space:nowrap;color:var(--dim);padding:2px 8px;font-size:13px;text-decoration:none}.tab .n{color:var(--faint)}.tab.active{background:var(--fg);color:var(--bg)}.tab.active .n{color:var(--bg)}.spacer{flex:1}.btn-ghost{font:inherit;border:1px solid var(--line);color:var(--dim);cursor:pointer;white-space:nowrap;background:0 0;padding:2px 8px;font-size:13px}.btn-ghost:hover,.btn-ghost:focus-visible{border-color:var(--fg);color:var(--fg);outline:none}.statusbar{z-index:60;background:var(--bg-raised);border-top:1px solid var(--line);height:30px;color:var(--dim);white-space:nowrap;align-items:center;font-size:12px;display:flex;position:fixed;bottom:0;left:0;right:0;overflow:hidden}.statusbar .mode{background:var(--fg);color:var(--bg);align-items:center;height:100%;padding:0 10px;font-weight:600;display:flex}.statusbar span{border-right:1px solid var(--line);padding:0 10px}.statusbar .grow{text-overflow:ellipsis;border:0;flex:1;overflow:hidden}@media (width<=560px){.statusbar .hide-sm{display:none}}.manhead{color:var(--dim);justify-content:space-between;gap:8px;padding:28px 0 0;font-size:12px;display:flex}@media (width<=560px){.manhead .mid{display:none}}section{padding:56px 0 8px;scroll-margin-top:52px}.cmd{font-family:var(--font-display);margin:0 0 6px;font-size:clamp(20px,3.4vw,26px)}.cmd .ps1{color:var(--ok);text-shadow:none}.label{letter-spacing:.14em;color:var(--faint);margin:0 0 20px;font-size:12px}.prose p{max-width:68ch;margin:0 0 14px}.hero{grid-template-columns:1fr 220px;align-items:center;gap:36px;padding-top:40px;display:grid}@media (width<=720px){.hero{grid-template-columns:1fr}.hero .photo{order:-1;width:160px}}.hero h1{margin:6px 0 10px;font-size:clamp(38px,8vw,72px)}.hero .role{color:var(--fg);margin:0 0 18px;font-size:16px}.hero .pitch{max-width:56ch;margin:0 0 26px}.actions{flex-wrap:wrap;gap:10px;display:flex}.btn{font:inherit;color:var(--fg);border:1px solid var(--fg);background:0 0;padding:6px 12px;font-size:14px;text-decoration:none}.btn:before{content:"[ ";color:var(--dim)}.btn:after{content:" ]";color:var(--dim)}.btn:hover:before,.btn:hover:after,.btn:focus-visible:before,.btn:focus-visible:after{color:var(--bg)}.btn.primary{background:var(--fg);color:var(--bg)}.btn.primary:before,.btn.primary:after{color:var(--bg)}.photo{aspect-ratio:1;border:1px solid var(--fg);width:100%;box-shadow:var(--glow);position:relative;overflow:hidden}.photo img{object-fit:cover;width:100%;height:100%;display:block;position:absolute;inset:0}.photo .dither{image-rendering:pixelated;transition:opacity .35s steps(4,end)}.photo:hover .dither,.photo:focus-within .dither,.photo.reveal .dither{opacity:0}.photo figcaption{background:var(--bg);color:var(--dim);border-top:1px solid var(--line);padding:2px 6px;font-size:11px;position:absolute;bottom:0;left:0;right:0}:root[data-theme=paper] .photo .dither{filter:invert()hue-rotate(180deg)brightness(.9)}.ps{border-collapse:collapse;width:100%;font-size:14px}.ps th{text-align:left;color:var(--dim);border-bottom:1px solid var(--line);padding:4px 12px 4px 0;font-weight:400}.ps td{vertical-align:top;border-bottom:1px dashed var(--line);padding:8px 12px 8px 0}.ps .pid{color:var(--faint);width:48px}.ps .name{color:var(--fg);white-space:nowrap}.ps .what{color:var(--fg-soft)}.bar{border:1px solid var(--faint);vertical-align:middle;width:90px;height:9px;margin-right:8px;display:inline-block;position:relative}.bar i{background:var(--fg);width:0;transition:width 1.2s steps(12,end);position:absolute;inset:0 auto 0 0}.in .bar i{width:var(--w)}@media (width<=560px){.ps .bar{width:50px}.ps .pid{display:none}}.gitlog details{border-left:1px solid var(--line);margin-left:4px;padding-left:16px}.gitlog summary{cursor:pointer;flex-wrap:wrap;gap:12px;padding:6px 0;list-style:none;display:flex}.gitlog summary::-webkit-details-marker{display:none}.gitlog summary:before{content:"*";color:var(--fg);background:var(--bg);margin-left:-21px;padding:0 2px}.gitlog summary:hover .msg,.gitlog summary:focus-visible .msg{background:var(--fg);color:var(--bg)}.gitlog summary:focus-visible{outline:none}.gitlog .date{color:var(--dim)}.gitlog .ref{color:var(--ok)}.gitlog .msg{color:var(--fg)}.gitlog .hint{color:var(--faint);font-size:12px}.gitlog details[open] .hint{display:none}.gitlog ul{margin:2px 0 14px;padding-left:0;list-style:none}.gitlog li{max-width:72ch;margin-bottom:4px;padding-left:18px;position:relative}.gitlog li:before{content:"+";color:var(--ok);position:absolute;left:0}.grid{grid-template-columns:1fr 1fr;gap:18px;display:grid}@media (width<=760px){.grid{grid-template-columns:1fr}}.card{border:1px solid var(--line);background:var(--bg-raised);min-width:0;padding:0}.card.wide{grid-column:1/-1}.card.main{border-color:var(--fg);box-shadow:var(--glow)}.card-head{color:var(--dim);border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;gap:10px;padding:6px 14px;font-size:12px;display:flex}.card.main .card-head{background:var(--fg);color:var(--bg);border-color:var(--fg)}.card-body{padding:18px 16px}.card h3{margin:0 0 4px;font-size:clamp(22px,4vw,30px)}.card .tag{color:var(--ok);margin:0 0 14px;font-size:12px}.card .lede{color:var(--fg);max-width:70ch;margin:0 0 16px}.card h4{font:600 13px var(--font-body);color:var(--fg);letter-spacing:.08em;text-transform:uppercase;margin:22px 0 8px}.card h4:before{content:"## ";color:var(--faint)}.card p{max-width:72ch;margin:0 0 10px}.card ul{margin:0 0 8px;padding-left:0;list-style:none}.card li{margin-bottom:8px;padding-left:18px;position:relative}.card li:before{content:">";color:var(--fg);position:absolute;left:0}.term{border:1px solid var(--line);background:var(--bg);margin:6px 0 12px;padding:12px 14px}.stackline{color:var(--dim);border-top:1px dashed var(--line);word-spacing:4px;margin-top:16px;padding-top:10px;font-size:12px}.stackline b{color:var(--fg);font-weight:400}.beforeafter{grid-template-columns:auto 1fr;gap:2px 14px;margin:4px 0 14px;font-size:14px;display:grid}.beforeafter .k{color:var(--dim)}.beforeafter .bad{color:var(--err)}.big-num{font-family:var(--font-display);color:var(--fg);text-shadow:var(--glow);margin:4px 0 6px;font-size:clamp(34px,7vw,52px);line-height:1}.flow{flex-wrap:wrap;gap:4px 0;margin:6px 0 14px;font-size:12.5px;display:flex}.flow span{border:1px solid var(--faint);color:var(--fg-soft);padding:2px 6px}.flow span.gate{border-color:var(--ok);color:var(--ok)}.flow em{color:var(--faint);padding:2px 4px;font-style:normal}.flow span.lit{background:var(--fg);color:var(--bg);border-color:var(--fg)}.clients{margin:0;padding:0;list-style:none}.clients li{border-bottom:1px dashed var(--line);grid-template-columns:40px minmax(130px,180px) 1fr;gap:8px;padding:10px 0;display:grid}@media (width<=560px){.clients li{grid-template-columns:34px 1fr}.clients .what{grid-column:2}}.clients .box{color:var(--dim)}.clients .box b{color:var(--ok);width:1ch;font-weight:400;display:inline-block}.clients .name{color:var(--fg)}.ls{margin:0;padding:0;font-size:14px;list-style:none}.ls li{border-bottom:1px dashed var(--line);grid-template-columns:auto auto auto 1fr;gap:16px;padding:8px 0;display:grid}.ls .perm,.ls .min{color:var(--faint)}.ls .date{color:var(--dim)}@media (width<=600px){.ls li{grid-template-columns:auto 1fr;gap:2px 12px}.ls .perm{display:none}.ls .title{grid-column:1/-1}}.kv{grid-template-columns:100px 1fr;gap:6px 16px;font-size:14px;display:grid}.kv dt{color:var(--dim)}.kv dd{overflow-wrap:anywhere;margin:0}footer{border-top:1px solid var(--line);color:var(--faint);margin-top:72px;padding:20px 0 30px;font-size:12px}.rv{opacity:0;transition:opacity .5s steps(5,end),transform .5s steps(5,end);transform:translateY(8px)}.rv.in{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){.rv{opacity:1;transition:none;transform:none}}.no-js .rv{opacity:1;transform:none}#boot{z-index:100;background:var(--bg);cursor:pointer;padding:24px 16px;font-size:14px;position:fixed;inset:0;overflow:hidden}#boot pre{color:var(--fg);text-shadow:var(--glow);white-space:pre-wrap}#boot .skip{color:var(--dim);font-size:12px;position:absolute;bottom:16px;right:16px}#boot.gone{opacity:0;pointer-events:none;transition:opacity .3s steps(3,end)}#help{z-index:95;background:#0009;place-items:center;padding:16px;display:none;position:fixed;inset:0}#help.open{display:grid}#help .panel{background:var(--bg);border:1px solid var(--fg);box-shadow:var(--glow);width:min(440px,100%);padding:18px 20px}#help h2{margin:0 0 12px;font-size:20px}#help .kv{grid-template-columns:90px 1fr}#help kbd{color:var(--fg);font-family:var(--font-body)}#toast{z-index:96;background:var(--fg);color:var(--bg);max-width:calc(100% - 32px);padding:6px 12px;font-size:13px;display:none;position:fixed;bottom:44px;left:50%;transform:translate(-50%)}#toast.show{display:block}.post{padding-top:36px}.post h1{margin:8px 0 12px;font-size:clamp(28px,5vw,44px)}.post .meta{color:var(--dim);margin-bottom:28px;font-size:13px}.post .body{max-width:70ch}.post .body h2{margin:36px 0 10px;font-size:24px}.post .body h2:before{content:"## ";color:var(--faint)}.post .body h3{margin:28px 0 8px;font-size:19px}.post .body pre{border:1px solid var(--line);margin:16px 0;padding:14px}.post .body :not(pre)>code{color:var(--fg);background:var(--bg-raised);padding:1px 5px}.post .body blockquote{border-left:2px solid var(--fg);color:var(--fg);margin:16px 0;padding-left:14px}.post .body img{border:1px solid var(--line);max-width:100%}.principles{grid-template-columns:90px 1fr;gap:12px 18px;font-size:14.5px}.principles dt{color:var(--fg);font-family:var(--font-display);text-shadow:var(--glow);font-size:17px}.principles dd{max-width:72ch}.card-head a{color:inherit;text-decoration-color:currentColor}.card.main .card-head a:hover,.card.main .card-head a:focus-visible{background:var(--bg);color:var(--fg)}.post .body figure{margin:20px 0}.post .body figcaption{color:var(--dim);margin-top:6px;font-size:12px}.post .body .code-file{color:var(--dim);border:1px solid var(--line);border-bottom:0;margin-top:16px;padding:4px 12px;font-size:12px}.post .body .code-file+pre{margin-top:0}.post .body pre.shiki{background:var(--bg-raised)!important}.draft{color:var(--err)}
