Builder: replace hand-rolled drag with SortableJS (fixes glitch/gap)

The custom pointer-drag rebuilt the DOM on every midpoint crossing, which fought the cursor and left gaps. Swap in SortableJS (vanilla, CDN, ~40KB):

• grip is the handle; smooth animated reordering with a real ghost placeholder (row-ghost) and a floating drag clone (row-drag, forceFallback+fallbackOnBody);

• rows now live in a flex .rows list with uniform gap — removed the between-row .addgap strips that caused the gapping; insert (⊕) moved into the row header;

• onEnd syncs state.sections and re-renders once (no mid-drag rebuilds).

▶ Play it: Neon Fiscal Year → Benthic Patience → Silken Reentry — a constellation across three families — the path is the mix https://stellate.app/?genre=citypop&seed=8629&path=1530.6221,586.10667,1376.19565&xdur=0.056

511545d https://github.com/aboard-io/stellate/commit/511545d57736fca96ac9db8c16a43c31a754308c