How availability is calculated

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.