/* Native cursors stay responsive even when page scripts are busy. */
.cursor-tracker { display: none !important; }
@media (hover: hover) and (pointer: fine) {
  html:root body, html:root body * {
    cursor: url('/images/cursor-default-v2.png') 4 3, auto !important;
  }
  html:root body a, html:root body button, html:root body [role="button"],
  html:root body [data-cursor="scale"], html:root body input[type="submit"],
  html:root body input[type="button"], html:root body a *, html:root body button * {
    cursor: url('/images/cursor-action-v2.png') 13 3, pointer !important;
  }
  html:root body input:not([type="button"]):not([type="submit"]),
  html:root body textarea, html:root body [contenteditable="true"] { cursor: text !important; }
}
@media (pointer: coarse) {
  html:root body .tab-bar .tab {
    width: 44px !important;
    height: 44px !important;
    flex-shrink: 0 !important;
  }
  html:root body .tab-bar { gap: 0 !important; }
  html:root body .tab-bar.is-mini:not(.is-nav-engaged) .tab { width:16px !important;height:44px !important; }
  html:root body .tab-bar.is-mini:not(.is-nav-engaged) { padding:6px 12px !important; }
}
html:root .tab-bar { --nav-dot:#1b1b1b80;--nav-dot-active:#1b1b1b; }
html:root.dark .tab-bar { --nav-dot:#be37378c;--nav-dot-active:#c0392b; }
html:root body[data-direction="flight"] .tab-bar { --nav-dot:#dedbd180;--nav-dot-active:#dedbd1; }
html:root body .tab-bar.is-mini .tab-circle:after { background:var(--nav-dot) !important; }
html:root body .tab-bar.is-mini .tab.is-active .tab-circle:after { background:var(--nav-dot-active) !important; }
html:root body .tab-bar.is-mini:not(.is-nav-engaged) .tab-icon { background:var(--nav-dot) !important; }
html:root body .tab-bar.is-mini:not(.is-nav-engaged) .tab.is-active .tab-icon { background:var(--nav-dot-active) !important; }
/* Unscoped navigation (Projects and Home) uses the icon itself as its dot. */
html:root body .tab-bar:not([data-astro-cid-s6oy5d3q]).is-mini:not(.is-nav-engaged){padding:6px 8px !important}
html:root body .tab-bar:not([data-astro-cid-s6oy5d3q]).is-mini:not(.is-nav-engaged) .tab{width:24px;height:24px}
html:root body .tab-bar:not([data-astro-cid-s6oy5d3q]).is-mini:not(.is-nav-engaged) .tab-icon{width:6px;height:6px;border-radius:50%;mask:none;-webkit-mask:none;transform:none!important}
html:root body .tab-bar.is-mini:not(.is-nav-engaged) .tab-tooltip{opacity:0!important}
/* Unscoped pages need the same active circle as the compiled navigation. */
html:root body .tab-bar[data-astro-cid-s6oy5d3q]:is(:not(.is-mini),.is-nav-engaged) .tab.is-active .tab-circle{border-radius:50%!important;background:#1b1b1b0d!important;box-shadow:inset 0 0 0 1px #1b1b1b10!important}
html:root.dark body .tab-bar[data-astro-cid-s6oy5d3q]:is(:not(.is-mini),.is-nav-engaged) .tab.is-active .tab-circle{background:#ffffff0d!important;box-shadow:inset 0 0 0 1px #ffffff14!important}
html:root body .tab-bar:not([data-astro-cid-s6oy5d3q]) .tab.is-active{background:#1b1b1b0d;box-shadow:inset 0 0 0 1px #1b1b1b10}
html:root.dark body .tab-bar:not([data-astro-cid-s6oy5d3q]) .tab.is-active{background:#ffffff0d;box-shadow:inset 0 0 0 1px #ffffff14}
html:root body .tab-bar:not([data-astro-cid-s6oy5d3q]).is-mini:not(.is-nav-engaged) .tab.is-active{background:transparent;box-shadow:none}
/* One easing curve keeps the capsule, slots and artwork moving together. */
html:root body .tab-bar {
  transition:padding .24s cubic-bezier(.22,1,.36,1),gap .24s cubic-bezier(.22,1,.36,1),background-color .2s ease,box-shadow .2s ease !important;
}
html:root body .tab-bar .tab,html:root body .tab-bar .tab-circle {
  transition:width .24s cubic-bezier(.22,1,.36,1),height .24s cubic-bezier(.22,1,.36,1),color .2s ease !important;
}
html:root body .tab-bar .tab-icon {
  transition:width .24s cubic-bezier(.22,1,.36,1),height .24s cubic-bezier(.22,1,.36,1),opacity .12s ease,transform .14s ease-out,background-color .2s ease !important;
  transition-delay:0s!important;
  filter:none !important;
}
@media(prefers-reduced-motion:reduce){html:root body .tab-bar,html:root body .tab-bar .tab,html:root body .tab-bar .tab-circle,html:root body .tab-bar .tab-icon{transition:none!important}}
/* Tiny visible capsule, with a 44px transparent tap area on touch screens. */
html:root body .tab-bar .tab{position:relative!important;display:grid!important;place-items:center!important;width:44px!important;height:44px!important;min-width:44px!important;flex-shrink:0!important;border-radius:0!important;overflow:visible!important;isolation:isolate}
html:root body .tab-bar .tab-circle{position:relative!important;display:grid!important;place-items:center!important;width:44px!important;height:44px!important;pointer-events:none!important}
html:root body .tab-bar .tab-icon{display:block!important;width:32px!important;height:32px!important;pointer-events:none!important}
html:root body .tab-bar:not([data-astro-cid-s6oy5d3q]) .tab.is-active{background:transparent!important;box-shadow:none!important}
html:root body .tab-bar:not([data-astro-cid-s6oy5d3q]) .tab.is-active::before{content:"";position:absolute;inset:0;border-radius:50%;background:#1b1b1b0d;box-shadow:inset 0 0 0 1px #1b1b1b10;pointer-events:none;z-index:-1}
html:root.dark body .tab-bar:not([data-astro-cid-s6oy5d3q]) .tab.is-active::before{background:#ffffff0d;box-shadow:inset 0 0 0 1px #ffffff14}
html:root body .tab-bar.is-mini:not(.is-nav-engaged) .tab.is-active::before{display:none!important}
html:root body .tab-bar.is-mini:not(.is-nav-engaged){padding:6px 8px!important;gap:4px!important;min-height:0!important}
html:root body .tab-bar.is-mini:not(.is-nav-engaged) .tab{width:12px!important;height:12px!important;min-width:12px!important;min-height:12px!important;padding:0!important}
html:root body .tab-bar.is-mini:not(.is-nav-engaged) .tab-circle{width:12px!important;height:12px!important;background:transparent!important;box-shadow:none!important}
html:root body .tab-bar.is-mini:not(.is-nav-engaged) .tab-circle::after{position:absolute!important;left:50%!important;top:50%!important;transform:translate(-50%,-50%)!important;width:6px!important;height:6px!important;border-radius:50%!important;filter:none!important}
html:root body .tab-bar.is-mini:not(.is-nav-engaged) .tab-icon{width:6px!important;height:6px!important;border-radius:50%!important;transform:none!important;filter:none!important}
html:root body .tab-bar[data-astro-cid-s6oy5d3q].is-mini:not(.is-nav-engaged) .tab-icon{opacity:0!important}
html:root body .tab-bar:not([data-astro-cid-s6oy5d3q]).is-mini:not(.is-nav-engaged) .tab-icon{opacity:1!important}
@media(pointer:coarse){html:root body .tab-bar.is-mini:not(.is-nav-engaged)::before{content:"";position:absolute;inset:-10px 0;pointer-events:auto}}
/* Layout lands immediately. Only the background and icon positions animate. */
html:root body .tab-bar[data-nav-motion]{background:transparent!important;box-shadow:none!important;border-color:transparent!important;transition:none!important;isolation:isolate}
html:root body .tab-bar[data-nav-motion] .tab,html:root body .tab-bar[data-nav-motion] .tab-circle,html:root body .tab-bar[data-nav-motion] .tab-icon{transition:color .15s ease,background-color .15s ease!important}
.nav-motion-surface{position:absolute;inset:0;border-radius:inherit;background:#fffffff0;box-shadow:0 8px 24px #00000010;border:1px solid #00000005;z-index:-1;pointer-events:none;transform-origin:center}
html.dark .nav-motion-surface{background:#1b1b1bf0;border-color:#ffffff0a;box-shadow:0 8px 24px #0002}
body[data-direction=flight] .nav-motion-surface{background:#111521f0;border-color:#ffffff10}
html:root body .tab-bar .nav-motion-ghost{position:absolute;left:50%;top:50%;mask-size:contain;-webkit-mask-size:contain;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-position:center;-webkit-mask-position:center;border-radius:50%;pointer-events:none;z-index:3;transform:translate(-50%,-50%)}
/* Keep touch targets, trim only the unused space between them. */
@media(max-width:640px){html:root body .tab-bar:not(.is-mini),html:root body .tab-bar.is-nav-engaged{padding:8px!important;gap:2px!important;max-width:calc(100vw - 32px)!important}}
html:root body .tab-bar .tab-circle{transition:width .28s cubic-bezier(.22,1,.36,1),height .28s cubic-bezier(.22,1,.36,1),background-color .2s!important}
