/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial}}}.article-surface{--color-ink:var(--color-article-ink);--color-ink-secondary:var(--color-article-ink-body);--color-ink-muted:var(--color-article-ink-muted);--color-ink-faint:var(--color-article-ink-muted);--color-ink-body:var(--color-article-ink-body);font-kerning:normal}body:has(.more-articles) footer{border-top:0}.article-surface.legal-document{--color-page:var(--color-lab-paper-bright);--color-card:var(--color-lab-paper-bright);--color-well:var(--color-lab-paper-deep);--color-media:var(--color-lab-paper-deep);--color-article-ink:var(--color-lab-ink);--color-article-ink-body:var(--color-lab-graphite);--color-article-ink-muted:var(--color-lab-faint);--color-edge:var(--color-lab-rule);--color-edge-strong:var(--color-lab-graphite);--color-edge-faint:#c7c7bc8c}@supports (color:color-mix(in lab, red, red)){.article-surface.legal-document{--color-edge-faint:color-mix(in srgb, var(--color-lab-rule) 55%, transparent)}}.article-surface.legal-document{--color-link:var(--color-blue-600);--color-link-hover:var(--color-blue-700);--color-code:var(--color-lab-graphite);color-scheme:light}.article-masthead{padding-top:2.5rem;padding-bottom:0}.article-masthead__copy{flex-direction:column;min-width:0;display:flex}.article-masthead__copy h1{color:var(--color-ink);font-family:var(--font-sans);letter-spacing:-.04em;text-wrap:balance;font-size:clamp(2.5rem,4.5vw,3.75rem);font-weight:650;line-height:1}.article-masthead__meta{color:var(--color-ink-muted);font-family:var(--font-sans);flex-wrap:wrap;align-items:center;gap:.5rem .75rem;margin-top:1.5rem;padding:.8rem 0 .3rem;font-size:.875rem;display:flex}.hacker-news-callout{color:var(--color-ink-muted);margin-top:0;padding-bottom:1.25rem;font-size:.82rem}.hacker-news-callout a{color:var(--color-hn-orange);font-weight:620;text-decoration:none}.hacker-news-callout a:hover{color:var(--color-hn-orange-light);text-underline-offset:.15em;text-decoration:underline}.article-body-band{padding:1.5rem 0 2rem}.hacker-news-callout a:focus-visible{outline:3px solid var(--color-lab-vermilion);outline-offset:3px}@media (width<=820px){.article-masthead{padding-top:2rem}}@media (width<=480px){.article-masthead{padding-top:1.5rem}.article-masthead__copy h1{font-size:clamp(2.25rem,10.5vw,2.75rem);line-height:1}.article-body-band{padding-top:1.5rem}}@layer components{.article{font-size:var(--text-article,1.0625rem);line-height:var(--tw-leading,var(--text-article--line-height,1.55));color:var(--color-ink-body);hanging-punctuation:allow-end}.article :where(p,ul,ol,blockquote){margin-block:1rem}.article :where(p,li,blockquote){text-wrap:pretty}@media not all and (width>=40rem){.article :where(p){hyphens:auto;hyphenate-limit-chars:8 4 4;-webkit-hyphenate-limit-before:4;-webkit-hyphenate-limit-after:4;-webkit-hyphenate-limit-lines:2}}.article>:first-child{margin-top:0}.article>:last-child{margin-bottom:0}.article>:is(h2,h3,h4)+*{margin-top:0}.article>h2,.article>h3,.article>h4{color:var(--color-ink);text-wrap:balance;font-weight:700;position:relative}:is(.article>h2,.article>h3,.article>h4) code{color:inherit;font-size:.875em}.article :where(h2,h3,h4)>.heading-anchor{opacity:0;color:var(--color-ink-faint);padding-right:.375em;font-weight:400;text-decoration:none;transition:opacity .15s;position:absolute;top:0;right:100%}.article :where(h2,h3,h4)>.heading-anchor:before{content:"#";font-size:.7em}.article :where(h2,h3,h4)>.heading-anchor:hover{color:var(--color-ink-faint)}.article :where(h2,h3,h4):hover>.heading-anchor,.article .heading-anchor:focus-visible{opacity:1}.article>h2{margin-top:calc(var(--spacing,.25rem) * 8);margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:var(--text-3xl,1.875rem);line-height:var(--tw-leading,var(--text-3xl--line-height,calc(2.25 / 1.875)));line-height:1.3}.article>h3{margin-top:calc(var(--spacing,.25rem) * 6);margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)));line-height:1.4}.article>h4{margin-top:calc(var(--spacing,.25rem) * 5);margin-bottom:calc(var(--spacing,.25rem) * 2)}.article :where(a){color:var(--color-link);text-decoration-skip-ink:auto;text-underline-offset:.15em;font-weight:500;text-decoration:underline from-font}.article :where(a):hover{color:var(--color-link-hover)}.article :where(a[data-footnote-ref]){text-decoration:none}.article :where(strong){color:var(--color-ink);font-weight:600}.article :where(:not(pre)>code){--tw-slashed-zero:slashed-zero;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);border:1px solid var(--color-edge-faint);background-color:var(--color-well);color:var(--color-code);font-family:var(--font-mono);font-variant-ligatures:common-ligatures contextual;hyphens:none;border-radius:.25rem;padding:.0625em .3125em;font-size:.875em}.article :where(ul,ol){padding-inline-start:1.625em}.article :where(ul){list-style-type:disc}.article :where(ol){list-style-type:decimal}.article :where(li){margin-block:.5em;padding-inline-start:.375em}.article li :where(ul,ol){margin-block:.75em}.article :where(ul>li)::marker{color:var(--color-edge)}.article :where(ol>li)::marker{color:var(--color-ink-faint)}.article>blockquote{border-inline-start:.25rem solid var(--color-edge);color:var(--color-ink-secondary);padding-inline-start:1em;font-style:italic;font-weight:500}.article>pre{--tw-slashed-zero:slashed-zero;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);border:1px solid var(--color-edge);font-family:var(--font-mono);font-variant-ligatures:common-ligatures contextual;border-radius:0;margin-block:1.5rem;padding:.75rem 1rem;font-size:.875rem;line-height:1.7}@media not all and (width>=40rem){.article>pre{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));padding:.75rem;line-height:1.5}}.article>pre code{font-family:var(--font-mono)}.article :where(.katex-display){overscroll-behavior-inline:contain;-webkit-overflow-scrolling:touch;max-width:100%;overflow:auto hidden}@media not all and (width>=40rem){.article :where(.katex-display)>.katex{white-space:normal;line-height:2.25}}:where(.dark,.blog-dark) .article>pre{background-color:var(--shiki-dark-bg)!important;color:var(--shiki-dark)!important}:where(.dark,.blog-dark) .article>pre span{color:var(--shiki-dark)!important}.article>table{margin-block:2em;font-size:.875rem;line-height:1.7;display:block;overflow-x:auto}.article>table th,.article>table td{text-align:start;padding:.5rem}.article>table th{color:var(--color-ink);vertical-align:bottom;font-weight:600}.article>table thead,.article>table tbody tr{border-bottom:1px solid var(--color-edge)}.article>hr{border-color:var(--color-edge);margin-block:3em}.article>p :where(img){margin-block:2em}.article-headings-quiet .article>h2,.article-headings-quiet .article>h3,.article-headings-quiet .article>h4{font-weight:500}.article-headings-quiet .article>h2{margin-top:calc(var(--spacing,.25rem) * 12);margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,calc(2 / 1.5)));line-height:1.35}.article-headings-quiet .article>h3{margin-top:calc(var(--spacing,.25rem) * 10);margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)));line-height:1.4}.article-headings-quiet .article>h4{margin-top:calc(var(--spacing,.25rem) * 8);margin-bottom:calc(var(--spacing,.25rem) * 2);font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)))}}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}
