- Nuevas opciones `app.timezone_regions`, `app.timezone_order` y
`app.timezone_per_user` para limitar y ordenar las regiones ofrecidas
y decidir si cada usuario puede tener su propia zona horaria.
- Añade `TzRegion` y `TimezoneOrder`; `Timezone::supported_by_region()`
devuelve ahora `TzRegion` y excluye los alias de la base IANA que
repiten otra zona (tzdata 2025b).
- Añade `Timezone::is_supported_in()` para validar con otras regiones.
- `SelectTimezone` admite `with_regions()`, `with_order()` y
`with_utc_offset()`, muestra nombres legibles y conserva la zona
actual aunque ya no se ofrezca.
- `app.timezone` se resuelve sin distinguir mayúsculas.
- pagetop-user no ofrece idioma ni zona horaria si no se aplican y
conserva lo guardado; acepta la zona actual aunque ya no se ofrezca.
- CurrentUser pasa de enum a struct con `id` opcional (anónimo = None) y
preferencias de idioma, zona horaria y tema validadas en `with_*()`.
- `RequestLocale` tiene en cuenta el idioma preferido del usuario, y
Context usa su tema si lo tiene (`default_theme()` en otro caso).
- Nuevos componentes `form::SelectLanguage`, `form::SelectTheme` y
`form::SelectTimezone`, con `Timezone::supported_by_region()` para
listar y validar las zonas IANA ofrecidas.
Añade formatos `DateFormat`, `TimeFormat`, `RelativeFormat` y
`DatePrecision`, con estilos traducidos vía Fluent (orden día/mes/año,
nombre del mes, plurales). La zona horaria efectiva se resuelve por
petición, la propia del usuario autenticado si la tiene, si no la
configurada para la aplicación (`app.timezone`), o UTC en su defecto- y
se expone en `Contextual` junto a format_date(), format_time(),
format_datetime(), format_iso_datetime(), format_relative(),
format_since() y format_until().