Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA standards. Use this skill to generate semantic ARIA for Web and accessibility traits for Web and Native platforms (iOS/Android).
日本語の概要は準備中です。原文の説明を表示しています。
The single UI/UX authority. Use when planning, building, changing, reviewing, or testing any user-facing web UI (Django/Unfold, Tailwind, React, plain HTML), and it leads all Operate work (apps, admin, dashboards, settings, tables, CRUD, forms). Covers tokens, layout, forms, tables, CRUD flows, modals, states, a11y, theme completeness, Paul's settled taste rules and taste log, and a scored self-check.
日本語の概要は準備中です。原文の説明を表示しています。
実行スコア 未検証
インストール方法を見るインストールする前に、エージェントに与えられる指示の中身を確認できます。
One operational playbook for product UI. It encodes Paul's observed taste and recurring
corrections (mined from ~4,350 of his agent-chat turns, his MemPalace UI feedback, and the
Tailwind/CSS in his shipped projects), then fills gaps with verifiable best practice.
Evidence counts are in references/sources.md.
This skill is the single authority for interface behaviour and presentation. ui-ux-principles
is now a redirect here, and compact-ui-decisions has been folded in. Other UI skills (frontend-design,
design-taste, impeccable, ui-ux-pro-max, apple-design, presets) add specialist guidance only; for
app, dashboard and product UI they defer to this skill. Load references only when needed:
| Need | Read |
|---|---|
| Exact token values, Tailwind mapping, adopting a project's tokens | references/tokens.md |
| Buttons, forms, tables, modals/drawers, nav, menus, toasts | references/components.md |
| Empty / loading / error / partial / success / denied / offline + copy | references/states.md |
| Create / edit / delete / bulk / optimistic / undo flows | references/crud-flows.md |
| Scoring before you finish | references/rubric.md |
| Where each rule comes from | references/sources.md |
| Paul's dated corrections (read the last 20 entries before UI work; append new ones) | references/taste-log.md |
references/taste-log.md). Where the log and a generic default in this skill disagree, Paul's log wins.tailwind.config.*, @theme, :root { --… },
Unfold UNFOLD["COLORS"], shadcn components.json/globals.css, existing button/input classes.
If found, map them onto the roles in section 3 and use only those. Only if nothing exists, use section 3.List → New → Form → Save → back to List with row highlighted) and an ASCII wireframe of each
distinct screen or overlay. This catches extra clicks and wrong container choices before code.references/taste-log.md before starting.Each rule cites the evidence theme. n = count of Paul's chat turns matching that theme.
Density and spacing (MemPalace: 5 spacing_off + 4 approved: dense/compact drawers; "too much space/padding" n=29; commits "Compact…", "Tighten…" in tensology.com, Mailshot, DecisionsAI n=26)
text-sm (14/20), meta and table headers text-xs (12/16).
This matches his shipped code (text-sm and text-xs are the top two sizes in every project surveyed).gap-2, gap-3, p-4), the three most-used spacings in his code.
Toolbars py-2; table rows 40px; card/panel padding 16px; modal padding 20–24px. Never stack padding on
padding (wrapper inside card inside section, each with p-6).min-h-screen centring of small content
inside an app shell.Remove, don't add ("remove/get rid of/take out/hide …" n=110, the largest single correction; MemPalace inconsistent_styling, hierarchy_unclear)
Real content, no AI slop ("slop/brochure/what is this copy/fake" n=17 + placeholder/fake n=27)
01/02/03 markers on non-sequences, no fake prices/estimates/counts. Labels are short and literal.Alignment and centring ("vertically/horizontally centred / not centred" n=52; "align" commits n=31)
items-center for every row that mixes icon, text, button, avatar. Modals are
centred vertically and horizontally in the viewport. Section edges share one content frame.Consistency across pages ("consistent/inconsistent/same as/standardised" n=48; "Unify…" commits)
Everything that looks clickable works ("doesn't work / nothing happens / close button / can't click" n=44; "still/again/I said" n=215)
×, overlay click, Escape, row click and menu item is wired and tested.
Close buttons close. Clicking a row does exactly one predictable thing.flow_bad: "validate the complete responsive
flow in Playwright before calling an interface finished").Modals and dropdowns ("modal" n=63; "dropdown" n=62)
bg-slate-900/50), working ×, Escape and overlay click (unless
dirty form), focus trapped and returned, body scroll locked while open and restored after, never
stacked, never on page load.Feedback beside the cause (MemPalace spacing_off + hierarchy_unclear: "show status beside the affected item"; spinner/feedback n=28)
Too small / too bold ("too small" n=16; "too big/bold" n=11)
Grouping and compactness (folded in from compact-ui-decisions)
references/taste-log.md; these override older defaults)prefers-reduced-motion); truncate
with a title tooltip otherwise.Keep a matrix of route x role/permission x state x viewport x requested behaviour, including negative cases and hidden or unavailable actions. Every applicable cell is verified, explicitly excluded with a reason, or reported as blocked. Reconcile the final UI line by line against every item in the request and any supplied reference; a successful build, a representative screenshot or a passing happy path is not proof of completion.
references/taste-log.md: YYYY-MM-DD | Did: <decision> | Wanted: <replacement> | Why: <reason>.
Record only real corrections, never inferred preferences; ask for the reason if it is unclear.Full values, dark mode and Tailwind/Unfold mapping: references/tokens.md.
bg white · surface slate-50 · border slate-200 ·
border-strong slate-300 · text slate-900 · text-muted slate-600 · accent blue-600 (hover 700,
subtle blue-50) · focus blue-500 ring · success green-700 · warning amber-700 · danger red-600
(hover 700, subtle red-50). One accent. Status colours never used for decoration.
White text needs blue-600 or darker (blue-500 is 3.7:1 and fails for button text).shadow-sm sticky header/raised card ·
2 shadow-md menus/popovers/dropdowns, no border (shadow is the separation) · 3 shadow-xl modals/drawers with overlay.transform/opacity only · honour prefers-reduced-motion. No ambient
loops in Operate UI (Persuade surfaces: see section 1).references/components.md)type/autocomplete;
validate on blur after the user has typed, re-validate on input once a field is in error, full
validation on submit, focus the first invalid field; errors below the field in red-600 with an icon and
aria-describedby; keep input on every error; warn before discarding unsaved changes.<table> with <th scope>; toolbar = search (debounced 250ms) + filters + primary
action; sortable headers with aria-sort; numbers right-aligned tabular; one Actions column on the
right with labelled icon buttons or a menu; pagination with "1–20 of 134"; bulk select appears as a
contextual action bar; rows become cards under 640px; state (search/sort/page) in the URL when routed.aria-current).
Breadcrumb only for depth ≥3. Master/detail (list → detail) keeps the list context (back link or split pane).references/states.md)Every data view ships all applicable states, reachable for testing (toggle, query param or dev control):
empty (first-use with primary action; and no-results with "Clear filters") · loading (skeleton
matching final layout; button spinners for actions) · error (what failed + retry, input preserved) ·
partial (some items failed or stale data: say which, offer retry) · success (top-centre snackbar or inline,
auto-dismiss 4–6s, aria-live="polite") · permission-denied (hide or disable with reason; never a
dead button) · offline (banner, queue or block writes, keep reads).
references/crud-flows.md)alert()/confirm().Text contrast ≥4.5:1 (≥3:1 for ≥24px or ≥18.7px bold); UI component and focus-indicator contrast ≥3:1;
visible :focus-visible ring on every interactive element, never hidden under sticky bars; full keyboard
operation (Tab order = visual order, Escape closes overlays, Enter submits); targets ≥24×24px (44px on
touch); every input labelled; icon-only buttons have aria-label; status messages via aria-live;
dialogs use role="dialog", aria-modal, labelled title, focus trap and focus return; colour is never
the only signal; zoom not disabled; prefers-reduced-motion honoured.
Mobile-first; review at 390, 768 and 1280, plus 1440 for wide checks. Recompose by task order, don't shrink. Sidebar → sheet; table → cards or priority columns with horizontal scroll inside the table container only; drawers → full-screen sheets; toolbar wraps with primary action kept visible; no horizontal page overflow; inputs ≥16px on mobile to avoid iOS zoom; sticky bottom action bar only for long forms.
No em dashes (U+2014) in UI copy, rationale or labels the agent writes; use commas, colons, periods or
parentheses. Do not rewrite copy Paul or the client supplied. Typographic en dashes for numeric ranges
(1–20 of 134) are fine. This is the stack-wide ruling; other skills defer to it.
When you deliver UI, include a short Interaction rationale (in the reply, or as an HTML comment at the top of a single-file deliverable). One line per significant interaction choice, each tied to a named principle or Paul's rule. Format:
Interaction rationale
- Edit book in a modal (5 fields, keeps list context): Container choice rule; Jakob's law (familiar CRUD modal)
- Delete author asks to confirm and names cascade of 4 books: Nielsen #5 error prevention; CRUD delete rule
- Save button shows spinner + "Saving…" in place: Paul, feedback beside the cause; Nielsen #1 visibility of status
- Search filters as you type (250ms debounce): Doherty threshold (<400ms response)
Valid principle names: Nielsen heuristics #1–10, Fitts's law, Hick's law, Jakob's law, Miller's law, Doherty threshold, Tesler's law, Postel's law, Gestalt proximity/similarity, WCAG 2.2 SC numbers, the rules in this skill (cite section). A choice with no principle is a candidate for removal.
Run references/rubric.md and report the score table. Minimum to ship: every gate passes and total
≥ 80/100. Gates (any fail = not done):
p-[13px], #3a3a3a, ad-hoc shadows); one accent; ≤2 font families.If you cannot run a browser, say exactly which checks were done by reading code only.
まだレビューはありません。使ってみた感想をお寄せください。
ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。
まだコメントはありません。最初のコメントを書いてみませんか。
Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA standards. Use this skill to generate semantic ARIA for Web and accessibility traits for Web and Native platforms (iOS/Android).
日本語の概要は準備中です。原文の説明を表示しています。
Whole site or product — a full web accessibility (a11y) audit against WCAG 2.2, following the WCAG-EM methodology. Defines scope, samples representative pages and flows, runs the automated tier (`accessibility-scan`) and the hands-on manual tier (`accessibility-inspect`), and produces one conformance report. Grades each finding by severity and evidence basis, and states per-criterion conformance as pass, fail, or undetermined (needs a human). Use it for 'audit my site for accessibility', 'is this product accessible', 'a11y audit', 'WCAG or Section 508 conformance report', or any multi-page assessment. Assesses; does not fix (use `accessibility-fix`) or diff (use `accessibility-diff`). For a single page use `accessibility-scan`; for hands-on keyboard and screen-reader checks use `accessibility-inspect`.
日本語の概要は準備中です。原文の説明を表示しています。
Regression check — diff a live page's web accessibility (a11y) violations against a baseline. By default it compares your uncommitted changes (stash-based); pass `--branch [<name>]` to compare against a branch. Reports the new WCAG violations introduced, the ones fixed, and the count of pre-existing ones. Use it for 'did my change break accessibility', 'what a11y issues did this PR add', or as a CI gate. For a full scan of one page use `accessibility-scan`; for a whole site use `accessibility-audit`.
日本語の概要は準備中です。原文の説明を表示しています。
Remediation only — repair web accessibility (a11y) violations against WCAG 2.2 with a baseline, edit, and verify loop. Takes a target (URL, files, directory) or a findings worklist from `accessibility-scan`/`accessibility-inspect`/`accessibility-audit`, applies mechanical fixes as given, leaves TODOs for visual or contextual judgment, and verifies by re-running the baseline check. It only fixes. To find issues use `accessibility-scan` (one page, automated), `accessibility-inspect` (one page, manual), or `accessibility-audit` (whole site, WCAG-EM); to check for regressions use `accessibility-diff`. Use it for 'fix the a11y issues in X', 'make this accessible', 'add missing alt text and labels', 'apply these accessibility fixes', 'remediate these violations'.
日本語の概要は準備中です。原文の説明を表示しています。
One page, hands-on manual tier — drive a live page through the web accessibility (a11y) checks a rule engine can't decide: keyboard operation and focus order, screen-reader names, roles and states from the accessibility tree, reflow and zoom, reduced motion, form errors, and target size. Grades each finding by evidence basis (verified / confirm-with-a-human / human-required) and severity, and closes every criterion in a ledger: verified, flagged, not exercised, or N/A. Locates and assesses; does not fix (use `accessibility-fix`). Use it for keyboard testing, focus-order checks, screen-reader or a11y-tree review, reflow and zoom at 200%, or 'is this operable, not just lint-clean'. The automated tier is `accessibility-scan`; `accessibility-audit` runs both across a sampled site.
日本語の概要は準備中です。原文の説明を表示しています。
One page, automated tier — run the web accessibility (a11y) rule engine against a live page and locate every violation it can detect mechanically. Pass a URL, a config target name (e.g. `accesslint:accessibility-scan dev`), or nothing to use the default target from `accesslint.config.json`. Ensures a debuggable Chrome, runs the @accesslint/core engine over CDP, and returns a worklist of live-DOM WCAG 2.2 violations, each grounded to its DOM selector and source `file:line`. Locates; doesn't edit. Use it for 'is this page accessible', 'check a11y on this URL', 'find contrast and alt-text issues', or to verify a UI change. For hands-on keyboard and screen-reader checks use `accessibility-inspect`; for a whole site or product use `accessibility-audit`; to diff against uncommitted changes or a branch use `accessibility-diff`.
日本語の概要は準備中です。原文の説明を表示しています。