@font-face{font-family:Inter;src:url(/_astro/Inter-400.7sH-YQrb.woff2)format("woff2");font-weight:400;font-display:swap}@font-face{font-family:Inter;src:url(/_astro/Inter-600.DUjc0pAF.woff2)format("woff2");font-weight:600;font-display:swap}@font-face{font-family:Inter;src:url(/_astro/Inter-400-italic.D1l0FflY.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/_astro/JetBrainsMono-400.Cw0OKtlS.woff2)format("woff2");font-weight:400;font-display:swap}:root{color-scheme:light dark;--font-sans:"Inter", "Helvetica Neue", Helvetica, Arial, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;--weight-regular:400;--weight-strong:600;--paper:light-dark(#fff,#101010);--ink:light-dark(#101010,#f0f0f0);--muted:light-dark(#6a6a6a,#9c9c9c);--faint:light-dark(#888,gray);--rule:light-dark(#e1e1e1,#2c2c2c);--wash:light-dark(#f0f0f0,#1e1e1e);--accent:light-dark(#004080,#80c0ff);--step:4px;--text-body:16px;--text-meta:calc(var(--text-body) - var(--step));--text-section:calc(var(--text-body) + var(--step));--text-title:calc(2 * var(--text-body));--leading:calc(3 * var(--step));--space-1:4px;--space-2:8px;--space-3:16px;--space-4:32px;--space-5:64px;--measure:calc(36 * var(--text-body));--aside:calc(16 * var(--text-body));--hairline:1px;--stroke:2px}@media screen and (width>=1424px){:root{--text-body:20px}}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}@media print{:root{color-scheme:light}}:root{--bg:var(--paper);--fg:var(--ink);--font-body:var(--font-sans);color-scheme:light dark}*,:before,:after{box-sizing:border-box}html{background:var(--bg);-webkit-text-size-adjust:100%}*{line-height:calc(1em + var(--leading))}body{background:var(--bg);color:var(--fg);font-family:var(--font-body);font-size:var(--text-body);font-weight:var(--weight-regular);overflow-wrap:break-word;text-rendering:optimizelegibility;margin:0}.page{max-width:calc(var(--measure) + 2 * var(--space-4));padding:var(--space-4) clamp(var(--space-3), 5vw, var(--space-4)) var(--space-5);flex-direction:column;min-height:100vh;margin:0 auto;display:flex}main{padding-block:var(--space-4);flex:1 0 auto}h1,h2,h3,h4{font-weight:var(--weight-strong);text-transform:none;margin:var(--space-4) 0 var(--space-2);text-wrap:balance}h1{font-size:var(--text-title);margin-top:0}h2{font-size:var(--text-section)}h3,h4{font-size:var(--text-body)}p,ul,ol,blockquote,table{margin:0 0 var(--space-3)}p,li,dd,figcaption{text-wrap:pretty}ul,ol{padding-left:var(--space-3)}li+li{margin-top:var(--space-1)}a{color:var(--accent);text-decoration:underline}a:hover{text-decoration-thickness:var(--stroke)}:focus-visible{outline:var(--stroke) solid var(--accent);outline-offset:var(--stroke)}hr{border:0;border-top:var(--hairline) solid var(--rule);margin:var(--space-4) 0}strong{font-weight:var(--weight-strong)}small,.muted{color:var(--muted);font-size:var(--text-meta)}code,kbd,samp{font-family:var(--font-mono);background:var(--wash);padding:0 var(--space-1)}pre{width:max-content;min-width:100%;max-width:100%;font-family:var(--font-mono);font-size:var(--text-meta);background:var(--wash);padding:var(--space-3);margin:0 0 var(--space-3);overflow-x:auto}pre code{background:0 0;padding:0}.table-scroll{margin:0 0 var(--space-3);overflow-x:auto}table{border-collapse:collapse;width:100%}main table{width:max-content;max-width:100%;display:block;overflow-x:auto}th{font-weight:var(--weight-strong)}th,td{text-align:left;padding:var(--space-1) var(--space-2);border-bottom:var(--hairline) solid var(--rule);vertical-align:top}img,svg,iframe{max-width:100%}blockquote{padding-left:var(--space-3);border-left:var(--stroke) solid var(--rule);color:var(--muted);margin-left:0}.masthead{padding-bottom:var(--space-3);border-bottom:var(--hairline) solid var(--rule)}.masthead__row{justify-content:space-between;align-items:center;gap:var(--space-2) var(--space-3);flex-wrap:wrap;display:flex}.masthead__tools{align-items:center;gap:var(--space-3);display:inline-flex}.masthead__name{font-weight:var(--weight-strong);font-size:var(--text-title);color:var(--fg);align-items:center;gap:var(--space-2);text-decoration:none;display:inline-flex}.masthead__name:hover{text-decoration:underline}.masthead__nav{align-items:center;gap:var(--space-1) var(--space-3);flex-wrap:wrap;display:flex}.masthead__row+.masthead__row{margin-top:var(--space-3)}.masthead__nav a{color:var(--fg);text-decoration:none}.masthead__nav a:hover,.masthead__nav a[aria-current=page]{text-decoration:underline}.masthead__nav a[aria-current=page]{color:var(--muted)}.masthead__out{align-items:center;gap:var(--space-3);display:inline-flex}.masthead__out a{color:var(--muted);display:inline-flex}.masthead__out a:hover{color:var(--fg)}.masthead__out svg{width:var(--text-body);height:var(--text-body);fill:currentColor;display:block}.colophon{padding-top:var(--space-3);border-top:var(--hairline) solid var(--rule);color:var(--muted);font-size:var(--text-meta);align-items:center;gap:var(--space-1) var(--space-2);flex-wrap:wrap;flex-shrink:0;display:flex}.colophon a,.colophon button{color:var(--muted)}.colophon__sep{color:var(--faint)}.colophon__credit{flex-basis:100%;margin:0}.switch{align-items:baseline;gap:var(--space-1);font-size:var(--text-meta);display:inline-flex}.switch a,.switch button,.switch__on{color:var(--muted);font:inherit;background:0 0;border:0;padding:0;text-decoration:none}.switch a,.switch button{cursor:pointer}.switch a:hover,.switch button:hover{color:var(--fg);text-decoration:underline}.switch__on,.switch [aria-pressed=true]{color:var(--fg);cursor:default}.switch [aria-pressed=true]:hover{text-decoration:none}.switch__sep{color:var(--faint)}.switch--theme{visibility:hidden}.switch--theme[data-ready="1"]{visibility:visible}.lede{color:var(--muted);text-wrap:balance}.entry__subtitle{font-size:var(--text-section);text-wrap:balance}.entry__credit{font-size:var(--text-meta);color:var(--muted)}.cv p:has(>em:only-child){color:var(--muted)}.cv p>em:only-child{font-style:normal}.cv-repo{font-size:var(--text-meta);display:block}.cv-when{color:var(--muted);font-size:var(--text-meta);margin-top:calc(-1 * var(--space-1));margin-bottom:var(--space-1)}.home-links{gap:var(--space-2);flex-wrap:wrap;display:flex}.offer+.offer{margin-top:var(--space-3)}.filter{align-items:baseline;gap:var(--space-1) var(--space-3);margin:0 0 var(--space-3);font-size:var(--text-meta);color:var(--muted);visibility:hidden;border:0;flex-wrap:wrap;padding:0;display:flex}.filter[data-ready="1"]{visibility:visible}.filter__legend{float:left;margin-right:var(--space-1);padding:0}.filter__option{align-items:baseline;gap:var(--space-1);cursor:pointer;display:inline-flex}.filter__option:hover,.filter__option:has(:checked){color:var(--fg)}.filter input{accent-color:var(--accent);margin:0}.entry-list{border-top:var(--hairline) solid var(--rule);margin:0;padding:0;list-style:none}.entry-list li{padding:var(--space-2) 0;border-bottom:var(--hairline) solid var(--rule);margin-top:0}.entry-list li[hidden]{display:none}.entry__head{align-items:baseline;gap:var(--space-1) var(--space-2);flex-wrap:wrap;display:flex}.entry__title{font-weight:var(--weight-strong)}.entry__meta{color:var(--muted);font-size:var(--text-meta);font-variant-numeric:tabular-nums}.entry__summary{margin:var(--space-1) 0 0;color:var(--muted)}.toc{font-size:var(--text-meta);padding-bottom:var(--space-3);border-bottom:var(--hairline) solid var(--rule);margin-bottom:var(--space-3)}.toc ul{margin:0;padding:0;list-style:none}.toc--inline ul{align-items:baseline;gap:var(--space-1) var(--space-2);flex-wrap:wrap;display:flex}.toc--inline li{margin-top:0}.toc--inline li:not(:last-child):after{content:"·";color:var(--faint);margin-left:var(--space-2)}.toc--text .toc__sub{padding-left:var(--space-3)}.toc a{color:var(--muted);text-decoration:none}.toc a:hover,.toc a[aria-current]{color:var(--fg)}.toc a:hover{text-decoration:underline}h2[id],h3[id]{scroll-margin-top:var(--space-3)}.source-note{font-size:var(--text-meta);color:var(--muted);background:var(--wash);padding:var(--space-3);margin-bottom:var(--space-3)}.todo{font-size:var(--text-meta);border:var(--hairline) dashed var(--rule);padding:var(--space-3);margin-bottom:var(--space-3);color:var(--muted)}.todo__tag{font-family:var(--font-mono);font-weight:var(--weight-regular);margin-bottom:var(--space-1);color:var(--fg);display:block}.embed{border:var(--hairline) solid var(--rule);width:100%;height:720px}.skip-link{position:absolute;left:-9999px}.skip-link:focus{left:var(--space-3);top:var(--space-3);background:var(--bg);padding:var(--space-1) var(--space-2);border:var(--hairline) solid var(--rule);z-index:10}.lab__body{align-items:flex-start;gap:var(--space-3) var(--space-4);margin-bottom:var(--space-4);flex-wrap:wrap;display:flex}.lab__stage{width:calc(4 * var(--space-5));height:calc(4 * var(--space-5));color:var(--fg);flex-shrink:0}.lab__controls{flex:1 1 calc(4 * var(--space-5));font-size:var(--text-meta);color:var(--muted);visibility:hidden}.lab[data-ready="1"] .lab__controls{visibility:visible}.lab__controls p{margin:0 0 var(--space-2)}.lab__row{align-items:baseline;gap:var(--space-1) var(--space-2);margin-bottom:var(--space-2);flex-wrap:wrap;display:flex}.lab__seed{width:calc(2 * var(--space-5) - var(--space-3));font:inherit;font-family:var(--font-mono);color:var(--fg);background:var(--wash);padding:0 var(--space-1);border:0}.lab__chosen{align-items:center;gap:var(--space-1) var(--space-2);margin:0 0 var(--space-2);border:0;grid-template-columns:auto 1fr auto;padding:0;display:grid}.lab__chosen legend{margin-bottom:var(--space-1);color:var(--fg);padding:0}.lab__chosen input{width:100%;accent-color:var(--accent);margin:0}.lab__chosen output,.lab__derived span{color:var(--fg);font-variant-numeric:tabular-nums}.lab__actions{gap:var(--space-1) var(--space-3);flex-wrap:wrap;display:flex}.lab button{font:inherit;color:var(--accent);cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.lab button:hover{text-decoration-thickness:var(--stroke)}.lab .switch button{color:var(--muted);text-decoration:none}.lab .switch button[aria-pressed=true]{color:var(--fg);cursor:default}.lab__note{color:var(--muted)}.mark-figure{margin:0 0 var(--space-4);text-align:center}.mark-figure svg{margin:0 auto var(--space-2);max-width:100%;height:auto;color:var(--fg);display:block}.mark-figure figcaption{color:var(--muted);font-size:var(--text-meta)}@media (width>=1152px){.reader:has(>.toc){grid-template-columns:calc(var(--aside) - var(--space-4)) var(--measure);column-gap:var(--space-4);margin-left:calc(-1 * var(--aside));display:grid}.reader>.toc{top:var(--space-4);max-height:calc(100vh - 2 * var(--space-4));scrollbar-width:thin;scrollbar-color:var(--rule) transparent;border:0;align-self:start;margin:0;padding:0;position:sticky;overflow-y:auto}.reader>.toc ul{border-left:var(--hairline) solid var(--rule);display:block}.reader>.toc li:after{content:none}.reader>.toc li+li{margin-top:var(--space-1)}.reader>.toc .toc__sub{padding-left:0}.reader>.toc a{padding-left:var(--space-3);margin-left:calc(-1 * var(--stroke));border-left:var(--stroke) solid transparent;display:block}.reader>.toc .toc__sub a{padding-left:var(--space-4)}.reader>.toc a[aria-current]{border-left-color:var(--fg)}main pre,main table{max-width:calc(100% + var(--aside))}}@media (width<=576px){.masthead__row{justify-content:flex-start}.masthead__tools{width:100%}.masthead__name{font-size:var(--text-section)}}.logo[data-astro-cid-f7espo7c]{color:var(--fg);flex-shrink:0;display:block}
