@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(*),[data-astro-transition-scope]{animation:none!important}}.svg-inline--fa{vertical-align:-.125em;width:1em;height:1em;display:inline-block}.site-banner{border-bottom:1px solid var(--theme-divider);font-size:.875rem;line-height:1.4}html[data-banner-hidden] .site-banner,.site-banner.is-hidden{display:none}.site-banner-inner{justify-content:center;align-items:center;gap:.75rem;padding:.5rem 3rem;display:flex;position:relative}.site-banner-text{text-align:center;max-width:60rem}.site-banner-text a{color:inherit;text-decoration:underline}.site-banner-text a:hover{text-decoration:none}.site-banner-dismiss{cursor:pointer;opacity:.7;width:1.5rem;height:1.5rem;color:inherit;background:0 0;border:0;justify-content:center;align-items:center;font-size:1.125rem;line-height:1;display:inline-flex;position:absolute;top:50%;right:.5rem;transform:translateY(-50%)}.site-banner-dismiss:hover{opacity:1}.site-banner-primary{background:var(--theme-primary-muted);color:var(--theme-content)}.site-banner-primary .site-banner-text{color:var(--theme-content)}.site-banner-accent{background:var(--theme-accent-muted);color:var(--theme-content)}.site-banner-success{color:var(--theme-content);background:oklch(72% .17 145/.18)}.site-banner.is-hidden,.mobile-menu.is-collapsed{display:none}html:not(.js) .mobile-menu-toggle{display:none!important}html:not(.js) .nav-dropdown-trigger{display:none}html:not(.js) .nav-dropdown-menu{opacity:1;visibility:visible;box-shadow:none;margin-top:.25rem;position:static;transform:none}.nav-dropdown-menu{z-index:50;background:var(--theme-surface-2);border:1px solid var(--theme-divider);border-radius:var(--radius-md);opacity:0;visibility:hidden;min-width:200px;margin-top:.25rem;padding:.25rem;transition:opacity .15s,visibility .15s,transform .15s;position:absolute;top:100%;left:0;transform:translateY(-4px);box-shadow:0 8px 32px -8px oklch(0% 0 0/.5)}.nav-dropdown-menu-end{left:auto;right:0}.nav-dropdown:hover .nav-dropdown-menu,.nav-dropdown.is-open .nav-dropdown-menu{opacity:1;visibility:visible;transform:translateY(0)}.nav-dropdown-item{border-radius:var(--radius-sm);color:var(--theme-content-muted);align-items:center;gap:.5rem;width:100%;padding:.5rem .75rem;font-size:.875rem;text-decoration:none;transition:background .15s,color .15s;display:inline-flex}.nav-dropdown-item:hover,.nav-dropdown-item:focus-visible{background:var(--theme-surface-3);color:var(--theme-content)}.nav-mobile-group{border-radius:var(--radius-md)}.nav-mobile-summary{border-radius:var(--radius-md);color:var(--theme-content-muted);cursor:pointer;justify-content:space-between;align-items:center;padding:.5rem .75rem;font-size:.875rem;font-weight:500;list-style:none;transition:background .15s,color .15s;display:flex}.nav-mobile-summary::-webkit-details-marker{display:none}.nav-mobile-summary:hover{background:var(--theme-surface-2);color:var(--theme-content)}.nav-mobile-group[open]>.nav-mobile-summary{color:var(--theme-content)}.nav-mobile-chevron{transition:transform .2s}.nav-mobile-group[open]>.nav-mobile-summary .nav-mobile-chevron{transform:rotate(-90deg)}.nav-mobile-children{border-left:1px solid var(--theme-divider);flex-direction:column;gap:.125rem;margin-left:.25rem;padding:.25rem 0 .25rem .75rem;display:flex}.article-prose{color:var(--theme-content);line-height:1.75}.article-prose>:first-child{margin-top:0}.article-prose h1,.article-prose h2,.article-prose h3,.article-prose h4,.article-prose h5,.article-prose h6{scroll-margin-top:5rem}.article-prose h2{font-family:var(--font-display);margin-top:2.5rem;margin-bottom:.75rem;font-size:1.5rem;font-weight:600}.article-prose h3{font-family:var(--font-display);margin-top:2rem;margin-bottom:.5rem;font-size:1.25rem;font-weight:600}.article-prose h4{font-family:var(--font-display);margin-top:1.5rem;margin-bottom:.25rem;font-size:1rem;font-weight:600}.article-prose h5,.article-prose h6{font-family:var(--font-display);color:var(--theme-content-muted);margin-top:1.25rem;margin-bottom:.25rem;font-size:.95rem;font-weight:600}.article-prose p{margin-bottom:1.25em}.article-prose a{color:var(--theme-primary);text-underline-offset:3px;text-decoration:underline;text-decoration-color:oklch(from var(--theme-primary) l c h / .4);transition:color .2s,text-decoration-color .2s}.article-prose a:hover{color:var(--theme-primary-hover);text-decoration-color:var(--theme-primary-hover)}.article-prose strong{color:var(--theme-content);font-weight:600}.article-prose ul{margin-bottom:1.25em;padding-left:1.5rem;list-style:outside}.article-prose ol{margin-bottom:1.25em;padding-left:1.5rem;list-style:decimal}.article-prose li{margin-bottom:.35em;line-height:1.7}.article-prose li::marker{color:var(--theme-content-muted)}.article-prose blockquote{border-left:3px solid var(--theme-primary);background:var(--theme-primary-muted);border-radius:0 var(--radius-sm) var(--radius-sm) 0;color:var(--theme-content);margin:1.5em 0;padding:.5rem 1rem}.article-prose blockquote p:last-child{margin-bottom:0}.article-prose hr{border:none;border-top:1px solid var(--theme-divider);margin:2.5em 0}.article-prose table{border-collapse:collapse;width:100%;margin:1.5em 0;font-size:.9em}.article-prose thead th{text-align:left;text-transform:uppercase;letter-spacing:.05em;color:var(--theme-content-muted);background:var(--theme-surface-2);border-bottom:1px solid var(--theme-divider-strong);padding:.5rem .75rem;font-size:.75rem;font-weight:600}.article-prose tbody td{border-bottom:1px solid var(--theme-divider);padding:.5rem .75rem}.article-prose :not(pre)>code{font-family:var(--font-mono);background:var(--theme-surface-2);border:1px solid var(--theme-divider);border-radius:var(--radius-sm);color:var(--theme-content);padding:1px 6px;font-size:.85em}.article-prose pre{border:1px solid var(--theme-divider);border-radius:var(--radius-md);margin:1.5em 0;padding:1rem 1.25rem;font-size:.85rem;line-height:1.7;overflow-x:auto;background:var(--theme-surface-1)!important}.article-prose pre code{font-size:inherit;color:inherit;border:none;padding:0;background:0 0!important}.article-prose pre code .line{background:0 0!important}.article-prose pre .code-title{border-bottom:1px solid var(--theme-divider);font-family:var(--font-mono);color:var(--theme-content-muted);margin:-1rem -1.25rem .75rem;padding:.5rem 1.25rem;font-size:.75rem}@media (width>=1024px){.footer-grid{grid-template-columns:repeat(var(--footer-grid-cols), minmax(0, 1fr))}}.footer-copy a{color:inherit;text-underline-offset:2px;text-decoration:underline;transition:color .15s}.footer-copy a:hover{color:var(--theme-content)}[data-theme-toggle][data-theme-mode=light] .theme-toggle-light,[data-theme-toggle][data-theme-mode=dark] .theme-toggle-dark,[data-theme-toggle][data-theme-mode=auto] .theme-toggle-auto{display:inline-block}[data-theme-toggle] .theme-toggle-light,[data-theme-toggle] .theme-toggle-dark,[data-theme-toggle] .theme-toggle-auto{display:none}.code-card{background:var(--theme-surface-1);border:1px solid var(--theme-divider);border-radius:var(--radius-md);flex-direction:column;margin:0;display:flex;overflow:hidden}.code-card .code-card-header{flex:none}.code-card-header{border-bottom:1px solid var(--theme-divider);background:var(--theme-surface-2);font-family:var(--font-mono);color:var(--theme-content-muted);align-items:center;gap:1rem;padding:.5rem 1rem;font-size:.75rem;display:flex}.code-card-header .code-card-title{align-items:center;gap:.5rem;display:inline-flex}.code-card-header .code-card-lang{text-transform:uppercase;letter-spacing:.08em;color:var(--theme-content-muted);font-size:.6875rem}.code-card-copy{border-radius:var(--radius-sm);width:1.75rem;height:1.75rem;color:var(--theme-content-muted);cursor:pointer;background:0 0;justify-content:center;align-items:center;transition:background .15s,color .15s;display:inline-flex}.code-card-copy:hover{background:var(--theme-surface-3);color:var(--theme-content)}.code-card-copy.is-copied{color:var(--theme-success)}.code-card pre{margin:0;padding:1rem 1.25rem;font-size:.85rem;line-height:1.7;overflow:auto;background:0 0!important;border:none!important;border-radius:0!important}.code-card>pre,.code-card .code-tab-panel.is-active>pre{flex:1;min-height:0}.code-card .code-tab-panel.is-active{flex-direction:column;flex:1;min-height:0;display:flex}.code-tab-trigger{color:var(--theme-content-subtle);cursor:pointer;background:0 0}.code-tab-trigger:hover{color:var(--theme-content);background:var(--theme-surface-3)}.code-tab-trigger.is-active,.code-tab-trigger[aria-selected=true]{color:var(--theme-content);background:var(--theme-primary-muted);box-shadow:inset 0 -2px 0 var(--theme-primary)}html:not(.js) .code-tab-panel:not(.is-active){border-top:1px solid var(--theme-divider);display:block;position:relative}html:not(.js) .code-tab-panel:not(.is-active):before{content:attr(data-tab-panel);background:var(--theme-surface-2);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--theme-content-muted);padding:.5rem 1rem;font-size:.6875rem;display:block}html.js .code-tab-panel{display:none}html.js .code-tab-panel.is-active{flex-direction:column;flex:1;min-height:0;display:flex}.mermaid{justify-content:center;margin:1.5em 0;display:flex;overflow-x:auto}.mermaid svg{max-width:100%;height:auto}.code-copy-pre{position:relative}.code-copy-pre>.code-copy-btn{background:var(--theme-surface-2);border:1px solid var(--theme-divider);border-radius:var(--radius-sm);width:2rem;height:2rem;color:var(--theme-content-muted);cursor:pointer;opacity:.6;justify-content:center;align-items:center;transition:opacity .15s,color .15s,background .15s;display:inline-flex;position:absolute;top:.5rem;right:.5rem}@media (hover:hover){.code-copy-pre>.code-copy-btn{opacity:0}.code-copy-pre:hover>.code-copy-btn,.code-copy-pre>.code-copy-btn:focus-visible{opacity:1}}.code-copy-pre>.code-copy-btn:hover{background:var(--theme-surface-3);color:var(--theme-content)}.code-copy-pre>.code-copy-btn.is-copied{color:var(--theme-success);border-color:var(--theme-success)}.code-copy-icon{width:.85rem;height:.85rem}
