Wire resolveLivePosition into render + snap/group + resize — tiles no longer strand off-viewport
The visible fix. All tile x/y reads now go through resolvedTilesArray so docked tiles use viewport-relative coords and floating/legacy tiles are clamped into bounds. Stranded tiles (x:3092 from ultrawide sessions) are pulled into view on next render without migration.
v103.1.12026-06-02
·resolvedTilesArray(raw, viewport): single upstream resolution pass — docked→derived, floating/legacy→clamped. All downstream reads (deriveGroups, GroupBar, GroupOutline, getLiveTiles) see live coords.
·TileLayer: viewport state + debounced resize listener (100ms) so tiles reflow on window resize; resolved array in useMemo([raw,viewport])
·getLiveTiles/getLiveTile in TileProvider now resolve positions — snap and reconcile math in event handlers sees live coords
·FloatingTile: docked tile flipped to "floating" on drag start (tile.x/y is the resolved position from TileLayer, so drag origin is correct)
·Legacy/no-mode tiles default to floating+clamp — stranded tiles rescued this pass without formal migration