:root{color-scheme:light;--color-paper:oklch(99% 0.002 250);--color-ink:oklch(25% 0.006 250);--color-body:oklch(39% 0.008 250);--color-muted:oklch(51% 0.008 250);--color-rule:oklch(85% 0.006 250);--color-accent:oklch(43% 0.08 170);--color-accent-ink:oklch(99% 0.002 250);--color-tint:oklch(96% 0.007 250);--color-focus:oklch(48% 0.13 230);--color-error:oklch(50% 0.16 25);--color-code:oklch(96% 0.004 250);--color-add:oklch(93% 0.035 155);--color-remove:oklch(94% 0.035 25);--color-code-keyword:oklch(48% 0.14 290);--color-code-string:oklch(43% 0.10 155);--color-code-type:oklch(45% 0.10 220);--color-transparent:transparent;--font-body:'Inter', 'Gothic A1', -apple-system, BlinkMacSystemFont, sans-serif;--font-display:var(--font-body);--font-mono:'JetBrains Mono', ui-monospace, monospace;--space-2xs:4px;--space-xs:8px;--space-sm:12px;--space-md:16px;--space-lg:24px;--space-xl:40px;--space-2xl:64px;--space-3xl:96px;--text-small:12px;--text-meta:13px;--text-body:16px;--text-lead:18px;--text-heading:22px;--text-display:36px;--rule-thin:1px;--radius-small:6px;--ease-out:cubic-bezier(.16, 1, .3, 1);--dur-fast:180ms;--dur-enter:450ms}:root[data-theme=dark]{color-scheme:dark;--color-paper:oklch(16% 0.005 250);--color-ink:oklch(93% 0.004 250);--color-body:oklch(79% 0.006 250);--color-muted:oklch(66% 0.006 250);--color-rule:oklch(33% 0.006 250);--color-accent:oklch(78% 0.08 170);--color-accent-ink:oklch(16% 0.005 250);--color-tint:oklch(23% 0.008 250);--color-focus:oklch(77% 0.11 230);--color-error:oklch(75% 0.13 25);--color-code:oklch(20% 0.006 250);--color-add:oklch(28% 0.035 155);--color-remove:oklch(28% 0.035 25);--color-code-keyword:oklch(77% 0.10 290);--color-code-string:oklch(79% 0.10 155);--color-code-type:oklch(79% 0.09 220)}*{box-sizing:border-box}html,body{overflow-x:clip}html{scroll-padding-top:var(--space-lg)}body{margin:0;min-height:100vh;background:var(--color-paper);color:var(--color-body);font:var(--text-body)/1.8 var(--font-body);overflow-wrap:anywhere}#ambient{position:fixed;inset:0;z-index:0;pointer-events:none;opacity:1}.site-header,.page,.site-footer{position:relative;z-index:1}.site-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-lg);width:calc(100% - 80px);max-width:1440px;min-height:88px;margin-inline:auto}a{color:var(--color-ink);text-decoration:none;border-bottom:1px solid var(--color-rule)}a:focus-visible,button:focus-visible,summary:focus-visible,[tabindex="0"]:focus-visible{outline:2px solid var(--color-focus);outline-offset:4px;border-radius:2px}a:active,button:active{opacity:.75}@media(hover:hover){a:hover{border-bottom-color:var(--color-ink)}}button{font:inherit;cursor:pointer}.wordmark{font:500 18px/1.5 var(--font-mono);letter-spacing:-.045em;border:0;color:var(--color-ink)}.site-header nav{display:flex;align-items:center;gap:var(--space-lg)}.site-header nav a{position:relative;display:inline-flex;align-items:center;min-height:44px;border:0;color:var(--color-muted);font-size:14px;white-space:nowrap}.site-header nav a::after{content:'';position:absolute;height:1px;bottom:7px;left:0;right:0;background:var(--color-accent);transform:scaleX(0);transform-origin:left;transition:transform var(--dur-fast)var(--ease-out)}.site-header nav a[aria-current]{color:var(--color-ink)}.site-header nav a[aria-current]::after{transform:scaleX(1)}@media(hover:hover){.site-header nav a:hover::after{transform:scaleX(1)}.site-header nav a:hover{color:var(--color-ink)}}.theme-toggle{display:inline-flex;justify-content:center;align-items:center;width:44px;height:44px;padding:0;border:0;border-radius:50%;color:var(--color-muted);background:var(--color-transparent);font-size:23px;line-height:1}@media(hover:hover){.theme-toggle:hover{background:var(--color-tint);color:var(--color-ink)}}.page{width:calc(100% - 48px);margin:var(--space-xl)auto var(--space-2xl);min-height:calc(100vh - 300px)}.page--reading{max-width:680px}.page--wide{max-width:920px}.page-heading{margin-bottom:var(--space-xl)}h1,h2,h3{color:var(--color-ink);font-family:var(--font-display);font-style:normal;min-width:0;overflow-wrap:anywhere}h1{margin:0;font-size:var(--text-display);line-height:1.25;font-weight:700;letter-spacing:-.045em}h2{margin:0;font-size:24px;line-height:1.4;font-weight:600;letter-spacing:-.025em}h3{margin:0;font-size:20px;line-height:1.5;font-weight:600;letter-spacing:-.02em}p{margin:0}.muted,.lede{color:var(--color-muted)}.lede{margin-top:var(--space-sm)}.external-arrow{display:inline-block;font-family:var(--font-body);font-size:.5em;line-height:1;margin-inline-start:var(--space-2xs)}[hidden]{display:none!important}.site-footer{width:calc(100% - 48px);max-width:920px;margin:0 auto var(--space-lg);padding-top:var(--space-md);border-top:var(--rule-thin)solid var(--color-rule);display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-md);color:var(--color-muted);font-size:var(--text-small)}.site-footer>div{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-md)}.site-footer a{display:inline-flex;align-items:center;min-height:44px;color:var(--color-muted);border:0;white-space:nowrap}.skip-link{position:fixed;top:0;left:var(--space-md);z-index:10;padding:var(--space-xs)var(--space-md);background:var(--color-paper);color:var(--color-ink);transform:translateY(-150%)}.skip-link:focus{transform:none}.about-heading{margin-bottom:var(--space-lg)}.about-handle{margin-top:var(--space-xs);color:var(--color-muted);font:14px/1.6 var(--font-mono)}.about-copy{display:grid;gap:var(--space-lg)}.project-links{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs)}.project-link{display:inline-flex;align-items:center;gap:var(--space-xs);min-height:44px;padding-inline:var(--space-xs);border:1px solid var(--color-rule);border-radius:var(--radius-small);color:var(--color-ink);background:var(--color-paper);font-size:14px;white-space:nowrap}.project-link img{width:19px;height:19px;object-fit:contain;border-radius:3px}.about-section{margin-top:var(--space-xl)}.about-section h2{font-size:18px;margin-bottom:var(--space-sm)}.about-links{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-lg)}.about-links a{display:inline-flex;align-items:center;min-height:44px}@keyframes page-enter{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:no-preference){.page-enter{animation:page-enter var(--dur-enter)var(--ease-out)both}}@view-transition{navigation: auto; }::view-transition-old(root),::view-transition-new(root){animation-duration:160ms}@media(max-width:800px){.site-header{width:calc(100% - 48px);gap:var(--space-sm)}.site-header nav{gap:var(--space-md)}}@media(max-width:600px){.site-header{width:calc(100% - 32px);flex-wrap:wrap;justify-content:flex-start;padding-top:var(--space-md);gap:var(--space-2xs)}.wordmark{flex-basis:100%}.site-header nav{width:100%;justify-content:space-between;gap:var(--space-xs)}.site-header nav a{font-size:13px}.page{width:calc(100% - 40px);margin-top:var(--space-lg);margin-bottom:var(--space-xl)}h1{font-size:30px}.site-footer{width:calc(100% - 40px);flex-direction:column;align-items:flex-start;gap:0}#ambient{opacity:.6}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.page-enter{opacity:1;transform:none}@view-transition{navigation: none; }}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.page-lead{margin-top:var(--space-lg)}.stories{margin-top:var(--space-xl)}.story{padding-block:var(--space-lg);border-bottom:var(--rule-thin)solid var(--color-rule)}.story:last-child{border-bottom:0}.story-body{margin-top:var(--space-sm)}.story-body p+p{margin-top:var(--space-sm)}.story-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-md);margin-top:var(--space-sm);color:var(--color-muted);font-size:var(--text-meta)}.story-meta a{display:inline-flex;align-items:center;min-height:44px}.blog-page .blog-intro{margin-bottom:var(--space-2xl)}.blog-page .blog-intro h1{margin:0 0 var(--space-md);word-break:keep-all}.blog-page .blog-back{display:inline-flex;align-items:center;gap:var(--space-2xs);min-height:44px;margin-bottom:var(--space-xs);font-size:var(--text-meta);color:var(--color-muted);border:0}.blog-page .blog-back:hover{color:var(--color-ink)}.blog-page .blog-note{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2xs)var(--space-xs);margin:var(--space-sm)0 0;font-size:var(--text-meta);line-height:1.6;color:var(--color-muted);word-break:keep-all}.blog-page .blog-note a{display:inline-flex;align-items:center;min-height:44px;color:inherit;border-bottom:0}.blog-page .blog-note a:hover{color:var(--color-ink)}.blog-page .year-group{position:relative;margin-top:var(--space-2xl)}.blog-page .year-group:first-of-type{margin-top:0}.blog-page .year-label{margin:0 0 var(--space-2xs);font-family:var(--font-display);font-size:calc(var(--text-display) * 1.75);font-weight:800;line-height:1;letter-spacing:-.02em;color:var(--color-muted);user-select:none}@supports(-webkit-text-stroke:1px black) and (paint-order:stroke fill){.blog-page .year-label{color:var(--color-paper);-webkit-text-stroke:4px var(--color-muted);paint-order:stroke fill}}.blog-page .post-list{margin:0;padding:0;list-style:none}.blog-page .post-item{padding:var(--space-sm)0}.blog-page .post-item+.post-item{margin-top:var(--space-2xs)}.blog-page .post-link{display:inline;font-size:var(--text-lead);font-weight:600;line-height:1.5;color:var(--color-ink);border:0;word-break:keep-all;overflow-wrap:anywhere;transition:opacity var(--dur-fast)var(--ease-out)}.blog-page .post-link:hover{opacity:.72}.blog-page .post-link:focus-visible{outline:2px solid var(--color-focus);outline-offset:3px;border-radius:var(--radius-small)}.blog-page .post-meta{display:flex;flex-wrap:wrap;gap:var(--space-2xs)var(--space-xs);margin:var(--space-2xs)0 0;font-size:var(--text-meta);line-height:1.5;color:var(--color-muted)}.blog-page .post-summary{margin:var(--space-2xs)0 0;font-size:var(--text-body);line-height:1.7;color:var(--color-body);word-break:keep-all;overflow-wrap:break-word}.blog-page .post-empty{color:var(--color-muted)}.blog-page .pagination{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs)var(--space-md);margin-top:var(--space-2xl);padding-top:var(--space-lg);border-top:var(--rule-thin)solid var(--color-rule);font-size:var(--text-meta)}.blog-page .pagination a{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2xs);min-width:44px;min-height:44px;color:var(--color-muted);border:0;border-radius:var(--radius-small);font-variant-numeric:tabular-nums}.blog-page .pagination a:hover{color:var(--color-ink)}.blog-page .pagination-pages{display:flex;flex-wrap:wrap;gap:var(--space-2xs);margin:0;padding:0;list-style:none}.blog-page .pagination-pages a[aria-current=page]{color:var(--color-ink);font-weight:600;box-shadow:inset 0 -2px 0 var(--color-accent);border-radius:0}.blog-page .pagination-step:last-child{margin-left:auto}.blog-page .term-list{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin:0;padding:0;list-style:none}.blog-page .term-list a{display:inline-flex;align-items:center;gap:var(--space-xs);min-height:44px;padding:0 var(--space-md);border:var(--rule-thin)solid var(--color-rule);border-radius:999px;color:var(--color-body);font-size:var(--text-meta)}.blog-page .term-list a:hover{color:var(--color-ink);border-color:var(--color-muted)}.blog-page .term-count{color:var(--color-muted);font-variant-numeric:tabular-nums}@media(max-width:480px){.blog-page .year-label{font-size:calc(var(--text-display) * 1.5)}.blog-page .post-link{font-size:var(--text-body)}}.article-page .post-header{margin-bottom:var(--space-xl)}.article-page .post-back{display:inline-flex;align-items:center;gap:var(--space-2xs);min-height:44px;font-size:var(--text-meta);color:var(--color-muted);border:0;transition:opacity var(--dur-fast)var(--ease-out)}.article-page .post-back:hover{color:var(--color-ink)}.article-page .post-header h1{margin:var(--space-md)0 var(--space-sm);line-height:1.3;word-break:keep-all;overflow-wrap:anywhere}.article-page .post-header h1:first-child{margin-top:0}.article-page .post-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-2xs)var(--space-xs);margin:0;font-size:var(--text-meta);line-height:1.5;color:var(--color-muted)}.article-page .post-meta a{color:inherit}.article-page .post-meta a:hover{color:var(--color-ink)}.article-page .post-body{font-size:var(--text-lead);line-height:1.85;color:var(--color-body);word-break:keep-all;overflow-wrap:break-word}.article-page .post-body p{margin:0 0 1.15em}.article-page .post-body h2{margin:2.2em 0 .75em;line-height:1.4;color:var(--color-ink);scroll-margin-top:var(--space-xl)}.article-page .post-body h3{margin:1.8em 0 .6em;line-height:1.45;color:var(--color-ink);scroll-margin-top:var(--space-xl)}.article-page .post-body a{color:var(--color-ink);transition:border-color var(--dur-fast)var(--ease-out)}.article-page .post-body a:hover{border-bottom-color:var(--color-accent)}.article-page .post-body strong{color:var(--color-ink);font-weight:600}.article-page .post-body :not(pre)>code{padding:.1em .35em;border-radius:var(--radius-small);background:var(--color-code);color:var(--color-ink);font-family:var(--font-mono);font-size:.84em;font-variant-ligatures:none;word-break:break-word}.article-page .post-body ol,.article-page .post-body ul{margin:0 0 1.15em;padding-left:1.5em}.article-page .post-body li{margin:.35em 0;padding-left:.2em}.article-page .post-body li>ol,.article-page .post-body li>ul,.article-page .post-body li>p{margin-bottom:.35em}.article-page .post-body li::marker{color:var(--color-muted);font-variant-numeric:tabular-nums}.article-page .post-body blockquote{margin:1.6em 0;padding:.1em 0 .1em 1.1em;border-left:3px solid var(--color-accent);color:var(--color-ink)}.article-page .post-body blockquote p{margin:0}.article-page .post-body blockquote p+p{margin-top:.6em}.article-page .post-body hr{margin:2.4em 0;border:0;border-top:var(--rule-thin)solid var(--color-rule)}.article-page .post-body img{display:block;max-width:100%;height:auto;margin:1.6em 0;border-radius:var(--radius-small)}.article-page .post-body pre:not(.code-pre){margin:1.6em 0;padding:var(--space-sm)var(--space-md);overflow-x:auto;border:var(--rule-thin)solid var(--color-rule);border-radius:var(--radius-small);background:var(--color-code);font-family:var(--font-mono);font-size:calc(var(--text-body) * .875);line-height:1.7;font-variant-ligatures:none;tab-size:4;word-break:normal;overflow-wrap:normal}.article-page .post-body pre:not(.code-pre) code{font:inherit;white-space:pre}.article-page .post-body .footnotes{margin-top:2.4em;font-size:var(--text-body);color:var(--color-muted)}.article-page .post-body .footnotes hr{margin:0 0 1.2em}.article-page .post-body .footnote-ref a,.article-page .post-body .footnote-backref{border:0}.article-page .post-body table{width:100%;margin:1.4em 0 1.6em;border-collapse:collapse;font-size:var(--text-body);line-height:1.6}.article-page .post-body th,.article-page .post-body td{padding:var(--space-xs)var(--space-sm);border-bottom:var(--rule-thin)solid var(--color-rule);text-align:left;vertical-align:top}.article-page .post-body th[style*=center],.article-page .post-body td[style*=center]{text-align:center}.article-page .post-body th[style*=right],.article-page .post-body td[style*=right]{text-align:right}.article-page .post-body thead th{font-size:var(--text-meta);font-weight:600;color:var(--color-muted)}.article-page .post-body tbody th{font-weight:600;color:var(--color-ink);white-space:nowrap}.article-page .post-body th:first-child,.article-page .post-body td:first-child{padding-left:0}@media(max-width:720px){.article-page .post-body table{display:block;max-width:100%;overflow-x:auto}}.article-page .code-figure{margin:1.6em 0;border:var(--rule-thin)solid var(--color-rule);border-radius:var(--radius-small);background:var(--color-code);overflow:hidden}.article-page .code-head{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2xs)var(--space-sm);min-height:40px;padding:var(--space-2xs)var(--space-xs)var(--space-2xs)var(--space-md);border-bottom:var(--rule-thin)solid var(--color-rule);font-family:var(--font-body);font-size:var(--text-meta);line-height:1.4;color:var(--color-muted);word-break:normal}.article-page .code-head:not(:has(.code-file,.code-lang,.code-source,.code-label,.code-copy:not([hidden]))){display:none}.article-page .code-file{font-family:var(--font-mono);color:var(--color-ink);overflow-wrap:anywhere}.article-page .code-head .code-source{display:inline-flex;align-items:center;min-height:32px;color:var(--color-muted);white-space:nowrap}.article-page .code-head .code-source:hover{color:var(--color-ink)}.article-page .code-actions{display:inline-flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:var(--space-2xs)var(--space-xs);max-width:100%;margin-left:auto}.article-page .code-status{font-size:var(--text-small);text-align:right;color:var(--color-muted)}.article-page .code-status:empty{display:none}.article-page .code-status[data-state=failed]{color:var(--color-error)}.article-page .code-copy{min-height:32px;padding:0 var(--space-sm);border:var(--rule-thin)solid var(--color-rule);border-radius:var(--radius-small);background:0 0;color:var(--color-body);font:inherit;font-size:var(--text-meta);font-weight:500;cursor:pointer;transition:opacity var(--dur-fast)var(--ease-out)}.article-page .code-copy:hover{color:var(--color-ink);border-color:var(--color-muted)}.article-page .code-copy:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}.article-page .code-copy[data-state=copied]{color:var(--color-accent);border-color:var(--color-accent)}.article-page .code-copy[data-state=failed]{color:var(--color-error);border-color:var(--color-error)}.article-page .code-copy[aria-busy=true]{opacity:.6}.article-page .code-pre{margin:0;padding:var(--space-sm)0;overflow-x:auto;background:0 0;font-family:var(--font-mono);font-size:calc(var(--text-body) * .875);line-height:1.7;font-variant-ligatures:none;tab-size:4;color:var(--color-body);word-break:normal;overflow-wrap:normal}.article-page .code-pre:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}.article-page .code-pre code{display:grid;width:max-content;min-width:100%;padding:0;background:0 0;font:inherit;color:inherit}.article-page .code-line{display:block;min-height:1.7em;padding:0 var(--space-md);white-space:pre}.article-page .code-line .cl{display:inline}.article-page .is-diff .code-line{padding-left:0}.article-page .code-sign{display:inline-block;width:2.25em;text-align:center;color:var(--color-muted)}.article-page .code-line.is-add{background:var(--color-add)}.article-page .code-line.is-del{background:var(--color-remove)}.article-page .is-add .code-sign{color:var(--color-code-string)}.article-page .is-del .code-sign{color:var(--color-error)}.article-page .code-note{display:block;padding:0 var(--space-md)var(--space-2xs);font-family:var(--font-body);font-size:var(--text-meta);line-height:1.5;color:var(--color-accent);white-space:normal}.article-page .is-diff .code-note{padding-left:calc(2.25em + 1px)}.article-page .diagram{--code-bg:var(--color-code);--del-fg:var(--color-error);--line:var(--color-rule);--link:var(--color-accent);--muted:var(--color-muted);--text:var(--color-ink);margin:2em 0 1.6em;padding:0;overflow-x:auto;border-radius:var(--radius-small)}.article-page .diagram:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}.article-page .diagram svg{display:block;width:100%;min-width:560px;height:auto;color:var(--color-ink);font-family:var(--font-body);font-size:14px}.article-page .diagram .box{fill:var(--color-code);stroke:var(--color-ink);stroke-width:1.5}.article-page .diagram .zone{fill:none;stroke:var(--color-muted);stroke-width:1;stroke-dasharray:5 4}.article-page .diagram .ln{fill:none;stroke:var(--color-ink);stroke-width:1.5}.article-page .diagram .acc{stroke:var(--color-accent)}.article-page .diagram .dash{stroke-dasharray:5 4}.article-page .diagram .cross{fill:none;stroke:var(--color-error);stroke-width:2}.article-page .diagram text{fill:var(--color-ink);stroke:none}.article-page .diagram text.muted{fill:var(--color-muted);font-size:12.5px}.article-page .diagram text.mono{font-family:var(--font-mono);font-size:12.5px}.article-page .diagram text.acc{fill:var(--color-accent)}.article-page .post-footer{margin-top:var(--space-2xl);padding-top:var(--space-lg);border-top:var(--rule-thin)solid var(--color-rule);font-size:var(--text-meta);color:var(--color-muted)}.article-page .post-tags{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin:0;padding:0;list-style:none}.article-page .post-tags a{display:inline-flex;align-items:center;min-height:36px;padding:0 var(--space-sm);border:var(--rule-thin)solid var(--color-rule);border-radius:999px;color:var(--color-body);transition:opacity var(--dur-fast)var(--ease-out)}.article-page .post-tags a:hover{color:var(--color-ink);border-color:var(--color-muted)}.article-page .post-source{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-2xs)var(--space-xs);margin:var(--space-md)0 0}.article-page .post-source a{color:var(--color-ink)}.article-page .post-source a:hover{border-bottom-color:var(--color-accent)}.article-page .post-footer>:first-child{margin-top:0}.article-page .post-back--end{display:flex;width:fit-content;margin-top:var(--space-lg)}@media(max-width:480px){.article-page .post-body{font-size:var(--text-body);line-height:1.8}.article-page .code-head{padding-left:var(--space-sm)}.article-page .code-line,.article-page .code-note{padding:0 var(--space-sm)}.article-page .is-diff .code-line{padding-left:0}}.article-page .article-toc{position:sticky;top:var(--space-lg);z-index:3;margin-bottom:var(--space-lg);font-size:var(--text-meta);line-height:1.6}.article-toc details{position:relative;border:var(--rule-thin)solid var(--color-rule);border-radius:var(--radius-small);background:var(--color-paper)}.article-toc summary{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);min-height:44px;padding:var(--space-xs)var(--space-sm);color:var(--color-ink);font-weight:600;list-style:none;cursor:pointer}.article-toc summary::-webkit-details-marker{display:none}.article-toc summary::after{content:'+';font-family:var(--font-mono)}.article-toc details[open]>summary::after{content:'−'}.article-toc .toc-links{position:absolute;top:100%;left:-1px;right:-1px;max-height:min(60vh,480px);overflow-y:auto;overscroll-behavior:contain;padding:var(--space-xs)var(--space-sm);border:var(--rule-thin)solid var(--color-rule);border-radius:0 0 var(--radius-small)var(--radius-small);background:var(--color-paper)}.article-toc ul{list-style:none;margin:0;padding:0}.article-toc ul ul{padding-left:var(--space-sm)}.article-toc a{display:flex;align-items:center;min-height:44px;padding-block:var(--space-2xs);border:0;color:var(--color-muted);word-break:keep-all;overflow-wrap:anywhere}.article-toc a:hover{color:var(--color-ink)}@media(min-width:1200px){.article-page .article-toc{position:absolute;top:0;bottom:0;left:calc(100% + 32px);width:min(216px,calc(50vw - 396px));margin:0}.article-toc details{position:sticky;top:var(--space-lg);border:0;border-left:var(--rule-thin)solid var(--color-rule);border-radius:0}.article-toc .toc-links{position:static;max-height:calc(100dvh - 104px);border:0;border-radius:0;padding-top:0}.article-toc a{min-height:32px}}@media(max-width:1199px){.article-page .post-body h2,.article-page .post-body h3{scroll-margin-top:var(--space-2xl)}}.contributions-page{overflow-wrap:anywhere}.contributions-page [hidden]{display:none!important}.contributions-page h2,.contributions-page h3,.contributions-page h4,.contributions-page p{margin:0}.contributions-page h2,.contributions-page h3,.contributions-page h4{font-family:var(--font-display);font-style:normal;min-width:0;overflow-wrap:anywhere}.contributions-page a{text-decoration:none;border-bottom:0}.contributions-page :is(a,summary,button,[role=tabpanel]):focus-visible{outline:2px solid var(--color-focus);outline-offset:4px;border-radius:var(--radius-small)}.contrib-tabs{display:flex;align-items:center;gap:var(--space-lg);border-bottom:var(--rule-thin)solid var(--color-rule);margin-bottom:var(--space-xs)}.contrib-tabs button{border:0;border-bottom:2px solid var(--color-transparent);margin-bottom:-1px;background:var(--color-transparent);color:var(--color-muted);padding:var(--space-xs)0;min-height:44px;font:600 var(--text-body)/1.5 var(--font-body);white-space:nowrap;cursor:pointer}.contrib-tabs button[aria-selected=true]{border-bottom-color:var(--color-ink);color:var(--color-ink)}@media(hover:hover){.contrib-tabs button:hover,.contributions-page summary:hover{color:var(--color-ink)}.contributions-page a:hover{text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:1px}}.contributions-page .tab-panel{min-width:0}.contributions-page .contrib-panel-title{padding-block:var(--space-sm)var(--space-xs);border-bottom:var(--rule-thin)solid var(--color-rule);font-size:var(--text-lead);font-weight:650;color:var(--color-ink)}.contributions-page .tab-panel+.tab-panel .contrib-panel-title{margin-top:var(--space-xl)}.contributions-page .contribution{padding-block:var(--space-sm);border-bottom:var(--rule-thin)solid var(--color-rule)}.contributions-page .record-meta{display:flex;align-items:center;gap:var(--space-sm);font-size:var(--text-small)}.contributions-page .project{font-family:var(--font-mono);color:var(--color-muted);font-size:var(--text-small)}.contributions-page .status{color:var(--color-muted);display:inline-flex;align-items:center;gap:5px}.contributions-page .status::before{content:'';width:5px;height:5px;background:var(--color-accent);border-radius:50%}.contributions-page .contribution h3{margin-top:var(--space-2xs);font-size:var(--text-lead);font-weight:650;letter-spacing:-.01em;line-height:1.4;color:var(--color-ink)}.contributions-page .contribution>p{color:var(--color-body);margin-top:var(--space-2xs);line-height:1.65}.contributions-page .record-links{display:inline-flex;vertical-align:top;align-items:center;flex-wrap:wrap;column-gap:var(--space-md);margin:var(--space-2xs)var(--space-lg)0 0;max-width:100%}.contributions-page .record-links a{display:inline-flex;align-items:center;min-height:44px;font-size:var(--text-meta);white-space:nowrap;color:var(--color-ink)}.contributions-page .record-links .source{color:var(--color-muted);font-family:var(--font-mono);font-size:var(--text-small)}.contributions-page .external-arrow{display:inline-block;flex:none;font-family:var(--font-body);font-size:.5em;line-height:1;margin-inline-start:var(--space-2xs)}.contributions-page .contribution details{display:inline-block;vertical-align:top;margin-top:var(--space-2xs)}.contributions-page .contribution details[open]{display:block}.contributions-page summary{display:flex;align-items:center;gap:var(--space-xs);min-height:44px;width:fit-content;cursor:pointer;list-style:none;font-size:var(--text-meta);font-weight:600;color:var(--color-body)}.contributions-page summary::-webkit-details-marker{display:none}.contributions-page summary::before{content:'+';width:14px;font:15px var(--font-mono);color:var(--color-muted)}.contributions-page details[open] summary::before{content:'−'}.contributions-page .detail{padding:var(--space-xs)0 var(--space-xs)var(--space-md);border-left:var(--rule-thin)solid var(--color-rule);color:var(--color-body);font-size:var(--text-meta);line-height:1.65}.contributions-page .detail p+p{margin-top:var(--space-sm)}.contributions-page .detail strong{color:var(--color-ink);font-weight:600}.contributions-page .detail a{display:inline-flex;align-items:center;min-height:44px;color:var(--color-ink)}.contributions-page .project-group{padding-block:var(--space-2xs);border-bottom:var(--rule-thin)solid var(--color-rule)}.contributions-page .contribution:last-child,.contributions-page .project-group:last-child{border-bottom:0}.contributions-page .project-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.contributions-page .project-heading h3{font-size:var(--text-body);font-weight:600;line-height:1.5;letter-spacing:0}.contributions-page .project-heading h3 a{display:inline-flex;align-items:center;min-height:44px;color:var(--color-ink);white-space:nowrap}.contributions-page .project-toggle{display:inline-flex;flex:none;align-items:center;justify-content:flex-end;gap:var(--space-sm);min-height:44px;min-width:44px;padding:0;border:0;background:var(--color-transparent);color:var(--color-muted);font:500 var(--text-small)/1.5 var(--font-body);cursor:pointer}.contributions-page .project-toggle[aria-expanded=true]{color:var(--color-ink)}.contributions-page .project-toggle .toggle-sign{font:15px/1 var(--font-mono)}.contributions-page .project-count{flex:none;color:var(--color-muted);font:500 var(--text-small)/1.5 var(--font-body)}.contributions-page .project-body{padding-bottom:var(--space-sm)}.contributions-page .pr-list{list-style:none;margin:0;padding:0}.contributions-page .pr-entry{padding-block:var(--space-xs);border-top:var(--rule-thin)solid var(--color-rule)}.contributions-page .pr-entry h4{font-family:var(--font-body);font-size:var(--text-body);font-weight:500;line-height:1.55}.contributions-page .pr-entry h4 a{display:block;min-height:44px;align-content:center;color:var(--color-ink)}.contributions-page .pr-id{margin-right:var(--space-xs);font:var(--text-small)/1.5 var(--font-mono);color:var(--color-muted);white-space:nowrap}.contributions-page .pr-caption{color:var(--color-muted);font-size:var(--text-meta);line-height:1.6}.contributions-page .adoption-note{font-size:var(--text-meta);color:var(--color-muted)}.contributions-page .adoption-note a{display:inline-flex;align-items:center;min-height:44px;white-space:nowrap;color:var(--color-ink)}@media(min-width:801px) and (pointer:fine){.contributions-page :is(.record-links a,summary,.project-heading h3 a,.project-toggle,.pr-entry h4 a,.adoption-note a,.detail a){min-height:32px}}@media(max-width:520px){.contrib-tabs{gap:var(--space-md)}.contrib-tabs button{font-size:var(--text-meta)}}.chroma{color:var(--color-body);background:0 0}.chroma .err{color:var(--color-error)}.chroma .lnt,.chroma .ln{color:var(--color-muted);user-select:none}.chroma .hl{background:var(--color-tint)}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .kc,.chroma .ow{color:var(--color-code-keyword)}.chroma .kt{color:var(--color-code-type)}.chroma .nc,.chroma .ne,.chroma .nn,.chroma .nt,.chroma .nd,.chroma .nb,.chroma .bp,.chroma .no{color:var(--color-code-type)}.chroma .nf,.chroma .fm,.chroma .na,.chroma .py{color:var(--color-ink)}.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm,.chroma .nl,.chroma .ni{color:var(--color-ink)}.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .sr,.chroma .s1,.chroma .ss,.chroma .l,.chroma .ld{color:var(--color-code-string)}.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{color:var(--color-code-type)}.chroma .p{color:var(--color-muted)}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{color:var(--color-muted);font-style:italic}.chroma .gd{color:var(--color-error);background:var(--color-remove)}.chroma .gi{color:var(--color-code-string);background:var(--color-add)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}.chroma .gh,.chroma .gu{color:var(--color-code-type)}.chroma .gp,.chroma .go{color:var(--color-muted)}.chroma .gr,.chroma .gt{color:var(--color-error)}.chroma .gl{text-decoration:underline}