@orkestrel/scaffold 0.0.64 → 0.0.66

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.
@@ -1,129 +1,323 @@
1
1
  # Frontend Design
2
2
 
3
- > Part of the `enterprise-bootstrap` package. Full aesthetic, typography,
4
- > process, and copy guidance — use when setting visual direction.
3
+ > Part of the `enterprise-bootstrap` skill. Aesthetic, hierarchy, spacing,
4
+ > typography, color, depth, imagery, signature, and copy — use when setting visual direction.
5
+ > The pass order lives in [SKILL.md](../SKILL.md) → Process.
5
6
  > Operate layer: [SKILL.md](../SKILL.md).
6
7
 
7
- Give the surface a visual identity that could not be mistaken for anyone else's, and reject any
8
- direction that reads as templated. Make deliberate, opinionated choices about palette, typography,
9
- and layout that are specific to this brief, and take one real aesthetic risk you can justify.
8
+ Give the surface a point of view rooted in its subject. Make the person's task clear before making
9
+ the frame distinctive. Preserve an established identity; take a justified aesthetic risk only where
10
+ the brief leaves room. Never trade readability, familiar behavior, or honest content for novelty.
10
11
 
11
12
  ## Ground it in the subject
12
13
 
13
- Pin the subject before designing whenever the brief leaves it open: name one concrete subject, its
14
- audience, and the page's single job, and state the choice. Use what you know of the user's
15
- preferences, of what they are building, and of designs you have made for them before as hints, never
16
- as templates. Draw the distinctive choices from the subject's own world — its materials,
17
- instruments, artifacts, and vernacular. Build with the brief's real content and subject matter
18
- throughout.
14
+ Name the subject, the audience, and the screen's single job. Inspect the existing product, its
15
+ content, and its design system before choosing a direction. Use prior designs and preferences as
16
+ hints, not templates. Draw character from the subject's materials, instruments, artifacts, and
17
+ vernacular rather than an unrelated visual trend.
18
+
19
+ Set personality through these levers — typeface, primary color, corner-radius family, and copy
20
+ register. Choose each from the audience and subject, then hold it on every screen. In an existing
21
+ product the levers are already set: carry them forward and move none without a brief that asks for
22
+ it.
23
+
24
+ Pick the typeface and radius against the register the brief names: take a serif for a classic
25
+ register, a rounded sans or a large radius for a playful one, and no radius for a formal one. Take a
26
+ neutral sans-serif and a small radius for a neutral register as a deliberate choice, never as a
27
+ skipped one. Use one radius family per product; pill buttons beside square cards read as two
28
+ products. Take the copy register from what the audience already uses, not from a competitor's
29
+ interface.
30
+
31
+ Start with the smallest useful feature: what the person needs to see, enter, decide, and do next.
32
+ Compose that interaction with realistic content before choosing its navigation shell. Reuse a shell
33
+ that already works; do not redesign it to avoid a local layout decision. Build the simple working
34
+ flow first, then refine it and take the next feature. Never imply functionality that is not built.
19
35
 
20
36
  ## Design principles
21
37
 
