You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adds an issue-25 R-N requirements section to docs/REQUIREMENTS.md
(plus localized summaries in the .ru / .zh / .hi mirrors), a brief
mobile-first overhaul section to UI-DESIGN-AUDIT.md and its locale
mirrors, and the .changeset/issue-25-mobile-first-glass.md entry that
cuts a minor release for the AppShell, Connections module, tutorial
spotlight, and full-translation work landed in PR #26.
Each R-N row in REQUIREMENTS.md cross-references the case study
(docs/case-studies/issue-25/) and the code that closes the
requirement, so the live ledger stays in sync with what shipped.
| R-N1 | The SPA must be mobile first - default rendering targets a phone-sized viewport. | Done: `js/src/web/shell/` exposes `<AppShell>` with a compact bottom-nav (≤640 px), a navigation rail (641-1023 px), and a permanent drawer (≥1024 px). Wired in `js/src/web/app.js`. |
470
+
| R-N2 | UI/UX should be in the best possible way (Apple/Google/Microsoft guidance, accessible tap targets, focus rings). | Done: shell tap targets are 44 × 44 px or larger, `:focus-visible` rules cover every interactive control, and `safe-area-inset-bottom` is honoured. Audit cross-references live in `docs/UI-DESIGN-AUDIT.md`. |
471
+
| R-N3 | All user-facing UI must be fully translated, not partially - no English literal can render when the active locale is non-English. | Done: `js/src/web/connection-guides.js` and provider labels route through `t()`; `js/tests/i18n.test.js` enforces parity across `en/ru/zh/hi`. The Russian-build "Your unified inbox starts empty." regression is fixed by `feat(i18n)` commit `98828fb`. |
472
+
| R-N4 | Each connected service should have its own item in the connections list with name, description, and connection state. | Done: `js/src/web/connections/connections-list.js` renders one card per provider with translated name, description, and state badge. Test: `js/tests/connections-screens.test.js`. |
473
+
| R-N5 | External-service connections should live on a separate page, like settings. | Done: a dedicated `connections` view exists in `js/src/web/nav-items.js` and `js/src/web/views.js`; Settings retains only app-level preferences. |
474
+
| R-N6 | The design should clearly show whether a service is connected or not. | Done: each card declares one of `connected` / `not-connected` / `action-required` state with a translated label and a colour token (green / neutral / amber). Covered by `js/tests/connections-screens.test.js`. |
475
+
| R-N7 | Tapping a "not connected" service routes the user to a separate setup screen. | Done: `<ConnectionsList>` calls an `onOpen(providerId)` handler that mounts `<ConnectionDetail>` in `js/src/web/views.js`; the list itself never inlines the credential form. |
476
+
| R-N8 | Setup flows must explain exactly how to obtain the required data, so no separate instructions are needed. | Done: every provider in `js/src/web/connection-guides.js` declares `setupSteps[]` with translated `titleKey`/`bodyKey` (and optional `actionKey`/`href`). Test: `js/tests/connection-guides-templates.test.js`. |
477
+
| R-N9 | The tutorial overlay must dim everything except the next click target. | Done: `js/src/web/tutorial.js` exports `<TutorialSpotlight>`; `app.css` uses a `box-shadow: 0 0 0 9999px rgba(0,0,0,0.55)` outset to dim outside the rect, with a `prefers-reduced-transparency` fallback. Tests: `js/tests/tutorial-spotlight.test.js`. |
478
+
| R-N10 | The tutorial must guide the user first to service connections, then walk through the chosen provider's setup steps. | Done: `defaultSteps[0]` in `js/src/web/tutorial.js` is the `connect` step pointing at `nav:connections` with `tutorial.connect.{title,body}` keys translated for `en/ru/zh/hi`. Follow-up steps render `setupSteps[]` inside `<ConnectionDetail>`. |
479
+
| R-N11 | The visual style should resemble Apple Liquid Glass (semi-transparent surfaces). | Done: `js/src/web/app.css` defines `--surface-glass` (backdrop-filter blur 28px, saturate 180%) and `.glass`/`.glass-strong` utilities; `@media (prefers-reduced-transparency: reduce)` substitutes a solid surface. Applied to top-bar, bottom-nav, drawer, modal cards, and the tutorial card. |
480
+
| R-N12 | Use Apple/Google/Microsoft design guidelines and Chakra UI + React.js patterns. | Done as design _guidance_ rather than a runtime swap: the redesign adopts Chakra UI's responsive tokens, semantic spacing, and accessible primitives without taking a hard dependency. The trade-off is recorded in `docs/case-studies/issue-25/components.md`; bundle-size delta is captured in PR #26's description. |
481
+
482
+
---
483
+
457
484
## Traceability
458
485
459
486
When a future PR or commit lands a feature, reference the requirement
| Semantic landmarks for fast orientation. |`js/src/web/shell/app-shell.js` keeps `<header>` / `<nav>` / `<main>` while swapping the navigation between bottom-nav, side-rail, and drawer at ≤640 / 641-1023 / ≥1024 px. |
98
+
| Visible focus for every control. |`js/src/web/app.css` carries `:focus-visible` rules onto every shell control, including the new bottom-nav buttons. |
99
+
| Tap targets are accessible. | All shell controls are 44 × 44 px or larger; bottom-nav respects `safe-area-inset-bottom`. |
100
+
| Glass surfaces with reduced-motion path. |`--surface-glass` (backdrop-filter blur 28px, saturate 180%) is applied to top-bar, bottom-nav, drawer, modal cards, and the tutorial card; falls back to a solid surface under `@media (prefers-reduced-transparency: reduce)`. |
101
+
| Tutorial guidance is anchored to UI. |`js/src/web/tutorial.js` exports `<TutorialSpotlight>`; the default tutorial sequence starts by anchoring on the Connections nav entry (R-N9, R-N10). |
102
+
103
+
The full atomic table, component survey, and screenshots are in
0 commit comments