:root{--ink:#0a0e0c;--white:#fff;--grey-1:#eff3f0;--grey-2:#e1e8e3;--grey-3:#c5d1ca;--grey-4:#9aa89f;--text-dim:#5f6c64;--grey-5:#4f5b54;--grey-6:#2b332e;--dot:#a9b8ae;--mark:var(--ink);--signal-white:#f7fce4;--signal-light:#e6f8a0;--signal:#c6f135;--signal-dark:#5e7a00;--signal-black:#222b05;--cobalt-white:#eef4ff;--cobalt-light:#cfe0ff;--cobalt:#2f6fff;--cobalt-dark:#1546c2;--cobalt-black:#0c1b3f;--violet-white:#f8f1ff;--violet-light:#ead6ff;--violet:#a45bff;--violet-dark:#6a22c9;--violet-black:#230f40;--mint-white:#e9fbf5;--mint-light:#bdf4e2;--mint:#17d69e;--mint-dark:#0a7c5c;--mint-black:#06291f;--amber-white:#fff9e5;--amber-light:#ffeaa6;--amber:#ffc81f;--amber-dark:#8f6200;--amber-black:#2b2106;--font-sans:var(--font-geist-sans), ui-sans-serif, system-ui, sans-serif;--font-mono:var(--font-geist-mono), ui-monospace, "SFMono-Regular", Menlo, monospace;--columns:6;--gutter:10px;--gap:10px;--max-surface:1680px;--nav-height:64px;--space-xs:20px;--space-s:48px;--space-m:96px;--space-l:144px;--ease-snap:cubic-bezier(.75, 0, .1, .99);--ease-out:cubic-bezier(.22, 1, .36, 1);--dur-1:.2s;--dur-2:.3s;--dur-3:.4s;--dur-4:.5s;--paper:radial-gradient(circle at 1px 1px, var(--dot) .5px, transparent .85px) 0 0 / 10px 10px, radial-gradient(circle at 1px 1px, var(--dot) .5px, transparent .85px) 5px 5px / 10px 10px, var(--white);--code-fg:var(--grey-1);--code-rule:color-mix(in srgb, var(--white) 14%, var(--ink));--code-highlight:color-mix(in srgb, var(--white) 9%, var(--ink))}@media (min-width:801px){:root{--columns:12;--gutter:24px;--gap:12px;--nav-height:72px}}*,:before,:after{box-sizing:border-box}html{-moz-text-size-adjust:100%;text-size-adjust:100%;-webkit-tap-highlight-color:transparent;scroll-padding-top:calc(var(--nav-height) + 24px)}@media (max-width:1024.98px){html:has(#toc-jump){scroll-padding-top:0}#article-body [id]{scroll-margin-top:calc(var(--nav-height) + 80px)}}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}body{background:var(--white);min-height:100svh;color:var(--ink);font-family:var(--font-sans);letter-spacing:.01em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-synthesis:none;flex-direction:column;margin:0;font-size:16px;font-weight:350;line-height:1.4;display:flex}main{flex:1}h1,h2,h3,h4,h5,h6,p,figure,blockquote,dl,dd{margin:0}h1,h2,h3,h4,h5,h6{text-wrap:balance;font-weight:400}p{text-wrap:pretty}a{color:inherit;text-decoration:none}img,svg,video,canvas{max-width:100%;display:block}button{font:inherit;color:inherit;letter-spacing:inherit;cursor:pointer;background:0 0;border:0;padding:0}ul,ol{margin:0;padding:0;list-style:none}strong,b{font-weight:500}::selection{background:var(--signal);color:var(--ink)}:focus-visible{outline:2px solid var(--ink);outline-offset:3px}.t-display{letter-spacing:-.03em;font-size:56px;font-weight:400;line-height:1}.t-h1{letter-spacing:-.03em;font-size:40px;font-weight:400;line-height:1.05}.t-h2{letter-spacing:-.02em;font-size:32px;font-weight:400;line-height:1.1}.t-h3{letter-spacing:-.01em;font-size:32px;font-weight:400;line-height:1.15}.t-h4{letter-spacing:-.01em;font-size:24px;font-weight:400;line-height:1.2}.t-h5{letter-spacing:-.01em;font-size:20px;font-weight:400;line-height:1.25}.t-h6{letter-spacing:-.01em;font-size:18px;font-weight:400;line-height:1.3}.t-body{letter-spacing:.01em;font-size:16px;font-weight:350;line-height:1.4}.t-small{letter-spacing:.01em;font-size:14px;font-weight:350;line-height:1.4}.t-xs{font-size:12px;font-weight:400;line-height:1.4}.t-mono,.t-mono-s,.t-mono-xs{font-family:var(--font-mono);text-transform:uppercase;font-variant-numeric:tabular-nums;font-weight:400}.t-mono{letter-spacing:.02em;font-size:14px;line-height:1.2}.t-mono-s{letter-spacing:.02em;font-size:12px;line-height:1.2}.t-mono-xs{letter-spacing:.08em;font-size:10px;line-height:1}@media (min-width:801px){.t-display{font-size:clamp(64px,7.2vw,104px)}.t-h1{font-size:clamp(48px,5.6vw,80px)}.t-h2{font-size:clamp(40px,4.7vw,56px)}.t-h3{font-size:40px}.t-h4{font-size:32px}.t-h5{font-size:24px}.t-h6{font-size:20px}}.muted{color:var(--grey-5)}.dim{color:var(--text-dim)}.two-tone{color:color-mix(in srgb, var(--ink) 52%, transparent)}.two-tone>span:first-child{color:var(--ink)}.section{width:100%}.surface{max-width:var(--max-surface);margin-inline:auto;padding-block:24px}.grid{grid-template-columns:repeat(var(--columns), minmax(0, 1fr));column-gap:var(--gap);padding-inline:var(--gutter);display:grid}.span-all{grid-column:1/-1}.spacer-xs{background:var(--grey-2);height:1px}.spacer-s{height:var(--space-s);background:var(--paper)}.spacer-m{height:var(--space-m);background:var(--paper)}.spacer-white{background:var(--white)}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:100;background:var(--ink);color:var(--white);padding:8px 12px;position:absolute;top:-100px;left:12px}.skip-link:focus{top:12px}.link{transition:background-size var(--dur-3) var(--ease-out), color var(--dur-1) ease-out;background-image:linear-gradient(currentColor,currentColor);background-position:0 100%;background-repeat:no-repeat;background-size:0% 1px}@media (hover:hover){.link:hover{background-size:100% 1px}}.link:focus-visible{background-size:100% 1px}.ruled{background-image:linear-gradient(to top, var(--grey-3) 1px, transparent 1px);background-size:100% 1lh;line-height:round(up,1.1em,1px)}::view-transition-old(.page-out){animation:.11s ease-in both page-out}::view-transition-new(.page-in){animation:page-in var(--dur-2) var(--ease-out) 80ms both}@keyframes page-out{to{opacity:0}}@keyframes page-in{0%{opacity:0;transform:translateY(8px)}}::view-transition-group(site-header){z-index:100;animation:none}::view-transition-old(site-header){display:none}::view-transition-new(site-header){animation:none}::view-transition{pointer-events:none}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}::view-transition-group(*){animation-duration:.01ms!important;animation-delay:0s!important}::view-transition-old(*){animation-duration:.01ms!important;animation-delay:0s!important}::view-transition-new(*){animation-duration:.01ms!important;animation-delay:0s!important}}
