@font-face{font-family:Roobert;font-style:normal;font-weight:300 900;font-display:swap;src:url(/_astro/RoobertUprightsVF.Rw1l4Sqq.woff2) format("woff2-variations")}@font-face{font-family:Roobert;font-style:italic;font-weight:300 900;font-display:swap;src:url(/_astro/RoobertItalicsVF.Bxz3Ryk0.woff2) format("woff2-variations")}:root{--space-0: 0;--space-2: .125rem;--space-4: .25rem;--space-8: .5rem;--space-12: .75rem;--space-16: 1rem;--space-24: 1.5rem;--space-32: 2rem;--space-40: 2.5rem;--space-48: 3rem;--space-64: 4rem;--space-80: 5rem;--space-96: 6rem;--space-128: 8rem;--space-ch-1: 1ch;--space-ch-2: 2ch;--space-ch-4: 4ch;--space-ch-8: 8ch;--space-ch-16: 16ch;--space-ch-32: 32ch;--radius-none: 0;--radius-sm: 0;--radius-md: 0;--radius-lg: 0;--radius-full: 0;--stroke-1: 1px;--stroke-2: 2px;--layout-centered-max-width: 100ch;--layout-content-max-width: 80ch;--layout-prose-max-width: 75ch;--layout-gutter: var(--space-ch-4)}:root{--color-blue: #2d4682;--color-blue-dim: #233769;--color-mint: #87e0d1;--color-gray-50: #fafaf8;--color-gray-100: #f4f4f5;--color-gray-200: #d8dada;--color-gray-300: #c5c9c8;--color-gray-400: #848b89;--color-gray-500: #5c6462;--color-gray-600: #52525b;--color-gray-700: #3f3f46;--color-gray-800: #27272a;--color-gray-900: #141716;--color-gray-950: #0f0f10;--color-white: #ffffff;--color-black: #000000;--color-bg: var(--color-gray-50);--color-bg-elevated: var(--color-white);--color-bg-inset: var(--color-gray-100);--color-bg-subtle: var(--color-gray-100);--color-fg: var(--color-gray-900);--color-fg-muted: var(--color-gray-500);--color-fg-subtle: var(--color-gray-400);--color-border: var(--color-gray-300);--color-border-strong: var(--color-gray-400);--color-border-subtle: var(--color-gray-200);--color-primary: var(--color-blue);--color-primary-dim: var(--color-blue-dim);--color-primary-contrast: var(--color-white);--color-primary-light: var(--color-blue);--color-primary-dark: var(--color-blue-dim);--color-accent: var(--color-mint);--color-accent-dark: var(--color-mint);--color-link: var(--color-primary);--color-link-hover: var(--color-fg);--color-success: #22c55e;--color-warning: #fbbf24;--color-danger: #f87171;--color-selection-bg: color-mix(in srgb, var(--color-primary) 20%, transparent);--color-focus-border: var(--color-primary);--color-focus-ring: color-mix(in srgb, var(--color-primary) 55%, transparent)}:root[data-theme=dark]{--color-bg: var(--color-gray-950);--color-bg-elevated: var(--color-gray-900);--color-bg-inset: var(--color-gray-800);--color-bg-subtle: var(--color-gray-900);--color-fg: var(--color-gray-100);--color-fg-muted: var(--color-gray-500);--color-fg-subtle: var(--color-gray-600);--color-border: var(--color-gray-700);--color-border-strong: var(--color-gray-500);--color-border-subtle: var(--color-gray-800);--color-primary-contrast: var(--color-black)}:root{--_font-family-mono: "Roobert Mono", "JetBrains Mono", ui-monospace, "Cascadia Mono", SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--_font-family-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--_font-weight-regular: 400;--_font-weight-bold: 700;--_font-weight-medium: 500;--_font-weight-semibold: 600;--_font-weight-black: 700;--_letter-spacing-tight: 0;--_letter-spacing-normal: 0;--_letter-spacing-wide: .04em;--_line-height-1: 1;--_line-height-2: 1.2;--_line-height-3: 1.5;--_line-height-4: 1.6;--_line-height-5: 1.7;--_font-size-1: .75rem;--_font-size-2: .875rem;--_font-size-3: 1rem;--_font-size-4: 1.125rem;--_font-size-5: 1.25rem;--_font-size-6: 1.5rem;--_font-size-7: 1.75rem;--_font-size-8: 2.25rem;--_font-size-9: 2.5rem;--_font-size-10: 3rem;--text-display-size: var(--_font-size-8);--text-display-line-height: 1.2;--text-display-letter-spacing: 0;--text-display: var(--_font-weight-bold) var(--text-display-size) / var(--text-display-line-height) var(--_font-family-mono);--text-title-size: var(--_font-size-8);--text-title-line-height: 1.4444;--text-title-letter-spacing: 0;--text-title: var(--_font-weight-bold) var(--text-title-size) / var(--text-title-line-height) var(--_font-family-mono);--text-heading-size: var(--_font-size-5);--text-heading-line-height: 1.4;--text-heading: var(--_font-weight-bold) var(--text-heading-size) / var(--text-heading-line-height) var(--_font-family-mono);--text-lg-size: var(--_font-size-4);--text-lg-line-height: 1.5556;--text-lg: var(--_font-weight-regular) var(--text-lg-size) / var(--text-lg-line-height) var(--_font-family-mono);--text-label-size: var(--_font-size-3);--text-label-line-height: 1.5;--text-label: var(--_font-weight-semibold) var(--text-label-size) / var(--text-label-line-height) var(--_font-family-mono);--text-base-size: var(--_font-size-3);--text-base-line-height: 1.5;--text-base: var(--_font-weight-regular) var(--text-base-size) / var(--text-base-line-height) var(--_font-family-mono);--text-sm-size: var(--_font-size-2);--text-sm-line-height: 1.5;--text-sm: var(--_font-weight-medium) var(--text-sm-size) / var(--text-sm-line-height) var(--_font-family-mono);--text-caption-size: var(--_font-size-2);--text-caption-line-height: 1.4286;--text-caption-letter-spacing: 0;--text-caption: var(--_font-weight-bold) var(--text-caption-size) / var(--text-caption-line-height) var(--_font-family-mono);--text-fine-size: var(--_font-size-1);--text-fine-line-height: 1.5;--text-fine: var(--_font-weight-regular) var(--text-fine-size) / var(--text-fine-line-height) var(--_font-family-mono);--font-family-mono: var(--_font-family-mono);--font-family-sans: var(--_font-family-sans);--font-weight-regular: var(--_font-weight-regular);--font-weight-bold: var(--_font-weight-bold);--line-height-tight: var(--_line-height-1);--line-height-normal: var(--_line-height-3);--ch: 1ch}@media(max-width:48rem){:root{--text-display-size: var(--_font-size-6);--text-display: var(--_font-weight-bold) var(--text-display-size) / var(--text-display-line-height) var(--_font-family-mono);--text-title-size: var(--_font-size-5);--text-title: var(--_font-weight-bold) var(--text-title-size) / var(--text-title-line-height) var(--_font-family-mono)}}:root{--duration-hover: .1s;--duration-instant: 0ms;--duration-0: 0ms;--duration-1: .1s;--duration-2: .1s;--duration-3: .1s;--duration-4: .1s;--duration-5: .1s;--ease-linear: linear;--ease-in: linear;--ease-out: linear;--ease-in-out: linear;--ease-emphasized: linear;--shadow-none: none;--shadow-xs: none;--shadow-sm: none;--shadow-md: none;--shadow-lg: none;--shadow-focus-ring: none;--transition-hover: color .1s, background .1s;--focus-outline: var(--stroke-2) solid var(--color-focus-border);--focus-outline-offset: 2px}:root[data-theme=light]{--shadow-xs: none;--shadow-sm: none;--shadow-md: none;--shadow-lg: none}*,*:before,*:after{box-sizing:border-box}html,body{height:100%;margin:0}:root{--scroll-offset: calc(88px + var(--space-16))}@media(max-width:64rem){:root{--scroll-offset: calc(72px + var(--space-16))}}html{scroll-padding-top:var(--scroll-offset)}:where([id]){scroll-margin-top:var(--scroll-offset)}body{min-height:100%;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:var(--_font-family-mono);line-height:var(--_line-height-4);background:var(--color-bg);color:var(--color-fg)}h1,h2,h3,h4,h5,h6{color:var(--color-fg)}:where(a){color:var(--color-link)}:where(a:hover){color:var(--color-link-hover)}ul,ol{list-style:none;margin:0;padding:0}::selection{background:var(--color-selection-bg)}img,picture,video,canvas,svg{display:block;max-width:100%;height:auto}input,button,textarea,select{font:inherit}.prose{--prose-text-max-width: 46rem;width:100%;color:var(--color-fg);font:var(--text-base)}.prose.prose.prose.prose h1,.prose.prose.prose.prose h2,.prose.prose.prose.prose h3,.prose.prose.prose.prose h4{max-width:var(--prose-text-max-width);color:var(--color-fg)}.prose.prose.prose.prose h1{font:var(--text-heading);font-size:var(--_font-size-8);line-height:var(--_line-height-2);margin:0 0 var(--space-16)}.prose.prose.prose.prose h2{font:var(--text-heading);margin:var(--space-48) 0 var(--space-12)}.prose.prose.prose.prose h3{font:var(--text-label);margin:var(--space-40) 0 var(--space-8)}.prose.prose.prose.prose h4{font:var(--text-base);font-weight:var(--_font-weight-bold);margin:var(--space-16) 0 var(--space-4)}.prose.prose.prose.prose h1:first-child,.prose.prose.prose.prose h2:first-child,.prose.prose.prose.prose h3:first-child,.prose.prose.prose.prose h4:first-child{margin-top:0}.prose :where(h2,h3,h4,h5,h6).hasHeadingAnchor{position:relative}.prose :where(a.headingAnchor){display:inline-flex;align-items:center;justify-content:center;position:absolute;left:0;top:0;transform:translate(-100%,.2em);flex-shrink:0;padding:var(--space-4);color:var(--color-fg-subtle);text-decoration:none;transition:color .1s,background .1s}.prose :where(h2,h3,h4,h5,h6).hasHeadingAnchor:hover>:where(a.headingAnchor),.prose :where(h2,h3,h4,h5,h6).hasHeadingAnchor:focus-within>:where(a.headingAnchor){color:var(--color-fg-muted)}.prose :where(a.headingAnchor:hover){color:var(--color-fg);background:var(--color-bg-inset)}.prose :where(a.headingAnchor:focus-visible){outline:var(--stroke-2) solid var(--color-primary);outline-offset:var(--space-2)}.prose :where(a.headingAnchor svg){display:block;width:14px;height:14px}.prose :where(p){max-width:var(--prose-text-max-width);margin:var(--space-16) 0;color:var(--color-fg)}.prose :where(p):first-child{margin-top:0}.prose :where(p):last-child{margin-bottom:0}.prose :where(strong){font-weight:var(--_font-weight-semibold)}.prose :where(em){font-style:italic}.prose :where(a){color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-border);text-underline-offset:.15em;transition:color .1s}.prose :where(a:visited){color:var(--color-fg-muted);text-decoration-color:var(--color-border-subtle)}.prose :where(a:hover){color:var(--color-link-hover);text-decoration-color:currentColor}.prose :where(a:focus-visible){outline:var(--stroke-2) solid var(--color-primary);outline-offset:var(--space-2)}.prose :where(ul,ol){max-width:var(--prose-text-max-width);margin:var(--space-16) 0;padding-left:var(--space-24);display:grid;gap:var(--space-8);list-style-position:outside}.prose :where(ul){list-style-type:disc}.prose :where(ol){list-style-type:decimal}.prose :where(li){color:var(--color-fg)}.prose :where(ul ul,ul ol,ol ul,ol ol){margin:var(--space-8) 0 0}.prose :where(code){font-family:var(--font-family-mono);font-size:var(--text-sm-size)}.prose :where(:not(pre)>code){padding:calc(var(--space-4) / 2) var(--space-4);background:var(--color-bg-inset);color:var(--color-fg)}.prose :where(pre){max-width:90ch;margin:var(--space-16) 0;padding:var(--space-12);border:var(--stroke-1) solid var(--color-border-subtle);background:var(--color-bg-inset);overflow-x:auto;font-family:var(--font-family-mono);font-size:var(--text-sm-size);line-height:var(--text-sm-line-height)}.prose :where(pre code){display:block;padding:0;border:none;background:transparent;color:var(--color-fg)}.prose :where(blockquote){max-width:var(--prose-text-max-width);margin:var(--space-24) 0;padding:var(--space-16) 0 var(--space-16) var(--space-16);border-left:var(--space-4) solid var(--color-accent);color:var(--color-fg-muted);font-size:var(--_font-size-5);font-weight:300;line-height:var(--_line-height-3);font-style:italic}.prose :where(blockquote>p){margin:0}.prose :where(blockquote em),.prose :where(blockquote strong){color:var(--color-fg)}.prose :where(blockquote a){color:var(--color-link)}.prose :where(blockquote a:hover){color:var(--color-link-hover)}.prose :where(hr){margin:var(--space-40) 0;border:0;border-top:var(--stroke-1) solid var(--color-border)}.prose :where(table){width:100%;border-collapse:separate;border-spacing:0;margin:var(--space-16) 0;font-size:var(--text-sm-size);line-height:var(--text-sm-line-height);border:var(--stroke-1) solid var(--color-border);overflow:hidden}.prose :where(th,td){border-bottom:var(--stroke-1) solid var(--color-border);border-right:var(--stroke-1) solid var(--color-border);padding:var(--space-12);text-align:left;vertical-align:top}.prose :where(th:last-child,td:last-child){border-right:none}.prose :where(tr:last-child td){border-bottom:none}.prose :where(th){background:var(--color-bg-elevated);font-weight:var(--_font-weight-semibold);color:var(--color-fg)}.prose :where(img,picture,video){margin:var(--space-24) 0;border:var(--stroke-1) solid var(--color-border-subtle);background:var(--color-bg-elevated)}
