.article-toc[data-astro-cid-qsrs2dwn]{--toc-muted:color-mix(in srgb, var(--dim) 65%, var(--fg));padding-top:.2rem}.article-toc[data-astro-cid-qsrs2dwn] details[data-astro-cid-qsrs2dwn]>p[data-astro-cid-qsrs2dwn]{color:var(--toc-muted);font:.68rem/1.4 var(--font-mono);letter-spacing:.1em;text-transform:uppercase;margin-bottom:.75rem}.article-toc[data-astro-cid-qsrs2dwn] nav[data-astro-cid-qsrs2dwn]{gap:.5rem;display:grid}.article-toc[data-astro-cid-qsrs2dwn] summary[data-astro-cid-qsrs2dwn]{display:none}.article-toc[data-astro-cid-qsrs2dwn] a[data-astro-cid-qsrs2dwn]{min-height:32px;color:var(--toc-muted);font:.72rem/1.4 var(--font-sans);padding:.3rem 0;transition:color .2s;display:inline-block}.article-toc[data-astro-cid-qsrs2dwn] a[data-astro-cid-qsrs2dwn]:hover,.article-toc[data-astro-cid-qsrs2dwn] a[data-astro-cid-qsrs2dwn].is-active,.article-toc[data-astro-cid-qsrs2dwn] a[data-astro-cid-qsrs2dwn][aria-current=location]{color:var(--accent);opacity:1}.article-toc[data-astro-cid-qsrs2dwn] a[data-astro-cid-qsrs2dwn].is-active,.article-toc[data-astro-cid-qsrs2dwn] a[data-astro-cid-qsrs2dwn][aria-current=location]{font-weight:600}.article-layout.has-toc .prose h2,#overview{scroll-margin-top:var(--article-scroll-offset,7rem)}@media (width<=800px){.article-toc[data-astro-cid-qsrs2dwn]{padding-top:0}.article-toc[data-astro-cid-qsrs2dwn] details[data-astro-cid-qsrs2dwn]>p[data-astro-cid-qsrs2dwn]{display:none}.article-toc[data-astro-cid-qsrs2dwn] summary[data-astro-cid-qsrs2dwn]{min-height:44px;color:var(--toc-muted);font:.7rem/1.4 var(--font-mono);cursor:pointer;align-items:center;gap:.65rem;list-style:none;display:flex}.article-toc[data-astro-cid-qsrs2dwn] summary[data-astro-cid-qsrs2dwn]::-webkit-details-marker{display:none}.article-toc[data-astro-cid-qsrs2dwn] summary[data-astro-cid-qsrs2dwn]:after{content:"+";margin-inline-start:auto;font-size:1rem}.article-toc[data-astro-cid-qsrs2dwn] details[data-astro-cid-qsrs2dwn][open] summary[data-astro-cid-qsrs2dwn]:after{content:"−"}.article-toc[data-astro-cid-qsrs2dwn] summary[data-astro-cid-qsrs2dwn] span[data-astro-cid-qsrs2dwn]{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:45%;color:var(--accent);font-family:var(--font-sans);overflow:hidden}.article-toc[data-astro-cid-qsrs2dwn] summary[data-astro-cid-qsrs2dwn]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.article-toc[data-astro-cid-qsrs2dwn] nav[data-astro-cid-qsrs2dwn]{flex-wrap:wrap;gap:.3rem 1rem;display:flex}.article-toc[data-astro-cid-qsrs2dwn] a[data-astro-cid-qsrs2dwn]{align-items:center;min-height:44px;display:inline-flex}.article-toc[data-astro-cid-qsrs2dwn] details[data-astro-cid-qsrs2dwn][open] nav[data-astro-cid-qsrs2dwn]{max-height:35dvh;padding:.2rem 3px;overflow-y:auto}}:root:not(.has-js) .share-button[data-astro-cid-p5payz7x]{display:none}.share-button[data-astro-cid-p5payz7x]{border:1px solid var(--border);color:var(--fg);font:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer;touch-action:manipulation;background:0 0;border-radius:4px;align-items:center;gap:.35rem;margin-left:auto;padding:.4em .75em;line-height:1.4;transition:color .15s,border-color .15s;display:inline-flex;position:relative}.share-button[data-astro-cid-p5payz7x]:before{content:"";height:44px;position:absolute;inset:50% 0 auto;transform:translateY(-50%)}.share-button[data-astro-cid-p5payz7x] svg{flex-shrink:0}.share-button[data-astro-cid-p5payz7x]:hover{color:var(--accent);border-color:var(--accent)}.share-button[data-astro-cid-p5payz7x]:focus-visible{outline:2px solid var(--accent);outline-offset:3px}@media (prefers-reduced-motion:reduce){.share-button[data-astro-cid-p5payz7x]{transition:none}}:is(.project-article,.article-shell){overflow-wrap:anywhere;--reading-muted:color-mix(in srgb, var(--dim) 65%, var(--fg));min-width:0}:is(.project-article,.article-shell) ::selection{color:var(--fg);background:color-mix(in srgb, var(--accent) 28%, var(--bg))}:is(.project-article,.article-shell) :is(pre,.article-table-scroll,.article-rail){scrollbar-color:var(--dim) var(--surface)}:is(.project-article,.article-shell) .prose :is(h2,h3,h4){text-wrap:pretty;scroll-margin-top:var(--article-scroll-offset,7rem)}:is(.project-article,.article-shell) :is(.project-nav a,.article-nav-link,.related-link){min-height:44px}:is(.project-article,.article-shell) .prose h3{margin:1.7em 0 .45em}:is(.project-article,.article-shell) .prose code{background:var(--surface);font:.88em var(--font-mono);border-radius:3px;padding:.15em .4em}:is(.project-article,.article-shell) .prose pre{border:1px solid var(--border);background:var(--surface);max-width:100%;font:.8rem/1.65 var(--font-mono);border-radius:4px;margin:1.4rem 0;padding:1.1rem 1.2rem;overflow-x:auto}:is(.project-article,.article-shell) .prose pre code{white-space:pre;overflow-wrap:normal;background:0 0;padding:0}:is(.project-article,.article-shell) .prose blockquote{border-inline-start:1px solid var(--accent);color:var(--reading-muted);margin:1.5rem 0;padding-inline-start:1rem}:is(.project-article,.article-shell) .prose img{max-width:100%;height:auto}:is(.project-article,.article-shell) .prose hr{border:0;border-top:1px solid var(--border);margin:2.5rem 0}.article-table-scroll{max-width:100%;margin-block:1.5rem;overflow-x:auto}.article-table-scroll table{border-collapse:collapse;width:100%;font-size:.85rem}.article-table-scroll :is(th,td){border-bottom:1px solid var(--border);text-align:start;padding:.7rem .9rem}.article-table-scroll th{color:var(--fg);background:var(--surface);font-weight:600}:is(.article-table-scroll,.prose pre):focus-visible{outline:2px solid var(--accent);outline-offset:3px}.article-empty{border-top:1px solid var(--border);color:var(--reading-muted);padding-block:1.5rem}.article-language-note{color:var(--reading-muted);margin-block:0 1.5rem;font-size:.85rem;font-style:italic}.article-empty a{align-items:center;min-height:44px;display:inline-flex}.article-side-navigation{display:contents}@media (width>=801px){article:is(.project-article,.article-shell) .article-layout:is(.has-toc,.has-rail) :is(.article-chrome,.article-rail){display:contents}article:is(.project-article,.article-shell) .article-layout:is(.has-toc,.has-rail) :is(.project-headline,.article-headline){grid-area:1/1}article:is(.project-article,.article-shell) .article-layout:is(.has-toc,.has-rail) .article-side-navigation{--side-navigation-top:calc(var(--article-sticky-bottom,7rem) + 1rem);top:var(--side-navigation-top);z-index:20;flex-direction:column;grid-area:2/2;place-self:start end;align-items:flex-end;gap:.75rem;width:12rem;max-width:100%;display:flex;position:sticky}article:is(.project-article,.article-shell) .article-layout:is(.has-toc,.has-rail) .back-rail{flex-shrink:0;align-self:flex-end;position:static}article:is(.project-article,.article-shell) .article-layout:is(.has-toc,.has-rail) .article-rail-aside{max-height:max(5rem, calc(100dvh - var(--side-navigation-top) - 4.5rem));padding-top:0;position:static}article:is(.project-article,.article-shell) .article-layout:is(.has-toc,.has-rail) .prose{grid-area:2/1;min-width:0}}@media (width<=800px){article:is(.project-article,.article-shell) .article-layout .article-chrome{display:contents}article:is(.project-article,.article-shell) .article-layout :is(.project-headline,.article-headline){z-index:auto}article:is(.project-article,.article-shell) .article-layout .prose{z-index:0;align-self:stretch;position:relative}article:is(.project-article,.article-shell) .article-layout .article-rail{z-index:25;text-align:start;width:auto;max-width:none;max-height:none;margin-inline:calc(-1 * var(--gutter));padding:.4rem var(--gutter) .5rem;background:var(--bg);border-bottom:1px solid var(--border);align-self:stretch;align-items:stretch;margin-bottom:1.25rem;position:sticky;top:3.5rem;overflow:visible}}@media (width<=639px){article:is(.project-article,.article-shell) .article-layout .article-rail{top:calc(52px + env(safe-area-inset-top))}}@media (height<=500px){article:is(.project-article,.article-shell) .article-layout :is(.article-rail,.project-headline,.article-headline,.article-side-navigation,.article-rail-aside,.back-rail){position:static}}@media (prefers-reduced-motion:reduce){:is(.project-article,.article-shell) a,:is(.project-article,.article-shell) a :is(span,strong,svg){transition:none}}:root:has([data-reading-body]){timeline-scope:--reading-body}[data-reading-body]{view-timeline:--reading-body block;view-timeline-inset:var(--reading-top,0px) var(--reading-bottom,0px)}@keyframes article-progress{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@supports (animation-timeline:view()) and (timeline-scope:--reading-body) and (animation-range:entry 100% exit 0%){[data-page-progress][data-reading-progress=css] span{animation:var(--article-progress-animation,article-progress linear both);animation-timeline:--reading-body;animation-range:entry 100% exit 0%}}[data-article-motion] [data-reading-headline]{position:sticky}[data-article-motion] [data-reading-headline]:after{content:"";background:var(--accent);transform-origin:0;pointer-events:none;height:1px;position:absolute;inset:auto 0 0}@keyframes article-rule{0%{transform:scaleX(0)}to{transform:scaleX(1)}}[data-article-motion].article-entering [data-reading-headline]:after{animation:article-rule var(--reading-entrance-duration,.3s) cubic-bezier(.16, 1, .3, 1) both}[data-article-motion] .prose :is(h2,h3)[id]{min-height:44px;padding-inline-end:44px;position:relative}[data-article-motion] .heading-permalink{opacity:0;justify-content:center;align-items:center;width:44px;height:44px;transition:opacity .15s ease-out;display:inline-flex;position:absolute;inset-block-start:-.2em;inset-inline-end:0}[data-article-motion] .prose :is(h2,h3):is(:hover,:focus-within) .heading-permalink{opacity:1}[data-article-motion] .heading-permalink:focus-visible{outline:2px solid var(--accent);outline-offset:-3px}[data-article-motion] .article-toc a{position:relative}[data-article-motion] .article-toc a:after{content:"";background:var(--accent);transform-origin:0;height:1px;transition:transform .15s ease-out;position:absolute;inset:auto 0 0;transform:scaleX(0)}[data-article-motion] .article-toc a:is([aria-current=location],:hover,:focus-visible):after{transform:scaleX(1)}[data-article-motion] .back:is(:hover,:focus-visible) span{transform:translate(-3px)}[data-article-motion] .article-direction{transition:transform .15s ease-out;display:inline-block}[data-article-motion] :is(.article-nav-link--previous,.prev-project):is(:hover,:focus-visible) .article-direction{transform:translate(-3px)}[data-article-motion] :is(.article-nav-link--next,.next-project):is(:hover,:focus-visible) .article-direction{transform:translate(3px)}[data-article-motion] .related-link:is(:hover,:focus-visible)>span{text-underline-offset:.2em;text-decoration:underline}[data-article-motion] [data-reading-end]{view-timeline:--article-end block;position:relative}[data-article-motion] [data-reading-end]:before{content:"";background:var(--accent);transform-origin:0;height:1px;position:absolute;inset:0 0 auto}@media (prefers-reduced-motion:no-preference){@supports (animation-timeline:view()) and (animation-range:entry 0% entry 100%){[data-article-motion] [data-reading-end]:before{animation:var(--article-end-animation,article-rule linear both);animation-timeline:--article-end;animation-range:entry}}}.article-code{border:1px solid var(--border);background:var(--surface);border-radius:4px;margin-block:1.4rem}.article-code-toolbar{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;padding:4px 8px;display:flex}.article-code-status{min-width:0;font:.75rem/1.4 var(--font-sans);color:var(--reading-muted);flex:auto}[data-article-motion] .prose .article-code-status{margin:0}.article-code-copy{border:1px solid var(--border);min-width:7.5em;min-height:44px;color:var(--fg);font:600 .75rem/1.4 var(--font-sans);cursor:pointer;background:0 0;border-radius:4px;flex:none;padding:6px 10px}.article-code-copy:hover{border-color:var(--accent);color:var(--accent)}.article-code-copy:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.article-code-copy:disabled{cursor:wait}[data-article-motion] .article-code pre{border:0;border-radius:0;margin:0}@media (hover:none){[data-article-motion] .heading-permalink{opacity:1}}@media (width<=800px){[data-article-motion] [data-reading-headline]{order:0;margin-bottom:12px;position:relative}[data-article-motion] [data-reading-headline]:after{inset-block-end:-4px}@supports selector(details::details-content) and (interpolate-size:allow-keywords){[data-article-motion] .article-toc details::details-content{interpolate-size:allow-keywords;block-size:0;overflow:hidden}[data-article-motion] .article-toc details[open]::details-content{block-size:auto;transition:block-size .18s cubic-bezier(.16,1,.3,1)}}}@media (height<=500px){[data-article-motion] .prose :is(h2,h3)[id]{padding-inline-end:100px}[data-article-motion] .heading-permalink{inset-inline-end:56px}article[data-article-motion] .article-layout .article-side-navigation{position:sticky;top:3.5rem}[data-article-motion] [data-reading-headline]{position:relative;top:auto}[data-article-motion] .article-rail-aside{max-height:calc(100dvh - 8rem);overflow-y:auto}@media (width<=800px){article[data-article-motion] .article-layout .article-rail{position:sticky}article[data-article-motion] .article-layout .article-side-navigation{display:contents}[data-article-motion] .article-rail-aside{max-height:none;overflow:visible}}}@media (prefers-reduced-motion:reduce){[data-article-motion] [data-reading-headline]:after,[data-article-motion] [data-reading-end]:before{animation:none}[data-article-motion] .heading-permalink,[data-article-motion] .article-direction,[data-article-motion] .article-toc a:after,[data-article-motion] .article-toc details::details-content{transition:none}[data-article-motion] .back:is(:hover,:focus-visible) span,[data-article-motion] :is(.article-nav-link,.prev-project,.next-project):is(:hover,:focus-visible) .article-direction,[data-article-motion] .feedback-prompt a:is(:hover,:focus-visible) .project-outbound{transform:none}}
