From design-qa
Use when capturing screenshots of a deployed web page across many viewport widths to find layout breaks. Specifically catches "grey area" widths (700, 900, 1180) where designs commonly fail between standard breakpoints. Sweeps 18 widths × light/dark/reduced-motion themes by default.
How this skill is triggered — by the user, by Claude, or both
Slash command
/design-qa:responsive-design-sweepThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You're capturing the responsive screenshot matrix for a design QA review.
You're capturing the responsive screenshot matrix for a design QA review.
The matrix is determined by ${user_config.breakpointPreset}:
fast (5 widths × 1 theme = 5 screenshots):
375, 768, 1024, 1440, 1920
agency-default (18 widths × 3 themes = 54 screenshots):
280, 320, 360, 375, 390, 414, 480, 600, 700, 768,
834, 900, 1024, 1180, 1280, 1440, 1920, 2560
thorough (21 widths × 3 themes = 63 screenshots):
agency-default + 384 (foldable outer), 3840 (4K)
(Earlier versions of this doc listed 844x390 landscape and print media for thorough; those aren't implemented in breakpoint-sweep.mjs and the doc has been pulled back to match the runner's actual matrix.)
Why these widths: 280 covers folded foldables; 320/360/375/390/414 cover the common phone range including iPhone mini through Pro Max; 480 catches large phone landscape; 600/700 are the foldable-inner / awkward-tablet zone where designs frequently fail; 768/834/900 cover the iPad-portrait-to-landscape transition; 1024/1180/1280/1440/1920/2560 cover the laptop-to-large-monitor spectrum.
For each width, the runner captures three theme variants:
prefers-color-scheme: dark).prefers-reduced-motion: reduce) — light theme.The fast preset captures only variant 1 (light, default).
A separate focus-state pass over interactive elements happens during the run-axe.mjs accessibility audit, not in the responsive sweep.
ALWAYS, before each screenshot:
await page.waitForLoadState('networkidle').await page.evaluate(() => document.fonts.ready).*, *::before, *::after { animation-duration: 0s !important; animation-delay: 0s !important; transition-duration: 0s !important; transition-delay: 0s !important; }.The script ${CLAUDE_PLUGIN_ROOT}/bin/run-sweep.sh <url> <preset> handles all of this (delegating to breakpoint-sweep.mjs). It:
.claude/design-qa/reports/<timestamp>/screenshots/<width>-<theme>.png (one per width × theme; interaction states are exercised in the axe pass, not here).manifest.json with one entry per screenshot — the entries reference the same <width>-<theme>.png filenames and include the in-page horizontal-overflow check result.You should call this script rather than driving Playwright MCP one width at a time — it's much faster and uses far fewer tokens.
Read manifest.json. For each entry where horizontalOverflow: true, this is a Blocker if the width is ≤ 1440. Surface them.
For each width, view the screenshots side by side (light/dark) and look for:
Return a summary with:
npx claudepluginhub my-stacks/claude-code-skills --plugin design-qaProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.