22
- Open a web design's hero with the subject's thesis — the one claim the page makes — carried by the
23
- most characteristic thing in the subject's world, in whatever form suits it: a headline, an image,
24
- an animation, a live demo, an interactive moment. Choose that opening deliberately — a big number
25
- with a small label, supporting stats, and a gradient accent is the template answer, so take it only
26
- where it is genuinely the best option.
38
+ ### Hierarchy before decoration
39
+
40
+ Name the primary information, supporting context, and ancillary detail in each task region. Make
41
+ that order readable without color: use placement, grouping, weight, and spacing before adding
42
+ paint. When the primary element does not stand out, quiet its competitors before enlarging it.
43
+
44
+ Carry hierarchy with a short set of foreground tiers and a weight pair before reaching for size;
45
+ size alone produces oversized primary text and unreadable secondary text. Use a regular body
46
+ weight (400) and one emphasis weight (600–700); weights under 400 belong only at display sizes.
47
+ Quiet a heavy element by lowering its contrast — an icon beside a label takes the secondary tier
48
+ rather than the label growing — and strengthen a faint one with weight or width, not a darker
49
+ color. On a colored fill, inherit its tested foreground first. Use a scoped opaque same-hue tier only
50
+ when another readable tier is needed; do not import a neutral grey blindly or reduce opacity. Take the
51
+ measured tiers from [color-modes.md](color-modes.md) → Text tiers. Keep information-bearing marks
52
+ above the contrast bar in [SKILL.md](../SKILL.md) → Surfaces, color, contrast.
53
+
54
+ Pick heading elements for document structure and size them for their visual job. A page's `h1` need
55
+ not be its largest text; a section title usually supports the content and can be small, or present
56
+ only for assistive technology. Adapt the heading levels in component examples to the host page,
57
+ never the other way around.
58
+
59
+ Treat labels on **displayed data** as supporting content. Omit a redundant label only when format
60
+ and context still identify the value; combine label and value where that reads more naturally.
61
+ Keep labels, units, timeframes, and comparison bases where values would otherwise be ambiguous.
62
+ Emphasize the label instead when the task is to scan for a named property. Never apply label
63
+ removal to form controls or accessible names.
64
+
65
+ Give each active task region at most one dominant action. Make secondary actions clear but quieter,
66
+ and tertiary actions discoverable without competing. Destructive describes consequence, not rank:
67
+ keep a row-level delete quiet; give the final destructive commit the strong danger treatment when
68
+ the confirmation ladder calls for one. Take implementations from [SKILL.md](../SKILL.md) →
69
+ Hierarchy & actions; a readable outline is not forbidden, and a solid fill is not proof of contrast.
70
+
71
+ ### Space, grouping, and width
72
+
73
+ Start with generous space, then remove it until the task's density is right. Choose compactness
74
+ because comparison or throughput needs it, not because everything must fit above the fold.
75
+
76
+ Use a small spacing and sizing scale with meaningful jumps: tight steps at the bottom, wider
77
+ steps higher up, and no two steps closer than about 25 %. Reuse the project's scale before
78
+ extending it. Choose by elimination — render the guessed step and both neighbors; when both
79
+ neighbors are worse the guess is right, and when one is better repeat around it — instead of
80
+ tuning one pixel at a time. Name roles for internal gaps, field groups, panels, and sections; do
81
+ not make "multiples of four" an unlimited license to invent values.
82
+
83
+ Keep more space **between** groups than **within** them, in both axes. Keep labels, controls, help,
84
+ and errors together; keep headings closer to the content they introduce than to the preceding
85
+ section. Separate icon-and-value pairs from their neighbors. Confirm those relationships after
86
+ wrapping, validation, and responsive reflow.
87
+
88
+ Give content the width it needs, not all the width available. Bound forms and reading columns;
89
+ allow data comparisons more room. Split supporting explanation from a form on wide screens rather
90
+ than stretching its fields. A narrow useful panel does not owe the screen filler cards.
91
+
92
+ Use a grid where columns need to scale together. Use a bounded rail and a flexible main region where
93
+ they do not. Prefer a content-derived maximum width over changing percentage widths for a
94
+ login panel. Let it shrink only when the viewport requires it. Take missing sizing steps through
95
+ [bootstrap-reference.md](bootstrap-reference.md) → Utilities API, not invented classes.
96
+
97
+ Compose and use the primary flow at narrow width before expanding it. Record each region's
98
+ stacking, expansion, content parity, and scroll policy in [responsive-layout.md](responsive-layout.md).
99
+ On mobile, preserve the design's reading order and character through type, rhythm, and useful
100
+ content, not a shrunken shell. Rework dense previews into legible lists rather than truncating
101
+ all the evidence. Judge the available container, not the viewport label.
102
+
103
+ Adapt hierarchy, not a screenshot's proportions. Reduce large headings and outer gaps sooner than
104
+ body text and control targets. Set type, padding, and icon size independently for each control size.
105
+ Wrap or reorganize before truncating decision-critical content. Do not shrink an entire interface
106
+ to make it fit.
107
+
108
+ ### Typography that fits the task
109
+
110
+ Assign display, body, and utility roles; they need not be different font families. Reuse the
111
+ product's typefaces. For a new system, take a legible UI face for repeated reading and data, and add
112
+ a display face only where its character earns the payload. A neutral sans-serif or system stack is
113
+ a deliberate choice, not a failure of distinctiveness. Prefer a family shipping the `300`–`700`
114
+ range so display, body, and emphasis roles draw from one family; avoid condensed or
115
+ short-x-height faces for UI text; keep a display face at display size,
116
+ where it was drawn to work. Test the actual glyphs, numerals, weights, languages, and fallback the
117
+ surface needs.
118
+
119
+ Hand-pick a finite type scale in `rem`, with smaller jumps for UI text and larger jumps for
120
+ display; a modular ratio yields fractional pixels and too few reading sizes. Avoid nested `em`
121
+ font sizes that compound off-scale. Start with a regular weight and an emphasis weight, and
122
+ add another only for a distinct role. Keep captions and metadata at the smallest readable step in
123
+ the secondary tier, not smaller in body color. Never shrink text merely to avoid fixing a cramped
124
+ layout.
125
+
126
+ Keep prose near **45–75 characters per line** where the viewport permits; judge the rendered font,
127
+ not the unit alone. Bound paragraphs independently of wider images, tables, or navigation. Keep
128
+ long text start-aligned; center only short, independent passages. Align mixed-size text on its
129
+ baseline, not the centers of its boxes.
130
+
131
+ Use more line-height for small or wide paragraphs and less for large headings. Keep controls and
132
+ icons out of prose line-height rules. Trust the typeface's tracking by default; tighten display
133
+ text or open short all-caps labels only where the rendered result improves. Never use tracking to
134
+ rescue an illegible display face at UI size.
135
+
136
+ Right-align comparable quantities with their headers. Keep units and decimal precision consistent;
137
+ use tabular figures when the shipped font supports them. Keep identifiers and prose out of numeric
138
+ formatting rules. Take table mechanics from [bootstrap-reference.md](bootstrap-reference.md) →
139
+ Dense data tables.
140
+
141
+ Let link prominence follow context. Inline prose links need a persistent non-color cue. Where
142
+ most things are links — navigation, lists, tables — emphasize with weight or a darker tone and
143
+ let ancillary links reveal an underline on hover and focus; the prose treatment everywhere is
144
+ noise. Keep hover and visible focus feedback. Never make hover the only way to discover an action
145
+ on touch or keyboard.
146
+
147
+ ### Color as a constrained system
27
148
 
