96f1494126
- Add POST /api/portal/appointments/:id/reschedule endpoint with: - Session auth via X-Impersonation-Session-Id header - Ownership validation (clientId match) - Past/in-progress/cancelled/completed guard - Conflict detection for the target time slot - Duration-preserving reschedule (keeps original endTime offset) - Add RescheduleFlow modal component in AppointmentsSection: - Date picker + time slot grid (same times as BookingFlow) - Shows current appointment summary - POSTs to /api/portal/appointments/:id/reschedule - Reloads page on success - Wire Reschedule button in AppointmentCard (Appointments section) - Wire Reschedule button in Dashboard next-appointment card - Add showReschedule/rescheduleAppointment state in CustomerPortal Fixes GRO-166 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>