@font-face{font-family:Absans;src:url(/fonts/Absans-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:block}:root{--paper: oklch(96% .006 250);--paper-2: oklch(93% .008 250);--ink: oklch(15% .01 260);--ink-soft: oklch(50% .012 260);--rule: oklch(87% .008 250);--accent: oklch(60% .19 265);--accent-ink: oklch(99% .004 250);--cat-line: oklch(16% .01 260);--cat-fill: oklch(27% .012 260);--cat-shade: oklch(21% .01 260);--cat-paw: oklch(36% .012 260);--cat-eye: oklch(76% .16 80);--cat-pink: oklch(72% .1 10);--cat-feature: oklch(66% .01 260);--cat-fx: var(--accent);--font-display: "Absans", "Helvetica Neue", Arial, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--gutter: max(clamp(1rem, 4vw, 3rem), env(safe-area-inset-left), env(safe-area-inset-right));--nav-h: 3.25rem;--measure: 68ch;--ease-out: cubic-bezier(.23, 1, .32, 1);--cursor: url(/cursors/arrow-light.svg) 4 3, auto;--cursor-pointer: url(/cursors/pointer-light.svg) 4 3, pointer;--astro-code-foreground: var(--ink);--astro-code-background: var(--paper-2);--astro-code-token-keyword: var(--accent);--astro-code-token-string: oklch(45% .08 150);--astro-code-token-string-expression: oklch(45% .08 150);--astro-code-token-comment: var(--ink-soft);--astro-code-token-function: var(--ink);--astro-code-token-constant: oklch(45% .1 250);--astro-code-token-parameter: var(--ink);--astro-code-token-punctuation: var(--ink-soft);--astro-code-token-link: var(--accent);color-scheme:light}:root[data-theme=dark]{--paper: oklch(15% .01 260);--paper-2: oklch(19% .012 260);--ink: oklch(94% .006 250);--ink-soft: oklch(66% .01 260);--rule: oklch(28% .01 260);--accent-ink: oklch(15% .01 260);--cat-line: oklch(62% .01 260);--cat-fill: oklch(97% .004 250);--cat-shade: oklch(86% .006 250);--cat-paw: oklch(99% .003 250);--cat-eye: oklch(65% .16 240);--cat-pink: oklch(78% .09 10);--cat-feature: oklch(42% .01 260);--cursor: url(/cursors/arrow-dark.svg) 4 3, auto;--cursor-pointer: url(/cursors/pointer-dark.svg) 4 3, pointer;--astro-code-token-string: oklch(78% .09 150);--astro-code-token-string-expression: oklch(78% .09 150);--astro-code-token-constant: oklch(78% .08 250);color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}html:has(dialog[open]),html.menu-open{overflow:hidden}html{-webkit-tap-highlight-color:color-mix(in oklch,var(--accent) 18%,transparent)}html{cursor:var(--cursor)}a[href],button,summary,label[for],select,[role=button]{cursor:var(--cursor-pointer)}input,textarea,[contenteditable=true],.note__layout :is(p,li,blockquote,pre,td){cursor:text}html.has-cursor:not(:has(dialog[open])),html.has-cursor:not(:has(dialog[open])) :is(a[href],button,summary,label[for],select,[role=button]){cursor:none}.cursor{position:fixed;inset:0;z-index:200;pointer-events:none;transition:opacity .15s var(--ease-out)}.cursor.is-away,html:has(dialog[open]) .cursor{opacity:0}.cursor__arrow{position:absolute;left:0;top:0;overflow:visible;will-change:transform;transition:opacity .15s var(--ease-out)}.cursor__arrow path{fill:var(--ink);stroke:var(--paper);stroke-width:1.5;transform-origin:4px 3px;transition:fill .15s var(--ease-out),transform .15s var(--ease-out)}.cursor.is-hover .cursor__arrow path{fill:var(--accent)}.cursor.is-down .cursor__arrow path{transform:scale(.8)}.cursor.is-text .cursor__arrow{opacity:0}.cursor__tag{position:absolute;left:0;top:0;will-change:transform}.cursor__label{display:block;padding:.2rem .45rem;background:var(--ink);color:var(--paper);font-family:var(--font-mono);font-size:.68rem;line-height:1.3;letter-spacing:.04em;text-transform:uppercase;white-space:pre;opacity:0;transform-origin:0 0}.cursor__pulse{position:absolute;left:-9px;top:-9px;width:18px;height:18px;border:1px solid var(--accent)}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-mono);font-size:.9375rem;line-height:1.65;font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;transition:background-color .2s var(--ease-out),color .2s var(--ease-out)}body:before{content:"";position:fixed;inset:0;z-index:100;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}img,svg{display:block;max-width:100%}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:.2em;transition:color .15s var(--ease-out)}@media(hover:hover){a:hover{color:var(--accent)}}::selection{background:var(--accent);color:var(--accent-ink)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:var(--cursor-pointer)}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.skip{position:absolute;left:var(--gutter);top:-3rem;z-index:60;background:var(--ink);color:var(--paper);padding:.5rem .75rem}.skip:focus{top:.5rem}.display{font-family:var(--font-display);font-weight:400;letter-spacing:-.03em;line-height:.95;margin:0}.mono-label{font-family:var(--font-display);font-size:.8rem;letter-spacing:.03em;text-transform:uppercase;color:var(--ink-soft)}.section{padding:clamp(5rem,12vw,10rem) var(--gutter);border-top:1px solid var(--rule)}.section__label{display:flex;gap:.75rem;margin:0 0 2.5rem;font-size:1.1rem;letter-spacing:-.01em;text-transform:none;color:var(--ink)}.section__label span+span{color:var(--ink-soft)}@media(prefers-reduced-motion:no-preference){html.js [data-reveal]{visibility:hidden}}html.reveal-all [data-reveal]{visibility:visible!important}.nav{position:fixed;inset:0 0 auto;z-index:50;height:var(--nav-h);display:flex;align-items:center;gap:1.25rem;padding:0 var(--gutter);font-family:var(--font-display);font-size:.85rem;background:transparent;border-bottom:1px solid transparent;transition:background-color .2s var(--ease-out),border-color .2s var(--ease-out)}.nav.is-scrolled{background:var(--paper);border-bottom-color:var(--rule)}.nav__home{margin-right:auto;font-family:var(--font-display);font-size:1.1rem;letter-spacing:-.01em;text-decoration:none;white-space:nowrap}.nav__home span{color:var(--ink-soft);margin:0 .03em}.nav__strip{position:relative;min-width:0}.nav__tokens{display:flex;list-style:none;margin:0;padding:0;border:1px solid var(--rule)}.nav__tok{position:relative;min-width:0;border-left:1px solid var(--rule);transition:box-shadow .15s var(--ease-out)}.nav__tok:first-child{border-left:0}.nav__tok:hover{box-shadow:0 0 0 1px var(--ink-soft);z-index:1}.nav__tok a{display:flex;align-items:baseline;gap:.4em;min-width:0;overflow:hidden;text-overflow:ellipsis;padding:.35rem .7rem;color:var(--ink-soft);text-decoration:none;transition:color .15s var(--ease-out)}.nav__tok.is-active a{color:var(--accent)}.nav__readout{display:inline-block;min-width:2.4em;text-align:right;font-size:.7rem;color:var(--accent);opacity:0;transition:opacity .15s var(--ease-out)}.nav__tok.is-active .nav__readout{opacity:.75}.nav__underline{position:absolute;left:0;bottom:0;height:1px;width:0;background:var(--accent);opacity:0;pointer-events:none}.nav__btn{color:var(--ink-soft);text-decoration:none;transition:color .15s var(--ease-out)}.nav__btn:hover{color:var(--ink)}.nav__ask{margin-left:auto;display:flex;align-items:center;gap:.4em}.nav__spark{background:var(--ask-aura);background-clip:text;-webkit-background-clip:text;color:transparent;font-size:.9rem}.nav__ask:hover .nav__spark,.nav__ask:focus-visible .nav__spark{filter:drop-shadow(0 0 5px var(--accent));animation:ask-spin 3s linear infinite}.nav__theme{font-size:1rem;line-height:1}@media(prefers-reduced-motion:no-preference){.nav__underline{transition:transform .25s var(--ease-out),width .25s var(--ease-out),opacity .15s var(--ease-out)}}@media(prefers-reduced-motion:reduce){.nav__ask:hover .nav__spark,.nav__ask:focus-visible .nav__spark{animation:none}}.nav__btn.nav__menu-btn,.nav__sheet{display:none}@media(max-width:767px){.nav{gap:.5rem}html.menu-open .nav{background:var(--paper);border-bottom-color:var(--rule)}.nav__tokens{border:0}.nav__tok:not(.is-active):not(.nav__tok--idle){display:none}.nav__tok.is-active,.nav__tok--idle{border-left:0}.nav__underline{display:none}.nav__btn{display:flex;align-items:center;min-height:44px;padding-inline:.4rem}.nav__btn.nav__theme{display:none}.nav__btn.nav__menu-btn{display:flex;margin-right:-.4rem}.nav__menu-label{display:inline-block;min-width:3.2em;padding:.2rem .45rem;border:1px solid var(--rule);text-align:center;color:var(--ink)}.nav__menu-btn[aria-expanded=true] .nav__menu-label{border-color:var(--accent);color:var(--accent)}.nav__sheet:not([hidden]){position:fixed;inset:var(--nav-h) 0 0;display:flex;flex-direction:column;justify-content:space-between;gap:2rem;padding:1.5rem var(--gutter) max(1.5rem,env(safe-area-inset-bottom));overflow-y:auto;overscroll-behavior:contain;background:var(--paper)}.nav__sheet-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--ink)}.nav__sheet-list li{border-bottom:1px solid var(--rule)}.nav__sheet-link{display:flex;align-items:baseline;gap:1rem;padding:.85rem 0;font-size:clamp(2.25rem,11vw,3.5rem);text-decoration:none}.nav__sheet-link[aria-current]{color:var(--accent)}.nav__sheet-num{width:1.5rem;flex:none}.nav__sheet-foot{display:flex;gap:.75rem}.nav__sheet-btn{display:inline-flex;align-items:center;gap:.4em;min-height:44px;padding:0 .9rem;border:1px solid var(--rule);color:var(--ink);text-decoration:none;text-transform:inherit}}@media(max-width:767px)and (prefers-reduced-motion:no-preference){.nav__sheet:not([hidden]){animation:nav-sheet-in .3s var(--ease-out)}.nav__sheet:not([hidden]) li{animation:nav-sheet-in .4s var(--ease-out) backwards}.nav__sheet:not([hidden]) li:nth-child(2){animation-delay:30ms}.nav__sheet:not([hidden]) li:nth-child(3){animation-delay:60ms}.nav__sheet:not([hidden]) li:nth-child(4){animation-delay:90ms}.nav__sheet:not([hidden]) li:nth-child(5){animation-delay:.12s}.nav__sheet:not([hidden]) li:nth-child(6){animation-delay:.15s}@keyframes nav-sheet-in{0%{opacity:0;transform:translateY(-8px)}}}@media(pointer:coarse){.nav__home,.nav__btn{display:flex;align-items:center;min-height:44px}.nav__theme{justify-content:center;min-width:44px;margin-right:-.75rem}.contact__links a,.note__meta a,.note__foot a,.note__ask,.work__notes a{display:inline-block;padding-block:.7rem}.tm-cap__reveal summary{padding-block:.7rem}.mermaid-zoom-btn{padding:.6rem .5rem;top:0;right:.25rem}.ask__close{padding:.5rem .7rem}.ask__chip{padding:.55rem .7rem}.select-ask{padding:.75rem .9rem}}@media(max-width:399px){.nav__readout{display:none}}@view-transition{navigation:auto}::view-transition-old(root),::view-transition-new(root){animation-duration:.25s}@media(prefers-reduced-motion:reduce){@view-transition{navigation:none}}@property --ask-angle{syntax: "<angle>"; inherits: false; initial-value: 0deg;}:root{--ask-aura: conic-gradient(from var(--ask-angle), var(--accent), oklch(62% .18 300), oklch(60% .14 250), var(--accent))}@keyframes ask-spin{to{--ask-angle: 360deg}}.ask{width:min(46rem,calc(100vw - 2rem));max-height:min(80svh,44rem);max-height:min(80dvh,44rem);margin:auto auto max(1rem,env(safe-area-inset-bottom));padding:0;border:1px solid var(--ink);border-radius:.75rem;background:var(--paper);color:var(--ink);font-size:.875rem}.ask::backdrop{background:color-mix(in oklch,var(--ink) 30%,transparent)}.ask__inner{display:grid;grid-template-rows:auto 1fr auto auto auto;gap:.75rem;max-height:inherit;padding:1.1rem 1.25rem}.ask__head{display:flex;justify-content:space-between;align-items:center}.ask__brand{display:flex;align-items:center;gap:.5rem;font-family:var(--font-display);font-size:1.1rem}.ask__dot{--ask-aura: conic-gradient(from var(--ask-angle), var(--accent), oklch(62% .18 300), oklch(60% .14 250), var(--accent));width:.6rem;height:.6rem;border-radius:50%;background:var(--ask-aura)}.ask.is-loading .ask__dot{animation:ask-spin 3s linear infinite}.ask__close{font-family:var(--font-mono);font-size:.75rem;color:var(--ink-soft);border:1px solid var(--rule);border-radius:.3rem;padding:.15rem .4rem}.ask__close:hover{color:var(--ink);border-color:var(--ink)}.ask__head form{margin:0}.ask__close-word{display:none}@media(pointer:coarse){.ask__close-key{display:none}.ask__close-word{display:inline}}.ask__thread{overflow-y:auto;overflow-x:clip;display:grid;gap:1.25rem;align-content:start;min-height:0}.ask__turn{display:grid;gap:.6rem}.ask__q{margin:0;color:var(--ink-soft);font-size:.85rem}.ask__a{margin:0;font-size:.95rem;line-height:1.7;overflow-wrap:anywhere}.ask__a:empty{display:none}.ask__error{margin:.5rem 0 0;color:var(--ink-soft)}.ask__caret{display:inline-block;width:.5em;height:1em;margin-left:.05em;vertical-align:-.15em;background:var(--ink);animation:ask-blink 1s step-end infinite}@keyframes ask-blink{50%{opacity:0}}.ask__sources[hidden]{display:none}.ask__sources p{margin:0 0 .35rem}.ask__pills{display:flex;flex-wrap:wrap;gap:.4rem}.ask__pill{position:relative;display:inline-flex;padding:.2rem .55rem;border:1px solid var(--rule);border-radius:999px;font-size:.75rem;color:var(--ink-soft);text-decoration:none;transition:color .15s var(--ease-out),border-color .15s var(--ease-out)}.ask__pill:hover,.ask__pill:focus-visible{color:var(--ink);border-color:var(--ink)}.ask__pill-pop{position:absolute;left:0;bottom:calc(100% + .4rem);display:none;gap:.2rem;width:max-content;max-width:min(16rem,calc(100vw - 3rem));padding:.5rem .6rem;border:1px solid var(--rule);border-radius:.5rem;background:var(--paper-2);font-size:.7rem;line-height:1.4;color:var(--ink-soft);text-transform:none;letter-spacing:0;pointer-events:none;z-index:1}.ask__pill-pop--below{bottom:auto;top:calc(100% + .4rem)}.ask__pill-pop strong{color:var(--ink);font-weight:400}.ask__pill-pop span{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.ask__pill:hover .ask__pill-pop,.ask__pill:focus-visible .ask__pill-pop{display:grid}.ask__searched-wrap:empty{display:none}.ask__searched{font-family:var(--font-mono);font-size:.75rem;color:var(--ink-soft)}.ask__searched summary{cursor:var(--cursor-pointer)}.ask__searched-list{list-style:none;margin:.5rem 0 0;padding:0;display:grid;gap:.35rem}.ask__searched-list a{display:flex;gap:.5rem;text-decoration:none;color:var(--ink-soft)}.ask__searched-list a:hover{color:var(--ink)}.ask__searched-heading{color:var(--ink-soft);opacity:.7}.ask__suggest[hidden]{display:none}.ask__suggest{display:flex;flex-wrap:wrap;gap:.5rem}.ask__chip{padding:.3rem .6rem;border:1px solid var(--rule);border-radius:.4rem;font-size:.75rem;color:var(--ink-soft);text-align:left;transition:color .15s var(--ease-out),border-color .15s var(--ease-out)}.ask__chip:hover{color:var(--ink);border-color:var(--ink)}.ask__composer{display:grid;gap:.4rem;padding-top:3.4rem}.ask__scope-line[hidden]{display:none}.ask__scope-line,.ask__form{margin:0}.ask__glow{--ask-aura: conic-gradient(from var(--ask-angle), var(--accent), oklch(62% .18 300), oklch(60% .14 250), var(--accent));position:relative;display:flex;gap:.75rem;align-items:baseline;padding:.6rem .85rem;border-radius:.6rem;border:1px solid transparent;background:linear-gradient(var(--paper),var(--paper)) padding-box,var(--ask-aura) border-box}.ask.is-loading .ask__glow{animation:ask-spin 6s linear infinite}.ask__buddy{position:absolute;right:.9rem;bottom:calc(100% - .15rem);width:4.4rem;cursor:var(--cursor-pointer)}.ask__buddy svg{display:block;width:100%;height:auto;overflow:visible}.ask__prompt{font-family:var(--font-display);font-size:1.35rem;color:var(--ink-soft)}.ask__glow input{flex:1;min-width:0;border:0;outline:none;background:none;color:inherit;font-family:var(--font-display);font-size:clamp(1.1rem,3vw,1.5rem)}.ask__status{margin:0;min-height:1em}.ask__status--shimmer{background:linear-gradient(90deg,var(--ink-soft) 0%,var(--ink) 50%,var(--ink-soft) 100%);background-size:200% auto;-webkit-background-clip:text;background-clip:text;color:transparent;animation:ask-shimmer 1.6s linear infinite}@keyframes ask-shimmer{to{background-position:-200% 0}}.ask__foot{margin:0;text-transform:none;letter-spacing:0}@media(prefers-reduced-motion:no-preference){.ask__word-in{animation:ask-word-in .2s var(--ease-out)}@keyframes ask-word-in{0%{opacity:0}to{opacity:1}}}@media(prefers-reduced-motion:reduce){.ask.is-loading .ask__dot,.ask.is-loading .ask__glow,.ask__caret{animation:none}.ask__status--shimmer{animation:none;background:none;-webkit-text-fill-color:currentColor;color:var(--ink-soft)}}.prose{max-width:var(--measure)}.prose>*+*{margin-top:1.25em}.prose h2,.prose h3{font-family:var(--font-display);font-weight:400;letter-spacing:-.02em;line-height:1.05;margin-top:2.5em;scroll-margin-top:calc(var(--nav-h) + 1.5rem)}.prose h2{font-size:clamp(1.75rem,3.5vw,2.5rem)}.prose h3{font-size:1.4rem}.prose p,.prose ul,.prose ol{margin-bottom:0}.prose li+li{margin-top:.4em}.prose strong{font-weight:500}.prose blockquote{margin:2em 0;padding-left:1.25rem;border-left:2px solid var(--ink);font-family:var(--font-display);font-size:1.5rem;line-height:1.2;letter-spacing:-.01em}.prose blockquote p{margin:0}.prose pre{padding:1.25rem;overflow-x:auto;border:1px solid var(--rule);font-size:.8125rem;line-height:1.6}.prose :not(pre)>code{padding:.1em .3em;background:var(--paper-2);font-size:.9em}.prose table{width:100%;border-collapse:collapse;font-size:.8125rem}.prose th,.prose td{padding:.6rem .75rem .6rem 0;border-bottom:1px solid var(--rule);text-align:left;vertical-align:top}.prose th{font-weight:400;font-size:.7rem;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft)}.prose hr{border:0;border-top:1px solid var(--rule)}.table-wrapper{overflow-x:auto}.mermaid-wrapper{position:relative;margin:2.5em 0;padding:1.5rem 1rem;overflow-x:auto;border:1px solid var(--rule);background:var(--paper)}.mermaid-wrapper.is-expanded{position:fixed;inset:5vh 5vw;z-index:70;overflow:auto}.mermaid-zoom-btn{position:absolute;top:.5rem;right:.75rem;font-size:.7rem;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft)}.mermaid-zoom-btn:hover{color:var(--accent)}.mermaid svg{margin-inline:auto}.mermaid .node rect,.mermaid .node polygon,.mermaid .node circle,.mermaid .actor,.mermaid .note,.mermaid rect.state,.mermaid .stateGroup rect,.mermaid .labelBkg,.mermaid .cluster rect,.mermaid .labelBox{fill:var(--paper)!important;stroke:var(--ink)!important}.mermaid .edgePath path,.mermaid .flowchart-link,.mermaid .messageLine0,.mermaid .messageLine1,.mermaid .transition,.mermaid .actor-line,.mermaid .loopLine{stroke:var(--ink-soft)!important}.mermaid marker path,.mermaid .arrowheadPath{fill:var(--ink-soft)!important;stroke:var(--ink-soft)!important}.mermaid text,.mermaid .nodeLabel,.mermaid .messageText,.mermaid .noteText,.mermaid span,.mermaid .cluster-label,.mermaid .labelText,.mermaid .loopText,.mermaid .loopText tspan{fill:var(--ink)!important;color:var(--ink)!important;font-family:var(--font-mono)!important}.mermaid .edgeLabel,.mermaid .edgeLabel p,.mermaid .edgeLabel rect{background:var(--paper)!important;fill:var(--paper)!important}.read-progress{position:fixed;inset:var(--nav-h) 0 auto;z-index:49;height:2px;pointer-events:none}.read-progress span{display:block;height:100%;background:var(--accent);transform:scaleX(0);transform-origin:left}.select-ask{position:fixed;z-index:60;padding:.4rem .7rem;background:var(--ink);color:var(--paper)}
