UI Design
Use one product-surface loop. Preserve existing brand tokens and component
conventions as the authority; do not replace them with a generic style guide.
This is the shared entry point for interface design. Supporting skills below
are implementation details, not alternative design workflows. Read the shared
contract once; a link back from a supporting skill is not a recursive reload.
Editable visual blocks
For an illustrated hero, promotional banner, product infographic, or a supplied
visual to rebuild as editable UI, read
Editable visual assets. Keep text,
controls, data, and layout native to the product; generate only the imagery
that the requested composition needs. A screenshot is a preview, not editable
source or interaction proof. Ordinary forms and small CSS fixes skip this mode.
Standalone posters and PowerPoint conversion are separate deliverables, not
mandatory stages of UI work.
Select the smallest supporting skill set
- Read
../ui-ux-pro-max/SKILL.md for a new surface, substantial redesign, or
a visual/UX decision that needs evidence. Use its local search scripts with
a short, specific query. Treat a zero-result search as zero evidence; do
not invent a recommendation. Do not persist a generated design-system file
unless the task explicitly asks for it.
- Read
../frontend-design/SKILL.md while changing an HTML, browser, or UXP
frontend. Keep the implementation native to the detected stack and existing
component system. Do not apply its browser CSS/ARIA recipes to a native
Qt/QML surface.
- Read
../motion-framer/SKILL.md only when the changed surface is React/JS
and the project already uses motion/framer-motion, or the user has
explicitly authorized adding it. Otherwise use the platform's native
primitives; never add the package merely to animate a control.
- For a running surface, use the inspection tool that matches the surface:
browser screenshot, interaction, accessibility-tree, and visual-diff tools
are for browser/UXP/HTML. For native Qt/QML, use available native desktop
and accessibility inspection instead. Never require a browser tool to prove
a native application.
- For native Qt/QML, keep existing Qt Quick Controls and theme components as
the authority. When custom controls or focus behavior change, consult the
Qt Quick input-focus and
accessibility guidance;
verify native accessible semantics and keyboard behavior rather than
substituting ARIA or CSS rules.
Do not load all four by default. A focused CSS fix normally needs only the
implementation guidance and a focused proof.
Work in one loop
- Inspect the target surface, real stack, existing tokens/components, changed
user flow, supported widths, and any current visual evidence.
- State a compact design contract before editing: primary user action,
information hierarchy, reuse/new tokens, keyboard/contrast behavior, and
platform-appropriate sizing and motion behavior. Browser breakpoints and
prefers-reduced-motion are conditional, not universal desktop
requirements. For a tiny local fix, keep this contract proportional to that
fix.
- Implement the visual and interaction changes together. Prefer semantic
structure, stable component boundaries, and design tokens over one-off
pixel overrides. Do not add animation that obscures feedback, delays an
action, or ignores reduced-motion preferences.
- Verify the changed flow at the narrowest real boundary: project checks
first, then live behavior appropriate to the target when runnable and the
risk warrants it. Use browser/UXP screenshot and accessibility-tree evidence
for web surfaces; use native Qt/QML keyboard and accessibility inspection for
desktop surfaces. Check the affected platform sizing, keyboard path, visible
focus, contrast, overflow, and motion behavior rather than declaring a page
"polished" from source code alone. A source read or screenshot without an
identified running build is never runtime PASS.
Decision boundaries
- Keep an established design system unless the task is explicitly a redesign.
- Keep UI Pro Max as retrieval evidence, not as an authority over the product's
brand, accessibility contract, or existing UX research.
- Treat motion as progressive enhancement. The same action and information
must remain clear with reduced motion and without animation support.
- Do not broaden a UI request into unrelated product copy, backend, analytics,
or global restyling without evidence that the requested flow requires it.
Interaction-specific proof
Apply only the slice that the changed surface contains; this is not a demand to
add a modal, custom validation, or extra animation to an otherwise simple UI.
Browser-specific ARIA, CSS, and WCAG-pixel checks do not prove a native QML
implementation; source inspection alone does not prove any runtime behavior.
Native Qt/QML custom control: verify actual Tab/focus-scope traversal,
visible focus, documented keyboard activation, and Qt Quick accessible
role/name/state with a native accessibility inspector where available. Keep
a runtime receipt tied to the build identity.
Native Qt/QML modal/dialog: verify initial focus, keyboard operation,
modal containment when applicable, and focus return to the invoking control
after close.
Native Qt/QML form/error: verify keyboard reachability and that
error/status text is exposed through the native accessibility path; do not
infer it from a property declaration.
End-to-end retouch workflow: verify the real user path (for example,
import, adjust, apply/save) in the running native app before calling the
surface usable; code or a static screenshot is only source/visual evidence.
Modal dialog: verify that opening moves focus into the dialog, Tab and
Shift+Tab stay in its sequence, Escape closes it when the product supports
dismissal, and closing restores focus to the invoking control (or a documented
logical successor). Do not claim aria-modal unless the background is actually
inert. WAI-ARIA APG modal-dialog pattern
HTML/UXP form error: verify a detected invalid field is identified and
its error is described in text. An inline message, summary, alert, or native
validation can be appropriate only when the real browser/assistive-technology
behavior supports the chosen path; color alone is not an error description.
WCAG 2.2 SC 3.3.1
HTML/UXP dense pointer controls: for adjacent compact controls, assess the WCAG
2.5.8 boundary: a 24 by 24 CSS-pixel target or its spacing/equivalent/inline
exception. Do not blindly enlarge an inline link or an essential dense control.
WCAG 2.2 SC 2.5.8
Web motion: when motion changes, exercise the reduced-motion branch rather
than assuming that a static source review proves it. prefers-reduced-motion
communicates the user's request to reduce, remove, or replace non-essential
motion. MDN reference
Native motion: verify the product's documented OS/app motion accommodation
if it exists. Do not invent a CSS media-query requirement for QML.
Local UI Pro Max validation boundary
The vendored ui-ux-pro-max folder is a distributed skill, not its complete
upstream repository. Its local acceptance checks are the data validation and a
real, scoped retrieval query, for example:
python skills/frontend/ui-ux-pro-max/scripts/validate_data.py
python skills/frontend/ui-ux-pro-max/scripts/search.py "keyboard focus modal" --domain ux
Do not run or report test_catalog_refresh.py or test_relevance_evaluator.py
as local PASS criteria: each imports an upstream-root script absent from the
distributed skill. Preserve that boundary as NOT_RUN_UPSTREAM_DEPENDENCY, not
as a failure repaired with stubs or as a passing test.
Gotchas
- A fixed-canvas poster can look excellent while being unsuitable for a
responsive interface. Do not import its absolute-pixel, single-file layout
policy into a product.
- A selectable raster layer is not editable text, a working control, or a
data-bound chart. Name the actual editability boundary.
Troubleshooting
- The agent found only
frontend-design: follow its shared-entry link here
once, then load only the reference needed for the changed surface.
- A copy change requires regenerating the hero: extract the copy into native
text and keep the illustration separate; verify wrapping and contrast.
- The render is correct but an action cannot be used: inspect the running
control, focus, and hit area. More screenshot polishing does not fix it.
1---2name: ui-design3description: Unify product UI design, frontend implementation, and verification. Use when asked to design, redesign, build, or fix a web, desktop, or mobile interface; a page, dashboard, form, component, design system, responsive layout, accessibility, interface animation, or editable hero/banner/infographic within a product surface. Combine visual decisions with implementation. Do not use for backend-only work, generic architecture, standalone artwork or slide decks, or browser-test-only requests.4---56# UI Design78Use one product-surface loop. Preserve existing brand tokens and component9conventions as the authority; do not replace them with a generic style guide.1011This is the shared entry point for interface design. Supporting skills below12are implementation details, not alternative design workflows. Read the shared13contract once; a link back from a supporting skill is not a recursive reload.1415## Editable visual blocks1617For an illustrated hero, promotional banner, product infographic, or a supplied18visual to rebuild as editable UI, read19[Editable visual assets](references/editable-visual-assets.md). Keep text,20controls, data, and layout native to the product; generate only the imagery21that the requested composition needs. A screenshot is a preview, not editable22source or interaction proof. Ordinary forms and small CSS fixes skip this mode.23Standalone posters and PowerPoint conversion are separate deliverables, not24mandatory stages of UI work.2526## Select the smallest supporting skill set27281. Read `../ui-ux-pro-max/SKILL.md` for a new surface, substantial redesign, or29 a visual/UX decision that needs evidence. Use its local search scripts with30 a short, specific query. Treat a zero-result search as zero evidence; do31 not invent a recommendation. Do not persist a generated design-system file32 unless the task explicitly asks for it.332. Read `../frontend-design/SKILL.md` while changing an HTML, browser, or UXP34 frontend. Keep the implementation native to the detected stack and existing35 component system. Do not apply its browser CSS/ARIA recipes to a native36 Qt/QML surface.373. Read `../motion-framer/SKILL.md` only when the changed surface is React/JS38 and the project already uses `motion`/`framer-motion`, or the user has39 explicitly authorized adding it. Otherwise use the platform's native40 primitives; never add the package merely to animate a control.414. For a running surface, use the inspection tool that matches the surface:42 browser screenshot, interaction, accessibility-tree, and visual-diff tools43 are for browser/UXP/HTML. For native Qt/QML, use available native desktop44 and accessibility inspection instead. Never require a browser tool to prove45 a native application.465. For native Qt/QML, keep existing Qt Quick Controls and theme components as47 the authority. When custom controls or focus behavior change, consult the48 Qt Quick [input-focus](https://doc.qt.io/qt-6/qtquick-input-focus.html) and49 [accessibility](https://doc.qt.io/qt-6/accessible-qtquick.html) guidance;50 verify native accessible semantics and keyboard behavior rather than51 substituting ARIA or CSS rules.5253Do not load all four by default. A focused CSS fix normally needs only the54implementation guidance and a focused proof.5556## Work in one loop57581. Inspect the target surface, real stack, existing tokens/components, changed59 user flow, supported widths, and any current visual evidence.602. State a compact design contract before editing: primary user action,61 information hierarchy, reuse/new tokens, keyboard/contrast behavior, and62 platform-appropriate sizing and motion behavior. Browser breakpoints and63 `prefers-reduced-motion` are conditional, not universal desktop64 requirements. For a tiny local fix, keep this contract proportional to that65 fix.663. Implement the visual and interaction changes together. Prefer semantic67 structure, stable component boundaries, and design tokens over one-off68 pixel overrides. Do not add animation that obscures feedback, delays an69 action, or ignores reduced-motion preferences.704. Verify the changed flow at the narrowest real boundary: project checks71 first, then live behavior appropriate to the target when runnable and the72 risk warrants it. Use browser/UXP screenshot and accessibility-tree evidence73 for web surfaces; use native Qt/QML keyboard and accessibility inspection for74 desktop surfaces. Check the affected platform sizing, keyboard path, visible75 focus, contrast, overflow, and motion behavior rather than declaring a page76 "polished" from source code alone. A source read or screenshot without an77 identified running build is never runtime PASS.7879## Decision boundaries8081- Keep an established design system unless the task is explicitly a redesign.82- Keep UI Pro Max as retrieval evidence, not as an authority over the product's83 brand, accessibility contract, or existing UX research.84- Treat motion as progressive enhancement. The same action and information85 must remain clear with reduced motion and without animation support.86- Do not broaden a UI request into unrelated product copy, backend, analytics,87 or global restyling without evidence that the requested flow requires it.8889## Interaction-specific proof9091Apply only the slice that the changed surface contains; this is not a demand to92add a modal, custom validation, or extra animation to an otherwise simple UI.93Browser-specific ARIA, CSS, and WCAG-pixel checks do not prove a native QML94implementation; source inspection alone does not prove any runtime behavior.9596- **Native Qt/QML custom control:** verify actual `Tab`/focus-scope traversal,97 visible focus, documented keyboard activation, and Qt Quick accessible98 role/name/state with a native accessibility inspector where available. Keep99 a runtime receipt tied to the build identity.100- **Native Qt/QML modal/dialog:** verify initial focus, keyboard operation,101 modal containment when applicable, and focus return to the invoking control102 after close.103- **Native Qt/QML form/error:** verify keyboard reachability and that104 error/status text is exposed through the native accessibility path; do not105 infer it from a property declaration.106- **End-to-end retouch workflow:** verify the real user path (for example,107 import, adjust, apply/save) in the running native app before calling the108 surface usable; code or a static screenshot is only source/visual evidence.109110- **Modal dialog:** verify that opening moves focus into the dialog, `Tab` and111 `Shift+Tab` stay in its sequence, `Escape` closes it when the product supports112 dismissal, and closing restores focus to the invoking control (or a documented113 logical successor). Do not claim `aria-modal` unless the background is actually114 inert. [WAI-ARIA APG modal-dialog pattern](https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/)115- **HTML/UXP form error:** verify a detected invalid field is identified and116 its error is described in text. An inline message, summary, alert, or native117 validation can be appropriate only when the real browser/assistive-technology118 behavior supports the chosen path; color alone is not an error description.119 [WCAG 2.2 SC 3.3.1](https://www.w3.org/WAI/WCAG22/Understanding/error-identification.html)120- **HTML/UXP dense pointer controls:** for adjacent compact controls, assess the WCAG121 2.5.8 boundary: a 24 by 24 CSS-pixel target or its spacing/equivalent/inline122 exception. Do not blindly enlarge an inline link or an essential dense control.123 [WCAG 2.2 SC 2.5.8](https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html)124- **Web motion:** when motion changes, exercise the reduced-motion branch rather125 than assuming that a static source review proves it. `prefers-reduced-motion`126 communicates the user's request to reduce, remove, or replace non-essential127 motion. [MDN reference](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion)128- **Native motion:** verify the product's documented OS/app motion accommodation129 if it exists. Do not invent a CSS media-query requirement for QML.130131## Local UI Pro Max validation boundary132133The vendored `ui-ux-pro-max` folder is a distributed skill, not its complete134upstream repository. Its local acceptance checks are the data validation and a135real, scoped retrieval query, for example:136137```powershell138python skills/frontend/ui-ux-pro-max/scripts/validate_data.py139python skills/frontend/ui-ux-pro-max/scripts/search.py "keyboard focus modal" --domain ux140```141142Do not run or report `test_catalog_refresh.py` or `test_relevance_evaluator.py`143as local PASS criteria: each imports an upstream-root script absent from the144distributed skill. Preserve that boundary as `NOT_RUN_UPSTREAM_DEPENDENCY`, not145as a failure repaired with stubs or as a passing test.146147## Gotchas148149- A fixed-canvas poster can look excellent while being unsuitable for a150 responsive interface. Do not import its absolute-pixel, single-file layout151 policy into a product.152- A selectable raster layer is not editable text, a working control, or a153 data-bound chart. Name the actual editability boundary.154155## Troubleshooting156157- The agent found only `frontend-design`: follow its shared-entry link here158 once, then load only the reference needed for the changed surface.159- A copy change requires regenerating the hero: extract the copy into native160 text and keep the illustration separate; verify wrapping and contrast.161- The render is correct but an action cannot be used: inspect the running162 control, focus, and hit area. More screenshot polishing does not fix it.