@font-face{font-family:'Source Serif 4';src:url('/assets/fonts/source-serif-4-roman-latin.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:'Source Serif 4';src:url('/assets/fonts/source-serif-4-roman-latin.woff2') format('woff2');font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:'Source Serif 4';src:url('/assets/fonts/source-serif-4-italic-latin.woff2') format('woff2');font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:'Mulish';src:url('/assets/fonts/mulish-latin.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:'Mulish';src:url('/assets/fonts/mulish-latin.woff2') format('woff2');font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:'Mulish';src:url('/assets/fonts/mulish-latin.woff2') format('woff2');font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:'Computer Modern Sans';src:url('/assets/fonts/cmun-sans-regular.woff') format('woff');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:'Computer Modern Sans';src:url('/assets/fonts/cmun-sans-bold.woff') format('woff');font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:'Source Code Pro';src:url('/assets/fonts/source-code-pro-latin.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}:root{--font-serif:'Source Serif 4','Noto Serif SC',"Songti SC","STSong","Songti TC","PMingLiU","MingLiU","SimSun",Georgia,serif;--font-sans:'Mulish',-apple-system,BlinkMacSystemFont,"Helvetica Neue","Segoe UI",Arial,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;--font-structure:'Computer Modern Sans','Mulish',-apple-system,BlinkMacSystemFont,"Helvetica Neue","Segoe UI",Arial,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;--font-mono:'Source Code Pro',Consolas,monospace;--sidebar-width:190px;--sidebar-padding-x:2.5rem;--sidebar-padding-y:3.5rem;--sidebar-total-width:calc(var(--sidebar-width) + 5rem + 1px);--text:#1e1e1e;--muted:#666666;--border:#dcdcda;--bg:#f2f4f5;--accent:#2d5a27;--code-bg:#efefed;--max-width:930px;--sidenote-right-width:260px;--sidenote-left-width:120px;--sidenote-gap:1.35rem;--sidenote-right-padding:0.25rem}@media (prefers-color-scheme:dark){:root{--text:#e8e8e4;--muted:#9a9a94;--border:#3a3a36;--bg:#1e1f1c;--accent:#6aaa5f;--code-bg:#27281f}}html{font-size:18px;box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}body{font-family:var(--font-serif);color:var(--text);background:var(--bg);margin:0;padding:0;line-height:1.75;overflow-x:clip}.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:fixed;left:-9999px;top:1rem;padding:0.65rem 0.9rem;background:var(--text);color:var(--bg);border-radius:4px;transform:translateY(-120%);transition:transform 0.15s ease;z-index:100;border-bottom:none}.skip-link:focus{left:1rem;transform:translateY(0)}h1{font-family:var(--font-serif);font-size:1.8rem;font-weight:600;line-height:1.3;margin-bottom:0.25rem;margin-top:0}h2,h3,h4,h5,h6{font-family:var(--font-structure)}h2{font-size:1.35rem;margin-top:2.5rem}h3{font-size:1.1rem;margin-top:2rem}h4{font-size:1rem;margin-top:1.75rem}h5{font-size:0.95rem;margin-top:1.5rem}h6{font-size:0.9rem;margin-top:1.25rem}h2,h3{font-weight:600;line-height:1.4}p{margin:1.2rem 0;text-align:justify;hyphens:auto}hr{border:none;border-top:1px solid var(--border);margin:2.5rem 0}img{max-width:100%;height:auto}a{color:var(--accent);text-decoration:none;transition:color 0.15s}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}main p a,main li a,main blockquote a,main td a,main th a,.content footer a,.callout a{text-decoration:underline;text-decoration-color:rgba(45,90,39,0.45);text-underline-offset:3px;transition:text-underline-offset 0.15s ease,text-decoration-color 0.15s ease,color 0.15s ease}main p a:hover,main li a:hover,main blockquote a:hover,main td a:hover,main th a:hover,.content footer a:hover,.callout a:hover{text-decoration-color:var(--accent);text-underline-offset:2px}main p a:focus-visible,main li a:focus-visible,main blockquote a:focus-visible,main td a:focus-visible,main th a:focus-visible,.content footer a:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px;text-decoration:none}
.container{display:flex;min-height:100vh}.sidebar{position:fixed;width:var(--sidebar-width);padding:var(--sidebar-padding-y) var(--sidebar-padding-x);border-right:1px solid var(--border);top:0;height:100vh;flex-shrink:0;background:var(--bg);display:flex;flex-direction:column}.sidebar-header{display:flex;align-items:center;justify-content:space-between;gap:1rem}.sidebar-panel{display:flex;flex-direction:column;flex:1}.sidebar-section{margin-top:2rem;padding-top:1rem;border-top:1px solid var(--border)}.content{flex-grow:1;min-width:0;margin-left:var(--sidebar-total-width);padding:3.5rem 3rem;display:flex;flex-direction:column;align-items:center}main{width:100%;max-width:var(--max-width);min-width:0;min-height:50vh}@media (min-width:1101px){main{padding-right:calc(var(--sidenote-right-width) + var(--sidenote-gap) + var(--sidenote-right-padding))}}footer{width:100%;max-width:var(--max-width);margin-top:6rem;padding-top:1.5rem;padding-bottom:0;border-top:1px solid var(--border);font-size:0.8rem;color:var(--muted)}.logo{margin-bottom:0.5rem}.logo a{font-family:var(--font-serif);font-size:1.15rem;font-weight:600;color:var(--text);text-decoration:none!important;letter-spacing:0.02em;border:none}.menu-toggle{display:none;width:32px;height:32px;padding:0;appearance:none;border:1px solid var(--border);border-radius:3px;background:transparent;color:var(--text);flex-direction:column;align-items:center;justify-content:center;gap:0.22rem;cursor:pointer}.menu-toggle span{display:block;width:1rem;height:1.5px;border-radius:999px;background:currentColor;transition:transform 0.2s ease,opacity 0.2s ease}.sidebar-nav{display:flex;flex-direction:column;gap:0.85rem;margin-top:2.5rem}.sidebar-section-label{margin:0 0 0.9rem;font-family:var(--font-sans);font-size:0.68rem;color:var(--muted);letter-spacing:0.14em;text-transform:uppercase;white-space:nowrap}.sidebar-nav a{font-family:var(--font-sans);font-size:0.82rem;color:var(--muted);text-decoration:none!important;letter-spacing:0.08em;text-transform:uppercase;transition:color 0.15s;border:none!important;white-space:nowrap}.sidebar-nav a:hover{color:var(--accent)}.sidebar-nav a[aria-current="page"]{color:var(--accent);font-weight:500}.external-links{margin-top:0}.external-links a::after{content:"↗";margin-left:0.35rem;font-size:0.72rem;vertical-align:0.08em}@media (max-width:850px){.container{flex-direction:column}.sidebar{width:100%;height:auto;position:sticky;top:0;z-index:30;padding:1rem 1.25rem;border-right:none;border-bottom:1px solid var(--border);align-items:stretch;text-align:left}.sidebar-header{min-height:2.75rem}.logo{margin-bottom:0}.logo a{font-size:1rem}.menu-toggle{display:inline-flex;flex-shrink:0}.sidebar-panel{display:none;padding-top:1rem}.sidebar.is-open .sidebar-panel{display:flex}.sidebar.is-open .menu-toggle span:nth-child(1){transform:translateY(0.39rem) rotate(45deg)}.sidebar.is-open .menu-toggle span:nth-child(2){opacity:0}.sidebar.is-open .menu-toggle span:nth-child(3){transform:translateY(-0.39rem) rotate(-45deg)}.sidebar-nav{flex-direction:column;gap:0.9rem;margin-top:0}.sidebar-section{margin-top:1.5rem;padding-top:1rem}.sidebar-section-label{margin-bottom:0.8rem}.external-links{margin-top:0}.content{margin-left:0;padding:1.75rem 1.25rem 2.5rem}header,main,footer{padding:0}}
code{font-family:var(--font-mono);font-size:0.85em;background:var(--code-bg);padding:0.15em 0.35em;border-radius:3px}pre{background:var(--code-bg);border:1px solid var(--border);border-radius:4px;padding:1.2rem;max-width:100%;overflow-x:auto;line-height:1.6;margin:1.5rem 0}pre code{background:none;padding:0;font-size:0.85rem;color:var(--text)}.code-block-container{position:relative;margin:1.8rem 0;width:100%;max-width:100%}.code-block-container pre{margin:0}div.sourceCode,.scroll-wrapper{width:100%;max-width:100%}mjx-container{max-width:100%}mjx-container[display="true"]{display:block;overflow-x:auto;overflow-y:hidden}.copy-button{position:absolute;top:0.75rem;right:0.75rem;width:32px;height:32px;display:flex;align-items:center;justify-content:center;padding:0;color:var(--muted);background:transparent;border:none;border-radius:999px;cursor:pointer;opacity:0;transition:opacity 0.18s ease,color 0.18s ease,transform 0.18s ease;z-index:10}.code-block-container:hover .copy-button,.code-block-container:focus-within .copy-button{opacity:1}.copy-button:hover,.copy-button:focus-visible{color:var(--accent);transform:scale(1.05)}.copy-button.copied{color:var(--accent);transform:scale(1.08)}.copy-button svg{display:block}.copy-button-icon{position:absolute;display:flex;align-items:center;justify-content:center;transition:opacity 0.2s ease,transform 0.2s ease}.copy-button .copy-icon{opacity:1;transform:scale(1)}.copy-button .success-icon{opacity:0;transform:scale(0.7)}.copy-button.copied .copy-icon{opacity:0;transform:scale(0.7)}.copy-button.copied .success-icon{opacity:1;transform:scale(1.05)}.sourceCode .co{color:#8e908c;font-style:italic}.sourceCode .ot{color:#8959a8}.sourceCode .at{color:#eab700}.sourceCode .ss{color:#718c00}.sourceCode .st{color:#718c00}.sourceCode .va{color:#c82829}.sourceCode .cf{color:#8959a8;font-weight:bold}.sourceCode .op{color:#3e999f}.sourceCode .bu{color:#eab700}.sourceCode .ex{color:#4271ae}.sourceCode .pp{color:#8959a8}.sourceCode .do{color:#8e908c;font-style:italic}.sourceCode .an{color:#eab700}.sourceCode .cv{color:#8e908c;font-style:italic}.sourceCode .in{color:#8e908c;font-style:italic}.sourceCode .kw{color:#8959a8;font-weight:bold}.sourceCode .dt{color:#eab700}.sourceCode .dv{color:#f5871f}.sourceCode .bn{color:#f5871f}.sourceCode .fl{color:#f5871f}.sourceCode .ch{color:#718c00}.sourceCode .fu{color:#4271ae}blockquote{font-family:var(--font-serif);margin:1.5rem 0;padding:0.8rem 1.2rem;border-left:3px solid var(--border);color:var(--muted)}blockquote p{margin:0;text-align:left}.callout{--callout-color:8,109,221;margin:1.5rem 0;border:1px solid rgba(var(--callout-color),0.45);border-radius:6px;background:rgba(var(--callout-color),0.1);overflow:hidden}.callout-title{font-family:var(--font-sans);font-weight:600;font-size:0.88rem;padding:0.75rem 0.95rem;display:flex;align-items:center;gap:0.55rem;color:rgb(var(--callout-color));line-height:1.4}.callout-title-inner{min-width:0;flex:1}.callout-title-inner>:first-child{margin-top:0}.callout-title-inner>:last-child{margin-bottom:0}.callout-icon{display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;flex-shrink:0;opacity:0.85}.callout-icon svg{width:100%;height:100%;display:block}.callout-content{padding:0.85rem 0.95rem;font-size:0.95em}.callout-content>:first-child{margin-top:0}.callout-content>:last-child{margin-bottom:0}.callout .callout{margin:0.9rem 0}.callout-content p,.callout-content ul,.callout-content ol,.callout-content pre,.callout-content blockquote{margin-top:0.75rem;margin-bottom:0.75rem}.callout summary{list-style:none;cursor:pointer}.callout summary::-webkit-details-marker{display:none}.callout-fold{width:0.9rem;height:0.9rem;flex-shrink:0;margin-left:auto;opacity:0.7}.callout-fold::before{content:'';display:block;width:100%;height:100%;background:currentColor;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpolyline points='9 18 15 12 9 6' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpolyline points='9 18 15 12 9 6' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;transform:rotate(90deg);transition:transform 0.18s ease}.callout[data-callout-fold] .callout-title:hover .callout-fold::before{opacity:1}.callout[data-callout-fold]:not([open]) .callout-fold::before{transform:rotate(0deg)}.callout[data-callout-fold]:not([open]) .callout-content{display:none}.callout-note{--callout-color:8,109,221}.callout-abstract{--callout-color:0,191,188}.callout-info{--callout-color:8,109,221}.callout-todo{--callout-color:8,109,221}.callout-tip{--callout-color:0,191,188}.callout-success{--callout-color:8,185,78}.callout-question{--callout-color:236,117,0}.callout-warning{--callout-color:236,117,0}.callout-failure{--callout-color:233,49,71}.callout-danger{--callout-color:233,49,71}.callout-bug{--callout-color:233,49,71}.callout-example{--callout-color:120,82,238}.callout-quote{--callout-color:158,158,158}mark{background:#c8e6c0;color:inherit;padding:0.05em 0.25em;border-radius:2px}@media (prefers-color-scheme:dark){mark{background:#2a4a24;color:#e8e8e4}}.post-list{list-style:none;padding:0;margin:0}.post-list li{display:flex;justify-content:space-between;align-items:baseline;padding:0.6rem 0;border-bottom:1px solid var(--border);gap:1rem}.post-list li:first-child{border-top:1px solid var(--border)}.post-list .post-date{font-family:var(--font-sans);font-size:0.8rem;color:var(--muted);white-space:nowrap}.compiler-error{margin:2rem 0;padding:1.5rem;border:1px solid var(--border);border-left-width:4px;border-radius:12px;background:var(--code-bg);color:var(--text);font-family:var(--font-sans)}.compiler-error h2,.compiler-error h3{margin-top:0;color:var(--text)}.compiler-error h3{margin-bottom:0.5rem;font-size:1rem}.compiler-error pre{margin:0 0 1rem;padding:1rem;overflow-x:auto;border-radius:8px;background:var(--bg);border:1px solid var(--border);color:var(--text);font-family:var(--font-mono);font-size:0.9rem;line-height:1.4}.compiler-error-note{margin-bottom:0;font-size:0.85rem;color:var(--muted)}table{border-collapse:collapse;border-spacing:0;width:auto;max-width:100%;margin:1.5rem 0;font-size:0.95em;border-top:2px solid var(--text);border-bottom:2px solid var(--text);counter-increment:caption}thead tr>th{border-bottom:1px solid var(--text);font-family:var(--font-sans);font-weight:500;font-size:0.85rem;letter-spacing:0.04em}th,td{text-align:left;padding:0.5rem 0.75rem;line-height:1.4}tbody tr:first-child>td{padding-top:0.6rem}caption{text-align:left;font-family:var(--font-sans);font-size:0.85rem;color:var(--muted);padding:0 0 0.4rem;caption-side:top}caption::before{content:'Table ' counter(caption) '. ';font-weight:500}.scroll-wrapper{overflow-x:auto;margin:1.5rem 0}.scroll-wrapper>table{margin:0;white-space:nowrap}
.post-meta{font-family:var(--font-sans);font-size:0.85rem;color:var(--muted);margin-bottom:2.5rem;display:flex;flex-direction:column;gap:0.45rem}.post-meta-main{margin:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:0.25rem 0.45rem;line-height:1.7}.post-meta time{color:var(--text)}.post-meta-inline{display:inline-flex;align-items:baseline;gap:0.25rem}.post-meta-prefix{text-transform:lowercase}.post-meta-separator{color:color-mix(in srgb,var(--muted) 70%,transparent)}.tags{line-height:1.7}.tags a{font-family:var(--font-sans);font-size:0.8rem;color:var(--muted);text-decoration:none;border-bottom:none}.tags a::before{content:"#"}.tags a:hover{color:var(--accent)}@media (max-width:640px){.post-meta{gap:0.35rem}}.sidenote{font-family:var(--font-serif);font-size:0.78rem;line-height:1.7;color:var(--muted);display:block;float:right;clear:right;width:var(--sidenote-right-width);margin-right:calc(-1*(var(--sidenote-right-width) + var(--sidenote-gap)));margin-top:0.2rem;margin-bottom:1rem;text-align:left;padding-right:var(--sidenote-right-padding);overflow-wrap:break-word;word-break:break-word;max-width:100%}.sidenote p{margin:0;font-size:inherit}.sidenote+.sidenote{margin-top:0.8rem}.sidenote-left{float:left;width:var(--sidenote-left-width);margin-left:calc(-1*(var(--sidenote-left-width) + var(--sidenote-gap)));margin-right:0.4rem;text-align:left;padding-right:0}@media (max-width:1100px){main{padding-right:0}.sidenote{float:none;display:block;width:auto;margin:1rem 0;padding:0.9rem 1rem;color:color-mix(in srgb,var(--muted) 92%,var(--text) 8%);background:color-mix(in srgb,var(--code-bg) 72%,white 28%);border:1px solid color-mix(in srgb,var(--border) 84%,var(--accent) 16%);border-radius:10px;box-shadow:inset 0 1px 0 rgba(255,255,255,0.28)}.sidenote-left{margin-left:0;margin-right:0;text-align:left}.sidenote::before{content:"Note";display:block;margin-bottom:0.35rem;font-size:0.66rem;font-weight:600;letter-spacing:0.12em;text-transform:uppercase;color:var(--accent);opacity:0.8}}#toc{position:fixed;top:3.5rem;right:2rem;width:240px;max-height:calc(100vh - 7rem);padding:0.35rem 0.25rem 0.35rem 0;overflow:hidden;transition:opacity 0.2s ease;z-index:50}#toc-list{list-style:none;padding:0 0.35rem 0 0;margin:0;display:flex;flex-direction:column;gap:6px;max-height:calc(100vh - 7.7rem);overflow-y:auto;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--border) 78%,transparent) transparent}#toc-list::-webkit-scrollbar{width:6px}#toc-list::-webkit-scrollbar-track{background:transparent}#toc-list::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--border) 78%,transparent);border-radius:999px}#toc-list a{display:flex;align-items:center;gap:8px;text-decoration:none;border:none;color:var(--muted);font-family:var(--font-sans);font-size:0.72rem;line-height:1.3;overflow:hidden;padding:0.2rem 0;transition:color 0.15s ease}#toc-list a::before{content:'';display:block;flex-shrink:0;height:4px;background:currentColor;border-radius:999px;opacity:0.3;transition:opacity 0.15s ease,width 0.15s ease}#toc-list a[data-level="2"]::before{width:16px}#toc-list a[data-level="3"]::before{width:10px}#toc-list a[data-level="4"]::before{width:6px}#toc-list a.toc-active{color:var(--accent)}#toc-list a.toc-active::before{opacity:1;width:20px}#toc-list a span{flex:1;min-width:0;max-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;opacity:0;transition:max-width 0.22s ease,opacity 0.18s ease}#toc-list a.toc-active span,#toc:hover #toc-list a span{max-width:180px;opacity:1}#toc-list a.toc-active{font-weight:600}#toc-list a.toc-feedback{color:var(--accent)}#toc-list a.toc-feedback::before{opacity:1}article h2.toc-feedback,article h3.toc-feedback,article h4.toc-feedback{animation:toc-heading-flash 0.85s ease}@keyframes toc-heading-flash{0%{color:var(--accent);text-shadow:0 0 0 rgba(0,0,0,0)}35%{color:var(--accent);text-shadow:0 0 0.6rem color-mix(in srgb,var(--accent) 28%,transparent)}100%{color:inherit;text-shadow:0 0 0 rgba(0,0,0,0)}}@media (max-width:1200px){#toc{display:none}}