@font-face{font-family:Geist;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/Geist-Variable.iXOdLSEb.woff2)format("woff2")}@font-face{font-family:Geist Serif;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/GeistSerifVF.B47y7g_n.woff2)format("woff2")}@font-face{font-family:Geist Mono;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/GeistMono-Variable.FwokxCXK.woff2)format("woff2")}:root{--m-bg:#fafaf8;--m-ink:#1a1a18;--m-body:#3a3935;--m-mute:#6f6e69;--m-faint:#a8a69f;--m-line:#e8e7e2;--m-underline:#cfcdc6;--m-card:#fff;--m-chip:#f0efea;--m-serif:"Geist Serif", Georgia, serif;--m-sans:"Geist", -apple-system, system-ui, sans-serif;--m-mono:"Geist Mono", ui-monospace, monospace}html[data-theme=dark]{--m-bg:#141413;--m-ink:#ecebe6;--m-body:#c9c7c0;--m-mute:#9a988f;--m-faint:#6d6b64;--m-line:#2a2a27;--m-underline:#4a4944;--m-card:#1c1c1a;--m-chip:#262624}body{background:var(--m-bg);color:var(--m-ink)}.m{width:100%;max-width:640px;font-family:var(--m-sans);-webkit-font-smoothing:antialiased;flex-direction:column;flex:1;margin:0 auto;padding:56px 0 40px;font-size:15px;line-height:1.6;display:flex}.m>main{flex:1}.m a{color:inherit;text-decoration:none}.m a:hover{color:var(--m-ink)}.m .m-u{color:var(--m-ink);text-decoration:underline;text-decoration-color:var(--m-underline);text-underline-offset:3px}.m .m-u:hover{text-decoration-color:var(--m-ink)}.m-nav{justify-content:space-between;align-items:center;margin-bottom:72px;display:flex}.m-nav .m-home-link{font-family:var(--m-serif);font-size:17px}.m-nav .m-links{color:var(--m-mute);gap:20px;font-size:14px;display:flex}.m-nav .m-links a[aria-current=page]{color:var(--m-ink)}.m-header{align-items:center;gap:14px;display:flex}.m-header img{object-fit:cover;filter:grayscale(.15);border-radius:50%;width:44px;height:44px}.m .m-name{font-family:var(--m-serif);letter-spacing:-.005em;font-size:21px;line-height:1.2}.m-role{color:var(--m-mute);font-size:15px;line-height:1.3}.m-meta{text-align:right;font-family:var(--m-mono);color:var(--m-faint);margin-left:auto;font-size:12px;line-height:1.6}.m-status{color:var(--m-mute)}.m-section{grid-template-columns:120px 1fr;gap:24px;margin-top:72px;display:grid}.m>main>:first-child,.m-hang>:first-child{margin-top:0}.m-lbl{font-family:var(--m-serif);color:var(--m-mute);font-size:15px;line-height:1.5}.m-lbl small{font-family:var(--m-mono);color:var(--m-faint);font-size:12px;display:block}.m-lead{color:var(--m-mute)}.m-lead b,.m-prose b{color:var(--m-ink);font-weight:400}.m-it{margin-bottom:20px;display:block}.m-it:last-child{margin-bottom:0}.m-it .m-t{color:var(--m-ink);justify-content:space-between;gap:16px;display:flex}.m-it .m-t span+span{font-family:var(--m-mono);color:var(--m-faint);white-space:nowrap;padding-top:2px;font-size:12px}.m-it .m-d{color:var(--m-mute)}a.m-it:hover .m-t span:first-child{text-decoration:underline;text-decoration-color:var(--m-underline);text-underline-offset:3px}.m .m-more{color:var(--m-faint);font-size:14px}.m-intro{grid-template-columns:120px 1fr;gap:24px;display:grid}.m-intro img{object-fit:cover;filter:grayscale(.15);border-radius:50%;width:72px;height:72px}.m h1{font-family:var(--m-serif);letter-spacing:-.01em;font-size:28px;font-weight:400;line-height:1.2}.m-intro .m-meta{text-align:left;margin:8px 0 20px}.m-intro p,.m-prose p{color:var(--m-mute)}.m-prose p+p{margin-top:14px}.m-job{margin-bottom:24px}.m-job:last-child{margin-bottom:0}.m-job .m-t{justify-content:space-between;gap:16px;display:flex}.m-job .m-t span+span{font-family:var(--m-mono);color:var(--m-faint);white-space:nowrap;padding-top:2px;font-size:12px}.m-job .m-c{color:var(--m-faint);font-size:14px}.m-job .m-d{color:var(--m-mute);margin-top:4px}.m-head{grid-template-columns:120px 1fr;gap:24px;display:grid}.m-head p{color:var(--m-mute);margin-top:8px}.m .m-rss{font-family:var(--m-mono);color:var(--m-faint);margin-top:8px;font-size:12px;display:inline-block}.m-p{color:var(--m-ink);justify-content:space-between;gap:16px;padding:6px 0;display:flex}.m-p span+span{font-family:var(--m-mono);color:var(--m-faint);white-space:nowrap;padding-top:2px;font-size:12px}.m-p.m-feat{padding:0;display:block}.m-p.m-feat .m-r{justify-content:space-between;gap:16px;display:flex}.m-p.m-feat .m-d{color:var(--m-mute);margin-top:2px}a.m-p:hover>span:first-child,a.m-p:hover .m-r span:first-child{text-decoration:underline;text-decoration-color:var(--m-underline);text-underline-offset:3px}.m-grid{grid-template-columns:120px 1fr;gap:24px;display:grid}@media (width>=960px){.m-grid,.m-hang{margin-left:-144px}}.m-aside{font-size:13px;line-height:1.5}.m-aside .m-meta{text-align:left;margin:0;line-height:1.8}.m-toc{margin-top:40px;position:sticky;top:40px}.m-toc .m-h{font-family:var(--m-serif);color:var(--m-mute);margin-bottom:10px;font-size:15px}.m .m-toc a{color:var(--m-faint);padding:4px 0;display:block}.m .m-toc a:hover,.m .m-toc a[aria-current]{color:var(--m-ink)}.m-dek{color:var(--m-mute);margin-top:12px;font-size:16px}.m-mmeta{display:none}.m-figure{margin:32px 0 36px}.m-figure img{aspect-ratio:16/9;object-fit:cover;border-radius:10px;width:100%;height:auto;display:block}.m-article{color:var(--m-body);margin-top:32px;font-size:16px;line-height:1.75}.m-figure+.m-article{margin-top:0}.m-article>*+*{margin-top:18px}.m-article h2,.m-article h3,.m-article h4{font-family:var(--m-serif);color:var(--m-ink);scroll-margin-top:24px;font-weight:400;line-height:1.3}.m-article h2{margin-top:44px;font-size:20px}.m-article h3{margin-top:32px;font-size:17px}.m-article a{color:var(--m-ink);text-decoration:underline;text-decoration-color:var(--m-underline);text-underline-offset:3px}.m-article strong{color:var(--m-ink);font-weight:500}.m-article ul,.m-article ol{padding-left:1.25em}.m-article ul{list-style:outside}.m-article ol{list-style:decimal}.m-article li+li{margin-top:6px}.m-article li::marker{color:var(--m-faint)}.m-article blockquote{border-left:2px solid var(--m-line);color:var(--m-mute);padding-left:16px}.m-article hr{border:0;border-top:1px solid var(--m-line);margin:36px 0}.m-article :not(pre)>code{font-family:var(--m-mono);color:var(--m-ink);background:var(--m-line);border-radius:4px;padding:1px 5px;font-size:.875em}.m-article pre{font-family:var(--m-mono);border-radius:8px;padding:16px;font-size:13px;line-height:1.6;overflow-x:auto}.m-article img{border-radius:8px;max-width:100%;height:auto}.m-article table{border-collapse:collapse;width:100%;font-size:14px}.m-article th,.m-article td{text-align:left;border-bottom:1px solid var(--m-line);padding:8px 10px 8px 0}.m-article th{color:var(--m-ink);font-weight:500}.m-end{border-top:1px solid var(--m-line);justify-content:space-between;align-items:flex-end;gap:24px;margin-top:56px;padding-top:24px;display:flex}.m-end .m-k{font-family:var(--m-mono);color:var(--m-faint);margin-bottom:4px;font-size:12px}.m-end .m-more{white-space:nowrap}.m-kv{font-family:var(--m-mono);color:var(--m-faint);font-size:12px;line-height:1.8}.m-kv span{display:block}.m-sub{color:var(--m-mute);margin-top:6px;font-size:16px}.m-acts{color:var(--m-faint);flex-wrap:wrap;gap:6px 18px;margin-top:14px;font-size:14px;display:flex}.m-lead-lg{color:var(--m-ink);margin-top:28px;font-size:17px;line-height:1.65}.m-body{color:var(--m-body)}.m-body>*+*{margin-top:16px}.m-body .m-note{color:var(--m-mute)}.m-code{font-family:var(--m-mono);color:var(--m-ink);background:var(--m-chip);border-radius:4px;padding:1px 5px;font-size:13px}.m-dia{grid-template-columns:1fr 64px 1fr;grid-template-areas:"in in.""a1. .""app x wk""a2.a3""lib.cache";margin:24px 0 8px;display:grid}.m-bx{background:var(--m-card);border:1px solid var(--m-line);border-radius:8px;padding:10px 12px}.m-bx b{font-family:var(--m-serif);color:var(--m-ink);font-size:15px;font-weight:400;line-height:1.3;display:block}.m-bx i{white-space:nowrap;font-style:normal;font-family:var(--m-mono);color:var(--m-faint);font-size:10.5px}.m-bx.m-dark{background:var(--m-ink);border-color:var(--m-ink)}.m-bx.m-dark b{color:var(--m-bg)}.m-bx.m-dark i{color:var(--m-mute)}.m-pair{grid-area:in;grid-template-columns:1fr 1fr;gap:8px;display:grid}.m-cn{font-family:var(--m-mono);color:var(--m-faint);text-align:center;padding:8px 0;font-size:11px}.m-x{font-family:var(--m-mono);color:var(--m-faint);flex-direction:column;grid-area:x;align-self:center;align-items:center;font-size:11px;line-height:1.4;display:flex}.m-x .m-ln{background:var(--m-faint);width:100%;height:1px;margin:3px 0}.m-dl>div{border-top:1px solid var(--m-line);padding:12px 0}.m-dl>div:first-child{border-top:0;padding-top:0}.m-dl b{color:var(--m-ink);font-weight:500}.m-dl p{color:var(--m-mute);margin-top:2px}.m-steps{counter-reset:step;padding:0;list-style:none}.m-steps li{counter-increment:step;grid-template-columns:32px 1fr;padding:6px 0;display:grid}.m-steps li:before{content:counter(step, decimal-leading-zero);font-family:var(--m-mono);color:var(--m-faint);padding-top:2px;font-size:12px}.m-end.m-end-plain{color:var(--m-mute);align-items:center;margin-top:72px;font-size:14px}.m-section-tight{margin-top:56px}.m-after-title{margin-top:12px}.m-code-lbl{font-family:var(--m-mono);color:var(--m-faint);padding-top:8px;font-size:12px}.m-list .m-p{border-top:1px solid var(--m-line);align-items:baseline;gap:20px;padding:9px 0}.m-list .m-p:first-child{border-top:0;padding-top:0}.m-footer{font-family:var(--m-mono);color:var(--m-faint);justify-content:space-between;gap:16px;margin-top:96px;font-size:12px;display:flex}.m-footer nav{gap:16px;display:flex}.m-footer button{font:inherit;color:inherit;cursor:pointer}.m .m-footer a:hover,.m-footer button:hover{color:var(--m-ink)}@media (width<=600px){.m{padding:28px 20px 32px}.m-nav{margin-bottom:40px}.m-header{flex-wrap:wrap}.m-header .m-meta{text-align:left;width:100%;margin:-4px 0 0;padding-left:58px}.m-section,.m-intro,.m-head,.m-grid{display:block}.m-section{margin-top:48px}.m-lbl{margin-bottom:10px}.m-intro img{margin-bottom:20px}.m-head>div:first-child,.m-aside{display:none}.m h1{font-size:25px}.m-mmeta{font-family:var(--m-mono);color:var(--m-faint);margin-top:14px;font-size:12px;display:block}.m-figure{margin:24px -20px 28px}.m-figure img{border-radius:0}.m-end{flex-direction:column;align-items:flex-start}.m-footer{flex-direction:column;margin-top:64px}.m-section-tight{margin-top:44px}.m-kv{margin-bottom:16px}.m-kv span{display:inline}.m-kv span+span:before{content:" · "}.m-dia{grid-template-columns:1fr;grid-template-areas:"in""a1""app""x""wk""a3""cache""a2""lib"}.m-x{flex-direction:row;justify-content:center;gap:8px;padding:8px 0}.m-x .m-ln{width:20px}.m-end.m-end-plain{align-items:flex-start;gap:8px}.m-code-lbl{margin-bottom:8px;padding-top:0}}
