.blog-technical{--paper:#141414;--paper-2:#1c1c1e;--plate:#232326;--code:#0b0b0c;--ink:#dcdcd6;--body:#b8b8b3;--mute:#7c7c79;--faint:#4e4e4c;--rule:hsla(0,0%,100%,.1);--rule-hi:hsla(0,0%,100%,.17);--accent:#ffce4a;--link:#00dbdd;--accent-2:#e9b426;--teal:#6bc9ce;--good:#7fd9a0;--bad:#f09090;--display:"Instrument Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;--text:"Roboto",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;--mono:"Roboto Mono",ui-monospace,"SF Mono",Menlo,Consolas,monospace}.blog-technical *{box-sizing:border-box;margin:0;padding:0}.blog-technical{-webkit-font-smoothing:antialiased;background:var(--paper);color:var(--body);font-family:var(--text);font-size:18px;font-weight:400;line-height:1.55;text-rendering:optimizeLegibility}.blog-technical a{color:var(--link);text-decoration:none;text-underline-offset:4px}.blog-technical a:hover{text-decoration:underline}.blog-technical .body li a,.blog-technical .body p a{color:var(--link);font-weight:inherit}.blog-technical .body li a:hover,.blog-technical .body p a:hover{color:var(--link);text-decoration:underline}.blog-technical .progress{background:var(--accent);height:2px;left:0;position:fixed;top:0;transition:width .05s linear;width:0;z-index:100}.blog-technical .colophon{align-items:baseline;border-bottom:1px solid var(--rule);color:var(--mute);display:flex;font-family:var(--display);font-size:11.5px;gap:14px;letter-spacing:.16em;padding:18px 28px;text-transform:uppercase}.blog-technical .colophon .brand{color:var(--ink);font-size:14.5px;font-weight:800;letter-spacing:0;text-transform:none}.blog-technical .colophon .sep{color:var(--faint)}.blog-technical .colophon .r{margin-left:auto}.blog-technical .col{--gutter:clamp(20px,5vw,28px);margin:0 auto;max-width:calc(640px + var(--gutter)*2);padding:0 var(--gutter)}.blog-technical .wide{margin:0 auto;max-width:940px;padding:0 clamp(20px,4vw,28px)}.blog-technical .body.col>.table-scroll,.blog-technical .body.col>.wide{margin-left:calc(320px - min(470px,50vw - 20px));margin-right:auto;max-width:min(940px,calc(100vw - 40px));padding-left:0;padding-right:0;width:min(940px,calc(100vw - 40px))}.blog-technical .hero{padding:76px 0 32px}.blog-technical .kicker{align-items:center;color:var(--accent);display:flex;font-family:var(--display);font-size:12px;font-weight:700;gap:12px;letter-spacing:.18em;margin-bottom:24px;text-transform:uppercase}.blog-technical .kicker:before{background:var(--accent);content:"";height:2px;width:28px}.blog-technical h1.title{color:var(--ink);font-family:var(--display);font-size:clamp(36px,5vw,48px);font-weight:600;letter-spacing:-.022em;line-height:1.08;margin-bottom:24px;text-wrap:balance}.blog-technical .standfirst{color:var(--body);font-family:var(--text);font-size:clamp(19px,2vw,22px);font-weight:300;line-height:1.5;margin-bottom:40px;max-width:620px;text-wrap:pretty}.blog-technical .byline{border-bottom:1px solid var(--rule);border-top:1px solid var(--rule);color:var(--mute);display:grid;font-family:var(--display);font-size:13px;gap:4px 20px;grid-template-columns:1fr auto;letter-spacing:.02em;padding:18px 0}.blog-technical .byline .au{color:var(--ink);font-weight:600}.blog-technical .byline .r{text-align:right}.blog-technical .body{padding:0}.blog-technical article>.body:first-of-type{padding-top:44px}.blog-technical article>.body:last-of-type{padding-bottom:100px}.blog-technical .body p{color:var(--body);font-family:var(--text);font-size:18px;hanging-punctuation:first;line-height:1.55;margin-bottom:20px}.blog-technical .body p.lede:first-letter{color:var(--ink);float:left;font-family:var(--display);font-size:4.6em;font-weight:700;line-height:.88;margin:6px 0 0 -2px;padding:8px 14px 0 0}.blog-technical article{counter-reset:section}.blog-technical .body h2{align-items:center;color:var(--accent);counter-increment:section;display:flex;font-family:var(--display);font-size:12px;font-weight:700;gap:12px;letter-spacing:.18em;margin:60px 0 8px;text-transform:uppercase}.blog-technical .body h2:after{color:var(--accent);content:"Section " counter(section,upper-roman) " · ";order:-1}.blog-technical .body h3{border-bottom:0;color:var(--ink);font-family:var(--display);font-size:20px;font-weight:700;letter-spacing:-.008em;line-height:1.25;margin:32px 0 12px;padding-bottom:0;position:relative;text-wrap:balance}.blog-technical .body h2+h3{border-bottom:1px solid var(--rule);font-size:28px;letter-spacing:-.012em;margin-bottom:22px;margin-top:0;padding-bottom:14px}.blog-technical .body h3:after{color:var(--faint);content:"§";font-family:var(--display);font-size:20px;opacity:0;position:absolute;right:0;top:0;transition:opacity .15s ease}.blog-technical .body h3:hover:after{opacity:1}.blog-technical .body strong{color:var(--ink);font-weight:600}.blog-technical .body em{color:var(--ink);font-style:italic}.blog-technical .body code{background:var(--paper-2);border-radius:3px;color:var(--ink);font-family:var(--mono);font-size:.86em;padding:2px 6px}.blog-technical .body ol,.blog-technical .body ul{margin:0 0 20px 24px;padding-left:16px}.blog-technical .body ul{list-style:disc outside}.blog-technical .body ol{list-style:decimal outside}.blog-technical .body li{color:var(--body);font-family:var(--text);font-size:18px;line-height:1.45;margin-bottom:12px;padding-left:4px}.blog-technical .body p+ol,.blog-technical .body p+ul{margin-top:-8px}.blog-technical .body li::marker{color:var(--accent)}.blog-technical .body pre[class*=language-],.blog-technical pre[class*=language-]{overflow-wrap:break-word;white-space:pre-wrap;word-break:normal}.blog-technical .body blockquote:not(.pullquote):not(.enote),.blog-technical .pullquote{border-bottom:1px solid var(--rule-hi);border-top:1px solid var(--rule-hi);color:var(--ink);font-family:var(--display);font-size:28px;font-weight:400;letter-spacing:-.014em;line-height:1.32;margin:52px auto;max-width:720px;padding:36px 0;text-align:center;text-wrap:balance}.blog-technical .body blockquote:not(.pullquote):not(.enote) cite,.blog-technical .pullquote cite{color:var(--mute);display:block;font-family:var(--display);font-size:11.5px;font-style:normal;font-weight:700;letter-spacing:.18em;margin-top:20px;text-transform:uppercase}.blog-technical .body blockquote:not(.pullquote):not(.enote) p{font-family:inherit;font-size:inherit;font-weight:400;margin:0}.blog-technical .enote{border-bottom:1px solid var(--rule-hi);border-top:1px solid var(--rule-hi);color:var(--body);font-family:var(--text);font-size:17px;line-height:1.55;margin:36px auto;max-width:720px;padding:22px 0}.blog-technical .enote b{color:var(--accent);display:block;font-family:var(--display);font-size:11px;font-weight:700;letter-spacing:.18em;margin-bottom:10px;text-transform:uppercase}.blog-technical .body img.deco{display:block;height:auto;margin:36px auto;max-width:100%}.blog-technical figure.viz{margin:52px 0}.blog-technical figure.tbl>.viz-title,.blog-technical figure.tbl>figcaption,.blog-technical figure.tbl>h4,.blog-technical figure.viz>.viz-title,.blog-technical figure.viz>figcaption,.blog-technical figure.viz>h4{margin-left:auto;margin-right:auto;max-width:640px;text-align:left}.blog-technical figure.viz>.plot-wrap{margin-left:auto;margin-right:auto;max-width:var(--fig-w,100%)}.blog-technical figure.tbl .viz-title,.blog-technical figure.viz .viz-title{color:var(--accent);font-family:var(--display);font-size:11.5px;font-weight:700;letter-spacing:.18em;margin-bottom:8px;margin-top:0;text-transform:uppercase}.blog-technical figure.tbl h4,.blog-technical figure.viz h4{color:var(--ink);font-family:var(--display);font-size:22px;font-weight:700;letter-spacing:-.008em;line-height:1.25;margin-bottom:16px;margin-top:0;text-wrap:balance}.blog-technical .plot-wrap{overflow-x:auto}.blog-technical figure.viz .plate{background:var(--plate);border:0;padding:24px}.blog-technical figure.viz .plate--paper{background:#fff;border:0;padding:32px}.blog-technical figure.viz .plate--paper img{display:block;height:auto;margin:0 auto;max-width:100%}.blog-technical figure.viz .plate--flush{background:var(--paper);border:0;margin:0 auto;max-width:100%;padding:0;width:100%}.blog-technical figure.viz .plate--flush img{display:block;height:auto;max-width:100%;mix-blend-mode:lighten}.blog-technical figure.viz .plate.pair{align-items:center;display:grid;gap:24px;grid-template-columns:1fr 1fr;padding:24px}.blog-technical figure.viz .plate--flush.pair{padding:24px;width:100%}.blog-technical figure.viz .plate.pair .pair-label{color:var(--mute);font-family:var(--display);font-size:11px;letter-spacing:.14em;margin-top:12px;text-align:center;text-transform:uppercase}.blog-technical figure.viz .plate.pair img{display:block;height:auto;margin:0 auto;max-width:100%}.blog-technical figure.viz svg{display:block;height:auto;width:100%}.blog-technical figure.viz figcaption{color:var(--mute);font-family:var(--display);font-size:13px;letter-spacing:.01em;line-height:1.45;margin-top:14px}.blog-technical figure.viz figcaption b{color:var(--body);font-weight:600}.blog-technical .table-scroll{margin:36px 0;overflow-x:auto}.blog-technical .table-scroll table{border-collapse:collapse;color:var(--body);font-family:var(--text);font-size:15px;line-height:1.5;width:100%}.blog-technical .table-scroll caption{caption-side:top;color:var(--accent);font-family:var(--display);font-size:11px;font-weight:700;letter-spacing:.16em;margin-bottom:10px;text-align:left;text-transform:uppercase}.blog-technical .table-scroll td,.blog-technical .table-scroll th{border-bottom:1px solid var(--rule);padding:12px 16px;text-align:left;vertical-align:top}.blog-technical .table-scroll th{border-bottom-color:var(--ink);color:var(--mute);font-family:var(--display);font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.blog-technical .table-scroll td.ctr,.blog-technical .table-scroll th.ctr{text-align:center}.blog-technical .table-scroll td.ind,.blog-technical .table-scroll th.ind{padding-left:calc(16px + var(--ind,0px))}.blog-technical .body.col>.table-scroll.tight{margin-left:0;margin-right:0;max-width:100%;width:auto}.blog-technical .table-scroll td p{font-size:15px;line-height:1.5;margin:0 0 10px}.blog-technical .table-scroll td p:last-child{margin-bottom:0}.blog-technical .table-scroll td ol,.blog-technical .table-scroll td ul{margin:8px 0 0 20px}.blog-technical .table-scroll td li{font-size:14px;line-height:1.5;margin-bottom:4px}.blog-technical figure.tbl{margin:52px 0}.blog-technical figure.tbl>figcaption{color:var(--mute);font-family:var(--text);font-size:13px;letter-spacing:.01em;line-height:1.5;margin-top:12px}.blog-technical figure.tbl>figcaption b{color:var(--body);font-weight:700;letter-spacing:.02em}.blog-technical .rtbl{border-collapse:collapse;font-family:var(--text);font-size:13px;line-height:1.35;margin:0;table-layout:fixed;width:100%}.blog-technical .rtbl caption{caption-side:top;color:var(--accent);letter-spacing:.16em;margin-bottom:6px}.blog-technical .rtbl caption,.blog-technical .rtbl thead th{font-family:var(--display);font-size:10.5px;font-weight:700;text-align:left;text-transform:uppercase}.blog-technical .rtbl thead th{border-bottom:1px solid var(--ink);color:var(--mute);letter-spacing:.12em;line-height:1.25;padding:6px 12px 5px;vertical-align:bottom}.blog-technical .rtbl thead th:first-child{color:var(--ink)}.blog-technical .rtbl tbody td{border-bottom:1px solid var(--rule);color:var(--body);font-family:var(--mono);font-size:11.5px;font-variant-numeric:tabular-nums;padding:5px 12px;text-align:left;vertical-align:baseline;white-space:nowrap}.blog-technical .rtbl tbody td.prop{color:var(--ink);font-family:var(--text);font-size:12px;font-weight:400;white-space:normal}.blog-technical .rtbl tbody td.win{color:var(--good);font-weight:600}.blog-technical .rtbl tbody tr:nth-child(2n) td{background:hsla(0,0%,100%,.018)}.blog-technical .rtbl tfoot td{border:0;color:var(--mute);font-family:var(--text);font-size:12px;font-style:normal;letter-spacing:.01em;line-height:1.5;padding:8px 0 0;text-align:left}.blog-technical .rtbl tfoot td b{color:var(--body);font-weight:700;letter-spacing:.02em}.blog-technical pre[class*=language-]{background:var(--code)!important;border-bottom:1px solid var(--rule);border-radius:0!important;border-top:1px solid var(--rule);color:var(--body)!important;font-family:var(--mono)!important;font-size:13.5px!important;line-height:1.65!important;margin:32px 0!important;overflow-x:auto;padding:24px 28px!important;scrollbar-color:var(--accent) var(--code)!important;scrollbar-width:thin;text-shadow:none!important}.blog-technical .plot-wrap::-webkit-scrollbar,.blog-technical .rtbl::-webkit-scrollbar,.blog-technical pre[class*=language-]::-webkit-scrollbar{background:var(--paper-2);height:6px;width:6px}.blog-technical .plot-wrap::-webkit-scrollbar-thumb,.blog-technical .rtbl::-webkit-scrollbar-thumb,.blog-technical pre[class*=language-]::-webkit-scrollbar-thumb{background:rgba(255,206,74,.5);border-radius:0}.blog-technical .plot-wrap::-webkit-scrollbar-thumb:hover,.blog-technical .rtbl::-webkit-scrollbar-thumb:hover,.blog-technical pre[class*=language-]::-webkit-scrollbar-thumb:hover{background:var(--accent)}.blog-technical .plot-wrap::-webkit-scrollbar-track,.blog-technical .rtbl::-webkit-scrollbar-track,.blog-technical pre[class*=language-]::-webkit-scrollbar-track{background:transparent}.blog-technical code[class*=language-]{background:none!important;color:var(--body)!important;font-family:var(--mono)!important;text-shadow:none!important}.blog-technical .token.cdata,.blog-technical .token.comment,.blog-technical .token.doctype,.blog-technical .token.prolog{color:var(--mute);font-style:italic}.blog-technical .token.punctuation{color:var(--body)}.blog-technical .token.attr-value,.blog-technical .token.char,.blog-technical .token.string{color:var(--good)}.blog-technical .token.boolean,.blog-technical .token.number{color:var(--accent);font-variant-numeric:tabular-nums}.blog-technical .token.builtin,.blog-technical .token.keyword{color:var(--teal);font-weight:500}.blog-technical .token.class-name,.blog-technical .token.namespace{color:#e8c989}.blog-technical .token.function,.blog-technical .token.method{color:#c7e0f0}.blog-technical .token.annotation{color:var(--accent);font-style:italic}.blog-technical .token.operator{color:var(--body)}.blog-technical .footnotes{border-top:1px solid var(--rule-hi);color:var(--mute);font-family:var(--display);font-size:13.5px;line-height:1.7;margin:80px 0 0;padding-top:26px}.blog-technical .footnotes h4{color:var(--ink);font-family:var(--display);font-size:11.5px;font-weight:700;letter-spacing:.18em;margin-bottom:16px;text-transform:uppercase}.blog-technical .footnotes ol{margin:0 0 0 24px}.blog-technical .footnotes li{margin-bottom:10px}.blog-technical .foot{border-top:1px solid var(--rule);color:var(--mute);font-family:var(--display);font-size:11.5px;letter-spacing:.16em;padding:24px 28px;text-transform:uppercase}.blog-technical .col{padding-left:var(--gutter);padding-right:var(--gutter)}@media (max-width:640px){.blog-technical .body.col>.table-scroll,.blog-technical .body.col>.wide{margin-left:0;margin-right:0;max-width:none;padding-left:clamp(20px,5vw,28px);padding-right:clamp(20px,5vw,28px);width:auto}.blog-technical .byline{grid-template-columns:1fr}.blog-technical .byline .r{text-align:left}.blog-technical .rtbl{display:block;max-width:100%;overflow-x:auto;scrollbar-color:var(--accent) var(--paper-2);scrollbar-width:thin;table-layout:auto}}