fix(ui+seed): FOUC eliminated + persistent dev-user
Seed:
- DevUserSeeder: idempotent — creates workspace + WorkspaceMember + sets
default_workspace_id. Auto-recreates everything on migrate:fresh --seed.
- DatabaseSeeder: PlanSeeder first (nexxo needs a plan), then DevUserSeeder
always, DemoDataSeeder only in local/dev env.
- DevUserSeederTest: create + idempotent + in-DatabaseSeeder + order check.
- Removed WithoutModelEvents trait from DatabaseSeeder (was suppressing
model observers needed for workspace creation).
UI (nimuli-app.blade.php):
- Inline JS theme-init before first paint: reads localStorage nimuli_theme,
falls back to server-side user preference. Eliminates theme flash on reload.
- Critical CSS in <head>: CSS vars, body opacity 0 → 1 fade (120ms),
skeleton sidebar + topbar visible during JS load.
- app-spinner shown until app-ready class added by markReady().
- Skeleton + spinner hidden via body.app-ready CSS selector.
- livewire:navigated event re-triggers markReady() for SPA navigation.
- x-cloak on mobile sidebar overlay to prevent pre-Alpine flash.
Bash aliases added to ~/.bashrc:
- seed-dev → db:seed --class=DevUserSeeder
- migrate-fresh → migrate:fresh --seed
- reset-db → migrate:fresh --seed (with confirmation message)
Tests: 109/109 passing. Smoke: all routes ✅. DB sanity ✅.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>