@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/bricolage-grotesque-vietnamese-wght-normal.BUzh504Q.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:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/bricolage-grotesque-latin-ext-wght-normal.CcLUaPy7.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:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/bricolage-grotesque-latin-wght-normal.DLoelf7F.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:Instrument Sans Variable;font-style:normal;font-display:swap;font-weight:400 700;src:url(/_astro/instrument-sans-latin-ext-wght-normal.B5bTHO_g.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:Instrument Sans Variable;font-style:normal;font-display:swap;font-weight:400 700;src:url(/_astro/instrument-sans-latin-wght-normal.BbzFLZTg.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{--paper:#fdf9ee;--ink:#1c1a14;--muted:#6c6656;--line:#1c1a141f;--rule:#1c1a1438;--accent:#e0562b;--mark:#ffdcc2;--code-bg:#fffdf7;--code-line:#1c1a141a;--code-muted:#857e6b;--sans:"Instrument Sans Variable", system-ui, -apple-system, sans-serif;--display:"Bricolage Grotesque Variable", var(--sans);--mono:ui-monospace, "SF Mono", "JetBrains Mono", Menlo, monospace;--col:clamp(560px, 60vw, 760px);--gutter:32px;color-scheme:light}:root[data-theme=dark]{--paper:#13120d;--ink:#f7f2e4;--muted:#a8a18f;--line:#f7f2e421;--rule:#f7f2e43d;--accent:#ff8a5c;--mark:#ff8a5c47;--code-bg:#1c1a13;--code-line:#f7f2e417;--code-muted:#8e8874;color-scheme:dark}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scrollbar-gutter:stable}body{background:var(--paper);color:var(--ink);font:16.5px / 1.65 var(--sans);-webkit-font-smoothing:antialiased;overflow-wrap:break-word;margin:0;transition:background .3s,color .3s}a{color:inherit;text-decoration:none}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}[hidden]{display:none!important}.wrap{max-width:1100px;padding-inline:var(--gutter);margin:0 auto}.skip{z-index:30;background:var(--ink);color:var(--paper);border-radius:999px;padding:10px 16px;position:absolute;top:-60px;left:16px}.skip:focus{top:12px}h1,h2,h3{text-wrap:balance}kbd{font:500 11px / 1 var(--mono);border:1px solid var(--line);background:color-mix(in srgb, var(--ink) 4%, transparent);border-radius:5px;padding:3px 5px}header.top{z-index:10;background:color-mix(in srgb, var(--paper) 85%, transparent);backdrop-filter:blur(14px);position:sticky;top:0}.bar{align-items:center;gap:10px;padding-block:18px;display:flex}.brand{font:700 19px / 1 var(--display);letter-spacing:-.03em;margin-right:auto}.brand i{color:var(--accent);font-style:normal}.tabs{gap:2px;display:flex}.tab{color:var(--muted);border-radius:999px;padding:7px 14px;font-size:15px;transition:color .2s,background .2s}@media (hover:hover){.tab:hover{color:var(--ink);background:color-mix(in srgb, var(--ink) 5%, transparent)}}.tab.active{color:var(--ink);text-decoration:underline .5em var(--mark);text-underline-offset:-.3em;text-decoration-skip-ink:none}.search{all:unset;cursor:pointer;border:1px solid var(--line);color:var(--muted);border-radius:999px;align-items:center;gap:12px;margin-left:10px;padding:6px 8px 6px 14px;font-size:14px;display:flex}@media (hover:hover){.search:hover{border-color:var(--ink);color:var(--ink)}}.search .glass{width:16px;height:16px;display:none}.theme-toggle{all:unset;cursor:pointer;width:36px;height:36px;color:var(--ink);border-radius:50%;place-items:center;transition:transform .5s cubic-bezier(.22,1,.36,1);display:grid}@media (hover:hover){.theme-toggle:hover{transform:rotate(-25deg)}}.theme-toggle svg{width:19px;height:19px}.theme-toggle .sun,[data-theme=dark] .theme-toggle .moon{display:none}[data-theme=dark] .theme-toggle .sun{display:block}.intro{max-width:900px;padding-block:104px 96px}.intro h1{font:800 clamp(52px, 9vw, 104px) / .92 var(--display);letter-spacing:-.04em;margin:0 0 28px}.intro h1 .wave{transform-origin:70% 80%;animation:2.4s ease-in-out 1s wave;display:inline-block}@keyframes wave{0%,60%,to{transform:rotate(0)}10%,30%{transform:rotate(14deg)}20%,40%{transform:rotate(-8deg)}}.intro p{max-width:30em;color:var(--muted);margin:0;font-size:clamp(19px,2.2vw,23px);line-height:1.45}.intro p b{color:var(--ink);font-weight:600}.lately{color:var(--ink);background:linear-gradient(transparent 58%, var(--mark) 58%);padding:0 2px;transition:opacity .3s}.lately.swap{opacity:0}.streams{grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);gap:72px;padding-bottom:40px;display:grid}.s-head{border-bottom:1px solid var(--rule);justify-content:space-between;align-items:baseline;gap:12px;padding-bottom:14px;display:flex}.s-head h2{font:700 26px / 1 var(--display);letter-spacing:-.03em;margin:0}.s-head span{color:var(--muted);font-size:14px}.posts,.bits{margin:0;padding:0;list-style:none}.posts a{border-bottom:1px solid var(--line);padding-block:24px;display:block}.posts time,.bits time{color:var(--muted);font-size:13.5px}.posts h3{font:700 23px / 1.2 var(--display);letter-spacing:-.03em;margin:4px 0 8px}.posts h3 .arr{color:var(--accent);opacity:0;transition:all .35s cubic-bezier(.22,1,.36,1);display:inline-block;transform:translate(-8px)}.posts a:hover h3 .arr,.posts a:focus-visible h3 .arr{opacity:1;transform:none}.posts p{color:var(--muted);margin:0;font-size:15.5px;line-height:1.55}.bits a{border-bottom:1px solid var(--line);grid-template-columns:44px minmax(0,1fr);gap:0 10px;padding-block:18px;display:grid}.bits .num{font:700 22px / 1.1 var(--display);color:var(--accent)}.bits h3{font:600 16px / 1.35 var(--sans);letter-spacing:-.01em;margin:0 0 2px}.bits a:hover h3{text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:4px}.empty{color:var(--muted);padding-block:18px;font-size:14.5px}.page{max-width:var(--col);padding-block:96px 40px}.page h1{font:800 clamp(44px, 7vw, 72px) / .95 var(--display);letter-spacing:-.05em;margin:0 0 20px}.page .lead{color:var(--muted);margin:0;font-size:20px}.post{max-width:var(--col);margin:0 auto}.post-h{padding-block:80px 0}.crumb{color:var(--muted);font-size:14px}.crumb a:hover{color:var(--accent)}.post-h h1{font:800 clamp(38px, 6.4vw, 64px) / .98 var(--display);letter-spacing:-.04em;margin:18px 0 20px}.post-h .sub{color:var(--muted);margin:0 0 26px;font-size:19px;line-height:1.5}.meta{color:var(--muted);border-bottom:1px solid var(--rule);flex-wrap:wrap;align-items:center;gap:16px;padding-bottom:28px;font-size:14px;display:flex}.cp{border:1px solid var(--line);background:color-mix(in srgb, var(--paper) 70%, white 30%);border-radius:12px;margin-left:auto;display:inline-flex;position:relative}[data-theme=dark] .cp{background:#ffffff08}.cp svg{flex:none;width:17px;height:17px}.cp-main,.cp-more{all:unset;cursor:pointer;color:var(--ink);font:500 14.5px / 1 var(--sans);align-items:center;gap:8px;transition:background .2s;display:inline-flex}.cp-main{border-radius:11px 0 0 11px;padding:9px 14px 9px 12px}.cp-more{border-left:1px solid var(--line);border-radius:0 11px 11px 0;padding:9px}.cp-more svg{transition:transform .3s cubic-bezier(.22,1,.36,1)}.cp-more[aria-expanded=true] svg{transform:rotate(180deg)}.cp-more[aria-expanded=true]{background:color-mix(in srgb, var(--ink) 5%, transparent)}@media (hover:hover){.cp-main:hover,.cp-more:hover{background:color-mix(in srgb, var(--ink) 5%, transparent)}}.cp-main span.done{color:var(--accent)}.cp-menu{z-index:20;background:var(--paper);border:1px solid var(--line);transform-origin:100% 0;border-radius:16px;gap:2px;width:300px;padding:6px;animation:.22s cubic-bezier(.22,1,.36,1) pop;display:grid;position:absolute;top:calc(100% + 8px);right:0;box-shadow:0 18px 40px #1a19151f}@keyframes pop{0%{opacity:0;transform:translateY(-4px)scale(.98)}}.cp-item{all:unset;box-sizing:border-box;cursor:pointer;color:var(--ink);border-radius:11px;align-items:center;gap:12px;padding:8px 10px;display:flex}@media (hover:hover){.cp-item:hover{background:color-mix(in srgb, var(--ink) 5%, transparent)}}.cp-item:focus-visible{outline:2px solid var(--accent)}.cp-item i{border:1px solid var(--line);width:34px;height:34px;color:var(--muted);border-radius:9px;flex:none;place-items:center;display:grid}@media (hover:hover){.cp-item:hover i{color:var(--accent);border-color:color-mix(in srgb, var(--accent) 40%, transparent)}}.cp-item b{font:600 14.5px / 1.3 var(--sans);display:block}.cp-item small{color:var(--muted);font-size:13px;line-height:1.35;display:block}.prose{padding-block:36px 80px;font-size:17.5px;line-height:1.75}.prose>:first-child{margin-top:0}.prose h1,.prose h2{font:700 30px / 1.15 var(--display);letter-spacing:-.035em;margin:48px 0 12px}.prose h2{font-size:28px}.prose h3{font:700 22px / 1.2 var(--display);letter-spacing:-.03em;margin:36px 0 10px}.prose p,.prose ul,.prose ol,.prose blockquote,.prose table{margin:0 0 22px}.prose ul,.prose ol{padding-left:24px}.prose li+li{margin-top:6px}.prose a{text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:3px}.prose a:hover{color:var(--accent)}.prose mark{color:inherit;background:linear-gradient(transparent 55%, var(--mark) 55%);padding:0 2px}.prose :not(pre)>code{font:.84em var(--mono);background:var(--mark);border-radius:6px;padding:2px 6px}.prose blockquote{border-left:2px solid var(--accent);color:var(--muted);padding:4px 0 4px 18px}.prose img{outline:1px solid var(--line);outline-offset:-1px;border-radius:12px;max-width:100%;height:auto}.prose hr{border:0;border-top:1px solid var(--line);margin:40px 0}.prose table{overscroll-behavior-x:contain;border-collapse:collapse;font-size:15px;display:block;overflow-x:auto}.prose th,.prose td{border-bottom:1px solid var(--line);text-align:left;padding:8px 12px}figure.code{--caption:37px;border:1px solid var(--code-line);background:var(--code-bg);border-radius:16px;margin:28px 0;position:relative;overflow:hidden}figure.code figcaption{height:var(--caption);border-bottom:1px solid var(--code-line);font:500 12px / 1 var(--mono);color:var(--code-muted);align-items:center;gap:4px;padding:8px 14px;display:flex}figure.code figcaption span{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-right:auto;overflow:hidden}.code-btn{all:unset;cursor:pointer;font:inherit;color:var(--code-muted);border-radius:6px;padding:4px 6px}.code-btn.done,.code-btn[aria-pressed=true]{color:var(--ink);background:var(--code-line)}@media (hover:hover){.code-btn:hover{color:var(--ink);background:var(--code-line)}}.code-btn:focus-visible{outline:2px solid var(--accent)}figure.code pre{font:13.5px / 1.7 var(--mono);scrollbar-width:thin;overscroll-behavior-x:contain;margin:0;padding:16px 18px;overflow-x:auto;background:0 0!important}figure.code pre code{font:inherit}figure.code.wrapped pre{white-space:pre-wrap;overflow-wrap:anywhere}figure.code:after{content:"";top:var(--caption);pointer-events:none;background:linear-gradient(to right, transparent, var(--code-bg));opacity:0;width:40px;transition:opacity .2s;position:absolute;bottom:0;right:0}figure.code.more:after{opacity:1}.astro-code span{color:var(--shiki-light)}[data-theme=dark] .astro-code span{color:var(--shiki-dark)}footer{margin-top:56px}.foot{border-top:1px solid var(--line);color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:16px;padding-block:28px 44px;font-size:14px;display:flex}.foot a:hover{color:var(--accent)}.foot .links{gap:18px;display:flex}.search-modal{z-index:50;backdrop-filter:blur(3px);background:#0a0a0847;justify-content:center;align-items:flex-start;padding:14vh 16px 0;animation:.2s ease-out pop;display:flex;position:fixed;inset:0}.search-box{background:var(--paper);width:min(560px,100%);color:var(--ink);border:1px solid var(--line);border-radius:16px;overflow:hidden;box-shadow:0 24px 60px #0000002e}.search-box input{all:unset;box-sizing:border-box;width:100%;font:16px / 1.4 var(--sans);border-bottom:1px solid var(--line);padding:18px 20px}.search-results{overscroll-behavior:contain;max-height:min(320px,100dvh - 14vh - 130px);margin:0;padding:6px;overflow:auto}.search-results a{border-radius:10px;justify-content:space-between;gap:16px;padding:10px 14px;font-size:14.5px;display:flex}.search-results [aria-selected=true]{background:color-mix(in srgb, var(--ink) 6%, transparent)}@media (hover:hover){.search-results a:hover{background:color-mix(in srgb, var(--ink) 6%, transparent)}}.search-results small{color:var(--muted);white-space:nowrap}.search-results .empty{margin:0;padding:14px}.search-foot{border-top:1px solid var(--line);color:var(--muted);gap:18px;padding:10px 18px;font-size:12px;display:flex}@media (width<=820px){.streams{grid-template-columns:minmax(0,1fr);gap:48px}}@media (width<=640px){:root{--gutter:16px;--col:100%}.bar{gap:2px;padding-block:14px}.brand{white-space:nowrap}.tab{padding-inline:7px}.search{width:36px;height:36px;color:var(--ink);border:0;place-items:center;margin-left:0;padding:0;display:grid}.search .glass{width:19px;height:19px;display:block}.search .lbl,.search kbd,.search-foot{display:none}.intro{padding-block:48px 56px}.page{padding-block:56px 32px}.post-h{padding-top:40px}.cp{margin-left:0}.cp-menu{transform-origin:0 0;width:min(300px,100vw - 32px);left:0;right:auto}figure.code pre{padding-inline:16px;font-size:12.5px}.prose figure.code{margin-inline:calc(-1 * var(--gutter));border-inline:0;border-radius:0}}@media (width<=360px){.tab{padding-inline:5px;font-size:14px}}@media (width<=300px){.bar{gap:0}.brand{font-size:17px}.tab{padding-inline:4px;font-size:13.5px}.search,.theme-toggle{width:32px;height:32px}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}.search-box input::-webkit-search-cancel-button{display:none}.page .lead a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:3px}
