html.blog-html,html.blog-html>.blog-body{overflow:visible;overscroll-behavior-y:auto}.blog-body{--b-surface:#f1f3f6;--b-card:#ffffff;--b-band:#e6e9ed;--b-ink:#0f1419;--b-ink-60:#5a626c;--b-hairline:rgba(15,20,25,0.08);--b-hairline-14:rgba(15,20,25,0.14);--b-hairline-18:rgba(15,20,25,0.18);--b-steel:#3a5a7e;--b-steel-soft:rgba(58,90,126,0.1);--b-success:#1f7a4d;--b-warn:#b3801f;--b-error:#a3331f;--b-r-sm:3px;--b-r-md:5px;--b-r-lg:7px;--b-shadow:rgba(15,20,25,0.04) 0 1px 2px;--b-font:var(--font-sans),system-ui,-apple-system,"Segoe UI",Arial,sans-serif;--b-mono:var(--font-mono-blog),ui-monospace,"SFMono-Regular",Consolas,monospace;--b-ease:cubic-bezier(0.4,0,0.2,1);--b-dur:240ms;--b-maxw:1180px;background:var(--b-surface);color:var(--b-ink);font-family:var(--b-font);font-size:.875rem;line-height:1.55;color-scheme:light;margin:0}.blog-body *,.blog-body :after,.blog-body :before{box-sizing:border-box}@layer blog-base{.blog-body a{color:inherit;text-decoration:none}}.blog-body :focus-visible{outline:2px solid var(--b-steel);outline-offset:2px;border-radius:var(--b-r-sm)}.b-label{font-size:.6875rem;font-weight:500;line-height:1;letter-spacing:.06em;text-transform:uppercase;color:var(--b-ink-60)}.b-label,.b-mono{font-family:var(--b-mono);font-variant-numeric:tabular-nums}.b-muted{color:var(--b-ink-60)}.b-h1{font-size:2.25rem;line-height:1.12;font-weight:700;letter-spacing:-.022em;margin:0;text-wrap:balance}.b-h2{font-size:1.25rem;line-height:1.3;font-weight:600;letter-spacing:-.012em;margin:0}.b-lead{font-size:1.0625rem;line-height:1.6;color:var(--b-ink-60);max-width:68ch;margin:0}.b-btn{display:inline-flex;align-items:center;gap:8px;font-family:var(--b-font);font-size:.8125rem;line-height:1.4;border-radius:var(--b-r-md);cursor:pointer;transition:all var(--b-dur) var(--b-ease);white-space:nowrap}.b-btn-primary{background:var(--b-ink);color:var(--b-surface);border:none;padding:8px 16px;font-weight:600}.b-btn-secondary{background:var(--b-card);border:1px solid var(--b-hairline-14)}.b-btn-outline,.b-btn-secondary{color:var(--b-ink);padding:8px 16px;font-weight:500}.b-btn-outline{background:transparent;border:1px solid var(--b-hairline-18)}.b-btn-ghost{background:transparent;color:var(--b-ink-60);border:none;padding:8px 12px;font-weight:500}.b-btn-outline:hover,.b-btn-primary:hover,.b-btn-secondary:hover{filter:brightness(.97);box-shadow:0 4px 12px -2px rgba(15,23,42,.18)}.b-btn-ghost:hover{color:var(--b-ink)}.b-btn:active{transform:scale(.98)}.b-btn:disabled{opacity:.4;cursor:default;transform:none;box-shadow:none}.b-wrap{max-width:var(--b-maxw);margin:0 auto;padding:0 24px}.b-topbar{position:sticky;top:0;z-index:50;background:rgba(241,243,246,.92);backdrop-filter:blur(8px);border-bottom:1px solid var(--b-hairline)}.b-topbar-in{gap:20px;height:56px}.b-brand,.b-topbar-in{display:flex;align-items:center}.b-brand{gap:10px;font-weight:600;font-size:.9375rem;letter-spacing:-.012em}.b-brand-mark{width:22px;height:22px;border-radius:var(--b-r-sm);background:var(--b-ink);color:var(--b-surface);display:grid;place-items:center;font-family:var(--b-mono);font-size:.625rem;font-weight:600}.b-topnav{display:flex;align-items:center;gap:2px;margin-left:auto}.b-topnav a{font-size:.8125rem;font-weight:500;color:var(--b-ink-60);padding:8px 12px;border-radius:var(--b-r-md);transition:all var(--b-dur) var(--b-ease)}.b-topnav a:hover{background:rgba(15,20,25,.04)}.b-topnav a.is-active,.b-topnav a:hover{color:var(--b-ink)}.b-topbar-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.b-main{padding:40px 0 56px}.b-section{margin-bottom:48px}.b-sec-head{display:flex;align-items:baseline;gap:16px;padding-bottom:16px;margin-bottom:24px;border-bottom:1px solid var(--b-hairline)}.b-sec-head .b-h2{flex:1}.b-crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:20px}.b-crumbs a,.b-crumbs span{font-family:var(--b-mono);font-size:.6875rem;letter-spacing:.04em;text-transform:uppercase;color:var(--b-ink-60)}.b-crumbs a:hover{color:var(--b-ink)}.b-crumbs .sep{color:var(--b-hairline-18)}.b-crumbs .current{color:var(--b-ink)}.b-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.b-grid,.b-grid-2{display:grid;gap:20px}.b-grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.b-card{display:flex;flex-direction:column;gap:10px;background:var(--b-card);border:1px solid var(--b-hairline);border-radius:var(--b-r-lg);box-shadow:var(--b-shadow);padding:20px;transition:border-color var(--b-dur) var(--b-ease),transform var(--b-dur) var(--b-ease)}.b-card:hover{border-color:var(--b-hairline-18);transform:translateY(-1px)}.b-card h3{font-size:1rem;line-height:1.35;font-weight:600;letter-spacing:-.012em;margin:0;text-wrap:balance}.b-card p{font-size:.8125rem;line-height:1.55;color:var(--b-ink-60);margin:0}.b-card-meta{align-items:center;gap:10px;margin-top:auto;padding-top:8px}.b-card-cats,.b-card-meta{display:flex;flex-wrap:wrap}.b-card-cats{gap:6px}.b-card-lead{border-left:2px solid var(--b-steel);border-radius:0 var(--b-r-lg) var(--b-r-lg) 0}.b-chip{font-family:var(--b-mono);font-size:.6875rem;font-weight:500;letter-spacing:.04em;text-transform:uppercase;color:var(--b-ink-60);border:1px solid var(--b-hairline);border-radius:var(--b-r-sm);padding:3px 8px;background:var(--b-surface);transition:all var(--b-dur) var(--b-ease)}a.b-chip:hover{color:var(--b-ink);border-color:var(--b-hairline-18)}.b-chip.is-on{background:var(--b-card);border-color:var(--b-steel);color:var(--b-ink)}.b-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:40px;align-items:start}.b-article,.b-content,.b-layout>*{min-width:0}.b-aside{display:flex;flex-direction:column;gap:24px;position:sticky;top:76px}.b-panel{background:var(--b-card);border:1px solid var(--b-hairline);border-radius:var(--b-r-lg);box-shadow:var(--b-shadow);padding:18px}.b-panel h3{font-size:.875rem;font-weight:600;margin:0 0 12px}.b-list{display:flex;flex-direction:column}.b-list a{display:block;padding:9px 0;border-top:1px solid var(--b-hairline);font-size:.8125rem;line-height:1.45}.b-list a:first-child{border-top:none;padding-top:0}.b-list a:hover{color:var(--b-steel)}.b-cat-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0;border-top:1px solid var(--b-hairline)}.b-cat-row:first-child{border-top:none}.b-cat-row a{font-size:.8125rem}.b-cat-row a:hover{color:var(--b-steel)}.b-search{display:flex;gap:8px}.blog-body input[type=email],.blog-body input[type=search],.blog-body input[type=text]{font-family:var(--b-font);font-size:.8125rem;color:var(--b-ink);background:var(--b-card);border:1px solid var(--b-hairline-14);border-radius:var(--b-r-md);padding:8px 10px;width:100%;transition:all var(--b-dur) var(--b-ease)}.blog-body input:hover{border-color:rgba(15,20,25,.5)}.blog-body input:focus{outline:none;border:1.5px solid var(--b-ink);box-shadow:0 0 0 4px rgba(15,20,25,.15)}.b-article{background:var(--b-card);border:1px solid var(--b-hairline);border-radius:var(--b-r-lg);box-shadow:var(--b-shadow);padding:32px}.b-article-head{padding-bottom:20px;border-bottom:1px solid var(--b-hairline)}.b-article-meta{flex-wrap:wrap;gap:14px;margin-top:16px}.b-article-meta,.b-author{display:flex;align-items:center}.b-author{gap:8px}.b-author-ava{width:30px;height:30px;border-radius:9999px;background:var(--b-band);border:1px solid var(--b-hairline);display:grid;place-items:center;font-family:var(--b-mono);font-size:.6875rem;font-weight:600;color:var(--b-ink-60);overflow:hidden}.b-author-ava img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.b-author-name{font-size:.8125rem;font-weight:500}.b-cover{margin:20px 0 0;border-radius:var(--b-r-md);overflow:hidden;border:1px solid var(--b-hairline)}.b-cover img{display:block;width:100%;height:auto}.b-toc{margin:24px 0;padding:16px 18px;background:var(--b-surface);border:1px solid var(--b-hairline);border-radius:var(--b-r-md)}.b-toc ol{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:7px;counter-reset:toc}.b-toc li{display:flex;gap:10px;font-size:.875rem;line-height:1.45}.b-toc li:before{counter-increment:toc;content:counter(toc,decimal-leading-zero);font-family:var(--b-mono);font-size:.6875rem;color:var(--b-ink-60);padding-top:3px}.b-toc li.lvl-3{padding-left:18px}.b-toc a:hover{color:var(--b-steel)}.b-content{font-size:1.0625rem;line-height:1.68;margin-top:24px}.b-content>*{max-width:68ch}.b-content p{margin:0 0 1.2em}.b-content h2{font-size:1.5rem;line-height:1.25;letter-spacing:-.016em;margin:2em 0 .7em;text-wrap:balance}.b-content h2,.b-content h3{font-weight:600;scroll-margin-top:76px}.b-content h3{font-size:1.1875rem;line-height:1.3;letter-spacing:-.012em;margin:1.6em 0 .6em}.b-content ol,.b-content ul{margin:0 0 1.2em;padding-left:1.5em;display:flex;flex-direction:column;gap:.5em}.b-content li{line-height:1.6}.b-content a{color:var(--b-ink);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--b-hairline-18)}.b-content a:hover{text-decoration-color:var(--b-ink)}.b-content strong{font-weight:600}.b-content blockquote{margin:0 0 1.2em;padding:.5em 0 .5em 1.25em;border-left:3px solid rgba(15,20,25,.6);color:var(--b-ink-60)}.b-content code{background:rgba(15,20,25,.06);color:var(--b-ink);font-family:var(--b-mono);font-size:.9em;padding:1px 5px;border-radius:var(--b-r-sm)}.b-content pre{max-width:100%;overflow-x:auto}.b-content pre code{background:none;padding:0}.b-content img{max-width:100%;height:auto;border-radius:var(--b-r-md);border:1px solid var(--b-hairline)}.b-content figure{margin:0 0 1.2em}.b-content figcaption{font-size:.8125rem;color:var(--b-ink-60);margin-top:8px}.b-content hr{border:none;border-top:1px solid var(--b-hairline);margin:2em 0}.b-table-wrap{max-width:100%;overflow-x:auto;margin:0 0 1.2em;border:1px solid var(--b-hairline);border-radius:var(--b-r-lg)}.b-content table{border-collapse:collapse;width:100%;min-width:520px;font-size:.875rem}.b-content thead th{background:var(--b-band);text-align:left;padding:10px 14px;font-family:var(--b-mono);font-size:.6875rem;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--b-ink-60)}.b-content tbody td,.b-content thead th{border-bottom:1px solid var(--b-hairline)}.b-content tbody td{padding:11px 14px;vertical-align:top;line-height:1.5}.b-content tbody tr:last-child td{border-bottom:none}.b-cta{margin:32px 0 0;padding:24px;background:var(--b-surface);border:1px solid var(--b-hairline);border-left:2px solid var(--b-steel);border-radius:0 var(--b-r-lg) var(--b-r-lg) 0;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:20px}.b-cta h3{font-size:1.125rem;font-weight:600;letter-spacing:-.012em;margin:0 0 6px}.b-cta p{font-size:.875rem;color:var(--b-ink-60);margin:0;max-width:60ch}.b-rate{margin-top:32px;padding-top:20px;border-top:1px solid var(--b-hairline);display:flex;flex-wrap:wrap;align-items:center;gap:14px}.b-rate-buttons{display:flex;gap:8px}.b-rate-result{font-family:var(--b-mono);font-size:.75rem;color:var(--b-ink-60);font-variant-numeric:tabular-nums}.b-sub-form{display:flex;flex-direction:column;gap:10px}.b-sub-note{font-size:.75rem;line-height:1.45;color:var(--b-ink-60)}.b-sub-msg{font-family:var(--b-mono);font-size:.75rem}.b-sub-msg.is-ok{color:var(--b-success)}.b-sub-msg.is-error{color:var(--b-error)}.b-pager{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:32px}.b-pager a,.b-pager span{font-family:var(--b-mono);font-size:.8125rem;font-variant-numeric:tabular-nums;min-width:34px;height:34px;padding:0 10px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--b-hairline);border-radius:var(--b-r-md);color:var(--b-ink-60);background:var(--b-card);transition:all var(--b-dur) var(--b-ease)}.b-pager a:hover{color:var(--b-ink);border-color:var(--b-hairline-18)}.b-pager .is-current{border-color:var(--b-steel);color:var(--b-ink)}.b-pager .is-gap{border:none;background:transparent}.b-empty{background:var(--b-card);border:1px solid var(--b-hairline);border-radius:var(--b-r-lg);padding:40px 24px;text-align:center}.b-empty h3{font-size:1rem;font-weight:600;margin:0 0 8px}.b-footer{border-top:1px solid var(--b-hairline);background:var(--b-band);padding:36px 0 28px;margin-top:24px}.b-fgrid{display:grid;grid-template-columns:1.4fr repeat(2,1fr);gap:32px}.b-fcol{display:flex;flex-direction:column;gap:10px}.b-fcol a{font-size:.8125rem;color:var(--b-ink-60);transition:color var(--b-dur) var(--b-ease)}.b-fcol a:hover{color:var(--b-ink)}.b-fbottom{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-top:28px;padding-top:18px;border-top:1px solid var(--b-hairline)}@media (max-width:1020px){.b-layout{grid-template-columns:1fr;gap:32px}.b-aside{position:static}.b-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:720px){.b-wrap{padding:0 16px}.b-topbar-in{gap:10px}.b-topbar-actions{gap:6px}.b-topbar-actions .b-btn{padding:7px 10px;font-size:.8125rem;white-space:nowrap}.b-main{padding:24px 0 40px}.b-h1{font-size:1.625rem}.b-grid,.b-grid-2{grid-template-columns:1fr}.b-article{padding:20px}.b-content{font-size:1rem}.b-content h2{font-size:1.3125rem}.b-content h3{font-size:1.0625rem}.b-fgrid{grid-template-columns:1fr;gap:24px}.b-topnav{display:none}.b-cta{flex-direction:column;align-items:flex-start}}@media (prefers-reduced-motion:reduce){.blog-body *,.blog-body :after,.blog-body :before{transition-duration:.01ms!important;animation-duration:.01ms!important}}