.blog-main{max-width:1200px;margin:0 auto;padding:clamp(2.5rem,6vw,5rem) clamp(1rem,4vw,2.5rem)}.blog-header{margin-bottom:clamp(2rem,5vw,3.5rem)}.blog-header h1{letter-spacing:-.04em;margin:.5rem 0;font-size:clamp(2.25rem,5vw,3.25rem);font-weight:600;line-height:1.05}.blog-header p{max-width:60ch;color:var(--muted);margin:0}.blog-index{grid-template-columns:minmax(160px,200px) minmax(0,1fr);align-items:start;gap:clamp(1.5rem,4vw,3rem);display:grid}.sidebar-group{margin-bottom:1.75rem}.sidebar-group .label{margin-bottom:.6rem}.sidebar-links{margin:0;padding:0;font-size:.875rem;line-height:2;list-style:none}.sidebar-links a{color:var(--muted);text-decoration:none}.sidebar-links a:hover,.sidebar-links a[aria-current=page]{color:var(--fg)}.sidebar-links a[aria-current=page]:before{content:"→ ";color:var(--accent)}.sidebar-all{font-size:.75rem}.tag-search-input{border:1px solid var(--line);width:100%;color:var(--fg);background:0 0;margin-bottom:.6rem;padding:.35rem .5rem;font-size:.75rem}.tag-cloud{flex-wrap:wrap;gap:.4rem;margin:0 0 .6rem;padding:0;list-style:none;display:flex}.tag-cloud .tag{color:var(--fg);text-decoration:none;display:inline-block}.tag-cloud .tag[aria-current=page]{border-color:var(--accent)}.tag-count{color:var(--muted)}.all-tags-link,.tag-empty{color:var(--muted);font-size:.75rem}.tag-more summary{cursor:pointer;width:fit-content}.tag-more summary:hover{color:var(--fg)}.tag-more[open] summary{margin-bottom:.6rem}.post-rows{margin:0;padding:0;list-style:none}.post-row{border-top:1px dotted var(--line);grid-template-columns:6.5rem minmax(0,1fr) auto;align-items:baseline;gap:1rem;padding:.9rem 0;display:grid}.post-row:first-child{border-top:0;padding-top:0}.post-row-date,.post-row-time{color:var(--muted);font-size:.75rem}.post-row-title{margin:0;font-size:1rem;font-weight:600}.post-row-title a{text-decoration:none}.post-row-title a:hover{text-decoration:underline}.post-row-desc,.post-row-series{color:var(--muted);margin:.2rem 0 0;font-size:.875rem}.post-row-series,.post-row-series a{color:var(--accent);font-size:.75rem}.badge-note{border:1px solid var(--accent);color:var(--accent);vertical-align:middle;margin-left:.5rem;padding:.05rem .4rem;font-size:.625rem;font-weight:400}.badge-draft{border:1px solid var(--hint);color:var(--hint);vertical-align:middle;margin-left:.5rem;padding:.05rem .4rem;font-size:.625rem;font-weight:400}.empty{color:var(--muted)}.filters-mobile{border:1px solid var(--line);margin-bottom:1.5rem;padding:.6rem .8rem;display:none}.filters-mobile summary{cursor:pointer;font-size:.8rem}@media (width<=768px){.blog-index{grid-template-columns:minmax(0,1fr)}.blog-sidebar{display:none}.filters-mobile{display:block}.post-row{grid-template-columns:minmax(0,1fr) auto}.post-row-date{grid-column:1/-1}}@media (width<=640px){.post-row{grid-template-columns:minmax(0,1fr) auto}}.blog-header .label a{color:inherit}.series-list,.series-parts{margin:0;padding:0;list-style:none}.series-row{border-top:1px dotted var(--line);grid-template-columns:minmax(0,1fr) auto;gap:.25rem 1rem;padding:1.1rem 0;display:grid}.series-title{letter-spacing:-.02em;margin:0;font-size:1.125rem}.series-title a{text-decoration:none}.series-meta,.series-part-meta,.series-part-n{color:var(--muted);font-size:.75rem}.series-desc{color:var(--muted);grid-column:1/-1;margin:0}.series-parts li{border-top:1px dotted var(--line);grid-template-columns:2.5rem minmax(0,1fr) auto;align-items:baseline;gap:1rem;padding:.8rem 0;display:grid}.post-cover{border:1px solid var(--line);height:220px;margin-bottom:2.5rem;position:relative;overflow:hidden;container-type:size}.post-cover pre{white-space:pre;width:100%;height:100%;font-family:var(--font-mono);font-size:calc(100cqw / (var(--cols) * .6));line-height:calc(100cqh / var(--rows));margin:0;padding:0;transition:opacity .3s;overflow:hidden}.post-cover canvas{width:100%;height:100%;display:block;position:absolute;inset:0}.post-cover.is-live pre{opacity:0}@media (width<=768px){.post-cover{height:160px}}.post-header{grid-template-columns:minmax(120px,170px) minmax(0,1fr);gap:clamp(1.5rem,4vw,3rem);margin-bottom:2.5rem;display:grid}.post-header .label a{color:inherit}.post-header h1{letter-spacing:-.04em;margin:.35rem 0 .6rem;font-size:clamp(2rem,4.5vw,3rem);font-weight:600;line-height:1.05}.post-series,.post-series a{color:var(--accent);margin:0;font-size:.75rem}.post-desc{color:var(--muted);max-width:62ch;margin:0}.post-grid{grid-template-columns:minmax(120px,170px) minmax(0,62ch) minmax(0,1fr);align-items:start;gap:clamp(1.5rem,4vw,3rem);display:grid}.post-grid-no-toc{grid-template-columns:minmax(120px,170px) minmax(0,62ch)}.post-details{color:var(--muted);flex-direction:column;gap:.35rem;font-size:.75rem;display:flex}.post-details .tag-cloud{margin-top:.75rem}.toc-desktop{position:sticky;top:2rem}.toc ul{border-left:1px solid var(--line);margin:0;padding:0 0 0 .75rem;font-size:.8rem;line-height:1.9;list-style:none}.toc a{color:var(--muted);text-decoration:none}.toc a.is-active,.toc a:hover{color:var(--fg)}.toc a.is-active{box-shadow:-.8rem 0 0 -.7rem var(--accent)}.toc-depth-3{padding-left:.75rem}.toc-mobile{border:1px solid var(--line);margin-bottom:1.5rem;padding:.6rem .8rem;display:none}.toc-mobile summary{cursor:pointer;font-size:.8rem}.prose{overflow-wrap:anywhere;font-size:1.0625rem;line-height:1.75}.prose>*+*{margin-top:1.1em}.prose h2,.prose h3{letter-spacing:-.02em;margin-top:2em;line-height:1.2}.prose h2{font-size:1.5rem}.prose h3{font-size:1.2rem}.anchor-link{color:var(--muted);opacity:0;margin-left:.4rem;text-decoration:none}.anchor-heading:hover .anchor-link,.anchor-link:focus-visible{opacity:1}.prose blockquote{border-left:2px solid var(--line);color:var(--muted);margin-left:0;padding-left:1rem}.prose img{max-width:100%;height:auto}.prose :not(pre)>code{font-family:var(--font-mono);border:1px solid var(--line);padding:.1em .35em;font-size:.875em}.code-wrap{position:relative}.prose pre.astro-code{border:1px solid var(--line);max-width:100%;padding:1rem 1.1rem;font-size:.85rem;line-height:1.6;overflow-x:auto}.prose pre.astro-code[data-title]:before{content:attr(data-title);font-family:var(--font-mono);color:var(--muted);margin:-.4rem 0 .8rem;font-size:.75rem;display:block}.code-copy{border:1px solid var(--line);background:var(--bg);color:var(--muted);cursor:pointer;padding:.15rem .5rem;font-size:.7rem;position:absolute;top:.5rem;right:.5rem}.astro-code,.astro-code span{color:var(--shiki-light)}.astro-code{background-color:var(--shiki-light-bg)}[data-theme=dark] .astro-code,[data-theme=dark] .astro-code span,[data-theme=hacker] .astro-code,[data-theme=hacker] .astro-code span{color:var(--shiki-dark)}[data-theme=dark] .astro-code,[data-theme=hacker] .astro-code{background-color:var(--shiki-dark-bg)}[data-theme=dark] .astro-code span[style*="--shiki-dark:#6A737D"],[data-theme=hacker] .astro-code span[style*="--shiki-dark:#6A737D"]{color:#959da5}@media (prefers-color-scheme:dark){:root:not([data-theme]) .astro-code span[style*="--shiki-dark:#6A737D"]{color:#959da5}:root:not([data-theme]) .astro-code,:root:not([data-theme]) .astro-code span{color:var(--shiki-dark)}:root:not([data-theme]) .astro-code{background-color:var(--shiki-dark-bg)}}.callout{border:1px solid var(--line);border-left:2px solid var(--accent);grid-template-columns:auto minmax(0,1fr);gap:.75rem;padding:.8rem 1rem;display:grid}.callout-warning{border-left-color:var(--fg)}.callout-tip{border-left-style:dashed}.callout-important{border-left-width:4px}.callout-important .callout-label,.callout-warning .callout-label{color:var(--fg)}.callout-label{text-transform:uppercase;letter-spacing:.12em;color:var(--muted);margin:.15rem 0 0;font-size:.7rem}.callout>div>:first-child{margin-top:0}.callout>div>:last-child{margin-bottom:0}.series-nav{grid-template-columns:1fr 1fr;gap:1rem;margin-top:3rem;display:grid}.series-nav a{border:1px solid var(--line);flex-direction:column;gap:.25rem;padding:.8rem 1rem;text-decoration:none;display:flex}.series-nav a span{color:var(--muted);font-size:.7rem}.series-nav-next{text-align:right;grid-column:2}.related{margin-top:3rem}.edit-link{margin-top:2rem;font-size:.75rem}@media (width<=1024px){.post-grid{grid-template-columns:minmax(120px,170px) minmax(0,1fr)}.toc-desktop{display:none}.toc-mobile{display:block}}@media (width<=768px){.post-header,.post-grid,.post-grid-no-toc{grid-template-columns:minmax(0,1fr)}.post-details{flex-flow:wrap;gap:.35rem 1rem}.series-nav{grid-template-columns:minmax(0,1fr)}.series-nav-next{grid-column:1}}.table-scroll,.grammar-scroll,.prooftree-scroll,.rules-grid,.rule,.diagram-scroll,.prose .katex-display{position:relative}.table-scroll{border:1px solid var(--line);max-width:100%;overflow-x:auto}.table-scroll:focus-visible,.grammar-scroll:focus-visible,.prooftree-scroll:focus-visible,.rules-grid:focus-visible,.diagram-scroll:focus-visible,.prose .katex-display:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.prose table{overflow-wrap:normal;border-collapse:collapse;width:100%;font-size:.9rem;line-height:1.5}.prose th,.prose td{text-align:left;vertical-align:top;border-bottom:1px solid var(--line);padding:.5rem .8rem}.prose th{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);white-space:nowrap;font-size:.72rem;font-weight:500}.prose tbody tr:last-child>*{border-bottom:0}.prose tbody th{font-family:inherit;font-size:inherit;letter-spacing:normal;text-transform:none;color:var(--fg);font-weight:600}.prose tbody tr:nth-child(2n){background:color-mix(in srgb, var(--fg) 3%, transparent)}.prose td code{white-space:nowrap}.prose td{min-width:7rem}.prose td:first-child{min-width:0}.prose sup{line-height:0}.prose sup a[data-footnote-ref]{font-family:var(--font-mono);color:var(--accent);padding:0 .1em;font-size:.75em;text-decoration:none}.prose sup a[data-footnote-ref]:before{content:"["}.prose sup a[data-footnote-ref]:after{content:"]"}.prose .footnotes{border-top:1px dotted var(--line);color:var(--muted);margin-top:3rem;padding-top:1rem;font-size:.875rem}.prose .footnotes ol{padding-left:1.25rem}.prose .footnotes li::marker{font-family:var(--font-mono);font-size:.8em}.prose .footnotes p{margin:.25rem 0}.prose [data-footnote-backref]{font-family:var(--font-mono);text-decoration:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.prose .katex{font-size:1.1em}.prose .katex-display{margin:1.25em 0;padding:.25em 0;overflow:auto hidden}.prose .katex-display>.katex,.prose :not(.katex-display)>.katex{white-space:nowrap}.grammar,.rules,.prooftree,.diagram{margin:1.75rem 0}.grammar-scroll,.prooftree-scroll,.diagram-scroll{max-width:100%;overflow-x:auto}.grammar-grid{border:1px solid var(--line);grid-template-columns:auto auto auto minmax(8rem,1fr);align-items:baseline;gap:.15rem .75rem;width:max-content;min-width:100%;padding:.9rem 1rem;display:grid}.grammar-lhs{text-align:right}.grammar-sep{font-family:var(--font-mono);color:var(--muted);text-align:center;font-size:.85rem}.grammar-note{color:var(--muted);padding-left:1.5rem;font-size:.85rem}.grammar figcaption,.prooftree figcaption,.diagram figcaption{color:var(--muted);text-align:center;margin-top:.5rem;font-size:.8rem}.infer{vertical-align:bottom;grid-template-columns:auto auto auto;grid-template-areas:".prem.""lname bar name"".concl.";align-items:end;line-height:1.4;display:inline-grid}.infer-premises{grid-area:prem;justify-content:center;align-items:flex-end;gap:1.25em;padding:0 .4em;display:flex}.infer-bar{border-top:1px solid;grid-area:bar;align-self:center;margin:.2em 0}.infer.line-dashed>.infer-bar{border-top-style:dashed}.infer.line-none>.infer-bar{border-top-color:#0000}.infer-name{font-variant:small-caps;letter-spacing:.02em;white-space:nowrap;color:var(--muted);grid-area:name;align-self:center;margin-left:.35em;font-size:.78em}.infer-name-left{grid-area:lname;margin:0 .45em 0 0}.infer-conclusion{text-align:center;white-space:nowrap;grid-area:concl;padding:0 .4em}.infer.is-hyp{display:inline-block}.rules-title .katex{text-transform:none;letter-spacing:normal}.rules-title{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:.75rem;font-size:.72rem}.rules-grid{border:1px solid var(--line);flex-wrap:wrap;justify-content:center;align-items:flex-end;gap:1.75rem 2.5rem;padding:1.1rem 1rem;display:flex;overflow-x:auto}.rule{justify-content:center;max-width:100%;display:flex;overflow-x:auto}.prose>.rule{margin:1.5rem 0}.rules-grid .rule{overflow:visible}.prooftree-scroll{border:1px solid var(--line);padding:1rem .5rem}.prooftree-inner{width:max-content;margin-inline:auto}.thm{border:1px solid var(--line);border-left:2px solid var(--accent);padding:.9rem 1.1rem}.thm-definition,.thm-example{border-left-color:var(--muted)}.thm-head{margin:0 0 .4rem}.thm-name{color:var(--fg);font-weight:600;text-decoration:none}.thm-name:hover{text-decoration:underline}.thm-title{color:var(--muted)}.thm-theorem .thm-body,.thm-lemma .thm-body,.thm-corollary .thm-body,.thm-proposition .thm-body{font-style:italic}.thm-body .katex{font-style:normal}.thm-body>:first-child,.proof-body>:first-child,.proof-case-body>:first-child{margin-top:0}.thm-body>:last-child,.proof-body>:last-child,.proof-case-body>:last-child{margin-bottom:0}.thm-body>*+*,.proof-body>*+*,.proof-case-body>*+*{margin-top:.8em}.proof{border-left:1px dotted var(--line);padding-left:1.1rem}.proof-head,.proof-case-head{margin:0 0 .4rem}.proof-case{border-left:1px solid var(--line);margin-top:.9rem;padding-left:1rem}.proof-case-head em,.proof-head em{font-weight:600}.proof-end{text-align:right;margin:.25rem 0 0;line-height:1}.qed{background:currentColor;width:.55em;height:.55em;display:inline-block}.ref{white-space:nowrap}:target.thm{outline:1px solid var(--accent);outline-offset:4px}.diagram-scroll{border:1px solid var(--line)}.dg{width:100%;max-width:var(--dg-w);min-width:min(var(--dg-w), 34rem);height:auto;font-family:var(--font-mono);margin-inline:auto;display:block}.dg-grid{fill:none;stroke:var(--line);stroke-width:.5px;opacity:.6}.dg-shape{fill:var(--bg);stroke:var(--fg);stroke-width:1px}.dg-detail{fill:none;stroke:var(--muted);stroke-width:.75px}.dg-node.is-accent .dg-shape,.dg-node.is-accent .dg-detail{stroke:var(--accent)}.dg-text{fill:var(--fg);text-anchor:middle;dominant-baseline:central;font-size:13px}.dg-sub{fill:var(--muted);text-anchor:middle;dominant-baseline:central;font-size:10.5px}.dg-edge{fill:none;stroke:var(--muted);stroke-width:1px}.dg-edge.is-dashed{stroke-dasharray:4 4}.dg-arrow{fill:none;stroke:var(--muted);stroke-width:1.2px;stroke-linejoin:round}.dg-label-bg{fill:var(--bg)}.dg-label{fill:var(--muted);text-anchor:middle;dominant-baseline:central;font-size:11px}.dg-packet{fill:var(--accent)}@media (prefers-reduced-motion:reduce){.dg-packet{display:none}}
