.blogIndex,.post,.contactPage{padding-bottom:72px}.back{font-size:12.5px}.back a{color:var(--muted);text-underline-offset:4px;text-decoration:underline}.badge{color:var(--draft);vertical-align:.1em;border:1px solid;border-radius:999px;margin-inline-end:4px;padding:1px 9px;font-size:11px;font-weight:650;line-height:1.5;display:inline-block}.postMeta{color:var(--muted);font-variant-numeric:tabular-nums;flex-wrap:wrap;align-items:center;gap:4px 16px;margin:0;font-size:12.5px;display:flex}.postMeta .badge{margin:0}.updated{color:var(--lime)}.topics{flex-wrap:wrap;gap:6px;margin:12px 0 0;padding:0;font-size:11.5px;list-style:none;display:flex}.topics li>*{border:1px solid var(--rule);color:var(--muted);border-radius:999px;padding:2px 10px;display:inline-block}.topics a:hover{border-color:var(--blue);color:var(--blue);text-decoration:none}.blogHead{max-width:68ch;padding:44px 0 26px}.blogHead .back{margin-bottom:14px}.blogHead>p:not(.back){color:var(--muted);margin-top:14px;font-size:16px;line-height:1.55}.topicNav ul{flex-wrap:wrap;gap:8px;margin:0 0 26px;padding:0;font-size:12.5px;list-style:none;display:flex}.topicNav a{border:1px solid var(--frame);border-radius:999px;padding:5px 14px;display:inline-block}.lead{isolation:isolate;border:1px solid var(--frame);border-radius:14px;align-items:flex-end;min-height:300px;margin-bottom:44px;padding:36px 38px;display:flex;position:relative;overflow:hidden}.lead .landscape{opacity:.9;filter:none;width:46%}.leadBody{width:min(66%,780px)}.lead h2{letter-spacing:-.03em;font-size:clamp(25px,2.7vw,39.5px);font-weight:650;line-height:1.1}.lead h2 a:hover{color:inherit;text-decoration-color:var(--blue);text-decoration-thickness:2px}.lead .dek{max-width:62ch;color:var(--muted);margin-top:14px;font-size:16px;line-height:1.55}.lead .postMeta{margin-top:22px}.streams{grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:0 64px;padding-top:8px;display:grid}.streams>:only-child{grid-column:1/-1;max-width:62rem}.streams h2{border-bottom:1px solid var(--rule);letter-spacing:-.015em;padding-bottom:12px;font-size:20px;font-weight:650}.postCard{border-bottom:1px solid var(--rule);padding:24px 0}.postCard h3{letter-spacing:-.015em;font-size:20px;line-height:1.25}.postCard .dek{max-width:65ch;color:var(--muted);margin-top:8px;font-size:14.5px;line-height:1.5}.postCard .postMeta{margin-top:12px}.noteList{margin:0;padding:0;list-style:none}.noteItem{border-bottom:1px solid var(--rule);grid-template-columns:7em minmax(0,1fr);gap:16px;padding:18px 0;display:grid}.noteItem time{color:var(--lime);font-variant-numeric:tabular-nums;padding-top:2px;font-size:11.5px}.noteItem h3{font-size:15.5px;line-height:1.35}.noteItem h3 .badge{margin-left:8px}.noteItem p{color:var(--muted);margin-top:4px;font-size:13.5px;line-height:1.5}.post{grid-template-columns:minmax(0,41.5rem);grid-template-areas:"head""toc""body""end";column-gap:72px;display:grid}.postHead{grid-area:head;max-width:41.5rem;padding:40px 0 32px}.postHead .back{margin-bottom:18px}.draftBanner{border:1px solid var(--draft);border-radius:8px;margin-bottom:22px;padding:12px 16px;font-size:13.5px;line-height:1.5}.draftBanner strong{color:var(--draft);font-weight:650}.postHead h1{font-size:clamp(29px,3.25vw,47px);line-height:1.08}.postHead .dek{color:var(--muted);margin-top:16px;font-size:18px;line-height:1.5}.byline{margin-top:22px;font-size:13.5px}.byline strong{font-weight:650}.byline span{color:var(--muted)}.byline strong{color:var(--fg)}.postHead .postMeta{margin-top:6px}.alsoOn{color:var(--muted);margin-top:12px;font-size:12.5px}.alsoOn a{color:var(--blue);text-decoration:underline}.tocRail{grid-area:toc}.toc{border:1px solid var(--rule);border-radius:10px;margin-bottom:28px;padding:16px 18px;font-size:12.5px;line-height:1.4}.toc h2{color:var(--muted);margin-bottom:10px;font-size:12.5px;font-weight:650}.toc ol{gap:2px;margin:0;padding:0;list-style:none;display:grid}.toc a{color:var(--muted);border-left:2px solid #0000;padding:5px 10px;display:block}.toc a:hover{color:var(--fg);text-decoration:none}.toc a[aria-current]{border-left-color:var(--lime);color:var(--fg)}.toc li{position:relative}.toc li:has(>.tocToggle)>a{padding-right:34px}.tocToggle{width:28px;height:28px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:6px;place-items:center;padding:0;display:grid;position:absolute;top:2px;right:0}.tocToggle[hidden]{display:none}.tocToggle:hover{color:var(--fg)}.tocToggle svg{transition:transform .15s}.tocToggle[aria-expanded=true] svg{transform:rotate(90deg)}.toc ol ol{margin:2px 0 4px 12px}.toc ol[hidden]{display:none}@media (scripting:none){.toc ol[hidden]{display:grid}}.toc ol ol a{padding:3px 10px;font-size:11.5px}@media (width>=1180px){.post.hasToc{grid-template-columns:minmax(0,1fr) 13.5rem;grid-template-areas:"head head""body toc""end."}.post.hasToc .prose>:is(p,ul,ol,blockquote,h2,h3,h4){max-width:45rem}.tocRail{position:relative}.toc{border:0;max-height:calc(100vh - 48px);margin:0;padding:0;position:sticky;top:24px;overflow-y:auto}}.prose{grid-area:body;min-width:0;font-size:16px;line-height:1.7}.prose>*+*{margin-top:1.15em}.prose h2{letter-spacing:-.02em;margin-top:2.3em;scroll-margin-top:24px;font-size:25px;font-weight:650;line-height:1.2}.prose h3{letter-spacing:-.015em;margin-top:1.9em;scroll-margin-top:24px;font-size:19px;font-weight:650;line-height:1.3}.prose h2+*,.prose h3+*{margin-top:.6em}.prose a{color:var(--blue);text-underline-offset:3px;text-decoration:underline 1px}.prose a:hover{text-decoration-thickness:2px}.prose strong{font-weight:650}.prose ul,.prose ol{padding-left:1.3em}.prose li+li{margin-top:.5em}.prose li::marker{color:var(--blue)}.prose :not(pre)>code{background:var(--code-bg);overflow-wrap:anywhere;border-radius:4px;padding:.1em .35em;font:.86em/1.4 ui-monospace,SF Mono,Menlo,Consolas,monospace}.anchor{color:var(--muted);opacity:0;margin-left:.35em;font-weight:400;transition:opacity .15s ease-out;text-decoration:none!important}.prose h2:hover .anchor,.prose h3:hover .anchor{opacity:1}.prose hr{background:var(--rule);border:0;height:1px}.prose blockquote{border-left:1px solid var(--frame);color:var(--muted);margin-inline:0;padding-left:18px}.codeBlock{margin-top:1.4em;position:relative}.codeBlock pre{border:1px solid var(--rule);tab-size:2;border-radius:8px;margin:0;padding:16px 18px;font:12.5px/1.65 ui-monospace,SF Mono,Menlo,Consolas,monospace;overflow-x:auto;background:var(--code-bg)!important}.astro-code,.astro-code span{color:var(--shiki-light)}:root[data-theme=dark] .astro-code,:root[data-theme=dark] .astro-code span{color:var(--shiki-dark)}.copyCode{border:1px solid var(--frame);background:var(--bg);color:var(--fg);cursor:pointer;border-radius:6px;padding:4px 10px;font:11px/1.4 inherit;position:absolute;top:8px;right:8px}.copyCode:hover{border-color:var(--blue);color:var(--blue)}.copyCode:focus-visible,.themeToggle:focus-visible,.tableWrap:focus-visible,summary:focus-visible{outline:2px solid var(--lime);outline-offset:3px}.tableWrap{border:1px solid var(--rule);border-radius:8px;margin-top:1.5em;overflow-x:auto}.tableWrap table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:13.5px;line-height:1.45}.tableWrap th,.tableWrap td{border-bottom:1px solid var(--rule);text-align:left;vertical-align:top;padding:10px 14px}.tableWrap th{background:var(--raised);white-space:nowrap;font-weight:650}.tableWrap tr:last-child td{border-bottom:0}.tableWrap td{min-width:6.5em}.tableWrap .sortButton{all:unset;cursor:pointer;align-items:baseline;gap:.35em;display:inline-flex}.tableWrap .sortButton:after{content:"↕";color:var(--muted);font-size:.85em}.tableWrap th[aria-sort=ascending] .sortButton:after{content:"↑";color:var(--fg)}.tableWrap th[aria-sort=descending] .sortButton:after{content:"↓";color:var(--fg)}.dataTable .tableWrap.scrolls{overflow-y:auto}.dataTable .tableWrap.scrolls thead th{z-index:1;box-shadow:inset 0 -1px var(--rule);position:sticky;top:0}.dataTable{position:relative}.dataTable:has(.tableWrap.scrolls:not(.atEnd)):after{content:"";inset:auto 1px calc(1px + var(--bar,0px));background:linear-gradient(to bottom, transparent, var(--bg));pointer-events:none;border-radius:0 0 7px 7px;height:48px;position:absolute}@media print{.dataTable .tableWrap.scrolls{overflow-y:visible;max-height:none!important}.dataTable:after{display:none!important}}.tableWrap .sortButton:focus-visible{outline:2px solid var(--lime);outline-offset:3px;border-radius:2px}.dataTable td.costGood{color:color-mix(in oklch, var(--cost-good) var(--cost-t), var(--cost-good-soft));font-weight:600}.dataTable td.costBad{color:color-mix(in oklch, var(--cost-bad) var(--cost-t), var(--cost-bad-soft));font-weight:600}.footnotes{border-top:1px solid var(--rule);color:var(--muted);margin-top:3em;padding-top:1em;font-size:13.5px}.postAside{border:1px solid var(--rule);border-left:3px solid var(--lime);border-radius:8px;max-width:45rem;margin-top:1.6em;padding:14px 18px;font-size:14.5px;line-height:1.6}.postAside>*+*{margin-top:.6em}.postAsideTitle{color:var(--lime);letter-spacing:.02em;text-transform:uppercase;font-size:11.5px;font-weight:650}.postAsideFold>summary{cursor:pointer;letter-spacing:0;text-transform:none;font-size:17px}.prose .smallNote{color:var(--muted);font-size:13.5px;font-style:italic;line-height:1.6}.postDetails{margin-top:1em}.postDetails summary{color:var(--muted);cursor:pointer;font-size:14.5px}.postDetails[open] summary{margin-bottom:.6em}.figure{margin:2em 0 0}.panels{gap:16px;display:grid}@media (width>=760px){.panels:has(>.chart~.chart){grid-template-columns:repeat(auto-fit,minmax(19rem,1fr))}}.figure figcaption{color:var(--muted);margin-top:12px;font-size:12.5px;line-height:1.5}.figure .source{margin-top:4px;display:block}.panels img{border:1px solid var(--rule);border-radius:8px;width:100%;height:auto;display:block}.chart{border:1px solid var(--rule);border-radius:10px;min-width:0;padding:18px 18px 12px;font-size:12.5px;line-height:1.4}.chartTitle{font-size:13.5px;font-weight:650;line-height:1.35;margin:0 0 16px!important}.barRows{grid-template-columns:max-content minmax(0,1fr) max-content;align-items:center;gap:12px;margin:0;padding:0;list-style:none;display:grid}.barRow,.axisRow{display:contents}.rowValue{font-variant-numeric:tabular-nums}.track{height:22px;position:relative}.bar{background:var(--mark-muted);border-radius:0 4px 4px 0;position:absolute;inset:0 auto 0 0}[data-highlight] .bar{background:var(--series-1)}.reference{border-left:1px dashed var(--muted);position:absolute;top:-6px;bottom:-6px}.whisker{background:var(--series-1);height:2px;position:absolute;top:50%;transform:translateY(-50%)}.whisker:before,.whisker:after{content:"";background:var(--series-1);width:2px;height:12px;position:absolute;top:-5px}.whisker:before{left:0}.whisker:after{right:0}.estimate{background:var(--series-1);width:12px;height:12px;box-shadow:0 0 0 2px var(--bg);border-radius:50%;margin-left:-6px;position:absolute;top:50%;transform:translateY(-50%)}.axisRow .track{height:16px}.tick{color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums;font-size:11px;position:absolute;top:0;transform:translate(-50%)}.scatter{grid-template-columns:auto minmax(0,1fr);grid-template-areas:"ytitle ytitle""yticks plot"".xticks"".xtitle";gap:6px 10px;font-size:11.5px;display:grid}.axisTitle{color:var(--muted)}.yTitle{grid-area:ytitle}.xTitle{text-align:center;grid-area:xtitle}.yTicks{grid-area:yticks;width:2.4em;position:relative}.yTicks span,.xTicks span{color:var(--muted);font-variant-numeric:tabular-nums;position:absolute}.yTicks span{right:0;transform:translateY(50%)}.plot{border-bottom:1px solid var(--frame);border-left:1px solid var(--frame);grid-area:plot;height:240px;position:relative}.gridline{border-top:1px solid var(--grid);position:absolute;left:0;right:0}.xTicks{grid-area:xticks;height:1.3em;position:relative}.xTicks span{transform:translate(-50%)}.point{position:absolute}[data-series="0"]{--mark:var(--series-1)}[data-series="1"]{--mark:var(--series-2)}[data-series="2"]{--mark:var(--series-3)}.marker{background:var(--mark);width:12px;height:12px;display:inline-block}[data-series="0"] .marker{border-radius:50%}[data-series="1"] .marker{border-radius:2px}[data-series="2"] .marker{clip-path:polygon(50% 0,100% 100%,0 100%)}.point .marker{box-shadow:0 0 0 2px var(--bg);position:absolute;top:-6px;left:-6px}.pointLabel{white-space:nowrap;position:absolute;top:-.7em}.point[data-side=right] .pointLabel{left:12px}.point[data-side=left] .pointLabel{right:12px}.legend{color:var(--muted);flex-wrap:wrap;gap:6px 18px;margin:14px 0 0;padding:0;font-size:11.5px;list-style:none;display:flex}.legend .marker{vertical-align:-1px;width:10px;height:10px;margin-right:6px}.chartPlot{container-type:inline-size}.plotBody{position:relative}.plotBody svg{width:100%;height:auto;display:block}.plotRender{display:none}@container (width<=439px){.plotRender.w320{display:block}}@container (width>=440px) and (width<=659px){.plotRender.w560{display:block}}@container (width>=660px) and (width<=859px){.plotRender.w760{display:block}}@container (width>=860px){.plotRender.w960{display:block}}.plotBody [aria-label=x-grid],.plotBody [aria-label=y-grid]{stroke:var(--grid);stroke-opacity:1}.plotBody circle[aria-label]{cursor:default}.plotBody circle[aria-label]:hover{fill:var(--fg);fill-opacity:.1}.plotTip{z-index:2;border:1px solid var(--rule);background:var(--raised);pointer-events:none;font-variant-numeric:tabular-nums;border-radius:6px;gap:2px;max-width:17rem;padding:7px 9px;font-size:11px;line-height:1.35;display:grid;position:absolute;box-shadow:0 4px 14px #0000002e}.plotTip[hidden]{display:none}.plotTip span{color:var(--muted)}.plotTip b{color:var(--fg);font-weight:600}.plotLegend{margin:-6px 0 10px}.plotLegend li{align-items:center;display:inline-flex}.key{vertical-align:1px;background:var(--mark);margin-right:6px;display:inline-block}.key-dot{border-radius:50%;width:10px;height:10px}.key-line{width:14px;height:2px}.chartData{margin-top:12px;font-size:11.5px}.chartData summary{color:var(--muted);cursor:pointer}.chartData .tableWrap{margin-top:10px}.chartData table{font-size:11.5px}.chartData th,.chartData td{padding:6px 10px}.endMatter{grid-area:end;min-width:0;margin-top:56px}.endMatter>*+*{margin-top:40px}.endMatter h2{letter-spacing:-.015em;font-size:20px;font-weight:650}.revisions ol{margin:14px 0 0;padding:0;list-style:none}.revisions li{border-bottom:1px solid var(--rule);grid-template-columns:7em minmax(0,1fr);gap:16px;padding:10px 0;font-size:13.5px;display:grid}.revisions time{color:var(--lime);font-variant-numeric:tabular-nums}.reproduce p{margin-top:10px}.reproduce a{color:var(--blue);text-decoration:underline}.reproduce pre{border:1px solid var(--rule);background:var(--code-bg);border-radius:8px;margin-top:12px;padding:14px 16px;font:12.5px/1.6 ui-monospace,SF Mono,Menlo,Consolas,monospace;overflow-x:auto}.seriesNav p{color:var(--muted)}.seriesNav strong{color:var(--fg);font-weight:650}.seriesNav ul{grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));gap:12px;margin:14px 0 0;padding:0;list-style:none;display:grid}.seriesNav li{border:1px solid var(--frame);border-radius:8px;gap:4px;padding:14px 16px;display:grid}.seriesNav li span{color:var(--muted);font-size:11.5px}.seriesNav .next{text-align:right}.related .postCard:last-child{border-bottom:0}.endBlock{border:1px solid var(--frame);border-radius:14px;padding:26px 28px}.endBlock p{max-width:60ch;color:var(--muted);margin-top:10px;line-height:1.55}.endBlock ul{flex-wrap:wrap;align-items:center;gap:12px 24px;margin:20px 0 0;padding:0;list-style:none;display:flex}.endBlock a{text-underline-offset:4px;text-decoration:underline}.endBlock a.primary,.contactForm button[type=submit]{background:var(--button);color:var(--button-fg);font:inherit;cursor:pointer;border:0;border-radius:8px;padding:10px 18px;font-weight:650;text-decoration:none;display:inline-block}.endBlock a.primary:hover,.contactForm button[type=submit]:hover{background:var(--button-hover);color:var(--button-fg);text-decoration:none}@media (width<=850px){.lead{flex-direction:column;align-items:stretch;min-height:0;padding:28px 24px}.leadBody{width:100%}.lead .landscape{z-index:0;opacity:1;border-radius:8px;order:1;width:100%;height:180px;margin-top:20px;position:relative;mask-image:none}.streams{grid-template-columns:minmax(0,1fr);gap:40px}}@media (width<=520px){.blogHead{padding-top:32px}.lead{padding:24px 20px}.postHead{padding-top:28px}.postHead .dek{font-size:18px}.prose{font-size:16px}.prose h2{font-size:24px}.prose h3{font-size:19px}.noteItem,.revisions li{grid-template-columns:minmax(0,1fr);gap:4px}.barRows{grid-template-columns:minmax(0,1fr) max-content;gap:4px 10px}.barRow .rowLabel{grid-column:1/-1;margin-top:6px}.axisRow>span:first-child{display:none}.endBlock{padding:22px 20px}}.contactPage{grid-template-columns:minmax(0,1fr) minmax(0,34rem);gap:40px 72px;padding-top:44px;display:grid}.contactIntro p{max-width:52ch;color:var(--muted);margin-top:16px;font-size:18px;line-height:1.6}.contactForm{gap:20px;display:grid}.contactForm fieldset{border:0;gap:10px;margin:0;padding:0;display:grid}.contactForm legend{margin-bottom:10px;font-weight:650}.choice{border:1px solid var(--rule);cursor:pointer;border-radius:10px;grid-template-columns:auto minmax(0,1fr);gap:12px;padding:14px 16px;display:grid}.choice:has(input:checked){border-color:var(--lime)}.choice:has(input:focus-visible){outline:2px solid var(--lime);outline-offset:3px}.choice input{margin:3px 0 0}.choice strong{font-weight:650;display:block}.hint{color:var(--muted);margin-top:2px;font-size:14px;line-height:1.45;display:block}.field{gap:6px;display:grid}.field label{font-size:15px;font-weight:650}.optional{color:var(--muted);font-weight:400}.field input,.field textarea{border:1px solid var(--frame);background:var(--bg);width:100%;color:var(--fg);font:inherit;border-radius:8px;padding:10px 12px;font-size:16px;line-height:1.5}.field textarea{resize:vertical}.field input:focus-visible,.field textarea:focus-visible{outline:2px solid var(--lime);outline-offset:1px;border-color:#0000}.field [aria-invalid=true]{border-color:var(--draft)}.fieldError{color:var(--draft);margin:0;font-size:14px}.fieldError:empty{display:none}.formActions{flex-wrap:wrap;align-items:center;gap:12px 18px;display:flex}.contactForm button[type=submit]:disabled{opacity:.55;cursor:not-allowed}.formStatus{color:var(--muted);margin:0;font-size:15px}.formStatus[data-state=sent]{color:var(--lime)}.formStatus[data-state=refused],.formStatus[data-state=retry],.formStatus[data-state=unavailable]{color:var(--draft)}@media (width<=850px){.contactPage{grid-template-columns:minmax(0,1fr);padding-top:32px}}
