d8c0a37210
Four fixes: 1. Settings > Services tab: master/detail layout. Replaced the vertical stack of ServiceConfigEditor cards with a SelectionRailCard (list on left) + SectionCard (details on right) — same pattern as Machines and SSH Keys tabs. Click a service in the rail to edit it. 2. Service Overview widget restriction. When adding widgets on a service's Overview, the dialog now only shows built-in widgets + widgets for THAT service type (not all services). Dashboard/named dashboards (no serviceId) still see all. 3. Reorder buttons fixed. The swap-sort_order approach was a no-op when both items had sort_order=0 (the default). Now moveInstance renumbers ALL items by their new index position (i * 10) after the swap, guaranteeing values change. References use updateRef, owned widgets use saveWidget, both sequential. 4. Media index worker resolution. The subprocess worker called get_jellyfin_client/get_user_id (FastAPI request dependencies) which don't work outside request context. Now accepts a service_id parameter (passed from post_build_index) and resolves the Jellyfin instance directly from the settings store via _resolve_jellyfin. Raises RuntimeError (not HTTPException) on failure. 283 backend tests pass; 128 frontend tests pass; ruff/eslint clean.