:root{--fg:#1a1a1a;--muted:#666;--line:#ddd;--accent:#0b5394;--bg:#fff;--code-bg:#f7f7f7;color-scheme:light}*{box-sizing:border-box}body{margin:0 auto;max-width:46rem;padding:0 1rem 3rem;color:var(--fg);background:var(--bg);font-family:-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,pingfang sc,microsoft yahei,sans-serif;font-size:1.05rem;line-height:1.65}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}p a{text-decoration:underline;text-underline-offset:.15em}.site-header nav{display:flex;flex-wrap:wrap;align-items:baseline;gap:1rem;padding:1rem 0;border-bottom:1px solid var(--line)}.site-header .brand{font-weight:700;color:var(--fg);font-size:1.15rem}.site-header ul{display:flex;gap:1rem;list-style:none;margin:0;padding:0}.theme-toggle{font:inherit;font-size:.95rem;line-height:1.4;cursor:pointer;color:var(--muted);background:0 0;border:1px solid var(--line);border-radius:999px;padding:.05rem .6rem}.theme-toggle:hover{color:var(--fg);border-color:var(--muted)}.theme-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.site-header ul li{display:flex;align-items:center}.nav-icon{display:inline-flex;align-items:center;color:var(--muted)}.nav-icon svg{width:1.05rem;height:1.05rem;fill:currentColor;display:block}.nav-icon:hover{color:var(--accent)}.nav-icon:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}main{padding-top:1.5rem}.card{border:1px solid var(--line);border-radius:8px;padding:1.25rem 1.5rem;margin-bottom:1.5rem}.card h1,.card h2{margin-top:0}.tagline{font-size:1.15rem}.entries{list-style:none;margin:0;padding:0}.entries li{padding:.6rem 0;border-bottom:1px dashed var(--line)}.entries li:last-child{border-bottom:none}.entries p{margin:.25rem 0 0}.when{color:var(--muted);font-size:.9rem;margin-left:.5rem}.authors,.venue{color:var(--muted);font-size:.95rem}.post-list{list-style:none;margin:0;padding:0}.post-list li{padding:.35rem 0}.post-list time{color:var(--muted);font-variant-numeric:tabular-nums;margin-right:.75rem}.post-list li.has-thumb{display:flex;gap:1rem;align-items:flex-start}.post-thumb{flex:0 0 280px;display:block;padding:.4rem;border:1px solid var(--line);border-radius:8px}.post-thumb svg{display:block;width:100%;height:auto}.post-item-body{min-width:0}@media(max-width:560px){.post-list li.has-thumb{flex-direction:column;gap:.75rem}.post-thumb{flex:none;width:100%}}.post-meta{color:var(--muted);font-size:.95rem}article img{max-width:100%;height:auto}pre{background:var(--code-bg);overflow-x:auto;padding:.9rem 1rem;border:1px solid var(--line);border-radius:6px;font-size:.92rem;line-height:1.5}code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.site-footer{border-top:1px solid var(--line);margin-top:2.5rem;padding-top:1rem;color:var(--muted);font-size:.9rem}.bg{background-color:#f7f7f7}.chroma{background-color:#f7f7f7;-webkit-text-size-adjust:none}.chroma .err{color:#f6f8fa;background-color:#82071e}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#dedede}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .line{display:flex}.chroma .k{color:#cf222e}.chroma .kc{color:#cf222e}.chroma .kd{color:#cf222e}.chroma .kn{color:#cf222e}.chroma .kp{color:#cf222e}.chroma .kr{color:#cf222e}.chroma .kt{color:#cf222e}.chroma .na{color:#1f2328}.chroma .nc{color:#1f2328}.chroma .no{color:#0550ae}.chroma .nd{color:#0550ae}.chroma .ni{color:#6639ba}.chroma .nl{color:#900;font-weight:700}.chroma .nn{color:#24292e}.chroma .nx{color:#1f2328}.chroma .nt{color:#0550ae}.chroma .nb{color:#6639ba}.chroma .bp{color:#6a737d}.chroma .nv{color:#953800}.chroma .vc{color:#953800}.chroma .vg{color:#953800}.chroma .vi{color:#953800}.chroma .vm{color:#953800}.chroma .nf{color:#6639ba}.chroma .fm{color:#6639ba}.chroma .s{color:#0a3069}.chroma .sa{color:#0a3069}.chroma .sb{color:#0a3069}.chroma .sc{color:#0a3069}.chroma .dl{color:#0a3069}.chroma .sd{color:#0a3069}.chroma .s2{color:#0a3069}.chroma .se{color:#0a3069}.chroma .sh{color:#0a3069}.chroma .si{color:#0a3069}.chroma .sx{color:#0a3069}.chroma .sr{color:#0a3069}.chroma .s1{color:#0a3069}.chroma .ss{color:#032f62}.chroma .m{color:#0550ae}.chroma .mb{color:#0550ae}.chroma .mf{color:#0550ae}.chroma .mh{color:#0550ae}.chroma .mi{color:#0550ae}.chroma .il{color:#0550ae}.chroma .mo{color:#0550ae}.chroma .o{color:#0550ae}.chroma .ow{color:#0550ae}.chroma .or{color:#0550ae}.chroma .p{color:#1f2328}.chroma .c{color:#57606a}.chroma .ch{color:#57606a}.chroma .cm{color:#57606a}.chroma .c1{color:#57606a}.chroma .cs{color:#57606a}.chroma .cp{color:#57606a}.chroma .cpf{color:#57606a}.chroma .gd{color:#82071e;background-color:#ffebe9}.chroma .ge{color:#1f2328}.chroma .gi{color:#116329;background-color:#dafbe1}.chroma .go{color:#1f2328}.chroma .gl{text-decoration:underline}.chroma .w{color:#fff}:root[data-theme=dark]{--fg:#e8eaed;--muted:#9aa3ad;--line:#2e343b;--accent:#8ab4f8;--bg:#101418;--code-bg:#171b20;color-scheme:dark}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--fg:#e8eaed;--muted:#9aa3ad;--line:#2e343b;--accent:#8ab4f8;--bg:#101418;--code-bg:#171b20;color-scheme:dark}}:root[data-theme=dark] .bg,:root[data-theme=dark] .chroma{background-color:var(--code-bg);color:var(--fg)}:root[data-theme=dark] .chroma .hl{background-color:#2d333b}:root[data-theme=dark] .chroma .lnt,:root[data-theme=dark] .chroma .ln{color:#768390}:root[data-theme=dark] .chroma .k,:root[data-theme=dark] .chroma .kc,:root[data-theme=dark] .chroma .kd,:root[data-theme=dark] .chroma .kn,:root[data-theme=dark] .chroma .kp,:root[data-theme=dark] .chroma .kr,:root[data-theme=dark] .chroma .kt,:root[data-theme=dark] .chroma .nl{color:#f47067}:root[data-theme=dark] .chroma .s,:root[data-theme=dark] .chroma .sa,:root[data-theme=dark] .chroma .sb,:root[data-theme=dark] .chroma .sc,:root[data-theme=dark] .chroma .dl,:root[data-theme=dark] .chroma .sd,:root[data-theme=dark] .chroma .s2,:root[data-theme=dark] .chroma .se,:root[data-theme=dark] .chroma .sh,:root[data-theme=dark] .chroma .si,:root[data-theme=dark] .chroma .sx,:root[data-theme=dark] .chroma .sr,:root[data-theme=dark] .chroma .s1,:root[data-theme=dark] .chroma .ss{color:#96d0ff}:root[data-theme=dark] .chroma .m,:root[data-theme=dark] .chroma .mb,:root[data-theme=dark] .chroma .mf,:root[data-theme=dark] .chroma .mh,:root[data-theme=dark] .chroma .mi,:root[data-theme=dark] .chroma .il,:root[data-theme=dark] .chroma .mo,:root[data-theme=dark] .chroma .no,:root[data-theme=dark] .chroma .nd,:root[data-theme=dark] .chroma .nt{color:#6cb6ff}:root[data-theme=dark] .chroma .na,:root[data-theme=dark] .chroma .nc,:root[data-theme=dark] .chroma .nn,:root[data-theme=dark] .chroma .nx,:root[data-theme=dark] .chroma .ge,:root[data-theme=dark] .chroma .go,:root[data-theme=dark] .chroma .p,:root[data-theme=dark] .chroma .o,:root[data-theme=dark] .chroma .ow,:root[data-theme=dark] .chroma .or,:root[data-theme=dark] .chroma .w{color:#e6edf3}:root[data-theme=dark] .chroma .ni,:root[data-theme=dark] .chroma .nb,:root[data-theme=dark] .chroma .nf,:root[data-theme=dark] .chroma .fm{color:#dcbdfb}:root[data-theme=dark] .chroma .nv,:root[data-theme=dark] .chroma .vc,:root[data-theme=dark] .chroma .vg,:root[data-theme=dark] .chroma .vi,:root[data-theme=dark] .chroma .vm{color:#f69d50}:root[data-theme=dark] .chroma .c,:root[data-theme=dark] .chroma .ch,:root[data-theme=dark] .chroma .cm,:root[data-theme=dark] .chroma .c1,:root[data-theme=dark] .chroma .cs,:root[data-theme=dark] .chroma .cp,:root[data-theme=dark] .chroma .cpf,:root[data-theme=dark] .chroma .bp{color:#768390}:root[data-theme=dark] .chroma .err{color:#ffdcd7;background-color:#67060c}:root[data-theme=dark] .chroma .gd{color:#ffdcd7;background-color:#67060c}:root[data-theme=dark] .chroma .gi{color:#aff5b4;background-color:#033a16}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .bg,:root:not([data-theme=light]) .chroma{background-color:var(--code-bg);color:var(--fg)}:root:not([data-theme=light]) .chroma .hl{background-color:#2d333b}:root:not([data-theme=light]) .chroma .lnt,:root:not([data-theme=light]) .chroma .ln{color:#768390}:root:not([data-theme=light]) .chroma .k,:root:not([data-theme=light]) .chroma .kc,:root:not([data-theme=light]) .chroma .kd,:root:not([data-theme=light]) .chroma .kn,:root:not([data-theme=light]) .chroma .kp,:root:not([data-theme=light]) .chroma .kr,:root:not([data-theme=light]) .chroma .kt,:root:not([data-theme=light]) .chroma .nl{color:#f47067}:root:not([data-theme=light]) .chroma .s,:root:not([data-theme=light]) .chroma .sa,:root:not([data-theme=light]) .chroma .sb,:root:not([data-theme=light]) .chroma .sc,:root:not([data-theme=light]) .chroma .dl,:root:not([data-theme=light]) .chroma .sd,:root:not([data-theme=light]) .chroma .s2,:root:not([data-theme=light]) .chroma .se,:root:not([data-theme=light]) .chroma .sh,:root:not([data-theme=light]) .chroma .si,:root:not([data-theme=light]) .chroma .sx,:root:not([data-theme=light]) .chroma .sr,:root:not([data-theme=light]) .chroma .s1,:root:not([data-theme=light]) .chroma .ss{color:#96d0ff}:root:not([data-theme=light]) .chroma .m,:root:not([data-theme=light]) .chroma .mb,:root:not([data-theme=light]) .chroma .mf,:root:not([data-theme=light]) .chroma .mh,:root:not([data-theme=light]) .chroma .mi,:root:not([data-theme=light]) .chroma .il,:root:not([data-theme=light]) .chroma .mo,:root:not([data-theme=light]) .chroma .no,:root:not([data-theme=light]) .chroma .nd,:root:not([data-theme=light]) .chroma .nt{color:#6cb6ff}:root:not([data-theme=light]) .chroma .na,:root:not([data-theme=light]) .chroma .nc,:root:not([data-theme=light]) .chroma .nn,:root:not([data-theme=light]) .chroma .nx,:root:not([data-theme=light]) .chroma .ge,:root:not([data-theme=light]) .chroma .go,:root:not([data-theme=light]) .chroma .p,:root:not([data-theme=light]) .chroma .o,:root:not([data-theme=light]) .chroma .ow,:root:not([data-theme=light]) .chroma .or,:root:not([data-theme=light]) .chroma .w{color:#e6edf3}:root:not([data-theme=light]) .chroma .ni,:root:not([data-theme=light]) .chroma .nb,:root:not([data-theme=light]) .chroma .nf,:root:not([data-theme=light]) .chroma .fm{color:#dcbdfb}:root:not([data-theme=light]) .chroma .nv,:root:not([data-theme=light]) .chroma .vc,:root:not([data-theme=light]) .chroma .vg,:root:not([data-theme=light]) .chroma .vi,:root:not([data-theme=light]) .chroma .vm{color:#f69d50}:root:not([data-theme=light]) .chroma .c,:root:not([data-theme=light]) .chroma .ch,:root:not([data-theme=light]) .chroma .cm,:root:not([data-theme=light]) .chroma .c1,:root:not([data-theme=light]) .chroma .cs,:root:not([data-theme=light]) .chroma .cp,:root:not([data-theme=light]) .chroma .cpf,:root:not([data-theme=light]) .chroma .bp{color:#768390}:root:not([data-theme=light]) .chroma .err{color:#ffdcd7;background-color:#67060c}:root:not([data-theme=light]) .chroma .gd{color:#ffdcd7;background-color:#67060c}:root:not([data-theme=light]) .chroma .gi{color:#aff5b4;background-color:#033a16}}.diagram{margin:2rem 0}.diagram svg{display:block;width:100%;height:auto}.diagram figcaption{color:var(--muted);font-size:.92rem;line-height:1.5;margin-top:.6rem;text-align:center}@media(min-width:1024px){body.page-section.section-posts{max-width:70rem}body.page-page.section-posts{max-width:52rem}.post-thumb{flex:0 0 350px}body.section-posts .diagram{width:min(1064px,calc(100vw - 2rem));position:relative;left:50%;transform:translateX(-50%)}}.comments{border-top:1px solid var(--line);margin-top:2.5rem;padding-top:1rem}.comments h2{margin:0 0 .75rem;font-size:1.3rem}