Material Design 3 UI/UX Guide
skydashnet/material-design-3-ui-skill
Guides designing, reviewing or implementing interfaces that follow Google's Material Design 3 system: semantic tokens, component states, adaptive layout and accessibility.
Writes a complete UI component spec with anatomy, variants, sizes, eight interaction states, design-token mapping and accessibility notes before or alongside code.
$ npx skills add plugin87/ux-ui-agent-skills --skill design-component -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install plugin87/ux-ui-agent-skills design-component --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/plugin87/ux-ui-agent-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/design-component .claude/skills/design-component && rm -rf skills-srcUse ~/.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/
Install the "design-component" agent skill from https://github.com/plugin87/ux-ui-agent-skills/tree/main/.claude/skills/design-component into .claude/skills/design-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "design-component", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/plugin87/ux-ui-agent-skills/tree/main/.claude/skills/design-componentType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add plugin87/ux-ui-agent-skills --skill design-component -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install plugin87/ux-ui-agent-skills design-component --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/plugin87/ux-ui-agent-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/design-component .agents/skills/design-component && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "design-component" agent skill from https://github.com/plugin87/ux-ui-agent-skills/tree/main/.claude/skills/design-component into .agents/skills/design-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "design-component", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add plugin87/ux-ui-agent-skills --skill design-component -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install plugin87/ux-ui-agent-skills design-component --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/plugin87/ux-ui-agent-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/design-component .cursor/skills/design-component && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "design-component" agent skill from https://github.com/plugin87/ux-ui-agent-skills/tree/main/.claude/skills/design-component into .cursor/skills/design-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "design-component", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/plugin87/ux-ui-agent-skills.git --path .claude/skills/design-component--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add plugin87/ux-ui-agent-skills --skill design-component -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install plugin87/ux-ui-agent-skills design-component --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/plugin87/ux-ui-agent-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/design-component .gemini/skills/design-component && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "design-component" agent skill from https://github.com/plugin87/ux-ui-agent-skills/tree/main/.claude/skills/design-component into .gemini/skills/design-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "design-component", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install plugin87/ux-ui-agent-skills design-componentInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add plugin87/ux-ui-agent-skills --skill design-component -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/plugin87/ux-ui-agent-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/design-component .github/skills/design-component && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "design-component" agent skill from https://github.com/plugin87/ux-ui-agent-skills/tree/main/.claude/skills/design-component into .github/skills/design-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "design-component", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add plugin87/ux-ui-agent-skills --skill design-component -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install plugin87/ux-ui-agent-skills design-component --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/plugin87/ux-ui-agent-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/design-component .opencode/skills/design-component && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "design-component" agent skill from https://github.com/plugin87/ux-ui-agent-skills/tree/main/.claude/skills/design-component into .opencode/skills/design-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "design-component", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
design-componentWrites a complete UI component spec with anatomy, variants, sizes, eight interaction states, design-token mapping and accessibility notes before or alongside code.
Given a component such as a button, tabs, toast, combobox or modal, this skill produces a spec in the project's existing format. It first checks whether the component is already documented in the kit's component files, then pulls the matching ARIA pattern and the contrast and target-size rules from the accessibility references, and maps every value to the token JSON files for sizes and states.
The finished spec contains an anatomy diagram, a variants table, a sizes table, all applicable states, the token mapping, and role, keyboard and screen reader behavior, plus a note on rendering through the framework adapter protocol. An optional Python script scaffolds a stub to fill in. When code is produced, the agent is expected to build a harness that renders each variant in each state and to run the contrast check script, reporting its real output.
The skill reads files from the surrounding kit, so it checks for them first. If only the skill folders were installed, it tells you to run the kit's init command or install the plugin, then stops. For framework code it points to a separate design-code skill.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 14f8d44. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
nodenpxpython3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
UI Component Spec Designer loads about 2.8k tokens when it runs. Until then it costs about 90 tokens; SKILL.md has 1,237 words of instructions outside code blocks.
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.
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.
The full file from plugin87/ux-ui-agent-skills at commit 14f8d44, republished under its MIT licence (© plugin87). 1,237 words, ~2,772 tokens.
.claude/skills/design-component/SKILL.md (or your agent's skills folder).Step 0 — is the kit here? This skill reads files from the kit. Check once:
ls ${CLAUDE_SKILL_DIR}/../../../tokens >/dev/null 2>&1 && echo KIT_OK || echo KIT_MISSINGOnKIT_MISSINGonly the skill folders were installed, which is whatnpx skills adddoes. Say so plainly, point the user atnpx ux-ui-agent-skills initor the plugin install, and stop. Do not guess the contents of a file you could not open.
Produce a complete component specification matching the project format.
.claude/rules/components.md → "Component Quality Bar" (the 8-state table) and "Atomic Design"; the always-on 8-state table is in CLAUDE.md → Non-Negotiables.${CLAUDE_SKILL_DIR}/../../../components/atoms.md, molecules.md, organisms.md, templates.md, navigation.md, feedback.md, forms-advanced.md, overlays.md. Match the existing spec format.${CLAUDE_SKILL_DIR}/../../../accessibility/aria-patterns.md and contrast/target rules from ${CLAUDE_SKILL_DIR}/../../../accessibility/wcag-checklist.md.${CLAUDE_SKILL_DIR}/../../../tokens/*.json) — sizes via sizing.json, states via states.json.${CLAUDE_SKILL_DIR}/../../../taste/design-taste.md (states, focus, no slop).python3 ${CLAUDE_SKILL_DIR}/../../../scripts/scaffold_component.py "<Name>" to emit a stub, then fill it in.Spec with: anatomy diagram, variants table, sizes table, all 8 applicable states, token mapping, accessibility (role/keyboard/SR), and a note to render via ${CLAUDE_SKILL_DIR}/../../../frameworks/adapter-protocol.md.
A component is only "correct" when every variant × state renders right — not just the resting default. Build a states harness: render the component in each applicable state (default, hover, focus, active, disabled, loading aria-busy, error aria-invalid, selected aria-pressed/aria-selected) × each variant in one HTML file (see ${CLAUDE_SKILL_DIR}/../../../examples/component-states/button.html). Then RUN the gates and report their real output (CLAUDE.md → Verification Protocol):
node ${CLAUDE_SKILL_DIR}/../../../scripts/verify_states.mjs <harness> [--dark] — contrast of every element in default/hover/focusnode ${CLAUDE_SKILL_DIR}/../../../scripts/axe_audit.mjs <harness> [--dark] — ARIA/role/name/label correctnessnode ${CLAUDE_SKILL_DIR}/../../../scripts/measure_render.mjs <harness> [--dark] — every text element AAnode ${CLAUDE_SKILL_DIR}/../../../scripts/verify_focustrap.mjs <harness> --open=<trigger>
Every state must pass in light AND dark before the component is "done". Never claim a state is correct without a gate proving it.The contrast/axe gates pass while the UI is still visibly broken: a checkbox that doesn't toggle, a dash sitting at the bottom of its box, a checkmark and an indeterminate dash with mismatched stroke weight, a control that's too heavy. You must screenshot the harness and inspect it before claiming done — for every state, and after interaction. Playwright + system Chrome:
const b = await chromium.launch({channel:'chrome'});
const p = await b.newPage({deviceScaleFactor:4});
await p.goto('file://'+abs); await p.addStyleTag({content:'*{transition:none!important}'});
await p.mouse.move(2000,2000); // park pointer OFF the component
await p.locator('.stack').first().screenshot({path:'/tmp/x.png'});Read the PNG. Then look for, specifically:
await loc.click(); expect(await loc.isChecked())). A custom control whose overlay box covers the real <input> will not toggle unless the box has pointer-events:none (or an enclosing <label> forwards the click).display:grid box holds an opacity:0 sibling plus a ::after, the pseudo lands in row 2 → use display:none on the hidden sibling, or one container child.<svg>, two <path> toggled by state — same stroke-width), never an svg check vs a CSS ::after rect (they read as different weights).Consistency across files is non-negotiable. The same component (e.g. checkbox) must use byte-identical CSS + markup in every harness/page. A checkbox that looks thin in form-controls and heavy (native accent-color) in data-table is a bug. Factor one pattern, reuse it verbatim.
Real <input> underneath (keeps native a11y + keyboard); a drawn .box overlay with pointer-events:none; check + dash as two <path> in one <svg> toggled by :checked / :indeterminate; 1.5px border-strong, .25rem radius, .62rem glyph, stroke-width:2 round caps. Reference: ${CLAUDE_SKILL_DIR}/../../../examples/component-states/form-controls.html and data-table.html (select-all uses indeterminate). Native accent-color renders too heavy — do not use it when the house look is "thin".
Build mobile-first; a fixed-px width that can't shrink is a bug. Run node ${CLAUDE_SKILL_DIR}/../../../scripts/verify_responsive.mjs <file|dir> — it loads each harness at 280/320/414px and fails on any horizontal overflow. The four recurring causes and their fixes:
inline-size:Npx → inline-size:100%;max-inline-size:Npx (cap, don't pin).<ul>/<ol> default 40px inline-start padding (a *{margin:0} reset does NOT clear padding) → padding:0;margin:0 on every list. This also silently mis-aligns a list's edge vs a sibling block (looks like unequal widths) — same fix.flex-wrap:wrap, or for tabs overflow-x:auto + .tab{flex:none}.grid minmax(Npx,1fr) min larger than viewport → minmax(min(Npx,100%),1fr).Timing/easing are tokens (--duration-fast|normal|slow, --ease-out|in|in-out|emphasized in the theme; --transition-micro = fast ease-out). Never hardcode ms/curves. A component that toggles open/closed must animate its height, not just rotate a chevron — collapse via hidden/display:none alone reads as "rigid, no transition". Smooth-height pattern (no JS measuring): wrap content in an inner that clips overflow, animate the grid track:
.panel{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--duration-normal) var(--ease-emphasized)}
.panel.open{grid-template-rows:1fr}
.panel > .inner{overflow:hidden;min-block-size:0}Keep a11y: expand = remove hidden then add .open next frame; collapse = remove .open, set hidden on transitionend. Reference: accordion in ${CLAUDE_SKILL_DIR}/../../../examples/component-states/overlays.html. Always honor @media(prefers-reduced-motion:reduce){…transition:none}.
auto-fit, never auto-fill for card grids. auto-fill keeps empty phantom tracks so 3 cards cluster left with a void on the right; auto-fit collapses empties so cards stretch to fill the row. Always repeat(auto-fit,minmax(min(Npx,100%),1fr)).align-items:stretch on the grid, AND make the shorter panel's body fill — .panel{display:flex;flex-direction:column} + the inner region flex:1. A child sized with block-size:% (e.g. chart bars) needs a definite-height ancestor (a flex:1 box or explicit height), or the % resolves to 0 and the element collapses. Wrap the bar in a flex:1 .barbox and give the bar block-size:% of that.flex:1 capped by max-inline-size stops growing and leaves empty space after the last item. Push the right-hand cluster with margin-inline-start:auto on its first element.display:block so opening the sidebar pushes main down. Reference: ${CLAUDE_SKILL_DIR}/../../../examples/component-states/app-shell.html.Hand-approximated SVG path data renders as broken glyphs (a help "?" became a dot; settings became a hamburger). Use verbatim lucide paths, referenced by name via an injected <symbol> sprite — ${CLAUDE_SKILL_DIR}/../../../examples/component-states/icons.js defines each icon once and <svg class="ico" aria-hidden="true"><use href="#i-NAME"/></svg> uses it. No per-use path duplication, no network, offline + gate-safe. Add a new icon to icons.js once; never paste raw paths into markup. (Inline lucide is acceptable only if the path is copied verbatim from lucide.) .ico{stroke:currentColor;fill:none;stroke-width:2} — color via currentColor.
A no-text control (carousel dot, kebab, icon button) is held to 3:1 (WCAG 1.4.11), not 4.5 — verify_states applies this automatically when an element has no direct text node. Two traps it catches:
<button> keeps the UA color:buttontext (≈black) regardless of theme → set its color to the actual indicator color and drive the visual via currentColor (e.g. dot is a ::before{background:currentColor}), so the gate measures the real thing.--color-chart-N, --color-surface-brand) invert between light/dark; white text or a teal indicator on them passes in one mode and fails the other. Use dark-aware values (override in [data-theme="dark"]) or stable tokens (--color-action-primary, --color-text-link which adapts) for avatars, active dots, and selected states.© plugin87, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/design-component of plugin87/ux-ui-agent-skills.
Open the folder on GitHubat commit 14f8d44
UI Component Spec Designer 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| UI Component Spec Designer this skillplugin87/ux-ui-agent-skills | 1.5k | — | ~2.8k | Automated safety check: Pass | MIT | |
| Material Design 3 UI/UX Guideskydashnet/material-design-3-ui-skill | 130 | — | ~3k | Automated safety check: Pass | MIT | |
| UI Design Systemtry-works/role-model | 117 | — | ~5k | Automated safety check: Pass | MIT | |
| Applying UI Design Systemtelagod/code-abyss | 244 | — | ~538 | Automated safety check: Pass | MIT | |
| Design System Starteraiskillstore/marketplace | 430 | — | ~3.8k | Automated safety check: Pass | None | |
| Design Dnazanwei/design-dna | 1.9k | 1 repos | ~2.1k | Automated safety check: Pass | MIT |
skydashnet/material-design-3-ui-skill
Guides designing, reviewing or implementing interfaces that follow Google's Material Design 3 system: semantic tokens, component states, adaptive layout and accessibility.
try-works/role-model
React UI component systems with TailwindCSS + Radix + shadcn/ui.
telagod/code-abyss
Frontend UI design system selector and implementation guide covering Glassmorphism, Liquid Glass (Apple-style), Neubrutalism, and Claymorphism.
aiskillstore/marketplace
A skill your agent uses when creating or evolving design systems for applications.
zanwei/design-dna
Extract, define, and apply design DNA across three dimensions: design system (tokens), design style (qualitative feel), and visual effects (Canvas, WebGL, 3D, particles, shaders, scroll effects…
Galaxy-Dawn/claude-scholar
Turns a vague UI request into a concrete design system with style, palette, typography and layout guidance from a search script, plus stack-specific implementation advice.
plugin87/ux-ui-agent-skills
Lays out dense analytics or trading-terminal screens in banded sections with hand-drawn SVG charts, instead of a wall of identical stat cards.
plugin87/ux-ui-agent-skills
Creates a new design-product project from the kit's product-design template, then installs the engine folders and the Playwright dependency that the quality gates need.
plugin87/ux-ui-agent-skills
Audits a UI or design against WCAG 2.2 and ARIA patterns and returns findings with the criterion, severity and a specific fix for each.
plugin87/ux-ui-agent-skills
Applies a chosen visual direction, an archetype or one of 138 named design systems, by remapping design tokens, then checks contrast before it finishes.
plugin87/ux-ui-agent-skills
Builds a from-scratch brand design system as three-tier DTCG tokens plus one theme.css with light and dark modes, checked against WCAG contrast rules.
plugin87/ux-ui-agent-skills
Generates complete, accessible, token-driven UI component code for a chosen framework such as React with Tailwind, SwiftUI, Vue, Flutter or Jetpack Compose.
Categories
Writes a complete UI component spec with anatomy, variants, sizes, eight interaction states, design-token mapping and accessibility notes before or alongside code. Given a component such as a button, tabs, toast, combobox or modal, this skill produces a spec in the project's existing format. It first checks whether the component is already documented in the kit's component files, then pulls the matching ARIA pattern and the contrast and target-size rules from the accessibility references, and maps every value to the token JSON files for sizes and states.
UI Component Spec Designer fits situations like: designing a new component at the spec level before building it; documenting an existing button, input or modal with variants and states; checking that a component spec covers keyboard and screen reader behavior.
Run `npx skills add plugin87/ux-ui-agent-skills --skill design-component -a claude-code`. Or copy the skill folder (.claude/skills/design-component in plugin87/ux-ui-agent-skills) into .claude/skills/design-component in your project. Claude Code loads it when a task matches its description.
Run `npx skills add plugin87/ux-ui-agent-skills --skill design-component -a codex`. Or copy the skill folder (.claude/skills/design-component in plugin87/ux-ui-agent-skills) into .agents/skills/design-component in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add plugin87/ux-ui-agent-skills --skill design-component -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/design-component, .gemini/skills/design-component, .github/skills/design-component and .opencode/skills/design-component in your project.
Going by SKILL.md and its folder, UI Component Spec Designer needs the command-line tools its instructions call (node, npx and python3). Our summary lists: The ux-ui-agent-skills kit with its tokens, components and accessibility files; Python 3 and Node.js for the scaffold and state-check scripts.
SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
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.
UI Component Spec Designer is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with UI Component Spec Designer: Material Design 3 UI/UX Guide (skydashnet/material-design-3-ui-skill, 130 stars), UI Design System (try-works/role-model, 117 stars), Applying UI Design System (telagod/code-abyss, 244 stars) and Design System Starter (aiskillstore/marketplace, 430 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
plugin87 (a GitHub user) maintains it in plugin87/ux-ui-agent-skills, which has 1,543 GitHub stars. The repository holds 23 skills in this directory. The repository was last updated on October 7, 2026.
Source: plugin87/ux-ui-agent-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.