@font-face{font-family:BlogMono;src:url(/fonts/jetbrains-mono-normal.woff2) format("woff2");font-display:swap}.blog-shell{--bg:#fff;--surface:#fafafa;--soft:#f4f4f4;--ink:#171717;--body:#424242;--muted:#787878;--quiet:#96969e;--line:#e7e7e9;--inverse:#fff;min-height:100vh;background:var(--bg);color:var(--ink);font-family:Arial,PingFang SC,Microsoft YaHei,sans-serif}.blog-shell.theme-dark{--bg:#101010;--surface:#171717;--soft:#222;--ink:#efefef;--body:#c1c1c1;--muted:#999;--quiet:#85858c;--line:#303030;--inverse:#111;color-scheme:dark}@media(prefers-color-scheme:dark){.blog-shell.theme-system{--bg:#101010;--surface:#171717;--soft:#222;--ink:#efefef;--body:#c1c1c1;--muted:#999;--quiet:#85858c;--line:#303030;--inverse:#111;color-scheme:dark}}.blog-shell *{box-sizing:border-box}.blog-shell a{color:inherit;text-decoration:none}.blog-shell button{color:inherit}.blog-shell a:focus-visible,.blog-shell button:focus-visible,.blog-shell summary:focus-visible{outline:2px solid var(--quiet);outline-offset:4px}.blog-skip{position:fixed;top:-100px;left:20px;z-index:100;background:var(--ink);color:var(--inverse);padding:12px 20px}.blog-skip:focus{top:12px}.blog-header{position:sticky;top:0;z-index:30;border-bottom:1px solid var(--line);background:var(--bg)}.blog-header-inner{height:76px;max-width:1120px;margin:auto;display:flex;align-items:center}.blog-global-nav{gap:32px;font-size:14px}.blog-global-nav,.blog-global-nav a{height:100%;display:flex;align-items:center}.blog-global-nav a{color:var(--muted);position:relative}.blog-global-nav a:hover,.blog-global-nav a[aria-current]{color:var(--ink)}.blog-global-nav a[aria-current]:after{content:"";position:absolute;left:0;right:0;bottom:17px;height:2px;background:var(--ink)}.blog-nav-placeholder{color:var(--muted)}.blog-header-actions{margin-left:auto;display:flex;gap:12px;align-items:center}.blog-search-trigger{height:38px;display:flex;align-items:center;gap:9px;border:1px solid var(--line);background:var(--surface);border-radius:24px;padding:0 13px;font-size:12px;color:var(--muted)}.blog-icon-button svg,.blog-search-trigger svg{width:17px;height:17px}.blog-search-trigger kbd{font:10px BlogMono;border:0;color:var(--quiet)}.blog-icon-button{width:38px;height:38px;border:1px solid var(--line);border-radius:50%;display:grid;place-items:center}.blog-theme-control{position:relative}.blog-theme-menu{position:absolute;right:0;top:48px;width:156px;padding:5px;border:1px solid var(--line);border-radius:12px;background:var(--bg);box-shadow:0 16px 54px #0002}.blog-theme-menu button{display:flex;align-items:center;gap:10px;width:100%;padding:11px 10px;border-radius:7px;font-size:13px}.blog-theme-menu button:hover{background:var(--soft)}.blog-theme-menu svg{width:17px;height:17px}.blog-theme-menu span{margin-left:auto;visibility:hidden}.blog-theme-menu button[aria-pressed=true] span{visibility:visible}.blog-page{max-width:1120px;margin:auto;padding:64px 0 80px}.blog-eyebrow{display:flex;align-items:center;gap:9px;font:10px BlogMono;letter-spacing:2.3px;color:var(--quiet)}.blog-eyebrow:before{content:"";width:5px;height:5px;border-radius:50%;background:var(--quiet)}.blog-hero{display:flex;justify-content:space-between;align-items:center;margin-bottom:46px}.blog-hero h1{font-size:58px;line-height:1.1;letter-spacing:-2.7px;margin:20px 0}.blog-hero p{font-size:16px;line-height:1.9;color:var(--muted);margin:0}.blog-hero-aside{display:flex;align-items:flex-end;gap:18px;color:var(--quiet);font:10px/2 BlogMono;text-align:right}.blog-hero-aside strong{display:block;color:var(--body);font:13px Arial}.blog-hero-aside img{width:70px;height:96px;-o-object-fit:contain;object-fit:contain}.blog-category-bar{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);margin-bottom:32px}.blog-category-nav{display:flex;gap:30px}.blog-category-nav a{display:flex;align-items:center;gap:8px;padding-bottom:17px;color:var(--muted);font-size:14px;position:relative}.blog-category-nav a[aria-current]{color:var(--ink);font-weight:600}.blog-category-nav a[aria-current]:after{content:"";position:absolute;bottom:-1px;left:0;right:0;height:2px;background:var(--ink)}.blog-tab-count{font:10px/19px BlogMono;min-width:20px;text-align:center;background:var(--soft);border-radius:5px}.blog-category-nav a[aria-current] .blog-tab-count{background:var(--ink);color:var(--inverse)}.blog-order{font-size:11px;color:var(--quiet);padding-bottom:17px}.blog-feature{display:grid;grid-template-columns:1fr 1.02fr;min-height:322px;border:1px solid var(--line);border-radius:16px;overflow:hidden}.blog-feature-copy{padding:34px;display:flex;flex-direction:column}.blog-feature-kicker{font-size:11px;color:var(--muted);margin-bottom:18px}.blog-feature h2{font-size:28px;line-height:1.5;margin:0 0 13px}.blog-feature p{font-size:14px;line-height:1.9;color:var(--muted);margin:0 0 25px}.blog-feature-footer{display:flex;justify-content:space-between;margin-top:auto;font-size:11px;color:var(--quiet)}.blog-feature-media{background:var(--surface);padding:24px;display:flex;align-items:center}.blog-feature-media img{width:100%;max-height:273px;-o-object-fit:contain;object-fit:contain;border:1px solid var(--line);border-radius:7px}.blog-section-label{display:flex;justify-content:space-between;margin:38px 0 18px}.blog-section-label h2{font-size:16px;margin:0}.blog-section-label span{font-size:11px;color:var(--quiet)}.blog-post-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.blog-post-card{padding:24px 26px;border:1px solid var(--line);border-radius:14px;min-height:222px;display:flex;flex-direction:column}.blog-post-card:hover{background:var(--surface);border-color:var(--quiet)}.blog-post-top{display:flex;gap:10px;align-items:center;margin-bottom:14px;font-size:10px;color:var(--muted);letter-spacing:1px}.blog-post-number{width:28px;height:24px;border:1px solid var(--line);border-radius:6px;display:grid;place-items:center;font:10px BlogMono}.blog-post-card h3{font-size:19px;line-height:1.5;margin:0 0 10px}.blog-post-card p{font-size:13px;line-height:1.95;color:var(--muted);margin:0 0 23px}.blog-post-meta{margin-top:auto;font-size:11px;color:var(--quiet)}.blog-archive-end{text-align:center;font:11px BlogMono;color:var(--quiet);margin-top:33px}.blog-more-topics{display:flex;gap:16px;margin-top:36px}.blog-topic{flex:1;padding:23px 25px;background:var(--surface);border:1px solid var(--line);border-radius:12px}.blog-topic span{display:block;font-size:12px;color:var(--muted);margin-top:7px}.blog-article-page{max-width:1008px;margin:auto;padding:49px 0 70px}.blog-article-heading{margin-left:248px;max-width:760px}.blog-breadcrumbs{display:flex;gap:8px;color:var(--muted);font-size:12px;margin-bottom:35px}.blog-article-label{font:10px BlogMono;color:var(--quiet);letter-spacing:2px}.blog-article-heading h1{font-size:38px;line-height:1.4;margin:23px 0}.blog-article-summary{font-size:16px;line-height:1.95;color:var(--muted)}.blog-article-meta{display:flex;gap:9px;flex-wrap:wrap;margin:25px 0 30px}.blog-meta-pill{border:1px solid var(--line);border-radius:20px;padding:6px 11px;font-size:11px}.blog-copy-link{margin-left:auto;font-size:11px;color:var(--muted)}.blog-reading-layout{display:grid;grid-template-columns:200px minmax(0,760px);gap:48px}.blog-toc{position:sticky;top:110px;align-self:start;max-height:calc(100vh - 150px);overflow:auto}.blog-toc-title{display:flex;justify-content:space-between;font-size:11px;color:var(--quiet);margin-bottom:18px}.blog-toc ol{list-style:none;padding:0;margin:0;border-left:1px solid var(--line)}.blog-toc a{display:block;padding:7px 0 7px 16px;font-size:12px;color:var(--muted);border-left:2px solid transparent;margin-left:-1px}.blog-toc a[aria-current]{color:var(--ink);border-left-color:var(--ink)}.blog-mobile-toc{display:none;border:1px solid var(--line);border-radius:9px;background:var(--surface);margin-bottom:26px;padding:0 15px}.blog-mobile-toc summary{padding:13px 0;font-size:13px}.blog-mobile-toc ol{list-style:none;padding:0 0 12px}.blog-mobile-toc a{font-size:12px;color:var(--muted);line-height:2}.blog-article-body{max-width:none!important;width:100%;font-size:17px;line-height:1.95;color:var(--body);overflow-wrap:anywhere}.blog-article-body h2{font-size:25px;line-height:1.5;color:var(--ink);margin:48px 0 20px}.blog-article-body h3{font-size:20px;color:var(--ink);margin:35px 0 16px}.blog-article-body p{margin:0 0 23px}.blog-article-body pre,.blog-article-body table{max-width:100%;overflow:auto}.blog-author{margin-top:46px;border-block:1px solid var(--line);padding:27px 0;display:flex;align-items:center;gap:14px}.blog-author-mark{width:42px;height:42px;border:1px solid var(--line);border-radius:50%;display:grid;place-items:center;font-size:22px}.blog-author p{margin:5px 0 0}.blog-author a,.blog-author p{font-size:12px;color:var(--muted)}.blog-author a{margin-left:auto}.blog-article-heading>hr{border:0;border-top:1px solid var(--line);margin:0 0 38px}.blog-reading-progress{position:fixed;z-index:40;top:75px;left:0;right:0;height:2px}.blog-reading-progress span{display:block;height:100%;background:var(--ink)}.blog-article-body pre{position:relative}.blog-code-copy{position:absolute;right:8px;top:7px;border:1px solid var(--line);background:var(--bg);padding:4px 7px;border-radius:5px;font-size:10px}.blog-article-body video{display:block;width:100%;aspect-ratio:16/9;-o-object-fit:contain;object-fit:contain;background:#111;border-radius:12px;margin-bottom:30px}.next-posts{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:30px}.adjacent-post{padding:22px;border:1px solid var(--line);border-radius:12px}.adjacent-post span{display:block;color:var(--muted);font-size:11px;margin-bottom:12px}.adjacent-post strong{font-size:14px;line-height:1.7}.reading-end{text-align:center;color:var(--quiet);font-size:12px;margin-top:35px}.blog-footer{border-top:1px solid var(--line);padding:37px 0 23px}.blog-footer-bottom,.blog-footer-inner{max-width:1120px;margin:auto;display:flex;justify-content:space-between;align-items:center}.blog-footer-brand{font-size:14px;font-weight:600}.blog-footer-brand span{color:var(--quiet);margin:0 8px}.blog-footer p{font-size:12px;color:var(--muted)}.blog-footer-connect{display:flex;align-items:center;gap:30px}.blog-socials{display:flex;gap:8px}.blog-socials a,.blog-socials span{width:36px;height:36px;border:1px solid var(--line);border-radius:12px;display:grid;place-items:center;color:var(--muted)}.blog-socials svg{width:17px;height:17px}.blog-top{font-size:11px;color:var(--muted)}.blog-footer-bottom{margin-top:38px;font:10px BlogMono;color:var(--quiet)}.blog-search-dialog{color:var(--ink);background:var(--bg);width:min(620px,calc(100vw - 32px));max-height:80vh;border:1px solid var(--line);border-radius:17px;padding:0;margin:13vh auto auto}.blog-search-dialog::backdrop{background:#0006;backdrop-filter:blur(5px)}.blog-search-row{display:flex;align-items:center;gap:13px;padding:18px 20px;border-bottom:1px solid var(--line)}.blog-search-row svg{width:18px}.blog-search-row input{flex:1;border:0;outline:0;background:none;color:var(--ink);font-size:16px}.blog-search-row button{border:1px solid var(--line);border-radius:5px;padding:4px 6px}.blog-search-status{font-size:11px;color:var(--quiet);padding:16px 23px 8px;margin:0}.blog-search-results{max-height:48vh;overflow:auto;padding:0 9px 12px}.blog-search-results button{width:100%;display:flex;justify-content:space-between;text-align:left;padding:14px 13px;border-radius:9px}.blog-search-results button:hover{background:var(--soft)}.blog-search-results strong{display:block;font-size:13px}.blog-search-results small{display:block;color:var(--muted);margin-top:5px}.blog-search-footer{display:flex;justify-content:space-between;padding:13px 21px;border-top:1px solid var(--line);font-size:10px;color:var(--quiet);background:var(--surface)}@media(max-width:1200px){.blog-footer-bottom,.blog-footer-inner,.blog-header-inner,.blog-page{margin-inline:40px}.blog-article-page{max-width:760px}.blog-article-heading{margin-left:0}.blog-reading-layout{display:block}.blog-toc{display:none}.blog-mobile-toc{display:block}}@media(max-width:640px){.blog-header-inner{height:65px;margin-inline:20px}.blog-global-nav{gap:18px;font-size:12px}.blog-search-trigger{width:34px;padding:0;justify-content:center;border:0;background:none}.blog-search-trigger kbd,.blog-search-trigger span{display:none}.blog-page{margin-inline:20px;padding:40px 0 50px}.blog-hero h1{font-size:44px}.blog-hero p{font-size:14px;max-width:295px}.blog-hero-aside div{display:none}.blog-hero-aside img{width:50px}.blog-category-nav{gap:18px;width:100%;justify-content:space-between}.blog-category-nav a{font-size:12px;gap:5px}.blog-order{display:none}.blog-feature{grid-template-columns:1fr}.blog-feature-media{order:0;height:198px;padding:20px}.blog-feature-copy{order:1;padding:25px 24px}.blog-feature h2{font-size:23px}.blog-post-grid{grid-template-columns:1fr}.blog-article-page{margin-inline:20px;padding-top:29px}.blog-article-heading h1{font-size:28px}.blog-article-summary{font-size:14px}.blog-article-body{font-size:16px}.blog-footer-bottom,.blog-footer-inner{margin-inline:20px}.blog-footer-inner{align-items:flex-start;flex-direction:column;gap:23px}.blog-footer-connect{width:100%;justify-content:space-between}.blog-footer-bottom{font-size:9px}.blog-copy-link{margin-left:0}.blog-reading-progress{top:64px}.next-posts{grid-template-columns:1fr}}@media(max-width:370px){.blog-header-inner{margin-inline:16px}.blog-global-nav{gap:14px;font-size:11px}.blog-header-actions{gap:4px}.blog-article-page,.blog-page{margin-inline:16px}.blog-category-nav{gap:8px}.blog-category-nav a{font-size:11px}}@media(prefers-reduced-motion:reduce){.blog-shell *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}