:root{--brand:#1B365D;--brand-light:#2D5A8A;--bg:#f5f4ed;--bg-lifted:#faf9f5;--bg-sand:#e8e6dc;--text:#141413;--text-muted:#3d3d3a;--text-soft:#504e49;--text-meta:#6b6a64;--border:#e8e6dc;--border-soft:#e5e3d8;--tag-bg:#E4ECF5;--serif-en:"Charter", Georgia, Palatino, "Times New Roman", serif;--serif-cn:"Source Han Serif SC", "TsangerJinKai02",
              "Songti SC", "STSong", Georgia, serif;--serif:var(--serif-en);--sans:var(--serif);--mono:"JetBrains Mono", "SF Mono", "Fira Code",
              Consolas, Monaco,
              "Source Han Serif SC", monospace;--measure:38rem;--grid:8px}html[lang=en]{--serif:var(--serif-en)}html[lang=zh-Hans]{--serif:var(--serif-cn)}:root[data-theme=dark]{--brand:#5B8DCC;--brand-light:#7AA5DD;--bg:#141413;--bg-lifted:#1f1e1c;--bg-sand:#2a2926;--text:#ECEAE0;--text-muted:#C9C6B8;--text-soft:#9A968A;--text-meta:#6b6a64;--border:#2f2e2a;--border-soft:#2a2926;--tag-bg:#233447}*,*::before,*::after{box-sizing:border-box}html{background:var(--bg);color:var(--text);font-family:var(--serif);font-size:17px;line-height:1.65;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{margin:0;min-height:100vh}strong,b{font-weight:500}em,i{font-style:normal}h1,h2,h3,h4,h5,h6{font-family:var(--serif);font-weight:500;color:var(--text);margin:1.5em 0 .5em}h1{font-size:36px;line-height:1.15}h2{font-size:24px;line-height:1.25}h3{font-size:18px;line-height:1.3}p{margin:0 0 1em}a{color:var(--brand);text-decoration:none;border-bottom:1px solid;transition:color .15s ease}a:hover{color:var(--brand-light)}ul,ol{padding-left:1.5em}ul li::marker{color:var(--brand)}blockquote{margin:1em 0;padding:4px 0 4px 14px;border-left:2px solid var(--brand);color:var(--text-soft)}hr{border:0;border-top:.5px solid var(--border);margin:2em 0}img{max-width:100%;height:auto;display:block}::selection{background:var(--tag-bg);color:var(--text)}.external-marker{font-size:.8em;color:var(--text-meta);margin-left:1px}.error-page{max-width:var(--measure);margin:4rem auto;text-align:center}.error-page h1{font-size:96px;line-height:1;color:var(--brand);margin:0 0 1rem}.error-page p{font-size:17px;color:var(--text-soft)}.site-header{border-bottom:.5px solid var(--border);padding:24px 0;background:var(--bg)}.site-header__inner{max-width:64rem;margin:0 auto;padding:0 1.5rem;display:flex;justify-content:space-between;align-items:baseline;gap:1.5rem}.site-title{font-family:var(--serif);font-size:16px;font-weight:500;color:var(--text);border-bottom:none;letter-spacing:.3px}.site-title:hover{color:var(--brand)}.site-nav{display:flex;gap:1.25rem;font-size:11px;letter-spacing:1.2px;text-transform:uppercase}.site-nav a{color:var(--text-meta);border-bottom:none}.site-nav a:hover{color:var(--brand)}main{max-width:64rem;margin:0 auto;padding:3rem 1.5rem 5rem}.site-footer{border-top:.5px solid var(--border);padding:2rem 1.5rem 3rem;margin-top:4rem}.site-footer__inner{max-width:64rem;margin:0 auto;text-align:center;font-size:12px;line-height:1.55;color:var(--text-meta)}.site-footer__inner p{margin:0}.site-footer__sub{margin-top:4px !important}.site-footer a{color:var(--text-meta);border-bottom:none}.site-footer a:hover{color:var(--brand)}@media(max-width:560px){.site-header__inner{flex-direction:column;align-items:flex-start;gap:.75rem}main{padding:2rem 1.25rem 3rem}}.theme-toggle{background:0 0;border:none;padding:0;margin-left:.75rem;font-size:16px;color:var(--text-meta);cursor:pointer;line-height:1}.theme-toggle:hover{color:var(--brand)}.home{max-width:var(--measure);margin:0 auto}.year-group{margin-bottom:3rem}.year-label{font-family:var(--serif);font-size:11px;font-weight:500;letter-spacing:2px;text-transform:uppercase;color:var(--brand);margin:0 0 1rem;padding:0}.post-index{list-style:none;padding:0;margin:0}.post-row{display:grid;grid-template-columns:90px 1fr;gap:1rem;align-items:baseline;padding:.5rem 0}.post-date{font-family:var(--mono);font-size:11px;letter-spacing:.6px;color:var(--text-meta);text-transform:uppercase}.post-title{font-size:17px;font-weight:500;color:var(--text);border-bottom:none}.post-title:hover{color:var(--brand)}@media(max-width:560px){.post-row{grid-template-columns:1fr;gap:.25rem;padding:.5rem 0 .75rem}.post-date{font-size:12px}}.article{max-width:var(--measure);margin:0 auto}.article-header{margin-bottom:2rem}.article-eyebrow{font-family:var(--serif);font-size:11px;font-weight:500;letter-spacing:2px;text-transform:uppercase;color:var(--brand);margin-bottom:.5rem}.article-title{font-size:36px;line-height:1.15;margin:0 0 .5rem}.article-meta{font-family:var(--mono);font-size:11px;letter-spacing:.6px;color:var(--text-meta)}.article-body{font-size:17px;line-height:1.65}.article-body h2{font-size:24px;margin-top:2.5rem}.article-body h3{font-size:18px;margin-top:2rem}.article-body p{margin:0 0 1em}.article-grid{display:block}.article{margin:0 auto}.article-toc{margin:1.5rem 0;font-size:14px;color:var(--text-soft)}.article-toc summary{font-family:var(--serif);font-size:11px;font-weight:500;letter-spacing:1.5px;text-transform:uppercase;color:var(--brand);cursor:pointer;margin-bottom:.5rem}.article-toc nav ul{list-style:none;padding:0;margin:0}.article-toc nav ul ul{padding-left:1rem;margin:.25rem 0}.article-toc nav li{margin:.25rem 0;line-height:1.4}.article-toc nav a{color:var(--text-soft);border-bottom:none}.article-toc nav a:hover,.article-toc nav a.active{color:var(--brand)}@media(min-width:1024px){.article-grid{display:grid;grid-template-columns:1fr var(--measure)1fr 16rem 1fr;column-gap:0;align-items:start}.article{grid-column:2/3;margin:0}.article-toc{grid-column:4/5;position:sticky;top:6rem;margin-top:0;max-height:calc(100vh - 8rem);overflow-y:auto;border-left:1px solid var(--border);padding-left:1rem}.article-toc summary{list-style:none}.article-toc summary::-webkit-details-marker{display:none}}.article-footer{margin-top:4rem;padding-top:2rem;border-top:.5px solid var(--border)}.article-tags{font-size:13px;color:var(--text-soft);margin-bottom:2rem;display:flex;align-items:baseline;flex-wrap:wrap;gap:.75rem}.article-tags__label{font-family:var(--mono);font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--brand)}.article-tags ul{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:.5rem}.article-tags a{background:var(--tag-bg);color:var(--brand);font-size:11px;font-weight:500;letter-spacing:.4px;text-transform:uppercase;padding:2px 8px;border-radius:3px;border-bottom:none}.article-nav{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem;margin-top:2rem;font-size:14px}.article-nav__cell--right{text-align:right}.article-nav__link{display:block;border-bottom:none;color:var(--text-soft)}.article-nav__link:hover{color:var(--brand)}.article-nav__link:hover .article-nav__title{color:var(--brand)}.article-nav__label{display:block;font-family:var(--mono);font-size:10px;letter-spacing:1px;text-transform:uppercase;color:var(--text-meta);margin-bottom:4px}.article-nav__title{display:block;color:var(--text);font-weight:500;line-height:1.3}.article-body sup a,.footnote-ref a{color:var(--brand);border-bottom:none;font-family:var(--mono);font-size:.75em;padding:0 2px}.footnotes{margin-top:3rem;padding-top:1rem;border-top:.5px solid var(--border);font-size:14px;line-height:1.55;color:var(--text-soft)}.footnotes ol{padding-left:1.25rem}.footnotes li{margin:.5rem 0}.footnotes li::marker{color:var(--brand)}@media(max-width:560px){.article-nav{grid-template-columns:1fr}.article-nav__cell--right{text-align:left}}.lang-switch{margin:0 0 2rem;font-size:13px}.lang-switch a{font-family:var(--mono);font-size:11px;letter-spacing:1px;text-transform:uppercase;color:var(--brand);border-bottom:none}.lang-switch a:hover{color:var(--brand-light)}.code-block{margin:1.5rem 0;position:relative}.code-block>.highlight{background:var(--bg-lifted);border:.5px solid var(--border);border-radius:6px;overflow:hidden}.code-block pre{margin:0;padding:12px 16px;font-family:var(--mono);font-size:14px;line-height:1.55;color:var(--text);overflow-x:auto}.code-block code{font-family:inherit;font-size:inherit;background:0 0;padding:0}:not(pre)>code{font-family:var(--mono);font-size:.9em;background:var(--bg-lifted);border:.5px solid var(--border);border-radius:3px;padding:1px 5px}.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt,.highlight .o,.highlight .ow,.highlight .nb{color:var(--brand)}.highlight .s,.highlight .s1,.highlight .s2,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .se,.highlight .sh,.highlight .si,.highlight .sx{color:var(--text-muted)}.highlight .c,.highlight .c1,.highlight .cm,.highlight .cp,.highlight .cs{color:var(--text-meta);font-style:normal}.highlight .nf,.highlight .nc,.highlight .nn,.highlight .nd{color:var(--text);font-weight:500}.highlight .mi,.highlight .mf,.highlight .mh,.highlight .mo,.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi{color:var(--text)}.highlight em,.highlight i,.highlight .ge{font-style:normal}.code-block{position:relative}.copy-btn{position:absolute;top:8px;right:8px;background:var(--bg-sand);color:var(--text-soft);border:.5px solid var(--border);border-radius:3px;font-family:var(--mono);font-size:10px;letter-spacing:.6px;text-transform:uppercase;padding:2px 8px;cursor:pointer;opacity:0;transition:opacity .15s ease,color .15s ease}.code-block:hover .copy-btn,.copy-btn:focus{opacity:1}.copy-btn:hover{color:var(--brand)}.copy-btn--done{color:var(--brand);opacity:1}@media(hover:none){.copy-btn{opacity:1}}.tags-index{max-width:var(--measure);margin:0 auto}.tags-index__title{font-size:36px;margin:0 0 2rem}.tags-index__list{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:1rem 1.5rem}.tags-index__list li{font-size:17px}.tags-index__list a{color:var(--text);border-bottom:none;font-weight:500}.tags-index__list a:hover{color:var(--brand)}.tags-index__count{color:var(--text-meta);font-family:var(--mono);font-size:12px;margin-left:4px}.term-header{margin-bottom:2rem}.term-eyebrow{font-family:var(--serif);font-size:11px;font-weight:500;letter-spacing:2px;text-transform:uppercase;color:var(--brand);margin-bottom:.5rem}.term-name{font-size:36px;line-height:1.15;margin:0 0 .5rem}.term-count{font-family:var(--mono);font-size:11px;color:var(--text-meta)}