hypercal 2.1.5

Weather for the rest of the world, faster recurring calendars, and new ways to
install: a multi-arch Docker Hub image, a Flatpak repository and an Arch
package.

**Weather beyond Germany.** Pick a source in Settings. Open-Meteo and MET
Norway cover the world, Bright Sky covers Germany including past weeks, and the
National Weather Service covers the United States. All four are free and need
no API key, and each says what it covers. Page to a week a source cannot reach
and the lens says so, instead of showing an empty grid.

**Faster with many repeating events.** Recurrence expansion does less work per
query, and two new partial indexes cover recurring series and long-running
events. They are added by a migration that runs on start, like every other.

**Lighter container.** The health check now probes with curl instead of
starting Node every interval, and runs every 60s instead of 30s. The image
also caps Node's heap with `NODE_OPTIONS=--max-old-space-size=128`, so one
instance cannot grow to take a small shared VPS with it. A large multi-user
instance may want more: the daily .ics export and wide range queries build
their whole result in memory. Setting `NODE_OPTIONS` in your compose file
replaces the default.

**New ways to install.**

- Docker Hub: `docker pull larskreuz/hyper-calendar:2.1.5`, for linux/amd64
  and linux/arm64, so it runs on a Raspberry Pi or an ARM VPS. The GitLab
  registry image is still published as before.
- Flatpak: a signed repository at
  https://hyper-calendar-7b58b2.gitlab.io/flatpak/, installable in one
  command. See the Flatpak install page in the docs.
- Arch: a `.pkg.tar.zst` you can install with `pacman -U`, plus the rendered
  PKGBUILD and .SRCINFO for the AUR, all attached to this release.

**Fixed.**

- Choosing Change color in an event's menu could close the whole menu.
- The Android install page returned 404 when loaded directly. It now lives at
  /install-android, and the old /fdroid link redirects there.

**Under the hood.** React 19, Vitest 5, ESLint 10, @simplewebauthn 14 (which
includes the fix for GHSA-2g3p-m8c9-hhwh in the server's CRL handling),
node-ical 0.27, and the Android toolchain on AGP 8.13. The published APK keeps
the same signing layout, so F-Droid's reproducible build still matches.