Determine calendar bounds from `days_ahead`, intersected with session start/end if provided.
Build the day schedule from the session schedule (if defined) or the global weekly schedule.
Generate slots using duration + buffer.
Remove slots that violate min_notice or are in the past.
Apply capacity and overlap rules, subtracting existing bookings that are not cancelled/expired.
Return disabled days/slots via AJAX to the widget.