28
- Set the typography as a decision rather than a default. Pair the display and body faces
29
- deliberately, and not the families you would reach for on any other project. Set a clear type scale
30
- with intentional weights, widths, and spacing. Make the type treatment one of the things the design
31
- is remembered by.
149
+ Define roles, not a handful of unrelated swatches. Reuse or establish a neutral ramp, the brand
150
+ families the identity needs, and only the status or categorical families the feature needs. Build
151
+ the neutral ramp across the shipped `100…900` steps, and give each brand and status family enough
152
+ steps for text, borders, fills, and interaction states. Declare a step because a role consumes it,
153
+ never to fill the ramp.
32
154
 
33
- Make every structural device — numbering, eyebrows, dividers, labels — encode something true about
34
- the content rather than decorate it. Use numbered markers (01 / 02 / 03) only where the content is
35
- a sequence: a real process, or a typed timeline whose order carries information the reader needs.
36
- Before adding a device, check that it encodes something the reader needs.
155
+ Choose a family's base in a real control, its dark edge in text, and its light edge in a subtle
156
+ surface; fill the gaps with visibly distinct steps, middle first. Define every shade up front;
157
+ never derive one at a use site with `lighten`, `darken`, or `color-mix`. Use HSL to reason about
158
+ hue, saturation, and lightness when authoring a ramp; retain a project's established color
159
+ format. Raise saturation as lightness moves away from the middle so light and dark steps keep
160
+ their color, and rotate hue within about 20–30° — toward a brighter neighbor for light steps, a
161
+ darker one for dark steps — rather than mixing with white or black. Give all greys one hue and
162
+ temperature, warmer or cooler to match the brand. Refine the shared ramp in context instead of
163
+ adding per-component shades. Take the Bootstrap extension points from
164
+ [color-modes.md](color-modes.md) → Extend the theme.
37
165
 
