Dialogs, drawers, popovers and overlays: focus trap, return and dismissal.

MITAuto-check passedFrontend & Design

Install Modal Specialist

skills CLI
$ npx skills add Community-Access/accessibility-agents --skill modal-specialist -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Community-Access/accessibility-agents modal-specialist --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Community-Access/accessibility-agents.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/modal-specialist .claude/skills/modal-specialist && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
modal-specialist
GitHub stars
423
Token cost
~1.4k tokens
SKILL.md length
591 words
Files
6 (incl. references)
Skills in repo
108
Repo updated
First seen
Licence
MIT

At a glance

Dialogs, drawers, popovers and overlays: focus trap, return and dismissal.

  • Works in 12 steps: Does it use with showModal()`? → Does focus land appropriately per the… → Is focus trapped inside (for modal… → …
  • Tasks that involve Accessibility
  • SKILL.md covers Your Scope, Required Structure, Alert Dialogs and Drawers and Sheets, plus 6 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Modal Specialist is an agent skill from Community-Access/accessibility-agents. Dialogs, drawers, popovers and overlays: focus trap, return and dismissal.

Its SKILL.md is about 1.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including reference files (for example `agents/openai.yaml`, `examples/findings.json` and `references/filter-modal-pattern.md`).

It sits in Frontend & Design, covering Accessibility. The repository describes itself as: Accessibility review agents for Claude Code, GitHub Copilot, and Claude Desktop. Eleven specialists that enforce WCAG 2.2 AA compliance so AI coding tools stop generating… The licence is MIT.

When your agent uses it

  • Tasks that involve Accessibility

Example prompts

  • “/modal-specialist”

Workflow steps

12 steps, taken from the first numbered list in SKILL.md.

  1. Does it use with showModal()`?
  2. Does focus land appropriately per the scenario-based rules (least destructive for confirmations, heading for complex content, first…
  3. Is focus trapped inside (for modal dialogs)?
  4. Does Escape close it?
  5. Does focus return to the trigger on close?
  6. Is there a heading at H2 or lower?
  7. Does aria-labelledby point to a valid heading ID?
  8. Does the trigger have aria-haspopup="dialog"?
  9. Is aria-modal="true" present on modal dialogs?
  10. Is aria-describedby used only for short plain-text descriptions (not complex structured content)?
  11. Is there a visible close button?
  12. For alert dialogs: does focus land on the least destructive action?

What it can do on your machine

Read from SKILL.md and the folder at commit decf6ba. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are html).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Modal Specialist loads about 1.4k tokens when it runs, and up to ~3.1k if it reads all its reference files. Until then it costs about 23 tokens; SKILL.md has 591 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~23
When it runs · the whole SKILL.md, loaded when a task matches
~1.4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~3.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Community-Access/accessibility-agents at commit decf6ba, republished under its MIT licence (© Community-Access). 591 words, ~1,418 tokens.

Download SKILL.mdSave it as .claude/skills/modal-specialist/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
modal-specialist
description
Dialogs, drawers, popovers and overlays: focus trap, return and dismissal.
license
MIT
disable-model-invocation
true
metadata.tier
specialist
metadata.domain
web
metadata.output
findings
metadata.effort
medium
metadata.title
Modal Specialist

You are a modal and dialog specialist. A broken modal is one of the worst accessibility failures -- users get trapped with no way out, or interact with content behind the modal without knowing it. You ensure every overlay is built correctly.

Your Scope

You own everything that overlays the page:

  • Modal dialogs
  • Alert dialogs / confirmation prompts
  • Drawers and sheets (side panels)
  • Popovers and disclosure panels
  • Filter modals
  • Settings panels
  • Any content that appears above the page and requires dismissal

Required Structure

Always use the native <dialog> element. Never build modals from <div> elements unless there is a documented technical constraint.

html
<button id="trigger" aria-haspopup="dialog">Open Settings</button>

<dialog id="settings-modal" role="dialog" aria-modal="true" aria-labelledby="modal-title">
  <button id="close-btn" aria-label="Close">
    <svg aria-hidden="true">...</svg>
    Close
  </button>
  
  <h2 id="modal-title">Settings</h2>
  
  <!-- Modal content -->
</dialog>

Alert Dialogs

For confirmations that require a decision:

html
<dialog role="alertdialog" aria-modal="true" aria-labelledby="alert-title" aria-describedby="alert-desc">
  <h2 id="alert-title">Delete Project?</h2>
  <p id="alert-desc">This action cannot be undone. All data will be permanently removed.</p>
  <button id="cancel-btn">Cancel</button>
  <button id="confirm-btn">Delete</button>
</dialog>
  • Use role="alertdialog" instead of role="dialog"
  • Focus lands on the least destructive action (Cancel, not Delete)
  • aria-describedby links to the explanation text
  • Screen reader will announce both the title and description on open

Drawers and Sheets

Side panels follow the same rules as modals:

  • Use <dialog> with showModal()
  • Focus lands on Close button
  • Focus trapped inside
  • Escape closes
  • Focus returns to trigger

