Skip to content

Pad skip, named dialogs, and focus traps #248

Description

@HMarzban

What to build

Give the pad a skip link that lands on a real main landmark. Name Share, Make Private, and Sign out as dialogs. Trap focus in the TOC drawer and in BottomSheet.

Home and Legal already have skip and main. Do not change those pages. This is not caret find and not #247.

Acceptance criteria

  • Desktop and phone pad: a skip link exists and moves focus into a real main landmark.
  • Desktop and phone pad: that landmark is a main, or role main, with an id the skip target uses.
  • Share, Make Private, and Sign out expose their visible title as the dialog name.
  • Opening the TOC drawer keeps Tab inside the drawer until it closes.
  • Opening a BottomSheet keeps Tab inside the sheet until it closes.
  • Closing the drawer or a sheet returns focus to the control that opened it.
  • Home and Legal skip links still work.

Agent Brief

Category: enhancement
Summary: Pad skip plus main, named Share / Make Private / Sign out, and focus contain on the TOC drawer and BottomSheet.

Current behavior:
Home and Legal skip to a real main. The pad has no skip and no main. A skip with no target is a dead link. The pad header is not a main landmark. Breadcrumb nav and a named chat region appear only when chat is open.

Share, Make Private, and Sign out show a heading that is not wired as the dialog name. Sign in, Profile, and History restore already have a name.

The TOC drawer is a checkbox drawer. BottomSheet has no house focus trap. Centered dialogs already trap. Hardware Back can close those surfaces on a phone. It does not trap focus or restore it.

Desired behavior:
Add one skip control on the pad. Point it at a real main that wraps the document. Do not skip to an id that does not exist.

Wire Share, Make Private, and Sign out so the visible title is the accessible dialog name. Use the same naming pattern Sign in already uses. Do not restyle those dialogs.

When the TOC drawer is open, Tab stays inside it. When a BottomSheet is open, Tab stays inside it. Escape or the existing close control still closes them. Focus returns to the opener. Do not put the Chat pane on a sheet. Do not change docked control size.

Key interfaces:

  • Skip link — same job as Home and Legal; must have a live main target
  • Main landmark — one per pad layout, desktop and phone
  • Dialog name — visible title names Share, Make Private, and Sign out
  • TOC drawer — modal focus contain while open
  • BottomSheet — modal focus contain while open

Out of scope

Activity

  1. HMarzban commented on Sep 9, 2026

    @HMarzban
    CollaboratorAuthor

    Parent epic is #249. This issue is the pad skip and focus slice. Find is #250. Slash is #251.

  2. HMarzban commented on Sep 9, 2026

    @HMarzban
    CollaboratorAuthor

    iOS and macOS Safari

    • VoiceOver: the skip control must land in a real main. Check the rotor Landmarks list on the pad.
    • TOC drawer and BottomSheet: swipe or Close still dismiss. VoiceOver must not leave focus in the page behind.
    • Hardware Back already closes these on a phone. Also restore focus to the opener.
    • Do not grow docked controls past 32 by 32. Phone Settings already uses 44px where it needs it.
    • Share / Make Private / Sign out must expose the visible title on iOS sheets and on macOS Safari dialogs.
  3. HMarzban commented on Sep 9, 2026

    @HMarzban
    CollaboratorAuthor

    Safari follow-up from iOS a11y skip traps:

    • Document Share is desktop-only today. Do not add a phone Share surface in this issue.
    • Phone Sign in already uses a sheet. Leave that title work out of Pad skip, named dialogs, and focus traps #248 unless it is the same Sign out / Make Private naming pass.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions