:root{--surface:#fcfbf7;--surface-raised:#f3f0e7;--surface-code:#f1eee4;--ink:#1a1a18;--ink-muted:#4a463e;--ink-faint:#6b665c;--link:#14459b;--link-visited:#6d3fa0;--cite:#1f6b45;--rule:#d9d4c7;--rule-strong:#8e8676;--mark:#f3e3a0;--font-serif:"STIX Two Text", "Times New Roman", "Liberation Serif", Georgia, serif;--font-mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:56px;--space-8:84px;--radius-0:0;--radius-1:2px;--radius-2:4px;--measure:var(--page);--page:44rem;--gutter:24px;--rhythm:31px;--indent:1.5em;--hairline:1px;color-scheme:light}@media(prefers-color-scheme:dark){:root{--surface:#1c1c1a;--surface-raised:#222120;--surface-code:#201f1d;--ink:#dcd7ce;--ink-muted:#b4ada1;--ink-faint:#918b7f;--link:#8fb6f0;--link-visited:#c0a6ee;--cite:#6fbf8f;--rule:#332f2a;--rule-strong:#7a7363;--mark:#4a3f18;color-scheme:dark}}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--surface);color:var(--ink);font-family:var(--font-serif);font-size:20px;line-height:1.6;hyphens:none;text-align:left}a{color:var(--link);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}a:hover{text-decoration-thickness:2px}a:focus-visible{outline:2px solid var(--link);outline-offset:2px}img,video,iframe{max-width:100%}img{height:auto;border-radius:var(--radius-0)}.page{max-width:calc(var(--page) + 2 * var(--gutter));margin:0 auto;padding:var(--space-7)var(--gutter)var(--space-6)}.label,.code-lang{font-family:var(--font-mono);font-size:14px;line-height:1.6;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);margin:0 0 var(--space-1)}.meta{font-size:16px;line-height:1.6;color:var(--ink-faint);margin:0}.masthead{margin-bottom:var(--space-7)}.site-name{font-size:44px;line-height:1.6;font-weight:600;letter-spacing:-.01em;margin:0}.site-name a{color:var(--ink);text-decoration:none}.tagline{font-size:23px;line-height:1.6;font-style:italic;color:var(--ink-muted);margin:var(--space-1)0 0}.site-nav{margin-top:var(--space-5);padding-top:var(--space-3);border-top:var(--hairline)solid var(--rule);display:flex;flex-wrap:wrap;column-gap:var(--space-5);row-gap:var(--space-1)}.site-nav a{font-size:16px;line-height:1.6;color:var(--link);text-decoration:none;padding:var(--space-1)0}.site-nav a:hover{text-decoration:underline;text-decoration-thickness:2px}.site-nav a[aria-current=page]{color:var(--ink);text-decoration:none;box-shadow:inset 0 -2px 0 0 var(--rule-strong)}.page-title{font-size:36px;line-height:1.6;font-weight:600;margin:0 0 var(--space-4)}.post-header{margin-bottom:var(--space-8)}.post-title{font-size:44px;line-height:1.6;font-weight:600;letter-spacing:-.01em;max-width:var(--measure);margin:0}.standfirst{font-size:23px;line-height:1.6;font-style:italic;color:var(--ink-muted);max-width:var(--measure);margin:var(--space-3)0 0}.post-header .meta{margin-top:var(--space-5);padding-top:var(--space-3);border-top:var(--hairline)solid var(--rule)}.toc{max-width:var(--measure);margin:calc(-1 * var(--space-8) + var(--space-6))0 var(--space-8);font-size:17px;line-height:1.6}.toc ul{margin:0;padding-left:var(--indent)}.toc li::marker{color:var(--ink-faint)}.prose{counter-reset:figure}.prose>*{max-width:var(--measure)}.prose>figure,.prose>.code,.prose>pre,.prose>table,.prose>.footnotes,.prose>p:has(>img:only-child),.prose>p:has(>iframe){max-width:none}.prose p{margin:0}.prose--article p+p{text-indent:var(--indent)}.prose--article>p:first-child{font-size:22px;line-height:1.6}.prose--page p{margin:0 0 var(--space-4)}.prose h2{font-size:27px;line-height:1.6;font-weight:600;margin:var(--space-6)0 var(--space-3)}.prose h3{font-size:21px;line-height:1.6;font-weight:600;margin:var(--space-5)0 var(--space-3)}.prose h4,.prose h5,.prose h6{font-size:19px;line-height:1.6;font-weight:600;letter-spacing:.04em;text-transform:uppercase;margin:var(--space-5)0 var(--space-1)}.prose>:first-child{margin-top:0}.prose a:visited{color:var(--link-visited)}.prose strong,.prose b{font-weight:600}.prose mark{background:var(--mark);color:var(--ink);border-radius:var(--radius-1);padding:0 var(--space-1)}.prose ul,.prose ol{margin:var(--space-4)0;padding-left:calc(var(--indent) + var(--space-2))}.prose li{margin:0 0 var(--space-1)}.prose li>ul,.prose li>ol{margin:var(--space-1)0 0}.prose li::marker{color:var(--ink-faint)}.prose--page>ul,.prose--page>ol{margin:0 0 var(--space-5)}.prose blockquote{margin:var(--space-5)0;padding-left:var(--space-5);border-left:var(--hairline)solid var(--rule-strong);color:var(--ink-muted);font-style:italic}.prose blockquote p{text-indent:0;margin:0}.prose blockquote p+p{margin-top:var(--space-4)}.prose blockquote cite{display:block;margin-top:var(--space-2);font-size:16px;line-height:1.6;font-style:normal;color:var(--ink-faint)}.prose hr{border:0;border-top:var(--hairline)solid var(--rule);margin:var(--space-6)0}.prose p:has(>img:only-child){margin:var(--space-5)0;text-indent:0}.prose iframe{display:block;border:0;margin:var(--space-5)0}.prose code{font-family:var(--font-mono);font-size:17px;background:var(--surface-code);border-radius:var(--radius-1);padding:1px var(--space-2)}.prose .code{margin:var(--space-5)0}.prose .code .highlight{margin:0}.prose pre{margin:var(--space-5)0;background:var(--surface-code);border-left:2px solid var(--rule-strong);border-radius:var(--radius-0);padding:var(--space-4);overflow-x:auto;white-space:pre;font-family:var(--font-mono);font-size:17px;line-height:1.6;color:var(--ink);text-indent:0}.prose .code pre{margin:0}.prose pre code{background:0 0;border-radius:0;padding:0;font-size:inherit;white-space:pre}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{color:var(--ink-faint)}.chroma .hl{background:var(--mark);display:block}.prose pre.ascii{background:0 0;border:0;padding:0;color:var(--ink-faint);max-width:none}.prose figure{margin:var(--space-5)0}.prose figure img{display:block;width:100%}.prose figcaption{margin-top:var(--space-3);padding-top:var(--space-2);border-top:var(--hairline)solid var(--rule);font-size:16px;line-height:1.6;color:var(--ink-muted);max-width:var(--measure)}.prose figcaption::before{counter-increment:figure;content:"Fig.\00a0" counter(figure);font-family:var(--font-mono);font-size:14px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink);margin-right:var(--space-2)}.prose figcaption .cap{font-style:italic}.prose table{display:block;overflow-x:auto;border-collapse:collapse;margin:var(--space-5)0;font-size:17px;line-height:1.6}.prose thead th{text-align:left;font-weight:600;color:var(--ink);padding:var(--space-2)var(--space-4)var(--space-2)0;border-top:2px solid var(--rule-strong);border-bottom:var(--hairline)solid var(--rule-strong)}.prose tbody td,.prose tbody th{color:var(--ink-muted);padding:var(--space-2)var(--space-4)var(--space-2)0;border-bottom:var(--hairline)solid var(--rule);font-weight:400;text-align:left}.prose tbody th{color:var(--ink)}.prose tbody tr:last-child td,.prose tbody tr:last-child th{border-bottom:2px solid var(--rule-strong)}.prose td[style*=right],.prose th[style*=right]{font-family:var(--font-mono);font-size:16px;font-variant-numeric:tabular-nums}.prose sup a.footnote-ref,.prose sup a[role=doc-noteref]{font-size:14px;color:var(--cite);text-decoration:none;padding:0 1px}.prose sup a.footnote-ref:hover{text-decoration:underline;text-underline-offset:2px}.prose sup{line-height:0}.prose .footnotes{margin-top:var(--space-7);padding-top:var(--space-3);border-top:var(--hairline)solid var(--rule-strong)}.prose .footnotes::before{content:"Notes";display:block;font-family:var(--font-mono);font-size:14px;line-height:1.6;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);margin:0 0 var(--space-3)}.prose .footnotes hr{display:none}.prose .footnotes ol{list-style:none;counter-reset:fn;margin:0;padding:0;max-width:var(--measure);font-size:17px;line-height:1.6;color:var(--ink-muted)}.prose .footnotes li{counter-increment:fn;padding-left:var(--indent);text-indent:calc(-1 * var(--indent));margin-bottom:var(--space-2)}.prose .footnotes li::before{content:counter(fn)".";color:var(--cite);font-family:var(--font-mono);font-size:14px;margin-right:var(--space-2)}.prose .footnotes li p{display:inline;text-indent:0}.prose .footnotes a.footnote-backref{color:var(--cite);text-decoration:none;margin-left:var(--space-1)}.prose a.button{display:inline-block;font-size:16px;line-height:1.6;letter-spacing:.04em;text-transform:uppercase;font-weight:600;color:var(--ink);text-decoration:none;border:var(--hairline)solid var(--rule-strong);border-radius:var(--radius-0);padding:var(--space-2)var(--space-4);margin-bottom:var(--space-5)}.prose a.button:hover{background:var(--surface-raised)}.prose--page+.post-list{margin-top:var(--space-7);border-top:var(--hairline)solid var(--rule);padding-top:var(--space-5)}.entry{padding-bottom:var(--space-5)}.entry+.entry{border-top:var(--hairline)solid var(--rule);padding-top:var(--space-5)}.entry h2{font-size:27px;line-height:1.6;font-weight:600;margin:0}.entry h2 a{color:var(--ink);text-decoration:none}.entry h2 a:hover{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px}.entry .meta{margin:var(--space-1)0 var(--space-3)}.excerpt{font-size:20px;line-height:1.6;color:var(--ink-muted);max-width:var(--measure);margin:0}.more{display:inline-block;margin-top:var(--space-2);font-size:16px;line-height:1.6}.pager{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-4);padding-top:var(--space-3);border-top:var(--hairline)solid var(--rule);font-size:16px;line-height:1.6}.pager a{text-decoration:none}.pager a:hover{text-decoration:underline;text-decoration-thickness:2px}.pager .count{color:var(--ink-faint)}.pager .count b{color:var(--ink);background:var(--mark);border-radius:var(--radius-1);padding:0 var(--space-1);font-weight:400}.related{max-width:var(--measure);margin-top:var(--space-7);font-size:17px;line-height:1.6}.related ul{margin:0;padding-left:calc(var(--indent) + var(--space-2))}.related li{margin-bottom:var(--space-1)}.related li::marker{color:var(--ink-faint)}.meta-inline{color:var(--ink-faint);font-size:16px}.article-nav{margin-top:var(--space-7);padding-top:var(--space-3);border-top:var(--hairline)solid var(--rule);display:flex;justify-content:space-between;gap:var(--space-5);font-size:16px;line-height:1.6}.article-nav>div{max-width:46%}.article-nav .dir{display:block;color:var(--ink-faint)}.article-nav .newer{text-align:right;margin-left:auto}.site-footer{margin-top:var(--space-7);padding-top:var(--space-5);border-top:var(--hairline)solid var(--rule)}.site-footer--article{margin-top:var(--space-8)}.profile-links{display:flex;flex-wrap:wrap;column-gap:var(--space-5);row-gap:var(--space-1);font-size:16px;line-height:1.6;margin-bottom:var(--space-3)}.profile-links a{text-decoration:none}.profile-links a:hover{text-decoration:underline;text-decoration-thickness:2px}.colophon{font-size:16px;line-height:1.6;color:var(--ink-faint);margin:0}@media(max-width:480px){.site-name,.post-title{font-size:36px;line-height:1.6}}