The only difference is visual positioning (CSS). The accessibility requirements are identical.

Non-Modal Dialogs

Non-modal dialogs allow interaction with content behind them. They close when the user clicks outside or presses Escape.

html
<dialog id="tooltip-dialog" role="dialog" aria-labelledby="tooltip-title">
  <h3 id="tooltip-title">Field Help</h3>
  <p>Enter your company registration number.</p>
</dialog>

Requirements:

  • Do NOT use aria-modal="true" -- content behind must remain accessible
  • Open with dialog.show() (not showModal())
  • Close when the dialog loses focus (click outside or Tab away)
  • Escape closes the dialog
  • No focus trapping -- Tab can move out of the dialog
  • Focus returns to trigger on close

Popover API

The HTML Popover API (popover attribute) provides lightweight overlay behavior with built-in dismiss-on-click-outside and Escape handling. Use for tooltips, menus, and non-modal overlays.

html
<button popovertarget="help-popover">Help</button>
<div id="help-popover" popover>
  <p>This field accepts your company registration number.</p>
</div>
  • Popovers are non-modal by default -- no focus trapping
  • Browser handles Escape to dismiss and light-dismiss (click outside)
  • Use popover="manual" to disable light-dismiss when needed
  • Popovers are promoted to the top layer, avoiding z-index issues
  • Prefer popover for simple overlays; prefer <dialog> with showModal() for true modal dialogs
Show full SKILL.md (272 more words)Show less

Validation Checklist

When reviewing any modal:

  1. Does it use <dialog> with showModal()?
  2. Does focus land appropriately per the scenario-based rules (least destructive for confirmations, heading for complex content, first focusable for general)?
  3. Is focus trapped inside (for modal dialogs)?
  4. Does Escape close it?
  5. Does focus return to the trigger on close?
  6. Is there a heading at H2 or lower?
  7. Does aria-labelledby point to a valid heading ID?
  8. Does the trigger have aria-haspopup="dialog"?
  9. Is aria-modal="true" present on modal dialogs?
  10. Is aria-describedby used only for short plain-text descriptions (not complex structured content)?
  11. Is there a visible close button?
  12. For alert dialogs: does focus land on the least destructive action?
  13. Are icons inside the modal hidden with aria-hidden="true"?
  14. For filter modals: is there a live region for result counts?

Common Mistakes You Must Catch

  • Modal built from <div> with role="dialog" but no focus trapping
  • Focus landing on the heading instead of Close button
  • Missing focus return on close (focus drops to top of page)
  • Nested modals (modal opens another modal) without proper focus stack
  • Backdrop click closes modal but does not return focus
  • aria-hidden="true" left on the modal container after opening
  • Scrollable modal content not reachable by keyboard

Reference files

Read one only when the task reaches it. Do not read them all up front.

  • references/non-negotiable-rules.md - Non-Negotiable Rules
  • references/filter-modal-pattern.md - Filter Modal Pattern
  • references/structured-output-for-sub-agent-use.md - Structured Output for Sub-Agent Use

Output contract

Return only JSON matching skills/a11y-core/schemas/findings.schema.json. No prose, no summary, no restated instructions. One object, one array of findings.

Shared rules, dispatch contract and schemas: skills/a11y-core/SKILL.md. Authoritative specifications for this skill: skills/a11y-core/references/sources.md.

© Community-Access, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 5 other files (references) in skills/modal-specialist of Community-Access/accessibility-agents.

  • SKILL.md
  • agents/openai.yaml
  • examples/findings.json
  • references/filter-modal-pattern.md
  • references/non-negotiable-rules.md
  • references/structured-output-for-sub-agent-use.md

Open the folder on GitHubat commit decf6ba

Compare with similar skills

Modal Specialist next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Modal Specialist compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Modal Specialist this skillCommunity-Access/accessibility-agents423—~1.4kAutomated safety check: PassMIT
Web Interface Guidelines Reviewervercel-labs/openreview1.7k97 repos~308Automated safety check: PassNone
Accessibility Reviewmarkmead/hyperui12k1 repos~1.1kAutomated safety check: PassMIT
Web Animation DesignbaptisteArno/typebot.io11k2 repos~2.7kAutomated safety check: PassCustom licence
Accessibility Fixeribelick/ui-skills9.6k4 repos~1.2kAutomated safety check: PassMIT
Wcag Audit PatternsvmDeshpande/ai-agent-automation17811 repos~610Automated safety check: PassApache-2.0

