.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}.avatar[data-astro-cid-iusywdof]{position:relative;display:inline-flex;align-items:center;justify-content:center;flex:none;vertical-align:middle;width:var(--avatar-size-mobile);height:var(--avatar-size-mobile);padding:0;border:0;background:transparent;color:inherit;border-radius:var(--radius-pill)}.avatar-photo[data-astro-cid-iusywdof]{display:grid;place-items:center;width:100%;height:100%;overflow:hidden;border-radius:inherit;box-shadow:var(--shadow-avatar),0 0 0 var(--border-width) var(--color-line);background:var(--color-soft)}.avatar-photo[data-astro-cid-iusywdof] img{width:100%;height:100%;object-fit:cover}.avatar-fallback[data-astro-cid-iusywdof]{font:var(--weight-medium) var(--text-title)/1 var(--font-mono)}.avatar-small[data-astro-cid-iusywdof]{width:var(--touch-target);height:var(--touch-target)}.avatar-small[data-astro-cid-iusywdof] .avatar-photo[data-astro-cid-iusywdof]{width:var(--avatar-size-small);height:var(--avatar-size-small)}.avatar-wave[data-astro-cid-iusywdof]{position:absolute;right:calc(-1 * var(--space-1));bottom:calc(-1 * var(--space-1));display:grid;place-items:center;width:var(--avatar-wave-size);height:var(--avatar-wave-size);background:var(--color-bg);border:var(--border-width) solid var(--color-line);border-radius:var(--radius-pill);box-shadow:var(--shadow-avatar);opacity:0;transform:scale(.5);transition:opacity var(--duration-fast) var(--ease-out),transform var(--duration-detail) var(--ease-spring);pointer-events:none}.avatar-wave[data-astro-cid-iusywdof]>span[data-astro-cid-iusywdof]{transform-origin:70% 80%}.avatar[data-astro-cid-iusywdof]:focus .avatar-wave[data-astro-cid-iusywdof]{opacity:1;transform:scale(1)}.avatar[data-astro-cid-iusywdof]:focus .avatar-wave[data-astro-cid-iusywdof]>span[data-astro-cid-iusywdof]{animation:friendly-wave var(--duration-wave) var(--ease-inout)}.avatar-small[data-astro-cid-iusywdof] .avatar-wave[data-astro-cid-iusywdof]{width:var(--space-6);height:var(--space-6);font-size:var(--text-small)}@media(hover:hover){.avatar[data-astro-cid-iusywdof]:hover .avatar-wave[data-astro-cid-iusywdof]{opacity:1;transform:scale(1)}.avatar[data-astro-cid-iusywdof]:hover .avatar-wave[data-astro-cid-iusywdof]>span[data-astro-cid-iusywdof]{animation:friendly-wave var(--duration-wave) var(--ease-inout)}}@keyframes friendly-wave{0%,to{transform:rotate(0)}18%,54%{transform:rotate(18deg)}36%,72%{transform:rotate(-12deg)}88%{transform:rotate(6deg)}}@media(min-width:40rem){.avatar-identity[data-astro-cid-iusywdof]{width:var(--avatar-size-tablet);height:var(--avatar-size-tablet)}}@media(min-width:64rem){.avatar-identity[data-astro-cid-iusywdof]{width:var(--avatar-size-desktop);height:var(--avatar-size-desktop)}}@media(prefers-reduced-motion:reduce){.avatar-wave[data-astro-cid-iusywdof]{transform:none;transition:opacity var(--duration-fast)!important}.avatar-wave[data-astro-cid-iusywdof]>span[data-astro-cid-iusywdof]{animation:none!important}}footer[data-astro-cid-pnrjdgm4]{margin-top:var(--space-24);padding-top:var(--space-5);border-top:var(--border-width) solid var(--color-line);display:flex;justify-content:space-between;gap:var(--space-2) var(--space-4);flex-wrap:wrap;font:var(--weight-regular) var(--text-small)/var(--leading-body) var(--font-mono);color:var(--color-muted)}nav[data-astro-cid-pnrjdgm4]{display:flex;flex-wrap:wrap;gap:var(--space-4);width:100%}a[data-astro-cid-pnrjdgm4]{min-height:var(--touch-target);display:inline-flex;align-items:center;gap:var(--space-2)}.footer-owner[data-astro-cid-pnrjdgm4]{display:inline-flex;align-items:center;gap:var(--space-3)}.shortcuts[data-astro-cid-pnrjdgm4]{display:none}.js .shortcuts[data-astro-cid-pnrjdgm4]{display:inline}.island-control{display:inline-flex;align-items:center;justify-content:center;min-width:var(--touch-target);min-height:var(--touch-target);padding:var(--space-2) var(--space-3);border:var(--border-width) solid var(--color-line);border-radius:var(--radius-sm);background:var(--color-transparent);color:var(--color-muted);font:var(--weight-regular) var(--text-small)/var(--leading-tight) var(--font-mono);cursor:pointer;transition:color var(--duration-fast),border-color var(--duration-fast)}.island-control:focus-visible,.project-summary:focus-visible,.project-links a:focus-visible,.heat-scroll:focus-visible,.now-globe:focus-visible{outline:var(--focus-width) solid var(--color-focus);outline-offset:var(--focus-offset);border-radius:var(--radius-sm)}.island-control:disabled{color:var(--color-faint);cursor:default}.theme-control{gap:var(--space-2);min-width:var(--theme-control-width)}.now-orb{width:100%;text-align:center}.now-globe{position:relative;display:block;width:min(100%,var(--globe-size));height:auto;aspect-ratio:1;padding:0;margin:0 auto var(--space-3);border:0;border-radius:var(--radius-pill);background:var(--color-transparent);color:var(--color-ink);cursor:grab;touch-action:pan-y;isolation:isolate}.now-globe:active{cursor:grabbing}.now-globe:disabled{opacity:1;cursor:default}.globe-canvas,.globe-canvas canvas,.globe-static,.globe-atmosphere,.globe-specular{position:absolute;display:block;inset:0;width:100%;height:100%;border-radius:inherit;pointer-events:none}.globe-canvas{opacity:0;transition:opacity var(--duration-globe) var(--ease-out)}.now-globe[data-ready=true] .globe-canvas{opacity:1}.globe-static{display:grid;place-items:center;background:var(--globe-static-fill);color:var(--color-faint);font-size:var(--globe-placeholder-size);box-shadow:var(--shadow-globe)}.now-globe[data-ready=true] .globe-static{opacity:0}.globe-atmosphere{background:var(--globe-atmosphere-fill);transform:scale(var(--globe-atmosphere-scale));z-index:var(--z-highlight);filter:blur(var(--space-2))}.globe-specular{inset:10%;width:80%;height:80%;background:var(--globe-specular-fill);opacity:var(--globe-specular-opacity)}.globe-pin{position:absolute;inset:50% auto auto 50%;width:var(--globe-pin-size);height:var(--globe-pin-size);border-radius:var(--radius-pill);background:var(--color-accent);transform:translate(-50%,-50%);opacity:0;pointer-events:none;transition:opacity var(--duration-detail)}.globe-pin:after{content:"";position:absolute;inset:0;border:var(--border-width) solid var(--color-accent);border-radius:inherit}.now-globe[data-ready=true] .globe-pin[data-visible=true]{opacity:1}.globe-location{position:absolute;bottom:var(--space-3);left:50%;display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);transform:translate(-50%);white-space:nowrap;border:var(--border-width) solid var(--color-line);border-radius:var(--radius-pill);background:var(--color-bg);box-shadow:var(--shadow-globe);color:var(--color-ink);font:var(--weight-medium) var(--text-small)/var(--leading-tight) var(--font-mono);pointer-events:none}.globe-location-dot{width:var(--status-size);height:var(--status-size);border-radius:var(--radius-pill);background:var(--color-accent)}.globe-hint{display:block;color:var(--color-faint)}.now-where{font-weight:var(--weight-semibold);letter-spacing:var(--tracking-small);line-height:var(--leading-title)}.now-conditions{font-family:var(--font-mono);font-size:var(--text-small);color:var(--color-muted);line-height:var(--leading-body);min-height:var(--globe-conditions-height);margin-top:var(--space-1)}.now-time{font-variant-numeric:tabular-nums}.now-weather{display:block}.project-list{position:relative;isolation:isolate;border-top:var(--border-width) solid var(--color-line)}.project-highlight{position:absolute;top:0;left:calc(-1 * var(--space-3));right:calc(-1 * var(--space-3));z-index:var(--z-highlight);pointer-events:none;border-radius:var(--radius-md);background:var(--color-soft);opacity:0}.project-list[data-highlight=true] .project-highlight{opacity:1}.project-item{position:relative;border-bottom:var(--border-width) solid var(--color-line)}.project-summary{list-style:none;display:grid;grid-template-columns:var(--logo-size-row) minmax(0,1fr) auto var(--plus-size);gap:var(--space-3);align-items:center;min-height:var(--touch-target);padding:var(--space-4) var(--space-1);cursor:pointer;user-select:none;-webkit-user-select:none}.project-summary::-webkit-details-marker{display:none}.project-mark{display:grid;place-items:center;width:var(--mark-size);height:var(--mark-size);border:var(--border-width) solid var(--color-line);border-radius:var(--radius-sm);background:var(--color-soft);font:var(--weight-medium) var(--text-small)/var(--leading-tight) var(--font-mono)}.project-copy{min-width:0}.project-name{font-weight:var(--weight-semibold);letter-spacing:var(--tracking-small)}.project-proof{margin-left:var(--space-2);color:var(--color-muted);font:var(--weight-regular) var(--text-small)/var(--leading-body) var(--font-mono)}.project-line{display:block;color:var(--color-muted);line-height:var(--leading-title);overflow-wrap:anywhere}.project-meta{color:var(--color-muted);font:var(--weight-regular) var(--text-small)/var(--leading-body) var(--font-mono);text-align:right}.project-meta>span{display:block}.project-status{color:var(--color-ink)}.project-status:before{content:"";display:inline-block;width:var(--status-size);height:var(--status-size);margin-right:var(--space-2);border-radius:var(--radius-pill);border:var(--border-width) solid var(--color-faint)}.project-status[data-status=Live]:before{background:var(--color-accent);border-color:var(--color-accent)}.project-status[data-status="Open source"]:before{background:var(--color-ink);border-color:var(--color-ink)}.project-plus{display:grid;place-items:center;color:var(--color-faint);width:var(--plus-size);height:var(--plus-size);font:var(--weight-regular) var(--text-title)/var(--leading-tight) var(--font-mono)}.project-item[open] .project-plus{transform:rotate(var(--plus-open-angle));color:var(--color-ink)}.project-draft{margin-left:var(--space-2);padding:0 var(--space-1);border:var(--border-width) solid currentColor;border-radius:var(--radius-xs);color:var(--color-accent);font:var(--weight-regular) var(--text-small)/var(--leading-body) var(--font-mono)}.project-detail{padding:0 var(--space-1) var(--space-6) calc(var(--logo-size-row) + var(--space-4))}.project-detail p{max-width:var(--readable-width)}.project-facts{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-8);margin:var(--space-3) 0 0;font:var(--weight-regular) var(--text-small)/var(--leading-body) var(--font-mono)}.project-facts dt{color:var(--color-faint)}.project-facts dd{margin:0}.project-links{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-5);margin-top:var(--space-3)}.project-links a{display:inline-flex;align-items:center;gap:var(--space-1);min-height:var(--touch-target)}.contributions-island{padding-block:var(--space-5);border-block:var(--border-width) solid var(--color-line)}.contribution-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--space-3);margin-bottom:var(--space-6)}.contribution-period,.contribution-detail-label,.contribution-stats dt,.contribution-orgs{display:flex;align-items:center;gap:var(--space-2)}.contribution-period{font:var(--weight-medium) var(--text-small)/var(--leading-tight) var(--font-mono)}.contribution-years{display:flex;align-items:center;padding:var(--space-1);border:var(--border-width) solid var(--color-line);border-radius:var(--radius-sm);gap:var(--space-1)}.contribution-years button{min-height:var(--touch-target);padding-inline:var(--space-3);background:transparent;border:0;border-radius:var(--radius-xs);color:var(--color-muted);cursor:pointer;font:var(--weight-medium) var(--text-small)/var(--leading-tight) var(--font-mono)}.contribution-years button[aria-pressed=true]{background:var(--color-soft);color:var(--color-ink)}.contribution-years button:focus-visible,.contribution-year-totals button:focus-visible{outline:var(--focus-width) solid var(--color-focus);outline-offset:var(--focus-offset)}.heat-calendar{display:flex;align-items:start;gap:var(--space-2)}.heat-weekdays{display:grid;flex:none;grid-template-rows:repeat(7,var(--heat-size));gap:var(--heat-gap);padding-top:calc(var(--heat-label-height) + var(--space-2));color:var(--color-faint);font:var(--weight-regular) var(--text-small)/var(--leading-tight) var(--font-mono)}.heat-weekdays span:nth-child(1){grid-row:2}.heat-weekdays span:nth-child(2){grid-row:4}.heat-weekdays span:nth-child(3){grid-row:6}.heat-scroll{position:relative;min-width:0;max-width:100%;min-height:var(--touch-target);overflow-x:auto;overflow-y:hidden;padding-block:var(--space-1) var(--space-2);border-radius:var(--radius-xs);scrollbar-width:thin}.heat-months{display:grid;grid-auto-columns:var(--heat-size);grid-auto-flow:column;gap:var(--heat-gap);width:max-content;min-height:var(--heat-label-height);margin-bottom:var(--space-2);color:var(--color-faint);font:var(--weight-regular) var(--text-small)/var(--leading-tight) var(--font-mono)}.heat-months span{white-space:nowrap}.heat-grid{display:grid;grid-template-rows:repeat(7,var(--heat-size));grid-auto-columns:var(--heat-size);grid-auto-flow:column;gap:var(--heat-gap);width:max-content}.heat-day{display:block;width:var(--heat-size);height:var(--heat-size);border-radius:var(--heat-radius);background:var(--color-heat-0)}.heat-day[data-level="1"],.language-bar [data-level="1"],.language-legend [data-level="1"]{background:var(--color-heat-1)}.heat-day[data-level="2"],.language-bar [data-level="2"],.language-legend [data-level="2"]{background:var(--color-heat-2)}.heat-day[data-level="3"],.language-bar [data-level="3"],.language-legend [data-level="3"]{background:var(--color-heat-3)}.heat-day[data-level="4"]{background:var(--color-heat-accent, var(--color-accent))}.language-bar [data-level="4"],.language-legend [data-level="4"]{background:var(--color-heat-4)}.heat-day[data-unavailable=true]{background:transparent;box-shadow:inset 0 0 0 var(--border-width) var(--color-line)}.heat-day[data-future=true]{opacity:var(--opacity-muted)}.heat-scroll:focus-visible .heat-day[data-active=true],.heat-day[data-active=true]:not([data-future=true]){outline:var(--border-width) solid var(--color-ink);outline-offset:var(--border-width)}.heat-inspector{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin-top:var(--space-1);min-height:var(--touch-target)}.heat-tooltip{font:var(--weight-regular) var(--text-small)/var(--leading-title) var(--font-mono);color:var(--color-muted)}.heat-controls{display:flex;flex-shrink:0;gap:var(--space-1)}.heat-controls .island-control{padding:0;border-color:var(--color-transparent)}.heat-key{display:flex;justify-content:flex-end;align-items:center;gap:var(--heat-gap);color:var(--color-faint);font:var(--weight-regular) var(--text-small)/var(--leading-tight) var(--font-mono)}.heat-key>span:first-child{margin-right:var(--space-1)}.heat-key>span:last-child{margin-left:var(--space-1)}.contribution-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-4);margin:var(--space-6) 0 0}.contribution-stats>div{display:flex;flex-direction:column-reverse;justify-content:flex-end}.contribution-stats dt{color:var(--color-muted);font-size:var(--text-small)}.contribution-stats dd{margin:0 0 var(--space-2);font-size:var(--text-title);font-weight:var(--weight-semibold);line-height:var(--leading-digit);letter-spacing:var(--tracking-title)}.contribution-stats dd small{color:var(--color-muted);font-size:var(--text-small);font-weight:var(--weight-regular);letter-spacing:var(--tracking-small);white-space:nowrap}.contribution-detail-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-6);padding-top:var(--space-5);margin-top:var(--space-5);border-top:var(--border-width) solid var(--color-line)}.contribution-detail-label{margin-bottom:var(--space-3);font-size:var(--text-small);color:var(--color-muted)}.language-bar,.contribution-split-bar{display:flex;width:100%;height:var(--language-bar-height, var(--space-2));border-radius:var(--radius-pill);overflow:hidden;background:var(--color-heat-1)}.language-bar>span{display:block;flex-shrink:0}.language-legend{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-3);list-style:none;padding:0;margin:var(--space-3) 0 0;color:var(--color-muted);font-size:var(--text-small)}.language-legend li{display:inline-flex;align-items:center;gap:var(--space-1)}.language-legend li>span{width:var(--space-2);height:var(--space-2);border-radius:var(--radius-pill)}.language-legend small{color:var(--color-faint)}.contribution-split-bar span{height:100%;background:var(--color-heat-4)}.contribution-muted{color:var(--color-muted);font-size:var(--text-small)}.contribution-split .contribution-muted{margin-top:var(--space-2)}.contribution-orgs{flex-wrap:wrap;margin-top:var(--space-4);color:var(--color-muted);font-size:var(--text-small)}.contribution-note{margin-top:var(--space-4);max-width:var(--readable-width);color:var(--color-faint);font:var(--weight-regular) var(--text-small)/var(--leading-body) var(--font-mono)}.contribution-history{padding-block:var(--space-4);color:var(--color-muted);font-size:var(--text-small)}.contribution-year-totals{display:grid;grid-template-columns:repeat(auto-fit,minmax(var(--space-24),1fr));gap:var(--space-2);margin-top:var(--space-4)}.contribution-year-totals button{display:flex;justify-content:space-between;gap:var(--space-2);min-height:var(--touch-target);border:var(--border-width) solid var(--color-line);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);background:var(--color-transparent);color:var(--color-muted);cursor:pointer;font:inherit}.contribution-year-totals strong{color:var(--color-ink)}.digit-ticker{display:inline-block;font-variant-numeric:tabular-nums}.digit-roll{display:inline-flex}.digit-cell,.digit-separator{display:block;height:calc(var(--leading-digit) * 1em);line-height:var(--leading-digit);overflow:hidden}.digit-cell{width:1ch}.digit-column{display:block}.digit-column>span{display:block;height:calc(var(--leading-digit) * 1em)}.command-dialog{width:min(var(--palette-width),calc(100vw - var(--space-8)));max-height:calc(100dvh - var(--space-8));margin:var(--palette-top) auto 0;padding:0;border:var(--border-width) solid var(--color-line);border-radius:var(--radius-md);background:var(--color-bg);color:var(--color-ink);box-shadow:var(--shadow-dialog)}.command-dialog::backdrop{background:var(--color-overlay)}.command-surface{display:block}.command-top{display:flex;align-items:center;gap:var(--space-2);border-bottom:var(--border-width) solid var(--color-line);padding-right:var(--space-2)}.command-top input{width:100%;min-width:0;min-height:var(--touch-target);padding:var(--space-4) var(--space-5);border:0;outline:0;background:var(--color-transparent);color:inherit;font:inherit}.command-top input:focus-visible{outline:var(--focus-width) solid var(--color-focus);outline-offset:calc(-1 * var(--focus-width));border-radius:var(--radius-sm)}.command-close{border-color:var(--color-transparent);font-size:var(--text-title)}.command-results{list-style:none;margin:0;padding:var(--space-2);max-height:var(--palette-height);overflow-y:auto}.command-results li{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);min-height:var(--touch-target);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);cursor:pointer}.command-results li[aria-selected=true]{background:var(--color-soft)}.command-results small{color:var(--color-faint);font:var(--weight-regular) var(--text-small)/var(--leading-tight) var(--font-mono)}.command-empty{padding:var(--space-4) var(--space-5);color:var(--color-muted)}.command-help{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--space-2);padding:var(--space-3) var(--space-5);border-top:var(--border-width) solid var(--color-line);color:var(--color-faint);font:var(--weight-regular) var(--text-small)/var(--leading-tight) var(--font-mono)}@media(prefers-reduced-motion:no-preference){.island-control{transition:transform var(--duration-fast) var(--ease-spring),color var(--duration-fast),border-color var(--duration-fast)}.island-control:active:not(:disabled){transform:scale(var(--press-scale))}.project-highlight{transition:transform var(--duration-hover) var(--ease-spring),opacity var(--duration-hover)}.project-mark,.project-plus{transition:transform var(--duration-hover) var(--ease-spring),color var(--duration-fast)}.project-item[open] .project-detail{animation:project-detail-in var(--duration-detail) var(--ease-out)}.command-dialog[open] .command-surface{animation:palette-in var(--duration-ui) var(--ease-out)}.heat-scroll[data-phase=prepare] .heat-day{opacity:0;transform:scale(var(--heat-intro-scale))}.heat-scroll[data-phase=play] .heat-day{animation:heat-fill var(--duration-heat) var(--ease-out) calc(var(--heat-column) * var(--stagger-heat)) backwards}@keyframes project-detail-in{0%{opacity:0;transform:translateY(var(--space-2))}to{opacity:1;transform:translateY(0)}}@keyframes palette-in{0%{opacity:0;transform:translateY(var(--space-2)) scale(var(--press-scale))}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes heat-fill{0%{opacity:0;transform:scale(var(--heat-intro-scale))}to{opacity:1;transform:scale(1)}}.now-orb[data-visible=true] .globe-pin[data-visible=true]:after{animation:globe-pulse var(--duration-pulse) var(--ease-out) infinite}@keyframes globe-pulse{0%{opacity:var(--opacity-muted);transform:scale(1)}to{opacity:0;transform:scale(var(--globe-pulse-scale))}}@media(hover:hover)and (pointer:fine){.island-control:hover:not(:disabled){border-color:var(--color-faint);color:var(--color-ink)}.project-summary:hover .project-mark{transform:scale(var(--mark-hover-scale))}.project-summary:hover .project-plus{color:var(--color-ink)}}}@media(prefers-reduced-motion:reduce){.globe-canvas,.globe-pin{transition:none}}@media(max-width:40rem){.now-globe{width:min(100%,var(--globe-size-mobile))}.project-summary{grid-template-columns:var(--logo-size-row) minmax(0,1fr) var(--plus-size)}.project-meta{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-3);grid-column:2;grid-row:2;text-align:left}.project-plus{grid-column:3;grid-row:1}.project-detail{padding-left:var(--space-1)}.contribution-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.heat-weekdays{display:none}.contribution-detail-row{grid-template-columns:1fr}.contribution-years{width:100%}.contribution-years button{flex:1;padding-inline:var(--space-2)}.command-dialog{margin-top:var(--space-4)}.command-results{max-height:min(var(--palette-height),var(--palette-height-mobile))}}.command-label{display:inline-flex;align-items:center;gap:var(--space-3)}.command-search-icon{display:inline-flex;padding-left:var(--space-4);color:var(--color-muted)}.icon-button[data-astro-cid-2fz7baiw]{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);min-width:var(--touch-target);min-height:var(--touch-target);padding:var(--space-2);background:var(--color-bg);border:var(--border-width) solid var(--color-line);border-radius:var(--radius-sm);color:var(--color-muted);transition:color var(--duration-fast),border-color var(--duration-fast),transform var(--duration-press) var(--ease-spring)}@media(hover:hover){.icon-button[data-astro-cid-2fz7baiw]:hover{color:var(--color-ink);border-color:var(--color-faint)}}@media(prefers-reduced-motion:no-preference){.icon-button[data-astro-cid-2fz7baiw]:active{transform:scale(var(--press-scale))}}kbd[data-astro-cid-ipha4se6]{font:var(--weight-regular) var(--text-small)/var(--leading-tight) var(--font-mono);color:var(--color-muted)}.tooltip-wrap[data-astro-cid-m2p5xhda]{position:relative;display:inline-flex}.tooltip[data-astro-cid-m2p5xhda]{position:absolute;bottom:100%;left:50%;width:max-content;max-width:var(--tooltip-width);transform:translate(-50%);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);color:var(--color-bg);background:var(--color-ink);font:var(--weight-regular) var(--text-small)/var(--leading-body) var(--font-mono);opacity:0;visibility:hidden;pointer-events:none;z-index:var(--z-tooltip)}.tooltip-wrap[data-astro-cid-m2p5xhda]:focus-within .tooltip[data-astro-cid-m2p5xhda]{visibility:visible;opacity:1}@media(hover:hover){.tooltip-wrap[data-astro-cid-m2p5xhda]:hover .tooltip[data-astro-cid-m2p5xhda]{visibility:visible;opacity:1}}@media(prefers-reduced-motion:no-preference){.tooltip[data-astro-cid-m2p5xhda]{transition:opacity var(--duration-fast) var(--ease-out)}}:root{color-scheme:light;--color-bg: #fafaf9;--color-ink: #1c1917;--color-muted: #6b645f;--color-faint: #746d67;--color-line: #e7e5e4;--color-soft: #f0efed;--color-accent: #b84309;--color-focus: #b84309;--color-overlay: rgb(12 10 9 / 38%);--color-transparent: transparent;--color-heat-0: rgb(28 25 23 / 7%);--color-heat-1: rgb(28 25 23 / 24%);--color-heat-2: rgb(28 25 23 / 45%);--color-heat-3: rgb(28 25 23 / 70%);--color-heat-4: #1c1917;--color-atmosphere: rgb(154 170 186 / 24%);--color-specular: rgb(255 255 255 / 74%);--globe-base-color: .86, .88, .9;--globe-marker-color: .92, .35, .05;--globe-glow-color: .72, .77, .82;--globe-diffuse: 1.4;--globe-map-brightness: 1.5;--font-sans: "Instrument Sans Variable", "Instrument Sans Fallback", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;--text-display: clamp(2rem, 5.6vw, 2.75rem);--text-title: 1.375rem;--text-body: 1rem;--text-small: .8125rem;--leading-display: 1.08;--leading-title: 1.35;--leading-body: 1.6;--leading-tight: 1.2;--leading-digit: 1.15;--tracking-display: -.035em;--tracking-title: -.02em;--tracking-small: -.01em;--weight-regular: 400;--weight-medium: 500;--weight-semibold: 600;--space-0: 0;--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.25rem;--space-6: 1.5rem;--space-7: 1.75rem;--space-8: 2rem;--space-9: 2.25rem;--space-10: 2.5rem;--space-11: 2.75rem;--space-12: 3rem;--space-14: 3.5rem;--space-16: 4rem;--space-18: 4.5rem;--space-20: 5rem;--space-24: 6rem;--section-gap: var(--space-18);--section-gap-mobile: var(--space-14);--page-width: 47.5rem;--page-width-wide: 76rem;--identity-width: 21rem;--identity-mark-size: 4rem;--identity-sticky-top: var(--space-8);--identity-gap: var(--space-16);--globe-size-compact: 5rem;--page-gutter: var(--space-6);--readable-width: 36em;--lede-width: 30em;--touch-target: 2.75rem;--border-width: 1px;--focus-width: 2px;--focus-offset: 3px;--underline-offset: .2em;--radius-xs: .25rem;--radius-sm: .5rem;--radius-md: .75rem;--radius-lg: 1.25rem;--radius-phone: 1.5rem;--radius-pill: 999px;--shadow-none: none;--shadow-dialog: 0 1.5rem 3.75rem rgb(0 0 0 / 18%);--shadow-globe: 0 .75rem 2.25rem rgb(28 25 23 / 12%);--duration-press: .12s;--duration-fast: .16s;--duration-ui: .18s;--duration-hover: .2s;--duration-page: .3s;--duration-expand: .38s;--duration-detail: .4s;--duration-heat: .45s;--duration-shared: .5s;--duration-reveal: .6s;--duration-word: .7s;--duration-globe: .9s;--duration-ticker: 1.1s;--duration-intro-end: 1.16s;--duration-intro-cleanup: 1.2s;--duration-settle: 1.4s;--duration-pulse: 2.4s;--delay-word: 80ms;--stagger-word: 45ms;--stagger-reveal: 55ms;--stagger-digit: 60ms;--stagger-heat: 12ms;--stagger-timeline: 90ms;--delay-timeline: .12s;--delay-globe: .2s;--delay-lede: .38s;--delay-links: .46s;--delay-now: .56s;--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-inout: cubic-bezier(.65, 0, .35, 1);--ease-spring: cubic-bezier(.34, 1.3, .64, 1);--ease-linear: linear;--spring-globe-stiffness: 100;--spring-globe-damping: 18;--spring-globe-mass: 1;--press-scale: .97;--hover-scale: 1.04;--mark-hover-scale: 1.08;--intro-scale: .94;--reveal-distance: .875rem;--intro-distance: .625rem;--nudge-distance: .25rem;--phone-lift: -.375rem;--word-travel: 112%;--word-descender: .14em;--globe-size: 21rem;--globe-size-mobile: 24rem;--globe-drift: -1.75rem;--globe-drift-range: 40rem;--phone-width: 9.25rem;--phone-width-case: 11.25rem;--phone-width-gallery: 10.25rem;--phone-width-mobile: 8.25rem;--phone-ratio: 9 / 19.5;--mark-size: 2.25rem;--status-size: .4375rem;--palette-width: 32.5rem;--palette-height: 22rem;--palette-top: 14vh;--heat-size: .625rem;--heat-gap: .125rem;--heat-radius: .15625rem;--heat-intro-scale: .4;--tooltip-width: 16rem;--timeline-date-width: 4.75rem;--row-date-width: 7rem;--plus-size: .75rem;--icon-size: 1.125rem;--icon-size-sm: .875rem;--icon-size-md: var(--icon-size);--icon-size-lg: 1.25rem;--icon-stroke: 1.75;--logo-size-row: 2.5rem;--logo-size-card: 3.5rem;--logo-size-hero: 4.5rem;--logo-radius: 24%;--logo-inner-border: inset 0 0 0 var(--border-width) var(--color-line);--avatar-size-mobile: 3.5rem;--avatar-size-tablet: 4rem;--avatar-size-desktop: 4.5rem;--avatar-size-small: 2rem;--avatar-wave-size: 2rem;--shadow-avatar: 0 .25rem .75rem rgb(0 0 0 / 10%);--duration-wave: .6s;--shadow-phone: 0 1.5rem 2.5rem rgb(0 0 0 / 14%), 0 .25rem .5rem rgb(0 0 0 / 10%);--device-bezel: 5px;--device-frame-color: #292524;--store-badge-height: 40px;--store-play-badge-height: 56px;--store-badge-clear-space: 10px;--device-gap: var(--space-5);--phone-stage-padding: var(--space-8);--color-heat-accent: var(--color-accent);--heat-weekday-width: 2rem;--language-bar-height: .375rem;--opacity-muted: .7;--z-highlight: -1;--z-tooltip: 10;--z-nav: 20;--theme-control-width: 6rem;--globe-static-fill: radial-gradient(circle at 32% 26%, var(--color-soft), var(--color-line) 64%, var(--color-muted));--globe-atmosphere-fill: radial-gradient(circle, var(--color-transparent) 56%, var(--color-atmosphere) 66%, var(--color-transparent) 73%);--globe-specular-fill: radial-gradient(ellipse at 32% 23%, var(--color-specular), var(--color-transparent) 48%);--globe-atmosphere-scale: 1.08;--globe-specular-opacity: .45;--globe-placeholder-size: 6rem;--globe-pin-size: .5rem;--globe-conditions-height: 3.2em;--globe-pulse-scale: 3.6;--plus-open-angle: 45deg;--heat-label-height: 1.25rem;--palette-height-mobile: 55dvh}@supports (transition-timing-function: linear(0,1)){:root{--ease-spring: linear(0, .079 5%, .254 10%, .456 15%, .643 20%, .795 25%, .906 30%, .979 35%, 1.022 40%, 1.041 45%, 1.046 50%, 1.034 60%, 1.016 70%, 1.004 80%, .999 90%, 1)}}:root[data-theme=dark]{color-scheme:dark;--color-bg: #0c0a09;--color-ink: #f5f5f4;--color-muted: #b5aea8;--color-faint: #aaa29b;--color-line: #292524;--color-soft: #1a1816;--color-accent: #fb923c;--color-focus: #fb923c;--color-heat-0: rgb(245 245 244 / 7%);--color-heat-1: rgb(245 245 244 / 22%);--color-heat-2: rgb(245 245 244 / 42%);--color-heat-3: rgb(245 245 244 / 68%);--color-heat-4: #f5f5f4;--color-atmosphere: rgb(147 170 196 / 18%);--color-specular: rgb(255 255 255 / 28%);--globe-base-color: .15, .17, .19;--globe-marker-color: .98, .57, .24;--globe-glow-color: .12, .15, .18;--globe-diffuse: 1.5;--globe-map-brightness: 4;--shadow-globe: 0 .75rem 2.25rem rgb(0 0 0 / 35%)}@media(prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-bg: #0c0a09;--color-ink: #f5f5f4;--color-muted: #b5aea8;--color-faint: #aaa29b;--color-line: #292524;--color-soft: #1a1816;--color-accent: #fb923c;--color-focus: #fb923c;--color-heat-0: rgb(245 245 244 / 7%);--color-heat-1: rgb(245 245 244 / 22%);--color-heat-2: rgb(245 245 244 / 42%);--color-heat-3: rgb(245 245 244 / 68%);--color-heat-4: #f5f5f4}}:root{--og-width: 1200;--og-height: 630;--og-font-family: Instrument Sans;--og-padding-block: 64px;--og-padding-inline: 72px;--og-header-size: 24;--og-eyebrow-size: 23;--og-eyebrow-gap: 20;--og-title-size: 72;--og-title-size-long: 52;--og-title-line-height: 1.07;--og-title-tracking: -2px;--og-title-max-width: 1020;--og-title-length-threshold: 42;--og-description-size: 28;--og-description-line-height: 1.45;--og-description-max-width: 970;--og-description-gap: 24;--og-footer-gap: 20;--og-footer-size: 22}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:var(--space-6)}body{margin:0;background:var(--color-bg);color:var(--color-ink);font:var(--weight-regular) var(--text-body)/var(--leading-body) var(--font-sans);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}button,input{font:inherit;color:inherit}button{cursor:pointer}button:disabled{cursor:default}a{color:inherit;text-decoration-color:var(--color-faint);text-underline-offset:var(--underline-offset)}p,h1,h2,h3,dl,dd{margin:0}img,svg,canvas{display:block;max-width:100%}[hidden]{display:none!important}:focus-visible{outline:var(--focus-width) solid var(--color-focus);outline-offset:var(--focus-offset);border-radius:var(--radius-xs)}::selection{color:var(--color-bg);background:var(--color-ink)}.page{width:100%;max-width:var(--page-width);margin-inline:auto;padding-inline:var(--page-gutter);padding-bottom:var(--space-24)}@media(min-width:64rem){.page-wide{max-width:var(--page-width-wide)}}.sr-only{position:absolute;width:var(--border-width);height:var(--border-width);padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.skip-link{position:absolute;top:var(--space-2);left:var(--space-2);padding:var(--space-3) var(--space-4);background:var(--color-ink);color:var(--color-bg);z-index:var(--z-nav);transform:translateY(-200%)}.skip-link:focus{transform:none}.mono{font:var(--weight-regular) var(--text-small)/var(--leading-body) var(--font-mono);letter-spacing:var(--tracking-small)}.muted{color:var(--color-muted)}.note{font:var(--weight-regular) var(--text-small)/var(--leading-body) var(--font-mono);color:var(--color-faint);margin-top:var(--space-4);max-width:var(--readable-width)}.lede{max-width:var(--lede-width);color:var(--color-muted);text-wrap:pretty}.links,.actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-1) var(--space-5)}.links{margin-top:var(--space-5)}.actions{margin-top:var(--space-6);gap:var(--space-2) var(--space-5)}.facts{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-8);margin-top:var(--space-5);font:var(--weight-regular) var(--text-small)/var(--leading-body) var(--font-mono)}.facts dt{color:var(--color-faint)}.facts dd{margin:0}.mark{width:var(--mark-size);height:var(--mark-size);flex:none;border-radius:var(--radius-sm);background:var(--color-soft);border:var(--border-width) solid var(--color-line);display:grid;place-items:center;font:var(--weight-medium) var(--text-small)/var(--leading-tight) var(--font-mono);transition:transform var(--duration-hover) var(--ease-spring)}.mark-solid{background:var(--color-ink);color:var(--color-bg);border-color:var(--color-ink)}.status{font:var(--weight-regular) var(--text-small)/var(--leading-body) var(--font-mono)}.status:before{content:"";display:inline-block;width:var(--status-size);height:var(--status-size);border-radius:var(--radius-pill);margin-right:var(--space-2);border:var(--border-width) solid var(--color-faint)}.status[data-status=Live]:before{background:var(--color-accent);border-color:var(--color-accent)}.status[data-status="Open source"]:before{background:var(--color-ink);border-color:var(--color-ink)}.page-heading{padding-top:var(--space-10)}h1{font-size:var(--text-display);line-height:var(--leading-display);letter-spacing:var(--tracking-display);font-weight:var(--weight-semibold);margin-bottom:var(--space-5)}.prose{max-width:var(--readable-width)}.prose h2,.prose h3{font-size:var(--text-title);font-weight:var(--weight-semibold);line-height:var(--leading-title);letter-spacing:var(--tracking-title);margin-top:var(--space-12);margin-bottom:var(--space-2)}.prose p+p{margin-top:var(--space-4)}.prose ul{padding-left:var(--space-5);margin-block:var(--space-2)}.prose a{overflow-wrap:anywhere}.prose pre{background:var(--color-soft);padding:var(--space-4);overflow-x:auto;border-radius:var(--radius-sm)}.prose code{font-family:var(--font-mono);font-size:var(--text-small)}.prose blockquote{border-left:var(--focus-width) solid var(--color-line);margin-inline:0;padding-left:var(--space-4);color:var(--color-muted)}.subpage-nav{margin-top:var(--space-6)}.word-mask{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:var(--word-descender);margin-bottom:calc(-1 * var(--word-descender))}.word-mask>span{display:inline-block}.quiet{color:var(--color-faint)}.timeline{position:relative;list-style:none;margin:0;padding:0}.timeline:before{content:"";position:absolute;left:var(--space-1);top:var(--space-3);bottom:var(--space-3);width:var(--border-width);background:var(--color-line);transform-origin:top}.timeline li{position:relative;display:grid;grid-template-columns:var(--timeline-date-width) 1fr;gap:var(--space-3);padding:var(--space-2) 0 var(--space-2) var(--space-6)}.timeline li:before{content:"";position:absolute;left:0;top:var(--space-4);width:var(--status-size);height:var(--status-size);border-radius:var(--radius-pill);background:var(--color-bg);border:var(--border-width) solid var(--color-faint)}.timeline li:first-child:before{background:var(--color-accent);border-color:var(--color-accent)}.timeline time,.timeline .planned{font-family:var(--font-mono);font-size:var(--text-small);color:var(--color-muted)}.timeline li>p{color:var(--color-muted)}.timeline strong{color:var(--color-ink);font-weight:var(--weight-semibold)}::view-transition-old(root),::view-transition-new(root){animation-duration:var(--duration-page);animation-timing-function:var(--ease-out)}::view-transition-group(suby-mark),::view-transition-group(suby-title),::view-transition-group(suby-phone){animation-duration:var(--duration-shared);animation-timing-function:var(--ease-out)}@media(prefers-reduced-motion:no-preference){@keyframes intro-word{0%{transform:translateY(var(--word-travel))}}@keyframes intro-rise{0%{opacity:0;transform:translateY(var(--intro-distance))}}@keyframes intro-orb{0%{opacity:0;transform:scale(var(--intro-scale))}}@keyframes intro-fade{0%{opacity:0}}.intro .site-header{animation:intro-fade var(--duration-detail) var(--ease-out) both}.intro .word-mask>span{animation:intro-word var(--duration-word) var(--ease-out) both;animation-delay:calc(var(--delay-word) + var(--word-index, 0) * var(--stagger-word))}.intro .intro-item{animation:intro-rise var(--duration-reveal) var(--ease-out) var(--intro-delay, 0ms) both}.intro .hero-orb{animation:intro-orb var(--duration-globe) var(--ease-out) var(--delay-globe) both}.reveal-ready [data-reveal=up]:not(.is-visible){opacity:0;transform:translateY(var(--reveal-distance))}.reveal-ready [data-reveal=up]{transition:opacity var(--duration-reveal) var(--ease-out) var(--reveal-delay, 0ms),transform var(--duration-reveal) var(--ease-out) var(--reveal-delay, 0ms)}.reveal-ready .timeline:not(.is-visible):before{transform:scaleY(0)}.reveal-ready .timeline:before{transition:transform var(--duration-globe) var(--ease-inout)}.reveal-ready .timeline:not(.is-visible) li{opacity:0;transform:translate(calc(-1 * var(--intro-distance)))}.reveal-ready .timeline li{transition:opacity var(--duration-shared) var(--ease-out),transform var(--duration-shared) var(--ease-out);transition-delay:calc(var(--delay-timeline) + var(--entry-index, 0) * var(--stagger-timeline))}.case-enter{animation:intro-rise var(--duration-shared) var(--ease-out) both;animation-delay:calc(var(--delay-timeline) + var(--entry-index, 0) * var(--stagger-reveal))}}@media(hover:hover){a:hover{text-decoration-color:var(--color-ink)}}@media(max-width:40rem){.page-heading{padding-top:var(--space-6)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}}.icon{display:inline-block;flex:none;width:var(--icon-current-size, var(--icon-size));height:var(--icon-current-size, var(--icon-size));stroke-width:var(--icon-stroke);vertical-align:-.15em}.project-logo{position:relative;display:inline-grid;place-items:center;flex:none;width:var(--logo-size-row);height:var(--logo-size-row);border-radius:var(--logo-radius);background:var(--color-soft);overflow:hidden;font:var(--weight-medium) var(--text-small)/1 var(--font-mono)}.project-logo:after{content:"";position:absolute;inset:0;border-radius:inherit;box-shadow:var(--logo-inner-border);pointer-events:none}.project-logo-card{width:var(--logo-size-card);height:var(--logo-size-card)}.project-logo-hero{width:var(--logo-size-hero);height:var(--logo-size-hero)}.project-logo picture,.project-logo img{display:block;width:100%;height:100%;object-fit:contain}.site-header[data-astro-cid-37fxchfa]{display:flex;justify-content:space-between;align-items:center;padding-block:var(--space-6);gap:var(--space-4)}@media(max-width:63.999rem){.site-header[data-astro-cid-37fxchfa]{position:sticky;top:0;z-index:var(--z-nav);background:var(--color-bg);padding-block:var(--space-3);border-bottom:var(--border-width) solid var(--color-line)}}.wordmark[data-astro-cid-37fxchfa]{display:inline-flex;align-items:center;min-height:var(--touch-target);font-size:var(--text-title);font-weight:var(--weight-semibold);letter-spacing:var(--tracking-display);text-decoration:none}.header-identity[data-astro-cid-37fxchfa]{display:inline-flex;align-items:center;gap:var(--space-3)}.header-tools[data-astro-cid-37fxchfa]{display:flex;gap:var(--space-2);align-items:center}.palette-trigger[data-astro-cid-37fxchfa],.theme-trigger[data-astro-cid-37fxchfa]{display:none}.js .palette-trigger[data-astro-cid-37fxchfa],.js .theme-trigger[data-astro-cid-37fxchfa]{display:inline-flex}.mobile-search[data-astro-cid-37fxchfa]{display:none}@media(min-width:64rem){.footer-in-column[data-astro-cid-37fxchfa]{margin-left:calc(var(--identity-width) + var(--identity-gap))}}@media(max-width:40rem){.mobile-search[data-astro-cid-37fxchfa]{display:inline}.desktop-key[data-astro-cid-37fxchfa]{display:none}}
