.layout{max-width:1140px;margin:0 auto;padding:56px 28px;display:grid;grid-template-columns:minmax(0,820px) 220px;grid-template-areas:"header ." "main   toc";column-gap:40px;row-gap:0}.post-header{grid-area:header}.post-main{grid-area:main;padding:0;max-width:unset}.toc{grid-area:toc;position:sticky;top:56px;align-self:start;font-size:12px;line-height:1.6;max-height:calc(100vh - 112px);overflow-y:auto}.right-rail{grid-area:toc;position:sticky;top:56px;align-self:start;font-size:12px;line-height:1.6;max-height:calc(100vh - 112px);overflow-y:auto;display:flex;flex-direction:column;gap:16px}.right-rail .toc{position:static;top:auto;max-height:unset;overflow-y:visible}.rail-head{color:var(--accent);margin-bottom:6px;font-size:12px}.mini-graph-wrap{display:block}.toc-head{color:var(--accent);margin-bottom:6px}.toc ul{list-style:none;padding:0;margin:0;border-left:1px solid var(--surface0)}.toc li{margin:0}.toc a{display:block;padding:4px 12px;color:var(--subtext0);border-left:2px solid transparent;margin-left:-1px}.toc a:hover{color:var(--text)}.toc a.active{color:var(--accent);border-left-color:var(--accent)}@media(max-width:960px){.layout{grid-template-columns:1fr;grid-template-areas:"header" "main"}.toc,.right-rail{display:none}}.layout-kb{grid-template-areas:"header toc" "main   toc"}.layout-with-sidebar{max-width:1140px;margin:0 auto;padding:56px 28px;display:flex;align-items:flex-start;gap:32px}.layout-with-sidebar>.layout{padding:0;flex:1 1 auto;min-width:0}.kb-sidebar{flex:0 0 220px;width:220px;min-width:0;position:sticky;top:56px;align-self:flex-start;font-size:12.5px;max-height:calc(100vh - 112px);overflow-y:auto;overflow-x:hidden;padding-right:4px;box-sizing:border-box}.kb-sidebar-head{display:block;color:var(--accent);margin-bottom:6px;font-size:12px;text-decoration:none}.kb-sidebar-head:after{content:"/";color:var(--overlay1)}.kb-sidebar-head:hover{text-decoration:underline}@media(max-width:1100px){.layout-with-sidebar>.kb-sidebar{display:none}}.post-head{display:flex;flex-wrap:wrap;gap:4px 14px;align-items:baseline;margin:6px 0 18px;padding-bottom:10px;border-bottom:1px dashed var(--surface0);font-size:12px;color:var(--overlay1)}.post-head .tags{display:inline-flex;gap:2px 10px;flex-wrap:wrap}.tag-pill{color:var(--rosewater);font-size:11.5px}a.tag-pill:hover{color:var(--accent);text-decoration:underline}.read{color:var(--overlay1);font-size:11.5px}.prose{color:var(--subtext1);font-family:var(--font-prose);font-size:15px;line-height:1.75;max-width:75ch;text-wrap:pretty}.prose h1,.prose h2,.prose h3,.prose h4,.prose h5,.prose h6,.prose code,.prose pre,.prose kbd,.prose samp,.prose .astro-code,.prose .astro-code span{font-family:var(--font-mono)}.prose h1,.prose h2,.prose h3,.prose h4,.prose h5,.prose h6{font-weight:600;margin:28px 0 10px;line-height:1.3;scroll-margin-top:48px;text-wrap:balance}.prose>div[hidden]+*{margin-top:0}.prose h1{font-size:24px;color:var(--lavender)}.prose h1:before{content:"# ";color:var(--subtext1);font-weight:400}.prose h2{font-size:20px;color:var(--rosewater)}.prose h2:before{content:"## ";color:var(--subtext1);font-weight:400}.prose h3{font-size:17px;color:var(--blue)}.prose h3:before{content:"### ";color:var(--subtext1);font-weight:400}.prose h4{font-size:15px;color:var(--teal)}.prose h4:before{content:"#### ";color:var(--subtext1);font-weight:400}.prose h5{font-size:14px;color:var(--green)}.prose h5:before{content:"##### ";color:var(--subtext1);font-weight:400}.prose h6{font-size:13px;color:var(--peach)}.prose h6:before{content:"###### ";color:var(--subtext1);font-weight:400}.prose p{margin:10px 0}.prose a{color:var(--blue);text-decoration:underline;text-decoration-color:var(--surface1)}.prose a:hover{color:var(--accent);text-decoration-color:var(--accent)}.prose strong{color:var(--text);font-weight:600}.prose em{color:var(--rosewater);font-style:normal}.prose code{background:var(--surface0);border:1px solid var(--surface1);padding:0 4px;border-radius:3px;color:var(--rosewater);font-size:.92em}.prose pre.astro-code code{background:transparent;border:0;padding:0}.prose ul,.prose ol{padding-left:20px;margin:10px 0}.prose li{margin:4px 0}.prose ul li::marker{color:var(--accent);content:"› "}.prose blockquote{margin:14px 0;padding:4px 0 4px 14px;border-left:2px solid var(--accent);color:var(--subtext0)}.prose hr{border:0;border-top:1px dashed var(--surface0);margin:24px 0}.prose img{max-width:100%;border:1px solid var(--surface1);border-radius:3px}.prose table{border-collapse:collapse;margin:14px 0;width:auto;font-size:12.5px}.prose th,.prose td{text-align:left;padding:6px 12px 6px 0;border-bottom:1px dashed var(--surface0);vertical-align:top}.prose th{color:var(--mauve);font-weight:600;border-bottom:1px solid var(--surface1)}.prose a.wikilink{color:var(--lavender);text-decoration:underline;text-decoration-color:var(--surface1)}.prose a.wikilink:hover{color:var(--accent);text-decoration-color:var(--accent)}.prose .wikilink.wikilink-new{color:var(--overlay1);text-decoration:underline dashed var(--overlay0);text-underline-offset:2px;cursor:help}.prose .wikilink.wikilink-new:hover{color:var(--rosewater);text-decoration-color:var(--rosewater)}.prose [data-callout]{--callout-color: var(--blue);margin:16px 0;padding:10px 14px;border-left:3px solid var(--callout-color);border-radius:3px;background:color-mix(in srgb,var(--callout-color) 8%,var(--mantle))}.prose [data-callout-title]{color:var(--callout-color);font-weight:600;margin-bottom:4px}.prose [data-callout-body]>:first-child{margin-top:0}.prose [data-callout-body]>:last-child{margin-bottom:0}.prose [data-callout-type=note]{--callout-color: var(--blue)}.prose [data-callout-type=tip],.prose [data-callout-type=hint],.prose [data-callout-type=important]{--callout-color: var(--teal)}.prose [data-callout-type=success],.prose [data-callout-type=done]{--callout-color: var(--green)}.prose [data-callout-type=warning],.prose [data-callout-type=caution]{--callout-color: var(--peach)}.prose [data-callout-type=danger],.prose [data-callout-type=error],.prose [data-callout-type=bug],.prose [data-callout-type=failure]{--callout-color: var(--red)}.prose [data-callout-type=quote],.prose [data-callout-type=cite]{--callout-color: var(--rosewater)}.prose [data-callout-type=abstract],.prose [data-callout-type=summary],.prose [data-callout-type=tldr]{--callout-color: var(--mauve)}.prose [data-callout-type=info],.prose [data-callout-type=question]{--callout-color: var(--sapphire)}.prose .transclude{margin:14px 0;padding:10px 14px;border:1px dashed var(--surface1);border-left:2px solid var(--mauve);border-radius:3px;background:color-mix(in srgb,var(--mauve) 5%,var(--mantle));color:var(--subtext1);font-size:13px}.prose .transclude>:first-child{margin-top:0}.prose .transclude>:last-child{margin-bottom:0}.prose .transclude .transclude-head{display:block;font-weight:600;color:var(--mauve);text-decoration:none;margin-bottom:6px;font-size:12px}.prose .transclude .transclude-head:before{content:"↪ ";color:var(--subtext1)}.prose .transclude .transclude-head:hover{color:var(--accent);text-decoration:underline}.prose .transclude-inline{display:inline-block;margin:0 2px;padding:1px 6px;font-size:12px;border-radius:3px}.prose .transclude-inline a{color:var(--mauve);text-decoration:none}.prose .transclude-inline a:hover{color:var(--accent);text-decoration:underline}.backlinks{margin-top:32px;padding-top:16px;border-top:1px dashed var(--surface0);font-size:13px}.backlinks-head{font-family:var(--font-mono);font-size:20px;color:var(--rosewater);font-weight:600;line-height:1.3;margin:0 0 10px}.backlinks-head:before{content:"## ";color:var(--subtext1);font-weight:400}.backlinks ul{list-style:none;padding:0;margin:0}.backlinks li{display:flex;align-items:baseline;gap:8px;padding:4px 0}.backlinks li:before{content:"›";color:var(--overlay1);flex-shrink:0}.backlinks a{color:var(--lavender);text-decoration:none}.backlinks a:hover{color:var(--accent);text-decoration:underline}.prose .mermaid-rendered{margin:16px 0;display:flex;justify-content:center;border:1px solid var(--surface1);background:var(--mantle);border-radius:4px;padding:14px;overflow-x:auto}.prose .mermaid-rendered svg{max-width:100%;height:auto}.prose .mermaid-error{color:var(--red);white-space:pre-wrap;font-size:12px}.layout-kb .prose a,.prose.kb-welcome a{text-decoration:underline dotted;text-decoration-color:var(--overlay0);text-underline-offset:3px;text-decoration-thickness:1px;transition:text-decoration-color .12s ease}.layout-kb .prose a:hover,.prose.kb-welcome a:hover{text-decoration-style:solid;text-decoration-color:currentColor}.prose .katex,.prose .katex-display{color:var(--rosewater)}
