Fixed
- Birthdays: "Discard changes?" dialog appeared immediately after successfully saving a birthday because
closeModal()was called withoutforce: true, triggering the dirty-form check on a programmatic close - Dashboard (PWA): widget items (tasks, events, meals, notes, birthdays, shopping lists) occasionally blocked vertical swipe-to-scroll; added
touch-action: pan-yso the browser passes vertical pan gestures through to the scroll container