Added
- In-app updates — Portal checks GitHub for a newer release and installs it without leaving the launcher. A full-screen card shows the version number and the release notes, with Update now, Remind me later (24 h snooze) or Skip this version.
- Panel-friendly polling — at most one check a day, only while Portal is in the foreground, and never while a panel, menu, folder, overlay or the widget picker is open.
- Markdown release notes — headings, lists, bold, italic, inline code and clickable links.
- New onboarding step "A tap in the void" — a searchable app list picks what a tap on the empty home screen opens, with an explicit "No app" choice (also available later from settings).
- Light pills show the bulb's real colour — single-entity
light.*pills readrgb_color, falling back tocolor_temp_kelvin, and tint their icon circle with the live colour. - Breadcrumbs in settings sub-pages, tappable to walk back up.
Changed
- Settings reorganised into five categories with sub-pages: Home screen, Appearance, Connected home, Device and About. Deep links from older builds still resolve.
- The whole runtime UI is localized — around 170 hard-coded French strings moved to resources, with real plurals per locale. An English build no longer falls back to French.
- Tap on empty home space is opt-in — a fresh install no longer assumes the Home Assistant app is present.
- Wide media player reworked — a real panel header replaces the floating corner button, artwork takes the remaining height, and the source name reads top-left.
- Vertical sliders feel immediate — tap and drag are handled in a single gesture loop.
- Apple TV icon fixed — the bundled vector is used and its viewport corrected to a 2:1 ratio.
- Developer options moved into the About page; the washer glyph now recognises English phase names.
Removed
- The standalone Developer settings tile, folded into About.
- The implicit Home Assistant fallback for the empty-space tap gesture.
Performance
- Update checks rate-limited to one network call per 24 h and suspended while the launcher is not in the foreground.
- Pill colours animate through a shared spring instead of allocating new colour objects on every state push.
- Sliders consume pointer events in one gesture loop, removing duplicated pointer-input handlers.
APK signed with the v2 scheme (minSdk 28).