*,*::before,*::after{box-sizing:border-box}body{margin:0;padding:0}:root{--font-mono:'Commit Mono', 'Commit Mono Fallback', ui-monospace, monospace;--fs-xs:0.8125rem;--fs-sm:0.9375rem;--fs-base:1.1875rem;--fs-h3:1.25rem;--fs-h2:1.5rem;--fs-h1:2rem;--measure:43.75rem;--wide:52rem;--rail:20rem;--header-offset:4.5rem}html{font-size:clamp(1rem,.805rem + .305vw,1.1667rem)}@media(min-width:1891px){html{font-size:clamp(1.1667rem,.9324rem + .1985vw,1.25rem)}}@media(max-width:600px){:root{--fs-base:1.0625rem;--fs-h1:1.625rem;--fs-h2:1.3125rem;--fs-h3:1.125rem;--header-offset:1rem}}@font-face{font-family:commit mono;src:url(/fonts/CommitMono-Regular.woff2)format('woff2');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:commit mono;src:url(/fonts/CommitMono-Bold.woff2)format('woff2');font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:commit mono;src:url(/fonts/CommitMono-Italic.woff2)format('woff2');font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:commit mono fallback;src:local('Courier New'),local('Liberation Mono');size-adjust:99.98%;ascent-override:90.01%;descent-override:20%;line-gap-override:0%}@font-face{font-family:barlow;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/Barlow-400.woff2)format('woff2');unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:barlow;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/Barlow-400-ext.woff2)format('woff2');unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:barlow;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/Barlow-500.woff2)format('woff2');unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:barlow;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/Barlow-500-ext.woff2)format('woff2');unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:barlow;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/Barlow-600.woff2)format('woff2');unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:barlow;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/Barlow-600-ext.woff2)format('woff2');unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:barlow;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/Barlow-400-italic.woff2)format('woff2');unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:barlow;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/Barlow-400-italic-ext.woff2)format('woff2');unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:barlow fallback;src:local('Arial'),local('Liberation Sans'),local('Helvetica Neue');size-adjust:88.51%;ascent-override:112.98%;descent-override:22.6%;line-gap-override:0%}.dark{--bg:#111114;--bg-secondary:#18181c;--fg:#d4d4d7;--fg-heading:#e9a447;--fg-muted:#a7adb4;--fg-faint:#4f4f57;--border:#2d2d33;--code-bg:#1d1d22;--code-chip-bg:#1e1820;--code-chip-fg:#eb93e0;--code-border:#39393e;--link:#78d8bd;--link-hover:#b0f2df;--accent:#e787db;--accent-dim:#884477;--toc-active:var(--fg-heading);--tag-color:var(--accent);--date-color:#9db6c2;--danger:#ff8a8a}.light{--bg:#fdf6e3;--bg-secondary:#eee8d5;--fg:#332c28;--fg-heading:#964700;--fg-muted:#546873;--fg-faint:#978e7c;--border:#c1b79c;--code-bg:#f1e6cd;--code-chip-bg:#f7eade;--code-chip-fg:#993388;--code-border:#b5a684;--link:#196e50;--link-hover:#0e4a35;--accent:#993388;--accent-dim:#bb77aa;--toc-active:var(--fg-heading);--tag-color:var(--accent);--date-color:#476676;--danger:#b02a2a}.dark{color-scheme:dark}.light{color-scheme:light}body{font-family:barlow,barlow fallback,-apple-system,segoe ui,sans-serif;font-size:var(--fs-base);line-height:1.6;color:var(--fg);background:var(--bg)}h1,h2,h3,h4,h5,h6{font-family:barlow,barlow fallback,-apple-system,segoe ui,sans-serif;font-weight:600;color:var(--fg-heading);letter-spacing:-.005em;margin-top:2em;margin-bottom:.6em;line-height:1.3}h1{font-size:var(--fs-h1)}h2{font-size:var(--fs-h2);border-bottom:1px solid var(--border);padding-bottom:.3em}h3{font-size:var(--fs-h3)}h4,h5,h6{font-size:var(--fs-base)}.heading-anchor{margin-left:.4em;color:var(--fg-muted);font-weight:400;text-decoration:none;opacity:0}:is(h2,h3,h4):hover>.heading-anchor,.heading-anchor:focus-visible{opacity:1}@media(hover:none){.heading-anchor{opacity:1}}.post-content .heading-anchor{text-decoration:none}a{color:var(--link);text-decoration:none}a:hover{color:var(--link-hover);text-decoration:underline}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--link);outline-offset:2px}.post-content a,.home-intro p a,.home-topics a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.18em;text-decoration-color:color-mix(in srgb,var(--link) 45%,transparent)}.post-content a:hover,.home-intro p a:hover,.home-topics a:hover{text-decoration-color:initial}.post-content .toc a{text-decoration:none}hr{border:none;border-top:1px solid var(--border);margin:2em 0}strong{font-weight:600}p{margin:0 0 1.75em}.post-content blockquote{margin:1.5em 0;padding:.1em 0 .1em 1.1em;border-left:3px solid var(--border);color:var(--fg-muted)}.post-content blockquote p:last-child{margin-bottom:0}.post-content :is(p,li,blockquote,dd,h1,h2,h3,h4,.tldr,.callout){overflow-wrap:break-word}.post-content :is(p,li,blockquote,dd,h1,h2,h3,h4,.tldr,.callout) :is(code,a,strong){overflow-wrap:anywhere}html{overflow-y:scroll;scrollbar-gutter:stable;scroll-padding-top:var(--header-offset)}html:focus-within{scroll-behavior:smooth}@media(prefers-reduced-motion:reduce){html:focus-within{scroll-behavior:auto}}.container{max-width:max(76rem,min(85rem,66.4vw));margin:0 auto;padding:0 2rem}.site-header{padding:.6rem 0;border-bottom:1px solid var(--fg-faint);margin-bottom:1.5rem;position:sticky;top:0;z-index:100;background:var(--bg)}.site-header-top{display:flex;align-items:center;gap:1.5rem}.site-header-top .site-title{margin-right:auto}.site-title{font-family:var(--font-mono);font-size:var(--fs-h2);color:var(--fg-heading);text-decoration:none;font-weight:700;margin-left:.5rem}.site-title:hover{text-decoration:none;color:var(--link)}.site-logo{vertical-align:-.15em;margin-right:.3em;transition:transform .3s ease}.site-logo .logo-a,.site-logo .logo-b{transition:stroke .3s ease,fill .3s ease}.site-title:hover .site-logo{transform:rotate(45deg)}.site-title:hover .logo-a{stroke:var(--link)}.site-title:hover .logo-b{stroke:var(--accent)}.site-title:hover circle.logo-b{fill:var(--accent)}.site-nav{display:flex;flex-wrap:wrap;align-items:center;gap:.3rem 1.2rem;font-family:var(--font-mono);font-size:var(--fs-sm)}.site-nav a{color:var(--fg-muted)}.site-nav a:hover{color:var(--fg-heading);text-decoration:none}.site-nav a.active{color:var(--fg-heading)}.theme-toggle{background:0 0;border:none;color:var(--fg-muted);cursor:pointer;padding:.2em;line-height:0;display:inline-flex;align-items:center}.theme-toggle:hover{color:var(--fg-heading)}.theme-toggle svg{display:none}.dark .theme-toggle .icon-sun{display:block}.light .theme-toggle .icon-moon{display:block}.search-link{color:var(--fg-muted);line-height:0;display:inline-flex;align-items:center;padding:6px;margin:calc(.2em - 6px)}.search-link:hover,.search-link[aria-current=page]{color:var(--fg-heading);text-decoration:none}.nav-menu{display:none}.nav-menu summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:.4em;min-height:44px;padding:0 .6rem;font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--fg-muted);border:1px solid var(--border);border-radius:4px}.nav-menu summary::-webkit-details-marker{display:none}.nav-menu summary:hover,.nav-menu[open] summary{color:var(--fg-heading)}.site-nav-phone{position:absolute;left:0;right:0;top:100%;z-index:100;flex-direction:column;align-items:stretch;gap:0;padding:.25rem 1.2rem .6rem;background:var(--bg);border-bottom:1px solid var(--fg-faint)}.post-list{list-style:none;padding:0;margin:0}.post-list li{display:flex;align-items:baseline;gap:1em;padding:.5em 0;height:4.2em;box-sizing:border-box;overflow-x:clip;overflow-y:visible}.post-info{flex:1;min-width:0}.post-meta-line{display:flex;align-items:center;gap:.6em;margin-top:.2em;overflow-x:clip;overflow-y:visible}.post-date{font-family:var(--font-mono);color:var(--date-color);white-space:nowrap;flex-shrink:0;font-size:var(--fs-sm)}.post-link{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:1em;color:var(--fg);font-weight:500;-webkit-text-stroke:.4px color-mix(in srgb,var(--link) 50%,transparent)}.post-link:hover{color:var(--fg-heading);-webkit-text-stroke:.4px var(--fg-heading)}.post-tags{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--fg-muted);white-space:nowrap;overflow-x:clip;overflow-y:visible;text-overflow:ellipsis;min-width:0}.post-tags a{color:var(--fg-muted)}.post-tags a:hover{color:var(--link)}.series-badge{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--fg-muted);border:1px solid var(--border);background:var(--bg-secondary);border-radius:3px;padding:.15em .45em;white-space:nowrap;text-decoration:none;letter-spacing:.02em}.series-badge:hover{color:var(--link);border-color:var(--link);text-decoration:none}.post-list li.post-row{height:auto;padding:.5em 0}.post-row .post-link{line-height:1.4;font-size:1.1em}.post-summary{margin:.1em 0 0;font-size:.95em;line-height:1.45;color:var(--fg-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.post-row .post-meta-line{margin-top:.2em;line-height:1.6;min-height:1.6em}.post-rt{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--fg-muted);white-space:nowrap}@media(min-width:769px){.post-list li.post-row{height:5.85em}}@media(max-width:768px){.post-summary{white-space:normal;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2}}.post-header{margin-bottom:2rem}.post-header h1{margin-top:0;font-size:var(--fs-h1);line-height:1.2}.post-meta{font-family:var(--font-mono);color:var(--fg-muted);font-size:var(--fs-sm)}.series-box{margin-top:1.1rem;max-width:var(--measure);padding:.7rem .9rem .55rem;background:var(--bg-secondary);border:1px solid var(--border);border-left:3px solid var(--fg-heading);border-radius:4px;font-family:var(--font-mono);font-size:var(--fs-sm);line-height:1.5}.series-box-head{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:.8em;row-gap:.2em}.series-box-name{color:var(--fg);font-weight:700;text-decoration:none}.series-box-name:hover{color:var(--link);text-decoration:underline;text-underline-offset:.2em}.series-box-pos{color:var(--fg-muted);white-space:nowrap}.series-box-strip{display:flex;gap:3px;list-style:none;margin:.55rem 0 .35rem;padding:0;max-width:16rem}.series-box-strip{align-items:center;height:6px}.series-box-strip li{flex:1;height:2px;border-radius:1px;background:var(--fg-muted);margin:0}.series-box-strip li.is-current{height:6px;border-radius:2px;background:var(--fg-heading)}.series-box-top{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;column-gap:1.2em}.series-box-parts>summary{cursor:pointer;color:var(--link);padding-block:.35em;width:fit-content}.series-box-parts>summary:hover{color:var(--link-hover)}.series-box-parts ol{margin:.2rem 0 .4rem;padding-left:2.2em;font-family:barlow,barlow fallback,sans-serif;font-size:var(--fs-base)}.series-box-parts li{margin:.15em 0;padding-left:.2em}.series-box-parts li::marker{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--fg-muted)}.series-box-parts a{color:var(--link)}.series-box-parts a:hover{color:var(--link-hover)}.series-box-parts [aria-current]{color:var(--fg-heading);font-weight:600}.series-box-step{display:flex;gap:1.1em;white-space:nowrap}.series-box-step a{color:var(--link);text-decoration:none;padding-block:.35em}.series-box-step a:hover{color:var(--link-hover);text-decoration:underline;text-underline-offset:.2em}.series-box-step:empty{display:none}.post-content>.filed-under{margin:2.5rem 0 1.5rem;padding-top:.8rem;border-top:1px solid var(--border);font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--fg-muted)}.filed-under a{color:var(--fg-muted);text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:.2em}.filed-under a:hover{color:var(--link)}.post-meta a{color:var(--fg-muted);text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:.2em}.post-meta a:hover{color:var(--link)}.post-wrapper{display:flex;gap:4rem;justify-content:center;margin:0 auto}.post-content{flex:1;min-width:0;max-width:var(--wide)}.post-content>*,.g-sec>*{max-width:var(--measure)}.post-content>:is(ul.post-list,.table-wrap,pre,.highlight,.code-wrap,.svg-figure),.g-sec>:is(.table-wrap,pre,.highlight,.code-wrap,.svg-figure){max-width:100%}.post-content>.g-sec{max-width:none}@media(min-width:1001px){.post-content{max-width:none}.post-wrapper:not(:has(>aside.toc)){justify-content:flex-start}.post-wrapper:not(:has(>aside.toc))>.post-content{max-width:100%}.post-wrapper.is-post:not(:has(>aside.toc))>.post-content{max-width:calc(100% - var(--rail))}main>:not(article,.post){max-width:none;margin-left:0;margin-right:0}}@media(max-width:1000px){main>:not(article,.post){max-width:var(--wide);margin-left:auto;margin-right:auto}}.post-content img{max-width:100%;height:auto;border-radius:4px}.post-content img.img-dark{display:none}.dark .post-content img.img-dark{display:inline}.dark .post-content img.img-light{display:none}.post-content>.post-header{max-width:none}.post-header>:not(h1){max-width:var(--measure)}.post-header h1{text-wrap:balance}.toc{width:16rem;flex-shrink:0;position:sticky;top:4rem;align-self:flex-start;font-family:var(--font-mono);font-size:.75rem;max-height:calc(100vh - 6rem);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--border)transparent}.toc nav>ul{list-style:none;padding:0;margin:0}.toc-heading{font-family:var(--font-mono);font-size:.75rem;color:var(--fg-muted);margin:0 0 .6em;padding-left:0}.toc li{padding:0 0 0 1.2em;line-height:1.45}.toc a{padding-block:.28em}.toc ul ul{list-style:none;padding:0;margin:.3em 0 0}.toc ul ul li{padding-bottom:0}.toc a{color:var(--fg-muted);position:relative;display:block}.toc a::before{content:"›"/"";position:absolute;left:-1.2em;color:var(--fg-faint)}.toc ul ul a::before{content:"·"/""}.toc a.active::before{content:"▸"/"";color:var(--toc-active)}.toc a:hover{color:var(--fg);text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:.2em}.toc a.active{color:var(--toc-active)}.toc-mobile{display:none}.toc-mobile details{border:1px solid var(--border);border-radius:4px;padding:.4em .8em}.toc-mobile summary{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--fg-muted);cursor:pointer;user-select:none}.toc-mobile summary:hover{color:var(--fg)}.toc-mobile details[open] summary{margin-bottom:.5em}.toc-mobile .toc{width:auto;position:static;max-height:60vh;font-size:var(--fs-sm)}.toc code{background:0 0;border:0;padding:0;color:inherit;font-size:1em}pre{font-family:var(--font-mono);font-feature-settings:'cv07' 1;background:var(--code-bg);border:1px solid var(--code-border);border-left:3px solid var(--accent-dim);padding:1.2em .8em 1.2em 1.1em;overflow-x:auto;font-size:var(--fs-sm);line-height:1.55;position:relative;border-radius:4px;margin:1.5em 0}code{font-family:var(--font-mono);font-feature-settings:'cv07' 1;font-size:.85em}:not(pre)>code{background:var(--code-chip-bg);font-size:.8em;padding:.08em .18em;color:var(--code-chip-fg);border-radius:3px}a code{color:inherit}.table-wrap{width:100%;max-width:100%;display:flex;flex-wrap:wrap;overflow-x:auto;margin:1.5em 0}.table-wrap::after{content:"";flex:0 0 max(0px,calc(100% - var(--measure)))}.post-content .table-wrap>table{margin:0;width:auto;flex:auto}.post-content table{width:100%;border-collapse:collapse;margin:1.5em 0;font-size:var(--fs-sm);line-height:1.5;font-variant-numeric:tabular-nums}.post-content th,.post-content td{padding:.5em .75em;text-align:left;border:0;border-bottom:1px solid var(--border)}.post-content thead th{background:var(--bg-secondary);color:var(--fg-heading);font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:700;letter-spacing:.01em;border-bottom:2px solid var(--fg-faint);vertical-align:bottom}.post-content thead th.sortable{cursor:pointer;user-select:none}.post-content thead th.sortable:hover{color:var(--link)}.post-content thead th.sortable::after{content:' ⇅';font-size:.85em;color:var(--fg-muted);opacity:0}.post-content thead th.sortable:is(:hover,:focus-within)::after{opacity:1}.post-content thead th.sort-asc::after{content:' ↑';color:var(--fg-heading);opacity:1}.post-content thead th.sort-desc::after{content:' ↓';color:var(--fg-heading);opacity:1}.post-content tbody tr:nth-child(even){background:var(--bg-secondary)}.post-content tbody tr:hover{background:var(--code-bg)}pre.mermaid{background:0 0;border:none;border-left:none;text-align:left;padding:1em 0;overflow-x:auto}pre.mermaid>svg{display:block}#back-to-top{display:none;position:fixed;bottom:2em;right:2em;background:var(--bg-secondary);color:var(--fg-muted);border:1px solid var(--border);border-radius:50%;width:2.5em;height:2.5em;font-size:1em;cursor:pointer;line-height:1;z-index:10}#back-to-top:hover,#back-to-top:focus-visible{color:var(--link);border-color:var(--link)}.code-wrap{position:relative}.post-content>.highlight:has(+.console-out),.g-sec>.highlight:has(+.console-out){max-width:100%}.highlight:has(+.console-out) pre{margin-bottom:0;border-bottom-style:dashed;border-radius:4px 4px 0 0}.console-out{background:var(--code-bg);border:1px solid var(--code-border);border-left:3px solid var(--accent-dim);border-radius:4px}.highlight+.console-out{margin-top:0;border-top:0;border-radius:0 0 4px 4px}.post-content .console-out thead th{background:0 0;font-size:.75rem;vertical-align:top}.post-content .console-out :is(th,td){padding-inline:.35em}.post-content .console-out :is(th,td):first-child{padding-left:.75em}.post-content .console-out :is(th,td):last-child{padding-right:.75em}.post-content .console-out td{font-family:var(--font-mono);font-feature-settings:'cv07' 1;font-size:var(--fs-xs);white-space:nowrap;padding-block:.35em}.post-content .console-out tbody tr:last-child td{border-bottom:0}.post-content>:is(.highlight,.code-wrap).code-narrow,.g-sec>:is(.highlight,.code-wrap).code-narrow{max-width:min(var(--measure),100%)}.code-wrap>pre{--copy-gutter:2.2rem;border-right:var(--copy-gutter)solid var(--code-bg);box-shadow:1px 0 0 var(--code-border)}.copy-btn{position:absolute;top:.45rem;right:.25rem;background:var(--bg-secondary);border:1px solid var(--border);color:var(--fg-muted);cursor:pointer;font-size:.85em;padding:.25em .4em;line-height:1;border-radius:3px;opacity:.55;transition:opacity .15s}.code-wrap:hover .copy-btn,.copy-btn:focus-visible{opacity:1}.copy-btn:hover{color:var(--fg);background:var(--code-bg)}.post-nav{display:flex;justify-content:space-between;border-top:1px solid var(--border);padding-top:1.2em;margin-top:2em;font-size:var(--fs-sm);color:var(--fg-muted);gap:1.5em}.post-nav>span{flex:1;min-width:0;overflow-wrap:anywhere}.post-nav>span:last-child{text-align:right}@media(max-width:600px){.post-nav{flex-direction:column;gap:.8em}.post-nav>span:last-child{text-align:left}}.post-nav a{color:var(--link)}.post-nav a:hover{color:var(--link-hover)}.archive-link{font-family:var(--font-mono);font-size:var(--fs-sm);margin:2rem 0 0}.archive-link a{color:var(--fg-muted)}main>h1,.home-intro h1{margin-top:.5rem;font-size:var(--fs-h1)}.home-intro{margin-bottom:2rem}.home-intro p{max-width:var(--measure)}.home-topics ul{list-style:none;padding:0;margin:1rem 0 0;display:flex;flex-wrap:wrap;gap:.4rem 1.6rem;font-size:var(--fs-sm)}.home-topics li{margin:0}.home-topic{font-family:var(--font-mono);color:var(--fg-heading);margin-right:.3em}.home-topics .tag-count,.tag-cloud .tag-count{color:var(--fg-muted);font-family:var(--font-mono);font-size:var(--fs-xs)}.tag-cloud-more{margin:1rem 0 0}.tag-cloud-more summary{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--fg-muted);cursor:pointer}.tag-cloud-more summary:hover{color:var(--fg-heading)}.archive-link a:hover{color:var(--fg-heading);text-decoration:none}.pagination{list-style:none;display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:.25em;margin:3em 0 0;padding:0;font-family:var(--font-mono);font-size:var(--fs-sm)}.pagination .page-link{display:block;padding:.4em .45em;color:var(--fg-muted);border:1px solid transparent;border-radius:4px;line-height:1;transition:color .15s ease,background .15s ease}.pagination .page-link:not(.page-step),.pagination .page-ellipsis{min-width:2.4em;text-align:center;box-sizing:border-box}.pagination .page-step{padding:.4em .7em}a.page-link:hover{color:var(--fg-heading);background:var(--bg-secondary);text-decoration:none}.pagination .page-link.active{color:var(--fg-heading);background:var(--bg-secondary);border-color:var(--border);font-weight:700}.pagination .page-link.disabled{color:var(--fg-muted);text-decoration:line-through;text-decoration-color:var(--fg-faint);cursor:default}.pagination .page-ellipsis{padding:.4em .3em;color:var(--fg-muted);user-select:none}.post-content h2[id=sources]+ul{list-style:none;padding:0;margin:1.2em 0 0;font-size:var(--fs-sm);line-height:1.55;color:var(--fg-muted);columns:2;column-gap:2.5rem}.post-content h2[id=sources]+ul li{break-inside:avoid;margin:0 0 .7em;padding-left:1.1em;text-indent:-1.1em}.post-content h2[id=sources]+ul li::before{content:"›";color:var(--fg-faint);margin-right:.5em}.post-content h2[id=sources]+ul a{color:var(--link)}@media(max-width:700px){.post-content h2[id=sources]+ul{columns:1}}.post-content h2[id=read-next]+ul{list-style:none;padding:0;margin:1em 0 2em;border:1px solid var(--border);border-radius:4px}.post-content h2[id=read-next]+ul li{padding:.6em .9em;border-bottom:1px solid var(--border)}.post-content h2[id=read-next]+ul li:last-child{border-bottom:0}.post-content h2[id=read-next]+ul li>a:first-child{font-weight:500}.site-footer{border-top:1px solid var(--border);padding:1.2rem 0;margin-top:2rem;font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--fg-muted);text-align:center}.site-footer a{color:var(--fg-muted)}.site-footer a:hover{color:var(--fg-heading)}@media(max-width:1000px){.toc-mobile{display:block;margin-bottom:1.5rem}aside.toc{display:none}.post-wrapper{gap:0}}@media(max-width:768px){.post-list li{flex-wrap:wrap;height:auto;overflow:visible}.post-link,.post-tags{white-space:normal;overflow:visible}.post-meta-line{flex-wrap:wrap;overflow:visible}.container{padding:0 1.2rem}}@media(max-width:600px){pre{padding:.9em .8em}.post-list li{flex-direction:column;gap:.1em}}@media(max-width:600px),(max-height:500px){.site-header{position:static}}@media(max-width:600px){.site-header{position:relative;padding:.3rem 0}.site-header-top{gap:.5rem}.site-nav-wide{display:none}.nav-menu{display:block}.site-header .search-link,.site-header .theme-toggle{padding:12px;margin:-2px}.site-nav.site-nav-phone a{padding:.7rem 0;margin:0;min-height:44px}}@media(max-width:600px){.svg-figure[style]{overflow-x:auto}.svg-figure[style] svg{min-width:var(--svg-min)}}.tldr{position:relative;background:var(--code-bg);color:var(--fg);border:2px solid var(--link);border-radius:6px;padding:1.45em 1.15em 1em;margin:1.5em 0 2.25em;font-size:1em;line-height:1.6}@media(max-width:600px){.tldr{padding:1.3em .9em .9em}}.tldr-label{position:absolute;top:0;left:14px;transform:translateY(-50%);background:var(--bg);padding:0 .5em;font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.12em;text-transform:uppercase;color:var(--link)}.tldr::after{content:"";position:absolute;left:30px;bottom:-8px;width:14px;height:14px;transform:rotate(45deg);background:var(--code-bg);border-right:2px solid var(--link);border-bottom:2px solid var(--link)}.tldr p{margin:0}.tldr p+p{margin-top:.8em}.tldr code{background:0 0;padding:0;color:var(--accent)}.callout{--callout:var(--link);margin:1.75em 0;padding:.75em 1.1em .85em;border-left:3px solid var(--callout);border-radius:0 4px 4px 0;background:color-mix(in oklab,var(--callout) 7%,var(--bg));color:var(--fg)}.callout-warning{--callout:var(--danger)}.callout-gotcha{--callout:var(--fg-heading)}.callout-fieldnote{--callout:var(--date-color)}.callout-label{display:flex;flex-wrap:wrap;align-items:baseline;gap:.2em .8em;margin:0 0 .4em;font-family:var(--font-mono);font-size:var(--fs-xs);line-height:1.5}.callout-kind{color:var(--callout);font-weight:700;letter-spacing:.1em;text-transform:uppercase}.callout-title{color:var(--fg-muted)}.callout-title code{background:0 0;padding:0;color:inherit;font-size:1em}.callout>p:last-child,.callout>:is(ul,ol):last-child{margin-bottom:0}.callout :is(ul,ol){padding-left:1.2em}.callout :is(.highlight,.code-wrap,pre){margin-bottom:.9em}@media(max-width:600px){.callout{padding:.7em .85em .8em}}.guide-kind{margin:0 0 .35rem;font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.12em;text-transform:uppercase}.guide-kind a{color:var(--accent);text-decoration:none}.guide-kind a:hover{text-decoration:underline;text-underline-offset:.2em}.guide-scope{margin:0 0 2.25em;padding:.6em 1.1em;background:var(--bg-secondary);border:1px solid var(--border);border-left:3px solid var(--link);border-radius:0 4px 4px 0}.guide-scope-row{display:grid;grid-template-columns:7.5rem 1fr;gap:0 1rem;padding:.45em 0}.guide-scope-row+.guide-scope-row{border-top:1px solid var(--border)}.guide-scope dt{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--fg-muted);padding-top:.3em}.guide-scope dd{margin:0;line-height:1.55}.guide-scope-row.is-gap dt{color:var(--danger)}@media(max-width:600px){.guide-scope{padding:.5em .85em}.guide-scope-row{grid-template-columns:1fr}.guide-scope dt{padding-top:0}}.g-sec-steps>ol{list-style:none;counter-reset:step;padding-left:0}.g-sec-steps>ol>li{counter-increment:step;position:relative;padding:0 0 .4em 3rem;margin:0 0 1.4em}.g-sec-steps>ol>li::before{content:counter(step);position:absolute;left:0;top:-.1em;width:2rem;height:2rem;box-sizing:border-box;border:2px solid var(--fg-heading);border-radius:50%;background:var(--bg);color:var(--fg-heading);font:700 var(--fs-sm)/1.75rem var(--font-mono);text-align:center}.g-sec-steps>ol>li::after{content:"";position:absolute;left:calc(1rem - 1px);top:2.15rem;bottom:-1.3em;width:2px;background:var(--border)}.g-sec-steps>ol>li:last-child::after{display:none}.g-sec>ol:is(.g-sec-steps>ol){max-width:100%}.g-sec-steps>ol>li>*{max-width:calc(var(--measure) - 3rem)}.g-sec-steps>ol>li>:is(.highlight,.code-wrap,pre,.table-wrap,.svg-figure){max-width:100%}.g-sec-steps>ol>li>:is(.highlight,.code-wrap).code-narrow{max-width:min(calc(var(--measure) - 3rem),100%)}@media(max-width:600px){.g-sec-steps>ol>li{padding-left:2.4rem}.g-sec-steps>ol>li::before{width:1.75rem;height:1.75rem;line-height:1.5rem}.g-sec-steps>ol>li::after{left:calc(.875rem - 1px);top:1.9rem}}.g-sec-field-notes>ul{list-style:none;padding-left:0;margin-left:.35rem;border-left:2px solid var(--border)}.g-sec-field-notes>ul>li{position:relative;padding-left:1.3rem;margin-bottom:1.3em}.g-sec-field-notes>ul>li::before{content:"";position:absolute;left:calc(-.35rem - 1px);top:.5em;width:.7rem;height:.7rem;box-sizing:border-box;border-radius:50%;border:2px solid var(--date-color);background:var(--bg)}.g-sec-field-notes>ul>li>strong:first-child,.g-sec-field-notes>ul>li>p:first-child>strong:first-child{display:block;margin-bottom:.2em;font-family:var(--font-mono);font-size:var(--fs-sm);font-weight:400;color:var(--date-color)}.post-content>.g-sec-undo--rollback{max-width:var(--measure);margin:2.5em 0;padding:.2em 1.1em .6em;background:color-mix(in oklab,var(--link) 6%,var(--bg));border-left:3px solid var(--link);border-radius:0 4px 4px 0}.g-sec-undo--rollback>h2{margin-top:.8em}.g-sec-undo--rollback>:last-child{margin-bottom:.4em}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.skip-link{position:absolute;left:.5rem;top:-10rem;z-index:200;padding:.5em .9em;background:var(--bg);color:var(--link);border:2px solid var(--link);border-radius:3px;font-family:commit mono,ui-monospace,monospace;font-size:.9em}.skip-link:focus{top:.5rem}#main:focus{outline:none}pre:focus-visible,.table-wrap:focus-visible,[role=region]:focus-visible{outline:2px solid var(--link);outline-offset:2px}.copy-btn{opacity:1;min-width:1.7rem;min-height:1.7rem;display:inline-flex;align-items:center;justify-content:center}@media(pointer:coarse){.copy-btn{min-width:2.75rem;min-height:2.75rem;right:.2rem}.code-wrap>pre{--copy-gutter:3.15rem}}.post-content thead th .sort-btn{font:inherit;color:inherit;letter-spacing:inherit;text-align:inherit;background:0 0;border:0;padding:0;margin:0;cursor:pointer}.post-tags a,.post-meta a{padding-block:.4em}.site-nav a{padding-block:.3em;margin-block:-.3em}.theme-toggle{padding:6px;margin:calc(.2em - 6px)}.pagination .page-ellipsis{color:var(--fg-muted)}@media(prefers-reduced-motion:reduce){.site-logo,.site-logo .logo-a,.site-logo .logo-b,.copy-btn{transition:none}.site-title:hover .site-logo{transform:none}}.search-title{margin-top:.5em}.search-label{display:block;margin-bottom:.4em;color:var(--fg-muted);font-size:.9em}#search-input{width:100%;max-width:500px;padding:.5em .8em;font-family:commit mono,ui-monospace,monospace;font-size:1em;background:var(--code-bg);color:var(--fg);border:1px solid var(--fg-muted);border-radius:3px;margin-bottom:.5em}#search-input::placeholder{color:var(--fg-muted);opacity:1}#search-input:focus-visible{outline:2px solid var(--link);outline-offset:2px;border-color:var(--link)}.search-status{color:var(--fg-muted);font-size:.85em}.dark .bg{color:#ebdbb2;background-color:transparent}.dark .chroma{color:#ebdbb2;-webkit-text-size-adjust:none}.dark .chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.dark .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.dark .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.dark .chroma .hl{background-color:#3d3d3d}.dark .chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#928374}.dark .chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#928374}.dark .chroma .line{display:flex}.dark .chroma .k{color:#fe8019}.dark .chroma .kc{color:#fe8019}.dark .chroma .kd{color:#fe8019}.dark .chroma .kn{color:#fe8019}.dark .chroma .kp{color:#fe8019}.dark .chroma .kr{color:#fe8019}.dark .chroma .kt{color:#fabd2f}.dark .chroma .na{color:#b8bb26;font-weight:700}.dark .chroma .no{color:#d3869b}.dark .chroma .ni{color:#fabd2f}.dark .chroma .ne{color:#fb4934}.dark .chroma .nl{color:#fb4934}.dark .chroma .nt{color:#fb4934}.dark .chroma .nb{color:#fabd2f}.dark .chroma .bp{color:#fabd2f}.dark .chroma .nf{color:#fabd2f}.dark .chroma .fm{color:#fabd2f}.dark .chroma .s{color:#b8bb26}.dark .chroma .sa{color:#b8bb26}.dark .chroma .sb{color:#b8bb26}.dark .chroma .sc{color:#b8bb26}.dark .chroma .dl{color:#b8bb26}.dark .chroma .sd{color:#b8bb26}.dark .chroma .s2{color:#b8bb26}.dark .chroma .se{color:#b8bb26}.dark .chroma .sh{color:#b8bb26}.dark .chroma .si{color:#b8bb26}.dark .chroma .sx{color:#b8bb26}.dark .chroma .sr{color:#b8bb26}.dark .chroma .s1{color:#b8bb26}.dark .chroma .ss{color:#83a598}.dark .chroma .m{color:#d3869b}.dark .chroma .mb{color:#d3869b}.dark .chroma .mf{color:#d3869b}.dark .chroma .mh{color:#d3869b}.dark .chroma .mi{color:#d3869b}.dark .chroma .il{color:#d3869b}.dark .chroma .mo{color:#d3869b}.dark .chroma .o{color:#fe8019}.dark .chroma .ow{color:#fe8019}.dark .chroma .c{color:#928374}.dark .chroma .ch{color:#928374}.dark .chroma .cm{color:#928374}.dark .chroma .c1{color:#928374}.dark .chroma .cs{color:#928374}.dark .chroma .cp{color:#8ec07c}.dark .chroma .cpf{color:#8ec07c}.dark .chroma .gd{color:#1d2021;background-color:#fb4934}.dark .chroma .ge{color:#83a598;text-decoration:underline}.dark .chroma .gr{color:#1d2021;background-color:#fb4934;font-weight:700}.dark .chroma .gh{color:#b8bb26;font-weight:700}.dark .chroma .gi{color:#282828;background-color:#b8bb26}.dark .chroma .go{color:#a89984}.dark .chroma .gu{color:#b8bb26;font-weight:700}.dark .chroma .gt{color:#1d2021;background-color:#fb4934;font-weight:700}.light .bg{color:#3c3836;background-color:transparent}.light .chroma{color:#3c3836;-webkit-text-size-adjust:none}.light .chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.light .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.light .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.light .chroma .hl{background-color:#e1d8b3}.light .chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686665}.light .chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#686665}.light .chroma .line{display:flex}.light .chroma .k{color:#af3a03}.light .chroma .kc{color:#af3a03}.light .chroma .kd{color:#af3a03}.light .chroma .kn{color:#af3a03}.light .chroma .kp{color:#af3a03}.light .chroma .kr{color:#af3a03}.light .chroma .kt{color:#8d5b07}.light .chroma .na{color:#6a660c;font-weight:700}.light .chroma .no{color:#8f3f71}.light .chroma .ni{color:#8d5b07}.light .chroma .ne{color:#9d0006}.light .chroma .nl{color:#9d0006}.light .chroma .nt{color:#9d0006}.light .chroma .nb{color:#8d5b07}.light .chroma .bp{color:#8d5b07}.light .chroma .nf{color:#8d5b07}.light .chroma .fm{color:#8d5b07}.light .chroma .s{color:#6a660c}.light .chroma .sa{color:#6a660c}.light .chroma .sb{color:#6a660c}.light .chroma .sc{color:#6a660c}.light .chroma .dl{color:#6a660c}.light .chroma .sd{color:#6a660c}.light .chroma .s2{color:#6a660c}.light .chroma .se{color:#6a660c}.light .chroma .sh{color:#6a660c}.light .chroma .si{color:#6a660c}.light .chroma .sx{color:#6a660c}.light .chroma .sr{color:#6a660c}.light .chroma .s1{color:#6a660c}.light .chroma .ss{color:#076678}.light .chroma .m{color:#8f3f71}.light .chroma .mb{color:#8f3f71}.light .chroma .mf{color:#8f3f71}.light .chroma .mh{color:#8f3f71}.light .chroma .mi{color:#8f3f71}.light .chroma .il{color:#8f3f71}.light .chroma .mo{color:#8f3f71}.light .chroma .o{color:#af3a03}.light .chroma .ow{color:#af3a03}.light .chroma .c{color:#70655a}.light .chroma .ch{color:#70655a}.light .chroma .cm{color:#70655a}.light .chroma .c1{color:#70655a}.light .chroma .cs{color:#70655a}.light .chroma .cp{color:#3b7150}.light .chroma .cpf{color:#3b7150}.light .chroma .gd{color:#fdf6e3;background-color:#9d0006}.light .chroma .ge{color:#076678;text-decoration:underline}.light .chroma .gr{color:#fdf6e3;background-color:#9d0006;font-weight:700}.light .chroma .gh{color:#6a660c;font-weight:700}.light .chroma .gi{color:#fdf6e3;background-color:#6a660c}.light .chroma .go{color:#504945}.light .chroma .gu{color:#6a660c;font-weight:700}.light .chroma .gt{color:#fdf6e3;background-color:#3c3836;font-weight:700}.svg-figure{margin:1.5rem 0}.svg-figure svg{max-width:100%;height:auto;display:block;margin:0 auto}.svg-figure[style]{width:100%}.post-content>figure.svg-figure--prose,.g-sec>figure.svg-figure--prose{max-width:var(--measure)}@media(min-width:601px){.svg-figure[style] svg{width:calc(var(--svg-nat) * 1rem);margin:0}.svg-figure[style]:has(figcaption) svg{margin:0 auto}}@media(max-width:600px){.svg-figure[style] svg{width:calc(var(--svg-w) * .0625rem)}}.svg-figure:has(figcaption){border:1px solid var(--border);border-radius:4px;padding:.9rem}.post-content figcaption{text-align:center;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--fg-muted);margin-top:.6rem}#read-progress{position:fixed;top:0;left:0;width:100%;height:2px;background:var(--link);transform:scaleX(0);transform-origin:0 0;z-index:200;pointer-events:none}.tag-cloud{list-style:none;display:flex;flex-wrap:wrap;gap:.6rem;padding:0;margin:1.5rem 0;font-family:var(--font-mono);font-size:var(--fs-sm)}.tag-cloud a{display:inline-block;padding:.35em .7em;border:1px solid var(--border);border-radius:4px;color:var(--fg)}.tag-cloud a:hover{border-color:var(--link);color:var(--link);text-decoration:none}.tag-cloud .tag-count{margin-left:.5em}.tag-filter .tag-cloud{margin:0 0 1.5rem;gap:.5rem}.tag-filter .tag-count{margin-left:.1em}.tag-filter a[aria-current=page],.kind-filter input:checked+label{border-color:var(--fg-heading);color:var(--fg-heading);font-weight:700}.tag-filter .tag-filter-more{border-style:dashed;color:var(--link)}@media(max-width:600px){.tag-filter .tag-cloud{flex-wrap:nowrap;overflow-x:auto;padding-bottom:.4rem}.tag-filter li{flex:none}}.kind-filter{border:0;padding:0;margin:0;min-width:0}.kind-filter .tag-cloud{margin:0 0 1.5rem;gap:.5rem}.kind-filter label{display:inline-block;padding:.35em .7em;border:1px solid var(--border);border-radius:4px;color:var(--fg);cursor:pointer}.kind-filter label:hover{border-color:var(--link);color:var(--link)}.kind-filter input:focus-visible+label{outline:2px solid var(--link);outline-offset:2px}.kind-filter .tag-count{margin-left:.1em}main:has(#kind-manual:checked) .guide-list li:not([data-kind=manual]),main:has(#kind-tutorial:checked) .guide-list li:not([data-kind=tutorial]){display:none}.empty-state{display:none;max-width:var(--measure);color:var(--fg-muted)}.empty-state a{text-decoration:underline;text-underline-offset:.2em}main:has(#kind-all:checked) .empty-state[data-for=all],main:has(#kind-manual:checked) .empty-state[data-for=manual],main:has(#kind-tutorial:checked) .empty-state[data-for=tutorial]{display:block}@media print{.site-header,.site-footer,aside.toc,.toc-mobile,.copy-btn,#back-to-top,#read-progress,.post-nav,.heading-anchor,.theme-toggle,.search-link,.nav-menu{display:none}body{background:0 0;font-size:11pt}.post-wrapper,.post-content,main>:not(article,.post){max-width:none}pre,pre code{white-space:pre-wrap;overflow-wrap:anywhere}.table-wrap{overflow:visible}pre,figure,table,.tldr,blockquote{break-inside:avoid}h2,h3,h4{break-after:avoid}.post-content a[href^=http]::after{content:" (" attr(href)")";font-size:.85em;color:var(--fg-muted);overflow-wrap:anywhere}.post-content h2[id=sources]+ul{columns:1}}.post-content>.series-group{max-width:none;margin-top:2rem}.series-group>h2{display:flex;align-items:baseline;gap:.5em}.series-group-count{font-family:var(--font-mono);font-size:var(--fs-sm);font-weight:400;color:var(--fg-muted)}.series-index{list-style:none;margin:.6rem 0 0;padding:0;display:grid;grid-template-columns:1fr;gap:1rem 2.5rem}@media(min-width:900px){.series-index{grid-template-columns:repeat(2,minmax(0,1fr))}}.series-index li{margin:0;padding:0;min-width:0}.series-index-title{font-weight:600}.series-index-meta{display:inline-block;margin-left:.5em;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--fg-muted);white-space:nowrap}.series-index-blurb{margin:.2em 0 0;font-size:var(--fs-sm);line-height:1.45;color:var(--fg-muted);display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}