> ⚠️ PHP 8.5 (with SQLite 3.40+) is from now on the only supported runtime version.

### Stock

- Optimized product definition quantity unit handling:
  - As long as a product was not once in stock, the product options "Default quantity unit purchase", "Default quantity unit consume" and "Quantity unit for prices" can now be changed to any other unit
  - When necessary (means when no default quantity unit conversions apply), "1:1" product specific quantity unit conversion between the product's QU stock and the corresponding other unit will now be created automatically after editing a product (like already done when initially creating a product with different unit definitions)
  - For convenience, when changing a product's QU stock and when all other unit properties ("Default quantity unit purchase" etc.) are the same, they will now be changed in tandem (like already done when creating a new product and initially setting the product's QU stock)
  - (This should drastically improve the workflow of completing a product setup looked up via an external barcode lookup plugin)
- Optimized the line plot markers color of the price history chart (product card) (thanks @DeepCoreSystem)
- External barcode lookup plugin optimizations:
  - When an image URL without a file extension is returned, the file extension is now determined by the Content-Type header (if any) (thanks @jordy-u for the idea)
  - Data URLs for images are now supported (`data:image/png;base64,xxxx`) (thanks @GammaC0de)
- Fixed that German Umlauts and other special characters were removed from product names when looking up a barcode via the built-in Open Food Facts external barcode lookup plugin
- Fixed that when using/scanning a barcode on the purchase page with a note attached (which prefills the note field) and when manually selecting another product afterwards, the note of the previously used barcode was incorrectly prefilled again
- Fixed that the "next input focus handling" (jumping to the next input after entering a value) didn't work at some places (e.g. after entering a purchased date on the purchase page)
- Fixed that changing the stock setting "Due soon days" wasn't saved/applied
- Fixed that "Reprint stock entry label" on the stock entry edit page didn't actually print the corresponding label

### Shopping list

- An amount of `0` is now allowed for shopping list items (just a convenience optimization, it was already possible to leave the amount field empty which implicitly resulted in an amount of `0`)
- Fixed that the "Add all list items to stock" workflow closed the dialog after every item instead only after the last one was added

### Chores

- Fixed that changing the chore setting "Due soon days" wasn't saved/applied

### Userfields

- Fixed that the corresponding form was broken when using a `%` in an Userfield caption (only affected numeric and date-time Userfields)

### General

- Added a workaround for different SQL errors when running Grocy on FreeBSD and SQLite 3.41+
- Fixed that the date input shorthand `[+/-]n[d/m/y]` didn't work when the value length was >= 4 (e.g. `+10d`)
