:root{--paper: #f5f4ef;--paper-raised: #fbfaf7;--paper-sunk: #ecebe4;--ink: #1f2622;--ink-soft: #4a524c;--stone: #686e67;--rule: #dcd9cf;--rule-strong: #b9b5a7;--sage: #5b7160;--sage-wash: #dde3d9;--accent: #b26a4b;--accent-ink: #94512f;--focus: #94512f;--deep: #1d2620;--deep-raised: #253029;--deep-ink: #eeebe2;--deep-soft: #b3b8ad;--deep-rule: #36423a;--font-sans: "Instrument Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--step--1: .8125rem;--step-0: 1.0625rem;--step-1: 1.3125rem;--step-2: 1.625rem;--step-3: clamp(1.875rem, 1.4rem + 1.6vw, 2.5rem);--step-4: clamp(2.25rem, 1.4rem + 3.4vw, 4.25rem);--step-display: clamp(3rem, 1.6rem + 5vw, 6.5rem);--gutter: clamp(1.25rem, .5rem + 4vw, 5rem);--section-space: clamp(6rem, 3.5rem + 9vw, 13rem);--measure: 62ch;--text-column: 40rem;--page: 1520px;--radius-s: 6px;--radius-m: 10px;--ease-out: cubic-bezier(.22, 1, .36, 1);color-scheme:light}.dark{--paper: #111418;--paper-raised: #1b2026;--paper-sunk: #161a1f;--ink: #f0f2f4;--ink-soft: #aeb7c1;--stone: #8b95a0;--rule: #262c33;--rule-strong: #3a424c;--sage: #7c8e9e;--sage-wash: #222930;--accent: #8ca9c2;--accent-ink: #a9c2d6;--focus: #a9c2d6;--deep: #0b0d10;--deep-raised: #161a1f;--deep-ink: #f0f2f4;--deep-soft: #aeb7c1;--deep-rule: #262c33;color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-padding-top:5rem}@media (prefers-reduced-motion: no-preference){html{scroll-behavior:smooth}}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-sans);font-size:var(--step-0);line-height:1.6;font-optical-sizing:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;overflow-x:clip}h1,h2,h3,h4,p,figure,blockquote,dl,dd,ul,ol{margin:0}ul[role=list],ol[role=list]{list-style:none;padding:0}h1,h2,h3,h4{font-weight:600;line-height:1.1;letter-spacing:-.015em;text-wrap:balance}p{text-wrap:pretty}img,svg,canvas{display:block;max-width:100%}a{color:inherit;text-decoration-color:var(--rule-strong);text-decoration-thickness:1px;text-underline-offset:.22em;transition:color .16s ease,text-decoration-color .16s ease}a:hover{color:var(--accent-ink);text-decoration-color:currentColor}button,input,textarea,select{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--focus);outline-offset:3px;border-radius:2px}::selection{background:color-mix(in srgb,var(--accent) 28%,transparent)}code,kbd,pre{font-family:var(--font-mono);font-size:.9em}.visually-hidden{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:absolute;left:var(--gutter);top:.75rem;z-index:100;padding:.5rem .875rem;background:var(--ink);color:var(--paper);border-radius:var(--radius-s);transform:translateY(-200%)}.skip-link:focus{transform:none}.wrap{width:100%;max-width:calc(var(--page) + 2 * var(--gutter));margin-inline:auto;padding-inline:var(--gutter)}.section{padding-block:var(--section-space)}.section-grid{display:grid;gap:2.5rem}@media (min-width: 960px){.section-grid{grid-template-columns:minmax(0,4fr) minmax(0,8fr);gap:3rem}}.section-title{font-size:var(--step-4);font-stretch:82%;letter-spacing:-.025em;line-height:1.02;max-width:16ch}.section-lede{margin-top:1.25rem;font-size:var(--step-1);line-height:1.45;color:var(--ink-soft);max-width:36ch}@media (min-width: 960px){.section-head{position:sticky;top:6.5rem;align-self:start}}.annotation{font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:0;color:var(--stone)}.tech-list{display:flex;flex-wrap:wrap;gap:.375rem 1rem;padding:0;list-style:none;font-family:var(--font-mono);font-size:var(--step--1);color:var(--ink-soft)}.button{display:inline-flex;align-items:center;gap:.5rem;min-height:2.875rem;padding:.625rem 1.125rem;border-radius:var(--radius-s);border:1px solid var(--ink);background:var(--ink);color:var(--paper);font-weight:500;font-size:.9375rem;line-height:1.2;text-decoration:none;cursor:pointer;transition:background-color .16s ease,color .16s ease,border-color .16s ease}.button:hover{background:var(--accent-ink);border-color:var(--accent-ink);color:var(--paper)}.dark .button:hover{color:var(--paper-sunk)}.button--quiet{background:transparent;color:var(--ink);border-color:var(--rule-strong)}.button--quiet:hover{background:transparent;color:var(--accent-ink);border-color:var(--accent-ink)}.button:disabled{opacity:.6;cursor:not-allowed}.text-link{font-weight:500;text-decoration:underline}.external:after{content:"↗";display:inline-block;margin-left:.2em;font-size:.85em;text-decoration:none}.form{display:grid;gap:1.5rem}.form__honeypot{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}.form__row{display:grid;gap:1.5rem}@media (min-width: 640px){.form__row{grid-template-columns:1fr 1fr}}.form__field{display:grid;gap:.5rem;align-content:start}.form__label{font-size:.9375rem;font-weight:500;color:var(--ink-soft);transition:color var(--dur-fast) ease}.form__field:focus-within .form__label{color:var(--ink)}.form__input{width:100%;min-height:3.25rem;padding:.875rem 1rem;background:var(--paper-raised);border:1px solid var(--rule-strong);border-radius:var(--radius-m);font-size:1rem;line-height:1.5;transition:border-color var(--dur-fast) ease,background-color var(--dur-fast) ease,box-shadow var(--dur-base) var(--ease-emph)}textarea.form__input{min-height:10rem;resize:vertical}.form__input::placeholder{color:var(--stone);opacity:.85}.form__input:hover{border-color:color-mix(in srgb,var(--ink) 45%,transparent)}.form__input:focus-visible{outline:none;border-color:var(--focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--focus) 30%,transparent)}.form__input[aria-invalid=true]{border-color:var(--error, #a1251c)}.form__error{font-size:.875rem;color:var(--error, #a1251c)}.dark .form__error{color:var(--error, #f2a097)}.form__actions{display:flex;flex-wrap:wrap;align-items:center;gap:1rem 1.5rem}.form__submit{min-height:3.25rem;padding-inline:1.75rem}.form__spinner{width:1rem;height:1rem;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:form-spin .7s linear infinite}@keyframes form-spin{to{rotate:1turn}}.form__status{font-size:.9375rem}.form__status:empty{display:none}.form__status[data-type=success]{color:var(--success, #2f6b3f)}.form__status[data-type=error]{color:var(--error, #a1251c)}.form__fallback{justify-self:start;font-weight:500}@media (prefers-reduced-motion: reduce){.form__spinner{animation-duration:2s}}.page-head{padding-block:clamp(3rem,2rem + 4vw,6rem) clamp(2.5rem,2rem + 2vw,4rem)}.page-head h1{font-size:var(--step-display);font-stretch:78%;letter-spacing:-.03em;line-height:.98}.page-head p{margin-top:1.25rem;max-width:48ch;font-size:var(--step-1);line-height:1.45;color:var(--ink-soft)}.button{transition:background-color var(--dur-fast) ease,color var(--dur-fast) ease,border-color var(--dur-fast) ease,scale var(--dur-fast) ease}.button:active{scale:.97}.external:after{transition:translate var(--dur-base) var(--ease-emph)}.external:hover:after,.external:focus-visible:after{translate:.15em -.15em}.text-link{text-decoration:none;background:linear-gradient(currentColor,currentColor) no-repeat 0 100% / 100% 1px;padding-bottom:.1em;transition:background-size var(--dur-base) var(--ease-emph),color var(--dur-fast) ease}.text-link:hover{background-size:0 1px;background-position:100% 100%}@media (prefers-reduced-motion: reduce){.text-link,.external:after,.button{transition:none}}:root{--ease-emph: cubic-bezier(.16, 1, .3, 1);--ease-in-out: cubic-bezier(.65, 0, .35, 1);--dur-fast: .18s;--dur-base: .42s;--dur-slow: .9s;--dur-reveal: 1.1s}.words .w{display:inline-block;overflow:clip;overflow-clip-margin:.1em;vertical-align:top;padding-bottom:.08em;margin-bottom:-.08em}.words .w>span{display:inline-block}@media (prefers-reduced-motion: no-preference){.js [data-reveal]{transition-delay:var(--d, 0ms);transition-timing-function:var(--ease-emph)}.js [data-reveal=rise]{opacity:0;translate:0 1.75rem;transition-property:opacity,translate;transition-duration:var(--dur-slow)}.js [data-reveal=fade]{opacity:0;transition-property:opacity;transition-duration:var(--dur-slow)}.js [data-reveal=mask]{clip-path:inset(0 100% 0 0);transition-property:clip-path;transition-duration:var(--dur-reveal)}.js [data-reveal=mask][data-from=right]{clip-path:inset(0 0 0 100%)}.js [data-reveal=mask] [data-settle]{scale:1.12;transition:scale 1.6s var(--ease-emph) var(--d, 0ms)}.js [data-reveal=rule]{scale:0 1;transform-origin:left center;transition-property:scale;transition-duration:var(--dur-reveal)}.js [data-reveal=words] .w>span{translate:0 110%;transition:translate var(--dur-slow) var(--ease-emph);transition-delay:calc(var(--d, 0ms) + var(--i, 0) * 45ms)}.js [data-reveal].is-in{opacity:1;translate:none;clip-path:inset(0);scale:none}.js [data-reveal].is-in [data-settle]{scale:none}.js [data-reveal=words].is-in .w>span{translate:none}@keyframes enter-rise{0%{opacity:0;translate:0 1rem}}@keyframes enter-word{0%{translate:0 110%}}@keyframes enter-fade{0%{opacity:0}}@keyframes enter-drop{0%{opacity:0;translate:0 -.75rem}}[data-enter=rise]{animation:enter-rise .8s var(--ease-emph) var(--d, 0ms) both}[data-enter=fade]{animation:enter-fade .9s var(--ease-out) var(--d, 0ms) both}[data-enter=drop]{animation:enter-drop .7s var(--ease-emph) var(--d, 0ms) both}[data-enter=words] .w>span{animation:enter-word .9s var(--ease-emph) calc(var(--d, 0ms) + var(--i, 0) * 55ms) both}@view-transition{navigation: auto;}::view-transition-old(root),::view-transition-new(root){animation-duration:.38s;animation-timing-function:var(--ease-in-out)}.theme-transition::view-transition-old(root){animation:none}.theme-transition::view-transition-new(root){animation:theme-reveal .62s var(--ease-in-out)}@keyframes theme-reveal{0%{clip-path:circle(0 at var(--vt-x, 100%) var(--vt-y, 0))}to{clip-path:circle(var(--vt-r, 150vmax) at var(--vt-x, 100%) var(--vt-y, 0))}}}@media (prefers-reduced-motion: no-preference){.page-head>*{animation:enter-rise .8s var(--ease-emph) both}.page-head>:nth-child(2){animation-delay:.12s}.page-head>:nth-child(3){animation-delay:.24s}}.reading-progress{display:none}@supports (animation-timeline: scroll()){.reading-progress{display:block;position:fixed;inset:0 0 auto;z-index:60;height:2px;background:var(--accent);transform-origin:left center;animation:reading-progress linear both;animation-timeline:scroll(root block)}@keyframes reading-progress{0%{scale:0 1}to{scale:1 1}}}.site-footer:where(.astro-PNRJDGM4){background:var(--deep);color:var(--deep-ink);padding-block:3.5rem 2.5rem}.site-footer__inner:where(.astro-PNRJDGM4){display:grid;gap:2rem}.site-footer__name:where(.astro-PNRJDGM4){font-size:var(--step-2);font-weight:600;font-stretch:88%;letter-spacing:-.015em;line-height:1.15}.site-footer__name:where(.astro-PNRJDGM4) span:where(.astro-PNRJDGM4){display:block;font-size:var(--step-0);font-weight:400;font-stretch:100%;letter-spacing:0;color:var(--deep-soft);margin-top:.375rem}.site-footer__links:where(.astro-PNRJDGM4){display:flex;flex-wrap:wrap;gap:.5rem 1.5rem}.site-footer:where(.astro-PNRJDGM4) a:where(.astro-PNRJDGM4){color:var(--deep-ink);text-decoration-color:var(--deep-rule)}.site-footer:where(.astro-PNRJDGM4) a:where(.astro-PNRJDGM4):hover{color:var(--accent)}.site-footer__meta:where(.astro-PNRJDGM4){padding-top:1.5rem;border-top:1px solid var(--deep-rule);font-size:var(--step--1);color:var(--deep-soft)}@media (min-width: 900px){.site-footer__inner:where(.astro-PNRJDGM4){grid-template-columns:1fr auto;align-items:end}.site-footer__meta:where(.astro-PNRJDGM4){grid-column:1 / -1}}.site-header:where(.astro-R7UUXM25){position:sticky;top:0;z-index:50;background:var(--paper);border-bottom:1px solid var(--rule)}.site-header__inner:where(.astro-R7UUXM25){display:flex;align-items:center;justify-content:space-between;gap:1.5rem;min-height:4rem}.brand:where(.astro-R7UUXM25){display:inline-flex;align-items:center;gap:.625rem;font-weight:600;font-size:.9875rem;letter-spacing:-.01em;text-decoration:none}.brand__mark:where(.astro-R7UUXM25){overflow:visible}.brand__peak:where(.astro-R7UUXM25){fill:none;stroke:var(--ink);stroke-width:1.75;stroke-linejoin:miter;stroke-dasharray:86.8 100;transition:stroke-dasharray var(--dur-slow) var(--ease-emph)}.brand__node:where(.astro-R7UUXM25){fill:var(--accent)}.brand:where(.astro-R7UUXM25):hover .brand__peak:where(.astro-R7UUXM25){stroke-dasharray:100 100}.site-nav:where(.astro-R7UUXM25){display:none}.site-nav:where(.astro-R7UUXM25) ul:where(.astro-R7UUXM25){display:flex;gap:.25rem}.site-nav:where(.astro-R7UUXM25) a:where(.astro-R7UUXM25),.menu__panel:where(.astro-R7UUXM25) a:where(.astro-R7UUXM25){display:block;padding:.5rem .75rem;font-size:.9375rem;color:var(--ink-soft);text-decoration:none;border-radius:var(--radius-s)}.site-nav:where(.astro-R7UUXM25) a:where(.astro-R7UUXM25):hover,.menu__panel:where(.astro-R7UUXM25) a:where(.astro-R7UUXM25):hover{color:var(--ink)}.site-nav:where(.astro-R7UUXM25) a:where(.astro-R7UUXM25){position:relative}.site-nav:where(.astro-R7UUXM25) a:where(.astro-R7UUXM25):after{content:"";position:absolute;left:.75rem;right:.75rem;bottom:.3rem;height:1.5px;background:var(--accent);scale:0 1;transform-origin:left center;transition:scale var(--dur-base) var(--ease-emph)}.site-nav:where(.astro-R7UUXM25) a:where(.astro-R7UUXM25):hover:after,.site-nav:where(.astro-R7UUXM25) a:where(.astro-R7UUXM25)[aria-current=page]:after{scale:1 1}.menu__bar:where(.astro-R7UUXM25){transform-box:fill-box;transform-origin:center;transition:rotate var(--dur-base) var(--ease-emph),translate var(--dur-base) var(--ease-emph)}.menu:where(.astro-R7UUXM25)[open] .menu__bar--top:where(.astro-R7UUXM25){translate:0 4px;rotate:45deg}.menu:where(.astro-R7UUXM25)[open] .menu__bar--bottom:where(.astro-R7UUXM25){translate:0 -4px;rotate:-45deg}.theme-icon:where(.astro-R7UUXM25){transition:rotate .6s var(--ease-emph)}.dark .theme-icon:where(.astro-R7UUXM25){rotate:180deg}@media (prefers-reduced-motion: no-preference){@keyframes menu-open{0%{opacity:0;scale:.96;translate:0 -.5rem}}.menu:where(.astro-R7UUXM25)[open] .menu__panel:where(.astro-R7UUXM25){transform-origin:top right;animation:menu-open var(--dur-base) var(--ease-emph)}.menu:where(.astro-R7UUXM25)[open] .menu__panel:where(.astro-R7UUXM25) li:where(.astro-R7UUXM25){animation:enter-rise .5s var(--ease-emph) both}.menu:where(.astro-R7UUXM25)[open] .menu__panel:where(.astro-R7UUXM25) li:where(.astro-R7UUXM25):nth-child(2){animation-delay:40ms}.menu:where(.astro-R7UUXM25)[open] .menu__panel:where(.astro-R7UUXM25) li:where(.astro-R7UUXM25):nth-child(3){animation-delay:80ms}.menu:where(.astro-R7UUXM25)[open] .menu__panel:where(.astro-R7UUXM25) li:where(.astro-R7UUXM25):nth-child(4){animation-delay:.12s}.menu:where(.astro-R7UUXM25)[open] .menu__panel:where(.astro-R7UUXM25) li:where(.astro-R7UUXM25):nth-child(5){animation-delay:.16s}}@media (prefers-reduced-motion: reduce){.menu__bar:where(.astro-R7UUXM25),.theme-icon:where(.astro-R7UUXM25),.site-nav:where(.astro-R7UUXM25) a:where(.astro-R7UUXM25):after{transition:none}}.site-nav:where(.astro-R7UUXM25) a:where(.astro-R7UUXM25)[aria-current=page]{color:var(--ink)}.menu__panel:where(.astro-R7UUXM25) a:where(.astro-R7UUXM25)[aria-current=page]{color:var(--ink);text-decoration:underline;text-decoration-color:var(--accent);text-decoration-thickness:2px;text-underline-offset:.45em}.site-header__tools:where(.astro-R7UUXM25){display:flex;align-items:center;gap:.25rem}.icon-button:where(.astro-R7UUXM25){display:inline-grid;place-items:center;width:2.75rem;height:2.75rem;border:0;border-radius:var(--radius-s);background:transparent;color:var(--ink);cursor:pointer;list-style:none}.icon-button:where(.astro-R7UUXM25):hover{background:var(--paper-sunk)}.icon-button:where(.astro-R7UUXM25)::-webkit-details-marker{display:none}.menu:where(.astro-R7UUXM25){position:relative}.menu__panel:where(.astro-R7UUXM25){position:absolute;right:0;top:calc(100% + .75rem);width:min(18rem,calc(100vw - 2 * var(--gutter)));padding:.5rem;background:var(--paper-raised);border:1px solid var(--rule);border-radius:var(--radius-m);box-shadow:0 18px 40px -24px #141c1659}.menu__panel:where(.astro-R7UUXM25) a:where(.astro-R7UUXM25){padding:.75rem .875rem;font-size:1.0625rem}@media (min-width: 900px){.site-nav:where(.astro-R7UUXM25){display:block}.menu:where(.astro-R7UUXM25){display:none}}
