@font-face{font-family:Literata;font-style:normal;font-weight:300 700;font-display:swap;src:url(/fonts/literata-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Literata;font-style:normal;font-weight:300 700;font-display:swap;src:url(/fonts/literata-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist;font-style:normal;font-weight:400 600;font-display:swap;src:url(/fonts/geist-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist;font-style:normal;font-weight:400 600;font-display:swap;src:url(/fonts/geist-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Mono;font-style:normal;font-weight:400 500;font-display:swap;src:url(/fonts/geist-mono-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono;font-style:normal;font-weight:400 500;font-display:swap;src:url(/fonts/geist-mono-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}:root{--paper: #ffffff;--paper-2: #f7f4ec;--surface: #ffffff;--ink: #1c1e22;--ink-2: #55595f;--ink-3: #8a8e96;--line: #e6e7ea;--rule: #d8dadf;--accent: #8b4fe0;--accent-tint: rgba(139, 79, 224, .08);--ink-deep: #000000;--slate: #454a56;--ink-band: #101317;--code-bg: #15181c;--code-ink: #dfe2e7;--code-ink-2: #868c95;--code-line: rgba(255, 255, 255, .09);--serif: "Literata", "Iowan Old Style", "Palatino Linotype", Georgia, serif;--sans: "Geist", system-ui, -apple-system, "Segoe UI", sans-serif;--mono: "Geist Mono", ui-monospace, "SF Mono", Consolas, monospace;--t-2xs: .6875rem;--t-xs: .75rem;--t-sm: .875rem;--t-base: 1.0625rem;--t-lg: 1.1875rem;--t-xl: clamp(1.3rem, 2vw, 1.5rem);--t-2xl: clamp(1.6rem, 3.2vw, 2.2rem);--t-3xl: clamp(2.2rem, 4.8vw, 3.5rem);--s-1: 4px;--s-2: 8px;--s-3: 12px;--s-4: 16px;--s-6: 24px;--s-8: 32px;--s-12: 48px;--s-16: 64px;--s-20: 80px;--s-24: 96px;--dur-tap: .12s;--dur-1: .16s;--dur-2: .24s;--dur-surface: .52s;--ease-out: cubic-bezier(.22, 1, .36, 1);--ease-in: cubic-bezier(.4, 0, 1, 1);--lift: 0 -14px 24px -14px color-mix(in srgb, var(--ink) 11%, transparent), 0 -.25px 0 .25px color-mix(in srgb, var(--ink) 5%, transparent);--raise: 0 1px 2px -1px color-mix(in srgb, var(--ink) 12%, transparent), 0 10px 26px -14px color-mix(in srgb, var(--ink) 20%, transparent);--seam: linear-gradient( to right, transparent 0%, color-mix(in srgb, var(--ink) 10%, transparent) 50%, transparent 100% );--header-h: 72px;--header-h-stuck: 56px;--radius: 4px;--measure: 66ch;--page: 1000px}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--paper: #0f1114;--paper-2: #171a1f;--surface: #14171b;--ink: #edeef1;--ink-2: #a0a5ad;--ink-3: #71767e;--line: #24282e;--rule: #2f343b;--accent: #a97cf0;--accent-tint: rgba(169, 124, 240, .12);--ink-deep: #ffffff;--slate: #8b909c;--code-bg: #0a0c0e;--ink-band: #1b1f26}}:root[data-theme=dark]{--paper: #0f1114;--paper-2: #171a1f;--surface: #14171b;--ink: #edeef1;--ink-2: #a0a5ad;--ink-3: #71767e;--line: #24282e;--rule: #2f343b;--accent: #a97cf0;--accent-tint: rgba(169, 124, 240, .12);--ink-deep: #ffffff;--slate: #8b909c;--code-bg: #0a0c0e;--ink-band: #1b1f26}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:var(--header-h-stuck);scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:1rem;line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}.wash{margin-top:calc(var(--header-h) * -1);padding-top:var(--header-h);position:relative;isolation:isolate;background:linear-gradient(to bottom,color-mix(in srgb,var(--ink) 7%,var(--paper)) 0%,color-mix(in srgb,var(--ink) 4%,var(--paper)) 42%,var(--paper) 100%)}h1,h2,h3,h4{font-family:var(--serif);font-weight:400;letter-spacing:-.018em;text-wrap:balance;margin:0}p{margin:0;max-width:var(--measure)}a{color:inherit}img,svg{max-width:100%;height:auto}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}.page{max-width:var(--page);margin-inline:auto;padding-inline:var(--s-6)}.note{margin-top:var(--s-8);font-size:var(--t-sm);max-width:none}.label{font-family:var(--mono);font-size:var(--t-xs);font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3)}.prose{color:var(--ink-2)}.opener{max-width:62%;margin-bottom:var(--s-12)}.opener>div+*{margin-top:var(--s-4)}.opener>div>:last-child{margin-bottom:0}@media(max-width:860px){.opener{max-width:none}}.btn{display:inline-flex;align-items:center;justify-content:center;font-family:var(--sans);font-size:var(--t-sm);font-weight:550;line-height:1.25;text-align:center;text-decoration:none;color:var(--paper);background:var(--ink);border:1px solid var(--ink);border-radius:var(--radius);padding:13px var(--s-6);cursor:pointer;transition:background-color var(--dur-1) var(--ease-out),border-color var(--dur-1) var(--ease-out),color var(--dur-1) var(--ease-out),translate var(--dur-2) var(--ease-out),scale var(--dur-1) var(--ease-out),box-shadow var(--dur-2) var(--ease-out)}.btn:hover{background:var(--ink-deep);border-color:var(--ink-deep);box-shadow:var(--raise);translate:0 -2px}.btn:active{box-shadow:none;translate:0 0;scale:.985;transition-duration:var(--dur-tap)}.btn:disabled{cursor:not-allowed;opacity:.55;box-shadow:none}.btn-quiet{color:var(--ink);background:transparent}.btn-quiet:hover{color:var(--paper);background:var(--ink);border-color:var(--ink)}.textlink{color:var(--ink-2);font-family:var(--sans);font-size:var(--t-sm);text-decoration:none;border-bottom:1px solid var(--rule);display:inline-block;padding-block:6px 2px;transition:color var(--dur-1) var(--ease-out),border-color var(--dur-1) var(--ease-out)}.textlink:hover{color:var(--ink);border-color:var(--ink)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.wordmark:where(.astro-hhuuaa7r){display:inline-flex;align-items:baseline;line-height:0}.word:where(.astro-hhuuaa7r){font-family:var(--serif);font-style:italic;font-weight:400;font-size:calc(var(--h) / .75 * .72);letter-spacing:-.005em;line-height:1;color:var(--ink);margin-left:calc(var(--h) * .2)}img:where(.astro-hhuuaa7r){height:var(--h);width:auto;display:block}.dark:where(.astro-hhuuaa7r){display:none}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .light:where(.astro-hhuuaa7r){display:none}:root:not([data-theme=light]) .dark:where(.astro-hhuuaa7r){display:block}}:root[data-theme=dark] .light:where(.astro-hhuuaa7r){display:none}:root[data-theme=dark] .dark:where(.astro-hhuuaa7r){display:block}:root[data-theme=light] .light:where(.astro-hhuuaa7r){display:block}:root[data-theme=light] .dark:where(.astro-hhuuaa7r){display:none}header:where(.astro-ctg3m53h){position:sticky;top:0;z-index:20;border-bottom:1px solid transparent;transition:background-color var(--dur-surface) var(--ease-out),border-color var(--dur-surface) var(--ease-out)}header:where(.astro-ctg3m53h).stuck{background:color-mix(in srgb,var(--paper) 86%,transparent);-webkit-backdrop-filter:blur(14px) saturate(1.7);backdrop-filter:blur(14px) saturate(1.7);border-bottom-color:var(--line)}@supports not (backdrop-filter: blur(1px)){header:where(.astro-ctg3m53h).stuck{background:var(--paper)}}header:where(.astro-ctg3m53h):not(.stuck){border-bottom-color:transparent}.bar:where(.astro-ctg3m53h){display:flex;align-items:center;justify-content:space-between;gap:var(--s-6);height:var(--header-h);transition:height var(--dur-surface) var(--ease-out)}header:where(.astro-ctg3m53h).stuck .bar:where(.astro-ctg3m53h){height:var(--header-h-stuck)}.brand:where(.astro-ctg3m53h){display:inline-flex;text-decoration:none;transform-origin:left center;transition:transform var(--dur-surface) var(--ease-out)}header:where(.astro-ctg3m53h).stuck .brand:where(.astro-ctg3m53h){transform:scale(.8)}nav:where(.astro-ctg3m53h){display:flex;align-items:center;gap:var(--s-6);font-family:var(--sans);font-size:var(--t-sm)}.links:where(.astro-ctg3m53h){display:flex;align-items:center;gap:var(--s-6)}.links:where(.astro-ctg3m53h) a:where(.astro-ctg3m53h),.sheet:where(.astro-ctg3m53h) a:where(.astro-ctg3m53h){color:var(--ink-2);text-decoration:none;transition:color var(--dur-1) var(--ease-out);padding-block:var(--s-2)}.links:where(.astro-ctg3m53h) a:where(.astro-ctg3m53h):hover,.sheet:where(.astro-ctg3m53h) a:where(.astro-ctg3m53h):hover{color:var(--ink);text-decoration:underline;text-underline-offset:3px}nav:where(.astro-ctg3m53h) a:where(.astro-ctg3m53h).go{font-size:var(--t-xs);padding:8px var(--s-4);padding-block:8px;flex:none;white-space:nowrap}.menu:where(.astro-ctg3m53h){display:none;position:relative}summary:where(.astro-ctg3m53h){list-style:none;cursor:pointer;display:grid;align-content:center;gap:5px;width:40px;height:40px;padding-inline:9px;border-radius:var(--radius);transition:background-color var(--dur-1) var(--ease-out)}summary:where(.astro-ctg3m53h)::-webkit-details-marker{display:none}summary:where(.astro-ctg3m53h):hover{background:var(--accent-tint)}summary:where(.astro-ctg3m53h) span:where(.astro-ctg3m53h){display:block;height:1.5px;background:var(--ink);border-radius:2px;transition:transform var(--dur-2) var(--ease-out)}.menu:where(.astro-ctg3m53h)[open] summary:where(.astro-ctg3m53h) span:where(.astro-ctg3m53h):first-child{transform:translateY(3.25px) rotate(45deg)}.menu:where(.astro-ctg3m53h)[open] summary:where(.astro-ctg3m53h) span:where(.astro-ctg3m53h):last-child{transform:translateY(-3.25px) rotate(-45deg)}.sheet:where(.astro-ctg3m53h){position:absolute;top:calc(100% + var(--s-3));right:0;min-width:168px;display:grid;padding:var(--s-2);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--raise)}.sheet:where(.astro-ctg3m53h) a:where(.astro-ctg3m53h){padding:10px var(--s-3);border-radius:var(--radius);color:var(--ink)}.sheet:where(.astro-ctg3m53h) a:where(.astro-ctg3m53h):hover{text-decoration:none;background:var(--accent-tint)}@media(max-width:700px){.links:where(.astro-ctg3m53h){display:none}.menu:where(.astro-ctg3m53h){display:block}nav:where(.astro-ctg3m53h){gap:var(--s-3)}}footer:where(.astro-gcn2mc3v){border-top:1px solid var(--rule);margin-top:var(--s-24)}.inner:where(.astro-gcn2mc3v){display:grid;grid-template-columns:2.4fr 1fr 1fr 1fr max-content;gap:var(--s-12) var(--s-8);padding-block:var(--s-12) var(--s-20);align-items:start}.colophon:where(.astro-gcn2mc3v){display:grid;gap:var(--s-3)}.colophon:where(.astro-gcn2mc3v) p:where(.astro-gcn2mc3v){font-size:var(--t-sm)}.tm:where(.astro-gcn2mc3v){font-size:var(--t-xs);color:var(--ink-3);max-width:34ch}nav:where(.astro-gcn2mc3v) ul:where(.astro-gcn2mc3v){list-style:none;margin:var(--s-3) 0 0;padding:0;display:grid;gap:var(--s-2)}nav:where(.astro-gcn2mc3v) a:where(.astro-gcn2mc3v){font-family:var(--sans);font-size:var(--t-sm);color:var(--ink-2);text-decoration:none;display:inline-flex;align-items:center;gap:.45em;padding-block:3px}nav:where(.astro-gcn2mc3v) a:where(.astro-gcn2mc3v):hover{color:var(--ink);text-decoration:underline;text-underline-offset:3px}.ic:where(.astro-gcn2mc3v){width:1.05em;height:1.05em;flex:none;background:currentColor;-webkit-mask:var(--i) center / contain no-repeat;mask:var(--i) center / contain no-repeat;opacity:.75}nav:where(.astro-gcn2mc3v) a:where(.astro-gcn2mc3v):hover .ic:where(.astro-gcn2mc3v){opacity:1}@media(max-width:980px){.inner:where(.astro-gcn2mc3v){grid-template-columns:1fr 1fr}}
