.blog-prose{hanging-punctuation:first;padding-bottom:.75rem}@media (min-width:48rem){.blog-prose{padding-bottom:2.5rem}}.blog-prose>:first-child{margin-top:0}.blog-prose>:last-child{margin-bottom:0}.blog-prose .post-header{margin-bottom:1.75rem}.blog-prose .post{position:relative}.blog-prose .post-toc-rail{width:min(11rem,50vw - 50% - 5rem);display:none;position:absolute;top:0;bottom:0;left:calc(100% + 3.5rem)}@media (min-width:71rem){.blog-prose .post-toc-rail{display:block}}.blog-prose .post-toc{border-right:1px solid var(--color-gray-500);position:sticky;top:6rem}.blog-prose .post-toc ol{margin:0;padding:0;list-style:none}.blog-prose .post-toc li{text-align:right;margin:0;padding:.25rem .75rem .25rem 0}.blog-prose .post-toc a{color:var(--color-gray-1000);transform-origin:100%;transition:color .15s var(--ease-out-strong),scale .16s var(--ease-out-strong);font-size:.75rem;line-height:1.4;text-decoration:none;display:block}.blog-prose .post-toc a:active{scale:var(--press-scale,.985)}@media (prefers-reduced-motion:reduce){.blog-prose .post-toc a{transition:color .15s var(--ease-out-strong)}}.blog-prose .post-toc a[aria-current]{color:var(--color-gray-1200)}@media (hover:hover) and (pointer:fine){.blog-prose .post-toc a:hover{color:var(--color-gray-1200)}}.blog-prose .post-toc-marker{background:var(--color-gray-1200);transform-origin:top;width:1px;height:1px;transition:transform .3s var(--ease-out-strong);position:absolute;top:0;right:-1px}@media (prefers-reduced-motion:reduce){.blog-prose .post-toc-marker{transition:none}}.blog-prose h2[id]{scroll-margin-top:2rem}.blog-prose .post-title{color:var(--color-gray-1200);letter-spacing:-.016em;margin:0;font-size:1.2857em;font-weight:500;line-height:calc(1em + .5rem)}.blog-prose .post-subtitle{color:var(--color-gray-1100);margin:0;padding-top:.25rem}.blog-prose .post-date{color:var(--color-gray-1050);padding-top:.25rem;font-size:.7857em;display:block}.blog-prose .post-cover{margin-top:0;margin-bottom:1.75rem}.blog-prose .blog-content .media-frame{margin-block:1.75rem}.blog-prose .blog-content>:first-child{margin-top:0}.blog-prose p{color:var(--color-gray-1200);opacity:.9;margin:0 0 1lh}.blog-prose strong{color:var(--color-gray-1200);font-weight:600}.blog-prose em{font-style:italic}.blog-prose h1{color:var(--color-gray-1200);letter-spacing:-.016em;margin:0 0 1.75rem;font-size:1.2857em;font-weight:500;line-height:calc(1em + .5rem)}.blog-prose h2{color:var(--color-gray-1200);margin:2.125rem 0 .625rem;font-weight:600;line-height:calc(1em + .5rem)}.blog-prose h3{color:var(--color-gray-1200);margin:1.75rem 0 .5rem;font-weight:600;line-height:calc(1em + .5rem)}.blog-prose h4{color:var(--color-gray-1200);margin:1.5rem 0 .5rem;font-size:.8571em;font-weight:600}.blog-prose a{color:var(--color-gray-1200)}.blog-prose ul,.blog-prose ol{color:var(--color-gray-1200);margin:.75rem 0 1.5rem;padding-inline-start:1.5rem}.blog-prose ul{list-style-type:disc}.blog-prose ol{list-style-type:decimal}.blog-prose li{margin-block:.4375rem}.blog-prose li::marker{color:var(--color-gray-1100);font-weight:400}.blog-prose ul ul,.blog-prose ul ol,.blog-prose ol ul,.blog-prose ol ol{margin-block:.75em}.blog-prose .media-frame{border:1px solid var(--code-border);border-radius:.5rem;overflow:hidden}:where(.blog-prose .media-frame) :is(img,video){width:100%;display:block}.blog-prose blockquote{border-inline-start:2px solid var(--color-gray-600);color:var(--color-gray-1100);margin-block:1.75rem;padding-inline-start:1.375rem}.blog-prose hr{border-top:1px solid var(--color-gray-600);margin-block:2rem}.blog-prose img{margin:0}.blog-prose figure{margin-block:2em}.blog-prose figcaption{color:var(--color-gray-1050);margin-top:.85em;font-size:.7857em}.blog-prose table{text-align:start;width:100%;margin-block:2em}.blog-prose thead,.blog-prose tbody tr{border-bottom:1px solid var(--color-gray-600)}.blog-prose th,.blog-prose td{text-align:start;vertical-align:baseline;padding:.5em}.blog-prose th:first-child,.blog-prose td:first-child{padding-inline-start:0}.blog-prose th:last-child,.blog-prose td:last-child{padding-inline-end:0}@font-face{font-family:JetBrains Mono;src:url(../media/jetbrains-mono-box.f2803c47.woff2)format("woff2");font-weight:100 800;font-display:swap;unicode-range:U+2500-257F}.blog-prose code{white-space:pre;min-width:fit-content;font-family:var(--font-jetbrains-mono);color:var(--color-gray-1200);font-weight:400}.blog-prose a code{color:var(--color-gray-1100)}@media (hover:hover){.blog-prose a code:hover{color:var(--color-gray-1200)}}.blog-prose pre{font-family:var(--font-jetbrains-mono);scrollbar-width:thin;scrollbar-color:var(--color-gray-600)transparent;--optical-nudge:.125em;padding:1rem;padding-top:calc(1rem + var(--optical-nudge));padding-bottom:max(0px,calc(1rem - var(--optical-nudge) - var(--scrollbar-size,0px)));margin:0;font-size:.75rem;line-height:1.4667;overflow-x:scroll}@media (hover:hover){.blog-prose pre{scrollbar-color:transparent transparent}.blog-prose .code-block:hover pre{scrollbar-color:var(--color-gray-600)transparent}}.blog-prose pre code{min-width:0;font-size:inherit;line-height:inherit;background:0 0;border:0;border-radius:0;padding:0}.blog-prose p code,.blog-prose li code{background:color-mix(in oklch,var(--color-gray-200),var(--color-gray-300));border:1px solid var(--color-gray-600);color:var(--color-gray-1200);white-space:break-spaces;letter-spacing:0;border-radius:.25rem;padding:.04rem .3125rem .05rem;font-size:80%}.shiki{font-variant-ligatures:none}.shiki,.shiki span{background-color:var(--code-background)!important}.shiki{--syntax-background:var(--code-background);--syntax-keyword:var(--color-gray-1200);--syntax-function:var(--color-gray-1200);--syntax-invalid:var(--color-gray-1200);--syntax-fg:color-mix(in oklab,var(--color-gray-1200)72%,var(--color-gray-1100));--syntax-variable:color-mix(in oklab,var(--color-gray-1200)50%,var(--color-gray-1100));--syntax-constant:var(--color-gray-1100);--syntax-tag:var(--color-gray-1100);--syntax-string:color-mix(in oklab,var(--color-gray-1100)80%,var(--color-gray-1000));--syntax-punctuation:color-mix(in oklab,var(--color-gray-1100)65%,var(--color-gray-1000));--syntax-comment:var(--color-gray-1050)}.shiki span[style*=font-weight\:bold]{font-weight:600!important}pre code span{letter-spacing:normal}.blog-prose{--code-background:#fff;--code-border:var(--color-gray-300);--code-shadow:0 1px 1px color-mix(in oklab,var(--color-gray-1200)3%,transparent),0 2px 6px -2px color-mix(in oklab,var(--color-gray-1200)5%,transparent)}.dark .blog-prose{--code-background:var(--color-gray-200);--code-border:var(--color-gray-300);--code-shadow:none}.blog-prose .code-block{background:var(--code-background);box-shadow:var(--code-shadow);border-radius:.5rem;margin-block:2rem 1.75rem;padding:1px;position:relative;overflow:hidden}.blog-prose .code-block:after{content:"";border:1px solid var(--code-border);border-radius:inherit;pointer-events:none;position:absolute;inset:0}.blog-prose .code-header{background:linear-gradient(to right,transparent,var(--code-background)1rem);height:2rem;color:var(--color-gray-1050);font-family:var(--font-jetbrains-mono);align-items:center;gap:.75rem;padding-inline:1.5rem 1rem;font-size:.6rem;display:flex;position:absolute;top:0;right:0}.blog-prose .code-title:empty{display:none}.blog-prose .copy-button{width:.75rem;height:.75rem;color:var(--color-gray-800);cursor:pointer;transition:color .15s var(--ease-out-strong);justify-content:center;align-items:center;display:flex;position:relative}.blog-prose .copy-button:before{content:"";position:absolute;inset:-.5rem}@media (hover:hover) and (pointer:fine){.blog-prose .copy-button:hover{color:var(--color-gray-1100)}}@media not ((hover:hover) and (pointer:fine)){.blog-prose .code-header{display:none}}@media (hover:hover) and (pointer:fine){.blog-prose .code-header{opacity:0;filter:blur(2px);transition:opacity .15s var(--ease-out-strong),filter .15s var(--ease-out-strong)}.blog-prose .code-block:hover .code-header,.blog-prose .code-block:focus-within .code-header{opacity:1;filter:blur();transition-duration:.2s}}@media (prefers-reduced-motion:reduce){.blog-prose .code-header,.blog-prose .code-block:hover .code-header,.blog-prose .code-block:focus-within .code-header{filter:none;transition-property:opacity}}