38
- Decide where and whether animation serves the subject: a page-load sequence, a scroll-triggered
39
- reveal, hover micro-interactions, ambient atmosphere. Prefer one orchestrated moment to scattered
40
- effects, and follow the direction where it calls for something else. Cut animation the direction
41
- does not need — extra animation is one of the fastest ways to make a design read as AI-generated.
166
+ Map primitives through the existing semantic and component tokens. Decide which element owns
167
+ the surface before choosing a foreground. Default ordinary text and quiet status to inheritance;
168
+ use adaptive neutral or subtle fills without automatically adding a text-color class. Take the
169
+ mechanics and bounded exceptions from [color-modes.md](color-modes.md), and the token extension
170
+ points from [bootstrap-reference.md](bootstrap-reference.md) → Theming & design tokens.
42
171
 
43
- Match complexity to the vision. Maximalist directions need elaborate execution; minimal directions
44
- need precision in spacing, type, and detail.
172
+ Flip the contrast for status, tags, and callouts: a dark tone of the hue on its light tint keeps
173
+ the color without the weight of a dark fill, and reserves the solid pair for the primary
174
+ element. Reserve explicit foreground/background pairs for intentional solid, inverse, or
175
+ image-backed regions. Keep a secondary foreground within that region's tested contract; do not apply neutral
176
+ grey or reduced opacity by habit. When no quieter foreground passes, separate by weight or spacing.
177
+ Review hierarchy in every declared mode independently. Preserve relative prominence and useful
178
+ separation rather than mechanically inverting shades or adding a border to every dark panel.
45
179
 
