:root{--fg: #1a1a1a;--fg-muted: #525963;--fg-subtle: #6b7280;--bg: #ffffff;--bg-code: #f4f5f7;--bg-subtle: #f7f8fa;--accent: #1f5fd0;--accent-hover: #1749a8;--accent-soft: #eef3fc;--border: #e4e7eb;--border-strong: #c4c9d1;--radius: 6px;--radius-sm: 4px;--wrap: 68rem;--wrap-article: 62rem;--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace}@media(prefers-color-scheme:dark){:root{color-scheme:dark;--fg: #e6e8ec;--fg-muted: #9aa1ab;--fg-subtle: #858d99;--bg: #14161a;--bg-code: #1c1f24;--bg-subtle: #1a1d21;--accent: #5b8def;--accent-hover: #7ba5f5;--accent-soft: #1a2233;--border: #2a2e35;--border-strong: #3a3f48}.prose img,.figure-grid{background:var(--bg-subtle)}}*{box-sizing:border-box}html{font-size:17px;-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:5.5rem}body{margin:0;color:var(--fg);background:var(--bg);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans CJK SC,sans-serif;line-height:1.75;text-rendering:optimizeLegibility;-webkit-tap-highlight-color:transparent}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.wrap{max-width:var(--wrap);margin:0 auto;padding:0 1.5rem}.wrap-narrow{max-width:var(--wrap-article);margin:0 auto;padding:0 1.5rem}.site-header{border-bottom:1px solid var(--border);background:var(--bg);position:sticky;top:0;z-index:50;backdrop-filter:blur(8px)}.header-inner{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding-top:.85rem;padding-bottom:.85rem}.brand{display:flex;align-items:center;gap:.55rem;font-weight:700;font-size:1.05rem;color:var(--fg);text-decoration:none;letter-spacing:-.01em}.brand-mark{display:grid;place-items:center;width:1.75rem;height:1.75rem;border-radius:var(--radius-sm);background:var(--accent);color:#fff;font-size:.9rem;font-weight:700}.site-header nav{display:flex;gap:1.25rem;font-size:.95rem}.site-header nav a{color:var(--fg-muted);text-decoration:none;border-radius:var(--radius-sm);padding:.2rem .15rem;transition:color .15s ease,background .15s ease;touch-action:manipulation}.site-header nav a:hover{color:var(--accent);background:var(--accent-soft)}.skip-link{position:absolute;left:0;top:.5rem;z-index:100;padding:.65rem 1rem;background:var(--accent);color:#fff;border-radius:var(--radius-sm);font-size:.9rem;text-decoration:none;opacity:0;transition:opacity .15s ease}.skip-link:focus{opacity:1}:where(a,button,summary,[tabindex]):focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-sm)}main{padding:3rem 0 5rem;min-height:60vh}.site-footer{border-top:1px solid var(--border);padding:2rem 0;color:var(--fg-subtle);font-size:.85rem}.site-footer p{margin:.3rem 0}.footer-inner{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}.footer-links{display:flex;gap:1rem}.site-footer a{color:var(--fg-subtle);text-decoration:none}.site-footer a:hover{color:var(--accent)}h1,h2,h3,h4{line-height:1.3;font-weight:700;letter-spacing:-.015em}h1{font-size:2.5rem;margin:0 0 .75rem;text-wrap:balance}h2{font-size:1.75rem;margin:3rem 0 1rem;text-wrap:balance}h3{font-size:1.25rem;margin:2.25rem 0 .75rem;text-wrap:balance}h4{font-size:1.05rem;margin:1.5rem 0 .5rem}p{margin:.9rem 0;text-wrap:pretty}a{color:var(--accent);text-decoration-thickness:1px;text-underline-offset:2px}a:hover{color:var(--accent-hover)}ul,ol{padding-left:1.5rem}li{margin:.35rem 0}hr{border:0;border-top:1px solid var(--border);margin:3rem 0}blockquote{margin:1.5rem 0;padding:.3rem 0 .3rem 1.25rem;border-left:3px solid var(--accent);color:var(--fg-muted)}img{max-width:100%;height:auto;border-radius:var(--radius)}.figure-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem 1rem;margin:1.25rem 0}.figure-grid>p{margin:0}.figure-grid img{width:100%;margin:0}@media(max-width:560px){.figure-grid{grid-template-columns:minmax(0,1fr)}}code{font-family:var(--font-mono);font-size:.85em;background:var(--bg-code);padding:.15em .4em;border-radius:var(--radius-sm)}pre{overflow-x:auto;max-width:100%;padding:1.1rem;background:var(--bg-code);border:1px solid var(--border);border-radius:var(--radius);line-height:1.6;font-size:.85rem}pre code{display:block;background:none;padding:0}table{width:100%;border-collapse:collapse;margin:1.5rem 0;font-size:.9rem;font-variant-numeric:tabular-nums}th,td{border:1px solid var(--border);padding:.55rem .75rem;text-align:left;vertical-align:top}th{background:var(--bg-subtle);font-weight:600}td code{font-size:.82em}@media(max-width:640px){.prose table{display:table;width:100%;overflow:visible}.prose .table-scroll{display:block;width:100%;max-width:100%;overflow-x:auto;margin:1.5rem 0;-webkit-overflow-scrolling:touch}.prose .table-scroll table{margin:0;min-width:34rem}}.hero{padding:3.5rem 0 3rem;border-bottom:1px solid var(--border);margin-bottom:3rem}.hero h1{font-size:3rem;margin-bottom:.85rem}.hero p{color:var(--fg-muted);font-size:1.15rem;max-width:46rem;line-height:1.7}.hero-cta{display:flex;gap:.85rem;margin-top:2rem;flex-wrap:wrap}.hero-cta a{display:inline-block;padding:.6rem 1.25rem;border:1px solid var(--border-strong);border-radius:var(--radius);text-decoration:none;color:var(--fg);font-size:.95rem;font-weight:500;transition:border-color .15s ease,color .15s ease,background .15s ease;touch-action:manipulation}.hero-cta a:hover{border-color:var(--accent);color:var(--accent)}.hero-cta a.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.hero-cta a.primary:hover{background:var(--accent-hover);color:#fff}.section-title{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin:0 0 1.25rem}.section-title h2{margin:0;font-size:1.5rem}.section-title a{font-size:.875rem;font-weight:400;color:var(--fg-subtle);text-decoration:none;white-space:nowrap}.section-title a:hover{color:var(--accent)}.post-list{list-style:none;padding:0;margin:0}.post-item{padding:1.5rem 0;border-bottom:1px solid var(--border);transition:background .15s ease}.post-item:hover{background:var(--bg-subtle);margin-inline:-1.5rem;padding-inline:1.5rem}.post-item h3{margin:0 0 .4rem;font-size:1.2rem}.post-item h3 a{color:var(--fg);text-decoration:none}.post-item h3 a:hover{color:var(--accent)}.post-meta{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center;color:var(--fg-subtle);font-size:.8rem;font-family:var(--font-mono);margin:0 0 .55rem}.post-item .excerpt{margin:0;color:var(--fg-muted);font-size:.95rem;text-wrap:pretty}.tag{display:inline-block;padding:.1rem .5rem;margin:.1rem;border:1px solid var(--border);border-radius:var(--radius-sm);font-size:.75rem;font-family:var(--font-mono);color:var(--fg-subtle);text-decoration:none;transition:border-color .15s ease,color .15s ease;touch-action:manipulation}.tag:hover{border-color:var(--accent);color:var(--accent)}a.tag{color:var(--fg-muted)}a.tag:hover{color:var(--accent)}.article-layout{max-width:66rem;margin-inline:auto;padding-inline:1.5rem;display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:3rem;align-items:start}.article-main{min-width:0}.article-main article{max-width:46rem}.article-header{margin-bottom:2.5rem}.article-header h1{font-size:2.25rem;margin-bottom:.7rem}.article-meta{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center;color:var(--fg-subtle);font-size:.85rem;font-family:var(--font-mono)}.updated-note{display:inline-block;margin-top:.6rem;padding:.2rem .6rem;border-radius:var(--radius-sm);background:var(--bg-subtle);font-size:.8rem;font-family:var(--font-mono);color:var(--fg-muted)}.article-accent{position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--accent);border-radius:0 var(--radius-sm) var(--radius-sm) 0}.prose{line-height:1.85}.prose a{overflow-wrap:anywhere}.prose>:first-child{margin-top:0}.prose h2{padding-top:.5rem;scroll-margin-top:5.5rem}.prose h3{scroll-margin-top:5.5rem}.prose p,.prose ul,.prose ol{margin:1rem 0}.answer-block{margin:2rem 0;padding:1.25rem 1.5rem;background:var(--accent-soft);border-left:3px solid var(--accent);border-radius:0 var(--radius) var(--radius) 0;position:relative}.answer-block>:first-child{margin-top:0}.answer-block>:last-child{margin-bottom:0}.answer-block__label{display:block;font-size:.68rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;font-family:var(--font-mono);color:var(--accent);margin-bottom:.5rem}.faq{margin:3rem 0 0;padding-top:2rem;border-top:1px solid var(--border)}.faq h2{margin-top:0}.faq details{border:1px solid var(--border);border-radius:var(--radius);padding:.9rem 1.1rem;margin-bottom:.7rem;background:var(--bg);transition:border-color .15s ease}.faq details:hover{border-color:var(--border-strong)}.faq summary{cursor:pointer;font-weight:600;list-style-position:outside;touch-action:manipulation}.faq summary:hover{color:var(--accent)}.faq details p{margin:.7rem 0 0;color:var(--fg-muted);font-size:.95rem}.howto{margin:2.5rem 0;padding:1.5rem;background:var(--bg-subtle);border-radius:var(--radius)}.howto h2{margin-top:0;font-size:1.2rem}.howto ol{margin-bottom:0}.howto li{margin:.6rem 0}.author-link{color:var(--fg-muted);text-decoration:none;font-family:var(--font-mono)}.author-link:hover{color:var(--accent);text-decoration:underline}.reading-time{color:var(--fg-subtle)}.related-posts{margin-top:3.5rem;padding-top:2rem;border-top:1px solid var(--border)}.related-posts h2{margin-top:0;font-size:1.25rem}.related-list{list-style:none;padding:0;margin:0}.related-list li{margin:0 0 1.1rem;padding:0 0 1.1rem;border-bottom:1px solid var(--border)}.related-list li:last-child{margin-bottom:0;padding-bottom:0;border-bottom:0}.related-list a{font-weight:600;color:var(--fg);text-decoration:none}.related-list a:hover{color:var(--accent)}.related-excerpt{margin:.3rem 0 .2rem;color:var(--fg-muted);font-size:.92rem}.related-list time{color:var(--fg-subtle);font-size:.8rem;font-family:var(--font-mono)}.post-nav{display:flex;justify-content:space-between;gap:1rem;margin-top:4rem;padding-top:2rem;border-top:1px solid var(--border);font-size:.95rem}.breadcrumb{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;font-size:.8rem;color:var(--fg-subtle);margin-bottom:1.5rem}.breadcrumb a{color:var(--fg-subtle);text-decoration:none}.breadcrumb a:hover{color:var(--accent)}.breadcrumb a+a:before,.breadcrumb a+span:before{content:"/";margin-right:.5rem;color:var(--border-strong)}.breadcrumb span[aria-current]{color:var(--fg-muted)}.toc{position:sticky;top:5.5rem;max-height:calc(100vh - 7rem);overflow-y:auto;overscroll-behavior:contain;padding:1.5rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);font-size:.875rem}.toc-title{font-size:.75rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--fg-subtle);margin:0 0 1rem;font-family:var(--font-mono)}.toc-list{list-style:none;padding:0;margin:0}.toc-list li{margin:.5rem 0}.toc-list a{color:var(--fg-muted);text-decoration:none;border-left:2px solid transparent;padding:.2rem 0 .2rem .6rem;display:block;transition:color .15s ease,border-color .15s ease}.toc-list a:hover{color:var(--accent);border-left-color:var(--accent)}.toc-list .toc-h3{padding-left:1.2rem;font-size:.8rem}.topic-cloud{display:flex;flex-wrap:wrap;gap:.5rem;list-style:none;padding:0;margin:0}.topic-cloud a{display:inline-block;padding:.35rem .85rem;border:1px solid var(--border);border-radius:999px;text-decoration:none;color:var(--fg-muted);font-size:.9rem;transition:border-color .15s ease,color .15s ease,background .15s ease;touch-action:manipulation}.topic-cloud a:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.empty{padding:3rem 0;text-align:center;color:var(--fg-muted)}.about-grid{display:grid;grid-template-columns:1fr 1fr;gap:2.5rem;margin-top:2rem}.about-card{padding:1.5rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg)}.about-card h3{margin-top:0}.about-card ul{margin:.5rem 0 0}@media(max-width:1024px){.article-layout{grid-template-columns:minmax(0,1fr) 220px;gap:2rem}}@media(max-width:900px){.article-layout{grid-template-columns:1fr}.toc{display:none}html{font-size:16px}h1{font-size:2rem}.hero h1{font-size:2.4rem}.about-grid{grid-template-columns:1fr}}@media(max-width:640px){html{font-size:15.5px}h1{font-size:1.7rem}.hero h1{font-size:2rem}.hero{padding:2.5rem 0 2rem}.header-inner{flex-wrap:wrap}.site-header nav{gap:.85rem;font-size:.88rem}.site-header nav a{padding:.65rem .6rem;margin:-.65rem -.6rem;min-width:44px;text-align:center}.brand{padding:.5rem 0}.post-nav{flex-direction:column}.post-item{min-width:0}.section-title a{display:none}}
