.blog,.blog-scope{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--paper:#fff;--paper-raised:#fff;--paper-sunken:#f5f6f8;--paper-inset:#e9ecf1;--ink:#0f172a;--ink-2:#334155;--ink-3:#475569;--ink-4:#5b6675;--ink-5:#94a3b8;--rule:#e2e8f0;--rule-strong:#cbd5e1;--card-paper:#fff;--card-line:#0f172a;--card-lift:3px;--accent:#983c53;--accent-hover:#762d3f;--accent-soft:#fbf4f6;--accent-line:#f2dee3;--accent-ink:#fff;--danger:#b42318;--danger-soft:#fef3f2;--warn:#b54708;--warn-soft:#fffaeb;--code-bg:#0f172a;--code-ink:#e2e8f0;--code-kw:#7dd3fc;--code-str:#86efac;--code-num:#fdba74;--code-fn:#c4b5fd;--code-punc:#cbd5e1;--code-com:#94a3b8;--font-sans:var(--font-geist-sans,"Inter");--font-display:var(--font-spectral,"Spectral"), "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, "Times New Roman", serif;--font-ui:var(--font-sans,"Inter"), "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, system-ui, sans-serif;--font-mono:var(--font-jetbrains-mono,"JetBrains Mono"), "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--step--2:.6875rem;--step--1:.8125rem;--step-0:.9375rem;--step-1:1.125rem;--step-2:1.375rem;--step-3:1.6875rem;--step-4:2.125rem;--step-5:2.625rem;--step-6:clamp(2.5rem, 1.6rem + 3.6vw, 4rem);--s1:.25rem;--s2:.5rem;--s3:.75rem;--s4:1rem;--s5:1.5rem;--s6:2rem;--s7:3rem;--s8:4rem;--s9:6rem;--ctl-h:2rem;--ctl-h-lg:2.25rem;--ctl-pad-x:.75rem;--ctl-pad-x-lg:1rem;--tap-min:2.75rem;--radius-s:6px;--radius-m:10px;--radius-l:16px;--radius-full:999px;--shadow-1:0 1px 2px #16150f0d, 0 1px 1px #16150f08;--shadow-2:0 4px 16px -4px #16150f1a, 0 2px 4px #16150f0a;--ease:cubic-bezier(.22, .61, .36, 1);--ease-out:cubic-bezier(.16, 1, .3, 1);--dur-1:.12s;--dur-2:.2s;--dur-3:.34s;--measure:42rem;--shell-max:76rem}.blog{background:var(--paper);color:var(--ink);font-family:var(--font-ui);font-size:var(--step-0);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;overflow-wrap:anywhere;line-height:1.55;overflow-x:clip}.blog :focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-s)}.blog ::selection{background:var(--accent-soft);color:var(--ink)}.blog a{color:inherit}@media (prefers-reduced-motion:reduce){.blog *,.blog :before,.blog :after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}.blog .tpl{--tpl-measure:calc(var(--measure) + 2 * var(--s5));max-width:var(--tpl-measure);padding:var(--s8) var(--s5) 0;margin:0 auto}.blog .tpl__head{margin-bottom:var(--s6)}.blog .tpl__kicker{font-size:var(--step--2);letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin-bottom:var(--s3);font-weight:600}.blog .tpl__title{font-family:var(--font-display);font-size:var(--step-6);letter-spacing:-.032em;text-wrap:balance;color:var(--ink);margin:0;font-weight:700;line-height:1.08}.blog .tpl__subtitle{margin:var(--s4) 0 0;font-family:var(--font-display);font-size:var(--step-3);color:var(--ink-3);letter-spacing:-.012em;text-wrap:pretty;line-height:1.4}.blog .tpl__byline{align-items:center;gap:var(--s3);margin-top:var(--s6);padding-top:var(--s5);border-top:1px solid var(--rule);display:flex}.blog .tpl__avatar{background:var(--paper-inset);width:2.5rem;height:2.5rem;color:var(--ink-2);font-family:var(--font-display);font-size:var(--step-1);text-transform:uppercase;border-radius:50%;flex:none;place-items:center;display:grid}.blog .tpl__author{font-size:var(--step-0);color:var(--ink);margin:0;font-weight:600}.blog .tpl__dateline,.blog .tpl__meta-line{font-size:var(--step--1);color:var(--ink-4);margin:1px 0 0}.blog .tpl__cover{margin:0 0 var(--s7)}.blog .tpl__cover-img{object-fit:cover;border-radius:var(--radius-m);background:var(--paper-sunken);width:100%;height:auto;max-height:32rem;display:block}.blog .tpl__caption{margin-top:var(--s3);text-align:center;font-family:var(--font-ui);font-size:var(--step--1);color:var(--ink-4);line-height:1.5}.blog .tpl__body{padding-bottom:var(--s7)}.blog .tpl__body>:first-child{margin-top:0}.blog .tpl__blank{justify-items:center;gap:var(--s4);padding:var(--s8) 0;color:var(--ink-4);text-align:center;border-top:1px solid var(--rule);display:grid}.blog .tpl__tags{gap:var(--s2);padding-top:var(--s5);border-top:1px solid var(--rule);flex-wrap:wrap;display:flex}.blog .tpl__tags--top{margin:var(--s4) 0 var(--s5);border-top:0;padding-top:0}.blog .tpl__back{align-items:center;gap:var(--s1);margin-bottom:var(--s5);font-family:var(--font-ui);font-size:var(--step--1);color:var(--ink-3);font-weight:500;text-decoration:none;display:inline-flex}.blog .tpl__back:hover{color:var(--accent)}.blog .tpl__back-icon{width:1.1em;height:1.1em}.blog .tpl--technical .tpl__back-row{grid-column:1/-1}.blog .chip{align-items:center;gap:var(--s1);border-radius:var(--radius-s);padding:var(--s1) var(--s2);font-size:var(--step--2);text-transform:uppercase;letter-spacing:.02em;background:var(--paper-sunken);color:var(--ink-3);border:1px solid #0000;font-weight:500;text-decoration:none;display:inline-flex}.blog a.chip:hover{background:var(--accent-soft);color:var(--accent-hover)}@media (min-width:900px){.blog .tpl--magazine .tpl__cover--wide{width:calc(100% + 8rem);margin-left:-4rem}}.blog .tpl--minimal{--tpl-measure:calc(38rem + 2 * var(--s5));padding-top:var(--s9)}.blog .tpl--minimal .tpl__title{font-size:var(--step-4);letter-spacing:-.022em;line-height:1.18}.blog .tpl--minimal .tpl__subtitle{font-size:var(--step-2);margin-top:var(--s3)}.blog .tpl--minimal .tpl__meta-line{margin-top:var(--s5);font-variant-numeric:tabular-nums}.blog .tpl--minimal .tpl__head{margin-bottom:var(--s7)}.blog .tpl--minimal .blog-prose{font-size:var(--step-1)}.blog .tpl--editorial{padding-top:0}.blog .tpl--editorial .tpl__cover--bleed{width:100vw;max-width:100vw;margin-left:calc(50% - 50vw);margin-bottom:var(--s7);border-radius:0}.blog .tpl--editorial .tpl__cover--bleed .tpl__cover-img{border-radius:0;max-height:24rem}.blog .tpl__head--centred{text-align:center}.blog .tpl__head--centred .tpl__byline{text-align:left;border-top:0;justify-content:center;padding-top:0}.blog .tpl__rule{background:var(--accent);width:4rem;height:2px;margin:var(--s5) auto 0;border-radius:var(--radius-full)}.blog .tpl--editorial .tpl__body>.blog-prose>p:first-of-type:first-letter,.blog .tpl--editorial .tpl__body.blog-prose>p:first-of-type:first-letter{float:left;font-family:var(--font-display);color:var(--ink);padding:.08em .1em 0 0;font-size:3.4em;font-weight:700;line-height:.82}.blog .tpl--technical{--tpl-measure:60rem;gap:var(--s7);grid-template-columns:12rem minmax(0,1fr);align-items:start;display:grid}.blog .tpl--technical .tpl__title{font-family:var(--font-ui);font-size:var(--step-5);letter-spacing:-.028em;font-weight:600}.blog .tpl--technical .tpl__subtitle{font-family:var(--font-ui);font-size:var(--step-2)}.blog .tpl--technical .blog-prose{font-family:var(--font-ui);font-size:var(--step-1);letter-spacing:0;line-height:1.68}.blog .tpl--technical .blog-prose h2,.blog .tpl--technical .blog-prose h3{font-family:var(--font-ui);letter-spacing:-.02em}.blog .tpl--technical .tpl__rail{top:var(--s7);gap:var(--s5);display:grid;position:sticky}.blog .tpl__facts{gap:var(--s4);font-size:var(--step--1);margin:0;display:grid}.blog .tpl__facts dt{font-size:var(--step--2);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-4);margin-bottom:2px;font-weight:600}.blog .tpl__facts dd{color:var(--ink-2);margin:0}.blog .tpl__rail-tags{gap:var(--s2);padding-top:var(--s5);border-top:1px solid var(--rule);flex-wrap:wrap;display:flex}@media (max-width:900px){.blog .tpl--technical{gap:var(--s5);grid-template-columns:1fr}.blog .tpl--technical .tpl__rail{padding-top:var(--s5);border-top:1px solid var(--rule);order:2;position:static}.blog .tpl__facts{grid-template-columns:repeat(auto-fit,minmax(8rem,1fr))}}@media (max-width:640px){.blog .tpl{padding:var(--s6) var(--s4) 0}.blog .tpl--minimal{padding-top:var(--s7)}.blog .tpl--editorial{padding-top:0}}.blog .blog-share{max-width:calc(var(--measure) + 2 * var(--s5));padding:0 var(--s5) var(--s8);margin:0 auto}@media (max-width:640px){.blog .blog-share{padding:0 var(--s4) var(--s7)}}.blog .share{align-items:center;gap:var(--s4);padding-top:var(--s5);border-top:1px solid var(--rule);flex-wrap:wrap;display:flex}.blog .share__label{font-size:var(--step--1);color:var(--ink-4)}.blog .share__list{align-items:center;gap:var(--s2);margin:0;padding:0;list-style:none;display:flex}.blog .share__link{width:var(--tap-min);height:var(--tap-min);border-radius:var(--radius-full);background:var(--paper-sunken);color:var(--ink-2);cursor:pointer;transition:background var(--dur-2) var(--ease), color var(--dur-2) var(--ease), transform var(--dur-2) var(--ease);border:0;place-items:center;display:grid}.blog .share__link:hover,.blog .share__link:focus-visible{background:var(--brand,var(--accent));color:#fff;transform:translateY(-2px)}.blog .share__link--copy{--brand:var(--accent-hover)}.blog .share__link--copy[data-copy=copied]{--brand:#15803d;background:var(--brand);color:#fff}.blog .share__link--copy[data-copy=failed]{--brand:var(--danger);background:var(--danger-soft);color:var(--danger)}.blog .share__status{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.blog .blog-prose{font-family:var(--font-display);font-size:var(--step-2);color:var(--ink);letter-spacing:-.003em;line-height:1.72}.blog .blog-prose>*+*{margin-top:1.35em}.blog .blog-prose p{-webkit-hyphens:auto;hyphens:auto;margin-bottom:0}.blog .blog-prose h2,.blog .blog-prose h3{font-family:var(--font-display);letter-spacing:-.018em;color:var(--ink);font-weight:600;line-height:1.22}.blog .blog-prose h2{font-size:var(--step-4);margin-top:2em}.blog .blog-prose h3{font-size:var(--step-3);margin-top:1.7em}.blog .blog-prose h2+p,.blog .blog-prose h3+p{margin-top:.7em}.blog .blog-prose strong{font-weight:700}.blog .blog-prose em{font-style:italic}.blog .doc-link{color:var(--ink);text-decoration:underline;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent);text-underline-offset:3px;transition:color var(--dur-1) var(--ease);text-decoration-thickness:1.5px}.blog .doc-link:hover{color:var(--accent)}.blog .blog-prose code{font-family:var(--font-mono);background:var(--paper-inset);border-radius:var(--radius-s);padding:.12em .35em;font-size:.85em}.blog .doc-code{font-family:var(--font-mono);font-size:var(--step-0);background:var(--code-bg);color:var(--code-ink);padding:var(--s4) var(--s5);border-radius:var(--radius-m);white-space:pre;tab-size:2;line-height:1.65;overflow-x:auto}.blog .doc-code code{font-size:inherit;color:inherit;background:0 0;padding:0}.blog .hljs-keyword,.blog .hljs-selector-tag,.blog .hljs-literal,.blog .hljs-type,.blog .hljs-built_in,.blog .hljs-name{color:var(--code-kw)}.blog .hljs-string,.blog .hljs-regexp,.blog .hljs-symbol,.blog .hljs-quote,.blog .hljs-addition{color:var(--code-str)}.blog .hljs-number,.blog .hljs-deletion,.blog .hljs-meta,.blog .hljs-link{color:var(--code-num)}.blog .hljs-title,.blog .hljs-section,.blog .hljs-attr,.blog .hljs-attribute,.blog .hljs-variable,.blog .hljs-template-variable{color:var(--code-fn)}.blog .hljs-punctuation,.blog .hljs-operator,.blog .hljs-tag,.blog .hljs-params,.blog .hljs-selector-attr,.blog .hljs-subst{color:var(--code-punc)}.blog .hljs-comment,.blog .hljs-doctag{color:var(--code-com)}.blog .doc-table-wrap{max-width:100%;overflow-x:auto}.blog .doc-table-wrap:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.blog .blog-prose table{border-collapse:collapse;table-layout:fixed;width:100%;font-family:var(--font-ui);font-size:var(--step--1);line-height:1.5}.blog .blog-prose :is(th,td){border:1px solid var(--rule);padding:var(--s2) var(--s3);text-align:left;vertical-align:top;min-width:4rem;position:relative}.blog .blog-prose th{background:var(--paper-sunken);color:var(--ink);font-weight:600}.blog .blog-prose :is(th,td)>p{margin:0}.blog .blog-prose :is(th,td)>p+p{margin-top:.5em}@media (max-width:640px){.blog .blog-prose table{table-layout:auto;width:max-content;min-width:100%}}.blog .doc-quote{border-left:3px solid var(--accent);color:var(--ink-2);padding:.15em 0 .15em 1.35em;font-size:1.06em;font-style:italic}.blog .doc-quote p+p{margin-top:.8em}.blog .doc-rule{background:0 0;border:0;width:6rem;height:1px;margin:2.6em auto;position:relative}.blog .doc-rule:after{content:"· · ·";color:var(--ink-4);letter-spacing:.5em;font-size:var(--step-0);place-items:center;display:grid;position:absolute;inset:0}.blog .blog-prose ul,.blog .blog-prose ol{padding-left:1.3em}.blog .blog-prose ol{list-style:decimal}.blog .blog-prose ol ol{list-style:lower-alpha}.blog .blog-prose li+li{margin-top:.45em}.blog .blog-prose li p{margin:0}.blog .blog-prose ul{padding-left:1.25em;list-style:none}.blog .blog-prose ul>li{position:relative}.blog .blog-prose ul>li:before{content:"";background:var(--ink-4);border-radius:50%;width:5px;height:5px;position:absolute;top:.72em;left:-.95em}.blog .blog-prose ul ul>li:before{border:1px solid var(--ink-4);background:0 0}.blog .doc-tasks{--task-box:.85em;--task-gap:.6em;list-style:none}.blog .blog-prose .doc-tasks{padding-left:0}.blog .doc-tasks .doc-tasks{margin-top:.45em}.blog .doc-tasks li{gap:var(--task-gap);align-items:flex-start;display:flex}.blog .doc-tasks li:before{display:none}.blog .doc-tasks li>div{flex:auto;min-width:0}.blog .doc-tasks li>label{margin-top:calc((1.72em - var(--task-box)) / 2);flex:none;display:flex}@supports (margin-top:1lh){.blog .doc-tasks li>label{margin-top:calc((1lh - var(--task-box)) / 2)}}.blog .doc-tasks input[type=checkbox]{appearance:none;width:var(--task-box);height:var(--task-box);border:1.5px solid var(--ink-4);border-radius:4px;flex:none;place-items:center;margin:0;display:grid}.blog .doc-tasks input[type=checkbox]:checked{background:var(--accent);border-color:var(--accent)}.blog .doc-tasks input[type=checkbox]:checked:after{content:"";width:calc(var(--task-box) * .28);height:calc(var(--task-box) * .52);border:solid var(--accent-ink);border-width:0 calc(var(--task-box) * .1) calc(var(--task-box) * .1) 0;transform:rotate(42deg) translate(calc(var(--task-box) * -.05), calc(var(--task-box) * -.05))}.blog .doc-tasks li[data-checked=true]>div{color:var(--ink-4);text-decoration:line-through}.blog .doc-image{border-radius:var(--radius-m);max-width:100%;height:auto;margin-inline:auto;display:block}.blog .doc-caption{margin-top:var(--s3);text-align:center;font-family:var(--font-ui);font-size:var(--step--1);color:var(--ink-4);line-height:1.5}.blog .doc-figure{margin:2em 0}@media (min-width:900px){.blog .tpl__body .doc-figure{width:calc(100% + 6rem);margin-left:-3rem}.blog .tpl--technical .tpl__body .doc-figure,.blog .tpl--minimal .tpl__body .doc-figure{width:100%;margin-left:0}}@media (max-width:640px){.blog .blog-prose{font-size:var(--step-1);line-height:1.68}.blog .blog-prose h2{font-size:var(--step-3)}.blog .blog-prose h3{font-size:var(--step-2)}.blog .doc-code{padding:var(--s3);font-size:var(--step--1)}}.blog .idx{max-width:var(--shell-max);padding:var(--s8) var(--s5) var(--s9);margin:0 auto}.blog .idx__head{max-width:var(--measure);margin:0 auto var(--s6);text-align:center}.blog .idx__h1{font-family:var(--font-display);font-size:var(--step-5);letter-spacing:-.028em;text-wrap:balance;margin:0;font-weight:700;line-height:1.1}.blog .idx__intro{margin:var(--s4) 0 0;color:var(--ink-3);font-size:var(--step-1);line-height:1.6}.blog .idx__tags{justify-content:center;gap:var(--s2);margin-bottom:var(--s7);flex-wrap:wrap;display:flex}.blog .idx__tags .chip[aria-current=page]{background:var(--accent);color:var(--accent-ink)}.blog .idx__grid{gap:var(--s5);grid-template-columns:repeat(auto-fill,minmax(18rem,1fr));display:grid}.blog .idx__card{border:1px solid var(--rule);border-radius:var(--radius-m);background:var(--paper-raised);transition:border-color var(--dur-2) var(--ease), transform var(--dur-2) var(--ease);overflow:hidden}.blog .idx__card:hover{border-color:var(--accent);transform:translateY(-3px)}.blog .idx__link{color:inherit;height:100%;text-decoration:none;display:block}.blog .idx__thumb{aspect-ratio:16/10;object-fit:cover;background:var(--paper-sunken);width:100%;display:block}.blog .idx__body{padding:var(--s4) var(--s5) var(--s5)}.blog .idx__link>.idx__body:first-child{padding-top:var(--s5)}.blog .idx__title{font-family:var(--font-display);font-size:var(--step-2);letter-spacing:-.018em;text-wrap:pretty;margin:0;font-weight:600;line-height:1.25}.blog .idx__excerpt{margin:var(--s3) 0 0;color:var(--ink-3);font-size:var(--step-0);-webkit-line-clamp:3;-webkit-box-orient:vertical;line-height:1.6;display:-webkit-box;overflow:hidden}.blog .idx__meta{margin:var(--s4) 0 0;font-size:var(--step--1);color:var(--ink-4)}.blog .idx__empty{text-align:center;color:var(--ink-3);padding:var(--s8) 0}@media (max-width:640px){.blog .idx{padding:var(--s6) var(--s4) var(--s8)}}.blog .rail{--read:0;--ticks:32;z-index:90;pointer-events:none;position:fixed;inset:0}.blog .rail[data-idle]{display:none}.blog .rail__bar{background:var(--accent-line);height:2px;position:absolute;inset:0 0 auto}.blog .rail__fill{background:var(--accent);height:100%;transform:scaleX(var(--read));transform-origin:0;display:block}.blog .rail__ticks{flex-direction:column;gap:9px;display:none;position:absolute;top:50%;left:clamp(.75rem,2.2vw,2.5rem);translate:0 -50%}.blog .rail__tick{background:var(--ink);transform-origin:0;width:15px;height:2px;opacity:clamp(.13, calc(var(--read) * var(--ticks) - var(--i)), .85);scale:clamp(.5, calc(var(--read) * var(--ticks) - var(--i)), 1) 1;border-radius:1px}@media (min-width:1180px){.blog .rail__ticks{display:flex}.blog .rail__bar{display:none}}@media print{.blog .rail{display:none}}.blog .blog-subscribe{max-width:calc(var(--measure) + 2 * var(--s5));padding:0 var(--s5) var(--s8);margin:0 auto}@media (max-width:640px){.blog .blog-subscribe{padding:0 var(--s4) var(--s7)}}.blog .sub{align-items:start;gap:var(--s4);padding:var(--s5);border:1px solid var(--accent-line);border-radius:var(--radius-l);background:var(--accent-soft);grid-template-columns:max-content 1fr;display:grid}.blog .sub__mark{border-radius:var(--radius-full);background:var(--accent);width:2.5rem;height:2.5rem;color:var(--accent-ink);place-items:center;display:grid}.blog .sub__title{font-family:var(--font-display);font-size:var(--step-2);letter-spacing:-.01em;color:var(--ink);margin:0;font-weight:600;line-height:1.2}.blog .sub__body{margin:var(--s2) 0 0;font-size:var(--step--1);color:var(--ink-3);max-width:46ch;line-height:1.55}.blog .sub__form{grid-column:1/-1;margin:0}@media (min-width:720px){.blog .sub__form{grid-column:2}}.blog .sub__label{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.blog .sub__row{gap:var(--s2);flex-wrap:wrap;display:flex}.blog .sub__input{min-width:0;height:var(--tap-min);padding:0 var(--ctl-pad-x-lg);font:inherit;font-size:var(--step-0);color:var(--ink);background:var(--paper);border:1px solid var(--rule-strong);border-radius:var(--radius-m);flex:14rem}.blog .sub__input::placeholder{color:var(--ink-5)}.blog .sub__input:focus-visible{border-color:var(--accent)}.blog .sub__input[aria-invalid]{border-color:var(--danger)}.blog .sub__input:disabled{color:var(--ink-4);background:var(--paper-sunken)}.blog .sub__submit{justify-content:center;align-items:center;gap:var(--s2);height:var(--tap-min);padding:0 var(--s5);font:inherit;font-size:var(--step--1);color:var(--accent-ink);background:var(--accent);border:1px solid var(--accent);border-radius:var(--radius-m);cursor:pointer;transition:background var(--dur-2) var(--ease);font-weight:600;display:inline-flex}.blog .sub__submit:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.blog .sub__submit:disabled{cursor:progress;opacity:.75}.blog .sub__spin{animation:.9s linear infinite sub-spin}@keyframes sub-spin{to{rotate:360deg}}.blog .sub__trap{opacity:0;width:1px;height:1px;position:absolute;left:-9999px}.blog .sub__problem:empty{display:none}.blog .sub__problem{margin:var(--s2) 0 0;font-size:var(--step--1);color:var(--danger)}@media (max-width:520px){.blog .sub{padding:var(--s4)}.blog .sub__submit{flex:auto}}