Similar skills

  • Web Interface Guidelines Reviewer

    vercel-labs/openreview

    Official

    Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my…

    1.7k GitHub starsUsed in 97 repos~308 tokens
    Frontend & DesignAuto-check passed
  • Accessibility Review

    markmead/hyperui

    Run a WCAG 2.1 AA accessibility audit on a design or page. An agent skill from markmead/hyperui.

    12k GitHub starsUsed in 1 repo~1.1k tokens
    Frontend & DesignAuto-check passed
  • Web Animation Design

    baptisteArno/typebot.io

    Guides easing, timing and animation choices for UI motion, based on a web animation course, and reviews existing animations in a before-and-after table.

    11k GitHub starsUsed in 2 repos~2.7k tokens
    Frontend & DesignAuto-check passed
  • Accessibility Fixer

    ibelick/ui-skills

    Audits and fixes HTML accessibility problems such as ARIA labels, keyboard navigation, focus management, contrast and form errors with minimal changes.

    9.6k GitHub starsUsed in 4 repos~1.2k tokens
    Frontend & DesignAuto-check passed
  • Wcag Audit Patterns

    vmDeshpande/ai-agent-automation

    Conduct WCAG 2.2 accessibility audits with automated testing, manual verification, and remediation guidance.

    178 GitHub starsUsed in 11 repos~610 tokens
    Frontend & DesignAuto-check passed
  • Baseline UI

    ibelick/ui-skills

    Applies a fixed set of UI rules for stack, components, interaction, animation, typography and layout, or reviews a file against them with concrete fixes.

    9.6k GitHub starsUsed in 8 repos~855 tokens
    Frontend & DesignAuto-check passed

More from Community-Access/accessibility-agents

All 108 skills in this repo
  • A11y Core

    Community-Access/accessibility-agents

    Shared contract for the Accessibility Agents skills - dispatch, findings schema, report rules.

    423 GitHub stars~1.2k tokensUpdated 16 days ago
    Auto-check passed
  • Kb Web Scanning

    Community-Access/accessibility-agents

    Reference data, not a reviewer. An agent skill from Community-Access/accessibility-agents.

    423 GitHub stars~1.2k tokensUpdated 16 days ago
    Auto-check passed
  • Accessibility Lead

    Community-Access/accessibility-agents

    Web UI accessibility lead. An agent skill from Community-Access/accessibility-agents.

    423 GitHub stars~932 tokensUpdated 16 days ago
    Auto-check passed
  • Alt Text Headings

    Community-Access/accessibility-agents

    Alt text, SVGs, figures, charts, heading order, page titles and landmarks.

    423 GitHub stars~1.5k tokensUpdated 16 days ago
    Auto-check passed
  • Aria Specialist

    Community-Access/accessibility-agents

    ARIA roles, states and properties for custom widgets and dynamic content.

    423 GitHub stars~1.6k tokensUpdated 16 days ago
    Auto-check passed
  • Cognitive Accessibility

    Community-Access/accessibility-agents

    Plain language, WCAG 2.2 cognitive criteria, COGA guidance and auth UX.

    423 GitHub stars~1.4k tokensUpdated 16 days ago
    Auto-check passed

Questions about Modal Specialist

What does Modal Specialist do?

Dialogs, drawers, popovers and overlays: focus trap, return and dismissal. Modal Specialist is an agent skill from Community-Access/accessibility-agents. Dialogs, drawers, popovers and overlays: focus trap, return and dismissal.

When should I use Modal Specialist?

Modal Specialist fits situations like: tasks that involve Accessibility.

How do I install Modal Specialist in Claude Code?

Run `npx skills add Community-Access/accessibility-agents --skill modal-specialist -a claude-code`. Or copy the skill folder (skills/modal-specialist in Community-Access/accessibility-agents) into .claude/skills/modal-specialist in your project. Claude Code loads it when a task matches its description.

How do I install Modal Specialist in Codex?

Run `npx skills add Community-Access/accessibility-agents --skill modal-specialist -a codex`. Or copy the skill folder (skills/modal-specialist in Community-Access/accessibility-agents) into .agents/skills/modal-specialist in your project. Codex loads it when a task matches its description.

Can I use Modal Specialist in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Community-Access/accessibility-agents --skill modal-specialist -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/modal-specialist, .gemini/skills/modal-specialist, .github/skills/modal-specialist and .opencode/skills/modal-specialist in your project.

What does Modal Specialist need to run?

SKILL.md names no scripts, command-line tools or credentials: Modal Specialist is instructions for the agent only.

Does Modal Specialist access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Modal Specialist safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Modal Specialist use?

Modal Specialist is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Modal Specialist use?

About 1.4k tokens (SKILL.md is roughly 5.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.7k tokens, read only when the agent opens those files.

What are the alternatives to Modal Specialist?

Skills that share tags, products or a category with Modal Specialist: Web Interface Guidelines Reviewer (vercel-labs/openreview, 1.7k stars), Accessibility Review (markmead/hyperui, 12k stars), Web Animation Design (baptisteArno/typebot.io, 11k stars) and Accessibility Fixer (ibelick/ui-skills, 9.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Modal Specialist?

Community-Access (a GitHub organization) maintains it in Community-Access/accessibility-agents, which has 423 GitHub stars. The repository holds 108 skills in this directory. The repository was last updated on September 23, 2026.

Source: Community-Access/accessibility-agents on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.