The Book New 'Select Services' cards read svc.price (dollars) and
svc.duration, but GET /api/portal/services projects the canonical DB
columns basePriceCents/durationMinutes. The mismatch rendered every card
as $undefined price and an empty 'min'.
Normalize the services payload at fetch time (basePriceCents -> price in
dollars, durationMinutes -> duration), tolerating an already-normalized
shape. Render price/duration via a formatServicePrice helper that returns
null when absent, so the card gracefully hides the field instead of
printing $undefined.
Adds unit tests for normalizeService and formatServicePrice.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>