/*! 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}.article-surface.article-journal,.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.article-journal,.article-surface.legal-document{--color-edge-faint:color-mix(in srgb, var(--color-lab-rule) 55%, transparent)}}.article-surface.article-journal,.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:2rem;padding-bottom:0}.article-masthead__inner{border-bottom:1px solid var(--color-edge)}.article-masthead__kicker{border-top:1px solid var(--color-edge);border-bottom:1px solid var(--color-edge);color:var(--color-ink-muted);font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;justify-content:space-between;align-items:center;padding:.65rem 0;font-size:.75rem;display:flex}.article-masthead__kicker span:first-child{color:var(--color-lab-vermilion-deep)}.article-masthead__copy{flex-direction:column;min-width:0;padding:clamp(1.5rem,3vw,2.25rem) 0 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{border-top:1px solid var(--color-edge-faint);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;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}.article-post-nav{background:var(--color-page);padding:2rem 0 3rem}.article-post-nav__grid{max-width:var(--container-article);border-top:1px solid var(--color-edge);border-bottom:1px solid var(--color-edge);grid-template-columns:repeat(2,minmax(0,1fr));margin:0 auto;display:grid}.article-post-nav__previous,.article-post-nav__next{min-width:0}.article-post-nav__previous{border-right:1px solid var(--color-edge)}.article-post-nav__link{min-height:8rem;color:var(--color-ink-secondary);flex-direction:column;justify-content:space-between;padding:1rem;text-decoration:none;display:flex}.article-post-nav__next .article-post-nav__link{text-align:right;align-items:flex-end}.article-post-nav__direction{min-height:44px;color:var(--color-ink-faint);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;align-items:center;gap:.4rem;font-size:.72rem;display:inline-flex}.article-post-nav__title{text-wrap:balance;max-width:27ch;font-weight:620;line-height:1.25}.article-post-nav__link:hover{background:var(--color-well);color:var(--color-ink)}.article-subscribe{border-top:1px solid var(--color-lab-paper-bright);border-bottom:1px solid var(--color-lab-paper-bright);background:var(--color-lab-ink);color:var(--color-lab-paper-bright)}.article-subscribe__inner{grid-template-columns:minmax(12rem,.7fr) minmax(0,1.3fr);align-items:center;gap:1.75rem 3.5rem;padding-top:2rem;padding-bottom:2rem;display:grid}.article-subscribe__copy{border-left:4px solid var(--color-lab-vermilion);padding-left:1rem}.article-subscribe__copy>span{color:#fbf9f4a3;margin-bottom:.45rem;display:block}@supports (color:color-mix(in lab, red, red)){.article-subscribe__copy>span{color:color-mix(in srgb, var(--color-lab-paper-bright) 64%, transparent)}}.article-subscribe__copy>span{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;font-size:.72rem}.article-subscribe__copy>p{color:var(--color-lab-paper-bright);text-wrap:balance;margin:0;font-size:clamp(1.05rem,1.5vw,1.25rem);font-weight:650;line-height:1.25}.article-subscribe__actions{justify-content:flex-end;align-items:center;gap:1rem;display:flex}.article-subscribe .newsletter-form{justify-content:flex-start;gap:0}.article-subscribe .newsletter-form input,.article-subscribe .newsletter-form button{border-radius:0;height:46px}.article-subscribe .newsletter-form input{border-color:var(--color-lab-paper-bright);background:var(--color-lab-paper-bright);color:var(--color-lab-ink)}.article-subscribe .newsletter-form button{border:1px solid var(--color-lab-sulphur);background:var(--color-lab-sulphur);color:var(--color-lab-ink);border-left:0}.article-subscribe .newsletter-form button:hover{background:var(--color-lab-vermilion);color:var(--color-lab-paper-bright)}.article-subscribe__rss{border-bottom:1px solid var(--color-lab-sulphur);min-height:46px;color:var(--color-lab-sulphur);align-items:center;padding:0 .25rem;font-size:.875rem;font-weight:620;text-decoration:none;display:inline-flex}.article-subscribe__rss:hover{border-bottom-color:var(--color-lab-paper-bright);color:var(--color-lab-paper-bright)}.article-post-nav__link:focus-visible,.article-subscribe input:focus-visible,.article-subscribe button:focus-visible,.article-subscribe__rss:focus-visible,.hacker-news-callout a:focus-visible{outline:3px solid var(--color-lab-vermilion);outline-offset:3px}@media (width<=820px){.article-masthead{padding-top:1rem}.article-masthead__copy{padding-top:1.5rem}.article-subscribe__inner{grid-template-columns:1fr}}@media (width<=480px){.article-masthead{padding-top:0}.article-masthead__kicker{display:none}.article-masthead__copy h1{font-size:clamp(2.25rem,10.5vw,2.75rem);line-height:1}.article-body-band{padding-top:1.5rem}.article-post-nav__grid{grid-template-columns:1fr}.article-post-nav__previous{border-right:0;border-bottom:1px solid var(--color-edge)}.article-post-nav__link{min-height:7rem}.article-subscribe__actions,.article-subscribe .newsletter-signup,.article-subscribe .newsletter-form{width:100%}.article-subscribe__actions{flex-direction:column;align-items:stretch}.article-subscribe .newsletter-form input{width:100%;min-width:0}.article-subscribe__rss{width:fit-content}}@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) .article>pre{background-color:var(--shiki-dark-bg)!important;color:var(--shiki-dark)!important}:where(.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}