46
- Write the copy yourself when the brief supplies none, and treat it as design material: templated
47
- copy makes a surface read as templated as a templated layout does. Follow the writing rules below.
180
+ Use color to reinforce a word, glyph, position, or pattern, never to carry meaning alone. Give
181
+ charts identifiable series and values without relying solely on hue. A grayscale check reveals
182
+ hierarchy problems; it does not prove contrast or accessibility.
183
+
184
+ ### Depth and finishing details
185
+
186
+ Separate regions with space first, then a surface change, then a shadow, then a line. Keep cards
187
+ for real grouping; do not nest a card around every field. When an element has both a border and a
188
+ distinct background, remove the border and look again. Remove redundant dividers, not the edges or
189
+ focus indicators a person needs to recognize and operate a control.
190
+
191
+ Use elevation to explain layering. Define a small shadow scale and assign it by z-position:
192
+ small and tight for slightly raised controls and cards, medium for floating menus, large and soft
193
+ for dialogs; lift an item on drag and press a control on click. Do not give every panel a shadow.
194
+ Light comes from above: a raised element takes a lighter top edge and a tight shadow beneath, an
195
+ inset element a shadow at its top edge — mimic that and stop. Where a shadow needs two parts, use
196
+ a broad cast shadow and a tighter contact shadow; weaken the contact as elevation increases. Flat
197
+ surfaces establish depth through lightness — lighter reads closer, darker recessed — or a hard
198
+ offset shadow, without simulated lighting. Take the Bootstrap ladder from
199
+ [bootstrap-reference.md](bootstrap-reference.md) → Elevation and depth.
200
+
201
+ Keep overlap intentional and responsive: no clipped text, controls, focus rings, or hit areas.
202
+ Give overlapping images a ring in the background color so they never clash. Keep radii and border
203
+ weights in one family.
204
+
205
+ Spend polish on the content already present before adding another accessory — icon bullets that mean something, a brand-colored check, a
206
+ promoted quotation mark, a link underline that completes on hover. Use one accent border per region
207
+ — top of a card, side of a callout, under a heading, or the active nav item. Repeating that accent
208
+ across neighboring regions turns it into a pattern and it stops reading as an accent. Change a
209
+ section's surface before decorating it; keep
210
+ any gradient within about 30° of hue and any pattern low-contrast and away from text. An accent,
211
+ pattern, or background treatment supports grouping, state, or the subject; never add one to
212
+ compensate for weak hierarchy. Take the class recipes from [utilities.md](utilities.md) →
213
+ Composition habits and [components.md](components.md).
214
+
215
+ ### Images at their intended size
216
+
217
+ Use relevant, good-quality imagery and inspect the actual asset early. Do not compose around a
218
+ placeholder and assume an unrelated replacement will work. Choose an image, diagram, live demo,
219
+ or text treatment for the information it carries; imagery is not mandatory decoration.
220
+
221
+ Keep text contrast consistent across the actual image crop and every supported width. Use a tested
222
+ overlay or local backdrop when needed; changing text color alone does not control a variable
223
+ background. Do not count average image contrast as a passing measurement.
224
+
225
+ Render icons near their intended optical size. Put a small icon in a larger quiet container, or
226
+ choose a purpose-built illustration, rather than enlarging a UI glyph until its proportions look
227
+ wrong. Show UI screenshots at a legible size: crop to the relevant feature or capture its real
228
+ narrow layout instead of shrinking a whole desktop screen into unreadable texture. Label a
229
+ simplified illustration as such; never pass invented product output off as evidence.
230
+
231
+ Bound user-uploaded images with a consistent frame and aspect ratio. Use cover only when cropping
232
+ is acceptable; use contain when the whole image matters. Reserve dimensions, preserve aspect
233
+ ratio, and handle missing images. Give informative images useful alternatives and decorative ones
234
+ empty alternatives. Test portrait, landscape, transparent, very light, and very dark content.
235
+
236
+ ### States are part of the composition
237
+
238
+ Design the first-use empty state beside the populated one. Name the action that creates value and
239
+ remove controls that genuinely have nothing to operate on. Keep active filters and their clear
240
+ path in a **filtered-empty** state; hiding them hides the cause of the empty result. Preserve the
241
+ frame, entered values, and recovery path when a request fails.
242
+
243
+ Build the required loading, partial, and error states in the same feature cycle. Keep known layout
244
+ stable while loading; never display invented progress. Stress the working interface with long
245
+ names, multiline copy, missing values, and large counts, not only attractive sample data. Take the
246
+ state contracts from [bootstrap-reference.md](bootstrap-reference.md) → The data states.
48
247
 
49
248
  ## Where the signature lives in product UI
50
249
 
