picasso-skill 2.5.0 → 2.6.1
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/agents/picasso.md +4 -6
- package/commands/mood.md +3 -2
- package/commands/preset.md +2 -2
- package/commands/preview.md +3 -3
- package/commands/variants.md +3 -4
- package/package.json +1 -1
- package/references/accessibility-wcag.md +3 -0
- package/references/code-typography.md +36 -166
- package/references/color-and-contrast.md +78 -345
- package/references/generative-art.md +49 -561
- package/references/modern-css-performance.md +46 -258
- package/references/motion-and-animation.md +225 -88
- package/references/navigation-patterns.md +29 -186
- package/references/performance-optimization.md +42 -678
- package/references/react-patterns.md +56 -216
- package/references/responsive-design.md +77 -379
- package/references/sensory-design.md +62 -263
- package/references/ux-writing.md +64 -354
- package/references/visual-preview.md +17 -9
- package/references/animation-performance.md +0 -244
- package/references/interaction-design.md +0 -162
package/references/ux-writing.md
CHANGED
|
@@ -20,38 +20,16 @@ Never use generic labels. Every button tells the user exactly what will happen.
|
|
|
20
20
|
|
|
21
21
|
### Pattern: Verb + Object
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
Save changes
|
|
25
|
-
Create account
|
|
26
|
-
Delete 3 items
|
|
27
|
-
Export as PDF
|
|
28
|
-
Add to cart
|
|
29
|
-
Send invitation
|
|
30
|
-
Publish post
|
|
31
|
-
Archive conversation
|
|
32
|
-
```
|
|
23
|
+
`Save changes`, `Create account`, `Delete 3 items`, `Export as PDF`, `Send invitation`, `Publish post`
|
|
33
24
|
|
|
34
25
|
### Destructive Actions: Name the Destruction + Show Count
|
|
35
26
|
|
|
36
27
|
```
|
|
37
|
-
// BAD
|
|
38
|
-
Are you sure? [Yes] [No]
|
|
39
|
-
|
|
40
|
-
// GOOD
|
|
41
28
|
Delete 14 messages permanently?
|
|
42
29
|
This cannot be undone.
|
|
43
30
|
[Keep messages] [Delete 14 messages]
|
|
44
31
|
```
|
|
45
32
|
|
|
46
|
-
```
|
|
47
|
-
// BAD
|
|
48
|
-
Remove items? [OK] [Cancel]
|
|
49
|
-
|
|
50
|
-
// GOOD
|
|
51
|
-
Remove 3 items from your cart?
|
|
52
|
-
[Keep items] [Remove 3 items]
|
|
53
|
-
```
|
|
54
|
-
|
|
55
33
|
### Paired Button Rules
|
|
56
34
|
|
|
57
35
|
| Scenario | Primary | Secondary |
|
|
@@ -72,57 +50,20 @@ The safe/non-destructive action is always visually more prominent (filled button
|
|
|
72
50
|
|
|
73
51
|
Every error message has three parts. Never skip "how to fix."
|
|
74
52
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
**
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
**Missing required field:**
|
|
85
|
-
```
|
|
86
|
-
Title: Card number is required
|
|
87
|
-
Body: Enter your 16-digit card number to complete checkout.
|
|
88
|
-
// Inline: highlight the field, place message directly below it
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
**Permission denied:**
|
|
92
|
-
```
|
|
93
|
-
Title: You don't have access to this project
|
|
94
|
-
Body: Only project admins can change billing settings. Ask [Admin Name] to update your role or make this change for you.
|
|
95
|
-
Action: [Request access] [Go back]
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
**Network error:**
|
|
99
|
-
```
|
|
100
|
-
Title: Can't connect right now
|
|
101
|
-
Body: Check your internet connection and try again. Your draft has been saved locally.
|
|
102
|
-
Action: [Try again]
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
**Server error (5xx):**
|
|
106
|
-
```
|
|
107
|
-
Title: Something went wrong on our end
|
|
108
|
-
Body: We're looking into it. Your data is safe. Try again in a few minutes, or contact support if this keeps happening.
|
|
109
|
-
Action: [Try again] [Contact support]
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
**Rate limit:**
|
|
113
|
-
```
|
|
114
|
-
Title: Too many requests
|
|
115
|
-
Body: You've hit the rate limit. Try again in [X] seconds.
|
|
116
|
-
Action: [auto-countdown button: "Try again in 28s"]
|
|
117
|
-
```
|
|
53
|
+
**Templates by type:**
|
|
54
|
+
- **Format error**: State what's wrong, show correct format, action to fix
|
|
55
|
+
- **Missing field**: Name the field, explain what's needed for context
|
|
56
|
+
- **Permission denied**: Explain who can do this, offer request access or go back
|
|
57
|
+
- **Network error**: Suggest checking connection, confirm data is saved locally
|
|
58
|
+
- **Server error (5xx)**: Acknowledge it's your fault, confirm data is safe, offer retry + support
|
|
59
|
+
- **Rate limit**: Show countdown timer, auto-enable retry button
|
|
118
60
|
|
|
119
61
|
### Rules
|
|
120
|
-
|
|
121
62
|
- Never blame the user. "Invalid input" becomes "This field needs a number between 1 and 100."
|
|
122
|
-
- Never use error codes alone.
|
|
123
|
-
- Never use "Oops!" or humor in error states.
|
|
124
|
-
- Place errors inline next to the field, not in a
|
|
125
|
-
- Use red
|
|
63
|
+
- Never use error codes alone. Always pair with human language.
|
|
64
|
+
- Never use "Oops!" or humor in error states.
|
|
65
|
+
- Place errors inline next to the field, not in a disappearing toast.
|
|
66
|
+
- Use red for error borders/icons, not for the entire message text.
|
|
126
67
|
|
|
127
68
|
---
|
|
128
69
|
|
|
@@ -131,49 +72,24 @@ Action: [auto-countdown button: "Try again in 28s"]
|
|
|
131
72
|
### Formula: Acknowledge + Explain Value + Action CTA + Optional Help
|
|
132
73
|
|
|
133
74
|
```
|
|
134
|
-
// Project list empty state
|
|
135
|
-
|
|
136
|
-
[illustration or icon]
|
|
137
|
-
|
|
138
75
|
No projects yet
|
|
139
76
|
Projects help you organize work, track progress, and collaborate with your team.
|
|
140
|
-
|
|
141
77
|
[Create your first project]
|
|
142
|
-
|
|
143
78
|
Need help getting started? Read the quick-start guide.
|
|
144
79
|
```
|
|
145
80
|
|
|
146
|
-
```
|
|
147
|
-
// Search with no results
|
|
148
|
-
|
|
149
|
-
No results for "exmple"
|
|
150
|
-
Did you mean "example"?
|
|
151
|
-
|
|
152
|
-
Try different keywords, remove filters, or [browse all items].
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
```
|
|
156
|
-
// Filtered view empty
|
|
157
|
-
|
|
158
|
-
No completed tasks this week
|
|
159
|
-
Completed tasks will appear here as your team finishes work.
|
|
160
|
-
|
|
161
|
-
[View all tasks]
|
|
162
|
-
```
|
|
163
|
-
|
|
164
81
|
### Rules
|
|
165
|
-
|
|
166
|
-
-
|
|
167
|
-
-
|
|
168
|
-
-
|
|
169
|
-
-
|
|
170
|
-
- Never show a completely blank screen. Even loading-to-empty transitions need a state.
|
|
82
|
+
- Keep acknowledgment to one short line
|
|
83
|
+
- Value proposition answers "why would I want things here?"
|
|
84
|
+
- CTA uses verb+object pattern
|
|
85
|
+
- Help links open in context, never navigate away
|
|
86
|
+
- Never show a completely blank screen
|
|
171
87
|
|
|
172
88
|
---
|
|
173
89
|
|
|
174
90
|
## 4. Voice vs Tone
|
|
175
91
|
|
|
176
|
-
**Voice** is the personality
|
|
92
|
+
**Voice** is the personality (never changes): Clear, Confident, Helpful, Human.
|
|
177
93
|
|
|
178
94
|
| Voice Attribute | Means | Does Not Mean |
|
|
179
95
|
|----------------|-------|---------------|
|
|
@@ -182,96 +98,38 @@ Completed tasks will appear here as your team finishes work.
|
|
|
182
98
|
| Helpful | Guides next step, anticipates needs | Condescending or hand-holding |
|
|
183
99
|
| Human | Natural phrasing, contractions OK | Slang, jokes, or emoji in UI text |
|
|
184
100
|
|
|
185
|
-
**Tone** adapts to the moment
|
|
101
|
+
**Tone** adapts to the moment:
|
|
186
102
|
|
|
187
103
|
| Moment | Tone | Example |
|
|
188
104
|
|--------|------|---------|
|
|
189
105
|
| Success | Warm, encouraging | "Your account is ready. Let's set up your first project." |
|
|
190
106
|
| Error | Calm, direct | "That file is too large. The maximum size is 25 MB." |
|
|
191
|
-
| Destructive
|
|
107
|
+
| Destructive | Serious, precise | "This will permanently delete 14 messages. This cannot be undone." |
|
|
192
108
|
| Onboarding | Friendly, guiding | "Welcome. We'll walk you through the basics in about 2 minutes." |
|
|
193
109
|
| Empty state | Neutral, inviting | "No notifications yet. You'll see updates from your team here." |
|
|
194
110
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
Never use humor in error states, destructive actions, or security messages. A user who just lost data does not want a witty quip.
|
|
111
|
+
Never use humor in error states, destructive actions, or security messages.
|
|
198
112
|
|
|
199
113
|
---
|
|
200
114
|
|
|
201
115
|
## 5. Accessibility Writing
|
|
202
116
|
|
|
203
117
|
### Link Text
|
|
204
|
-
|
|
205
|
-
Links must make sense when read alone (screen readers navigate by link list).
|
|
206
|
-
|
|
207
|
-
```
|
|
208
|
-
// BAD
|
|
209
|
-
To learn more about pricing, click here.
|
|
210
|
-
|
|
211
|
-
// GOOD
|
|
212
|
-
View our pricing plans.
|
|
213
|
-
|
|
214
|
-
// BAD
|
|
215
|
-
Read more
|
|
216
|
-
|
|
217
|
-
// GOOD
|
|
218
|
-
Read the full accessibility guidelines
|
|
219
|
-
```
|
|
118
|
+
Links must make sense when read alone (screen readers navigate by link list). "View our pricing plans" not "click here."
|
|
220
119
|
|
|
221
120
|
### Alt Text
|
|
222
|
-
|
|
223
|
-
Describe the information the image conveys, not the image itself.
|
|
224
|
-
|
|
225
|
-
```
|
|
226
|
-
// BAD
|
|
227
|
-
alt="photo"
|
|
228
|
-
alt="image of a chart"
|
|
229
|
-
alt="" (unless purely decorative)
|
|
230
|
-
|
|
231
|
-
// GOOD
|
|
232
|
-
alt="Revenue grew 34% from Q1 to Q4 2025"
|
|
233
|
-
alt="Team photo: 12 people standing in front of the office"
|
|
234
|
-
alt="" (decorative divider, background pattern)
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
Rule: If the image were deleted, what information would be lost? That is your alt text.
|
|
121
|
+
Describe the information the image conveys, not the image itself. If the image were deleted, what information would be lost? That is your alt text. Use `alt=""` for purely decorative images.
|
|
238
122
|
|
|
239
123
|
### Icon Buttons
|
|
240
|
-
|
|
241
|
-
Every icon-only button needs an `aria-label`.
|
|
242
|
-
|
|
243
|
-
```html
|
|
244
|
-
<!-- BAD -->
|
|
245
|
-
<button><TrashIcon /></button>
|
|
246
|
-
|
|
247
|
-
<!-- GOOD -->
|
|
248
|
-
<button aria-label="Delete message"><TrashIcon /></button>
|
|
249
|
-
|
|
250
|
-
<!-- With tooltip for sighted users too -->
|
|
251
|
-
<button aria-label="Delete message" title="Delete message">
|
|
252
|
-
<TrashIcon />
|
|
253
|
-
</button>
|
|
254
|
-
```
|
|
124
|
+
Every icon-only button needs `aria-label`. Pair with `title` for sighted users.
|
|
255
125
|
|
|
256
126
|
### Form Labels
|
|
257
|
-
|
|
258
|
-
Every input has a visible `<label>`. Placeholder text is not a label.
|
|
259
|
-
|
|
260
|
-
```html
|
|
261
|
-
<!-- BAD -->
|
|
262
|
-
<input placeholder="Enter your email" />
|
|
263
|
-
|
|
264
|
-
<!-- GOOD -->
|
|
265
|
-
<label for="email">Email address</label>
|
|
266
|
-
<input id="email" placeholder="name@example.com" />
|
|
267
|
-
```
|
|
127
|
+
Every input has a visible `<label>`. Placeholder text is not a label. Use both.
|
|
268
128
|
|
|
269
129
|
---
|
|
270
130
|
|
|
271
131
|
## 6. Translation Planning
|
|
272
132
|
|
|
273
|
-
English is compact. Other languages expand. Design with this in mind.
|
|
274
|
-
|
|
275
133
|
### Expansion Percentages
|
|
276
134
|
|
|
277
135
|
| Language | Expansion | 10-char English becomes |
|
|
@@ -279,235 +137,87 @@ English is compact. Other languages expand. Design with this in mind.
|
|
|
279
137
|
| German | +30% | ~13 characters |
|
|
280
138
|
| French | +20% | ~12 characters |
|
|
281
139
|
| Finnish | +30-40% | ~13-14 characters |
|
|
282
|
-
| Italian | +15% | ~11-12 characters |
|
|
283
140
|
| Spanish | +15-20% | ~12 characters |
|
|
284
|
-
| Portuguese | +20-25% | ~12-13 characters |
|
|
285
141
|
| Chinese | -30% | ~7 characters |
|
|
286
|
-
| Japanese | -20-30% | ~7-8 characters |
|
|
287
|
-
| Korean | -10-20% | ~8-9 characters |
|
|
288
142
|
| Arabic | +25% (RTL) | ~12-13 characters |
|
|
289
143
|
|
|
290
144
|
### Design Rules
|
|
291
|
-
|
|
292
|
-
-
|
|
293
|
-
-
|
|
294
|
-
-
|
|
295
|
-
-
|
|
296
|
-
- Strings: Never concatenate strings. Use full-sentence templates with placeholders: `"Showing {count} of {total} results"` not `"Showing " + count + " of " + total + " results"`.
|
|
297
|
-
- Pluralization: Use ICU MessageFormat or equivalent. Never assume `count === 1` is the only singular rule (Arabic has 6 plural forms).
|
|
145
|
+
- Buttons: allow at least 30% extra width, never fixed-width for text
|
|
146
|
+
- Use pseudolocalization to test
|
|
147
|
+
- Truncate with `...` + `title` attribute for full text
|
|
148
|
+
- Never concatenate strings; use full-sentence templates with placeholders
|
|
149
|
+
- Use ICU MessageFormat for pluralization (Arabic has 6 plural forms)
|
|
298
150
|
|
|
299
151
|
---
|
|
300
152
|
|
|
301
153
|
## 7. Terminology Consistency
|
|
302
154
|
|
|
303
|
-
Pick one term. Use it everywhere.
|
|
155
|
+
Pick one term. Use it everywhere.
|
|
304
156
|
|
|
305
157
|
| Use This | Not This |
|
|
306
158
|
|----------|----------|
|
|
307
|
-
| Delete | Remove, Trash, Erase
|
|
159
|
+
| Delete | Remove, Trash, Erase |
|
|
308
160
|
| Settings | Preferences, Options, Configuration |
|
|
309
|
-
| Sign in | Log in, Login
|
|
310
|
-
| Sign out | Log out, Logout
|
|
311
|
-
| Sign up | Register, Create account
|
|
312
|
-
| Search | Find, Look up
|
|
313
|
-
| Edit | Modify, Change, Update
|
|
314
|
-
| Save | Apply
|
|
315
|
-
| Profile | Account
|
|
316
|
-
| Workspace | Organization, Team
|
|
161
|
+
| Sign in | Log in, Login |
|
|
162
|
+
| Sign out | Log out, Logout |
|
|
163
|
+
| Sign up | Register, Create account |
|
|
164
|
+
| Search | Find, Look up |
|
|
165
|
+
| Edit | Modify, Change, Update |
|
|
166
|
+
| Save | Apply |
|
|
167
|
+
| Profile | Account |
|
|
168
|
+
| Workspace | Organization, Team |
|
|
317
169
|
| Member | User (in team context) |
|
|
318
|
-
| Notification | Alert (reserve
|
|
319
|
-
|
|
320
|
-
### Enforcement
|
|
170
|
+
| Notification | Alert (reserve for system-level) |
|
|
321
171
|
|
|
322
|
-
|
|
323
|
-
- When a new term is introduced, add it to the glossary before shipping.
|
|
324
|
-
- Search the entire codebase when renaming. Partial renames are worse than inconsistency.
|
|
172
|
+
Create a glossary. Lint against it. Search entire codebase when renaming.
|
|
325
173
|
|
|
326
174
|
---
|
|
327
175
|
|
|
328
176
|
## 8. Loading State Copy
|
|
329
177
|
|
|
330
|
-
Never show "Loading..." for more than 2 seconds without context.
|
|
331
|
-
|
|
332
178
|
### Progressive Messages
|
|
179
|
+
- **0-2s**: Spinner only (no text)
|
|
180
|
+
- **2-5s**: "Loading your dashboard..."
|
|
181
|
+
- **5-15s**: "Crunching the numbers. This usually takes a few seconds."
|
|
182
|
+
- **15s+**: "Still working on it. Large datasets take a bit longer."
|
|
183
|
+
- **30s+**: "This is taking longer than usual. You can wait or [try again]."
|
|
333
184
|
|
|
334
|
-
|
|
335
|
-
// Immediate (0-2s)
|
|
336
|
-
[spinner]
|
|
337
|
-
|
|
338
|
-
// Short wait (2-5s)
|
|
339
|
-
Loading your dashboard...
|
|
340
|
-
|
|
341
|
-
// Medium wait (5-15s)
|
|
342
|
-
Crunching the numbers. This usually takes a few seconds.
|
|
343
|
-
|
|
344
|
-
// Long wait (15s+)
|
|
345
|
-
Still working on it. Large datasets take a bit longer.
|
|
346
|
-
|
|
347
|
-
// Very long (30s+)
|
|
348
|
-
This is taking longer than usual. You can wait or [try again].
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
### Skeleton Screens Over Spinners
|
|
352
|
-
|
|
353
|
-
Use skeleton screens (gray placeholder shapes) for known layouts. Use spinners only for unknown or variable layouts.
|
|
354
|
-
|
|
355
|
-
```
|
|
356
|
-
// Known layout: use skeleton
|
|
357
|
-
[====== skeleton heading ======]
|
|
358
|
-
[== skeleton line 1 ===========]
|
|
359
|
-
[== skeleton line 2 =======]
|
|
360
|
-
[== skeleton line 3 ==============]
|
|
361
|
-
|
|
362
|
-
// Unknown layout: use spinner with context
|
|
363
|
-
[spinner] Searching 12,000 records...
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
### Progress Indicators
|
|
367
|
-
|
|
368
|
-
For operations with known progress, show a percentage or step count.
|
|
369
|
-
|
|
370
|
-
```
|
|
371
|
-
Uploading 3 of 7 files (42%)
|
|
372
|
-
[=========> ]
|
|
373
|
-
|
|
374
|
-
Importing contacts... Step 2 of 4: Validating email addresses
|
|
375
|
-
```
|
|
185
|
+
Use skeleton screens for known layouts, spinners for unknown/variable layouts. For operations with known progress, show percentage or step count.
|
|
376
186
|
|
|
377
187
|
---
|
|
378
188
|
|
|
379
189
|
## 9. Confirmation Dialogs
|
|
380
190
|
|
|
381
191
|
### Structure
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
Body: Consequences in plain language. Irreversibility if applicable.
|
|
386
|
-
Actions: [Safe option] [Destructive option]
|
|
387
|
-
```
|
|
388
|
-
|
|
389
|
-
### Non-Destructive Confirmation
|
|
390
|
-
|
|
391
|
-
```
|
|
392
|
-
Title: Publish this article?
|
|
393
|
-
Body: It will be visible to everyone in your workspace immediately.
|
|
394
|
-
Actions: [Go back] [Publish article]
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
### Destructive Confirmation
|
|
398
|
-
|
|
399
|
-
```
|
|
400
|
-
Title: Delete "Q4 Report" and 3 attachments?
|
|
401
|
-
Body: This will permanently delete the document and its attachments.
|
|
402
|
-
This cannot be undone.
|
|
403
|
-
Actions: [Keep document] [Delete document and attachments]
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
### High-Stakes Destructive (Type-to-Confirm)
|
|
407
|
-
|
|
408
|
-
```
|
|
409
|
-
Title: Delete workspace "Acme Corp"?
|
|
410
|
-
Body: This will permanently delete the workspace, all 47 projects,
|
|
411
|
-
and all member data. This cannot be undone.
|
|
412
|
-
|
|
413
|
-
Type "Acme Corp" to confirm:
|
|
414
|
-
[ ]
|
|
415
|
-
|
|
416
|
-
Actions: [Cancel] [Delete workspace] (disabled until typed)
|
|
417
|
-
```
|
|
192
|
+
- **Title**: State what will happen (verb + object)
|
|
193
|
+
- **Body**: Consequences in plain language. Irreversibility if applicable.
|
|
194
|
+
- **Actions**: [Safe option] [Destructive option]
|
|
418
195
|
|
|
419
196
|
### Rules
|
|
420
|
-
|
|
421
|
-
-
|
|
422
|
-
-
|
|
423
|
-
-
|
|
424
|
-
-
|
|
425
|
-
-
|
|
197
|
+
- Safe action is visually prominent (filled, primary color)
|
|
198
|
+
- Destructive action is secondary (outlined, red)
|
|
199
|
+
- Never pre-select the destructive option
|
|
200
|
+
- Focus lands on the safe action by default
|
|
201
|
+
- Escape key triggers the safe action
|
|
202
|
+
- For high-stakes destructive actions, require type-to-confirm
|
|
426
203
|
|
|
427
204
|
---
|
|
428
205
|
|
|
429
206
|
## 10. Microcopy
|
|
430
207
|
|
|
431
208
|
### Placeholder vs Label
|
|
432
|
-
|
|
433
|
-
Placeholders vanish on input. Labels stay visible. Use both.
|
|
434
|
-
|
|
435
|
-
```html
|
|
436
|
-
<!-- BAD: placeholder as only label -->
|
|
437
|
-
<input placeholder="Email" />
|
|
438
|
-
|
|
439
|
-
<!-- GOOD: visible label + helpful placeholder -->
|
|
440
|
-
<label for="email">Email address</label>
|
|
441
|
-
<input id="email" placeholder="name@example.com" />
|
|
442
|
-
```
|
|
209
|
+
Placeholders vanish on input. Labels stay visible. Use both: visible `<label>` + helpful placeholder example.
|
|
443
210
|
|
|
444
211
|
### Helper Text
|
|
445
|
-
|
|
446
|
-
Place below the input. Use for format hints, constraints, or context.
|
|
447
|
-
|
|
448
|
-
```
|
|
449
|
-
Password
|
|
450
|
-
[ ]
|
|
451
|
-
Must be at least 8 characters with one number and one symbol.
|
|
452
|
-
|
|
453
|
-
Phone number
|
|
454
|
-
[ ]
|
|
455
|
-
We'll only use this for two-factor authentication.
|
|
456
|
-
```
|
|
212
|
+
Place below input. Format hints, constraints, or context: "Must be at least 8 characters with one number and one symbol."
|
|
457
213
|
|
|
458
214
|
### Success Messages with Next Steps
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
```
|
|
463
|
-
// BAD
|
|
464
|
-
Success!
|
|
465
|
-
|
|
466
|
-
// GOOD
|
|
467
|
-
Account created. Check your email for a verification link.
|
|
468
|
-
|
|
469
|
-
// BAD
|
|
470
|
-
Payment received.
|
|
471
|
-
|
|
472
|
-
// GOOD
|
|
473
|
-
Payment received. Your order #4821 will ship within 2 business days.
|
|
474
|
-
You'll get a tracking email when it does. [View order details]
|
|
475
|
-
|
|
476
|
-
// BAD
|
|
477
|
-
File uploaded.
|
|
478
|
-
|
|
479
|
-
// GOOD
|
|
480
|
-
"Q4-Report.pdf" uploaded. [Share with team] [Upload another]
|
|
481
|
-
```
|
|
215
|
+
Never dead-end after success. Always tell what comes next:
|
|
216
|
+
- "Account created. Check your email for a verification link."
|
|
217
|
+
- "Payment received. Your order #4821 will ship within 2 business days. [View order details]"
|
|
482
218
|
|
|
483
219
|
### Character Counts
|
|
484
|
-
|
|
485
|
-
Show remaining characters, not total limit, and only when the user is close to the limit.
|
|
486
|
-
|
|
487
|
-
```
|
|
488
|
-
// Show nothing until 80% of limit reached
|
|
489
|
-
// At 80%+:
|
|
490
|
-
23 characters remaining
|
|
491
|
-
|
|
492
|
-
// At limit:
|
|
493
|
-
0 characters remaining (input blocked or visual warning)
|
|
494
|
-
|
|
495
|
-
// Over limit (if allowed):
|
|
496
|
-
12 characters over limit (red, with explanation of what happens)
|
|
497
|
-
```
|
|
220
|
+
Show remaining characters (not total limit), and only when 80%+ of limit reached.
|
|
498
221
|
|
|
499
222
|
### Toggle Labels
|
|
500
|
-
|
|
501
|
-
Label the current state, not the action. Or label both sides.
|
|
502
|
-
|
|
503
|
-
```
|
|
504
|
-
// BAD (ambiguous: is it on or will clicking turn it on?)
|
|
505
|
-
[toggle] Notifications
|
|
506
|
-
|
|
507
|
-
// GOOD: label both states
|
|
508
|
-
Notifications: Off [toggle] On
|
|
509
|
-
|
|
510
|
-
// GOOD: describe what toggle does
|
|
511
|
-
[toggle] Receive email notifications
|
|
512
|
-
Currently: Off
|
|
513
|
-
```
|
|
223
|
+
Label the current state, not the action. Or label both sides: `Notifications: Off [toggle] On`.
|
|
@@ -10,19 +10,28 @@ Every time Picasso presents 2+ aesthetic options for the user to choose from, ge
|
|
|
10
10
|
|
|
11
11
|
### Standard Flow
|
|
12
12
|
|
|
13
|
-
1. **Generate** a self-contained HTML file with inline styles
|
|
13
|
+
1. **Generate** a self-contained HTML file with inline styles (NO external font imports -- use `system-ui` with font name labels)
|
|
14
14
|
2. **Write** to `/tmp/picasso-preview-{name}.html`
|
|
15
|
-
3. **
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
3. **Screenshot** via Bash: `npx playwright screenshot /tmp/picasso-preview-{name}.html /tmp/picasso-preview-{name}.png --viewport-size=1200,800`
|
|
16
|
+
- `npx playwright screenshot` accepts file paths directly (no `file://` prefix needed)
|
|
17
|
+
- Do NOT use `mcp__playwright__browser_navigate` + `mcp__playwright__browser_take_screenshot` -- these timeout on external font loading and block `file://` protocol
|
|
18
|
+
4. **View** the screenshot with `Read /tmp/picasso-preview-{name}.png` (mandatory -- never skip this)
|
|
19
|
+
5. **Present** to the user with both paths (HTML for full-res browser viewing, PNG for quick preview)
|
|
19
20
|
|
|
20
|
-
### If
|
|
21
|
+
### If npx playwright Is Unavailable
|
|
21
22
|
|
|
22
23
|
1. Write the HTML file to `/tmp/`
|
|
23
24
|
2. Tell the user: "I've generated a visual preview at `/tmp/picasso-preview-{name}.html` -- open it in your browser to see the options."
|
|
24
25
|
3. Do NOT make visual claims about what the preview looks like without viewing it
|
|
25
26
|
|
|
27
|
+
### Font Rule for Previews
|
|
28
|
+
|
|
29
|
+
Do NOT import Google Fonts or Fontshare fonts via `<link>` or `@import` in preview HTML. External font loading causes screenshot timeouts. Instead:
|
|
30
|
+
- Use `system-ui, -apple-system, sans-serif` for body text
|
|
31
|
+
- Use `Georgia, serif` for serif directions
|
|
32
|
+
- Use `ui-monospace, monospace` for mono directions
|
|
33
|
+
- **Label the intended font** in each preview card: "Font: Satoshi + DM Sans" so the user knows what will be used in the real implementation
|
|
34
|
+
|
|
26
35
|
### File Naming
|
|
27
36
|
|
|
28
37
|
- Interview aesthetics: `/tmp/picasso-interview-vibes.html`
|
|
@@ -48,9 +57,8 @@ Generate the full HTML dynamically. For each direction, substitute the actual fo
|
|
|
48
57
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
49
58
|
<title>Picasso: Choose a Direction</title>
|
|
50
59
|
<!-- Import fonts for all directions shown -->
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
<link href="https://fonts.googleapis.com/css2?family={FONT_1}&family={FONT_2}&family={FONT_3}&display=swap" rel="stylesheet">
|
|
60
|
+
<!-- No external font imports -- use system fonts to avoid screenshot timeouts -->
|
|
61
|
+
<!-- Label intended fonts in the .font-info footer of each card -->
|
|
54
62
|
<style>
|
|
55
63
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
56
64
|
body {
|