fix(parental-lock): focus, tokens and phone width for lock UI

The lock rows, lock dialogs and PIN error used Material system tokens the
theme never declares, so every one of those declarations was invalid:
keyboard focus on the "N locked" rows and Stalker lock rows was
invisible, their borders and the lock list border had no colour, locked
and unlocked toggles looked the same, and the PIN error was not red.

- UI-05: 2px inset --app-selection-color ring on :focus-visible for the
  rail locked rows and the Stalker lock rows (>= 3:1 in both themes).
- UI-08: lock UI on --app-* tokens; local per-theme error red for the PIN
  error and the adult chip; locked toggles get accent colour + tint.
- UI-10: no 440/480px content min-width; lock dialogs open with
  maxWidth calc(100vw - 32px), so they fit a 375px phone.
- UI-11: the PWA Xtream dialog hides the Electron-only selection count and
  Select/Deselect-all; a failed lock write shows PARENTAL_LOCK.SAVE_FAILED;
  clear-search buttons get a translated aria-label.

New web E2E (parental-lock-ui.e2e.ts) tabs to each lock row and checks
ring, border, PIN error and phone fit in light and dark.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
4grayandClaude Opus 5.5 committed 2026-09-29 23:08:39 +02:00
1 parent 963a431bb7
commit 13fa68bbb1
20 files changed
+826 -121

No files matched your search

+8 -1
View File
@@ -374,7 +374,8 @@ so a cancelled or refused PIN leaves it showing the real state.
the PIN. The Xtream dialog loads its candidates through the
capability-selected data source (`IXtreamDataSource.getAllCategories`,
which the PWA source answers from its session cache or the API), so PWA
users can set locks too; the hide/show checkboxes remain Electron-only.
users can set locks too; the hide/show checkboxes, the selection count
and the Select/Deselect-all actions remain Electron-only.
A deliberate non-choice: no dedicated lock button in the rail header
(the header already carries search, sort and manage, and the lock is a
category-management concern) and no keyword-based "adult" recognition
@@ -415,6 +416,12 @@ so a cancelled or refused PIN leaves it showing the real state.
so a child cannot switch the idle relock off for the next unlock.
- Header lock/unlock button and the `parental-lock-now` /
`parental-unlock` palette commands.
- Styling uses app tokens only (the theme declares no `--mat-sys-*`); the
PIN error and the Stalker adult chip use a local red per theme. Keyboard
focus on a lock row is a 2px inset `--app-selection-color` ring, and the
lock dialogs open with `maxWidth: 'calc(100vw - 32px)'` and no content
min-width, so they fit a 375px phone. `apps/web-e2e/src/parental-lock-ui.e2e.ts`
checks rings, borders, the PIN error and phone width in both themes.
## Startup footprint