:root{--ef-bg-dim: #1c1a17;--ef-bg0: #26231f;--ef-bg1: #2d2a25;--ef-bg2: #34302a;--ef-bg3: #3c3730;--ef-bg4: #453f37;--ef-bg-visual: #3a3228;--ef-bg-red: #3a2b26;--ef-bg-yellow: #362f22;--ef-bg-green: #2e3325;--ef-bg-blue: #253034;--ef-bg-purple: #322b34;--ef-fg: #d8cfc0;--ef-grey0: #776f61;--ef-grey1: #a39a8c;--ef-grey2: #beb4a4;--ef-red: #d9846f;--ef-orange: #d3a066;--ef-yellow: #cbb573;--ef-green: #a3b088;--ef-aqua: #8fb0a0;--ef-blue: #83a6c4;--ef-purple: #b39bcf}:root[data-theme=light]{--ef-bg-dim: #ece4d3;--ef-bg0: #f7f1e4;--ef-bg1: #f0e9da;--ef-bg2: #e9e1cd;--ef-bg3: #ddd3ba;--ef-bg4: #d0c4a8;--ef-bg-visual: #e6ddc4;--ef-bg-red: #f5e0da;--ef-bg-yellow: #f2e8c9;--ef-bg-green: #e8ecd6;--ef-bg-blue: #dfe9ec;--ef-bg-purple: #ece1ee;--ef-fg: #3d3a34;--ef-grey0: #9a9184;--ef-grey1: #656355;--ef-grey2: #5a5246;--ef-red: #a24632;--ef-orange: #805c1c;--ef-yellow: #71621b;--ef-green: #546935;--ef-aqua: #336c64;--ef-blue: #37648a;--ef-purple: #725693}:root{--color-bg: var(--ef-bg0);--color-bg-subtle: var(--ef-bg-dim);--color-surface: var(--ef-bg1);--color-surface-raised: var(--ef-bg2);--color-border: var(--ef-bg3);--color-border-strong: var(--ef-bg4);--color-text: var(--ef-fg);--color-text-muted: var(--ef-grey2);--color-text-faint: var(--ef-grey1);--color-link: var(--ef-fg);--color-link-hover: var(--ef-green);--color-accent: var(--ef-green);--color-accent-strong: var(--ef-aqua);--color-focus-ring: var(--ef-blue);--callout-note: var(--ef-blue);--callout-note-bg: var(--ef-bg-blue);--callout-tip: var(--ef-green);--callout-tip-bg: var(--ef-bg-green);--callout-important: var(--ef-purple);--callout-important-bg: var(--ef-bg-purple);--callout-warning: var(--ef-yellow);--callout-warning-bg: var(--ef-bg-yellow);--callout-caution: var(--ef-red);--callout-caution-bg: var(--ef-bg-red);--color-code-bg: var(--ef-bg1);--color-code-border: var(--ef-bg3);--color-inline-code-bg: var(--ef-bg2);--syntax-keyword: var(--ef-red);--syntax-string: var(--ef-green);--syntax-comment: var(--ef-grey1);--syntax-function: var(--ef-blue);--syntax-number: var(--ef-purple);--syntax-type: var(--ef-yellow);--syntax-operator: var(--ef-orange);--syntax-variable: var(--ef-fg);--syntax-builtin: var(--ef-aqua);--syntax-attr: var(--ef-yellow);--syntax-tag: var(--ef-red);--syntax-punctuation: var(--ef-grey2);--syntax-error: var(--ef-red)}*,*:before,*:after{box-sizing:border-box;transition:background-color .15s ease,border-color .15s ease,color .15s ease,fill .15s ease,stroke .15s ease}@font-face{font-family:"Emoji";src:local("Apple Color Emoji"),local("Segoe UI Emoji"),local("Noto Color Emoji");unicode-range:U+1F1E6-1F1FF,U+1F300-1FAFF,U+2600-27BF}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--color-bg);color:var(--color-text);font-family:"Emoji",Maple Mono CN,ui-monospace,Menlo,monospace;font-size:15px;line-height:1.65;-webkit-font-smoothing:antialiased}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition:none}}img,picture,svg{max-width:100%;display:block}a{color:var(--color-link);text-decoration:none}a:hover{color:var(--color-link-hover);text-decoration:underline}a:focus-visible,button:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px;border-radius:2px}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.3;color:var(--color-text);scroll-margin-top:5rem}code,kbd,pre,samp{font-family:Maple Mono CN,ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.875em}code{background:var(--color-inline-code-bg);border-radius:4px;padding:.15em .4em}pre code{background:none;padding:0}::selection{background:var(--color-accent);color:var(--color-bg-subtle)}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:1rem;height:3.5rem;padding:0 1.25rem;background:var(--color-bg);border-bottom:1px solid var(--color-border)}.topbar__brand{display:flex;align-items:center;gap:.5rem;font-weight:600;color:var(--color-text)}.topbar__brand:hover{color:var(--color-text);text-decoration:none}.topbar__actions{display:flex;align-items:center;gap:.5rem}.shell{display:grid;grid-template-columns:auto minmax(0,1fr);max-width:1400px;margin:0 auto;overflow-x:clip}.shell--no-sidebar{grid-template-columns:minmax(0,1fr)}.sidebar{width:260px;border-right:1px solid var(--color-border);padding:1.5rem 1rem;align-self:start;position:sticky;top:3.5rem;height:calc(100vh - 3.5rem);overflow-y:auto;transition:margin-left .2s ease,transform .2s ease,visibility 0s,background-color .15s ease,border-color .15s ease}.shell[data-sidebar-open=false] .sidebar{margin-left:-260px;visibility:hidden;transition:margin-left .2s ease,transform .2s ease,visibility 0s .2s,background-color .15s ease,border-color .15s ease}.content-column{min-width:0;padding:2.5rem 2rem 4rem;display:flex;justify-content:center}.content-column__inner{width:100%;max-width:720px}.toc{font-size:.85rem}.toc__title{font-weight:600;color:var(--color-text);margin:0 0 .5rem}.toc ul{list-style:none;margin:0;padding:0;border-left:1px solid var(--color-border)}.toc ul ul{margin-left:.75rem}.toc a{display:block;padding:.25rem 0 .25rem .75rem;color:var(--color-text-muted);border-left:2px solid transparent;margin-left:-1px}.toc a:hover{color:var(--color-text);text-decoration:none}.site-footer{border-top:1px solid var(--color-border);color:var(--color-text-muted);font-size:.875rem;padding:1.5rem 2rem;text-align:center}@media(max-width:900px){.shell{grid-template-columns:1fr}.sidebar{position:fixed;top:3.5rem;left:0;bottom:0;background:var(--color-bg);transform:translate(-100%);z-index:15}.shell[data-sidebar-open=false] .sidebar{margin-left:0}.shell[data-sidebar-open=true] .sidebar{transform:translate(0);box-shadow:2px 0 12px #00000040}.shell:before{content:"";position:fixed;inset:3.5rem 0 0;background:#00000059;opacity:0;pointer-events:none;transition:opacity .2s ease;z-index:14}.shell[data-sidebar-open=true]:before{opacity:1;pointer-events:auto}.content-column{padding:2rem 1.25rem 3rem}}@media(prefers-reduced-motion:reduce){.sidebar,.shell[data-sidebar-open=false] .sidebar{transition:none}}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border:1px solid var(--color-border);border-radius:6px;background:var(--color-surface);color:var(--color-text);cursor:pointer}.icon-btn:hover{background:var(--color-surface-raised)}.icon-btn svg{width:1.1rem;height:1.1rem}[data-theme=dark] .icon-btn .icon-sun,[data-theme=light] .icon-btn .icon-moon{display:none}.callout{display:flex;gap:.75rem;border-left:3px solid;border-radius:6px;padding:.85rem 1rem;margin:1.25rem 0}.callout__icon{flex:none;width:1.15rem;height:1.15rem;margin-top:.15rem}.callout__body>:first-child{margin-top:0}.callout__body>:last-child{margin-bottom:0}.callout__title{font-weight:600;margin-bottom:.25rem}.callout--note{border-color:var(--callout-note);background:var(--callout-note-bg)}.callout--note .callout__title,.callout--note .callout__icon{color:var(--callout-note)}.callout--tip{border-color:var(--callout-tip);background:var(--callout-tip-bg)}.callout--tip .callout__title,.callout--tip .callout__icon{color:var(--callout-tip)}.callout--important{border-color:var(--callout-important);background:var(--callout-important-bg)}.callout--important .callout__title,.callout--important .callout__icon{color:var(--callout-important)}.callout--warning{border-color:var(--callout-warning);background:var(--callout-warning-bg)}.callout--warning .callout__title,.callout--warning .callout__icon{color:var(--callout-warning)}.callout--caution{border-color:var(--callout-caution);background:var(--callout-caution-bg)}.callout--caution .callout__title,.callout--caution .callout__icon{color:var(--callout-caution)}.prose h1{font-size:2rem;margin:0 0 1rem}.prose h2{font-size:1.5rem;margin:2.25rem 0 1rem;padding-top:.25rem;border-top:1px solid var(--color-border)}.prose h2:first-child{border-top:none;padding-top:0;margin-top:0}.prose h3{font-size:1.2rem;margin:1.75rem 0 .75rem}.prose h4{font-size:1.05rem;margin:1.5rem 0 .5rem}.prose h5,.prose h6{font-size:.95rem;margin:1.25rem 0 .5rem;color:var(--color-text-muted)}.prose p{margin:1rem 0}.prose a{text-decoration:underline;text-underline-offset:2px;text-decoration-color:var(--color-border-strong)}.prose a:hover{text-decoration-color:currentColor}.prose a,.home-link a{border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone}.prose a:hover,.prose a:focus-visible,.home-link a:hover,.home-link a:focus-visible{background:var(--color-link-hover);color:var(--color-bg);text-decoration:none;outline:none}.prose ul,.prose ol{margin:1rem 0;padding-left:1.5rem}.prose li+li{margin-top:.25rem}.prose li>ul,.prose li>ol{margin:.25rem 0}.prose ul.contains-task-list,.prose li:has(>input[type=checkbox]){list-style:none}.prose li:has(>input[type=checkbox]){margin-left:-1.5rem;padding-left:0}.prose input[type=checkbox]{margin-right:.5rem;accent-color:var(--color-accent)}.prose blockquote{margin:1.25rem 0;padding:.1rem 1rem;border-left:3px solid var(--color-border-strong);color:var(--color-text-muted)}.prose blockquote blockquote{border-left-color:var(--color-border)}.prose blockquote>:first-child{margin-top:0}.prose blockquote>:last-child{margin-bottom:0}.prose hr{border:none;border-top:1px solid var(--color-border);margin:2.5rem 0}.prose table{width:100%;border-collapse:collapse;margin:1.25rem 0;font-size:.9rem;display:block;overflow-x:auto}.prose th,.prose td{border:1px solid var(--color-border);padding:.5rem .75rem;text-align:left}.prose th{background:var(--color-surface);font-weight:600}.prose tr:nth-child(2n) td{background:var(--color-bg-subtle)}.prose img{border-radius:8px;margin:1rem 0}.prose dl{margin:1.25rem 0}.prose dt{font-weight:600}.prose dd{margin:0 0 .75rem 1.25rem;color:var(--color-text-muted)}.prose sup,.prose sub{line-height:0}.prose .footnotes{margin-top:2.5rem;padding-top:1rem;border-top:1px solid var(--color-border);font-size:.875rem;color:var(--color-text-muted)}.prose .highlight{margin:1.25rem 0;border:1px solid var(--color-code-border);border-radius:8px;overflow:auto;background:var(--color-code-bg)}.prose .highlight pre{margin:0;padding:1rem 1.1rem;overflow-x:auto}.prose>.highlight:first-child{margin-top:0}.article-header{margin-bottom:2rem}.article-header h1{margin-bottom:.5rem}.article-header time{color:var(--color-text-muted);font-size:.9rem}.tags,.card__tags{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center;font-size:.875rem}.tags a,.card__tags a{padding:.2rem .6rem;border-radius:999px;background:var(--color-surface);color:var(--color-text-muted)}.tags a:hover,.card__tags a:hover{color:var(--color-text);text-decoration:none}.tags{margin-top:2rem;padding-top:1rem;border-top:1px solid var(--color-border)}.card__tags{margin-top:.5rem}.card-list{list-style:none;margin:0;padding:0}.card{padding:1.25rem 0;border-bottom:1px solid var(--color-border)}.card:first-child{padding-top:0}.card time{display:block;color:var(--color-text-muted);font-size:.85rem;margin-bottom:.3rem}.card h2{margin:0;font-size:1.15rem}.card__peek{margin:.35rem 0 0;color:var(--color-text-muted);font-size:.9rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.github-card{display:flex;gap:1rem;align-items:flex-start;padding:1.25rem;margin:1.5rem 0;border:1px solid var(--color-border);border-radius:10px;background:var(--color-surface);color:var(--color-text);text-decoration:none}.github-card:hover{border-color:var(--color-border-strong);color:var(--color-text);text-decoration:none}.github-card__avatar{border-radius:999px;flex:none}.github-card__body{min-width:0}.github-card__name{margin:0;font-weight:600}.github-card__login{margin:.15rem 0 0;color:var(--color-text-muted);font-size:.875rem}.github-card__bio{margin:.5rem 0 0;font-size:.9rem;color:var(--color-text)}.github-card__stats{display:flex;gap:1rem;margin-top:.6rem;font-size:.8rem;color:var(--color-text-muted)}.chroma{color:var(--color-text);background:transparent}.chroma .c,.chroma .c1,.chroma .cm,.chroma .cs,.chroma .cp,.chroma .cpf{color:var(--syntax-comment);font-style:italic}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .kt{color:var(--syntax-keyword)}.chroma .s,.chroma .s1,.chroma .s2,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .sr,.chroma .ss{color:var(--syntax-string)}.chroma .m,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .il{color:var(--syntax-number)}.chroma .nf,.chroma .fm{color:var(--syntax-function)}.chroma .nb,.chroma .bp{color:var(--syntax-builtin)}.chroma .nc,.chroma .kt+.nc,.chroma .nn{color:var(--syntax-type)}.chroma .nt{color:var(--syntax-tag)}.chroma .na{color:var(--syntax-attr)}.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi{color:var(--syntax-variable)}.chroma .o,.chroma .ow{color:var(--syntax-operator)}.chroma .p{color:var(--syntax-punctuation)}.chroma .gd{color:var(--callout-caution)}.chroma .gi{color:var(--callout-tip)}.chroma .gh,.chroma .gu{color:var(--syntax-comment)}.chroma .err{color:var(--syntax-error)}.chroma .lnt,.chroma .ln{color:var(--color-text-faint)}
