.blog-list-hero{padding-top:72px;padding-bottom:24px;border-bottom:0}.blog-list-hero h1{max-width:880px;margin:18px 0}.blog-list-hero p{max-width:620px;font-size:17px;line-height:1.55;margin:0}.blog-filter-bar{display:flex;flex-direction:column;gap:20px;padding-bottom:24px;border-bottom:1px solid var(--line-1);margin-bottom:36px;min-width:0}@media(min-width:900px){.blog-filter-bar{flex-direction:row;justify-content:space-between;align-items:flex-end;gap:32px}}.blog-filter-group{display:flex;flex-direction:column;gap:12px;min-width:0}.blog-filter-label{font-family:JetBrains Mono,monospace;font-size:11px;letter-spacing:.12em;color:var(--text-3);text-transform:uppercase}.blog-filter-chips{display:flex;flex-wrap:wrap;gap:6px;min-width:0}.blog-filter-chip{appearance:none;font-family:JetBrains Mono,monospace;font-size:11px;letter-spacing:.06em;text-transform:uppercase;padding:8px 12px;border-radius:6px;background:var(--bg-1);border:1px solid var(--line-1);color:var(--text-2);cursor:pointer;transition:border-color .15s,color .15s,background .15s;display:inline-flex;align-items:center;gap:8px;max-width:100%;white-space:normal;line-height:1.2}.blog-filter-chip:hover{border-color:var(--line-3);color:var(--text-1)}.blog-filter-chip .cnt{font-size:10px;color:var(--text-4);font-weight:500}.blog-filter-chip[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent-line);color:var(--accent)}.blog-filter-chip[aria-pressed=true] .cnt{color:var(--accent);opacity:.7}.blog-sort{display:flex;flex-direction:column;gap:12px;align-items:flex-start}@media(min-width:900px){.blog-sort{align-items:flex-end}}.blog-count{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-3);letter-spacing:.08em;text-transform:uppercase;margin-bottom:16px}.blog-empty{padding:64px 0;text-align:center;color:var(--text-3);font-size:14px}.blog-empty[hidden]{display:none}.blog-pinned-wrap{margin-bottom:16px;min-width:0}.blog-card.is-hidden{display:none}.blog-card-hero-wide{flex-direction:column;min-width:0}@media(min-width:900px){.blog-card-hero-wide{flex-direction:row;align-items:stretch}.blog-card-hero-wide .blog-thumb{width:46%;flex-shrink:0;aspect-ratio:auto;border-right:1px solid var(--line-1);border-bottom:0}.blog-card-hero-wide .blog-thumb-glyph{width:50%;max-width:280px}.blog-card-hero-wide .blog-card-body{padding:36px 40px;justify-content:center;min-width:0}.blog-card-hero-wide .blog-card-title{font-size:30px;line-height:1.15}.blog-card-hero-wide .blog-card-lead{font-size:16px}}.blog-cards-grid{display:grid;grid-template-columns:1fr;gap:16px;min-width:0}@media(min-width:720px){.blog-cards-grid{grid-template-columns:1fr 1fr}}@media(min-width:1100px){.blog-cards-grid{grid-template-columns:repeat(3,1fr)}}.blog-cards-grid .blog-card-lead{display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.article-hero{padding:56px 0;border-bottom:1px solid var(--line-1)}.breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-family:JetBrains Mono,monospace;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);margin:0;padding:0;list-style:none}.breadcrumb a{color:var(--text-2);transition:color .15s}.breadcrumb a:hover{color:var(--accent)}.breadcrumb .sep{color:var(--text-4)}.breadcrumb [aria-current=page]{color:var(--text-1)}.article-hero h1{max-width:920px;margin:22px 0;font-size:clamp(32px,4.2vw,56px)}.article-lead{max-width:720px;font-size:18px;line-height:1.55;color:var(--text-2);margin:0}.article-meta-row{margin-top:36px;display:flex;flex-direction:column;gap:20px;padding-top:24px;border-top:1px solid var(--line-1)}@media(min-width:720px){.article-meta-row{flex-direction:row;justify-content:space-between;align-items:center}}.article-author{display:flex;align-items:center;gap:12px}.article-author-avatar{width:44px;height:44px;border-radius:50%;background:var(--accent);color:var(--accent-ink);display:grid;place-items:center;font-family:JetBrains Mono,monospace;font-size:14px;font-weight:700;letter-spacing:-.02em;position:relative;flex-shrink:0}.article-author-avatar:after{content:"";position:absolute;inset:3px;border:1px solid color-mix(in srgb,var(--accent-ink) 25%,transparent);border-radius:50%}.article-author-name{font-size:14px;font-weight:500;color:var(--text-1)}.article-author-role{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-3);letter-spacing:.06em;text-transform:uppercase}.article-share{display:flex;align-items:center;gap:8px}.article-share-label{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-3);letter-spacing:.08em;text-transform:uppercase;margin-right:4px}.article-share .icon-btn{border-color:var(--line-1)}.copy-btn .icon-check,.copy-btn[data-copied="1"] .icon-copy{display:none}.copy-btn[data-copied="1"] .icon-check{display:block;color:var(--accent)}.article-body{padding:56px 0 64px}.article-grid{display:grid;grid-template-columns:1fr;gap:36px}@media(min-width:1024px){.article-grid{grid-template-columns:220px minmax(0,1fr);gap:56px}}.article-toc-wrap{display:none}@media(min-width:1024px){.article-toc-wrap{display:block}}.article-toc{position:sticky;top:calc(var(--header-h) + 24px);padding-top:6px}.article-toc-label{font-family:JetBrains Mono,monospace;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--text-3);margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid var(--line-1)}.article-toc ul{list-style:none;margin:0;padding:0}.article-toc li{font-size:12.5px;line-height:1.45;border-left:2px solid transparent;padding:6px 0 6px 12px;transition:border-color .2s}.article-toc li a{color:var(--text-3);transition:color .15s}.article-toc li:hover a{color:var(--text-1)}.article-toc li.active{border-left-color:var(--accent)}.article-toc li.active a{color:var(--accent)}.article-content{min-width:0}.article-prose{max-width:720px;font-size:16.5px;line-height:1.7;color:var(--text-2)}.article-prose>*+*{margin-top:1.1em}.article-prose p{margin:0;color:var(--text-2)}.article-lead-para{font-size:19px;line-height:1.55;color:var(--text-1)!important;letter-spacing:-.005em}.article-prose h2{font-size:28px;line-height:1.2;font-weight:500;letter-spacing:-.022em;color:var(--text-1);margin-top:2.4em!important;margin-bottom:.6em!important;padding-top:12px;position:relative}.article-prose h2:before{content:"§";position:absolute;left:-28px;top:50%;transform:translateY(-50%);color:var(--accent);font-family:JetBrains Mono,monospace;font-size:16px;opacity:.6}@media(max-width:1023px){.article-prose h2:before{display:none}}.article-prose h3{font-size:19px;line-height:1.3;font-weight:500;color:var(--text-1);margin-top:1.8em!important;margin-bottom:.4em!important}.article-prose strong{color:var(--text-1);font-weight:600}.article-prose em{color:var(--text-1)}.article-prose a{color:var(--accent);text-decoration:underline;text-decoration-color:var(--accent-line);text-underline-offset:3px;transition:text-decoration-color .15s}.article-prose a:hover{text-decoration-color:var(--accent)}.article-prose code{font-family:JetBrains Mono,monospace;font-size:.88em;background:var(--bg-2);border:1px solid var(--line-1);padding:1px 6px;border-radius:4px;color:var(--text-1)}.article-prose ul,.article-prose ol{margin:0;padding:0}.article-prose li{margin-top:.5em;line-height:1.6}.article-prose ol{counter-reset:olc;list-style:none}.article-prose ol>li{counter-increment:olc;position:relative;padding-left:38px}.article-prose ol>li:before{content:counter(olc,decimal-leading-zero);position:absolute;left:0;top:.2em;font-family:JetBrains Mono,monospace;font-size:12px;font-weight:600;color:var(--accent)}.article-prose ul{list-style:none}.article-prose ul>li{position:relative;padding-left:22px}.article-prose ul>li:before{content:"—";position:absolute;left:0;top:0;color:var(--accent);font-family:JetBrains Mono,monospace}.article-prose blockquote{margin:1.8em 0 1.8em -8px;padding:4px 0 4px 24px;border-left:3px solid var(--accent);font-size:17px;line-height:1.55;color:var(--text-1);font-style:italic}.callout{margin:1.5em 0!important;padding:20px 24px;border-radius:10px;background:var(--bg-1);border:1px solid var(--line-1)}.callout>*+*{margin-top:.6em}.callout p{margin:0;font-size:15px;line-height:1.55;color:var(--text-2)}.callout-label{font-family:JetBrains Mono,monospace;font-size:11px;letter-spacing:.12em;text-transform:uppercase;margin-bottom:8px}.callout-tip{background:var(--accent-soft);border-color:var(--accent-line)}.callout-tip .callout-label{color:var(--accent)}.callout-tip p{color:var(--text-1)}.callout-warning{background:#ff5a3c0f;border-color:#ff5a3c3d}.callout-warning .callout-label{color:var(--danger)}.callout-info{background:var(--bg-2)}.callout-info .callout-label{color:var(--text-2)}.article-table-wrap{margin:1.8em 0!important;border:1px solid var(--line-1);border-radius:10px;background:var(--bg-1);overflow-x:auto}.article-table{width:100%;border-collapse:collapse;font-size:13.5px}.article-table th{font-family:JetBrains Mono,monospace;font-size:10.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--text-3);text-align:left;padding:14px 18px;background:var(--bg-2);border-bottom:1px solid var(--line-1)}.article-table td{padding:14px 18px;border-bottom:1px solid var(--line-1);color:var(--text-2);vertical-align:top}.article-table tbody tr:last-child td{border-bottom:0}.article-table .num{text-align:right;color:var(--text-1);font-variant-numeric:tabular-nums}.article-table th.num{text-align:right}.article-table .mono{font-family:JetBrains Mono,monospace;font-size:12.5px;color:var(--text-1)}.article-table .tag-alert{color:var(--danger);font-size:12px}.article-table .tag-ok{color:var(--success);font-size:12px}.article-table .tag-warn{color:var(--warn);font-size:12px}.article-code{margin:1.6em 0!important;padding:20px 24px;background:var(--bg-1);border:1px solid var(--line-1);border-radius:10px;overflow-x:auto;font-family:JetBrains Mono,monospace;font-size:12.5px;line-height:1.65;color:var(--text-1);position:relative}.article-code:before{content:"javascript";position:absolute;top:12px;right:16px;font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--text-4)}.article-code code{background:transparent;border:0;padding:0;font-size:inherit;color:inherit;display:block;white-space:pre}.article-inline-cta{margin:2.4em 0!important;padding:24px 28px;background:var(--bg-2);border:1px solid var(--accent-line);border-radius:14px;display:grid;grid-template-columns:auto 1fr auto;gap:20px;align-items:center;position:relative;overflow:hidden}.article-inline-cta:before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 0% 50%,var(--accent-soft),transparent 60%);pointer-events:none}.article-inline-cta>*{position:relative;z-index:1}.article-inline-cta-mark{width:48px;height:48px;background:var(--accent);color:var(--accent-ink);border-radius:8px;display:grid;place-items:center;font-family:JetBrains Mono,monospace;font-size:22px;font-weight:700}.article-inline-cta h3{font-size:17px;font-weight:500;color:var(--text-1);margin:0 0 4px;letter-spacing:-.012em}.article-inline-cta p{font-size:13px;line-height:1.5;color:var(--text-2);margin:0!important}@media(max-width:720px){.article-inline-cta{grid-template-columns:1fr;gap:12px}}.article-end-cta{padding:32px 0}.article-end-cta-box{background:var(--bg-1);border:1px solid var(--line-1);border-radius:14px;padding:40px 44px;display:grid;grid-template-columns:1fr;gap:20px;align-items:center;position:relative;overflow:hidden}.article-end-cta-box:before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 30% 100%,var(--accent-soft),transparent 60%);pointer-events:none}.article-end-cta-box>*{position:relative;z-index:1}@media(min-width:900px){.article-end-cta-box{grid-template-columns:1.5fr auto;gap:40px}}@media(max-width:600px){.article-end-cta-box{padding:28px 24px}}.article-end-cta-box h2{font-size:28px;letter-spacing:-.022em;margin:0 0 10px;color:var(--text-1);max-width:480px}.article-end-cta-box p{font-size:15px;line-height:1.55;color:var(--text-2);margin:0;max-width:480px}.article-related{display:grid;grid-template-columns:1fr;gap:16px}@media(min-width:720px){.article-related{grid-template-columns:1fr 1fr}}@media(min-width:1100px){.article-related{grid-template-columns:1fr 1fr 1fr}}
