Problem
Authenticated and admin shells have invalid or incomplete navigation semantics: nested main landmarks, no skip link, inaccessible sidebar rail, undersized trigger, missing current-page state, and noncanonical topbar geometry.
Remediation action
Align shell landmarks and navigation semantics with accessible app-shell guidance.
Scope
apps/web/src/app/(app)/layout.tsx:20
apps/web/src/app/(app)/layout.tsx:22
apps/web/src/components/ui/sidebar.tsx:271
apps/web/src/components/ui/sidebar.tsx:284
apps/web/src/app/admin/components/AdminPage.tsx:22
apps/web/src/app/admin/components/AppSidebar.tsx:310
Acceptance criteria
- Each shell exposes exactly one main landmark with stable
main-content target.
- A focus-revealed skip link is first in keyboard order.
- Sidebar triggers/rails are named, focusable where interactive, visibly focused, and touch safe.
- Current navigation item exposes
aria-current="page" and canonical selected surface.
- Product topbars use canonical 56px height and border/surface treatment.
- Keyboard traversal through shell navigation is covered by automated tests.
Problem
Authenticated and admin shells have invalid or incomplete navigation semantics: nested main landmarks, no skip link, inaccessible sidebar rail, undersized trigger, missing current-page state, and noncanonical topbar geometry.
Remediation action
Align shell landmarks and navigation semantics with accessible app-shell guidance.
Scope
apps/web/src/app/(app)/layout.tsx:20apps/web/src/app/(app)/layout.tsx:22apps/web/src/components/ui/sidebar.tsx:271apps/web/src/components/ui/sidebar.tsx:284apps/web/src/app/admin/components/AdminPage.tsx:22apps/web/src/app/admin/components/AppSidebar.tsx:310Acceptance criteria
main-contenttarget.aria-current="page"and canonical selected surface.