:root{--hl-bg:#282a36;--hl-bg-dark:#21222c;--hl-fg:#eff0eb;--hl-comment:#a39e9b;--hl-blue:#57c7ff;--hl-cyan:#9aedfe;--hl-green:#5af78e;--hl-magenta:#ff6ac1;--hl-purple:#bd93f9;--hl-red:#ff5c57;--hl-yellow:#f3f99d;--hl-carnation:#f99fc6;--hl-coral:#f97c7c;--hl-lilac:#c9c5fb;--hl-olive:#b6d37c;--hl-opal:#b1d7c7;--hl-sand:#ffab6f}.hl-keyword{color:var(--hl-magenta);font-weight:700}.hl-keyword-control{color:var(--hl-carnation);font-weight:700}.hl-keyword-control-exception{color:var(--hl-red);font-weight:700}.hl-keyword-control-conditional,.hl-keyword-control-repeat,.hl-keyword-control-import,.hl-keyword-control-return{color:var(--hl-carnation);font-weight:700}.hl-keyword-function{color:var(--hl-lilac);font-weight:700}.hl-keyword-operator,.hl-keyword-storage,.hl-keyword-storage-type,.hl-keyword-storage-modifier{color:var(--hl-coral);font-weight:700}.hl-function{color:var(--hl-green)}.hl-function-builtin{color:var(--hl-sand)}.hl-function-method{color:var(--hl-opal)}.hl-function-macro,.hl-function-special{color:var(--hl-blue)}.hl-type{color:var(--hl-opal)}.hl-type-builtin{color:var(--hl-yellow)}.hl-type-enum-variant{color:var(--hl-sand)}.hl-constant{color:var(--hl-purple)}.hl-constant-builtin,.hl-constant-builtin-boolean{color:var(--hl-olive)}.hl-constant-character{color:var(--hl-carnation)}.hl-constant-character-escape{color:var(--hl-magenta)}.hl-constant-numeric,.hl-constant-numeric-integer{color:var(--hl-cyan)}.hl-constant-numeric-float{color:var(--hl-red)}.hl-string{color:var(--hl-yellow)}.hl-string-regexp{color:var(--hl-red)}.hl-string-special,.hl-string-special-path,.hl-string-special-url,.hl-string-special-symbol{color:var(--hl-blue)}.hl-variable{color:var(--hl-cyan)}.hl-variable-builtin{color:var(--hl-olive)}.hl-variable-parameter{color:var(--hl-blue);font-style:italic}.hl-variable-other{color:var(--hl-cyan)}.hl-variable-other-member{color:var(--hl-lilac)}.hl-comment,.hl-comment-line,.hl-comment-block,.hl-comment-block-documentation,.hl-comment-line-documentation{color:var(--hl-comment)}.hl-punctuation{color:var(--hl-magenta)}.hl-punctuation-bracket{color:var(--hl-fg)}.hl-punctuation-delimiter{color:var(--hl-coral)}.hl-punctuation-special{color:var(--hl-magenta)}.hl-operator{color:var(--hl-coral)}.hl-attribute{color:var(--hl-opal)}.hl-label{color:var(--hl-magenta)}.hl-namespace{color:var(--hl-olive)}.hl-constructor{color:var(--hl-sand)}.hl-special{color:var(--hl-magenta)}.hl-tag{color:var(--hl-carnation)}.hl-markup-heading{color:var(--hl-purple);font-weight:700}.hl-markup-bold{color:var(--hl-blue);font-weight:700}.hl-markup-italic{color:var(--hl-yellow);font-style:italic}.hl-markup-strikethrough{text-decoration:line-through}.hl-markup-link-text{color:var(--hl-magenta)}.hl-markup-link-url{color:var(--hl-cyan)}.hl-markup-link-label{color:var(--hl-blue);font-style:italic}.hl-markup-list{color:var(--hl-cyan)}.hl-markup-quote{color:var(--hl-yellow);font-style:italic}.hl-markup-raw{color:var(--hl-fg)}.hl-diff-plus{color:var(--hl-green)}.hl-diff-minus{color:var(--hl-red)}.hl-diff-delta{color:var(--hl-blue)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#1c1c1c;--bg-raised:#262626;--fg:#d4d4d4;--fg-muted:#888;--accent:#c4aa78;--accent-hover:#d6c098;--rule:#2a2a2a;--rule-visible:#363636;--code-bg:#282a36;--mono:"SF Mono", "Cascadia Mono", "Fira Code", "Consolas", "Liberation Mono", monospace;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif}html{-webkit-text-size-adjust:100%;font-size:16px}body{background:var(--bg);min-height:100vh;color:var(--fg);font-family:var(--sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;flex-direction:column;font-weight:400;line-height:1.75;display:flex}main{flex:1;width:100%;max-width:56rem;margin:0 auto;padding:2rem 2rem 8rem;overflow:visible}.site-header{border-bottom:1px solid var(--rule);z-index:100;background:var(--bg);justify-content:space-between;align-items:baseline;width:100%;max-width:56rem;margin:0 auto;padding:1.25rem 2rem;display:flex;position:sticky;top:0}.site-title{font-family:var(--mono);color:var(--fg);letter-spacing:.02em;text-transform:lowercase;border-bottom:none;font-size:1.2rem;font-weight:700;text-decoration:none}.site-title:hover{color:var(--accent);border-bottom:none}.site-header nav{gap:1.5rem;display:flex}.site-header nav a{font-family:var(--mono);color:var(--fg-muted);letter-spacing:.04em;text-transform:lowercase;border-bottom:1px solid #0000;font-size:.78rem;text-decoration:none;transition:color .15s,border-color .15s}.site-header nav a:hover,.site-header nav a.active{color:var(--accent);border-bottom-color:var(--accent)}h1{font-family:var(--mono);letter-spacing:-.01em;margin-bottom:.75rem;font-size:1.8rem;font-weight:700;line-height:1.3}h2{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--fg-muted);border-bottom:1px solid var(--rule);margin-top:3rem;margin-bottom:1rem;padding-bottom:.4rem;font-size:.85rem;font-weight:700}h3{font-family:var(--mono);color:var(--fg);margin-top:2.5rem;margin-bottom:.75rem;font-size:1.05rem;font-weight:700}h4{font-family:var(--mono);color:var(--fg);margin-top:2rem;margin-bottom:.5rem;font-size:.92rem;font-weight:700}.heading-anchor{opacity:0;color:var(--fg-muted);border-bottom:none;margin-left:.3em;font-weight:400;text-decoration:none;transition:opacity .15s}h2:hover .heading-anchor,h3:hover .heading-anchor,h4:hover .heading-anchor{opacity:.4}h2:target,h3:target,h4:target{border-left:3px solid var(--accent);padding-left:.5rem;scroll-margin-top:5rem}h2:target .heading-anchor,h3:target .heading-anchor,h4:target .heading-anchor{opacity:1;color:var(--accent)}:target{scroll-margin-top:5rem}p{margin-bottom:1.2em}article ul{margin:1rem 0;padding:0;list-style:none}article ul li{margin-bottom:.75em;padding-left:1.25em;line-height:1.6;position:relative}article ul li:before{content:"—";color:var(--fg-muted);position:absolute;left:0}article ol{margin:1rem 0;padding-left:1.75rem}article ol li{margin-bottom:.5rem;line-height:1.6}strong{font-weight:700}a{color:var(--accent);border-bottom:1px solid var(--rule);text-decoration:none;transition:color .15s,border-color .15s}a:hover{color:var(--accent-hover);border-bottom-color:var(--accent)}hr{border:none;border-top:1px solid var(--rule);margin:3rem 0}.post-with-toc{position:relative}.toc-sidebar{width:14rem;height:100%;margin-left:2rem;position:absolute;top:0;left:100%}.toc-nav{border-left:1px solid var(--rule-visible);padding-left:1rem;position:sticky;top:2rem}.toc-toggle{display:none}.toc-label{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--fg-muted);cursor:pointer;user-select:none;margin-bottom:.75rem;font-size:.72rem;font-weight:700;display:block}.toc-label:before{content:"▾ ";font-size:.65rem}.toc-toggle:not(:checked)~.toc-label:before{content:"▸ "}.toc-list{opacity:1;max-height:80rem;margin:0;padding:0;list-style:none;transition:max-height 1s steps(20,end),opacity .3s;overflow:hidden}.toc-toggle:not(:checked)~.toc-list{opacity:0;max-height:0}.toc-list li{margin-bottom:.15rem}.toc-list a{font-family:var(--mono);color:var(--fg-muted);border-bottom:none;padding:.1rem 0;font-size:.72rem;line-height:1.7;transition:color .15s;display:block}.toc-list a:hover{color:var(--accent)}.toc-list{scroll-target-group:auto}.toc-list a:target-current{color:var(--accent);font-weight:600}.toc-level-3{padding-left:.75rem}.toc-level-4{padding-left:1.5rem}.toc-level-5{padding-left:2.25rem}.toc-level-6{padding-left:3rem}.post-header{border-bottom:1px solid var(--rule);margin-bottom:2.5rem;padding-bottom:1.5rem}.post-header+h2{border-bottom:none;margin-top:2rem}.post-description{color:var(--fg-muted);margin-bottom:.75rem;font-size:1.1rem;line-height:1.6}.post-meta{font-family:var(--mono);color:var(--fg-muted);flex-wrap:wrap;align-items:center;gap:1rem;font-size:.78rem;display:flex}.post-tags{flex-wrap:wrap;gap:.4rem;display:flex}.post-tags a{font-family:var(--mono);color:var(--fg-muted);border:1px solid var(--rule-visible);border-radius:3px;padding:.1em .5em;font-size:.7rem;transition:color .15s,border-color .15s}.post-tags a:hover{color:var(--accent);border-color:var(--accent)}.post-list{padding:0;list-style:none}.post-list li{border-bottom:1px solid var(--rule);padding:1.25rem 0}.post-list li:first-child{padding-top:0}.post-list .post-link{border-bottom:none;display:block}.post-list .post-link:hover{border-bottom:none}.post-list .post-title{font-family:var(--mono);color:var(--fg);font-size:1rem;font-weight:600;transition:color .15s}.post-link:hover .post-title{color:var(--accent)}.post-list .post-desc{color:var(--fg-muted);margin-top:.3rem;font-size:.9rem;line-height:1.55;display:block}.post-list time{font-family:var(--mono);color:var(--fg-muted);margin-top:.35rem;font-size:.75rem;display:block}.section-items{flex-direction:column;gap:.75rem;margin-top:1rem;display:flex}.section-link{border:1px solid var(--rule-visible);border-radius:4px;padding:.75rem 1rem;transition:border-color .15s;display:block}.section-link:hover{border-color:var(--accent)}.section-link strong{font-family:var(--mono);font-size:.9rem}.section-link span{color:var(--fg-muted);margin-top:.2rem;font-size:.85rem;display:block}pre{font-family:var(--mono);background:var(--code-bg);border:1px solid var(--rule-visible);border-radius:4px;margin:1.5em 0;padding:1.2em 1.4em;font-size:.84rem;line-height:1.55;overflow-x:auto}code{font-family:var(--mono);background:var(--bg-raised);border-radius:3px;padding:.15em .4em;font-size:.85em}pre code{font-size:inherit;background:0 0;padding:0}table{border-collapse:collapse;-webkit-overflow-scrolling:touch;width:100%;margin:1.5rem 0;font-size:.9rem;display:block;overflow-x:auto}th,td{text-align:left;border:1px solid var(--rule-visible);white-space:nowrap;padding:.5rem .75rem}td{white-space:normal}th{font-family:var(--mono);text-transform:uppercase;letter-spacing:.06em;color:var(--fg-muted);background:var(--code-bg);white-space:nowrap;font-size:.8rem;font-weight:700}blockquote{border-left:3px solid var(--accent);color:var(--fg-muted);margin:1.5rem 0;padding-left:1.25rem;font-style:italic}blockquote p{margin-bottom:.5em}.katex-html{display:none}.mermaid-diagram{-webkit-overflow-scrolling:touch;text-align:center;margin:1.5rem 0;overflow-x:auto}.mermaid-diagram svg{max-width:100%;height:auto;margin:0 auto;display:block}.mermaid-diagram svg>rect:first-child{fill:#0000!important}.mermaid-diagram .cluster rect,.mermaid-diagram .node rect,.mermaid-diagram .node circle,.mermaid-diagram .node ellipse,.mermaid-diagram .node polygon{fill:var(--bg-raised)!important;stroke:var(--rule-visible)!important}.mermaid-diagram .edgeLabel{background-color:var(--bg)!important;color:var(--fg)!important}.mermaid-diagram .label{color:var(--fg)!important}.mermaid-diagram .edgePath path{stroke:var(--fg-muted)!important}.mermaid-diagram .arrowheadPath{fill:var(--fg-muted)!important}.mermaid-diagram svg rect,.mermaid-diagram svg circle,.mermaid-diagram svg ellipse,.mermaid-diagram svg polygon{fill:var(--bg-raised)!important;stroke:var(--rule-visible)!important}.mermaid-diagram svg>rect:first-child{fill:#0000!important;stroke:none!important}.mermaid-diagram svg text,.mermaid-diagram svg tspan{fill:var(--fg)!important}.mermaid-diagram svg path[stroke]{stroke:var(--fg-muted)!important}.mermaid-diagram svg marker path{fill:var(--fg-muted)!important}.footnote{color:var(--fg-muted);margin-bottom:.4rem;padding-left:2.5rem;font-size:.85rem;position:relative}.footnote-num{font-family:var(--mono);color:var(--accent);font-size:.75rem;font-weight:600;position:absolute;left:0}.footnote p{margin-bottom:0;display:inline}.footnote-backref{color:var(--fg-muted);border-bottom:none;font-size:.8em;text-decoration:none}.footnote-backref:hover{color:var(--accent)}sup a{color:var(--accent);border-bottom:none;font-size:.7em}img{border-radius:4px;max-width:100%;height:auto;margin:1rem 0}.site-footer{border-top:1px solid var(--rule);max-width:56rem;font-family:var(--mono);color:var(--fg-muted);text-align:center;width:100%;margin:0 auto;padding:2.5rem 2rem 2rem;font-size:.72rem}.motd{margin:3rem auto}.motd p{font-family:var(--mono);color:var(--fg-muted);white-space:nowrap;max-width:0;font-size:clamp(.7rem,2.5vw,.95rem);line-height:1;overflow:hidden}.motd p:first-child{border-right:.6em solid var(--accent);animation:1.8s steps(34,end) .5s forwards motd-type-1,.6s step-end infinite motd-cursor,1ms 2.3s forwards motd-cursor-hide}.motd p:last-child{border-right:.6em solid #0000;animation:2s steps(40,end) 2.5s forwards motd-type-2,1ms 2.5s forwards motd-cursor-show,.6s step-end 2.5s infinite motd-cursor}@keyframes motd-type-1{to{max-width:35ch}}@keyframes motd-type-2{to{max-width:41ch}}@keyframes motd-cursor{50%{border-color:#0000}}@keyframes motd-cursor-hide{to{border-color:#0000}}@keyframes motd-cursor-show{to{border-color:var(--accent)}}.mobile-toc{display:none}@media (width<=1200px){.toc-sidebar{display:none}.mobile-toc{display:contents}.mobile-toc-btn{cursor:pointer;user-select:none;flex-direction:column;justify-content:space-between;width:20px;height:14px;display:flex;position:absolute;top:50%;right:2rem;transform:translateY(-50%)}.mobile-toc-btn span{transform-origin:50%;background:0 0;align-items:center;gap:3px;width:100%;height:3px;transition:transform .3s,opacity .3s;display:flex}.mobile-toc-btn span:before{content:"";background:var(--fg-muted);border-radius:50%;flex-shrink:0;width:3px;height:3px;transition:opacity .3s}.mobile-toc-btn span:after{content:"";background:var(--fg-muted);border-radius:1px;flex:1;height:2px}.mobile-toc-btn:hover span:before,.mobile-toc-btn:hover span:after{background:var(--accent)}.toc-toggle:checked~.mobile-toc-btn span{gap:0}.toc-toggle:checked~.mobile-toc-btn span:before{opacity:0;width:0}.toc-toggle:checked~.mobile-toc-btn span:first-child{transform:translateY(5.5px)rotate(45deg)}.toc-toggle:checked~.mobile-toc-btn span:nth-child(2){opacity:0}.toc-toggle:checked~.mobile-toc-btn span:nth-child(3){transform:translateY(-5.5px)rotate(-45deg)}.mobile-toc-panel{background:var(--bg);border-top:1px solid var(--rule-visible);opacity:0;z-index:200;max-height:0;padding:0 2rem;transition:max-height .3s,opacity .3s,padding .3s;position:absolute;top:100%;left:0;right:0;overflow:hidden}.toc-toggle:checked~.mobile-toc-panel{opacity:1;border-bottom:1px solid var(--rule-visible);max-height:calc(100vh - 5rem);padding:1rem 2rem;overflow-y:auto}}@media (width<=600px){.site-header{flex-direction:column;gap:.75rem;padding:2rem 1.25rem 1rem}.site-header nav{gap:1rem}main{padding:1.5rem 1.25rem 5rem}h1{font-size:1.4rem}.post-list li{padding:.75rem 0}.mermaid-diagram svg{max-width:none}}@media (width<=380px){.site-header nav a{font-size:.7rem}}