51
- Apply the same craft to dense, authenticated tools, and move the signature. In an admin screen or
52
- dashboard the data is the content: keep it quiet, legible, and fast to scan, and never spend the
53
- aesthetic risk on the table itself, which adds scan time for every user on every visit. Put the
54
- point of view in the chrome — the navigation and header treatment, the type pairing, the empty
55
- states, the handling of status and density. Make the frame impossible to mistake for another
56
- product's, and keep the data surfaces disciplined and conventional enough to read without effort.
57
-
58
- ## Process: brainstorm, explore, plan, critique, build, critique again
59
-
60
- Calibrate against the looks AI-generated design clusters around: (1) a warm cream
61
- background (near #F4F1EA) with a high-contrast serif display and a terracotta accent; (2) a
62
- near-black background with a single bright acid-green or vermilion accent; (3) a broadsheet-style
63
- layout with hairline rules, zero border-radius, and dense newspaper-like columns. Each is
64
- legitimate for some briefs; they are defaults rather than choices, and they appear regardless of
65
- subject. Follow the brief exactly where it pins a visual direction — the brief's own words always
66
- win, including when they ask for one of these looks. Where the brief leaves an axis free, spend that
67
- freedom somewhere other than these defaults. Balance the moves you have already proven against
68
- experimenting where the brief invites it.
69
-
70
- Work in passes. First, brainstorm a short design plan from the brief: a compact token system
71
- with color, type, layout, and signature. Color: describe the palette as 4–6 named hex values. Type:
72
- name the typefaces for 2+ roles — a characterful display face used with restraint, a complementary
73
- body face, and a utility face for captions or data where one is needed. Layout: state a layout
74
- concept, using one-sentence prose descriptions and ASCII wireframes to ideate and compare.
75
- Signature: name the single element this page will be remembered by, embodying the brief.
76
-
77
- Then review that plan against the brief before building. Where a part of it reads like the generic
78
- default you would produce for any similar page — work through a similar prompt and see whether you
79
- arrive somewhere similar — revise that part, and say what you changed and why. Start writing code
80
- only once the plan is specific to this brief, then follow the revised plan exactly and derive every
81
- color and type decision from it.
82
-
83
- Structure your CSS selector specificities deliberately when writing the code. Classes cancel each
84
- other out, especially a type-based selector like `.section` against an element-based selector like
85
- `.cta`, and the padding and margin between sections is where it happens most.
86
-
87
- Do this planning and iteration in your thinking. Show the user a direction only once it satisfies
88
- the brief and the quality floor below.
250
+ In an authenticated tool the data is the content: keep it quiet, legible, and fast to compare. Put
251
+ the signature in the frame — navigation, header, type treatment, and useful empty states — rather
252
+ than an unconventional table. Keep the frame subordinate to the task. Carry an existing product's
253
+ signature forward instead of introducing another one for each screen.
254
+
255
+ For marketing, open with the subject's thesis and the most characteristic evidence for it: a
256
+ headline, image, demonstration, or interaction. Do not transplant that hero into an operational
257
+ screen. A big number, supporting stats, and a gradient accent are not a direction by themselves.
258
+
259
+ Make numbering, eyebrows, dividers, and labels encode something true. Number steps only when order
260
+ matters. Give richer components richer content without replacing their semantics: supporting text
261
+ in a menu, related non-comparable details in one table cell, native radios inside selectable cards.
262
+ Preserve keyboard behavior, sorting, and the comparisons the task depends on.
263
+
264
+ ## Hold the direction against defaults
265
+
266
+ Run the pass order in [SKILL.md](../SKILL.md) → Process. That section owns the sequence; this file
267
+ owns the visual decisions each pass makes.
268
+
269
+ Calibrate against recurring defaults: cream with serif and terracotta; near-black with
270
+ acid green or vermilion; broadsheet hairlines, square corners, and dense columns. These can fit a
271
+ brief; they are not evidence that a direction fits this one. Follow a pinned direction exactly and
272
+ use free axes deliberately, not as an excuse to rebrand an existing product.
273
+
274
+ Reject a direction that obscures the task, implies unbuilt behavior, or reads as interchangeable
275
+ with any other product. Keep exploratory drafts private: show the selected direction, the decisions
276
+ behind it, and the verification limits, not every discarded variation. Never claim a rendered result
277
+ from source inspection.
278
+
279
+ Keep specificity deliberate through [SKILL.md](../SKILL.md) → The styling ladder, which owns that
280
+ rule.
89
281
 
90
282
  ## Restraint and self-critique
91
283
 
92
- Spend the boldness in one place. Let the signature element be the one memorable thing, keep
93
- everything around it quiet and disciplined, and cut any decoration that does not serve the brief —
94
- decorative emoji as UI, pill soup, glow effects, and gradient-on-everything are the usual instances
95
- of decoration with no reason in the subject. Treat a surface with no deliberate risk as failing the
96
- distinctiveness mandate. Meet the quality floor without announcing it: responsive down to mobile,
97
- visible keyboard focus, reduced motion respected. Critique your own work as you build, and take
98
- screenshots where the environment supports it. Read both themes and both the wide and the narrow
99
- viewport from those captures, not the markup. Before shipping, remove one accessory: cut the
100
- least-necessary decorative element, and restore it only where the surface demonstrably loses
101
- information without it. Where notes persist across passes, record what you tried so the next pass
102
- reads it.
284
+ Spend boldness in one place where the brief permits it, and keep its surroundings disciplined. A
285
+ minimal direction needs precise spacing and type; a maximal direction needs controlled hierarchy,
286
+ not a pile of effects. Preserve an established restrained identity instead of manufacturing risk.
103
287
 
104
- ## Writing in design
288
+ Use motion only when it explains a transition, gives feedback, or belongs to the subject. Prefer
289
+ Bootstrap's behavior and at most one orchestrated decorative moment. Keep custom motion behind
290
+ `prefers-reduced-motion: no-preference`; the motion-free surface must remain complete.
105
291
 
106
- Keep a word only where it helps the reader understand the design, and so use it.
107
- Bring the same intentionality to copy as to spacing and color. Before writing anything, decide what
108
- the design needs to say, and how to say it so the person can navigate the experience.
292
+ Before shipping, remove the least-useful accessory if one exists. Restore it only when the surface
293
+ loses information or the brief's intended identity. Never remove a label, boundary, or affordance
294
+ merely to satisfy a subtraction rule.
295
+
296
+ Review captures at the declared widths, themes, and states, with keyboard focus and realistic
297
+ content. Switch modes on the mounted interface; inspect inherited text, quiet fills, and selected
298
+ controls before polishing decoration. Compare against the named design criteria; do not invent a numeric beauty score. Use
299
+ [inspection.md](inspection.md) for measurable claims and its rendered design review for visual
300
+ ones. Record untested coverage as open.
301
+
302
+ ## Writing in design
109
303
 
110
- Write from the end user's side of the screen. Name things by what people control and recognize,
111
- never by how the system is built: a person manages notifications, not webhook config. Describe what
112
- something does in plain terms rather than selling it, and choose the specific word over the clever
113
- one.
304
+ Keep a word only where it helps the person understand or operate the interface. Decide what each
305
+ element needs to say before writing it. Use the brief's content; when it supplies none, write
306
+ specific interface copy without inventing customer claims, performance figures, or testimonials.
307
+ Distinguish fixture data from product facts.
114
308
 
115
- Use the active voice by default. Make a control say exactly what happens when it is used: "Save
116
- changes," not "Submit." Keep an action's name through the whole flow, so the button that says
117
- "Publish" produces a toast that says "Published." Hold one vocabulary across every screen.
309
+ Write from the end user's side of the screen. Name what people control and recognize, not how the
310
+ system is built. Prefer a specific plain verb to a clever phrase. Tune tone to the product and hold
311
+ one vocabulary across screens.
118
312
 
119
- Give failure and emptiness direction rather than mood. State what went wrong and how to fix it, in
120
- the interface's voice rather than a person's, without apology and without vagueness about what
121
- happened. Name the action that fills an empty screen.
313
+ Make a control name its result: "Save changes," not "Submit." Keep that verb through the flow:
314
+ "Publish" confirms with "Published." Keep labels short only while they stay unambiguous. An expanded
315
+ accessible name must contain the visible label, preferably at its start; do not replace a useful
316
+ visible label with hidden explanation.
122
317
 
123
- Keep the register conversational and tuned: plain verbs, sentence case, no filler, tone matched to
124
- the brand and the audience. Give each element exactly one job: a label labels, an example
125
- demonstrates, and nothing does double duty.
318
+ Give failure and emptiness direction rather than mood. State what failed, what was preserved, and
319
+ what the person can do next. Name the first useful action in an empty state. Keep errors in context
320
+ and avoid apology, blame, and vague reassurance.
126
321
 
127
- Keep a short control label unambiguous. Where the surrounding context already names the object, make
128
- the visible label a single word and carry the specific phrase in the control's accessible name, so
129
- nothing is lost for someone who arrives without that context.
322
+ Use active voice, sentence case, and no filler. Let a label label and an example demonstrate. Keep
323
+ help and validation distinct; never make placeholder text carry either job alone.