Changelog: Wellness Hub v8
Standards compliance pass (in place on the latest version, no design or behaviour change)
Done under the AGENTS.md exception for the latest, unreviewed-for-standards version. Copy, layout, brand look and flows are unchanged; the only visible differences are slightly darker secondary text, 44 px minimum touch targets, and a new dark theme that follows the system setting.
URLs, history and deep links
- Every view now has its own hash route (see
FLOW.md): home, Let's AI, Discover tabs, modality, practitioner, event, legal, sign-in, Seeker sign-up wizard steps, practitioner invite and setup steps, all nine hub sections, community detail, conversation thread and new conversation, wallet. - Tabs, wizard steps, filters, search text and dialogs (about, invite, create event, welcome) are in the URL. Navigation and tabs push history; filters and search text replace; redirects replace; Back closes a dialog.
- Cold load of any route (new tab, reload, pasted link) renders that view directly. Back, Forward and Reload behave like a website, with scroll position restored.
- Navigation controls are real
<a href>links. Added a friendly "Page not found" view and a "different account type" view. - Signed-out deep links go to
#/sign-in?next=...(replace) and return after sign-in. The demo session is kept insessionStorageinstead of memory only. - Per navigation:
document.title, focus to the view heading,aria-current, scroll reset or restore.
Accessibility
- Landmarks:
<header>,<nav>(primary, hub), a single<main>,<footer>; skip link. - Every view has exactly one
<h1>; heading levels no longer skip. - Colour contrast fixed in light and dark (all axe
color-contrastfailures); category chips and gold text darkened. - Visible two-tone
:focus-visiblering on everything interactive; oldoutline: nonerules neutralised. - Names and labels: every field has a label (or an
aria-labelwhere there is no visible one); icon-only controls named; decorative icons hidden; toggle and disclosure state exposed (aria-pressed,aria-expanded,aria-checked). - Dialogs: role, accessible name, focus moved in, Tab trapped, Esc closes (except the consent gate), focus returns to the trigger.
- Live regions for chat, threads, filter result counts and status messages.
- Click-only
div/spantargets are keyboard operable; practitioner flip cards expose only the visible face. prefers-reduced-motion: reducestops all animation and transitions (the orb holds still).
Responsive
- No horizontal scroll from 320 px (header wraps on narrow screens; hero, tabs and inputs can shrink).
- Touch targets at least 44 x 44 px.
- Dark mode (
prefers-color-scheme: dark).
Not changed
Copy, data, brand look, the flip cards, the AI chat call, the disclaimer gate, v7 and earlier versions.