.bg{color:#cdd6f4;background-color:#1e1e2e}.chroma{color:#cdd6f4;background-color:#1e1e2e;-webkit-text-size-adjust:none}.chroma .x{color:#cdd6f4}.chroma .err{color:#f38ba8}.chroma .cl{color:#cdd6f4}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#45475a}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f849c}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f849c}.chroma .line{display:flex}.chroma .k{color:#cba6f7}.chroma .kc{color:#fab387}.chroma .kd{color:#f38ba8}.chroma .kn{color:#94e2d5}.chroma .kp{color:#cba6f7}.chroma .kr{color:#cba6f7}.chroma .kt{color:#f38ba8}.chroma .na{color:#89b4fa}.chroma .nc{color:#f9e2af}.chroma .no{color:#f9e2af}.chroma .nd{color:#89b4fa;font-weight:700}.chroma .ni{color:#94e2d5}.chroma .ne{color:#fab387}.chroma .nl{color:#89dceb}.chroma .nn{color:#fab387}.chroma .nx{color:#cdd6f4}.chroma .py{color:#fab387}.chroma .nt{color:#cba6f7}.chroma .nb{color:#89dceb}.chroma .bp{color:#89dceb}.chroma .nv{color:#f5e0dc}.chroma .vc{color:#f5e0dc}.chroma .vg{color:#f5e0dc}.chroma .vi{color:#f5e0dc}.chroma .vm{color:#f5e0dc}.chroma .nf{color:#89b4fa}.chroma .fm{color:#89b4fa}.chroma .ld{color:#cdd6f4}.chroma .s{color:#a6e3a1}.chroma .sa{color:#f38ba8}.chroma .sb{color:#a6e3a1}.chroma .sc{color:#a6e3a1}.chroma .dl{color:#89b4fa}.chroma .sd{color:#6c7086}.chroma .s2{color:#a6e3a1}.chroma .se{color:#89b4fa}.chroma .sh{color:#6c7086}.chroma .si{color:#a6e3a1}.chroma .sx{color:#a6e3a1}.chroma .sr{color:#94e2d5}.chroma .s1{color:#a6e3a1}.chroma .ss{color:#a6e3a1}.chroma .m{color:#fab387}.chroma .mb{color:#fab387}.chroma .mf{color:#fab387}.chroma .mh{color:#fab387}.chroma .mi{color:#fab387}.chroma .il{color:#fab387}.chroma .mo{color:#fab387}.chroma .o{color:#89dceb;font-weight:700}.chroma .ow{color:#89dceb;font-weight:700}.chroma .or{color:#89dceb;font-weight:700}.chroma .c{color:#6c7086;font-style:italic}.chroma .ch{color:#585b70;font-style:italic}.chroma .cm{color:#6c7086;font-style:italic}.chroma .c1{color:#6c7086;font-style:italic}.chroma .cs{color:#6c7086;font-style:italic}.chroma .cp{color:#6c7086;font-style:italic}.chroma .cpf{color:#6c7086;font-weight:700;font-style:italic}.chroma .gd{color:#f38ba8;background-color:#313244}.chroma .ge{font-style:italic}.chroma .gr{color:#f38ba8}.chroma .gh{color:#fab387;font-weight:700}.chroma .gi{color:#a6e3a1;background-color:#313244}.chroma .go{color:#cdd6f4}.chroma .gp{color:#cdd6f4}.chroma .gs{font-weight:700}.chroma .gu{color:#fab387;font-weight:700}.chroma .gt{color:#f38ba8}.chroma .gl{text-decoration:underline}:root{--bg:#0a0a0b;--surface:#131316;--surface-2:#1b1b20;--border:#24242b;--text:#e4e4e9;--text-strong:#fafafa;--muted:#9a9aa6;--accent:#a594f9;--accent-soft:rgba(165, 148, 249, 0.12);--c-info:#a594f9;--c-tip:#6ee7b7;--c-warn:#fcd34d;--c-danger:#fca5a5;--c-quote:#9a9aa6;--sans:"Geist", system-ui, -apple-system, "Segoe UI", sans-serif;--mono:"Geist Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;--content:53.75rem;--gutter:1.25rem;color-scheme:dark}*,*::before,*::after{box-sizing:border-box}html{font-size:140%;-webkit-text-size-adjust:100%}@media(max-width:1024px){html{font-size:120%}}@media(max-width:640px){html{font-size:100%}}body{margin:0;min-height:100svh;display:flex;flex-direction:column;background:radial-gradient(68.75rem 30rem at 50% -13.75rem,rgba(165,148,249,.16),transparent 70%)no-repeat,var(--bg);color:var(--text);font-family:var(--sans);font-size:1.25rem;line-height:1.7;-webkit-font-smoothing:antialiased}main{flex:1}img,svg,video{max-width:100%;height:auto}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:3px}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}::selection{background:var(--accent);color:var(--bg)}h1,h2,h3{text-wrap:balance}.skip{position:absolute;left:-9999px}.skip:focus{left:var(--gutter);top:.5rem;z-index:10;background:var(--text);color:var(--bg);padding:.375rem .625rem}.wrap{max-width:calc(var(--content) + 2 * var(--gutter));margin:0 auto;padding:0 var(--gutter)}.muted{color:var(--muted)}.nav{position:sticky;top:0;z-index:10;border-bottom:1px solid var(--border);background:rgba(10,10,11,.82);-webkit-backdrop-filter:blur(.75rem);backdrop-filter:blur(.75rem)}.nav__inner{max-width:calc(var(--content) + 2 * var(--gutter));margin:0 auto;padding:1.375rem var(--gutter);display:flex;justify-content:space-between;align-items:center;gap:1rem}.nav__mark{font-family:var(--mono);font-size:1.25rem;font-weight:500;color:var(--text-strong)}.nav__mark:hover{text-decoration:none}.nav__prompt{color:var(--accent)}.nav__links{display:flex;align-items:center;gap:1.75rem;font-size:1.0625rem}.nav__links a{position:relative;color:var(--muted);transition:color 150ms}.nav__links a:hover,.nav__links a[aria-current]{color:var(--text-strong);text-decoration:none}.nav__links a[aria-current]::after{content:"";position:absolute;left:0;right:0;bottom:-.375rem;height:2px;border-radius:2px;background:var(--accent)}.intro{display:flex;align-items:center;gap:1.75rem;padding:5.5rem 0 0}.intro__avatar{flex:none;width:7.5rem;height:7.5rem;border-radius:50%;box-shadow:0 0 0 3px var(--bg),0 0 0 .25rem rgba(165,148,249,.6)}.intro__name{margin:0;font-size:2.75rem;font-weight:600;line-height:1.1;letter-spacing:-.03em;color:var(--text-strong)}.intro__topics{list-style:none;margin:.875rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.5rem}.intro__topics li{padding:3px .75rem;font-family:var(--mono);font-size:.9375rem;color:var(--accent);background:var(--accent-soft);border-radius:999px}.intro__text{margin:2rem 0 1.5rem;font-size:1.375rem;color:var(--muted)}.block{padding:2.5rem 0 1rem}.block__title{margin:0 0 .75rem;font-family:var(--mono);font-size:1rem;font-weight:500;text-transform:lowercase}.block__title a{color:var(--muted)}.block__title a::before{content:"## ";color:var(--accent)}.block__more{display:inline-block;margin-top:.75rem;font-size:1.0625rem}.entries{list-style:none;margin:0;padding:0}.entry{position:relative;margin:0 -1.5rem;padding:1.375rem 1.5rem;border-radius:.75rem;border:1px solid transparent;transition:background-color 180ms,border-color 180ms,transform 180ms}.entry:hover{background:var(--surface);border-color:var(--border);transform:translateY(-2px)}.entry::before{content:"";position:absolute;left:0;top:1.5rem;bottom:1.5rem;width:3px;border-radius:3px;background:var(--accent);opacity:0;transition:opacity 180ms}.entry:hover::before{opacity:1}.entry__title{margin:0;font-size:1.5625rem;font-weight:600;line-height:1.3;letter-spacing:-.015em}.entry__title a{color:var(--text-strong)}.entry__title a::after{content:"";position:absolute;inset:0;border-radius:.75rem}.entry:hover .entry__title a{color:var(--accent);text-decoration:none}.entry__summary{margin:.625rem 0 0;color:var(--muted);font-size:1.125rem;line-height:1.6}.entry .meta{position:relative;z-index:1}.meta{margin:.625rem 0 0;display:flex;flex-wrap:wrap;align-items:center;gap:.5rem 1.25rem;font-family:var(--mono);font-size:.9375rem;color:var(--muted)}.meta__item{display:inline-flex;align-items:center;gap:.4375rem}.meta svg{width:1rem;height:1rem;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;opacity:.8}.meta__tags{display:inline-flex;flex-wrap:wrap;gap:.375rem}.tag{padding:1px .5625rem;font-size:.875rem;color:var(--accent);background:var(--accent-soft);border-radius:999px;transition:background-color 150ms}.tag:hover{background:rgba(165,148,249,.24);text-decoration:none}.page-head{padding:4.5rem 0 1.5rem}.page-head__title{margin:0;font-size:2.75rem;font-weight:600;letter-spacing:-.02em;color:var(--text-strong)}.page-head .prose{margin-top:.75rem;color:var(--muted)}.tag-cloud{list-style:none;margin:1rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.625rem;font-family:var(--mono);font-size:1.0625rem}.tag-cloud li{padding:.25rem .625rem;background:var(--surface);border-radius:.375rem}.tag-cloud span{color:var(--muted)}.post{display:grid;grid-template-columns:1fr min(var(--content),100% - 2 * var(--gutter))1fr;column-gap:var(--gutter);padding:4.5rem 0 6rem}.post>*{grid-column:2}.post__head{margin-bottom:3rem;padding-bottom:1.75rem;border-bottom:1px solid var(--border)}.post__title{margin:0;font-size:clamp(2.25rem,4.4vw,3.25rem);font-weight:600;line-height:1.15;letter-spacing:-.03em;color:var(--text-strong)}.post__head .meta{margin-top:1.125rem}@media(min-width:1980px){.post.has-toc .toc{grid-column:3;grid-row:1/span 2;justify-self:start;width:min(15.625rem,100% - 1.5rem);margin-left:.25rem;position:sticky;top:7rem;align-self:start;max-height:calc(100svh - 9rem);overflow-y:auto;scrollbar-width:thin}}@media(max-width:1979px){.toc{margin-bottom:3rem;padding:1.25rem 1.5rem;background:var(--surface);border:1px solid var(--border);border-radius:.75rem}.toc ul ul{display:none}}.toc{font-size:1rem}.toc__title{margin:0 0 .625rem;font-family:var(--mono);font-size:.875rem;color:var(--muted);text-transform:lowercase}.toc ul{list-style:none;margin:0;padding:0}.toc ul ul{padding-left:.75rem}.toc li{margin:.3125rem 0;line-height:1.4}.toc a{display:block;padding-left:.625rem;margin-left:-.75rem;border-left:2px solid transparent;color:var(--muted);transition:color 150ms,border-color 150ms}.toc a:hover{color:var(--text-strong);text-decoration:none}.toc a.is-active{color:var(--accent);border-left-color:var(--accent)}.prose>*+*{margin-top:1.1em}.prose>:first-child{margin-top:0}.prose p,.prose ul,.prose ol{margin-bottom:0}.prose a{text-decoration:underline;text-decoration-color:rgba(165,148,249,.4);text-underline-offset:3px}.prose a:hover{text-decoration-color:var(--accent)}.prose h2,.prose h3,.prose h4{position:relative;color:var(--text-strong);line-height:1.3;letter-spacing:-.015em;scroll-margin-top:6.5rem}.prose h2{margin:2.4em 0 0;font-size:2rem;font-weight:600}.prose h2::before{content:"";display:block;width:2.25rem;height:3px;margin-bottom:1.125rem;border-radius:3px;background:var(--accent)}.prose h3{margin:1.8em 0 0;font-size:1.5rem;font-weight:600}.prose h4{margin:1.5em 0 0;font-size:1.25rem;font-weight:600}.prose h2+*,.prose h3+*,.prose h4+*{margin-top:.6em}.anchor{margin-left:.375rem;font-family:var(--mono);font-weight:400;color:var(--muted);text-decoration:none!important;opacity:0;transition:opacity 120ms}.prose :is(h2,h3,h4):hover .anchor,.anchor:focus-visible{opacity:1}.prose strong{font-weight:600;color:var(--text-strong)}.prose ul,.prose ol{padding-left:1.4em}.prose li+li{margin-top:.3em}.prose li>ul,.prose li>ol{margin-top:.3em}.prose li::marker{color:var(--muted)}.prose hr{border:0;border-top:1px solid var(--border);margin:2.5em 0}.prose img{display:block;margin-inline:auto;border-radius:.375rem}.prose blockquote{margin-left:0;margin-right:0;padding-left:1.125rem;border-left:2px solid var(--border);color:var(--muted)}.prose math[display=block]{margin:1.4em 0;font-size:1.15em;overflow-x:auto}.chroma :is(.c,.ch,.cm,.c1,.cs,.cp,.cpf){color:#8b90a8}.prose code{font-family:var(--mono);font-size:.85em;background:var(--surface-2);padding:.15em .4em;border-radius:.25rem}.prose pre{margin-left:0;margin-right:0;padding:1rem 1.125rem;overflow-x:auto;background:var(--surface)!important;border:1px solid var(--border);border-radius:.5rem;font-size:1rem;line-height:1.6;tab-size:2}.prose pre code{background:0 0;padding:0;font-size:inherit}.highlight{position:relative}.copy{position:absolute;top:.5rem;right:.5rem;padding:3px .5rem;border:1px solid var(--border);border-radius:.3125rem;background:var(--surface-2);color:var(--muted);font:.8125rem var(--mono);cursor:pointer;opacity:0;transition:opacity 120ms,color 120ms}.highlight:hover .copy,.copy:focus-visible{opacity:1}.copy:hover{color:var(--text-strong)}@media(hover:none){.copy{opacity:1}}.prose table{display:block;width:max-content;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:1.0625rem;line-height:1.5}.prose th,.prose td{padding:.625rem .875rem;text-align:left;vertical-align:top;border-bottom:1px solid var(--border)}.prose th{font-weight:500;color:var(--muted);font-size:.9375rem;font-family:var(--mono)}.callout{--c:var(--c-info);margin:1.5em 0;padding:1.125rem 1.375rem;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--c);border-radius:.375rem}.callout--tip{--c:var(--c-tip)}.callout--warn{--c:var(--c-warn)}.callout--danger{--c:var(--c-danger)}.callout--quote{--c:var(--c-quote)}.callout__title{margin:0;color:var(--c);font-weight:600;font-size:1.125rem}.callout__body{margin-top:.4em}.callout__body>:first-child{margin-top:0}.callout__body>*+*{margin-top:.8em}.callout__body>:last-child{margin-bottom:0}details.callout>summary{cursor:pointer;list-style:none}details.callout>summary::-webkit-details-marker{display:none}details.callout>summary::before{content:"▸";display:inline-block;width:1.1em;transition:transform 120ms}details.callout[open]>summary::before{transform:rotate(90deg)}details.callout:not([open]) .callout__body{display:none}.tabs{display:flex;flex-wrap:wrap;margin:1.5em 0;border:1px solid var(--border);border-radius:.5rem;overflow:hidden}.tabs__input{position:absolute;opacity:0;pointer-events:none}.tabs__label{order:0;padding:.6875rem 1.125rem;font-size:1.0625rem;font-weight:500;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent}.tabs__label:hover{color:var(--text-strong)}.tabs__input:checked+.tabs__label{color:var(--text-strong);border-bottom-color:var(--accent)}.tabs__input:focus-visible+.tabs__label{outline:2px solid var(--accent);outline-offset:-2px}.tabs__panel{order:1;display:none;width:100%;padding:1.25rem 1.375rem;border-top:1px solid var(--border)}.tabs__input:checked+.tabs__label+.tabs__panel{display:block}.tabs__panel>:first-child{margin-top:0}.tabs__panel>*+*{margin-top:1em}.tabs__panel>:last-child{margin-bottom:0}.foot{border-top:1px solid var(--border)}.foot__inner{max-width:calc(var(--content) + 2 * var(--gutter));margin:0 auto;padding:2rem var(--gutter)2.5rem;display:flex;justify-content:space-between;align-items:center;gap:1rem;font-family:var(--mono);font-size:.9375rem;color:var(--muted)}.foot__links{display:flex;gap:1.375rem}.foot__links a{color:var(--muted)}.foot__links a:hover{color:var(--accent);text-decoration:none}.foot__copy{margin:0}.progress{position:fixed;inset:0 0 auto 0;z-index:20;height:3px;background:var(--accent);transform-origin:0 50%;transform:scaleX(0)}@keyframes rise-in{from{opacity:0;transform:translateY(.625rem)}to{opacity:1;transform:none}}.intro,.intro__text,.block,.post__head{animation:rise-in 500ms cubic-bezier(.16,1,.3,1)both}.intro__text{animation-delay:60ms}.block{animation-delay:120ms}.block+.block{animation-delay:180ms}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}@media(max-width:640px){body{font-size:1.125rem}.nav__mark{font-size:1.125rem}.nav__links{gap:1rem;font-size:1rem}.intro{gap:1.125rem;padding-top:3.5rem}.intro__avatar{width:5.25rem;height:5.25rem}.intro__name{font-size:2rem}.intro__text{font-size:1.1875rem}.entry{margin:0 -1rem;padding:1.125rem 1rem}.entry__title{font-size:1.3125rem}.entry__summary{font-size:1.0625rem}.page-head__title{font-size:2.125rem}.prose h2{font-size:1.625rem}.prose h3{font-size:1.3125rem}.prose pre{font-size:.875rem}.foot__inner{flex-direction:column;align-items:flex-start}}