:root{--bg:#f3eee3;--surface:#faf7f0;--ink:#3b2f24;--muted:#7f7262;--faint:#a89a86;--line:#e0d6c3;--wood:#94643a;--moss:#56703f;--moss-soft:#e4e8d6;--bird-1:#94643a;--bird-2:#5f8299;--bird-3:#b9823a;--bird-4:#a85b45;--serif:"Noto Serif SC", "Source Han Serif SC", "Songti SC", "STSong", "SimSun", serif;--sans:-apple-system, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif;--mono:ui-monospace, "Cascadia Mono", Consolas, monospace}@media(prefers-color-scheme:dark){:root{--bg:#1c1915;--surface:#25211b;--ink:#ebe3d3;--muted:#a39782;--faint:#7c715f;--line:#3a3329;--wood:#cf9f6b;--moss:#a3bb84;--moss-soft:#2b3123;--bird-1:#cf9f6b;--bird-2:#8fb0c6;--bird-3:#d9ae6a;--bird-4:#d08a73;color-scheme:dark}}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.85 var(--sans);overflow-x:hidden}a{color:var(--moss);text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:3px}a:focus-visible{outline:2px solid var(--wood);outline-offset:2px;border-radius:2px}.wrap{position:relative;z-index:0;max-width:680px;margin:0 auto;padding:0 20px}.topbar{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:8px 20px;padding:22px 0 0}.topbar .brand.small{margin-right:auto}.nav{display:flex;align-items:center;flex-wrap:wrap;gap:4px 18px;font-size:14px}.nav a{color:var(--muted)}.nav a:hover{color:var(--moss);text-decoration:none}.nav a[aria-current=page]{color:var(--ink)}.nav-sep{width:1px;height:12px;background:var(--line)}.nav a.nav-svc{color:var(--faint);font-size:13px}.nav a.nav-svc:hover{color:var(--moss)}.brand{display:inline-flex;align-items:center;gap:14px;color:var(--ink)}.brand:hover{text-decoration:none}.bird{width:56px;height:56px;flex:none;color:var(--wood)}.bird-perch{stroke:var(--moss)}.brand-name{font:600 32px/1.3 var(--serif);letter-spacing:.08em}.brand.small{gap:10px}.brand.small .bird{width:30px;height:30px}.brand.small .brand-name{font-size:17px}.site-head{position:relative;padding:64px 0 48px}.tagline{margin:18px 0 0;color:var(--muted);font-size:15px;letter-spacing:.04em}.branch-bg{position:absolute;z-index:-1;right:-130px;top:8px;width:580px;height:auto;opacity:.6;pointer-events:none}.b-line{stroke:var(--moss)}.b-commit{fill:var(--bg)}.b1{color:var(--bird-1)}.b2{color:var(--bird-2)}.b3{color:var(--bird-3)}.b4{color:var(--bird-4)}section{padding:28px 0;border-top:1px solid var(--line)}section.first{border-top:0;padding-top:24px}h2{margin:0 0 14px;font:600 13px/1.6 var(--sans);color:var(--muted);letter-spacing:.24em}.page-title{margin:0 0 20px;font:600 24px/1.4 var(--serif)}p{margin:0 0 1em}.posts{list-style:none;margin:0;padding:0}.posts li{display:flex;gap:24px;padding:7px 0;align-items:baseline}.posts time{flex:none;width:92px;color:var(--muted);font-size:14px;font-variant-numeric:tabular-nums}.posts a{color:var(--ink)}.posts a:hover{color:var(--moss)}.posts .empty{color:var(--muted)}.tags{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px 16px}.tags .count{margin-left:4px;color:var(--muted);font-size:13px}article{padding-top:32px}article h1{margin:0 0 6px;font:600 28px/1.4 var(--serif);text-wrap:balance}article .meta{color:var(--muted);font-size:14px;margin-bottom:28px;display:flex;flex-wrap:wrap;gap:4px 16px}.meta-tags a{margin-right:10px}.content h2,.content h3{color:var(--ink);letter-spacing:0;font-family:var(--serif)}.content h2{margin:2em 0 .6em;font-size:21px;line-height:1.5}.content h3{margin:1.6em 0 .5em;font-size:18px}.content blockquote{margin:1.2em 0;padding:2px 0 2px 18px;border-left:3px solid var(--moss);color:var(--muted)}.content img{display:block;max-width:100%;height:auto;margin:1.4em auto;border-radius:6px}.content figure{margin:1.4em 0}.content figure img{margin:0 auto}.content figcaption{margin-top:6px;text-align:center;color:var(--muted);font-size:14px}.content hr{border:0;border-top:1px solid var(--line);margin:2em 0}.content code{font:.9em var(--mono);background:var(--surface);border:1px solid var(--line);border-radius:4px;padding:0 4px}.content pre{background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:12px 14px;overflow-x:auto;line-height:1.6}.content pre code{background:0 0;border:0;padding:0}.content table{border-collapse:collapse;margin:1.2em 0;font-size:15px;display:block;overflow-x:auto}.content th,.content td{border:1px solid var(--line);padding:6px 10px;text-align:left}.content th{background:var(--surface)}.toc{margin:0 0 28px;padding:10px 16px 12px;border-left:2px solid var(--line);font-size:14px}.toc-title{color:var(--muted);font-size:12px;letter-spacing:.24em;margin-bottom:2px}.toc ul{list-style:none;margin:0;padding-left:0}.toc ul ul{padding-left:1.2em}.toc a{color:var(--ink)}.toc a:hover{color:var(--moss)}.pager{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:48px;padding-top:20px;border-top:1px solid var(--line)}.pager a{display:block;min-width:0;color:var(--ink);line-height:1.6}.pager a:hover{color:var(--moss);text-decoration:none}.pager a span{display:block;color:var(--muted);font-size:13px}.pager .newer{grid-column:2;text-align:right}.site-foot{margin-top:64px;padding:28px 0 48px;border-top:1px solid var(--line);color:var(--muted);font-size:13px;line-height:2}.site-foot a{color:var(--muted)}.site-foot a:hover{color:var(--moss)}.site-foot .sep{margin:0 8px;opacity:.5}@media(max-width:520px){.wrap{padding:0 16px}.site-head{padding:48px 0 104px}.branch-bg{width:360px;right:-80px;top:auto;bottom:0;opacity:.5}.brand-name{font-size:25px}.bird{width:46px;height:46px}.posts li{flex-direction:column;gap:0;padding:9px 0}.pager{grid-template-columns:1fr}.pager .newer{grid-column:1}}.content .links{list-style:none;display:flex;flex-wrap:wrap;gap:10px;margin:1.4em 0;padding:0}.content .links li{margin:0}.links a{display:inline-flex;align-items:center;gap:7px;padding:5px 14px 5px 11px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:14px;line-height:1.5;transition:color .15s,border-color .15s}.links a:hover{color:var(--moss);border-color:var(--moss);text-decoration:none}.icon{display:inline-flex;width:17px;height:17px;flex:none}.icon svg{width:100%;height:100%}.content .links img.icon{display:block;margin:0;border-radius:0}.links img.icon{filter:grayscale(1);opacity:.7;transition:filter .15s,opacity .15s}.links a:hover img.icon{filter:none;opacity:1}@media(prefers-color-scheme:dark){.links img.icon{filter:grayscale(1)brightness(1.7)}.links img.icon.mono{filter:invert(1)grayscale(1)}.links a:hover img.icon.mono{filter:invert(1)}}