@font-face{font-family:"ET Book";src:url("../fonts/et-book/roman.woff") format("woff");font-style:normal;font-weight:400;font-display:swap}@font-face{font-family:"ET Book";src:url("../fonts/et-book/italic.woff") format("woff");font-style:italic;font-weight:400;font-display:swap}@font-face{font-family:"ET Book";src:url("../fonts/et-book/bold.woff") format("woff");font-style:normal;font-weight:700;font-display:swap}:root{--blog-ink:#000;--blog-muted:var(--blog-ink);--blog-line:#e4e5e3;--blog-accent:#a9232b;--blog-link:var(--blog-ink);--blog-sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;--blog-serif:"ET Book",Palatino,"Palatino Linotype",Georgia,serif;--blog-mono:"SFMono-Regular",Consolas,"Liberation Mono",monospace}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:80px}.lab-blog{min-height:100vh;display:flex;flex-direction:column;padding-bottom:0}.lab-blog>footer.fixed-bottom{position:static;margin-top:auto}.lab-blog>main{flex:1;color:var(--blog-ink);font:400 16px/1.6 var(--blog-sans);-webkit-font-smoothing:antialiased}.lab-blog :where(main,.reference-preview) :where(p,h1,h2,h3,h4,h5,h6,em,div,li,span,strong){color:inherit}.lab-blog :where(main,.reference-preview) a{color:inherit;text-decoration:none;text-underline-offset:3px}.lab-blog :where(main,.reference-preview) a:hover{color:var(--blog-accent)}.lab-blog main a:focus-visible,.lab-blog main button:focus-visible,.lab-blog main summary:focus-visible{outline:2px solid var(--blog-link);outline-offset:5px}.lab-blog main button{cursor:pointer}.lab-blog main img{display:block;max-width:100%;height:auto}[hidden]{display:none!important}::selection{background:#eee2d8}.blog-container{width:min(1120px,calc(100% - 64px));margin-inline:auto}.article-container{width:min(800px,calc(100% - 64px));margin-inline:auto}.skip-link{position:fixed;left:16px;top:-100px;padding:10px 16px;background:#fff;border:1px solid var(--blog-ink);z-index:20}.skip-link:focus{top:12px}.index-intro{padding:76px 0 67px}.index-intro h1{font-size:2.5rem;line-height:1.2;margin:0 0 17px}.listing-heading{display:flex;justify-content:space-between;gap:20px;align-items:baseline;padding-bottom:15px;border-bottom:1px solid #babdbb}.listing-heading h2{font-size:12px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;margin:0}.post-preview{display:grid;grid-template-columns:150px minmax(0,1fr) 320px;gap:42px;padding:36px 0 40px;border-bottom:1px solid var(--blog-line)}.preview-meta{display:flex;flex-direction:column;align-items:flex-start;gap:16px;padding-top:5px;color:var(--blog-muted);font-size:12px}.post-kind{border:1px solid #d9d9d5;padding:2px 7px;font-size:10px;letter-spacing:.04em;text-transform:uppercase}.preview-description h2{margin:0 0 7px;font-size:28px;line-height:1.2}.preview-description p{margin:0 0 12px;line-height:1.55;max-width:440px}.preview-description .preview-authors{color:var(--blog-muted);font-size:13px;margin-bottom:15px}.read-post{display:inline-block;margin-top:7px;font-size:12px;font-weight:500}.read-post span{display:inline-block;padding-left:5px;transition:transform .15s}.read-post:hover span{transform:translateX(4px)}.preview-image{align-self:start;overflow:hidden}.preview-image img{width:100%;aspect-ratio:8 / 5;object-fit:cover;transition:opacity .15s}.preview-image-contain{justify-self:end;width:160px}.preview-image-contain img{object-fit:contain}.preview-image:hover img{opacity:.82}.blog-index{max-width:994px;padding-bottom:100px}.article-header{padding-top:39px;padding-bottom:28px}.back-link{display:inline-block;font-size:12px;color:var(--blog-muted);margin-bottom:29px}.article-header h1{margin:0 0 15px;font-size:2.5rem;line-height:1.2}.index-intro h1,.article-header h1,.preview-description h2{font-family:Roboto,sans-serif;font-weight:300;letter-spacing:normal}.article-byline{padding:0 0 12px}.byline-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:40px;font-size:15px;line-height:1.6}.metadata-label{color:var(--blog-ink);font-size:11px;font-weight:400;text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px}.byline-grid a:hover{text-decoration:underline}.article-grid{width:min(1200px,calc(100% - 64px));display:grid;grid-template-columns:160px minmax(0,800px) 160px;gap:40px;padding-top:32px;padding-bottom:68px}.article-toc{grid-column:1;align-self:start;position:sticky;top:32px;font-size:12px;line-height:1.5;padding-top:7px}.article-toc h2{margin:0 0 16px;color:var(--blog-ink);text-transform:uppercase;font-size:10px;font-weight:500;letter-spacing:.08em}.article-toc ol{padding:0 18px 0 0;list-style:none;margin:0;border-right:1px solid var(--blog-line)}.article-toc li{margin-bottom:13px}.article-toc a{color:var(--blog-ink)}.article-toc a:hover,.article-toc a[aria-current]{color:var(--blog-ink)}.article-toc a[aria-current]{font-weight:600}.article-body{grid-column:2;min-width:0;font:300 18px/1.6 var(--blog-sans);color:#000}.article-body h2{font-size:34px;line-height:1.2;font-weight:400;letter-spacing:-.45px;margin:48px 0 19px;color:var(--blog-ink)}.article-body>h2:first-child{margin-top:0}.article-body h3{font-size:27px;font-weight:400;line-height:1.25;margin:32px 0 16px}.article-body p{margin:0 0 24px}.article-body a:not(.citation-ref):not(.footnote){color:var(--blog-link);text-decoration:underline;text-decoration-thickness:1px;text-decoration-color:#aebbc3}.article-body a:hover{color:var(--blog-accent)}.article-body ul,.article-body ol{padding-left:25px}.article-body li{margin-bottom:8px}.article-body blockquote{border-left:2px solid #b8c0c1;padding-left:24px;margin-inline:0;color:var(--blog-ink);font-style:italic}.article-body strong{font-weight:700}.article-body .footnote{color:var(--blog-link);font:11px/1 var(--blog-sans);white-space:nowrap;text-decoration:none}.article-body sup{line-height:0}.article-body .footnote{padding:4px 3px}code,pre{font-family:var(--blog-mono)}.article-body :not(pre)>code{font-size:.72em;padding:2px 4px;background:#f4f4f3}.article-body div.highlighter-rouge{position:relative;margin:25px 0}.article-body pre{max-width:100%;overflow:auto;padding:25px 24px;margin:0;background:#f8f8f7;border:1px solid #e6e7e4;border-radius:0;font-size:14px;line-height:1.65;tab-size:4}.article-body pre code{font-size:inherit}.highlight .k,.highlight .kn{color:#815294}.highlight .s{color:#50744b}.highlight .c{color:#777;font-style:italic}.highlight .mi{color:#a3573d}.highlight .o{color:#565c5d}.code-copy{position:absolute;right:8px;top:7px}.copy-button{border:1px solid #d8dcd9;background:#fff;color:var(--blog-ink);border-radius:3px;padding:4px 8px;font:10px/1.5 var(--blog-sans)}.copy-button:hover{border-color:#a2aaa6;color:var(--blog-ink)}figcaption{margin-top:12px;font:12px/1.6 var(--blog-sans);color:var(--blog-muted)}figcaption>span{color:var(--blog-ink);font-weight:500}.article-body details{padding:16px 20px;border:1px solid var(--blog-line);margin:24px 0}.article-body summary{cursor:pointer}.article-body details[open] summary{margin-bottom:16px}.article-body table{width:100%;border-collapse:collapse;font:14px/1.5 var(--blog-sans);margin:25px 0}.article-body th,.article-body td{text-align:left;border-bottom:1px solid var(--blog-line);padding:9px}.article-body img{margin-inline:auto}.article-appendix{border-top:1px solid var(--blog-line);background:#fafbfa;padding:40px 0 48px;color:var(--blog-ink);font-size:12px;line-height:1.7}.appendix-section{margin-bottom:35px;scroll-margin-top:80px}.appendix-section:last-child{margin-bottom:0}.appendix-section h2{color:var(--blog-ink);font-size:15px;font-weight:600;margin:0 0 14px}.appendix-section p{margin:0 0 12px}.appendix-section a{text-decoration:underline;text-decoration-color:#bec5c1}.footnotes ol{margin:0;padding-left:20px}.footnotes li::marker{color:var(--blog-ink);font-size:10px}.footnotes p{margin:0}.footnotes li{padding-left:6px;margin-bottom:12px;scroll-margin-top:80px}.article-body .footnotes{font:12px/1.7 var(--blog-sans);border-top:1px solid var(--blog-line);margin-top:48px;padding-top:24px}.article-body .footnotes::before{content:"Footnotes";display:block;margin-bottom:12px;font-weight:600}.citation-text{color:var(--blog-ink)}.bibtex-heading{display:flex;justify-content:space-between;align-items:center;margin:20px 0 8px}.bibtex-heading p{margin:0}.bibtex{font-size:11px;line-height:1.6;white-space:pre-wrap;overflow-wrap:anywhere;border:1px solid #dde2de;border-radius:3px;background:#f2f4f2;padding:14px 18px;margin:0}.bibtex code{color:inherit;background:transparent}.footnotes li:target{background:#eeeede;outline:6px solid #eeeede}.reference-preview{position:fixed;z-index:10;width:min(360px,calc(100vw - 24px));padding:17px 19px;border:1px solid #d8dedb;border-radius:3px;box-shadow:0 5px 22px #162a2120;background:#fff;color:var(--blog-ink);font:12px/1.65 var(--blog-sans);overflow-wrap:anywhere}.reference-preview a{text-decoration:underline}.reference-preview p{margin:0}.reference-preview .reversefootnote{display:none}.preview-label{display:block;font-size:9px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;color:var(--blog-ink)}@media(max-width:1279px){.article-grid{width:min(800px,calc(100% - 64px));display:block}.article-toc{position:static;border-bottom:1px solid var(--blog-line);padding:0 0 22px;margin-bottom:30px}.article-toc h2{margin-bottom:10px}.article-toc ol{display:flex;flex-wrap:wrap;gap:10px 22px;border:0;padding:0}.article-toc li{margin:0}}@media(max-width:1199px){.post-preview{grid-template-columns:125px minmax(0,1fr) 260px;gap:28px}}@media(max-width:780px){.blog-container,.article-container,.article-grid{width:calc(100% - 40px)}.index-intro{padding:52px 0 43px}.post-preview{grid-template-columns:minmax(0,1fr) 210px;gap:18px 28px;padding:26px 0 30px}.preview-meta{grid-column:1 / -1;flex-direction:row;align-items:center;gap:14px;padding:0}.preview-description h2{font-size:26px}.article-header{padding:29px 0 34px}.back-link{margin-bottom:25px}.byline-grid{gap:20px}.article-grid{padding-top:29px;padding-bottom:44px}.article-body h2{font-size:30px}}@media(max-width:520px){.post-preview{grid-template-columns:1fr;gap:21px}.preview-image{grid-row:2}.preview-image img{max-height:225px}.preview-description p{max-width:100%}.blog-index{padding-bottom:65px}.article-body pre{font-size:12px;padding:30px 14px 20px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition:none!important}}html[data-theme='dark']{--blog-ink:#dedede;--blog-muted:#aaa;--blog-line:#424246;--blog-accent:#70c8dc;--blog-link:#9fc9e0}html[data-theme='dark'] .lab-blog :is(.article-body,.article-header h1,.article-body h2,.article-body h3,.citation-text,.appendix-section h2){color:var(--blog-ink)}html[data-theme='dark'] .lab-blog :is(.article-appendix,.reference-preview,.copy-button){color:#bbb;background:#252528}html[data-theme='dark'] .lab-blog :is(.article-body pre,.bibtex,.article-body :not(pre)>code){color:#ddd;background:#303034;border-color:var(--blog-line)}html[data-theme='dark'] .lab-blog :is(.highlight .s){color:#a4c99c}html[data-theme='dark'] .lab-blog :is(.highlight .k,.highlight .kn){color:#c7a0da}html[data-theme='dark'] .lab-blog :is(.highlight .o){color:#9fc9e0}html[data-theme='dark'] .lab-blog :is(.metadata-label,.article-toc a){color:#aaa}html[data-theme='dark'] .lab-blog :is(.footnotes li:target){background:#3a3a30;outline-color:#3a3a30}@media print{.lab-blog>header,.lab-blog>footer,.article-toc,.back-link,.copy-button,.reference-preview{display:none!important}.article-container,.article-grid{width:100%;display:block}.article-header{padding-top:0}.article-body{font-size:14pt}.article-appendix{background:#fff}pre,figure{break-inside:avoid}h2,h3{break-after:avoid}}