Widget loads month availability via AJAX (`rocwp_wcphoto_month_availability`); disabled days are hidden.
User picks a date; slots load via `rocwp_wcphoto_slots` using availability + capacity + overlaps. Unavailable slots stay visible but disabled.
On confirm, the widget calls `rocwp_wcphoto_add_to_cart` (cart) or `rocwp_wcphoto_start_checkout` (booking + cart + redirect). Booking status starts as `pending_payment`.
Cart/checkout show the selected date/time; quantity is forced to 1.
Order `processing`/`completed` → booking `confirmed`; cancelled/refunded/failed → booking `cancelled`.