/* Neo Source: one connection, two endpoints. All geometry stays in its frame. */
.neo-brand{--neo-accent:#7532d6;display:inline-flex;align-items:center;gap:10px;vertical-align:middle;color:inherit;white-space:nowrap;line-height:1;font-family:Arial,Helvetica,sans-serif;letter-spacing:normal}
:root[data-theme=dark] .neo-brand,.site-header .neo-brand,.landing-header .neo-brand{--neo-accent:#8b4be3}
.neo-brand .neo-mark{display:block;width:34px;height:34px;flex:none;fill:none;stroke:none;overflow:visible}
.neo-brand .neo-mark path{fill:none;stroke:currentColor;stroke-width:6.4;stroke-linecap:round;stroke-linejoin:round}
.neo-brand .neo-mark .neo-track{opacity:.12}
.neo-brand .neo-rail,.neo-brand .neo-bridge{stroke-dasharray:1;stroke-dashoffset:0}
.neo-brand .neo-left{animation:neo-left-in 1.15s cubic-bezier(.3,0,.2,1) both}
.neo-brand .neo-bridge{animation:neo-bridge-in 1.15s cubic-bezier(.3,0,.2,1) both}
.neo-brand .neo-right{animation:neo-right-in 1.15s cubic-bezier(.3,0,.2,1) both}
.neo-brand .neo-mark .neo-flow{stroke:var(--neo-accent);stroke-dasharray:.12 .88;stroke-dashoffset:1;opacity:0}
.neo-brand .neo-mark .neo-node{fill:none;stroke:var(--neo-accent);stroke-width:6.4;stroke-linecap:round;stroke-dasharray:none;transform:none;opacity:1}
.neo-brand .neo-name{display:flex;align-items:baseline;gap:0;font-size:24px;line-height:1;letter-spacing:-.9px}
.neo-brand .neo-name b{font-weight:700}.neo-brand .neo-name b:last-child{font-weight:600}
:is(.wordmark,.landing-wordmark,.landing-footer-brand,.footer-brand)[data-neo-brand]{display:inline-flex;align-items:center;flex:none;text-decoration:none;line-height:1;letter-spacing:normal}
.drawer-heading [data-neo-brand]{line-height:1}.drawer-heading .neo-name{font-size:23px}
.footer-brand .neo-mark{width:28px;height:28px}.footer-brand .neo-name{font-size:22px}
.entry-brand{display:flex;justify-content:center;margin-bottom:26px}
.entry-brand .neo-brand{flex-direction:column;gap:18px}.entry-brand .neo-mark{width:96px;height:96px}.entry-brand .neo-name{font-size:32px;letter-spacing:-1.1px}
/* Loading (data-neo-loop): the N draws itself once, then a purple pulse keeps running through it —
   up the left rail, across, up the right rail — and the end node answers each time it arrives. */
.neo-brand[data-neo-loop] .neo-left{animation:neo-left-in .9s cubic-bezier(.3,0,.2,1) both}
.neo-brand[data-neo-loop] .neo-bridge{animation:neo-bridge-in .9s cubic-bezier(.3,0,.2,1) both}
.neo-brand[data-neo-loop] .neo-right{animation:neo-right-in .9s cubic-bezier(.3,0,.2,1) both}
.neo-brand[data-neo-loop] .neo-mark .neo-flow{opacity:1;stroke-dasharray:.22 1.2;stroke-dashoffset:.22;animation:neo-run 1.3s cubic-bezier(.45,0,.4,1) .75s infinite}
.neo-brand[data-neo-loop] .neo-mark .neo-node{animation:neo-beat 1.3s ease-out .75s infinite}
.neo-brand[data-neo-loop] .neo-name{animation:neo-name-in .6s cubic-bezier(.2,.8,.2,1) .35s both}
@keyframes neo-run{from{stroke-dashoffset:.22}to{stroke-dashoffset:-1}}
@keyframes neo-beat{0%,80%{stroke-width:6.4}90%{stroke-width:10}100%{stroke-width:6.4}}
@keyframes neo-name-in{from{opacity:0;transform:translateY(6px)}}
@keyframes neo-left-in{0%{stroke-dashoffset:1}28%,100%{stroke-dashoffset:0}}
@keyframes neo-bridge-in{0%,18%{stroke-dashoffset:1}54%,100%{stroke-dashoffset:0}}
@keyframes neo-right-in{0%,43%{stroke-dashoffset:1}72%,100%{stroke-dashoffset:0}}
@keyframes neo-flow{0%,35%{stroke-dashoffset:1;opacity:0}40%{opacity:1}83%{stroke-dashoffset:0;opacity:1}94%,100%{stroke-dashoffset:0;opacity:0}}
@media(hover:hover){a:hover .neo-brand:not([data-neo-loop]) .neo-flow{animation:neo-flow 1.05s ease both}}
a:focus-visible .neo-brand:not([data-neo-loop]) .neo-flow{animation:neo-flow 1.05s ease both}
@media(max-width:760px){
 .site-header .neo-brand,.landing-header .neo-brand{gap:7px}
 .site-header .neo-mark,.landing-header .neo-mark{width:30px;height:30px}
 .site-header .neo-name,.landing-header .neo-name{flex-direction:row;align-items:baseline;gap:0;font-size:18px;letter-spacing:-.45px}
 .landing-header-inner{gap:10px}.drawer-heading{gap:10px}.drawer-heading .neo-brand{gap:7px}.drawer-heading .neo-name{font-size:21px}.drawer-heading .neo-mark{width:30px;height:30px}
}
@media(max-width:360px){.site-header .neo-brand{gap:5px}.site-header .neo-mark{width:26px;height:26px}.site-header .neo-name{font-size:17px}.drawer-heading .neo-name{font-size:19px}}
@media(prefers-reduced-motion:reduce){.neo-brand .neo-mark *{animation:none!important;stroke-dashoffset:0}.neo-brand .neo-mark .neo-flow{opacity:0!important}.neo-brand .neo-node{transform:none;opacity:1}}
