@tamsensedev/runner 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +5 -0
- package/README.md +45 -2
- package/dist/cli.js +2234 -0
- package/dist/cli.js.map +1 -0
- package/library/.claude-plugin/plugin.json +5 -0
- package/library/THIRD_PARTY_NOTICES.md +123 -0
- package/library/agents/code-architect.md +67 -0
- package/library/agents/code-explorer.md +61 -0
- package/library/agents/code-reviewer.md +73 -0
- package/library/agents/code-simplifier.md +62 -0
- package/library/agents/design-critic.md +52 -0
- package/library/agents/second-opinion.md +64 -0
- package/library/agents/security-auditor.md +86 -0
- package/library/agents/silent-failure-hunter.md +70 -0
- package/library/agents/test-coverage-analyzer.md +78 -0
- package/library/agents/test-runner.md +48 -0
- package/library/agents/ui-tester.md +47 -0
- package/library/licenses/Apache-2.0.txt +202 -0
- package/library/skills/accessibility/SKILL.md +144 -0
- package/library/skills/accessibility/references/wcag-checks.md +168 -0
- package/library/skills/addressing-review-feedback/SKILL.md +109 -0
- package/library/skills/app-screens/SKILL.md +96 -0
- package/library/skills/app-screens/references/shell-kpis-charts.md +108 -0
- package/library/skills/app-screens/references/states-density-phone.md +54 -0
- package/library/skills/app-screens/references/tables-forms-settings.md +104 -0
- package/library/skills/avoiding-generic-ai-design/SKILL.md +92 -0
- package/library/skills/avoiding-generic-ai-design/references/tells.md +112 -0
- package/library/skills/clean-commits/SKILL.md +85 -0
- package/library/skills/design-review/SKILL.md +107 -0
- package/library/skills/design-review/references/critique-passes.md +101 -0
- package/library/skills/design-review/references/screenshot-procedure.md +113 -0
- package/library/skills/differential-security-review/LICENSE +427 -0
- package/library/skills/differential-security-review/SKILL.md +105 -0
- package/library/skills/differential-security-review/references/adversarial.md +115 -0
- package/library/skills/differential-security-review/references/methodology.md +145 -0
- package/library/skills/differential-security-review/references/patterns.md +108 -0
- package/library/skills/false-positive-check/LICENSE +427 -0
- package/library/skills/false-positive-check/SKILL.md +95 -0
- package/library/skills/false-positive-check/references/bug-class-verification.md +128 -0
- package/library/skills/false-positive-check/references/deep-verification.md +113 -0
- package/library/skills/false-positive-check/references/evidence-templates.md +93 -0
- package/library/skills/false-positive-check/references/false-positive-patterns.md +122 -0
- package/library/skills/false-positive-check/references/gate-reviews.md +36 -0
- package/library/skills/false-positive-check/references/standard-verification.md +80 -0
- package/library/skills/focused-implementation/SKILL.md +104 -0
- package/library/skills/implementation-plan/SKILL.md +66 -0
- package/library/skills/interface-design/SKILL.md +144 -0
- package/library/skills/interface-design/references/craft-defaults.md +130 -0
- package/library/skills/interface-design/references/new-direction.md +62 -0
- package/library/skills/interface-design/references/writing.md +52 -0
- package/library/skills/interface-polish/SKILL.md +103 -0
- package/library/skills/interface-polish/references/detail-rules.md +154 -0
- package/library/skills/interface-polish/references/worst-case-data.md +158 -0
- package/library/skills/motion-design/SKILL.md +106 -0
- package/library/skills/motion-design/references/recipes.md +243 -0
- package/library/skills/postgres-performance/SKILL.md +97 -0
- package/library/skills/postgres-performance/references/rules.md +265 -0
- package/library/skills/project-orientation/SKILL.md +77 -0
- package/library/skills/reviewing-changes/SKILL.md +183 -0
- package/library/skills/safe-database-changes/SKILL.md +111 -0
- package/library/skills/safe-database-changes/references/backfills.md +75 -0
- package/library/skills/safe-database-changes/references/migration-tools.md +69 -0
- package/library/skills/safe-database-changes/references/postgres-ddl.md +199 -0
- package/library/skills/security-review/SKILL.md +132 -0
- package/library/skills/security-review/references/checks-by-area.md +107 -0
- package/library/skills/security-review/references/do-not-report.md +86 -0
- package/library/skills/spec-writing/SKILL.md +144 -0
- package/library/skills/systematic-debugging/SKILL.md +130 -0
- package/library/skills/systematic-debugging/references/flaky-tests.md +51 -0
- package/library/skills/systematic-debugging/references/root-cause-tracing.md +55 -0
- package/library/skills/task-interview/SKILL.md +84 -0
- package/library/skills/test-driven-development/SKILL.md +116 -0
- package/library/skills/test-driven-development/references/writing-good-tests.md +85 -0
- package/library/skills/ui-testing/SKILL.md +99 -0
- package/library/skills/ui-testing/references/headless-check.md +262 -0
- package/library/skills/ui-testing/references/playwright-patterns.md +134 -0
- package/library/skills/verification-before-completion/SKILL.md +113 -0
- package/library/skills/web-interface-guidelines/SKILL.md +202 -0
- package/package.json +44 -5
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: interface-design
|
|
3
|
+
description: Use when building or changing anything people see in a web or app UI (a screen, page, component, restyle, layout, typography, colour or spacing). Covers following the project's design system, hierarchy, type and spacing scales, colour and depth, states, real content, and looking at the rendered result before finishing.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Interface design
|
|
7
|
+
|
|
8
|
+
The goal is an interface that looks decided, not just correct: one thing leads, the type and spacing follow a system, colour means something, every state exists, and the result belongs to this product. Generated UI usually fails by defaulting, not by breaking. This skill is the process for deciding.
|
|
9
|
+
|
|
10
|
+
## What wins when rules disagree
|
|
11
|
+
|
|
12
|
+
1. **The task's explicit wording.** If it asks for a new look, a specific colour or a pattern, do that.
|
|
13
|
+
2. **The project's own design sources**: DESIGN.md (or a design section in CLAUDE.md / AGENTS.md), theme and token files, the component library, Storybook, and existing screens that do the same job. These always beat any rule or banned pattern in this library. If the product already has a look, extend it.
|
|
14
|
+
3. **The craft rules and default numbers in this library.** Numbers here are defaults for when the project has none.
|
|
15
|
+
4. **Taste lists** such as `avoiding-generic-ai-design`. They describe defaults to avoid when a choice is free; they never override the project.
|
|
16
|
+
|
|
17
|
+
The accessibility floor is not taste: if a project token fails contrast or a component has no focus style, use the nearest passing token or add the missing state, and say so in the report. Details live in the `accessibility` skill.
|
|
18
|
+
|
|
19
|
+
Nobody will answer questions during the run. When something is unclear, decide, write the assumption down, and list it in the final report.
|
|
20
|
+
|
|
21
|
+
## Step 1: Find what already exists
|
|
22
|
+
|
|
23
|
+
Before writing UI code, spend a few minutes on:
|
|
24
|
+
|
|
25
|
+
- Design documents: `DESIGN.md`, `docs/design*`, design notes in CLAUDE.md / AGENTS.md / CONTRIBUTING.
|
|
26
|
+
- Tokens: CSS custom properties, Tailwind config or `@theme`, SCSS variables, a theme object, design-token JSON.
|
|
27
|
+
- Components: the project's `Button`, `Input`, `Dialog`, `Table`, layout shells, icon set, and any headless primitives already installed.
|
|
28
|
+
- The nearest sibling screen that does a similar job. It shows spacing, density, headings, empty states and copy tone in practice.
|
|
29
|
+
- The styling system (Tailwind, CSS modules, plain CSS, CSS-in-JS, a UI kit) and lint rules about styles.
|
|
30
|
+
|
|
31
|
+
Write a short note for yourself:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
Design sources: DESIGN.md, src/styles/tokens.css, components/ui/*
|
|
35
|
+
Look: light, neutral greys, one blue accent, 8px radius, borders not shadows, Inter 14px body
|
|
36
|
+
Sibling screen: /settings/members (same table, same empty state)
|
|
37
|
+
Gaps: no warning colour token, no skeleton component
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Step 2: Extend, or choose a fresh direction
|
|
41
|
+
|
|
42
|
+
- **Extend (the default).** The product has screens, tokens or a component library. Use them. New surfaces should look like they shipped with the rest. Fill gaps (a missing token, a missing state) in the project's own style and name them in the report.
|
|
43
|
+
- **Fresh direction.** Only when the product has no UI yet, or the task explicitly asks for a new look. Then choose one coherent direction yourself (nobody will pick for you), following [references/new-direction.md](references/new-direction.md), and state the direction in the report.
|
|
44
|
+
|
|
45
|
+
Never mix: do not bring a new palette, font or radius into one corner of an existing product because it "looks better".
|
|
46
|
+
|
|
47
|
+
## Step 3: Name the job of the screen
|
|
48
|
+
|
|
49
|
+
Write three lines before building:
|
|
50
|
+
|
|
51
|
+
- **Who and when.** "Support lead, many times a day, on a laptop." Not "users".
|
|
52
|
+
- **The verb.** What they must get done here: approve, find the failed deploy, invite a teammate.
|
|
53
|
+
- **The focal element.** The one thing that answers the screen's question. It must win through size, weight, contrast or the space around it; everything else is deliberately demoted.
|
|
54
|
+
|
|
55
|
+
Dashboards, tables, admin, settings and other screens people work in: also follow `app-screens`. Landing and marketing pages: see the pages section of [references/new-direction.md](references/new-direction.md).
|
|
56
|
+
|
|
57
|
+
## Step 4: Build with what exists
|
|
58
|
+
|
|
59
|
+
Controls, in this order:
|
|
60
|
+
|
|
61
|
+
1. Native HTML that does the job (`<button>`, `<a href>`, `<input>`, `<dialog>`, `<details>`, `<label>`).
|
|
62
|
+
2. The project's component for it.
|
|
63
|
+
3. An accessible headless primitive the project already has (Radix, React Aria, Ark, Headless UI, Reka UI, Bits UI, Angular CDK and similar).
|
|
64
|
+
4. Hand-rolled only as a last resort, and then with the full contract: keyboard (arrows, Enter, Escape), focus trap and return, ARIA roles and states, click outside, scroll lock for overlays.
|
|
65
|
+
|
|
66
|
+
Styling, in this order: the design system's component or variant, then a shared component you extract on the second real reuse, then semantic tokens, then a one-off utility for a genuine one-off. Bind to semantic tokens (`bg-surface`, `var(--text-muted)`), not literals (`#fff`, `gray-500`, `13px`). Never introduce a second styling system or a new UI library for looks.
|
|
67
|
+
|
|
68
|
+
## Craft rules
|
|
69
|
+
|
|
70
|
+
Exact default numbers are in [references/craft-defaults.md](references/craft-defaults.md). Use the project's values first.
|
|
71
|
+
|
|
72
|
+
**Hierarchy**
|
|
73
|
+
- One focal point per view. Promote it and demote the rest: secondary actions as secondary buttons or text, metadata in a muted tone.
|
|
74
|
+
- Build tiers from size, weight and colour together. A 14px label at 500 in the secondary text colour and a 14px value at 600 in the primary colour separate better than two sizes two pixels apart.
|
|
75
|
+
- If you squint and cannot tell title, body and metadata apart, the hierarchy is too weak.
|
|
76
|
+
|
|
77
|
+
**Type**
|
|
78
|
+
- A scale, not sizes picked by feel: product UI steps by about 1.2 to 1.25, expressive pages by about 1.333. Four to six sizes on a screen, two or three weights.
|
|
79
|
+
- Sentence case for headings, buttons, labels, tabs and table headers, unless the project already uses another case.
|
|
80
|
+
- Leave letter-spacing at the font's default. Only large display text (about 32px and up) may be tightened slightly, -0.01em to -0.02em. Never change it on body text. Keep the project's values if it already sets them.
|
|
81
|
+
- Reading text 45 to 75 characters per line. `text-wrap: balance` on headings, `pretty` on short paragraphs.
|
|
82
|
+
- Tabular figures (`font-variant-numeric: tabular-nums`) on numbers that update or line up in columns.
|
|
83
|
+
|
|
84
|
+
**Space and layout**
|
|
85
|
+
- One spacing scale on a 4px base. Tight inside a group, clearly larger between groups, more space above a heading than below it.
|
|
86
|
+
- Group by proximity before adding boxes. Cards are for things that are actually separate objects; never nest cards.
|
|
87
|
+
- Shared edges: text blocks start on two or three left edges per screen, not six. Rows of cards share a bottom edge. Choose the column count from the number of items so nothing is orphaned.
|
|
88
|
+
- Responsive changes are structural (sidebar folds, table becomes a list, columns stack), not just smaller. Nothing scrolls sideways at 320 to 390px.
|
|
89
|
+
|
|
90
|
+
**Colour**
|
|
91
|
+
- Roles, not swatches: background, surface, raised, border, text (primary, secondary, muted, disabled), accent, focus, success, warning, danger, info.
|
|
92
|
+
- Neutrals carry the structure. The accent goes on primary actions, current selection and meaning, roughly 10% of the screen at most. Colour never decorates.
|
|
93
|
+
- One meaning per colour across the product. Never colour alone: add text, an icon or position.
|
|
94
|
+
- Contrast: text 4.5:1 (placeholders included), large text, icons, control borders and focus indicators 3:1.
|
|
95
|
+
|
|
96
|
+
**Depth and shape**
|
|
97
|
+
- One depth strategy for the product: borders, tone steps, or soft shadows. A border or a shadow on a surface, not both. Real shadows belong to things that float (menus, popovers, dialogs, toasts).
|
|
98
|
+
- One radius scale. Controls follow their cards. Nested corners are concentric: outer radius = inner radius + padding.
|
|
99
|
+
|
|
100
|
+
**States**
|
|
101
|
+
- Every control: default, hover, focus-visible, active, disabled (and why it is disabled), loading where it triggers work.
|
|
102
|
+
- Every data block: loading (skeleton at the final size, no layout shift), empty (says why and offers the next action), error (what failed, what to do, a retry), one item, many items, long values. Use `interface-polish` to stress-test with worst-case data.
|
|
103
|
+
|
|
104
|
+
**Content**
|
|
105
|
+
- Use the task's real content and the product's real words. Never invent metrics, customer names or logos, testimonials, ratings, prices or data. Where content is missing, use clearly neutral placeholders ("Project name", "0 items") or sample data labelled as such, and list them in the report.
|
|
106
|
+
- Copy rules (verbs on buttons, errors, empty states, sentence case) are in [references/writing.md](references/writing.md).
|
|
107
|
+
|
|
108
|
+
## Step 5: Look at the rendered result
|
|
109
|
+
|
|
110
|
+
Code review of your own CSS will read your intentions into it. Look at pixels.
|
|
111
|
+
|
|
112
|
+
1. Start the app as `ui-testing` describes (dev server, seed data, login).
|
|
113
|
+
2. Take screenshots of each changed screen at 1440, 768 and 390px wide, plus the states you built, following the procedure in `design-review`.
|
|
114
|
+
3. Open the images and judge them: does the focal element win, do edges line up, does the phone layout work, is any text clipped or overlapping, does it look like the rest of the product?
|
|
115
|
+
4. Fix the three worst problems, take new screenshots, look again. Three rounds at most.
|
|
116
|
+
|
|
117
|
+
If the app cannot be started or no browser is available, reason from the code, and say in the report that the rendered check did not run and why.
|
|
118
|
+
|
|
119
|
+
## Before you finish
|
|
120
|
+
|
|
121
|
+
- [ ] Squint test: the focal element and the groups read in the right order.
|
|
122
|
+
- [ ] Swap test: with the product name hidden, would this screen look the same as any template? If yes, the free choices were defaulted (see `avoiding-generic-ai-design`).
|
|
123
|
+
- [ ] Every value comes from a token or the project's scale; no new one-off colours, sizes or radii without a reason.
|
|
124
|
+
- [ ] All states above exist and were looked at.
|
|
125
|
+
- [ ] 390px: no sideways scroll, targets at least 44px tall, inputs at least 16px font.
|
|
126
|
+
- [ ] Contrast and visible focus checked on the changed elements.
|
|
127
|
+
- [ ] Copy is real, short and consistent with the rest of the product.
|
|
128
|
+
|
|
129
|
+
## Common mistakes
|
|
130
|
+
|
|
131
|
+
- Restyling a product's existing components "to look better" instead of using them.
|
|
132
|
+
- Everything the same size and weight, so nothing leads.
|
|
133
|
+
- An accent colour on every button, tab and icon.
|
|
134
|
+
- Hard-coded colours and spacing next to an existing token set.
|
|
135
|
+
- Only the happy path built: no loading, empty or error state.
|
|
136
|
+
- Declaring it done without ever looking at a screenshot.
|
|
137
|
+
|
|
138
|
+
## Report
|
|
139
|
+
|
|
140
|
+
Say briefly: the design sources you followed; whether you extended the existing look or chose a fresh direction (and the direction, if fresh); any tokens or states you had to add; placeholder or sample content that must be replaced; which screens and widths you looked at, and anything you could not check.
|
|
141
|
+
|
|
142
|
+
Related: `app-screens`, `avoiding-generic-ai-design`, `interface-polish`, `motion-design`, `web-interface-guidelines`, `design-review`, `accessibility`, `ui-testing`.
|
|
143
|
+
|
|
144
|
+
Sources: adapted from Dammyjay93/interface-design (MIT), pbakaus/impeccable reference files (Apache-2.0, changed: rewritten and condensed, tool and question steps removed), jakubkrehel/make-interfaces-feel-better (MIT), Leonxlnx/taste-skill (MIT).
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Craft defaults
|
|
2
|
+
|
|
3
|
+
Read this when the project has no value for something you need (a type size, a spacing step, a radius, a colour role). Every number below is a default. If the project's tokens, DESIGN.md or existing screens say otherwise, they win.
|
|
4
|
+
|
|
5
|
+
## Type
|
|
6
|
+
|
|
7
|
+
**Scales.** Pick one ratio and step it from the body size. Round to whole pixels.
|
|
8
|
+
|
|
9
|
+
| Use | Ratio | Example steps (px) |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| Dense product UI | 1.2 | 12, 14, 16, 20, 24 |
|
|
12
|
+
| Most product UI | 1.25 | 12, 14, 16, 18, 22, 28 |
|
|
13
|
+
| Marketing and editorial pages | 1.333 | 16, 21, 28, 38, 50, 67 |
|
|
14
|
+
|
|
15
|
+
Product screens use fixed sizes in rem, not fluid `clamp()` headings. Marketing pages may let display type respond to width, with a cap of about 6rem.
|
|
16
|
+
|
|
17
|
+
**Roles for product UI** (common clean sets: 12/14/16/24, 12/14/18/24):
|
|
18
|
+
|
|
19
|
+
| Role | Size | Weight | Line height |
|
|
20
|
+
|---|---|---|---|
|
|
21
|
+
| Page title | 20 to 28px (24 default) | 600 | 1.25 |
|
|
22
|
+
| Section or card title | 16px | 500 to 600 | 1.4 |
|
|
23
|
+
| Body, table cells, nav | 14px (13px in very dense tools) | 400 | 20px at 14px |
|
|
24
|
+
| Reading text (help, articles) | 16px | 400 | 24px at 16px (1.5) |
|
|
25
|
+
| Labels, metadata, axis ticks | 12px | 400 to 500 | 16px |
|
|
26
|
+
| Smallest text anywhere | 11px | 500 | 16px |
|
|
27
|
+
|
|
28
|
+
- Body line height 1.45 to 1.6; headings 1.1 to 1.3; display 0.95 to 1.1.
|
|
29
|
+
- Measure: 45 to 75 characters for prose (65 to 75 ideal). Tables and dense data may run wider.
|
|
30
|
+
- Weights: at most three per screen. 700 does one job (a title, or money).
|
|
31
|
+
- Letter-spacing: 0 for body and UI text. Display text from about 32px may go to -0.01em or -0.02em. Do not go tighter than -0.03em.
|
|
32
|
+
- Case: sentence case for headings, buttons, labels, tabs, menu items and table headers. Avoid all-caps labels unless the project uses them.
|
|
33
|
+
- Families: one well-tuned sans covers product UI. A second family needs one clear job (monospace for code and IDs, a display face for marketing headlines). Never three.
|
|
34
|
+
- Phones: form inputs at 16px or more, or iOS Safari zooms the page on focus.
|
|
35
|
+
- Light text on dark surfaces: add a little line height (about +0.05) and consider one step more weight.
|
|
36
|
+
|
|
37
|
+
## Spacing
|
|
38
|
+
|
|
39
|
+
Base unit 4px. Scale: 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96.
|
|
40
|
+
|
|
41
|
+
| Context | Default |
|
|
42
|
+
|---|---|
|
|
43
|
+
| Icon to label | 6 to 8px |
|
|
44
|
+
| Inside a control (vertical, horizontal) | 6 to 8px, 12 to 16px |
|
|
45
|
+
| Between related fields | 16px |
|
|
46
|
+
| Card padding | 16 to 24px (20 default) |
|
|
47
|
+
| Gap between cards | 16px, the same horizontally and vertically |
|
|
48
|
+
| Between sections of a screen | 32 to 48px |
|
|
49
|
+
| Page gutter, desktop | 24 to 40px |
|
|
50
|
+
| Page gutter, phone | 16 to 20px |
|
|
51
|
+
| Between sections of a marketing page | 96 to 160px |
|
|
52
|
+
|
|
53
|
+
- Padding is symmetrical unless content needs otherwise. An icon button side may be 2px less than the text side for optical balance.
|
|
54
|
+
- Density is three settings moved together: row height, padding and type size. Do not shrink type and keep the padding.
|
|
55
|
+
|
|
56
|
+
## Sizes of controls and rows
|
|
57
|
+
|
|
58
|
+
| Element | Default |
|
|
59
|
+
|---|---|
|
|
60
|
+
| Button and input height, desktop | 32 to 36px (28 in dense toolbars, 40 in long forms) |
|
|
61
|
+
| Button and input height, phone | 44px |
|
|
62
|
+
| Hit area | 44 x 44px on touch, at least 40 x 40 in dense desktop UI (WCAG 2.2 minimum 24 x 24). Extend small controls with padding or a pseudo-element; hit areas never overlap |
|
|
63
|
+
| Table row | 40 to 48px; 32 to 36px dense |
|
|
64
|
+
| List row with avatar and two lines | 56 to 72px |
|
|
65
|
+
| Sidebar width | 224 to 256px; icon rail 48 to 56px |
|
|
66
|
+
| Top bar height | 48 to 56px |
|
|
67
|
+
| Icons | 16px inline and in nav (14 to 20), 1.5px stroke beside regular text, 2px beside semibold |
|
|
68
|
+
|
|
69
|
+
## Colour
|
|
70
|
+
|
|
71
|
+
- **Contrast (WCAG AA):** text and placeholders 4.5:1; text 24px and up (or 18.7px bold and up) 3:1; icons, control borders, focus indicators and chart marks that carry meaning 3:1 against what they sit on.
|
|
72
|
+
- **Text tiers:** primary, secondary, muted (all at 4.5:1 or better), and disabled. On white, about #111 / #4b5563 / #6b6b6b is the lightest set that still passes. Two greys that are close (#999 and #aaa) read as one grey used twice.
|
|
73
|
+
- **Accent budget:** one accent hue, used for the primary action, the current selection, focus and data highlights. Roughly 60% dominant neutral, 30% secondary neutral, 10% accent at most. Many good product screens have under 5% coloured pixels.
|
|
74
|
+
- **Status:** success, warning, danger, info as pale tint backgrounds with dark text of the same hue for chips and banners; solid colour only for small marks. Example pairs: success #dcfae5 / #04250e, danger #ffedea / #831c1e, warning #fffbeb / #92400e. Green text on white needs a dark green (about #247b50) to reach 4.5:1.
|
|
75
|
+
- **Neutrals:** a little tint from the brand hue is fine if the project already does it; pure greys are fine too. Sidebars use the page background (or one step off it), not a dark or saturated block beside a light canvas.
|
|
76
|
+
- **Dark mode:** design it, do not invert. Elevation by lightness: base, then about +4 to +8% lightness per raised level. Borders around rgba(255,255,255,0.06 to 0.12). Desaturate status colours slightly. Set `color-scheme: dark`.
|
|
77
|
+
- **New palettes:** define them in OKLCH when the project has no colour space convention; vary lightness, lower chroma near white and black.
|
|
78
|
+
|
|
79
|
+
## Depth
|
|
80
|
+
|
|
81
|
+
Choose one strategy per product and hold it:
|
|
82
|
+
|
|
83
|
+
| Strategy | Suits |
|
|
84
|
+
|---|---|
|
|
85
|
+
| 1px borders, low contrast (about #e5e7eb to #ededed on white, 1.1 to 1.3:1) | Dense tools, tables, admin |
|
|
86
|
+
| Tone steps (surface one step lighter or darker than the page) | Calm apps, dark themes |
|
|
87
|
+
| Soft shadows | Consumer apps with few layers |
|
|
88
|
+
|
|
89
|
+
- A resting card gets a border or a tone step, or at most a faint shadow (about `0 1px 2px rgb(0 0 0 / 0.06)`). Not a 1px border plus a wide soft shadow.
|
|
90
|
+
- A shadow can stand in for a border: `0 0 0 1px rgb(0 0 0 / 0.06), 0 1px 2px -1px rgb(0 0 0 / 0.06), 0 2px 4px rgb(0 0 0 / 0.04)`; on dark, `0 0 0 1px rgb(255 255 255 / 0.08)`.
|
|
91
|
+
- Floating layers (menus, popovers, dialogs, toasts) get a real shadow with an offset and blur, one level above their parent. Never a zero-offset coloured glow.
|
|
92
|
+
- Keep real borders for dividers, table rules and input outlines.
|
|
93
|
+
|
|
94
|
+
## Radius
|
|
95
|
+
|
|
96
|
+
Choose a tight or a soft scale once:
|
|
97
|
+
|
|
98
|
+
| Scale | Chips | Controls | Cards | Dialogs |
|
|
99
|
+
|---|---|---|---|---|
|
|
100
|
+
| Tight | 4px | 6px | 8px | 12px |
|
|
101
|
+
| Soft | 6px or full | 8 to 10px | 12 to 16px | 16 to 20px |
|
|
102
|
+
|
|
103
|
+
- Concentric nesting: outer radius = inner radius + padding. When the padding is over about 24px, treat the layers as separate.
|
|
104
|
+
- Pill (fully round) shapes are for chips, toggles and small buttons, not cards.
|
|
105
|
+
- Images in rows: circles for people, 2 to 4px for artwork and logos, the card radius for photos inside cards.
|
|
106
|
+
|
|
107
|
+
## Motion
|
|
108
|
+
|
|
109
|
+
Short form; full guidance in `motion-design`.
|
|
110
|
+
|
|
111
|
+
| Interaction | Duration | Easing |
|
|
112
|
+
|---|---|---|
|
|
113
|
+
| Press feedback | 100 to 160ms | ease-out |
|
|
114
|
+
| Hover, colour change | 100 to 150ms | ease |
|
|
115
|
+
| Tooltip, small popover | 125 to 200ms | ease-out |
|
|
116
|
+
| Dropdown, menu | 150 to 250ms | ease-out |
|
|
117
|
+
| Dialog, drawer | 200 to 300ms (up to 500 for large drawers) | ease-out |
|
|
118
|
+
| Exit | about 75% of the enter | ease-out |
|
|
119
|
+
|
|
120
|
+
Strong ease-out: `cubic-bezier(0.23, 1, 0.32, 1)`. On-screen movement: `cubic-bezier(0.77, 0, 0.175, 1)`. Never `ease-in` for UI. Respect `prefers-reduced-motion`.
|
|
121
|
+
|
|
122
|
+
## Browser details people notice
|
|
123
|
+
|
|
124
|
+
- Focus ring: 2px, offset 2px, in the accent or a high-contrast colour, on `:focus-visible`.
|
|
125
|
+
- Text selection colour from the palette when the project themes it.
|
|
126
|
+
- `-webkit-font-smoothing: antialiased` on the root (macOS) if the project does not already set it.
|
|
127
|
+
- Images: explicit width and height or `aspect-ratio`; a 1px inset outline at `rgb(0 0 0 / 0.1)` on light (`rgb(255 255 255 / 0.1)` on dark) separates photos from same-colour backgrounds.
|
|
128
|
+
- Leave scrollbars native in product UI unless the project already styles them.
|
|
129
|
+
|
|
130
|
+
Sources: numbers condensed from Dammyjay93/interface-design (MIT), Leonxlnx/taste-skill app-screens reference (MIT), jakubkrehel/make-interfaces-feel-better (MIT), emilkowalski/skills (MIT) and pbakaus/impeccable craft-floor, operate, typeset, colorize and layout references (Apache-2.0, changed: rewritten as defaults under the project's own system).
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Choosing a fresh direction
|
|
2
|
+
|
|
3
|
+
Read this only when the product has no interface yet, or the task explicitly asks for a new look (a redesign, a new brand, a landing page with no existing site). In every other case, extend what exists.
|
|
4
|
+
|
|
5
|
+
Nobody will choose between options for you. Work out one direction, check it against the generic default, build it, and state it in the report.
|
|
6
|
+
|
|
7
|
+
## 1. Ground it in the subject
|
|
8
|
+
|
|
9
|
+
Write these in your notes before any visual decision:
|
|
10
|
+
|
|
11
|
+
- **Subject, audience, job.** What the product is, who uses it, and the one thing the screen or page must get them to do. If the task does not say, infer it from the repository (README, package names, routes, seed data) and write the assumption down.
|
|
12
|
+
- **Domain.** Five or more concepts, objects and words from the product's world (not features). A scheduling tool for clinics: rota, shift, cover, on call, ward, handover.
|
|
13
|
+
- **Colour world.** Five or more colours that exist in that world, taken from its materials, places and printed things, not from "warm" or "cool".
|
|
14
|
+
- **The defaults.** Three obvious choices you would make for this kind of interface without thinking (for example: violet gradient hero, three icon cards, Inter on white). You cannot avoid patterns you have not named.
|
|
15
|
+
- **One signature.** A single element that could only belong to this product: a schedule set in the rhythm of a real rota, service health drawn as a route map, the product's own object shown large. If you cannot name one, keep exploring the domain.
|
|
16
|
+
|
|
17
|
+
## 2. Write a compact plan
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
Direction: calm clinical tool, dense like a ward board, quiet colour
|
|
21
|
+
Palette: ground #f7f8f7, surface #ffffff, ink #14211c, muted #56635d, accent #0f766e, danger #b42318
|
|
22
|
+
Type: one grotesk for everything; 14px body, scale 1.2; tabular figures for times
|
|
23
|
+
Layout: left rail with labelled nav, full-width rota grid, details in a right panel
|
|
24
|
+
Depth: 1px borders, no resting shadows; radius 6/8
|
|
25
|
+
Signature: the rota grid itself, cover gaps shown as hatched cells
|
|
26
|
+
Rejected: gradient header -> flat ground; KPI cards with icons -> one divided summary strip
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- Palette: a small set of named roles (ground, surface, ink, muted, accent) plus status colours, with contrast checked.
|
|
30
|
+
- Type: one or two families with clear roles. Use a face the project can load the way it loads its other assets; a system stack is acceptable for product UI. If a font needs a new dependency, say so in the report.
|
|
31
|
+
- Layout: a one-sentence concept per screen and the alignment rule (left-aligned by default; centre at most one moment).
|
|
32
|
+
|
|
33
|
+
## 3. Check the plan against the generic version
|
|
34
|
+
|
|
35
|
+
Ask: if a similar prompt went to another model, would it land on the same plan? For each part that would (the palette, the hero, the card grid), change it and note what you changed and why. The patterns to check against are in `avoiding-generic-ai-design`.
|
|
36
|
+
|
|
37
|
+
Then build, following the main skill, and run the render-and-look loop.
|
|
38
|
+
|
|
39
|
+
## 4. Keep the signature where it means something
|
|
40
|
+
|
|
41
|
+
Put the signature where it carries meaning and do not stamp it on every element; a style's move repeated everywhere becomes a costume. On a working screen the direction lends type, palette, density and the one signature, while navigation and controls stay the standard ones people already know. A distinctive direction still meets the craft floor: hierarchy, contrast, states, phone layout, keyboard focus, reduced motion.
|
|
42
|
+
|
|
43
|
+
## Pages (landing, marketing, docs home)
|
|
44
|
+
|
|
45
|
+
A page is read and scrolled once, so it can carry more voice than an app screen. Rules that hold for pages:
|
|
46
|
+
|
|
47
|
+
- **The first screen says what this is.** A clear title in the page's one `h1` (a name plus what it does, or a short claim of about five words), one supporting sentence directly under it that says plainly what the thing is, and one primary action as a real button. A stranger should know in five seconds what it is, who it is for and what to do.
|
|
48
|
+
- **Headlines fit in two lines** at every width. About 32 characters is safe at a confident size. Cut words before shrinking type.
|
|
49
|
+
- **Sections follow the argument, not the template.** List the page as claims with their proof, one line per section, and delete sections with no claim. The stock order (hero, logo strip, three features, testimonial, pricing, call to action) is the sign of no argument.
|
|
50
|
+
- **Each section has a heading that names it** and a composition different from its neighbours. The same layout three times in a row is the template showing.
|
|
51
|
+
- **Write the full content.** Every section the task asks for carries its real information (the whole price table, every plan's limits). Thin sections lose to busier pages.
|
|
52
|
+
- **Type does the visible work:** a decisive jump from body to headline (three times or more), five sizes at most, body 16 to 20px in full ink, not grey.
|
|
53
|
+
- **Equal outer margins** at every width, no stretch of blank space taller than half a screen, and the gap between sections clearly larger than any gap inside one.
|
|
54
|
+
- **Imagery:** the project's own screenshots, product photos or footage first; real interface fragments of the product beat drawings of fake dashboards. Do not download images from the internet or invent photos of customers. If there is nothing, let type and colour carry the page rather than grey boxes or stock icons.
|
|
55
|
+
- **Proof is never invented.** No made-up customers, logos, quotes, ratings, user counts or benchmarks. If the task asks for a testimonial section and none are supplied, build it with plainly fictional sample content and list it in the report for replacement.
|
|
56
|
+
- **Motion:** one authored moment (a single entrance or one interactive demo) beats fade-ups on every section. Content must be visible if scripts fail. See `motion-design`.
|
|
57
|
+
|
|
58
|
+
## Report
|
|
59
|
+
|
|
60
|
+
State the direction in two or three lines (palette, type, signature), what you rejected as generic, and any sample content or assets to be replaced.
|
|
61
|
+
|
|
62
|
+
Sources: adapted from Dammyjay93/interface-design (MIT, changed: "does that direction feel right?" and "offer to save" removed, the agent decides and reports), Leonxlnx/taste-skill (MIT, changed: no direction library, no image downloads) and pbakaus/impeccable mode-operate and craft-floor references (Apache-2.0, changed: rewritten, no direction service or user choice).
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Writing interface text
|
|
2
|
+
|
|
3
|
+
Read this when you write or change any visible text: labels, buttons, headings, empty states, errors, toasts, helper text. The product's existing voice, terminology and capitalization win; match the strings around yours.
|
|
4
|
+
|
|
5
|
+
Words are part of the design, not decoration on it. Each string does one job: helping the person understand where they are and what to do.
|
|
6
|
+
|
|
7
|
+
## Defaults
|
|
8
|
+
|
|
9
|
+
- **Sentence case** for headings, buttons, tabs, menu items, labels and table headers ("Invite members", not "Invite Members"), unless the product already uses Title Case.
|
|
10
|
+
- **Name things by what people understand**, not by how the system is built: "Notifications", not "Webhook config".
|
|
11
|
+
- **Active voice and plain verbs.** A button says exactly what happens: "Save changes", "Delete project", not "Submit", "OK" or "Continue" when a specific verb exists.
|
|
12
|
+
- **One name per action through the flow.** The button "Publish" leads to the toast "Published". Do not switch between "remove", "delete" and "archive" for the same thing.
|
|
13
|
+
- **Numerals for counts** ("8 deployments"), real plurals ("1 member", "2 members"; use the project's i18n or `Intl.PluralRules`), and units with a non-breaking space ("10 MB").
|
|
14
|
+
- **Second person**, no first person from the product ("Your projects", not "My projects" or "We could not").
|
|
15
|
+
- **Short.** Cut words that repeat the heading. If the title already explains the state, the line under it adds new information or goes.
|
|
16
|
+
|
|
17
|
+
## By situation
|
|
18
|
+
|
|
19
|
+
| Situation | Write | Avoid |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| Button | Verb plus object: "Create invoice" | "Submit", "Click here", "Get started" when a precise verb exists |
|
|
22
|
+
| Destructive confirmation | Name the object and consequence: "Delete 'Q3 launch'? Its 12 tasks are deleted too." Buttons: "Delete project" / "Cancel" | "Are you sure?" with "Yes" / "No" |
|
|
23
|
+
| Error | What failed, why if known, how to recover: "Couldn't save the invoice. The connection dropped. Try again." | "Something went wrong", raw codes or stack traces, apologies, jokes |
|
|
24
|
+
| Validation | Next to the field, says what is needed: "Enter a date after the start date" | Blaming ("Invalid input"), clearing what the person typed |
|
|
25
|
+
| Empty, first use | Why it is empty and the first action: "No invoices yet. Create your first invoice to bill a client." | "Nothing here", illustrations with no action |
|
|
26
|
+
| Empty, no results | Say the filter caused it and offer to clear it | The same text as first use |
|
|
27
|
+
| Loading | Name the operation, end with an ellipsis: "Loading invoices…" | Invented progress percentages |
|
|
28
|
+
| Success | Brief, past tense: "Invoice sent" | Celebration for routine actions |
|
|
29
|
+
| Disabled control | Say why nearby or in a tooltip: "Add a payment method to upgrade" | A grey button with no reason |
|
|
30
|
+
| Helper text | Answers the question the label raises: format, limits, why it is asked | Restating the label |
|
|
31
|
+
| Placeholder | An example value, never the label | Placeholder as the only label |
|
|
32
|
+
|
|
33
|
+
## Things that read as generated
|
|
34
|
+
|
|
35
|
+
Remove these unless the product's own voice uses them:
|
|
36
|
+
|
|
37
|
+
- Genre verbs and adjectives: unlock, unleash, supercharge, elevate, empower, streamline, seamless, effortless, robust, cutting-edge, next-generation, world-class, all-in-one, blazing fast.
|
|
38
|
+
- The correction pattern: "Not just X, it's Y." Tricolon headlines ("Fast. Simple. Secure.").
|
|
39
|
+
- Performative section labels: "Field notes", "Our philosophy", "Quietly trusted by". A heading can just say "Pricing".
|
|
40
|
+
- Furniture text: version stamps, coordinates, "Scroll to explore", "Available for work" status dots, strings joined by middle dots.
|
|
41
|
+
- Long dashes as a habit; use a full stop or a comma.
|
|
42
|
+
- Captions that narrate the design ("A clean, minimal layout for…").
|
|
43
|
+
- Three items everywhere because three feels complete. Use the number the content has.
|
|
44
|
+
- Invented proof: customer counts, ratings, quotes, logos, benchmarks. Never write these unless the task supplies them.
|
|
45
|
+
|
|
46
|
+
## Micro-typography
|
|
47
|
+
|
|
48
|
+
- A real ellipsis (…) and curly quotes (“ ” ’) where the project's strings use them.
|
|
49
|
+
- No centred paragraphs over three lines; no justified text.
|
|
50
|
+
- Write complete translatable messages, not fragments glued together, so translators can reorder variables.
|
|
51
|
+
|
|
52
|
+
Sources: adapted from the writing section of the frontend-design skill in anthropics/claude-plugins-official (Apache-2.0, changed: condensed into defaults and a table), pbakaus/impeccable clarify reference (Apache-2.0, changed: rewritten, "ask before changing" steps removed), Leonxlnx/taste-skill copy reference (MIT) and vercel-labs/web-interface-guidelines (MIT).
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: interface-polish
|
|
3
|
+
description: Use when finishing or refining UI so it feels right: alignment, radii, borders and shadows, icons, type details, hover, focus and press states, hit areas, overflow with long or missing data. Also for stress-testing a component with realistic worst-case data, or when a task says the UI "feels off" or needs polish.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Interface polish
|
|
7
|
+
|
|
8
|
+
Polish is a hundred small details that compound: concentric corners, icons that sit optically centred, numbers that do not jitter, a name that wraps instead of pushing the menu off the row. It is refinement inside the existing design, never a redesign in disguise. If the concept itself is wrong, say so in the report instead of quietly replacing it.
|
|
9
|
+
|
|
10
|
+
Express every fix in the project's own styling system (Tailwind in a Tailwind project, CSS modules, plain CSS, the established CSS-in-JS) and with its tokens. Never introduce a second styling system or a new dependency for a polish fix. The project's design system wins over every value below; the values are defaults where it has none.
|
|
11
|
+
|
|
12
|
+
## Process
|
|
13
|
+
|
|
14
|
+
### 1. Establish the system and scope
|
|
15
|
+
|
|
16
|
+
Read the design sources (see `interface-design` step 1) and the components on the path you are polishing. Bound the scope: the screens and components the task touches.
|
|
17
|
+
|
|
18
|
+
For each inconsistency, classify it before fixing:
|
|
19
|
+
|
|
20
|
+
- **Missing token**: the system needs a reusable value it does not have. Add it in the token layer, once.
|
|
21
|
+
- **One-off implementation**: a shared component or pattern already exists. Replace the copy with it.
|
|
22
|
+
- **Conceptual mismatch**: this flow or hierarchy differs from comparable screens. Align it with its siblings.
|
|
23
|
+
- **Local defect**: simply incomplete or inconsistent. Fix it in place.
|
|
24
|
+
|
|
25
|
+
Fix at the narrowest correct level. Do not create a shared abstraction for a single exception.
|
|
26
|
+
|
|
27
|
+
### 2. Gather evidence
|
|
28
|
+
|
|
29
|
+
Render the screens at desktop and phone widths and walk every state (procedure in `design-review`): hover, focus, active, disabled, loading, empty, error, long content. What looks slightly wrong in a screenshot is usually one of the rules below.
|
|
30
|
+
|
|
31
|
+
### 3. Triage and fix in this order
|
|
32
|
+
|
|
33
|
+
1. Broken or blocked tasks, misleading state, unreachable actions, inaccessible paths.
|
|
34
|
+
2. Missing states: loading, empty, error, success, disabled, permission.
|
|
35
|
+
3. Hierarchy, layout and responsive problems, drift from the design system.
|
|
36
|
+
4. Visual and motion inconsistencies (the rules below).
|
|
37
|
+
5. Code cleanup: dead styles, duplicated values, debug output.
|
|
38
|
+
|
|
39
|
+
Do not perfect one corner while the rest of the path stays below the same bar.
|
|
40
|
+
|
|
41
|
+
### 4. Stress-test with worst-case data
|
|
42
|
+
|
|
43
|
+
Demo data is chosen, usually without anyone noticing, to make the design look good. Feed the UI the realistic worst case: long and short names, unbreakable emails, missing optional fields, counts of 0, 1 and 1,284, translated labels, emoji, huge lists. Follow [references/worst-case-data.md](references/worst-case-data.md). Change the data at the boundary it enters (fixture, mock, API response), never by editing markup to provoke a break.
|
|
44
|
+
|
|
45
|
+
### 5. Verify
|
|
46
|
+
|
|
47
|
+
Walk the path again with mouse, keyboard and touch-size viewports. Re-take screenshots. Check the diff for accidental churn and leftover debug code.
|
|
48
|
+
|
|
49
|
+
## The rules
|
|
50
|
+
|
|
51
|
+
Code examples for each are in [references/detail-rules.md](references/detail-rules.md).
|
|
52
|
+
|
|
53
|
+
**Surfaces**
|
|
54
|
+
1. **Concentric radius.** Outer radius = inner radius + padding. Equal radii on nested surfaces are the most common reason a card "feels off". Over about 24px of padding, treat layers as separate.
|
|
55
|
+
2. **Optical alignment.** When geometric centring looks wrong, align optically: the icon side of a button gets about 2px less padding than the text side; a play triangle shifts about 2px right; fix lopsided icons in the SVG itself when you can.
|
|
56
|
+
3. **Elevation follows the product's depth strategy.** A border or a shadow, not both. A layered transparent shadow (ring plus soft depth) can replace a border on cards and buttons that sit on varied backgrounds; keep real borders for dividers, table rules and input outlines.
|
|
57
|
+
4. **Image outlines.** A 1px inset outline in pure black at 10% opacity on light, pure white at 10% on dark. Never a tinted near-black, which reads as dirt on the edge.
|
|
58
|
+
5. **Hit areas.** 44 x 44px for touch, at least 40 x 40 in dense desktop UI. Extend small controls with padding or a pseudo-element. Two hit areas never overlap.
|
|
59
|
+
|
|
60
|
+
**Type**
|
|
61
|
+
6. **Tabular figures** on numbers that update or line up: counters, prices, timers, table columns. Check the font actually has them.
|
|
62
|
+
7. **Text wrapping.** `text-wrap: balance` on headings and short centred text; `text-wrap: pretty` on paragraphs and captions; neither on long text or code.
|
|
63
|
+
8. **Font smoothing.** `-webkit-font-smoothing: antialiased` once on the root, if the project does not set it.
|
|
64
|
+
9. **Overflow.** Flex and grid children holding text get `min-width: 0`; long unbroken strings get `overflow-wrap: anywhere`; fixed-size items (avatars, icons, badges, trailing actions) get `flex-shrink: 0`.
|
|
65
|
+
|
|
66
|
+
**Icons**
|
|
67
|
+
10. **Stroke matches the text beside it**: 1.5px next to regular text, 2px next to semibold. One icon set and one stroke weight per surface.
|
|
68
|
+
11. **One SVG, recoloured by state** with `currentColor`; outline by default, filled for the active state.
|
|
69
|
+
12. **Design at render size**: use the set's native sizes (16, 20, 24), check at the smallest size used.
|
|
70
|
+
|
|
71
|
+
**Interaction**
|
|
72
|
+
13. **Every interactive element has hover, focus-visible, active and disabled states.** Hover, active and focus are more prominent than rest. Gate hover effects with `@media (hover: hover) and (pointer: fine)` when they move or scale things.
|
|
73
|
+
14. **Press feedback**: `scale(0.97)` on `:active` for buttons and pressable cards (never below 0.95), as an interruptible transition. Skip it where motion would distract (large surfaces, dense toolbars).
|
|
74
|
+
15. **Never `transition: all`.** Name the properties. Animate `transform` and `opacity` where possible. Timings in `motion-design`.
|
|
75
|
+
16. **Focus is visible** on keyboard focus (`:focus-visible`), never removed without a replacement, and not hidden under sticky headers.
|
|
76
|
+
17. **Overlays escape their container**: a dropdown inside an `overflow: hidden` parent gets clipped; use `<dialog>`, the popover API, `position: fixed` or the project's portal.
|
|
77
|
+
|
|
78
|
+
**Content**
|
|
79
|
+
18. **Truncate, wrap or clamp per field**, never globally (rules in the worst-case reference). Never truncate numbers, amounts or dates.
|
|
80
|
+
19. **Images** have explicit dimensions or `aspect-ratio`, and `object-fit: cover` where the source ratio varies.
|
|
81
|
+
|
|
82
|
+
## Common mistakes
|
|
83
|
+
|
|
84
|
+
| Mistake | Fix |
|
|
85
|
+
|---|---|
|
|
86
|
+
| Same radius on a card and the button inside it | Outer = inner + padding |
|
|
87
|
+
| Icon looks off-centre in a button | Less padding on the icon side, or fix the SVG |
|
|
88
|
+
| 1px border plus a wide soft shadow on resting cards | One or the other, per the product's depth strategy |
|
|
89
|
+
| Numbers shift as they update | `tabular-nums` |
|
|
90
|
+
| Avatar squashed into an oval in a long row | `flex-shrink: 0` on the avatar |
|
|
91
|
+
| Email pushes the row menu off-screen | `min-width: 0` on the text column, `overflow-wrap: anywhere` on the email |
|
|
92
|
+
| "1 members" | Plural rules from the project's i18n or `Intl.PluralRules` |
|
|
93
|
+
| `transition: all 300ms` | Named properties, under 300ms, ease-out |
|
|
94
|
+
| Hairline icon next to bold text | Match stroke to the text weight |
|
|
95
|
+
| Polish fix written in a second styling system | Rewrite it in the project's system |
|
|
96
|
+
|
|
97
|
+
## Output
|
|
98
|
+
|
|
99
|
+
In a code step: fix, re-check, and summarise the main fixes in the report. In a review (or when asked only to assess), return a table per category with **Severity** (high: inaccessible, misleading, unreadable or repeatedly disruptive; medium: noticeable usability or consistency problem; low: isolated polish), **Location** (`file:line` or screen and component), **Before**, **After** and **Why**. Merge a repeated issue into one row with all locations. List what you inspected per category, and label anything you did not verify as "Not verified".
|
|
100
|
+
|
|
101
|
+
Related: `interface-design`, `motion-design`, `web-interface-guidelines`, `design-review`, `accessibility`.
|
|
102
|
+
|
|
103
|
+
Sources: adapted from jakubkrehel/make-interfaces-feel-better (MIT, changed: React and Motion specifics made optional, values reconciled with other sources), emilkowalski/skills break-ui (MIT, changed: no stop-and-ask step, no shipped toggle), Dammyjay93/interface-design (MIT) and pbakaus/impeccable polish and harden references (Apache-2.0, changed: rewritten, critique storage and ask steps removed).
|