.article-wrap{--code-head:2.35rem;--header-offset:var(--header-h,4rem);max-width:46rem}@media (max-width:760px){.article-wrap{--header-offset:var(--header-h,3.5rem)}}.read-progress{position:fixed;top:0;left:0;right:0;z-index:49;height:2px;pointer-events:none;transform:translateY(var(--header-h,4rem));transition:transform .3s cubic-bezier(.16,1,.3,1)}@media (max-width:760px){.read-progress{transform:translateY(var(--header-h,3.5rem))}}.article-kicker .lang-switcher{margin:0}.read-progress span{display:block;height:100%;background:var(--t1);transform:scaleX(0);transform-origin:0 50%;will-change:transform}.article-head{margin-bottom:2.75rem}.article-kicker{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem 1rem;margin:0 0 1.4rem}.article-eyebrow{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;margin:0;font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;color:var(--t7)}.article-eyebrow a{color:var(--t1);text-decoration:none;font-weight:600}.article-eyebrow a:hover{text-decoration:underline;text-underline-offset:4px}.article-eyebrow-dot{width:4px;height:4px;border-radius:50%;background:var(--w30)}.article .article-head h1{margin:0;max-width:24ch;font-size:clamp(1.85rem,1.1rem + 3.4vw,3.25rem);line-height:1.08;letter-spacing:-.045em;color:var(--t1);text-wrap:balance;overflow-wrap:break-word}.article-lede{margin:1.25rem 0 0;max-width:62ch;font-size:clamp(.95rem,.9rem + .25vw,1.06rem);line-height:1.7;color:var(--t5);text-wrap:pretty}.article-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,8.5rem),1fr));margin:2rem 0 0;padding:0;border-top:1px solid var(--w10);border-bottom:1px solid var(--w10)}.article-facts>div{padding:.95rem 1.1rem .95rem 0;min-width:0}.article-facts>div+div{padding-left:1.1rem;border-left:1px solid var(--w07)}.article-facts dt{font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:var(--t9);margin:0 0 .4rem}.article-facts dd{margin:0;display:flex;align-items:center;gap:.5rem;font-size:.86rem;color:var(--t2);font-weight:500;font-variant-numeric:tabular-nums;white-space:nowrap}.diff-meter{display:inline-flex;align-items:flex-end;gap:2px;height:11px}.diff-meter i{display:block;width:3px;border-radius:1px;background:var(--w15)}.diff-meter i:nth-child(1){height:5px}.diff-meter i:nth-child(2){height:8px}.diff-meter i:nth-child(3){height:11px}.diff-meter[data-level="1"] i:nth-child(-n+1),.diff-meter[data-level="2"] i:nth-child(-n+2),.diff-meter[data-level="3"] i:nth-child(-n+3){background:var(--t1)}.article-stack,.article-filed{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem .9rem;margin-top:1.4rem}.article-stack .post-tags,.article-filed .post-tags{margin:0}.article-stack-label{font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:var(--t9)}.article-stack .post-tags span{background:var(--panel);color:var(--t4)}.article-grid{position:relative}.article-body{min-width:0}.toc-rail{display:none}@media (min-width:1200px){.article-wrap{max-width:70rem}.article-grid{display:grid;grid-template-columns:minmax(0,46rem) 14.5rem;justify-content:space-between;-moz-column-gap:4rem;column-gap:4rem;align-items:start}.article-body{grid-column:1;grid-row:1}.toc-rail{display:block;grid-column:2;grid-row:1;height:100%}.toc-mobile{display:none}}.toc-rail .post-toc{position:sticky;top:1.75rem;max-height:calc(100vh - var(--header-offset) - 3.5rem);overflow-y:auto;overscroll-behavior:contain;padding:.25rem .25rem .5rem 0;scrollbar-width:thin;transform:translateY(var(--header-offset));transition:transform .3s cubic-bezier(.16,1,.3,1)}.toc-title{margin:0 0 .9rem;font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:var(--t9)}.toc-track{position:relative;border-left:1px solid var(--w10)}.toc-marker{position:absolute;left:-1px;top:0;width:2px;height:1px;background:var(--t1);transform-origin:0 0;opacity:0;transition:transform .35s cubic-bezier(.16,1,.3,1),opacity .2s ease}.toc-list{list-style:none;margin:0;padding:0}.toc-list li{margin:0}.toc-list a{display:block;padding:.32rem 0 .32rem .95rem;font-size:.74rem;line-height:1.45;color:var(--t7);text-decoration:none;overflow-wrap:anywhere}.toc-list li.toc-sub a{padding-left:1.75rem;font-size:.7rem;color:var(--t8)}.toc-list a:hover{color:var(--t1)}.toc-list a[aria-current]{color:var(--t1);font-weight:600}.toc-top{display:inline-flex;align-items:center;gap:.45rem;margin-top:1.25rem;padding:.35rem 0;font-size:.68rem;color:var(--t8);text-decoration:none}.toc-top:hover{color:var(--t1)}.toc-mobile{position:sticky;top:calc(var(--header-offset) + .5rem);z-index:30;margin:0 0 2rem;background:color-mix(in srgb,var(--panel) 88%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid var(--w10);border-radius:12px;box-shadow:0 10px 30px -22px #00000059}.toc-mobile summary{display:flex;align-items:center;gap:.6rem;min-height:2.75rem;padding:0 .95rem;cursor:pointer;list-style:none;font-size:.7rem;color:var(--t3)}.toc-mobile summary::-webkit-details-marker{display:none}.toc-mobile-label{flex:none;font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:var(--t8)}.toc-mobile-current{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--t1);font-weight:500}.toc-mobile-chev{flex:none;margin-left:auto;color:var(--t7);transition:transform .25s ease}.toc-mobile[open] .toc-mobile-chev{transform:rotate(180deg)}.toc-mobile nav{max-height:min(60vh,26rem);overflow-y:auto;overscroll-behavior:contain;padding:.35rem .6rem .75rem;border-top:1px solid var(--w07)}.toc-mobile .toc-list a{padding:.55rem .4rem .55rem .6rem;font-size:.78rem;border-radius:6px}.toc-mobile .toc-list li.toc-sub a{padding-left:1.4rem;font-size:.74rem}.toc-mobile .toc-list a[aria-current]{background:var(--w05)}.article .article-body{font-size:.97rem;line-height:1.8;color:var(--t3)}.article .article-body>p,.article .article-body>ul,.article .article-body>ol{max-width:70ch}.article .article-body>p:first-child{font-size:1.04rem;color:var(--t2)}.article .article-body h2{margin-top:3.5rem;padding-top:.25rem}.article .article-body h2,.article .article-body h3,.article .article-body h4{position:relative;scroll-margin-top:calc(var(--header-offset) + 1.5rem)}@media (max-width:1199px){.article .article-body h2,.article .article-body h3,.article .article-body h4{scroll-margin-top:calc(var(--header-offset) + 4.25rem)}}.h-anchor{position:absolute;right:100%;top:0;padding-right:.4em;font-weight:400;color:var(--t9);text-decoration:none!important;opacity:0;transition:opacity .15s ease}.h-anchor:hover,.h-anchor:focus-visible{color:var(--t1)}.h-anchor.is-done{color:var(--t1);opacity:1}.article-body h2:hover .h-anchor,.article-body h3:hover .h-anchor,.article-body h4:hover .h-anchor,.h-anchor:focus-visible{opacity:1}@media (hover:none){.h-anchor{opacity:.45}}@media (max-width:640px){.h-anchor{padding-right:.25em;font-size:.8em;top:.12em}}.article-body pre.astro-code{margin:calc(1.5rem + var(--code-head)) 0 1.6rem}.article-body .code-block{margin:1.5rem 0 1.6rem;border-radius:10px;overflow:hidden;background:#24292e;border:1px solid #1b1f23;box-shadow:0 18px 40px -28px #0000008c}.article-body .code-block pre.astro-code{margin:0;border:0;border-radius:0}.code-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;height:var(--code-head);padding:0 .5rem 0 1rem;background:#1f2428;border-bottom:1px solid rgba(255,255,255,.07)}.code-lang{display:inline-flex;align-items:center;gap:.5rem;font-size:.62rem;letter-spacing:.12em;text-transform:uppercase;color:#ffffff8c}.code-lang:before{content:"";width:6px;height:6px;border-radius:50%;background:#ffffff47}.code-copy{display:inline-flex;align-items:center;gap:.4rem;min-height:1.75rem;padding:0 .6rem;font-family:JetBrains Mono,monospace;font-size:.66rem;color:#ffffff9e;background:transparent;border:1px solid rgba(255,255,255,.12);border-radius:6px;cursor:pointer}.code-copy:hover{color:#fff;border-color:#ffffff4d;background:#ffffff0f}.code-copy:focus-visible{outline:2px solid #fff;outline-offset:2px}.code-copy.is-done{color:#fff;border-color:#ffffff59}.code-copy svg{flex:none}@media (max-width:640px){.article-body .code-block{border-radius:8px}.code-copy span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.code-copy{min-width:2rem;justify-content:center;padding:0}}.article-end{display:grid;gap:1.5rem;margin-top:4rem;padding:1.6rem;border:1px solid var(--w08);border-radius:16px;background:var(--panel)}.article-author{display:flex;align-items:center;gap:.9rem}.article-author-mark{flex:none;display:grid;place-items:center;width:2.6rem;height:2.6rem;border-radius:50%;background:var(--t1);color:var(--inv);font-size:.72rem;font-weight:700;letter-spacing:.04em}.article-author-text{display:flex;flex-direction:column;gap:.15rem;min-width:0}.article-author-text b{font-size:.9rem;color:var(--t1);font-weight:600}.article-author-text small{font-size:.7rem;color:var(--t8)}.article-end .article-filed{margin:0}.article-actions{display:flex;flex-wrap:wrap;gap:.5rem;padding-top:1.25rem;border-top:1px solid var(--w07)}.article-action{display:inline-flex;align-items:center;gap:.45rem;min-height:2.25rem;padding:0 .9rem;font-family:JetBrains Mono,monospace;font-size:.7rem;color:var(--t4);text-decoration:none;background:var(--w02);border:1px solid var(--w10);border-radius:999px;cursor:pointer}.article-action:hover{color:var(--t1);border-color:var(--w25)}.post-pager{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.85rem;margin-top:1.25rem}.post-pager-card{display:flex;flex-direction:column;gap:.55rem;min-width:0;padding:1.3rem 1.4rem;text-decoration:none;border:1px solid var(--w08);border-radius:16px;background:var(--panel);transition:transform .3s cubic-bezier(.16,1,.3,1),box-shadow .3s ease}.post-pager-card:hover{transform:translateY(-3px);box-shadow:0 18px 40px -26px #00000059}.post-pager-next{text-align:right;align-items:flex-end}.post-pager-dir{display:inline-flex;align-items:center;gap:.45rem;font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:var(--t8)}.post-pager-dir svg{transition:transform .3s cubic-bezier(.16,1,.3,1)}.post-pager-card:hover .post-pager-dir svg{transform:translate(-3px)}.post-pager-next:hover .post-pager-dir svg{transform:translate(3px)}.post-pager-title{font-size:.95rem;line-height:1.35;font-weight:700;letter-spacing:-.02em;color:var(--t1);text-wrap:balance}.post-pager-desc{font-size:.74rem;line-height:1.6;color:var(--t6);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.post-pager-date{margin-top:auto;font-size:.66rem;color:var(--t9);font-variant-numeric:tabular-nums}@media (max-width:640px){.article-head{margin-bottom:2rem}.article-facts{grid-template-columns:repeat(2,minmax(0,1fr))}.article-facts>div{padding:.8rem .75rem .8rem 0}.article-facts>div+div{padding-left:.75rem}.article-facts>div:nth-child(odd){padding-left:0;border-left:0}.article-facts>div:nth-child(n+3){border-top:1px solid var(--w07)}.article .article-body{font-size:.94rem;line-height:1.75}.article-end{padding:1.25rem;margin-top:3rem}.post-pager{grid-template-columns:1fr}.post-pager-next{text-align:left;align-items:flex-start}.post-pager-empty{display:none}}@media (prefers-reduced-motion:reduce){.read-progress,.toc-rail .post-toc,.toc-mobile,.toc-marker,.toc-mobile-chev,.post-pager-card,.post-pager-dir svg,.h-anchor{transition:none}.post-pager-card:hover,.post-pager-card:hover .post-pager-dir svg{transform:none}}@media (min-width:1200px){.article-end,.post-pager{max-width:46rem}}
