#41: pipe amount input through sanitizeAmountInput() (digits + single
decimal) in both AddEditExpenseScreenModel and AddEditRecurringScreenModel
so KeyboardType.Decimal is no longer bypassable via paste or hardware keys.
#42: wrap DateField's OutlinedTextField in a Box.clickable so the whole
row (label, text, icon) opens the date picker, not just the trailing icon.
#43: replace CategoryDropdownField with a new CategoryPickerField that
opens a generic ListSearchDialog (search bar, scrollable list, swatch,
checkmark on selected row), decoupled from the Preference machinery.
ListSearchPreferenceWidget is unchanged.