@mthanh/vespercli 2.2.0 → 2.3.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.
Files changed (157) hide show
  1. package/README.md +6 -3
  2. package/assets/CATALOG.md +9 -2
  3. package/assets/claude/.claude-plugin/marketplace.json +9 -9
  4. package/assets/claude/.claude-plugin/plugin.json +1 -1
  5. package/assets/claude/agents/code-planner.md +1 -1
  6. package/assets/claude/agents/code-reviewer.md +1 -1
  7. package/assets/claude/agents/code-tester.md +1 -1
  8. package/assets/claude/agents/copywriter.md +1 -1
  9. package/assets/claude/agents/feature-wrap-document.md +1 -1
  10. package/assets/claude/agents/janitor.md +1 -1
  11. package/assets/claude/agents/modernization.md +1 -1
  12. package/assets/claude/agents/principal-software-engineer.md +1 -1
  13. package/assets/claude/agents/refine-issue.md +1 -1
  14. package/assets/claude/agents/se-system-architecture-reviewer.md +1 -1
  15. package/assets/claude/agents/se-technical-writer.md +1 -1
  16. package/assets/claude/agents/skill-creator.md +1 -1
  17. package/assets/claude/agents/task-researcher.md +1 -1
  18. package/assets/claude/agents/technical-product-manager.md +1 -1
  19. package/assets/claude/agents/vision-analyst.md +1 -1
  20. package/assets/claude/agents/vitest.md +1 -1
  21. package/assets/claude/agents/workspace-learner.md +2 -2
  22. package/assets/claude/packs/backend/.claude-plugin/plugin.json +1 -1
  23. package/assets/claude/packs/backend/agents/firebase-developer.md +1 -1
  24. package/assets/claude/packs/backend/agents/nodejs-express-developer.md +1 -1
  25. package/assets/claude/packs/docs/.claude-plugin/plugin.json +1 -1
  26. package/assets/claude/packs/frontend/.claude-plugin/plugin.json +1 -1
  27. package/assets/claude/packs/frontend/agents/expert-nextjs-developer.md +1 -1
  28. package/assets/claude/packs/frontend/agents/expert-react-frontend-engineer.md +1 -1
  29. package/assets/claude/packs/frontend/agents/jest-react-component-analyzer.md +1 -1
  30. package/assets/claude/packs/frontend/agents/jest-react-scenario-scanner.md +1 -1
  31. package/assets/claude/packs/frontend/agents/jest-react-test-generator.md +1 -1
  32. package/assets/claude/packs/frontend/agents/jest-react-test-planner.md +1 -1
  33. package/assets/claude/packs/frontend/skills/design-taste-frontend/LICENSE +21 -0
  34. package/assets/claude/packs/frontend/skills/design-taste-frontend/SKILL.md +529 -0
  35. package/assets/claude/packs/frontend/skills/design-taste-frontend/UPSTREAM.json +7 -0
  36. package/assets/claude/packs/frontend/skills/design-taste-frontend/assets/app.css +216 -0
  37. package/assets/claude/packs/frontend/skills/design-taste-frontend/assets/base.css +105 -0
  38. package/assets/claude/packs/frontend/skills/design-taste-frontend/assets/base.js +37 -0
  39. package/assets/claude/packs/frontend/skills/design-taste-frontend/assets/charts.js +617 -0
  40. package/assets/claude/packs/frontend/skills/design-taste-frontend/assets/scenes/stage.css +28 -0
  41. package/assets/claude/packs/frontend/skills/design-taste-frontend/assets/scenes/stage.js +133 -0
  42. package/assets/claude/packs/frontend/skills/design-taste-frontend/evals/evals.json +76 -0
  43. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/app.json +1327 -0
  44. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/directions.json +1078 -0
  45. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/heroes.json +1086 -0
  46. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/motions.json +92 -0
  47. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/palettes.json +1485 -0
  48. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/photos.json +7240 -0
  49. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/sections.json +4429 -0
  50. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/sites.json +8350 -0
  51. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/type.json +2024 -0
  52. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/app-screens.md +1199 -0
  53. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/colour.md +141 -0
  54. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/copy.md +177 -0
  55. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/critique.md +182 -0
  56. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/imagery.md +791 -0
  57. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/layout.md +292 -0
  58. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/motion.md +980 -0
  59. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/research.md +356 -0
  60. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/scenes.md +174 -0
  61. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/tells.md +115 -0
  62. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/type.md +170 -0
  63. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/assets.mjs +865 -0
  64. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/draw.mjs +584 -0
  65. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/inspect.mjs +303 -0
  66. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/lib/app-draw.mjs +203 -0
  67. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/lib/cdp.mjs +248 -0
  68. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/lib/probe.mjs +909 -0
  69. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/lib/rules.mjs +243 -0
  70. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/lint.mjs +119 -0
  71. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/scenes.mjs +124 -0
  72. package/assets/claude/packs/graphify/.claude-plugin/plugin.json +1 -1
  73. package/assets/claude/packs/integrations/.claude-plugin/plugin.json +1 -1
  74. package/assets/claude/packs/playwright/.claude-plugin/plugin.json +1 -1
  75. package/assets/claude/packs/playwright/agents/playwright-component-analyzer.md +1 -1
  76. package/assets/claude/packs/playwright/agents/playwright-scenario-scanner.md +1 -1
  77. package/assets/claude/packs/playwright/agents/playwright-test-generator.md +1 -1
  78. package/assets/claude/packs/playwright/agents/playwright-test-planner.md +1 -1
  79. package/assets/claude/packs/playwright/agents/playwright-tester.md +1 -1
  80. package/assets/claude/packs/polyglot/.claude-plugin/plugin.json +1 -1
  81. package/assets/claude/packs/styles/.claude-plugin/plugin.json +1 -1
  82. package/assets/copilot/agents/code-planner.agent.md +1 -1
  83. package/assets/copilot/agents/code-reviewer.agent.md +1 -1
  84. package/assets/copilot/agents/code-tester.agent.md +1 -1
  85. package/assets/copilot/agents/copywriter.agent.md +1 -1
  86. package/assets/copilot/agents/feature-wrap-document.agent.md +1 -1
  87. package/assets/copilot/agents/janitor.agent.md +1 -1
  88. package/assets/copilot/agents/modernization.agent.md +1 -1
  89. package/assets/copilot/agents/principal-software-engineer.agent.md +1 -1
  90. package/assets/copilot/agents/refine-issue.agent.md +1 -1
  91. package/assets/copilot/agents/se-system-architecture-reviewer.agent.md +1 -1
  92. package/assets/copilot/agents/se-technical-writer.agent.md +1 -1
  93. package/assets/copilot/agents/skill-creator.agent.md +1 -1
  94. package/assets/copilot/agents/task-researcher.agent.md +1 -1
  95. package/assets/copilot/agents/technical-product-manager.agent.md +1 -1
  96. package/assets/copilot/agents/vision-analyst.agent.md +1 -1
  97. package/assets/copilot/agents/vitest.agent.md +1 -1
  98. package/assets/copilot/agents/workspace-learner.agent.md +2 -2
  99. package/assets/copilot/packs/backend/agents/firebase-developer.agent.md +1 -1
  100. package/assets/copilot/packs/backend/agents/nodejs-express-developer.agent.md +1 -1
  101. package/assets/copilot/packs/frontend/agents/expert-nextjs-developer.agent.md +1 -1
  102. package/assets/copilot/packs/frontend/agents/expert-react-frontend-engineer.agent.md +1 -1
  103. package/assets/copilot/packs/frontend/agents/jest-react-component-analyzer.agent.md +1 -1
  104. package/assets/copilot/packs/frontend/agents/jest-react-scenario-scanner.agent.md +1 -1
  105. package/assets/copilot/packs/frontend/agents/jest-react-test-generator.agent.md +1 -1
  106. package/assets/copilot/packs/frontend/agents/jest-react-test-planner.agent.md +1 -1
  107. package/assets/copilot/packs/frontend/skills/design-taste-frontend/LICENSE +21 -0
  108. package/assets/copilot/packs/frontend/skills/design-taste-frontend/SKILL.md +529 -0
  109. package/assets/copilot/packs/frontend/skills/design-taste-frontend/UPSTREAM.json +7 -0
  110. package/assets/copilot/packs/frontend/skills/design-taste-frontend/assets/app.css +216 -0
  111. package/assets/copilot/packs/frontend/skills/design-taste-frontend/assets/base.css +105 -0
  112. package/assets/copilot/packs/frontend/skills/design-taste-frontend/assets/base.js +37 -0
  113. package/assets/copilot/packs/frontend/skills/design-taste-frontend/assets/charts.js +617 -0
  114. package/assets/copilot/packs/frontend/skills/design-taste-frontend/assets/scenes/stage.css +28 -0
  115. package/assets/copilot/packs/frontend/skills/design-taste-frontend/assets/scenes/stage.js +133 -0
  116. package/assets/copilot/packs/frontend/skills/design-taste-frontend/evals/evals.json +76 -0
  117. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/app.json +1327 -0
  118. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/directions.json +1078 -0
  119. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/heroes.json +1086 -0
  120. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/motions.json +92 -0
  121. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/palettes.json +1485 -0
  122. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/photos.json +7240 -0
  123. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/sections.json +4429 -0
  124. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/sites.json +8350 -0
  125. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/type.json +2024 -0
  126. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/app-screens.md +1199 -0
  127. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/colour.md +141 -0
  128. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/copy.md +177 -0
  129. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/critique.md +182 -0
  130. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/imagery.md +791 -0
  131. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/layout.md +292 -0
  132. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/motion.md +980 -0
  133. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/research.md +356 -0
  134. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/scenes.md +174 -0
  135. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/tells.md +115 -0
  136. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/type.md +170 -0
  137. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/assets.mjs +865 -0
  138. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/draw.mjs +584 -0
  139. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/inspect.mjs +303 -0
  140. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/lib/app-draw.mjs +203 -0
  141. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/lib/cdp.mjs +248 -0
  142. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/lib/probe.mjs +909 -0
  143. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/lib/rules.mjs +243 -0
  144. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/lint.mjs +119 -0
  145. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/scenes.mjs +124 -0
  146. package/assets/copilot/packs/playwright/agents/playwright-component-analyzer.agent.md +1 -1
  147. package/assets/copilot/packs/playwright/agents/playwright-scenario-scanner.agent.md +1 -1
  148. package/assets/copilot/packs/playwright/agents/playwright-test-generator.agent.md +1 -1
  149. package/assets/copilot/packs/playwright/agents/playwright-test-planner.agent.md +1 -1
  150. package/assets/copilot/packs/playwright/agents/playwright-tester.agent.md +1 -1
  151. package/assets/manifest.json +2 -0
  152. package/dist/cli.min.js +102 -102
  153. package/package.json +1 -1
  154. package/scripts/__snapshots__/generate-claude-assets.test.js.snap +1 -1
  155. package/scripts/generate-claude-assets.strict.test.js +1 -1
  156. package/scripts/generate-claude-assets.test.js +6 -6
  157. package/scripts/packs-layout.test.js +2 -1
