@font-face{font-family:Fraunces;font-weight:100 1000;font-style:normal;font-display:swap;src:url(/_assets/fraunces-DihXLNYH.woff2) format("woff2")}@font-face{font-family:Literata;font-weight:100 900;font-style:normal;font-display:swap;src:url(/_assets/literata-Cedbco83.woff2) format("woff2")}@font-face{font-family:Playfair Display;font-weight:400 900;font-style:normal;font-display:swap;src:url(/_assets/playfairdisplay-BOwq7MWX.woff2) format("woff2")}@font-face{font-family:Playfair Display;font-weight:400 900;font-style:italic;font-display:swap;src:url(/_assets/playfairdisplay-italic-DmbndNpe.woff2) format("woff2")}@font-face{font-family:Cormorant;font-weight:300 700;font-style:normal;font-display:swap;src:url(/_assets/cormorant-D7itQ8IL.woff2) format("woff2")}@font-face{font-family:Cormorant;font-weight:300 700;font-style:italic;font-display:swap;src:url(/_assets/cormorant-italic-BMf3v8-7.woff2) format("woff2")}@font-face{font-family:Inter;font-weight:100 900;font-style:normal;font-display:swap;src:url(/_assets/inter-Dx4kXJAl.woff2) format("woff2")}@font-face{font-family:Inter;font-weight:100 900;font-style:italic;font-display:swap;src:url(/_assets/inter-italic-DpCbqKDY.woff2) format("woff2")}@font-face{font-family:Montserrat;font-weight:100 900;font-style:normal;font-display:swap;src:url(/_assets/montserrat-l_AIctKy.woff2) format("woff2")}@font-face{font-family:Montserrat;font-weight:100 900;font-style:italic;font-display:swap;src:url(/_assets/montserrat-italic-jzfX-GOl.woff2) format("woff2")}@font-face{font-family:"Source Sans 3";font-weight:200 900;font-style:normal;font-display:swap;src:url(/_assets/sourcesans3-BqRLTx4X.woff2) format("woff2")}@font-face{font-family:"Source Sans 3";font-weight:200 900;font-style:italic;font-display:swap;src:url(/_assets/sourcesans3-italic-Bg-PIjcQ.woff2) format("woff2")}@font-face{font-family:"Source Serif 4";font-weight:200 900;font-style:normal;font-display:swap;src:url(/_assets/sourceserif4-D9elroTD.woff2) format("woff2")}@font-face{font-family:"Source Serif 4";font-weight:200 900;font-style:italic;font-display:swap;src:url(/_assets/sourceserif4-italic-D2yaqPoE.woff2) format("woff2")}@font-face{font-family:Fira Code;font-weight:300 700;font-style:normal;font-display:swap;src:url(/_assets/firacode-CHoedHDv.woff2) format("woff2")}@font-face{font-family:Cause;font-weight:100 900;font-style:normal;font-display:swap;src:url(/_assets/cause-Dg7dLvEQ.woff2) format("woff2")}@font-face{font-family:"Exo 2";font-weight:100 900;font-style:normal;font-display:swap;src:url(/_assets/exo2-CQ1lLIdm.woff2) format("woff2")}@font-face{font-family:"Exo 2";font-weight:100 900;font-style:italic;font-display:swap;src:url(/_assets/exo2-italic-9qdPE589.woff2) format("woff2")}@font-face{font-family:New Rocker;font-weight:400;font-style:normal;font-display:swap;src:url(/_assets/newrocker-Dx1Qcjw-.woff2) format("woff2")}pre{line-height:125%}td.linenos .normal,span.linenos{color:var(--code-muted);background-color:var(--code-bg);padding-left:5px;padding-right:5px}td.linenos .special,span.linenos.special{color:var(--code-text);background-color:var(--code-muted);padding-left:5px;padding-right:5px}pre code .hll{background-color:var(--code-hl)}pre code{color:var(--code-text)}pre code .c{color:var(--code-comment);font-style:italic}pre code .err{color:var(--code-error)}pre code .esc,pre code .g{color:var(--code-text)}pre code .k{color:var(--code-keyword)}pre code .l{color:var(--code-string)}pre code .n{color:var(--code-text)}pre code .o{color:var(--code-keyword);font-weight:700}pre code .x,pre code .p{color:var(--code-text)}pre code .ch,pre code .cm{color:var(--code-comment);font-style:italic}pre code .cp{color:var(--code-comment);font-weight:700;font-style:italic}pre code .cpf,pre code .c1{color:var(--code-comment);font-style:italic}pre code .cs{color:var(--code-comment);font-weight:700;font-style:italic}pre code .gd{color:var(--code-error);background-color:color-mix(in oklab,var(--code-error) 25%,var(--code-bg))}pre code .ge{color:var(--code-text);font-style:italic}pre code .ges{color:var(--code-text);font-weight:700;font-style:italic}pre code .gr{color:var(--code-error)}pre code .gh{color:var(--code-builtin);font-weight:700}pre code .gi{color:var(--code-added);background-color:color-mix(in oklab,var(--code-added) 25%,var(--code-bg))}pre code .go,pre code .gp{color:var(--code-muted)}pre code .gs{color:var(--code-text);font-weight:700}pre code .gu{color:var(--code-builtin)}pre code .gt{color:var(--code-error)}pre code .g-Underline{color:var(--code-text);text-decoration:underline}pre code .kc{color:var(--code-builtin)}pre code .kd,pre code .kn{color:var(--code-keyword)}pre code .kp{color:var(--code-builtin)}pre code .kr{color:var(--code-keyword)}pre code .kt,pre code .ld{color:var(--code-builtin)}pre code .m,pre code .s{color:var(--code-string)}pre code .na,pre code .nb{color:var(--code-text)}pre code .nc{color:var(--code-type);font-weight:700}pre code .no{color:var(--code-builtin);font-weight:700}pre code .nd{color:var(--code-function);font-weight:700}pre code .ni{color:var(--code-type)}pre code .ne{color:var(--code-type);font-weight:700}pre code .nf{color:var(--code-function);font-weight:700}pre code .nl{color:var(--code-builtin);font-weight:700}pre code .nn{color:var(--code-keyword)}pre code .nx{color:var(--code-text)}pre code .py{color:var(--code-builtin)}pre code .nt{color:var(--code-tag)}pre code .nv{color:var(--code-builtin)}pre code .ow{color:var(--code-keyword);font-weight:700}pre code .pm{color:var(--code-text)}pre code .w{color:var(--code-muted)}pre code .mb,pre code .mf,pre code .mh,pre code .mi,pre code .mo{color:var(--code-string)}pre code .sa{color:var(--code-builtin)}pre code .sb,pre code .sc{color:var(--code-string)}pre code .dl{color:var(--code-builtin)}pre code .sd,pre code .s2{color:var(--code-string)}pre code .se,pre code .sh,pre code .si{color:var(--code-builtin)}pre code .sx{color:var(--code-string)}pre code .sr{color:var(--code-builtin)}pre code .s1,pre code .ss{color:var(--code-string)}pre code .bp{color:var(--code-text)}pre code .fm{color:var(--code-function);font-weight:700}pre code .vc,pre code .vg,pre code .vi,pre code .vm{color:var(--code-builtin)}pre code .il{color:var(--code-string)}:root{color-scheme:light;--bg: #ffffff;--surface: #f5f5f5;--text: #1a1a1a;--muted: #666666;--accent: #0056b3;--accent2: #003d80;--line: #0000001a;--link: color-mix(in oklab, var(--text) 50%, var(--accent));--code-bg: light-dark(var(--surface), #0d1117);--code-text: light-dark(#24292f, #e6edf3);--code-muted: light-dark(#6e7781, #6e7681);--code-comment: light-dark(#59636e, #8b949e);--code-keyword: light-dark(#cf222e, #ff7b72);--code-builtin: light-dark(#0550ae, #79c0ff);--code-string: light-dark(#0a3069, #a5d6ff);--code-function: light-dark(#8250df, #d2a8ff);--code-type: light-dark(#953800, #f0883e);--code-tag: light-dark(#116329, #7ee787);--code-error: light-dark(#d1242f, #f85149);--code-added: light-dark(#1a7f37, #56d364);--code-hl: light-dark(#fff8c5, #6e7681);--font-source-sans: "Source Sans 3", system-ui, sans-serif;--font-source-serif: "Source Serif 4", serif;--font-fraunces: "Fraunces", serif;--font-literata: "Literata", serif;--font-playfair: "Playfair Display", serif;--font-cormorant: "Cormorant", serif;--font-inter: "Inter", system-ui, sans-serif;--font-montserrat: "Montserrat", system-ui, sans-serif;--font-fira-code: "Fira Code", ui-monospace, monospace;--font-cause: "Cause", system-ui, sans-serif;--font-exo2: "Exo 2", system-ui, sans-serif;--font-new-rocker: "New Rocker", "Playfair Display", serif;--font-body: var(--font-source-sans);--font-heading: var(--font-source-serif);--font-brand: var(--font-heading);--font-code: var(--font-fira-code);--editor-w: min(46rem, 50vw)}*{box-sizing:border-box}html{scroll-behavior:smooth;overflow-y:overlay;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--muted) 45%,transparent) transparent}::-webkit-scrollbar{width:.5rem;height:.5rem}::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--muted) 45%,transparent);border-radius:.25rem}::-webkit-scrollbar-track{background:transparent}body{font-family:var(--font-body);font-size:1.05rem;line-height:1.65;font-variant-numeric:tabular-nums;margin:0;background:var(--bg);color:var(--text);overflow-x:clip;min-height:100vh;display:flex;flex-direction:column}#content{flex:1}#banner{position:relative;display:flex;flex-direction:column;justify-content:flex-end;min-height:11rem;background:linear-gradient(135deg,var(--surface),var(--bg));border-bottom:1px solid var(--line)}#page-banner{position:absolute;inset:0;overflow:hidden;display:grid}#page-banner>*:not(style,script){grid-area:1 / 1;display:block;width:100%;height:100%;object-fit:cover;transform:scale(1.25) translateY(var(--pry, 0px));will-change:transform}#page-banner [data-design]>svg{display:block;width:100%;height:100%}#brand,#nav{position:relative}#brand{font-family:var(--font-brand);font-weight:700;font-size:2.4rem;text-decoration:none;white-space:nowrap;margin:auto 1.25rem 0;padding-top:1.5rem;color:var(--text)}#nav{font-size:1.3em;padding:.35rem 1.25rem}#nav ul{list-style:none;margin:0;padding:0;display:flex;gap:.25rem 1.5rem;flex-wrap:wrap;align-items:baseline}#nav a{text-decoration:none;color:var(--text)}#nav ul ul a{color:var(--muted)}#nav a:hover{color:var(--accent)}#nav span{color:var(--muted);font-size:.95rem}#nav .current{color:var(--accent);font-weight:500}#content{position:relative;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,78rem) minmax(0,1fr);transition:margin-left .25s ease}body:has(.multicol) #content{grid-template-columns:minmax(0,1fr) minmax(0,4fr)}body.editing #content{margin-left:var(--editor-w);padding-left:1rem}body.editing #sidebar{display:none}.editor-host{position:absolute;top:0;bottom:0;left:calc(0px - var(--editor-w));width:var(--editor-w)}.editor-root.overlay{position:sticky;top:0;height:100vh;max-height:100%;background:var(--bg);animation:editor-slide-in .25s ease}.editor-root.overlay.closing{transform:translate(-100%);transition:transform .25s ease}@keyframes editor-slide-in{0%{transform:translate(-100%)}}button.banner-edit-link{position:absolute;top:.6rem;right:1.25rem;left:auto;z-index:10;font:inherit;border:none;cursor:pointer;background:none;padding:0}#sidebar{grid-column:1;justify-self:start;align-self:start;position:sticky;top:0;z-index:1;width:12rem;max-height:100vh;overflow-y:auto;padding:1rem 1rem 1rem 1.25rem;border-radius:0 0 .5rem;background:color-mix(in srgb,var(--bg) 75%,transparent);-webkit-backdrop-filter:blur(.5rem);backdrop-filter:blur(.5rem)}#sidebar ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.8em;line-height:1}#sidebar a{text-decoration:none;color:var(--muted)}#sidebar a:hover{color:var(--accent)}#sidebar .current{color:var(--accent);font-weight:500}main{grid-column:2;padding:0 1.25rem 3rem}article h1,article h2,article h3{font-family:var(--font-heading);font-weight:600;line-height:1.25}article h1{font-size:2.2rem;margin:2rem 0 1.2rem}article p,article ul,article ol,article dl,article blockquote,article pre,article figure{margin-top:0;margin-bottom:1rem}article h3{margin:1.4rem 0 .4rem}article ul{list-style:none;padding-inline-start:1em}article ul li:before{content:"🔹";display:inline-block;margin-left:-1.3em;width:1.3em}article ul ul li:before{content:"🔸"}article ul ul ul li:before{content:"🔹"}article .task-list-item:before{content:none}article .task-list-item-checkbox{cursor:pointer;margin-inline-end:.35em;vertical-align:middle}article{position:relative}.edit-link{position:absolute;top:.2rem;left:-2.2rem;z-index:2;font:inherit;background:none;border:none;padding:0;cursor:pointer;opacity:.7;text-shadow:0 0 .1em black}article h1 .edit-link{position:static;font-size:1.1rem;vertical-align:.3em;margin-left:.4rem}.edit-link:hover{opacity:1}button.login-link,button.profile-link{position:absolute;top:.6rem;right:.5rem;z-index:10;font:inherit;border:none;cursor:pointer;background:none;padding:0;opacity:.7;text-shadow:0 0 .1em black}button.login-link:hover,button.profile-link:hover{opacity:1}article p,article li,article dd{text-align:justify;-webkit-hyphens:auto;hyphens:auto}.multicol .colseg.cols{columns:30rem;column-gap:3.5rem;column-rule:1px solid var(--line)}.multicol .colseg{margin-bottom:1rem}.multicol .colseg p,.multicol .colseg li{break-inside:avoid-column}.multicol .colseg figure,.multicol .colseg pre,.multicol .colseg blockquote,.multicol .colseg table,.multicol .colseg dl{break-inside:avoid}article h2{font-size:1.5rem;margin:2.2rem 0 .6rem}article a{color:var(--link);font-weight:500;text-decoration:none}article a:hover{color:var(--accent)}blockquote{margin:0 0 1rem -.5rem;padding:0 0 0 .25rem;border-left:.25rem solid var(--accent2);color:var(--muted)}blockquote p{margin:0}pre{overflow-x:auto;padding:.5rem .8rem;margin-left:-.8rem;margin-right:-.8rem;background:var(--code-bg);border-radius:4px;position:relative}p code,li code{font-size:.85em}.copy{position:absolute;top:.35rem;right:.35rem;font:inherit;font-size:.75rem;padding:.15rem .6rem;color:var(--muted);background:var(--bg);border:1px solid var(--line);border-radius:4px;cursor:pointer;opacity:0;transition:opacity .2s}pre:hover .copy,.copy:focus-visible{opacity:1}.copy.copied{color:var(--accent)}code{font-family:var(--font-code);font-size:.88em}table{border-collapse:collapse}th,td{border:1px solid var(--line);padding:.35rem .8rem}img{max-width:100%;height:auto;border-radius:6px}figure{margin:0 0 1.5rem}figcaption{color:var(--muted);font-size:.85rem}figure:has(.wide) figcaption{max-width:65ch;margin-inline:auto;text-align:center}figure:has(.right),img.right{float:right;margin:.3rem 0 1rem 1.5rem}figure:has(.left),img.left{float:left;margin:.3rem 1.5rem 1rem 0}figure:has(.wide),img.wide{display:block;width:100vw;max-width:none;margin-inline:calc(50% - 50vw);transition:margin-left .25s ease}p:has(>img.wide:only-child){line-height:0}figure:has(.right) img,figure:has(.left) img{float:none;margin:0;width:100%}figure:has(.wide) img{width:100%;max-width:100%;margin:0}figure:has(.right),figure:has(.left),img.right:not([width]),img.left:not([width]){width:30%}article h1,article h2{clear:both}@media(max-width:102rem){body:has(#sidebar):not(.editing) #content{grid-template-columns:12rem minmax(0,78rem) minmax(0,1fr)}body:has(#sidebar):has(.multicol):not(.editing) #content{grid-template-columns:12rem minmax(0,1fr)}body:has(#sidebar) figure:has(.wide),body:has(#sidebar) img.wide:not(figure img){margin-inline:-13.25rem 0}}body:has(.multicol) figure:has(.wide),body:has(.multicol) img.wide:not(figure img){margin-inline:calc(-20vw - 1.25rem) 0}body.editing figure:has(.wide),body.editing img.wide:not(figure img){width:calc(100vw - var(--editor-w));margin-inline:calc(50% - (100vw - var(--editor-w)) / 2)}body.editing:has(.multicol) figure:has(.wide),body.editing:has(.multicol) img.wide:not(figure img){width:calc(100vw - var(--editor-w));margin-inline:calc((100vw - var(--editor-w)) / -5 - 1.25rem) 0}.reveal{opacity:0;translate:0 14px;transition:opacity .6s ease,translate .6s ease}.reveal.in{opacity:1;translate:0 0}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.reveal{opacity:1;translate:none;transition:none}}.task-list-item{list-style:none}.dateline{color:var(--muted);font-size:.85rem;text-align:left}.footnote{font-size:.85rem;color:var(--muted)}footer{padding:0}::view-transition{perspective:1000px;inset:0}::view-transition-group(root),::view-transition-image-pair(root){transform-style:preserve-3d;isolation:auto}::view-transition-old(root),::view-transition-new(root){mix-blend-mode:normal;backface-visibility:hidden;animation:none}@keyframes group-rotate{to{transform:rotateY(-90deg)}}@keyframes fade-out-a-bit{to{opacity:.5}}@keyframes fade-in-a-bit{0%{opacity:.5}}::view-transition-group(root){transform-origin:50% 50% -50vw;animation:.3s ease-in-out forwards group-rotate}::view-transition-old(root){animation:.3s ease-in-out forwards fade-out-a-bit}::view-transition-new(root){transform-origin:0 0;transform:rotateY(90deg);inset:0 auto 0 100%;animation:.3s ease-in-out forwards fade-in-a-bit}@keyframes group-rotate-back{to{transform:rotateY(90deg)}}html.nav-back::view-transition-group(root){animation-name:group-rotate-back}html.nav-back::view-transition-new(root){transform-origin:100% 0;transform:rotateY(-90deg);inset:0 100% 0 auto}@keyframes nav-fade-in{0%{opacity:0}}html.nav-fade::view-transition-group(root){animation:none}html.nav-fade::view-transition-old(root){animation:none}html.nav-fade::view-transition-new(root){transform:none;inset:0;animation:.2s ease-in-out nav-fade-in}
