.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}@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:#fff;--m-ink:#1a1a18;--m-body:#3a3935;--m-mute:#6f6e69;--m-faint:#74736c;--m-line:#e8e7e2;--m-underline:#cfcdc6;--m-card:#fafaf9;--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:#888680;--m-line:#2a2a27;--m-underline:#4a4944;--m-card:#1c1c1a;--m-chip:#262624}*,:before,:after{box-sizing:border-box;border:0 solid;margin:0;padding:0}html{-webkit-text-size-adjust:100%;line-height:1.5;font-family:var(--m-sans);scroll-behavior:smooth;overflow-y:scroll}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}ol,ul{list-style:none}img,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,pre{font-family:var(--m-mono);font-size:1em}small{font-size:80%}table{border-collapse:collapse}hr{height:0;color:inherit;border-top-width:1px}button,input,textarea{font:inherit;letter-spacing:inherit;color:inherit;background-color:#0000;border-radius:0}button{cursor:pointer}::placeholder{color:var(--m-faint);opacity:1}[hidden]:where(:not([hidden=until-found])){display:none!important}:focus-visible{outline:2px dashed var(--m-ink);outline-offset:2px}::selection{background:var(--m-ink);color:var(--m-bg)}body{background:var(--m-bg);min-height:100svh;color:var(--m-ink);flex-direction:column;display:flex}.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);align-items:center;gap:20px;font-size:14px;display:flex}.m-nav .m-links a[aria-current=page]{color:var(--m-ink)}.m-theme{width:28px;height:28px;color:var(--m-mute);border-radius:50%;margin:-6px -6px -6px 0;position:relative}.m-theme:hover{color:var(--m-ink)}.m-theme svg{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;width:16px;height:16px;transition:opacity .2s,transform .3s cubic-bezier(.2,.8,.2,1);position:absolute;inset:6px}.m-theme .m-sun,[data-theme=dark] .m-theme .m-moon{opacity:0;transform:rotate(-90deg)scale(.5)}[data-theme=dark] .m-theme .m-sun{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){.m-theme svg{transition:none}}.m-hero{padding-top:16px}.m-hero img{object-fit:cover;filter:grayscale(.15);border-radius:50%;width:56px;height:56px;margin-bottom:28px;display:block}.m .m-hero h1{letter-spacing:-.015em;text-wrap:balance;max-width:600px;font-size:32px;line-height:1.25}.m-hm{font-family:var(--m-mono);color:var(--m-faint);gap:20px;margin-top:22px;font-size:12px;display:flex}.m-hm>span:first-child{color:var(--m-mute)}.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-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:color-mix(in srgb, var(--m-bg) 70%, var(--m-ink))}.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-sr{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.m-progress{background:var(--m-line);height:2px;margin-bottom:56px;overflow:hidden}.m-progress>div{background:var(--m-ink);transform-origin:0;height:100%;transition:transform .3s cubic-bezier(.22,1,.36,1)}.m-step{flex-direction:column;gap:28px;display:flex}.m-step h1{text-wrap:balance;outline:none}.m-step-n{font-family:var(--m-mono);color:var(--m-faint);margin-bottom:-16px;font-size:12px}.m-field{border-bottom:1px solid var(--m-line);outline:none;width:100%;padding:10px 0;font-size:18px}.m-field:focus{border-color:var(--m-ink)}textarea.m-field{resize:vertical;line-height:1.6}.m-chips{flex-wrap:wrap;gap:8px;display:flex}.m-chips span{border:1px solid var(--m-line);color:var(--m-mute);cursor:pointer;border-radius:999px;padding:8px 14px;transition:border-color .15s,background-color .15s,color .15s;display:block}.m-chips span:hover{border-color:var(--m-mute);color:var(--m-ink)}.m-chips input:checked+span{border-color:var(--m-ink);background:var(--m-ink);color:var(--m-bg)}.m-chips input:focus-visible+span{outline:2px dashed var(--m-ink);outline-offset:2px}.m-step-acts{align-items:center;gap:20px;display:flex}.m-btn{background:var(--m-ink);color:var(--m-bg);border-radius:999px;padding:10px 22px;font-weight:500}.m-btn:disabled{opacity:.3;cursor:not-allowed}.m-btn-plain{color:var(--m-mute)}.m-btn-plain:hover{color:var(--m-ink)}.m-start-error{color:var(--m-ink);margin-top:24px}#inquiry-turnstile:not(:empty){margin-top:16px}@media (prefers-reduced-motion:reduce){.m-progress>div{transition:none}}@media (width<=600px){.m{padding:28px 20px 32px}.m-nav{margin-bottom:40px}.m .m-hero h1{font-size:26px}.m-hm{flex-direction:column;gap:2px}.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}}.m.m-bio{max-width:440px;padding:72px 20px 40px}.m-bio-who{text-align:center}.m-bio-who img{object-fit:cover;filter:grayscale(.15);outline:1px solid var(--m-line);outline-offset:4px;border-radius:50%;width:88px;height:88px;margin:0 auto 18px}.m .m-bio-who h1{font-family:var(--m-serif);letter-spacing:-.01em;font-size:28px;font-weight:400;line-height:1.2}.m-bio-role,.m-bio-date,.m-bio-foot{font-family:var(--m-mono);color:var(--m-faint);font-size:12px}.m-bio-role{margin-top:8px}.m-bio-who p{max-width:320px;color:var(--m-mute);text-wrap:balance;margin:14px auto 0}.m-bio-open{border:1px solid var(--m-line);color:var(--m-body);border-radius:999px;align-items:center;gap:8px;margin-top:16px;padding:4px 12px;font-size:13px;display:inline-flex}.m-bio-open i{background:var(--m-ink);border-radius:50%;flex:none;width:6px;height:6px}.m-bio section{margin-top:36px}.m.m-bio section h2{font-family:var(--m-serif);color:var(--m-mute);margin-bottom:10px;font-size:15px;font-weight:400;line-height:1.5}.m-bio-stack{gap:8px;display:grid}.m-bio-card{background:var(--m-card);border:1px solid var(--m-line);border-radius:14px;transition:border-color .15s;display:block}a.m-bio-card:hover{border-color:var(--m-underline)}.m-bio-row{align-items:center;gap:12px;min-height:64px;padding:11px 14px 11px 11px;display:flex}.m-bio-tile{background:var(--m-chip);width:40px;height:40px;color:var(--m-ink);border-radius:10px;flex:none;place-items:center;display:grid}.m-bio-tile svg{stroke-width:1.6px;width:20px;height:20px}.m-bio-txt{flex:1;min-width:0;line-height:1.4}.m-bio-txt b{color:var(--m-ink);font-weight:400;display:block}.m-bio-txt span{color:var(--m-mute);text-overflow:ellipsis;white-space:nowrap;font-size:13.5px;display:block;overflow:hidden}.m-bio-go{stroke-width:1.6px;width:16px;height:16px;color:var(--m-faint);flex:none}.m-bio-copy{border:1px solid var(--m-line);height:32px;color:var(--m-ink);border-radius:999px;flex:none;padding:0 12px;font-size:13px;position:relative}.m-bio-copy:after{content:"";position:absolute;inset:-6px}.m-bio-feat{padding:18px}.m-bio-feat h3{font-family:var(--m-serif);letter-spacing:-.005em;color:var(--m-ink);text-wrap:balance;margin-top:8px;font-size:21px;line-height:1.25}.m-bio-feat p{color:var(--m-mute);margin-top:6px}.m-bio-btn{background:var(--m-ink);height:42px;color:var(--m-bg);border-radius:999px;justify-content:center;align-items:center;gap:8px;margin-top:14px;font-size:14px;font-weight:500;display:flex}.m-bio-btn svg{stroke-width:1.6px;width:15px;height:15px}.m .m-bio-foot{text-align:center;margin-top:40px}.m-bio-foot a{text-decoration:underline;text-decoration-color:var(--m-underline);text-underline-offset:3px}@media (width<=600px){.m.m-bio{padding:48px 20px 32px}}
