:root{--bg:#f4f8fb;--surface:#fff;--text:#1a2633;--muted:#5a6b7c;--border:#d8e3ec;--accent:#23628f;--accent-strong:#174a6e;--accent-soft:#e2eff8;--code-bg:#f1f5f9;--mark:#fff3c4;--shadow:0 1px 2px #1028400f, 0 4px 16px #1028400f;--banner-shade:linear-gradient(180deg, #08182840, #08182899);--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "Source Han Sans SC", sans-serif;--font-mono:ui-monospace, SFMono-Regular, "JetBrains Mono", Menlo, Consolas, "Liberation Mono", monospace;--measure:46rem;--radius:10px;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0c151e;--surface:#121e2a;--text:#dbe5ee;--muted:#92a4b6;--border:#22364a;--accent:#7cc3ee;--accent-strong:#a8d8f6;--accent-soft:#16304a;--code-bg:#0f1b26;--mark:#4a3f10;--shadow:0 1px 2px #0000004d, 0 4px 16px #00000040;--banner-shade:linear-gradient(180deg, #040a1273, #040a12cc);color-scheme:dark}}:root[data-theme=dark]{--bg:#0c151e;--surface:#121e2a;--text:#dbe5ee;--muted:#92a4b6;--border:#22364a;--accent:#7cc3ee;--accent-strong:#a8d8f6;--accent-soft:#16304a;--code-bg:#0f1b26;--mark:#4a3f10;--shadow:0 1px 2px #0000004d, 0 4px 16px #00000040;--banner-shade:linear-gradient(180deg, #040a1273, #040a12cc);color-scheme:dark}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:4.5rem}body{background:var(--bg);color:var(--text);font:16px/1.8 var(--font-sans);overflow-wrap:break-word;margin:0}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-strong);text-decoration:underline}img{max-width:100%;height:auto}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.wrap{width:100%;max-width:72rem;margin:0 auto;padding:0 16px}.measure{max-width:var(--measure);margin:0 auto}.site-header{z-index:20;background:color-mix(in srgb, var(--surface) 88%, transparent);backdrop-filter:saturate(140%)blur(10px);border-bottom:1px solid var(--border);position:sticky;top:0}.site-header .wrap{align-items:center;gap:1rem;height:3.5rem;display:flex}.brand{color:var(--text);white-space:nowrap;align-items:center;gap:.5rem;font-weight:650;display:flex}.brand:hover{color:var(--accent);text-decoration:none}.brand img{border-radius:50%;width:30px;height:30px}.nav{scrollbar-width:none;align-items:center;gap:.25rem;margin-left:auto;display:flex;overflow-x:auto}.nav a,.icon-btn{color:var(--muted);white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:8px;align-items:center;gap:.3rem;padding:.3rem .6rem;font-family:inherit;font-size:.95rem;display:inline-flex}.nav a:hover,.icon-btn:hover,.nav a[aria-current=page]{color:var(--accent);background:var(--accent-soft);text-decoration:none}.icon-btn svg,.nav svg{width:18px;height:18px}@media (width<=640px){.nav .nav-cat,.brand span{display:none}}.banner{color:#fff;isolation:isolate;position:relative;overflow:hidden}.banner>img.banner-bg{object-fit:cover;z-index:-2;width:100%;height:100%;position:absolute;inset:0}.banner:before{content:"";background:var(--banner-shade);z-index:-1;position:absolute;inset:0}.banner a{color:#fff}.hero{text-align:center;padding:4rem 0 3.5rem}.hero .avatar{border:3px solid #ffffffd9;border-radius:50%;width:112px;height:112px;box-shadow:0 6px 24px #00000059}.hero h1{letter-spacing:.08em;text-shadow:0 2px 8px #0006;margin:.8rem 0 .2rem;font-size:2rem}.hero p{opacity:.92;text-shadow:0 1px 4px #0006;margin:0 0 1.2rem}.hero p.visits{opacity:.8;font-variant-numeric:tabular-nums;margin-top:-.8rem;font-size:.85rem}.page-banner{padding:2.5rem 0 2rem}.page-banner h1{text-shadow:0 2px 8px #0006;margin:0;font-size:clamp(1.5rem,4vw,2.1rem);line-height:1.35}.page-banner .meta{opacity:.95;flex-wrap:wrap;gap:.3rem 1rem;margin-top:.6rem;font-size:.92rem;display:flex}.page-banner .meta a:not(.tag){text-underline-offset:3px;text-decoration:underline}.social{flex-wrap:wrap;justify-content:center;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.social a{background:#ffffff24;border:1px solid #ffffff40;border-radius:50%;justify-content:center;align-items:center;width:36px;height:36px;transition:background .15s;display:inline-flex}.social a:hover{background:#ffffff4d}.social svg{fill:currentColor;width:18px;height:18px}main{min-height:50vh;padding:2rem 0 3rem}.site-footer{border-top:1px solid var(--border);color:var(--muted);text-align:center;padding:1.5rem 0 2rem;font-size:.9rem}.site-footer p{margin:.2rem 0}.section-title{justify-content:space-between;align-items:baseline;gap:1rem;margin:2rem 0 1rem;display:flex}.section-title h2{margin:0;font-size:1.25rem}.cards{grid-template-columns:repeat(auto-fill,minmax(min(100%,20rem),1fr));gap:1rem;display:grid}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);color:var(--text);padding:1rem 1.1rem;display:block}.card:hover{border-color:var(--accent);text-decoration:none}.card h3{color:var(--text);margin:0 0 .35rem;font-size:1.05rem;line-height:1.45}.card:hover h3{color:var(--accent)}.card p{color:var(--muted);margin:.4rem 0 0;font-size:.9rem;line-height:1.6}.card .meta,.post-list .meta{color:var(--muted);font-size:.85rem}.category-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,14rem),1fr));gap:1rem;display:grid}.category-grid .card strong{color:var(--text);font-size:1.1rem;display:block}.category-grid .card span{color:var(--muted);font-size:.9rem}.post-list{margin:0;padding:0;list-style:none}.post-list li{border-bottom:1px dashed var(--border);align-items:baseline;gap:1rem;padding:.55rem 0;display:flex}.post-list time{width:6.2rem;color:var(--muted);font-variant-numeric:tabular-nums;flex:none;font-size:.9rem}.post-list a{color:var(--text)}.post-list a:hover{color:var(--accent)}.year{color:var(--accent);margin:2rem 0 .3rem;font-size:1.15rem}@media (width<=520px){.post-list li{flex-direction:column;gap:0}}.tag,.chip{background:var(--accent-soft);color:var(--accent);white-space:nowrap;border:1px solid #0000;border-radius:999px;padding:.05rem .55rem;font-size:.82rem;line-height:1.7;display:inline-block}.tag:hover{border-color:var(--accent);text-decoration:none}.tag .count{color:var(--muted);margin-left:.2rem}.tag-cloud{flex-wrap:wrap;gap:.45rem;display:flex}.banner .tag{color:#fff;background:#ffffff2e}.post-grid{grid-template-columns:minmax(0, var(--measure));justify-content:center;gap:2.5rem;display:grid}@media (width>=1180px){.post-grid.has-toc{grid-template-columns:minmax(0, var(--measure)) 15rem}}.toc{display:none}@media (width>=1180px){.toc{align-self:start;max-height:calc(100vh - 6rem);font-size:.86rem;display:block;position:sticky;top:4.5rem;overflow:auto}.toc h2{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:0 0 .5rem;font-size:.8rem}.toc ol{border-left:2px solid var(--border);margin:0;padding:0;list-style:none}.toc li a{color:var(--muted);padding:.18rem 0 .18rem .8rem;line-height:1.45;display:block}.toc li.depth-3 a{padding-left:1.6rem}.toc li a:hover{color:var(--accent);text-decoration:none}}.prose{font-size:1.02rem}.prose>:first-child{margin-top:0}.prose h2,.prose h3,.prose h4,.prose h5,.prose h6{margin:2.2rem 0 .8rem;line-height:1.4}.prose h2{border-bottom:1px solid var(--border);padding-bottom:.3rem;font-size:1.5rem}.prose h3{font-size:1.25rem}.prose h4{font-size:1.1rem}.prose h5,.prose h6{font-size:1rem}.prose p,.prose ul,.prose ol,.prose blockquote,.prose pre,.prose table{margin:0 0 1.1rem}.prose li+li{margin-top:.2rem}.prose blockquote{border-left:4px solid var(--accent);background:var(--accent-soft);color:var(--text);border-radius:0 8px 8px 0;margin-left:0;padding:.6rem 1rem}.prose blockquote>:last-child{margin-bottom:0}.prose hr{border:0;border-top:1px solid var(--border);margin:2rem 0}.prose img{cursor:zoom-in;border-radius:6px;margin:1rem auto;display:block}.prose table{border-collapse:collapse;max-width:100%;font-size:.92rem;display:block;overflow-x:auto}.prose th,.prose td{border:1px solid var(--border);text-align:left;vertical-align:top;padding:.4rem .7rem}.prose th{background:var(--code-bg)}.prose code{font-family:var(--font-mono);font-size:.88em}.prose :not(pre)>code{background:var(--code-bg);border:1px solid var(--border);border-radius:5px;padding:.05em .35em}.prose mark{background:var(--mark);color:inherit}.prose pre{border:1px solid var(--border);border-radius:8px;padding:.9rem 1rem;font-size:.88rem;line-height:1.6;position:relative;overflow-x:auto;background-color:var(--code-bg)!important}.prose pre code{background:0 0;border:0;padding:0}.astro-code,.astro-code span{color:var(--shiki-light)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .astro-code,:root:not([data-theme=light]) .astro-code span{color:var(--shiki-dark)}}:root[data-theme=dark] .astro-code,:root[data-theme=dark] .astro-code span{color:var(--shiki-dark)}.copy-btn{font-size:.75rem;font-family:var(--font-sans);border:1px solid var(--border);background:var(--surface);color:var(--muted);cursor:pointer;opacity:0;border-radius:6px;padding:.15rem .5rem;position:absolute;top:.4rem;right:.4rem}.prose pre:hover .copy-btn,.copy-btn:focus-visible{opacity:1}@media (hover:none){.copy-btn{opacity:1}}.katex-display{padding:.2rem 0;overflow:auto hidden}.post-foot{border-top:1px solid var(--border);gap:1.2rem;margin-top:2.5rem;padding-top:1.2rem;display:grid}.post-foot .source{color:var(--muted);font-size:.9rem}.pager{grid-template-columns:1fr 1fr;gap:1rem;display:grid}.pager a{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);padding:.8rem 1rem;display:block}.pager a:hover{border-color:var(--accent);text-decoration:none}.pager small{color:var(--muted);display:block}.pager .next{text-align:right;grid-column:2}@media (width<=520px){.pager{grid-template-columns:1fr}.pager .next{grid-column:1}}dialog.zoom{background:0 0;border:0;max-width:96vw;max-height:96vh;padding:0}dialog.zoom::backdrop{background:#000c}dialog.zoom img{cursor:zoom-out;max-width:96vw;max-height:96vh;display:block}.search-page{--pagefind-ui-primary:var(--accent);--pagefind-ui-text:var(--text);--pagefind-ui-background:var(--surface);--pagefind-ui-border:var(--border);--pagefind-ui-tag:var(--accent-soft);--pagefind-ui-font:var(--font-sans)}
