@font-face{font-family:Geist Mono Code;src:url(/fonts/GeistMono-Regular-code.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}.page-post{flex-direction:column;min-height:100svh;display:flex}.post{padding-inline:var(--grid-margin);padding-bottom:var(--spacing-64);flex:1}.post-article,.post-next{max-width:var(--grid-readable-width)}.post-article{font-size:var(--type-heading-xs-font-size);line-height:var(--type-heading-sm-line-height)}.post-header{padding-top:var(--spacing-192);padding-bottom:var(--spacing-64)}.post-title{font-size:inherit;text-wrap:balance}.post-meta,.post-published{color:var(--color-body-subtle)}.post-published{margin-top:var(--spacing-32);padding-top:var(--spacing-8);border-top:1px solid var(--color-border);font-size:var(--type-body-xs-font-size);line-height:var(--type-body-xs-line-height)}@keyframes post-fade{0%{opacity:0}to{opacity:1}}@keyframes post-enter{0%{opacity:0;filter:blur(4px);transform:translateY(6px)}to{opacity:1;filter:blur();transform:translateY(0)}}.navigation-post,.page-post .footer{animation:post-fade .26s var(--ease-out) backwards}.post-header{animation:post-enter .8s var(--ease-out) backwards}.post-body>:nth-child(-n+6),.post-published,.post-next{animation:post-enter .8s var(--ease-out) 80ms backwards}.post-body>:nth-child(n+7){animation:post-fade .8s var(--ease-out) 80ms backwards}.post-body>*+*{margin-top:var(--spacing-24)}.post-body :is(h2,h3,h4,h5,h6){font-size:inherit;color:var(--color-body-subtle)}.post-body h2{margin-top:var(--spacing-64);margin-bottom:var(--spacing-16)}.post-body h3{margin-top:var(--spacing-48);margin-bottom:var(--spacing-8)}.post-body :is(h4,h5,h6){margin-top:var(--spacing-32);margin-bottom:var(--spacing-8);font-size:var(--type-body-sm-font-size);line-height:var(--type-heading-xs-line-height)}.post-body :is(h2,h3,h4,h5,h6)+*{margin-top:0}.post-body ul,.post-body ol{list-style:none}.post-body ol{counter-reset:post-list}.post-body li{padding-left:var(--spacing-40);position:relative}.post-body li>:is(ul,ol){margin-top:0}.post-body ul>li:before{content:"";background-color:var(--color-accent);border-radius:50%;width:6px;height:6px;position:absolute;top:9px;left:18px}.post-body ol>li{counter-increment:post-list}.post-body ol>li:before{content:counter(post-list) "." / "";position:absolute;left:18px}.post-body hr{border:0;border-top:1px solid var(--color-border)}.post-body code{padding:3px var(--spacing-4) 3px 6px;border-radius:var(--radius-xs);-webkit-box-decoration-break:clone;box-decoration-break:clone;background-color:var(--color-background-subtle);font-family:"Geist Mono Code", var(--font-family-mono);font-size:var(--type-body-sm-font-size);font-variant-ligatures:none}.post-body pre{margin-block:var(--spacing-48);padding:var(--spacing-20) var(--spacing-24);border-radius:var(--radius-sm);background-color:var(--color-background-subtle);overflow-x:auto}.post-body pre,.post-body pre span{color:var(--shiki-light)}.theme-dark .post-body pre,.theme-dark .post-body pre span{color:var(--shiki-dark)}.post-body pre code{background-color:#0000;border-radius:0;padding:0}.post-body figure{margin-block:var(--spacing-64)}.post-body figure img{background-color:var(--color-background-subtle);width:100%;height:auto}.post-body caption{caption-side:bottom;text-align:left}.post-body :is(figcaption,caption){margin-top:var(--spacing-8);font-size:var(--type-body-xs-font-size);line-height:var(--type-body-xs-line-height);color:var(--color-body-subtle)}.post-body :is(figcaption,caption):before{content:"↑  " / ""}.post-body blockquote{margin-block:var(--spacing-48);padding:var(--spacing-20) var(--spacing-24);border-radius:var(--radius-sm);background-color:var(--color-background-subtle);font-size:var(--type-body-sm-font-size);line-height:var(--type-body-line-height);color:var(--color-body-subtle)}.post-body blockquote>*+*{margin-top:var(--spacing-20)}.post-body .post-table{margin-block:var(--spacing-48);overscroll-behavior-x:contain;overflow-x:auto}.post-body table{width:100%;min-width:calc(var(--columns,1) * var(--spacing-96));border-collapse:separate;border-spacing:0;table-layout:fixed;font-size:var(--type-body-xs-font-size);line-height:var(--type-body-xs-line-height)}.post-body th,.post-body td{height:var(--spacing-32);padding:var(--spacing-4) var(--spacing-8) var(--spacing-4) 0;border-bottom:1px solid var(--color-border);font-weight:var(--type-body-font-weight);text-align:left;vertical-align:middle}.post-body td{color:var(--color-body-subtle)}.post-body tbody tr:last-child td{border-bottom:0}.post-body sup{line-height:0}.post-body sup:has(>[data-footnote-ref]){vertical-align:baseline;font-size:inherit}.post-body [data-footnote-ref]{color:var(--color-body-subtle);font-feature-settings:"sups";text-decoration:none;position:relative}.post-body :is([data-footnote-ref],[data-footnote-backref]):before{content:"";inset:calc(var(--spacing-12) * -1) -10px;position:absolute}.post-body .footnotes{margin-top:var(--spacing-32);padding-top:var(--spacing-8);border-top:1px solid var(--color-border);color:var(--color-body-subtle);font-size:var(--type-body-xs-font-size);line-height:var(--type-body-xs-line-height)}.post-body .footnotes li+li{margin-top:var(--spacing-4)}.post-body [data-footnote-backref]{text-decoration:none;position:relative}.post-body>:first-child{margin-top:0}.post-body>:last-child{margin-bottom:0}.post-next{margin-top:var(--spacing-96)}.post-next-label{font-size:var(--type-heading-xs-font-size);line-height:var(--type-heading-xs-line-height)}.post-next-link{align-items:center;gap:var(--spacing-12);margin-top:var(--spacing-16);padding:var(--spacing-12);border-radius:var(--radius-xs);box-shadow:inset 0 0 0 1px var(--color-border);text-decoration:none;transition:color .15s,box-shadow .15s,opacity .15s;display:flex}.post-next-link:active{color:inherit;opacity:.6;transition-duration:0s}.post-next-image{object-fit:cover;background-color:var(--color-background-subtle);flex-shrink:0;width:108px;height:72px}.post-next-title{line-height:var(--type-heading-xs-line-height)}@media (hover:hover) and (pointer:fine){.post-next-link:hover{color:inherit;box-shadow:inset 0 0 0 1px var(--color-border), 0 0 16px 0 var(--color-shadow)}}@media (width>=768px){.post-article,.post-next{margin-inline:auto}}@media (prefers-reduced-motion:reduce){.post-header,.post-body>:nth-child(n),.post-published,.post-next{animation:post-fade .26s var(--ease-out) backwards}}html.is-returning :is(.navigation-post,.footer,.post-header,.post-body>*,.post-published,.post-next){animation:none}
