.blog-page{--post-pad-top:clamp(8px,1.5vw,16px);--rail-w:190px;--rail-gap:10px;--rail-space:calc(var(--rail-w) + var(--rail-gap));--col-w:720px;--content-top:calc(var(--chrome-inset-y) * 2 + var(--chrome-size) + var(--post-pad-top));min-height:100vh;background:var(--bg);color:var(--fg);padding-top:calc(var(--chrome-inset-y) * 2 + var(--chrome-size))}.blog-header{position:fixed;top:0;left:0;right:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0 var(--chrome-inset-x);height:calc(var(--chrome-inset-y) * 2 + var(--chrome-size));background:var(--bg);border-bottom:1px solid transparent;transition:border-color .2s ease,height .2s ease}.blog-header.scrolled{border-bottom-color:var(--rule);height:calc(var(--chrome-size) + 22px)}.blog-footer .blog-header-back{align-self:flex-start}.blog-shell{max-width:720px;margin:0 auto;padding:clamp(20px,4vw,44px) clamp(20px,5vw,32px) 96px}.blog-kicker{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--prose-muted)}.blog-index-title{font-size:clamp(28px,5vw,36px);line-height:1.12;letter-spacing:-.022em;font-weight:620;margin:10px 0 8px;text-wrap:balance}.blog-index-sub{font-size:16px;line-height:1.6;color:var(--prose-muted);max-width:54ch}.blog-rows{margin-top:36px;border-top:1px solid var(--rule)}.blog-row{display:flex;flex-direction:column;gap:7px;padding:22px 0;border-bottom:1px solid var(--rule)}.blog-row-date{font-family:var(--font-mono);font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--prose-muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.blog-row-title{font-size:19px;font-weight:560;letter-spacing:-.012em;line-height:1.3;color:var(--fg);text-wrap:balance;transition:color .15s ease}.blog-page a:hover{text-decoration:none}.blog-prose a:hover{text-decoration:underline}.blog-row:focus-visible .blog-row-title,.blog-row:hover .blog-row-title{color:var(--accent-strong);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}.blog-row-excerpt{font-size:14.5px;line-height:1.6;color:var(--prose-muted)}.blog-row-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:3px}.blog-chip{font-size:10px;letter-spacing:.08em;text-transform:uppercase;border:1px solid var(--rule);border-radius:4px;padding:3px 7px}.blog-chip,.blog-readtime{font-family:var(--font-mono);color:var(--prose-muted)}.blog-readtime{font-size:11px}.blog-empty{margin-top:32px;font-size:15px;color:var(--prose-muted)}.blog-post-shell{max-width:var(--col-w);margin:0 auto;padding:var(--post-pad-top) clamp(20px,5vw,32px) 96px}.blog-post-title{font-size:clamp(28px,5.2vw,40px);line-height:1.12;letter-spacing:-.024em;font-weight:620;text-wrap:balance}.blog-post-meta{font-family:var(--font-mono);font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--prose-muted);margin-top:12px}.blog-post-rule{height:1px;background:var(--rule);margin:20px 0 24px;border:0}.blog-toc{margin:0 0 32px;border-left:2px solid var(--rule);padding-left:14px}.blog-toc summary{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--prose-muted);cursor:pointer;list-style:none}.blog-toc summary::-webkit-details-marker{display:none}.blog-toc summary:before{content:"▸ "}.blog-toc[open] summary:before{content:"▾ "}.blog-toc ol{list-style:none;margin-top:10px;display:flex;flex-direction:column;gap:7px}.blog-toc li{position:relative}.blog-toc a{font-size:13.5px;line-height:1.4;color:var(--prose-muted);transition:color .15s ease}.blog-toc a:hover{color:var(--accent-strong)}.blog-toc li.lvl-3{padding-left:14px}.blog-toc li.active>a{color:var(--accent-strong);font-weight:500}.blog-toc li.active:before{content:"";position:absolute;left:-16px;top:0;bottom:0;width:2px;background:var(--accent)}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}@media (min-width:1180px){.blog-toc{position:fixed;top:var(--content-top);left:max(24px,calc(50vw - var(--col-w) / 2 - var(--rail-space) / 2));width:var(--rail-w);margin:0;max-height:calc(100vh - var(--content-top) - 24px);overflow-y:auto}.blog-post-shell{margin-left:calc(50vw - var(--col-w) / 2 + var(--rail-space) / 2);margin-right:0}.blog-prose>.table-scroll,.blog-prose>pre{width:calc(100% + min(280px, max(0px, calc(50vw - var(--col-w) / 2 - var(--rail-space) - 24px))))}.blog-toc summary{pointer-events:none}.blog-toc summary:before{content:""}.blog-toc ol{display:flex!important}}.blog-prose{font-size:17px;line-height:1.75;color:var(--prose-fg)}.blog-prose>*+*{margin-top:1.15em}.blog-prose h2{font-size:24px;line-height:1.22;letter-spacing:-.018em;margin-top:2.2em}.blog-prose h2,.blog-prose h3{font-weight:620;color:var(--fg);text-wrap:balance}.blog-prose h3{font-size:18.5px;line-height:1.3;letter-spacing:-.01em;margin-top:1.9em}.blog-prose h2:first-child,.blog-prose h3:first-child{margin-top:0}.blog-prose strong{font-weight:640;color:var(--fg)}.blog-prose a{color:var(--accent-strong);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}.blog-prose ol,.blog-prose ul{padding-left:1.3em;display:flex;flex-direction:column;gap:.45em}.blog-prose li::marker{color:var(--prose-muted)}.blog-prose blockquote{border-left:2px solid var(--accent);padding-left:16px;color:var(--prose-fg)}.blog-prose hr{border:0;height:1px;background:var(--rule);margin:2.4em 0}.blog-prose .heading-anchor{margin-left:.4em;color:var(--prose-muted);text-decoration:none;opacity:0;font-weight:400;transition:opacity .15s ease}.blog-prose .heading-anchor:focus-visible,.blog-prose h2:hover .heading-anchor,.blog-prose h3:hover .heading-anchor{opacity:1}.blog-prose h2,.blog-prose h3{scroll-margin-top:calc(var(--chrome-inset-y) * 2 + var(--chrome-size) + 20px)}.blog-prose code{font-family:var(--font-mono);font-size:.86em;background:var(--code-bg);border:1px solid var(--rule);border-radius:4px;padding:.12em .36em;overflow-wrap:anywhere}.blog-prose pre{background:var(--code-bg);border:1px solid var(--rule);border-radius:8px;padding:16px 18px;overflow-x:auto;font-size:13.5px;line-height:1.65}.blog-prose pre code{background:none;border:0;padding:0;font-size:inherit;overflow-wrap:normal}.blog-prose .table-scroll{overflow-x:auto}.blog-prose table{width:100%;min-width:480px;border-collapse:collapse;font-size:14.5px}.blog-prose th{text-align:left;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;font-weight:400;color:var(--prose-muted);padding:0 16px 9px 0;vertical-align:bottom}.blog-prose td,.blog-prose th{border-bottom:1px solid var(--rule)}.blog-prose td{padding:11px 16px 11px 0;vertical-align:top;line-height:1.55}.blog-prose img{max-width:100%;height:auto;border-radius:8px}.blog-prose{--syn-comment:#6b7086;--syn-keyword:#a33f8f;--syn-string:#1d7a55;--syn-number:#b5551d;--syn-title:#2563eb;--syn-meta:#6b7086}.dark .blog-prose{--syn-comment:#9098ad;--syn-keyword:#e08bd0;--syn-string:#7ddba5;--syn-number:#f0a86a;--syn-title:#86a9ff;--syn-meta:#9098ad}@media (prefers-color-scheme:dark){html:not(.light) .blog-prose{--syn-comment:#9098ad;--syn-keyword:#e08bd0;--syn-string:#7ddba5;--syn-number:#f0a86a;--syn-title:#86a9ff;--syn-meta:#9098ad}}.blog-prose .hljs-comment,.blog-prose .hljs-quote{color:var(--syn-comment);font-style:italic}.blog-prose .hljs-doctag,.blog-prose .hljs-keyword,.blog-prose .hljs-literal,.blog-prose .hljs-name,.blog-prose .hljs-selector-tag,.blog-prose .hljs-type{color:var(--syn-keyword)}.blog-prose .hljs-addition,.blog-prose .hljs-attribute,.blog-prose .hljs-meta .hljs-string,.blog-prose .hljs-regexp,.blog-prose .hljs-string{color:var(--syn-string)}.blog-prose .hljs-number,.blog-prose .hljs-selector-attr,.blog-prose .hljs-selector-pseudo,.blog-prose .hljs-template-variable,.blog-prose .hljs-variable{color:var(--syn-number)}.blog-prose .hljs-built_in,.blog-prose .hljs-class .hljs-title,.blog-prose .hljs-title,.blog-prose .hljs-title_{color:var(--syn-title)}.blog-prose .hljs-meta,.blog-prose .hljs-symbol{color:var(--syn-meta)}.blog-prose .hljs-section{color:var(--syn-keyword);font-weight:600}.blog-prose .hljs-bullet{color:var(--syn-number)}.blog-prose .hljs-code{color:var(--syn-string)}.blog-prose .hljs-link{color:var(--syn-title)}.blog-prose .hljs-emphasis{font-style:italic}.blog-prose .hljs-strong{font-weight:600}.blog-prose pre{position:relative;padding-top:38px}.blog-prose pre[data-language]:before{content:attr(data-language);top:0;left:0;padding:7px 12px 0;letter-spacing:.14em;pointer-events:none}.blog-copy,.blog-prose pre[data-language]:before{position:absolute;font-family:var(--font-mono);font-size:10px;text-transform:uppercase;color:var(--prose-muted)}.blog-copy{top:6px;right:8px;letter-spacing:.1em;background:none;border:1px solid var(--rule);border-radius:5px;padding:4px 8px;cursor:pointer;opacity:0;transition:opacity .15s ease,color .15s ease,border-color .15s ease}.blog-copy:focus-visible,.blog-prose pre:hover .blog-copy{opacity:1}.blog-copy.copied,.blog-copy:hover{color:var(--accent-strong);border-color:var(--accent)}.blog-copy.copied{opacity:1}@media (hover:none){.blog-copy{opacity:1}}.blog-footer{margin-top:56px;padding-top:28px;border-top:1px solid var(--rule);display:flex;flex-direction:column;gap:24px}.blog-askback{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;border:1px solid var(--rule);border-radius:10px;background:var(--input-bg);padding:16px 18px}.blog-askback-text{font-size:15px;line-height:1.5;color:var(--fg);max-width:42ch}.blog-askback-button{display:inline-flex;align-items:center;gap:7px;background:var(--accent-strong);color:#fff;font-size:14px;font-weight:550;padding:9px 16px;border-radius:999px;white-space:nowrap}.dark .blog-askback-button{color:#1a1b23}@media (prefers-color-scheme:dark){html:not(.light) .blog-askback-button{color:#1a1b23}}.blog-share{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.blog-share-label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--prose-muted)}.blog-share a{font-size:14px;color:var(--prose-muted);border-bottom:1px solid var(--rule);padding-bottom:1px}.blog-share a:hover{color:var(--accent-strong);border-bottom-color:var(--accent)}.blog-share-copy{font-family:inherit;font-size:14px;color:var(--prose-muted);background:none;border:0;border-bottom:1px solid var(--rule);padding:0 0 1px;cursor:pointer}.blog-share-copy:hover{color:var(--accent-strong);border-bottom-color:var(--accent)}.blog-page a:focus-visible,.blog-page button:focus-visible,.blog-page summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}@media (prefers-reduced-motion:reduce){.blog-page *{transition:none!important}}