3ac1431336
The analytics page had the same view-envelope gap just fixed on the trades page: a connected wallet that hadn't first visited Settings only saw "Private performance is locked" with no way to unlock in place. Added an "Unlock performance" button that mints a view_user envelope (one signature, no gas) — which both /performance and /trades accept — then reloads. Public signal-accuracy still loads regardless. Refactored the loader to a reusable loadAll(forcedEnv?) with an aliveRef guard, mirroring TradesPageClient. Verified backend contracts unchanged: /performance accepts view_performance or view_user; /signals/accuracy still returns overall + by_signal + total_directional_signals. tsc + next build clean. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>