@@ -0,0 +1,292 @@
1
+ # Layout
2
+
3
+ How the page is put together: margins, the grid, where text sits, how sections differ, navigation,
4
+ endings and the phone. The direction sheet gives the specific compositions; this file gives the habits
5
+ behind them, taken from the panel's notes on the 114 studied sites that scored 7.3 or higher (counts
6
+ below are hand tallies from those notes, so read them as "about").
7
+
8
+ ## Contents
9
+
10
+ 1. What strong pages do
11
+ 2. Margins and the grid
12
+ 3. Where text sits
13
+ 4. Empty space
14
+ 5. The frame: margins, balance and titles
15
+ 6. Sections: carry the idea, vary the arrangement
16
+ 7. Navigation
17
+ 8. Endings
18
+ 9. The phone is a second composition
19
+ 10. How pages fail
20
+
21
+ ## 1. What strong pages do
22
+
23
+ - **Tight margins, content to the edges.** About 45 of 114 use outer margins of 32px or less; only
24
+ about 8 use 80px or more. The centred 1100–1300px container is the minority among strong sites and
25
+ the usual frame of the ones the panel called stock.
26
+ - **Text hangs from an off-centre line.** About 22 anchor text to one fixed line that is neither the
27
+ centre nor the margin: a third across, 42%, the midpoint.
28
+ - **Two or three type sizes with nothing between** (about 30): one very large with one small, or
29
+ everything small with the scale given to the image.
30
+ - **One thing per screen** (about 20): one statement, one object, one project.
31
+ - **Sections told apart by their ground.** About 20 change the whole background colour at each
32
+ section; about 12 alternate light and dark; about 10 never change and separate by space alone.
33
+ - **Sections recomposed, not repeated.** About 14 rearrange every section; about 12 alternate a
34
+ full-bleed image screen with a near-empty type screen.
35
+ - **The system broken once, on purpose** (about 14): one centred line on a split page, one paper card
36
+ on a dark page, colour held back until the last screen.
37
+ - **Often no navigation bar** (about 45), and endings that are a designed scene rather than link
38
+ columns.
39
+ - **Few words.** Median 575 on the whole study; some of the best carry under 200.
40
+
41
+ ## 2. Margins and the grid
42
+
43
+ ```css
44
+ :root {
45
+ --margin: clamp(1rem, 2.2vw, 2rem); /* 16–32px: tight, so content reaches the edges */
46
+ --gutter: clamp(0.75rem, 1.4vw, 1.5rem);
47
+ }
48
+ .wrap { padding-inline: var(--margin); }
49
+ .grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--gutter); }
50
+ ```
51
+
52
+ - One pair of margins and one grid for the whole page. Every left edge is a column line.
53
+ - Do not wrap the page in a `max-width: 1200px; margin: auto` container by reflex. Let large things
54
+ (type, images, colour fields) run the full width, and constrain only the measure of running text
55
+ (`max-width` in `ch` on the paragraph, not on the page).
56
+ - On very wide screens cap the layout at about 1760–1920px, or let type sized in `vw` stop growing with
57
+ a `clamp()`.
58
+ - Directions that call for wide margins (uneven photographs, the quiet instrument) say so on the
59
+ sheet; follow the sheet.
60
+ - Never draw the grid. Column lines, crosshairs and guides are banned ornaments here even though they
61
+ are fashionable; the grid is felt through alignment.
62
+
63
+ ## 3. Where text sits
64
+
65
+ - **Pick the anchor line and reuse it.** If the hero headline starts at column 5, the section
66
+ headings, the pricing figure and the footer links start there too. Two or three anchor lines on a
67
+ whole page; six means nothing was decided.
68
+ - **Off-centre beats centred.** A heading in the left third with its paragraph in the far-right
69
+ column on the same baseline and nothing between; a headline in the bottom third under a deliberate
70
+ void; text docked in corners with the middle given to the picture.
71
+ - **Opposite ends.** Two short texts at opposite ends of one baseline (name left, one-line description
72
+ right) is the commonest alternative to the centred stack.
73
+ - **Centred is a decision.** When a strong page centres, it uses one axis with wide empty flanks and a
74
+ single element per screen, not a centred stack of heading, paragraph and two buttons.
75
+ - **Rows for long copy:** heading in the left third, body in the right two-thirds, the same split for
76
+ every row on the page.
77
+ - Stagger sparingly: a second line indented by a third so a two-line headline steps across the screen.
78
+
79
+ ## 4. Empty space
80
+
81
+ Empty space is placed, not left over. In the study of 97 Sites of the Day captured in October 2026,
82
+ readers judged every large empty area either a rest, which something closes, or a hole, which nothing
83
+ closes. Strong sites have plenty of rests. About half of them still leave at least one hole, and the
84
+ holes are what visitors name ("big random blank spaces").
85
+
86
+ **A void is placed when something closes it.** In the readers' notes the closer is, most often:
87
+
88
+ - the picture itself (sky, ground, the object, the film) with the type docked at its edge;
89
+ - a picture across the void: the photograph at the far side of an empty band, the full-width row
90
+ rising under a statement, the opposite picture in a stagger;
91
+ - the type: a headline large enough to span the space, or two short texts at the two ends of one
92
+ baseline;
93
+ - on a one-screen page, the wordmark, the navigation and one fact in the corners, like a mount around
94
+ a print.
95
+
96
+ About one closer in five in the study is a hairline or grid line. That device is banned here; close the
97
+ void with the picture, the type, a step in ground tone or a field of flat colour.
98
+
99
+ **Where holes come from.** In order of frequency in the study:
100
+
101
+ 1. A gap between sections stretched too far: bands of 250–760px of plain ground.
102
+ 2. Text in one half of a section and nothing in the other.
103
+ 3. Content that arrives late: a reveal not yet fired, so the visitor scrolls onto bare ground while the
104
+ words fade in.
105
+ 4. A short block stretched to a full screen: a footer padded to the viewport height, a section title
106
+ alone on a whole screen.
107
+ 5. A pinned scene that holds almost nothing for several screens.
108
+ 6. Pictures of different heights top-aligned in a row, leaving a hole under the short one.
109
+
110
+ **Rules**
111
+
112
+ - Decide where the void is and name what closes it. If nothing does, it is a hole: move the section's
113
+ picture into it, make the main element bigger, or take the space out.
114
+ - Keep the void clean: no stray caption, no decorative shape, no faint watermark, no grid lines.
115
+ - Sections sit 120–240px apart on desktop, counted from the last line of one to the first line of the
116
+ next (the median in the study is about 230–250px), and 72–112px on a phone. A change of ground
117
+ colour lets the gap be a little smaller. More than about 40% of a screen of plain ground between two
118
+ sections is a hole.
119
+ - The gap between sections is clearly larger than any gap inside one. Related things sit close and
120
+ unrelated things far; a heading has at least twice as much space above it as below.
121
+ - No stretch of the page taller than about half a screen holds nothing at all. In the study, runs of a
122
+ screen or more with nothing in the page were almost always scroll distance for a pinned scene; the
123
+ pinned stage must then hold something at every scroll position.
124
+ - Content is in place on the first paint. An entrance moves what is already there (see `motion.md`);
125
+ it never leaves a screen of bare ground while the words arrive.
126
+ - Size a section to its content. `min-height: 100vh` belongs to a section that fills the screen, not
127
+ to a footer or a lone heading.
128
+ - In a row of pictures of different heights, align the bottoms or put something under the short one,
129
+ or crop the row to one ratio.
130
+ - A rest is one thing on a screen: a single line, one object, one picture or a field of colour. Once
131
+ per page at most. A screen of nothing is never a rest, and the inspector fails two near-empty screens.
132
+ - When a section looks empty, the answer is almost never "add something". Make the main element
133
+ bigger, or cut the section.
134
+
135
+ ## 5. The frame: margins, balance and titles
136
+
137
+ The frame is what readers judge before any detail: "no good margin", "everything is shifted to one
138
+ side", "no clear title", "random unclear sections". The inspector measures each of these. The numbers
139
+ are from the study of 97 Sites of the Day (October 2026).
140
+
141
+ **One pair of equal margins.**
142
+
143
+ - The left and right margins are the same, at every width. On the studied sites with scrolling
144
+ sections the two sides match to a few pixels: 16 and 16, 20 and 21, 32 and 32, 140 and 137. No
145
+ strong page in the study was pushed to one side.
146
+ - The usual margin is tight: median about 28px at 1440, half the sites between about 18 and 45px, a
147
+ few at 80px or more. Here it is 16–32px (section 2), and never under 16px at any width, on the phone
148
+ included. About one award site in seven sets text 8–15px from the edge; that studio habit is
149
+ excluded here.
150
+ - The navigation sits on the same margins as the content. The commonest small fault in the study is a
151
+ header on one inset and the page on another (40px against 20px, or 34px on the left against 10px on
152
+ the right).
153
+ - A bleed is deliberate and starts from the margin: a row of pictures that runs off the right edge
154
+ begins on the left margin; a display line that bleeds starts or ends on one. A bleed never moves the
155
+ margin.
156
+ - Asymmetry belongs inside the frame: an off-centre anchor line (a third across, 42%, the centre line)
157
+ on symmetric margins.
158
+
159
+ **Use the width the page has set up.**
160
+
161
+ - In the study about one text section in a hundred leaves half the width empty. Text that sits in one
162
+ half is common, in roughly one site in three, but the other half then holds the section's own
163
+ picture (most often), a full-bleed picture behind the text, a second column, a list or a figure.
164
+ - When the text takes one side, put the picture, the second column, the list or the large number on
165
+ the other. Never leave the other half to plain ground.
166
+ - The middle counts too: a card at the left edge and a lone button at the right with the middle third
167
+ empty is the same hole.
168
+ - The first screen counts too. When the sentence and the button take the left third above a name
169
+ docked at the foot, the upper right holds something (the picture or film, one fact, the action) or
170
+ the name grows up to meet them; in testing, 60% of a first screen left as plain ground under the
171
+ navigation read as a hole, and the inspector now warns when one empty block takes 28% of the first
172
+ screen or more.
173
+ - A display line fitted to the width is fitted by measurement (a small script that sets its size from
174
+ the content box, or SVG text with `textLength`), never by a size guessed for one face: a name that
175
+ starts on the margin and runs a few pixels off the other edge reads as a mistake.
176
+ - A centred composition has one axis, equal flanks and one thing on it, not a stack of heading,
177
+ paragraph and two buttons.
178
+
179
+ **A title that says what this is, on the first screen.**
180
+
181
+ - Asked whether a stranger could say what the page is within five seconds, readers found that 40 of
182
+ the 97 first screens say it in words, 42 say it only through pictures, small print or a bare name,
183
+ and 15 do not say it at all. The last group lost usability and content points, not design points.
184
+ - Size alone does not do it: 66 of the 97 first screens carry a display-size line, but 26 of those are
185
+ a name, a slogan or a place with nothing saying what is offered.
186
+ - The first screen has one `h1`, at display size (32px or more on desktop; on the clear first
187
+ screens in the study mostly 50–150px), two lines at most, that says what this is: the name with
188
+ what it does, the product with what it is for, the event with its date and place. If the `h1` is
189
+ the name, the line under it, at 18px or more, says what the thing is.
190
+ - It is there on the first paint. About a third of the studied pages still showed a loader or nothing readable 4.5
191
+ seconds.
192
+
193
+ **A heading on every section.**
194
+
195
+ - 82% of the text sections on the studied sites open with a heading: median 57px (40–96px for the
196
+ middle half), about three and a half times the body size, one or two lines.
197
+ - Headings start on the outer margin or on the page's inner anchor line (in the study about a third
198
+ each) and in the same place for every section. About a quarter of the headings in the study are
199
+ centred; centre one moment per page here.
200
+ - Where a studied section has no heading, the usual stand-in is a small label: caps, mono or a number
201
+ in brackets. All three are banned here. Put the label's words in a heading in the heading face at the
202
+ section size ("The rooms", "How it works", "Prices"), set them on the anchor line, and let the first
203
+ sentence carry the rest.
204
+ - A statement can open a section as its heading only when it names what the section holds.
205
+
206
+ ## 6. Sections: carry the idea, vary the arrangement
207
+
208
+ The most common failure in every score band is a distinctive first screen followed by stock blocks:
209
+ icon cards, a three-up row, an accordion, a link-column footer. About 25 of the studied sites lose
210
+ points this way, including several above 7.5.
211
+
212
+ - **The idea survives to the last pixel.** Ask of each section, pricing and FAQ included: what does
213
+ the page's idea do here? If the page is a menu, the prices are menu lines. If the name is a
214
+ monument, the footer is the name again. If the object's shape is the motif, the button and the image
215
+ masks carry it.
216
+ - **No two neighbours share a layout.** Use the shape of each dealt blueprint (list, split, statement,
217
+ full-bleed, mosaic, table, strip, pinned …). Count them in the screenshot; a shape used three times
218
+ is the template showing.
219
+ - **Alternate dense and empty, image and type, light and dark** so the scroll has rhythm.
220
+ - **A repeated module is for archives only** (a work index, a menu, a schedule). Anywhere else,
221
+ repetition reads as a kit.
222
+ - **Break the system once.** After the page has established its rule, one planned exception (a single
223
+ centred line, one inverted section, one image at a different scale) is what makes the rule visible.
224
+ - **Short pages are fine.** A quarter of the studied sites are one or two screens. Do not add sections
225
+ to seem complete; each one must carry a claim (see `copy.md` §1).
226
+
227
+ ## 7. Navigation
228
+
229
+ - The plain form: the wordmark at one end, three to five text links, one action, all at text size on
230
+ the page ground with no bar, border or background. Median link count in the study is 3.
231
+ - It is also normal to have less: small links in the corners, a single action, or the navigation
232
+ folded into the content (a list of section titles that is itself the index).
233
+ - If it stays fixed, it must never sit on top of content: check every scroll position in the
234
+ screenshots, especially on the phone. Floating pill bars are where the panel most often recorded a
235
+ nav covering text.
236
+ - On a phone: wordmark and one action in view; the links go in a simple full-screen sheet opened by a
237
+ text button ("Menu"), or move to the footer when there are only three.
238
+ - Navigation is small furniture, however it is drawn. On desktop it takes no more than about a tenth
239
+ of the first screen; on a phone it is one row. A blueprint that builds the navigation as a column of
240
+ colour blocks or a stack of tabs gets that treatment on desktop only, and collapses to one row on
241
+ the phone so the headline, the supporting sentence and the action stay in the first screen. In
242
+ blind tests a nav that ate the hero cost a whole point of usability.
243
+
244
+ ## 8. Endings
245
+
246
+ - The page should end on a designed scene. In the study: the name at full width (about 18 of 114), the
247
+ hero repeated in inverted colours (about 12), a closing scene of its own such as the one contact
248
+ fact set as a headline (about 14), or simply one quiet line (about 22). Link-column footers appear
249
+ in the panel's notes only as criticism.
250
+ - The full-width name is strong but already a studio habit; use it when the direction is name-led,
251
+ otherwise prefer the blueprint dealt for the footer.
252
+ - Put the practical facts (address, hours, email, legal line) in the text face at a readable size, on
253
+ the same anchor lines as the rest of the page.
254
+
255
+ ## 9. The phone is a second composition
256
+
257
+ Design the 390px screen as its own page, not the desktop page squeezed. Strong sites that neglect this
258
+ lose usability points; weak ones are often just broken.
259
+
260
+ - Each blueprint on the sheet has its own phone paragraph. Build it.
261
+ - Keep one dominant thing on the first screen. A wordmark that was 20vw wide on desktop might stack on
262
+ two lines at 26vw on the phone and be even stronger.
263
+ - Re-author line breaks; re-crop images to portrait (`object-position` per breakpoint, or a different
264
+ crop size in the image URL); keep unevenness with alternating widths rather than making everything
265
+ full width.
266
+ - Margins 16–20px. Body text 16–18px. Touch targets at least 44px high.
267
+ - Check 390px in the inspector's screenshots for every round: sideways scroll and three-line headlines
268
+ usually appear here first.
269
+
270
+ ## 10. How pages fail
271
+
272
+ From the panel's notes on the 54 sites scoring under 6.8 (counts out of 54):
273
+
274
+ - The whole page is the category's stock template; swap the logo and it could be any competitor
275
+ (about 20).
276
+ - Centred headline, pill badge, two buttons, screenshot or tile grid below (about 9).
277
+ - A distinctive hero, then stock modules in the usual order (about 8, and about 17 more in the middle
278
+ band).
279
+ - A default typeface with no character (about 13).
280
+ - Text too small or too low in contrast (about 13); legibility lost over busy photographs (about 9).
281
+ - An undersized headline and no focal point (about 9).
282
+ - The page never says what the thing is, or shows no work (about 12 and 7).
283
+ - Thin content stretched over many screens, or a single gag (about 11).
284
+ - Gates, preloaders and entry pop-ups before any content (about 9).
285
+ - A phone layout that is the desktop shrunk, or broken (about 8).
286
+ - Fixed elements sitting on content; careless details such as colliding lines (about 7 and 5).
287
+
288
+ And the faults of the best sites, which are not to be copied: body text at 9–13px (about 24 of the 90
289
+ sites at 7.5 or more), information hidden behind the concept (about 20), the idea running out
290
+ mid-page (about 15), text over footage with no scrim (about 12), gates and blank first paints (about
291
+ 12), floating elements colliding with content (about 11), and a first screen with no statement of what
292
+ this is and no action (about 9). Say what the thing is, and offer the action, on the first screen.