@font-face{font-family:Geist;font-style:normal;font-weight:400;font-display:swap;src:url(../media/4f6667dd39116621-s.00az9qtie3ho1.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist;font-style:normal;font-weight:400;font-display:swap;src:url(../media/07935285219a259d-s.3j-a226dh71aj.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist;font-style:normal;font-weight:400;font-display:swap;src:url(../media/f58031ded4338640-s.2gwoz23eiro2t.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist;font-style:normal;font-weight:400;font-display:swap;src:url(../media/77814b00d5ca94a4-s.0i3h3th1vs4m7.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist;font-style:normal;font-weight:400;font-display:swap;src:url(../media/605ce01b664af129-s.p.0zr6hhvz-h9nw.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist;font-style:normal;font-weight:500;font-display:swap;src:url(../media/4f6667dd39116621-s.00az9qtie3ho1.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist;font-style:normal;font-weight:500;font-display:swap;src:url(../media/07935285219a259d-s.3j-a226dh71aj.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist;font-style:normal;font-weight:500;font-display:swap;src:url(../media/f58031ded4338640-s.2gwoz23eiro2t.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist;font-style:normal;font-weight:500;font-display:swap;src:url(../media/77814b00d5ca94a4-s.0i3h3th1vs4m7.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist;font-style:normal;font-weight:500;font-display:swap;src:url(../media/605ce01b664af129-s.p.0zr6hhvz-h9nw.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Fallback;src:local(Arial);ascent-override:95.94%;descent-override:28.16%;line-gap-override:0.0%;size-adjust:104.76%}.X9ZtNW_className{font-family:Geist,Geist Fallback;font-style:normal}.X9ZtNW_variable{--font-sans:"Geist", "Geist Fallback"}
@font-face{font-family:Geist Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/70975a37357bc622-s.0hb8ue7pv42qp.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/1e64b3f57c96dda9-s.3_2l2hvm8mn_r.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/25948cc26c1183b1-s.25fzyfulsmhsq.woff2)format("woff2");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/77551cceac6523b8-s.262b0fv92ce4j.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/7ee4e68c3aab54c5-s.1tbf4c8vl6lkz.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/6f240fb509094cc8-s.p.32f10yu79vtgx.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono Fallback;src:local(Arial);ascent-override:74.67%;descent-override:21.92%;line-gap-override:0.0%;size-adjust:134.59%}.Oxeb8q_className{font-family:Geist Mono,Geist Mono Fallback;font-style:normal;font-weight:400}.Oxeb8q_variable{--font-mono:"Geist Mono", "Geist Mono Fallback"}
:root{--paper:var(--lightningcss-light,#f4f5f3)var(--lightningcss-dark,#101114);--ink:var(--lightningcss-light,#16181d)var(--lightningcss-dark,#e6e7ea);--muted:var(--lightningcss-light,#71747b)var(--lightningcss-dark,#8b8e96);--line:var(--lightningcss-light,#16181d14)var(--lightningcss-dark,#e6e7ea14);--pen:var(--lightningcss-light,#3c4459)var(--lightningcss-dark,#aab0c0);--field:var(--lightningcss-light,#fff)var(--lightningcss-dark,#17191d);--danger:var(--lightningcss-light,#a33a2f)var(--lightningcss-dark,#e08a7f);--sans:var(--font-sans), ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--mono:var(--font-mono), ui-monospace, "SFMono-Regular", Menlo, monospace;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body{margin:0}body{background:var(--paper);color:var(--ink);font-family:var(--sans);letter-spacing:-.01em;-webkit-font-smoothing:antialiased;font-size:15px;line-height:1.55}::selection{background:var(--line);color:var(--ink)}.ink ::selection{background:0 0}a{color:inherit}.page{max-width:520px;padding-block:clamp(48px,10vw,96px) 56px;padding-left:max(20px, env(safe-area-inset-left,0px));padding-right:max(20px, env(safe-area-inset-right,0px));flex-direction:column;gap:52px;margin:0 auto;display:flex}.st{animation:.4s cubic-bezier(.2,.7,.2,1) backwards fade;animation-delay:calc(.1s + var(--i,0) * 60ms)}@keyframes fade{0%{opacity:0;filter:blur(3px)}to{opacity:1;filter:blur()}}.top{font-family:var(--mono);color:var(--muted);letter-spacing:0;justify-content:space-between;align-items:center;font-size:12px;display:flex}.tnum{font-variant-numeric:tabular-nums}.hero{flex-direction:column;gap:16px;display:flex;position:relative}.bio{flex-direction:column;gap:10px;display:flex}.hero p{color:var(--muted);text-wrap:pretty;max-width:48ch;margin:0}.hero p b{color:var(--ink);font-weight:500}.sig{width:150px;height:auto;color:var(--pen);cursor:pointer;display:block}.sig path{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round}.js .sig:not(.ready) .s{opacity:0}.sig.draw .s{stroke-dasharray:var(--len);stroke-dashoffset:var(--len);animation:ink var(--dur) cubic-bezier(.55, .1, .45, .95) forwards;animation-delay:var(--delay)}@keyframes ink{to{stroke-dashoffset:0}}.tt{color:var(--pen);cursor:pointer;font:inherit;-webkit-tap-highlight-color:transparent;background:0 0;border:0;padding:7px;display:none;position:absolute;top:-7px;right:-8px}.js .tt{display:inline-flex}.tt:focus-visible{outline:none}.tt svg{width:30px;height:30px;transition:scale .2s cubic-bezier(.2,0,0,1);display:block;overflow:visible}.tt:active svg{scale:.88}.tt-ring{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-dasharray:1 2;stroke-dashoffset:0}.tt-blot{fill:currentColor;transform-origin:16px 16px;transition:scale .56s cubic-bezier(.3,1.55,.5,1),rotate .7s cubic-bezier(.2,.7,.2,1);rotate:-30deg;scale:.2}:root[data-theme=dark] .tt-blot{rotate:0deg;scale:1}.tt-drop{fill:currentColor;opacity:0;transform-origin:16px 16px}.tt.flipped .tt-ring{animation:.6s cubic-bezier(.55,.1,.45,.95) tt-redraw}:root[data-theme=dark] .tt.flipped .tt-drop{animation:.62s cubic-bezier(.15,.7,.3,1) tt-spatter-dark}:root[data-theme=light] .tt.flipped .tt-drop{animation:.62s cubic-bezier(.15,.7,.3,1) tt-spatter-light}.tt.flipped .tt-drop:nth-of-type(n){animation-delay:var(--d,0s)}@keyframes tt-redraw{0%{stroke-dashoffset:1.05px}}@keyframes tt-spatter-dark{0%{opacity:1;scale:.5}70%{opacity:1}to{opacity:0;scale:1.25}}@keyframes tt-spatter-light{0%{opacity:1;scale:.5}70%{opacity:1}to{opacity:0;scale:1.25}}.tt:focus-visible .tt-ring{stroke-width:2.3px}@media (hover:hover){:root:not(.cold) .tt:hover .tt-blot{rotate:24deg}}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){z-index:1}.peek{color:var(--muted);-webkit-text-decoration:underline dotted color-mix(in srgb, var(--muted) 55%, transparent);text-decoration:underline dotted color-mix(in srgb, var(--muted) 55%, transparent);text-underline-offset:3px;cursor:help;transition:color .15s,text-decoration-color .15s}.peek:focus-visible{outline:2px solid var(--pen);outline-offset:2px;border-radius:3px}.peek[aria-expanded=true]{color:var(--ink);-webkit-text-decoration-color:var(--pen);text-decoration-color:var(--pen)}.peek-card{z-index:20;box-sizing:border-box;background:var(--field);border:1px solid var(--line);transform-origin:24px 0;opacity:0;visibility:hidden;pointer-events:none;border-radius:14px;padding:8px;transition:opacity .16s ease-out,translate .24s cubic-bezier(.2,.8,.2,1),scale .24s cubic-bezier(.2,.8,.2,1),visibility 0s linear .16s;position:absolute;translate:0 -4px;scale:.985;box-shadow:0 14px 40px #00000024,0 2px 6px #0000000f}.peek-card.open{opacity:1;visibility:visible;pointer-events:auto;transition-delay:0s;translate:0;scale:1}.grid{background:color-mix(in srgb, var(--ink) 3%, transparent);border-radius:7px;width:100%;height:auto;display:block}.grid .g{stroke:var(--line);stroke-width:.7px}.grid .road{stroke:color-mix(in srgb, var(--pen) 32%, transparent);stroke-width:1.1px}.grid .route{fill:none;stroke:var(--pen);stroke-width:3px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1 2;stroke-dashoffset:1.05px}.grid.drawn .route{stroke-dashoffset:0;transition:stroke-dashoffset .9s cubic-bezier(.55,.1,.3,1) .1s}.grid .zero{fill:var(--field);stroke:var(--pen);stroke-width:2.2px}.grid .pin{fill:var(--ink);opacity:0}.grid.drawn .pin{opacity:1;transition:opacity .2s .85s}.grid .pin-pulse{fill:var(--pen);transform-box:fill-box;transform-origin:50%;opacity:0}.grid.drawn .pin-pulse{animation:2.4s ease-out 1s infinite pin-pulse}@keyframes pin-pulse{0%{opacity:.45;scale:1}70%,to{opacity:0;scale:3}}.scope{aspect-ratio:1;position:relative}.scope svg{width:100%;height:100%;display:block;overflow:visible}.scope .lake{fill:color-mix(in srgb, var(--pen) 13%, transparent)}.scope .ring{fill:none;stroke:color-mix(in srgb, var(--pen) 24%, transparent);stroke-width:.8px}.scope .home{fill:var(--ink)}.scope .port{fill:var(--muted)}.scope .blip{fill:var(--ink);cursor:default;transition:transform 10s linear,opacity .6s}.scope.snap .blip{transition:none}.scope .blip .hit{fill:#0000}.scope .blip.on{fill:var(--pen);opacity:1!important}.sweep{pointer-events:none;background:conic-gradient(from 0deg, transparent 0 72%, color-mix(in srgb, var(--pen) 26%, transparent) 100%);border-radius:50%;animation:4.5s linear infinite sweep;position:absolute;inset:1.9%}.peek-card:not(.open) .sweep{animation-play-state:paused}@keyframes sweep{to{rotate:360deg}}.flight{min-height:18px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;justify-content:space-between;gap:8px;margin:6px 2px 0;font-size:12px;line-height:18px;display:flex}.flight b{text-overflow:ellipsis;min-width:0;color:var(--ink);font-weight:500;overflow:hidden}section{flex-direction:column;gap:10px;display:flex}h2{font-size:12px;font-weight:400;font-family:var(--mono);color:var(--muted);letter-spacing:0;margin:0}.list{flex-direction:column;display:flex}.entry{border-bottom:1px solid var(--line);color:var(--ink);-webkit-tap-highlight-color:transparent;align-items:baseline;gap:16px;padding:10px 0;text-decoration:none;transition:opacity .25s ease-out,scale .2s cubic-bezier(.2,0,0,1);display:flex}a.entry:active,button.entry:active{scale:.985}@media (hover:hover){:root:not(.cold) .list:has(.entry:hover) .entry:not(:hover){opacity:.45}}.entry .k{width:84px;color:var(--muted);white-space:nowrap;text-overflow:ellipsis;flex:none;font-size:13px;overflow:hidden}.entry .v{flex:1;min-width:0}.entry .d{color:var(--muted);margin-top:1px;font-size:13.5px;display:block}.entry .r{font-family:var(--mono);color:var(--muted);white-space:nowrap;font-size:12px;transition:transform .3s cubic-bezier(.2,.7,.2,1)}:root:not(.cold) a.entry:hover .arr{transform:translate(2px,-2px)}.entry:focus-visible{outline:none}.entry:focus-visible .k,.entry:focus-visible .t{color:var(--pen)}button.entry{border:0;border-bottom:1px solid var(--line);font:inherit;letter-spacing:inherit;text-align:left;cursor:pointer;background:0 0;width:100%}.project .r{gap:10px;display:flex}.u{position:relative}.u svg{width:calc(100% + 2px);height:8px;color:var(--pen);pointer-events:none;position:absolute;bottom:-6px;left:-1px;overflow:visible}.u svg path{fill:none;stroke:currentColor;stroke-width:1.2px;stroke-linecap:round;stroke-dasharray:1 2;stroke-dashoffset:1.05px;transition:stroke-dashoffset .5s cubic-bezier(.6,.1,.3,1)}:root:not(.cold) .entry:hover .u svg path,.entry:focus-visible .u svg path{stroke-dashoffset:0}.foot{font-family:var(--mono);color:var(--muted);letter-spacing:0;flex-wrap:wrap;justify-content:space-between;gap:4px 16px;font-size:12px;display:flex}.foot-now{margin-left:auto}.ticker{color:inherit;font:inherit;letter-spacing:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:0;padding:0;transition:color .15s}.ticker:hover{color:var(--ink)}.ticker:focus-visible{outline:2px solid var(--pen);outline-offset:2px;border-radius:3px}.up{color:var(--lightningcss-light,#2f7d5b)var(--lightningcss-dark,#74c39c)}.down{color:var(--danger)}@media (prefers-reduced-motion:reduce){.st{animation:none}.sig.draw .s{stroke-dashoffset:0;animation:none}.tt.flipped .tt-ring,.tt.flipped .tt-drop{animation:none!important}.sweep{display:none}.scope .blip{transition:none}.grid.drawn .pin-pulse{animation:none}*{transition-duration:.01ms!important}}
