:root{color-scheme:light dark;--bg:#fafafa;--ink:#222;--muted:#666;--line:#ddd;--link:#0645ad;--link-visited:#0b0080;--code-bg:#f0f0f0;--accent:#e8590c;--accent-soft:#ffd8a8;--max:40rem;--font:system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:ui-monospace, "Cascadia Code", Consolas, monospace}@media (prefers-color-scheme:dark){:root{--bg:#111;--ink:#e8e8e8;--muted:#999;--line:#333;--link:#8cb4ff;--link-visited:#c4a8ff;--code-bg:#1c1c1c;--accent:#ff922b;--accent-soft:#6b3d14}}::selection{background:var(--accent-soft);color:var(--ink)}.pixel{image-rendering:pixelated;flex:none;display:inline-block;overflow:visible}.px-k{fill:var(--ink)}.px-m{fill:var(--muted)}.px-a{fill:var(--accent)}.px-b{fill:var(--accent-soft)}.px-s{fill:#f1c27d}.px-h{fill:#8b5a2b}.px-e{fill:#2b2b2b}.px-j{fill:#4c6ef5}.pixel--animated .pixel-frame{animation:none}.pixel--animated .pixel-frame:first-child{animation-name:pixel-frame-a}.pixel--animated .pixel-frame:nth-child(2){animation-name:pixel-frame-b}.pixel--mug .pixel-frame{animation-duration:1.6s}@keyframes pixel-frame-a{0%{opacity:1}50%{opacity:0}to{opacity:0}}@keyframes pixel-frame-b{0%{opacity:0}50%{opacity:1}to{opacity:1}}@keyframes pixel-bob{0%{transform:translateY(0)}50%{transform:translateY(-6px)}to{transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.pixel--animated .pixel-frame,.ghost-sprite{animation:none}.pixel--animated .pixel-frame:nth-child(2){opacity:0}}*,:before,:after{box-sizing:border-box}body{min-height:100vh;font-family:var(--font);color:var(--ink);background:var(--bg);margin:0;font-size:1.05rem;line-height:1.65}img{max-width:100%;height:auto}a{color:var(--link);text-underline-offset:.12em}a:visited{color:var(--link-visited)}.site-shell{width:min(calc(100% - 2rem), var(--max));margin:0 auto;padding:1.75rem 0 3.5rem}.site-header{background:repeating-linear-gradient(90deg, var(--line) 0 4px, transparent 4px 8px) bottom / 100% 2px no-repeat;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.75rem 1.25rem;margin-bottom:2.5rem;padding-bottom:.85rem;display:flex}.site-brand{font-family:var(--font-pixel);color:var(--ink);align-items:center;gap:.55rem;font-size:1rem;text-decoration:none;display:inline-flex}.site-brand:visited{color:var(--ink)}.site-nav{flex-wrap:wrap;gap:.85rem;font-size:.95rem;display:flex}.site-nav a{color:var(--muted);text-decoration:none}.site-nav a:hover,.site-nav a[aria-current=page]{color:var(--ink);text-decoration:underline}.intro{margin-bottom:2.5rem}.intro h1{letter-spacing:-.02em;margin:0 0 .6rem;font-size:1.75rem;font-weight:650;line-height:1.2}.intro p{color:var(--muted);margin:0}.intro--hero{justify-content:space-between;align-items:flex-end;gap:1.5rem;display:flex}.hero-sprite{margin-bottom:-.25rem}@media (width<=30rem){.hero-sprite{width:56px;height:56px}}.ghost-sprite{margin-bottom:1.25rem;animation:2s steps(4,end) infinite pixel-bob;display:block}.section{margin-bottom:2.75rem}.section-head{justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:.75rem;display:flex}.section-head h2{font-family:var(--font-pixel);letter-spacing:.04em;text-transform:uppercase;color:var(--muted);align-items:center;gap:.5rem;margin:0;font-size:.8rem;font-weight:400;display:flex}.section-head a{font-size:.9rem;text-decoration:none}.entry-list{margin:0;padding:0;list-style:none}.entry-item{border-top:1px solid var(--line);padding:.9rem 0}.entry-item:first-child{border-top:0;padding-top:0}.entry-item h3{margin:0 0 .2rem;font-size:1.05rem;font-weight:650;position:relative}.entry-item h3 a{color:var(--ink);text-decoration:none}.entry-item h3:before{content:"";background:var(--accent);clip-path:polygon(0 0,33% 0,33% 20%,67% 20%,67% 40%,100% 40%,100% 60%,67% 60%,67% 80%,33% 80%,33% 100%,0 100%);opacity:0;width:6px;height:10px;transition:opacity .15s steps(2,end),transform .15s steps(2,end);position:absolute;top:50%;left:-1rem;transform:translate(-4px,-50%)}.entry-item:hover h3:before{opacity:1;transform:translateY(-50%)}.entry-item h3 a:hover{color:var(--link)}.entry-item h3 a:visited{color:var(--ink)}.entry-item .summary{color:var(--muted);margin:0;font-size:.95rem}.meta{color:var(--muted);margin-top:.25rem;font-size:.85rem}.related{border-top:1px solid var(--line);margin-top:2.5rem;padding-top:1.25rem}.meta a{color:var(--muted)}.page-title{letter-spacing:-.02em;margin:0 0 .5rem;font-size:1.85rem;font-weight:650;line-height:1.15}.page-lead{color:var(--muted);margin:0 0 1.75rem}.ai-note{border-top:1px solid var(--line);color:var(--muted);margin:1.75rem 0 0;padding-top:1rem;font-size:.92rem}.ai-note a{color:var(--muted)}.article-layout{display:block}.sidebar{border-top:1px solid var(--line);color:var(--muted);margin-top:2.5rem;padding-top:1rem;font-size:.95rem}.prose :where(h2,h3){margin:1.75rem 0 .6rem;line-height:1.25}.prose :where(p,ul,ol,blockquote,pre,figure){margin:0 0 1rem}.prose :where(img){border:1px solid var(--line);border-radius:.35rem;width:auto;max-width:100%;height:auto;max-height:min(70vh,40rem);margin:1.25rem auto 1.5rem;display:block}.prose :where(figure.emdash-image){text-align:center}.prose :where(ul,ol){padding-left:1.2rem}.prose :where(blockquote){border-left:2px solid var(--line);color:var(--muted);padding-left:.9rem}.prose :where(code){background:var(--code-bg);font-family:var(--font-mono);border-radius:.2rem;padding:.1rem .3rem;font-size:.9em}.prose :where(pre){border:1px solid var(--line);background:var(--code-bg);border-radius:.35rem;padding:.9rem;overflow-x:auto}.prose :where(pre code){background:0 0;padding:0}.project-links{flex-wrap:wrap;gap:.85rem;margin:.75rem 0 1.5rem;font-size:.95rem;display:flex}.site-footer{background:repeating-linear-gradient(90deg, var(--line) 0 4px, transparent 4px 8px) top / 100% 2px no-repeat;font-family:var(--font-pixel);color:var(--muted);margin-top:4.5rem;padding-top:.85rem;font-size:.75rem;position:relative}.footer-mug{position:absolute;bottom:100%;right:1.5rem}.site-footer p{margin:0}.empty-state{color:var(--muted)}.comments-section{border-top:1px solid var(--line);--ec-comment-ink:var(--ink);--ec-comment-muted:var(--muted);--ec-comment-line:var(--line);--ec-comment-bg:var(--bg);--ec-comment-accent:var(--accent);--ec-form-border:var(--line);--ec-form-bg:var(--bg);--ec-form-color:var(--ink);--ec-form-submit-bg:var(--accent);--ec-form-submit-color:var(--ink);margin-top:3rem;padding-top:1.5rem}.comments-heading{font-family:var(--font-pixel);letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin:0 0 1rem;font-size:.8rem;font-weight:400}.ec-form{grid-template-columns:1fr auto;align-items:stretch;gap:.45rem .5rem;margin:1.25rem 0 0;display:grid;position:relative}.ec-form-page{border:0;min-inline-size:0;margin:0;padding:0;display:contents}.ec-form-field{display:contents}.ec-form-label{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.ec-form-required{color:var(--muted);margin-left:.15rem}.ec-form-input{border:2px solid var(--line);background:var(--bg);width:100%;min-width:0;min-height:2.6rem;color:var(--ink);font:inherit;border-radius:0;grid-area:1/1;padding:.5rem .65rem;font-size:.95rem}.ec-form-input::placeholder{color:var(--muted);opacity:1}.ec-form-input:focus{border-color:var(--ink);outline:none}textarea.ec-form-input{resize:vertical;min-height:9rem}.ec-form-radio-group,.ec-form-checkbox-group{border:0;flex-direction:column;gap:.35rem;margin:.15rem 0 0;padding:0;display:flex}.ec-form-radio-label,.ec-form-checkbox-label{cursor:pointer;align-items:center;gap:.5rem;font-size:.95rem;display:flex}.ec-form-radio-label input,.ec-form-checkbox-label input{width:1rem;height:1rem;accent-color:var(--ink);margin:0}.ec-form-help,.ec-form-error{color:var(--muted);grid-column:1/-1;font-size:.8rem}.ec-form-error:empty{display:none}.ec-form-field[aria-hidden=true],.ec-form-field[style*=absolute]{display:block;position:absolute;left:-9999px}.ec-form-nav{grid-area:1/2;align-items:stretch;margin:0;display:flex}.ec-form-submit,.comments-section .ec-comment-form-submit{border:2px solid var(--ink);background:var(--accent);min-height:2.6rem;color:var(--ink);font-family:var(--font-pixel);letter-spacing:.04em;text-transform:uppercase;cursor:pointer;border-radius:0;justify-content:center;align-items:center;padding:.5rem .9rem;font-size:.68rem;font-weight:400;line-height:1.1;display:inline-flex}.ec-form-submit:hover,.comments-section .ec-comment-form-submit:hover{filter:brightness(1.05)}.ec-form-submit:disabled,.comments-section .ec-comment-form-submit:disabled{opacity:.5;cursor:wait}.ec-form-status{color:var(--muted);grid-column:1/-1;margin:0;font-size:.9rem}.ec-form-status:empty{display:none}@media (width<=28rem){.ec-form{grid-template-columns:1fr}.ec-form-nav{grid-area:auto/1}.ec-form-submit{width:100%}}.comments-section .ec-comments{--ec-comment-border:1px solid var(--line);margin-bottom:1.5rem}.comments-section .ec-comment-author{color:var(--ink)}.comments-section .ec-comment-date{color:var(--muted);opacity:1}.comments-section .ec-reaction{border:2px solid var(--line);color:var(--muted);border-radius:0}.comments-section .ec-reaction[aria-pressed=true]{border-color:var(--ink);color:var(--ink);background:var(--accent-soft)}.comments-section .ec-comment-form{margin-top:.25rem}.comments-section .ec-comment-form-field label{color:var(--muted);font-size:.85rem}.comments-section .ec-comment-form-field input,.comments-section .ec-comment-form-field textarea{min-height:2.6rem;border:2px solid var(--line)!important;background:var(--bg)!important;color:var(--ink)!important;border-radius:0!important;padding:.5rem .65rem!important}.comments-section .ec-comment-form-field input:focus,.comments-section .ec-comment-form-field textarea:focus{outline:none;border-color:var(--ink)!important}.comments-section .ec-comment-form-field textarea{min-height:7rem}.comments-section .ec-comment-form-submit{letter-spacing:.04em;text-transform:uppercase;border:2px solid var(--ink)!important;background:var(--accent)!important;color:var(--ink)!important;font-family:var(--font-pixel)!important;border-radius:0!important;margin-top:.85rem!important;font-size:.68rem!important;font-weight:400!important}.comments-section .ec-comment-user-info{border:2px solid var(--line);background:0 0;border-radius:0}.emdash-image-media[data-astro-cid-6depetnu]{max-width:100%;height:auto}:where(:root.dark) .emdash-image--light,:where(:root.light) .emdash-image--dark{display:none}@media (prefers-color-scheme:dark){:where(:root:not(.light)) .emdash-image--light{display:none}}@media (prefers-color-scheme:light){:where(:root:not(.dark)) .emdash-image--dark{display:none}}.has-text-align-center[data-astro-cid-44ocxh3s]{text-align:center}.has-text-align-right[data-astro-cid-44ocxh3s]{text-align:right}.has-text-align-justify[data-astro-cid-44ocxh3s]{text-align:justify}.emdash-image[data-astro-cid-nzlefzml]{margin:1.5rem 0}.emdash-image[data-astro-cid-nzlefzml] img[data-astro-cid-nzlefzml]{max-width:100%;height:auto}.emdash-image[data-astro-cid-nzlefzml] figcaption[data-astro-cid-nzlefzml]{color:var(--emdash-caption-color,var(--color-muted,#666));text-align:center;margin-top:.5rem;font-size:.875rem}.emdash-image--align-left[data-astro-cid-nzlefzml],.emdash-image--align-right[data-astro-cid-nzlefzml]{width:fit-content;max-width:50%}.emdash-image--align-left[data-astro-cid-nzlefzml]{float:left;margin:0 1.5rem 1rem 0}.emdash-image--align-right[data-astro-cid-nzlefzml]{float:right;margin:0 0 1rem 1.5rem}.emdash-image--align-center[data-astro-cid-nzlefzml]{width:fit-content;margin-inline:auto}.emdash-image--align-wide[data-astro-cid-nzlefzml],.emdash-image--align-full[data-astro-cid-nzlefzml]{width:100%}@media (width<=640px){.emdash-image--align-left[data-astro-cid-nzlefzml],.emdash-image--align-right[data-astro-cid-nzlefzml]{float:none;width:100%;max-width:100%;margin-inline:0}}.emdash-code[data-astro-cid-dgremz56]{margin:1.5rem 0}.emdash-code-filename[data-astro-cid-dgremz56]{color:#ccc;background:#2d2d2d;border-radius:.5rem .5rem 0 0;padding:.5rem 1rem;font-family:monospace;font-size:.75rem}.emdash-code[data-astro-cid-dgremz56] pre[data-astro-cid-dgremz56]{background:#1e1e1e;border-radius:.5rem;margin:0;padding:1rem;overflow-x:auto}.emdash-code-filename[data-astro-cid-dgremz56]+pre[data-astro-cid-dgremz56]{border-radius:0 0 .5rem .5rem}.emdash-code[data-astro-cid-dgremz56] code[data-astro-cid-dgremz56]{color:#e0e0e0;font-family:Fira Code,Consolas,monospace;font-size:.875rem}.emdash-embed[data-astro-cid-n4v2ghzc]{margin:1.5rem 0}.emdash-embed-video[data-astro-cid-n4v2ghzc]{height:0;padding-bottom:56.25%;position:relative;overflow:hidden}.emdash-embed-video[data-astro-cid-n4v2ghzc] iframe[data-astro-cid-n4v2ghzc],.emdash-embed-video[data-astro-cid-n4v2ghzc] video[data-astro-cid-n4v2ghzc]{border:0;width:100%;height:100%;position:absolute;top:0;left:0}.emdash-embed-audio[data-astro-cid-n4v2ghzc],.emdash-embed-audio[data-astro-cid-n4v2ghzc] audio[data-astro-cid-n4v2ghzc]{width:100%}.emdash-embed[data-astro-cid-n4v2ghzc] figcaption[data-astro-cid-n4v2ghzc]{color:var(--emdash-caption-color,var(--color-muted,#666));text-align:center;margin-top:.5rem;font-size:.875rem}.emdash-gallery[data-astro-cid-d6nmylgu]{grid-template-columns:repeat(var(--columns,3), 1fr);gap:1rem;margin:1.5rem 0;display:grid}.emdash-gallery-item[data-astro-cid-d6nmylgu]{margin:0}.emdash-gallery-item[data-astro-cid-d6nmylgu] img[data-astro-cid-d6nmylgu]{object-fit:cover;aspect-ratio:1;width:100%;height:auto}.emdash-gallery-item[data-astro-cid-d6nmylgu] figcaption[data-astro-cid-d6nmylgu]{color:var(--emdash-caption-color,var(--color-muted,#666));text-align:center;margin-top:.25rem;font-size:.75rem}@media (width<=640px){.emdash-gallery[data-astro-cid-d6nmylgu]{grid-template-columns:repeat(2,1fr)}}.emdash-columns[data-astro-cid-sjaxkm7w]{gap:2rem;margin:1.5rem 0;display:flex}.emdash-column[data-astro-cid-sjaxkm7w]{flex:1;min-width:0}@media (width<=768px){.emdash-columns[data-astro-cid-sjaxkm7w]{flex-direction:column;gap:1rem}}.emdash-break[data-astro-cid-gvovdxls]{margin:2rem 0}.emdash-break-line[data-astro-cid-gvovdxls]{border:none;border-top:1px solid var(--emdash-break-color,var(--color-border,#e0e0e0))}.emdash-break-dots[data-astro-cid-gvovdxls]{text-align:center;color:var(--emdash-break-dots-color,var(--color-muted,#999));letter-spacing:.5em}.emdash-break-space[data-astro-cid-gvovdxls]{height:2rem}iframe[data-emdash-html-block]{border:0;width:100%;margin:1.5rem 0;display:block}.emdash-html-block[data-astro-cid-7hlqo6bn]{margin:1.5rem 0}.emdash-iframe[data-astro-cid-fhxykd76]{aspect-ratio:16/9;width:100%;margin:1.5rem 0}.emdash-iframe[data-astro-cid-fhxykd76] iframe{border:0;width:100%;height:100%;display:block}.emdash-table-wrapper[data-astro-cid-7uypp5bz]{overscroll-behavior-inline:contain;max-inline-size:100%;margin-block:1.5rem;overflow-x:auto}.emdash-table[data-astro-cid-7uypp5bz]{border-collapse:collapse;inline-size:100%;font-size:.9rem}.emdash-table[data-astro-cid-7uypp5bz] th[data-astro-cid-7uypp5bz],.emdash-table[data-astro-cid-7uypp5bz] td[data-astro-cid-7uypp5bz]{border:1px solid var(--color-border,#ddd);text-align:start;vertical-align:top;padding:.75rem;position:relative}.emdash-table[data-astro-cid-7uypp5bz] th[data-astro-cid-7uypp5bz] p,.emdash-table[data-astro-cid-7uypp5bz] td[data-astro-cid-7uypp5bz] p{margin:0}.emdash-table[data-astro-cid-7uypp5bz] th[data-astro-cid-7uypp5bz]{background:var(--color-surface,#f5f5f5);font-weight:600}.emdash-table[data-astro-cid-7uypp5bz] tbody[data-astro-cid-7uypp5bz] tr[data-astro-cid-7uypp5bz]:nth-child(2n){background:var(--color-bg-subtle,#fafafa)}.emdash-table[data-astro-cid-7uypp5bz] tbody[data-astro-cid-7uypp5bz] tr[data-astro-cid-7uypp5bz]:hover{background:var(--color-surface,#f0f0f0)}.emdash-button[data-astro-cid-i644adhy]{cursor:pointer;border-radius:4px;padding:.75em 1.5em;font-weight:500;text-decoration:none;transition:background-color .2s,border-color .2s,color .2s;display:inline-block}.emdash-button--default[data-astro-cid-i644adhy],.emdash-button--fill[data-astro-cid-i644adhy]{background-color:var(--emdash-button-bg,#0073aa);color:var(--emdash-button-color,#fff);border:2px solid var(--emdash-button-bg,#0073aa)}.emdash-button--default[data-astro-cid-i644adhy]:hover,.emdash-button--fill[data-astro-cid-i644adhy]:hover{background-color:var(--emdash-button-bg-hover,#005177);border-color:var(--emdash-button-bg-hover,#005177)}.emdash-button--outline[data-astro-cid-i644adhy]{color:var(--emdash-button-bg,#0073aa);border:2px solid var(--emdash-button-bg,#0073aa);background-color:#0000}.emdash-button--outline[data-astro-cid-i644adhy]:hover{background-color:var(--emdash-button-bg,#0073aa);color:var(--emdash-button-color,#fff)}.emdash-buttons[data-astro-cid-pxkpowas]{flex-wrap:wrap;gap:.75rem;margin:1.5rem 0;display:flex}.emdash-buttons--vertical[data-astro-cid-pxkpowas]{flex-direction:column;align-items:flex-start}.emdash-buttons--horizontal[data-astro-cid-pxkpowas]{flex-direction:row;align-items:center}.emdash-cover[data-astro-cid-g6rigryn]{background-color:var(--emdash-cover-fallback-bg,#333);border-radius:4px;align-items:center;margin:1.5rem 0;padding:2rem;display:flex;position:relative;overflow:hidden}.emdash-cover__background[data-astro-cid-g6rigryn]{object-fit:cover;z-index:0;width:100%;height:100%;position:absolute;inset:0}.emdash-cover__video[data-astro-cid-g6rigryn]{object-fit:cover}.emdash-cover__overlay[data-astro-cid-g6rigryn]{z-index:1;position:absolute;inset:0}.emdash-cover__content[data-astro-cid-g6rigryn]{z-index:2;width:100%;color:var(--emdash-cover-text-color,#fff);position:relative}.emdash-cover--align-left[data-astro-cid-g6rigryn]{text-align:left;justify-content:flex-start}.emdash-cover--align-center[data-astro-cid-g6rigryn]{text-align:center;justify-content:center}.emdash-cover--align-right[data-astro-cid-g6rigryn]{text-align:right;justify-content:flex-end}.emdash-cover__content[data-astro-cid-g6rigryn] h1,.emdash-cover__content[data-astro-cid-g6rigryn] h2,.emdash-cover__content[data-astro-cid-g6rigryn] h3,.emdash-cover__content[data-astro-cid-g6rigryn] h4,.emdash-cover__content[data-astro-cid-g6rigryn] p{color:inherit}.emdash-file[data-astro-cid-dsnn5jk3]{background-color:var(--emdash-file-bg,#f5f5f5);border:1px solid var(--emdash-file-border,#e0e0e0);border-radius:4px;align-items:center;gap:.75rem;margin:1rem 0;padding:1rem;display:flex}.emdash-file__link[data-astro-cid-dsnn5jk3]{color:var(--emdash-file-color,#333);flex:1;align-items:center;gap:.5rem;text-decoration:none;display:flex}.emdash-file__link[data-astro-cid-dsnn5jk3]:hover{text-decoration:underline}.emdash-file__icon[data-astro-cid-dsnn5jk3]{width:1.5rem;height:1.5rem;color:var(--emdash-file-icon-color,#666);flex-shrink:0}.emdash-file__name[data-astro-cid-dsnn5jk3]{word-break:break-all;font-weight:500}.emdash-file__download[data-astro-cid-dsnn5jk3]{background-color:var(--emdash-button-bg,#0073aa);width:2.5rem;height:2.5rem;color:var(--emdash-button-color,#fff);border-radius:4px;justify-content:center;align-items:center;transition:background-color .2s;display:flex}.emdash-file__download[data-astro-cid-dsnn5jk3]:hover{background-color:var(--emdash-button-bg-hover,#005177)}.emdash-file__download[data-astro-cid-dsnn5jk3] svg[data-astro-cid-dsnn5jk3]{width:1.25rem;height:1.25rem}.emdash-pullquote[data-astro-cid-mtrxdgkr]{border-top:4px solid var(--emdash-pullquote-border,#0073aa);border-bottom:4px solid var(--emdash-pullquote-border,#0073aa);text-align:center;margin:2rem 0;padding:1.5rem 2rem}.emdash-pullquote__text[data-astro-cid-mtrxdgkr]{color:var(--emdash-pullquote-color,#333);margin:0;font-size:1.5rem;font-style:italic;line-height:1.4}.emdash-pullquote__citation[data-astro-cid-mtrxdgkr]{color:var(--emdash-pullquote-citation-color,#666);margin-top:1rem;font-size:.9rem;font-style:normal}
