.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}@layer reset,variables,base,post,utilities;@layer reset{*,*:before,*:after{box-sizing:border-box}html{-moz-text-size-adjust:none;-webkit-text-size-adjust:none;text-size-adjust:none;-webkit-font-smoothing:antialiased}:where(ul,ol)[role=list]{list-style:none}body{min-height:100vh;line-height:1.5}:where(h1,h2,h3,h4,button,input,label){line-height:1.1}:where(h1,h2,h3,h4){text-wrap:balance}a:not([class]){text-decoration-skip-ink:auto;color:currentColor}img,picture{max-width:100%;display:block}input,button,textarea,select{font-family:inherit;font-size:inherit}textarea:not([rows]){min-height:10em}:target{scroll-margin-block:5ex}*{margin:0;padding:0}}@layer variables{:root{--font-body: var(--font-sans);--fs-xs: .9375rem;--fs-sm: 1rem;--fs-base: clamp(1.25rem, 1.1rem + .3vw, 1.375rem);--fs-md: 1.5rem;--fs-lg: 2rem;--fs-xl: 2.25rem;--fs-2xl: clamp(2.5rem, 1.5rem + 3vw, 3.75rem);--fs-3xl: clamp(2.75rem, 2rem + 3vw, 4rem);--sp-1: .25rem;--sp-2: .5rem;--sp-3: .75rem;--sp-4: 1rem;--sp-5: 1.5rem;--sp-6: 2rem;--sp-7: 3rem;--sp-8: 4.5rem;--sp-9: 6.5rem;--fluid-gap: clamp(.75rem, 3vw, 1.5rem);--measure: 740px;--measure-wide: 860px;--ease-out-soft: cubic-bezier(.22, .61, .36, 1)}:root{color-scheme:dark;--bg: light-dark(#f7f3e9, #0c1b2b);--bg-elev: light-dark(#eee8db, #142538);--text: light-dark(#262820, #f7e7ae);--text-muted: light-dark(#68665c, #c6bfdf);--rule: light-dark(#d5cfc0, #51556f);--accent: light-dark(#b63b25, #ff9178);--accent-soft: color-mix(in srgb, var(--accent) 22%, transparent);--accent-faint: color-mix(in srgb, var(--accent) 8%, transparent);--chart-1: light-dark(oklch(56% .165 257), oklch(73% .138 263));--chart-2: light-dark(oklch(60% .17 35), oklch(72% .15 40));--chart-3: light-dark(oklch(58% .12 168), oklch(74% .115 168));--chart-4: light-dark(oklch(55% .17 300), oklch(73% .14 300));--chart-5: light-dark(oklch(66% .135 80), oklch(80% .13 85));--chart-6: light-dark(oklch(58% .18 350), oklch(72% .15 350))}html[data-theme=light]{color-scheme:light}html[data-theme=dark]{color-scheme:dark}}@layer base{body{font-family:var(--font-body);font-size:var(--fs-base);line-height:1.55;font-weight:400;font-feature-settings:"kern" 1,"liga" 1,"calt" 1;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--text);background-color:var(--bg)}p{text-wrap:pretty;hanging-punctuation:first last}:where(blockquote,dl,figure,ol,p,pre,ul){margin-block-end:var(--sp-4)}:where(h1,h2,h3,h4,h5,h6){font-family:var(--font-display);font-weight:500;line-height:1.2;letter-spacing:-.012em;text-wrap:balance;margin-block-end:var(--sp-3);color:var(--text)}:where(h1){font-weight:600;letter-spacing:-.02em}:where(h4,h5,h6){font-weight:500;letter-spacing:-.005em}:where(li,li>blockquote,li>ol,li>p,li>ul){margin-block:.35rem}blockquote{margin-inline:0;padding-inline:var(--sp-5);border-inline-start:3px solid var(--accent);font-family:var(--font-body);font-style:italic;font-size:var(--fs-md);line-height:1.5;color:var(--text);em{font-style:normal}p:last-child{margin-block-end:0}}hr{border:none;border-block-end:1px solid var(--rule);margin-block:var(--sp-7);inline-size:100%;position:relative}hr:after{content:"·";position:absolute;inset-inline-start:50%;inset-block-start:50%;transform:translate(-50%,-55%);background:var(--bg);padding-inline:var(--sp-3);font-family:var(--font-display);color:var(--text-muted);line-height:1}:where(a:link,a:visited){background-color:transparent;color:var(--text);text-decoration:none;background-image:linear-gradient(currentColor,currentColor);background-size:100% 1px;background-repeat:no-repeat;background-position:0 95%;transition:color .18s var(--ease-out-soft),background-size .22s var(--ease-out-soft),background-position .22s var(--ease-out-soft);padding-block-end:.05em}:where(a:hover){color:var(--accent);background-image:linear-gradient(var(--accent),var(--accent));background-size:100% 2px;background-position:0 100%}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}:focus:not(:focus-visible){outline:none}.button{display:inline-block;padding:var(--sp-2) var(--sp-4);border:1px solid var(--text);border-radius:0;font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.12em;text-transform:uppercase;background-image:none;background-color:transparent;transition:background-color .2s var(--ease-out-soft),color .2s var(--ease-out-soft),border-color .2s var(--ease-out-soft);&:is(:link,:visited){color:var(--text)}&:hover{background-color:var(--text);color:var(--bg);background-image:none}}table{--table-padding: var(--sp-3);border-collapse:collapse;border:1px solid var(--rule);font-size:var(--fs-sm);margin-block-end:var(--sp-5);margin-inline:auto;max-width:100%;caption{caption-side:bottom;text-align:start;font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.04em;color:var(--text-muted);padding-block-start:var(--sp-2)}th{background-color:var(--bg-elev);font-family:var(--font-display);font-weight:500;text-align:start}:where(td,th){padding:var(--table-padding)}tr{border-block-end:1px solid var(--rule)}&.valign-middle :is(td,th){vertical-align:middle}&.cell-border :is(td,th){border-inline-end:1px solid var(--rule)}}html{scrollbar-width:thin;scrollbar-color:var(--text-muted) var(--rule)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background-color:var(--rule)}::-webkit-scrollbar-thumb{background-color:var(--text-muted);border:2px solid var(--rule);border-radius:999px}::-webkit-scrollbar-thumb:hover{background-color:var(--text)}::selection{background-color:var(--accent-soft);color:var(--text)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}}@layer post{.post{max-width:var(--measure);margin-inline:auto;footer{margin-block-end:var(--sp-5)}}.post-header{margin-block-end:var(--sp-5);h1{font-family:var(--font-display);font-size:clamp(2.5rem,1.5rem + 3vw,3.75rem);font-weight:550;line-height:1.1;letter-spacing:-.025em;color:var(--text);margin-block:0 var(--sp-3);overflow-wrap:anywhere}}.post-date{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted)}.post-content{font-family:var(--font-body);overflow-wrap:break-word;font-size:clamp(1.25rem,1.1rem + .3vw,1.375rem);line-height:1.7;max-width:var(--measure);.heading-anchor{display:inline-block;width:1.8ch;margin-inline-start:-1.8ch;text-align:left;font-family:var(--font-mono);font-size:.7em;font-weight:400;vertical-align:baseline;line-height:inherit;color:var(--text-muted);opacity:0;text-decoration:none;background-image:none;transition:opacity .18s var(--ease-out-soft),color .18s var(--ease-out-soft)}.heading-anchor:hover,.heading-anchor:focus-visible{color:var(--accent);background-image:none}:is(h2,h3,h4):hover .heading-anchor,:is(h2,h3,h4) .heading-anchor:focus-visible{opacity:1}h2,h3,h4{font-family:var(--font-display);line-height:1.25}h2{font-size:2rem;margin-block-start:var(--sp-7);margin-block-end:var(--sp-3);font-weight:550;letter-spacing:-.015em}h3{font-family:var(--font-body);font-size:1.5rem;margin-block-start:var(--sp-6);margin-block-end:var(--sp-2);font-weight:500;letter-spacing:-.01em}h4{font-family:var(--font-body);font-size:var(--fs-base);margin-block-start:var(--sp-5);font-weight:500}h5{font-size:var(--fs-sm);text-transform:uppercase;letter-spacing:.08em;font-family:var(--font-mono);color:var(--text-muted);margin-block-start:var(--sp-5)}a{color:var(--accent)}p{margin-block-end:var(--sp-4)}table{display:block;width:fit-content;overflow-x:auto}ul,ol{padding-inline-start:1.5rem;margin-block-end:var(--sp-4)}ul{list-style:square}ul li::marker{color:var(--accent)}ol{list-style:decimal}li>ul{margin-block:var(--sp-2);list-style:"⏤  "}img{max-width:100%;margin-inline:auto;height:auto;border-radius:4px;display:block}figure{margin-block:var(--sp-5);margin-inline:0}figcaption{font-family:var(--font-body);font-size:1rem;color:var(--text-muted);text-align:center;margin-block-start:var(--sp-2)}strong{font-weight:600}em{font-style:italic}}@media screen and (max-width:800px){.post-content li>ul{margin-left:.5rem}}@media(hover:none){.post-content .heading-anchor{opacity:.35}}#post-comments{margin-block:var(--sp-7);margin-inline:auto;max-width:var(--measure)}.post-title{display:inline-block;font-family:var(--font-display);font-size:var(--fs-lg);font-weight:500;letter-spacing:-.015em;margin:0 var(--sp-3) var(--sp-1) 0;color:var(--text)}code,pre{font-family:var(--font-mono);font-weight:400}code{font-size:.92em}:not(pre)>code{overflow-wrap:anywhere;background-color:var(--accent-faint);color:var(--text);padding:.05em .2em;border-radius:3px}.page-content{pre{background-color:var(--bg-elev);border:1px solid var(--rule);border-radius:6px;font-size:1rem;line-height:1.65;padding:var(--sp-4) 0;overflow-x:auto;>code{display:block;font-size:inherit;padding:0;background:none;border:none;span.line{padding:0 var(--sp-5);display:inline-block;min-width:100%}}&::selection,::selection{background-color:#79a6fe38;color:#f2f2f2}}figure.code-block{position:relative}figure.code-block pre{margin:0;padding-block-start:calc(var(--sp-4) + .4rem)}.code-block-lang{display:none}.code-block-copy{position:absolute;top:.4rem;right:.5rem;background-color:var(--bg-elev);border:1px solid var(--rule);color:var(--text-muted);font-family:var(--font-mono);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.08em;padding:.2rem .55rem;border-radius:3px;cursor:pointer;opacity:0;transition:opacity .18s var(--ease-out-soft),color .18s var(--ease-out-soft),border-color .18s var(--ease-out-soft)}figure.code-block:hover .code-block-copy,figure.code-block:focus-within .code-block-copy,.code-block-copy:focus-visible{opacity:1}.code-block-copy:hover{color:var(--accent);border-color:var(--accent-soft)}.code-block-copy:focus-visible{outline:2px solid var(--accent-soft);outline-offset:2px}.code-block-copy[data-copied=true]{color:var(--accent);border-color:var(--accent);opacity:1}}@media(hover:none){.page-content .code-block-copy{opacity:1}}img{height:auto;border-radius:4px}sup{font-family:var(--font-mono);font-size:.7em;vertical-align:super;line-height:0;a{background-image:none;color:var(--accent);padding-inline:.15em}}.footnotes{margin-block-start:var(--sp-7);border-block-start:1px solid var(--rule);padding-block-start:var(--sp-5);max-width:var(--measure);font-size:var(--fs-sm);ol{list-style:decimal;padding-inline-start:2rem}li::marker{font-family:var(--font-mono);color:var(--text-muted)}}.post-content .chart{margin-block:var(--sp-6);max-width:var(--measure)}.chart-plot{width:100%}.chart-svg{display:block;width:100%;height:auto;overflow:visible}.chart-axis text{font-family:var(--font-mono);font-size:.72rem;fill:var(--text-muted)}.chart-axis .domain,.chart-axis line{stroke:var(--rule)}.chart-axis-title{font-family:var(--font-mono);font-size:.72rem;fill:var(--text-muted)}.chart-grid line{stroke:var(--rule);stroke-opacity:.5;stroke-dasharray:2 3}.chart-line{fill:none;stroke-width:2;stroke-linejoin:round;stroke-linecap:round}.chart-area{fill-opacity:.14;stroke:none}.chart-dot{fill-opacity:.85}.chart-bar{rx:1.5}.chart-series-0{--c: var(--chart-1)}.chart-series-1{--c: var(--chart-2)}.chart-series-2{--c: var(--chart-3)}.chart-series-3{--c: var(--chart-4)}.chart-series-4{--c: var(--chart-5)}.chart-series-5{--c: var(--chart-6)}.chart-line.chart-series-0,.chart-line.chart-series-1,.chart-line.chart-series-2,.chart-line.chart-series-3,.chart-line.chart-series-4,.chart-line.chart-series-5{stroke:var(--c)}.chart-area,.chart-dot,.chart-bar{fill:var(--c)}.chart-legend{display:flex;flex-wrap:wrap;gap:var(--sp-2) var(--sp-4);margin-block-end:var(--sp-3);font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-muted)}.chart-legend-item{display:inline-flex;align-items:center;gap:var(--sp-2)}.chart-legend-swatch{display:inline-block;inline-size:.7rem;block-size:.7rem;border-radius:2px;background:var(--c)}}@layer utilities{.sr-only{border:0;padding:0;margin:0;position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);clip-path:inset(50%);white-space:nowrap}}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media(prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}.ornament-floating[data-astro-cid-hbwchcj2]{position:fixed;inset-block-end:var(--sp-5);inset-inline-end:var(--sp-5);z-index:40;display:inline-flex;align-items:center;justify-content:center;inline-size:2.75rem;block-size:2.75rem;font-family:var(--font-body);font-size:1.6rem;line-height:1;color:var(--accent);background-color:var(--accent-faint);border:1px solid var(--rule);border-radius:999px;padding:0;cursor:pointer;user-select:none;transform-origin:50% 80%;opacity:0;pointer-events:none;transform:translateY(.4rem);transition:opacity .28s var(--ease-out-soft),transform .28s var(--ease-out-soft),color .18s var(--ease-out-soft),border-color .18s var(--ease-out-soft)}.ornament-floating[data-astro-cid-hbwchcj2].is-visible{opacity:1;pointer-events:auto;transform:translateY(0)}.ornament-floating[data-astro-cid-hbwchcj2]:hover{animation:ornament-wobble .62s var(--ease-out-soft);border-color:var(--accent)}.ornament-floating[data-astro-cid-hbwchcj2]:focus-visible{outline:2px solid var(--accent);outline-offset:4px}@keyframes ornament-wobble{0%{transform:rotate(0)}20%{transform:rotate(-10deg)}40%{transform:rotate(8deg)}60%{transform:rotate(-5deg)}80%{transform:rotate(3deg)}to{transform:rotate(0)}}@media(prefers-reduced-motion:reduce){.ornament-floating[data-astro-cid-hbwchcj2]{transition:opacity .18s linear,color .18s linear,border-color .18s linear;transform:none}.ornament-floating[data-astro-cid-hbwchcj2].is-visible{transform:none}.ornament-floating[data-astro-cid-hbwchcj2]:hover{animation:none}}.site-footer[data-astro-cid-bddg4lij]{display:grid;justify-items:center;align-content:center;grid-area:footer;gap:var(--sp-3);margin-block-start:var(--sp-8);padding-block:var(--sp-6) var(--sp-5);border-block-start:1px solid var(--rule)}.extra-pages[data-astro-cid-bddg4lij]{display:flex;max-width:100%;gap:var(--sp-5);flex-wrap:wrap;justify-content:center;font-family:var(--font-body);font-size:var(--fs-xs)}.extra-pages[data-astro-cid-bddg4lij] a[data-astro-cid-bddg4lij]{color:var(--text-muted);background-image:none}.extra-pages[data-astro-cid-bddg4lij] a[data-astro-cid-bddg4lij]:hover{color:var(--accent);background-image:none}.social-links[data-astro-cid-bddg4lij]{display:flex;max-width:100%;flex-wrap:wrap;justify-content:center;gap:var(--sp-5);margin-block:var(--sp-3) var(--sp-2)}.social-links[data-astro-cid-bddg4lij] a[data-astro-cid-bddg4lij]{color:var(--text-muted);background-image:none;padding:0;transition:color .2s var(--ease-out-soft),transform .22s var(--ease-out-soft)}.social-links[data-astro-cid-bddg4lij] a[data-astro-cid-bddg4lij]:hover,.social-links[data-astro-cid-bddg4lij] a[data-astro-cid-bddg4lij]:focus-visible{transform:translateY(-2px);background-image:none}.social-github[data-astro-cid-bddg4lij]:hover,.social-github[data-astro-cid-bddg4lij]:focus-visible{color:var(--text)}.social-twitter[data-astro-cid-bddg4lij]:hover,.social-twitter[data-astro-cid-bddg4lij]:focus-visible{color:#1da1f2}.social-mastodon[data-astro-cid-bddg4lij]:hover,.social-mastodon[data-astro-cid-bddg4lij]:focus-visible{color:#6364ff}.social-bluesky[data-astro-cid-bddg4lij]:hover,.social-bluesky[data-astro-cid-bddg4lij]:focus-visible{color:#0085ff}.social-mail[data-astro-cid-bddg4lij]:hover,.social-mail[data-astro-cid-bddg4lij]:focus-visible{color:var(--accent)}.social-rss[data-astro-cid-bddg4lij]:hover,.social-rss[data-astro-cid-bddg4lij]:focus-visible{color:#f26522}.footer-icon[data-astro-cid-bddg4lij]{width:1.4rem;height:1.4rem;display:inline-flex;align-items:center;justify-content:center}.footer-icon[data-astro-cid-bddg4lij] svg{width:100%;height:100%;fill:currentColor}.colophon[data-astro-cid-bddg4lij]{max-width:100%;font-family:var(--font-body);font-size:var(--fs-xs);color:var(--text-muted);margin:0;text-align:center;display:inline-flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;justify-content:center}.dot[data-astro-cid-bddg4lij]{color:var(--text-muted)}a[data-astro-cid-igfaswb3]{display:inline-block;text-decoration:none}.site-header[data-astro-cid-jae56hh5]{grid-area:header;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:18px;padding-block:20px;border-block-end:1px solid var(--rule)}.brand-lockup[data-astro-cid-jae56hh5]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:24px;width:fit-content;max-width:100%}.brand[data-astro-cid-jae56hh5]{--brand-size: 5.5rem;display:flex;flex-direction:column;align-items:flex-start;min-width:0;max-width:100%;gap:2px;background-image:none;color:var(--text);padding:0}.brand[data-astro-cid-jae56hh5]:hover{color:var(--accent);background-image:none}.wordmark[data-astro-cid-jae56hh5]{overflow-wrap:anywhere;font:650 var(--brand-size)/1 var(--font-display);font-variation-settings:"opsz" 40;letter-spacing:-.045em}.wordmark-sub[data-astro-cid-jae56hh5]{overflow-wrap:anywhere;color:var(--text-muted);font:500 calc(var(--brand-size) * .35)/1.25 var(--font-body)}.site-nav[data-astro-cid-jae56hh5]{display:flex;flex-wrap:wrap;align-items:center;gap:24px;font-size:1rem;font-weight:500}.site-nav a{color:var(--text-muted);background-image:none;padding-block:8px}.site-nav a:hover,.site-nav a[aria-current]{color:var(--accent)}.site-nav a[aria-current]{text-decoration:underline;text-underline-offset:.6em}#theme-switcher[data-astro-cid-jae56hh5]{border:0;padding:4px;background:none;color:var(--text-muted);font-size:1.25rem;line-height:1;cursor:pointer}#theme-switcher[data-astro-cid-jae56hh5]:hover{color:var(--accent)}@media(width<=700px){.site-header[data-astro-cid-jae56hh5]{gap:16px 8px}.site-nav[data-astro-cid-jae56hh5]{width:100%}.brand-lockup[data-astro-cid-jae56hh5]{gap:16px}.brand[data-astro-cid-jae56hh5]{--brand-size: clamp(2.75rem, 16.25vw, 4rem)}}.site[data-astro-cid-z4jru4n3]{display:grid;grid-template-columns:minmax(0,1fr);margin-inline:auto;max-width:1280px;padding:0 64px;gap:24px;align-content:space-between;grid-template-rows:auto 1fr auto;grid-template-areas:"header" "main" "footer";min-height:100vh;min-height:100dvh}.page-content[data-astro-cid-z4jru4n3]{grid-area:main;min-width:0}.page-content[data-astro-cid-z4jru4n3]:focus{outline:none}.skip-link[data-astro-cid-z4jru4n3]{position:absolute;top:var(--sp-2);left:var(--sp-2);z-index:100;padding:var(--sp-2) var(--sp-4);background:var(--bg);border:1px solid var(--rule);border-radius:4px;color:var(--text);font-family:var(--font-mono);font-size:var(--fs-sm);text-decoration:none;transform:translateY(-150%);transition:transform .18s var(--ease-out-soft)}.skip-link[data-astro-cid-z4jru4n3]:focus,.skip-link[data-astro-cid-z4jru4n3]:focus-visible{transform:translateY(0);outline:2px solid var(--accent);outline-offset:2px}@media(width<=700px){.site[data-astro-cid-z4jru4n3]{padding-inline:24px;gap:20px}}
