Project, estimate, and photo-sharing reliability fixes

Fix project-create error reporting, estimate tab freezing on slow triggers, and large photo selection sharing.

Bug Fixes

Three critical reliability fixes in project creation, estimates, and photo sharing.

Project creation now shows fixable errors. When a client's saved business address was missing structured parts (street, city, state), the form would reject it with a generic error and no way to fix it. Now the error message appears on the address field, and duplicate project numbers get a friendly "already in use" message instead of a silent failure.

Estimate/inventory tab no longer freezes on slow Trigger.dev. The phase loader's realtime-token mint had no timeout—if Trigger.dev was slow or unreachable, the entire tab hung on a loading skeleton with no recovery. Now the mint times out after 2.5 seconds and degrades gracefully; the UI falls back to polling, keeping the tab responsive.

Large photo selections can now be shared and previewed. Sharing or previewing more than ~64 photos would silently fail due to URL length limits. Both now persist the photo selection server-side (PhotoShareDraft table) and reference it by token instead, supporting selections up to 500 photos.