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 CHANGED
@@ -83,7 +83,7 @@ This is what makes Picasso different from every other design tool. Generate a ga
83
83
 
84
84
  5. Also generate a single `/tmp/picasso-gallery/index.html` that shows a thumbnail grid of all samples -- each as a small card (200px wide) with the sample number and the key differentiator (font name + primary color + one-word mood).
85
85
 
86
- 6. Open the index page with Playwright MCP, screenshot at 1440x900, view with Read.
86
+ 6. Screenshot via Bash: `npx playwright screenshot /tmp/picasso-gallery/index.html /tmp/picasso-gallery.png --viewport-size=1200,800`. View: `Read /tmp/picasso-gallery.png`.
87
87
 
88
88
  7. Present: "Here are {N} directions for your app. React to what you see -- which ones do you like? Which do you hate? Anything close but needs tweaking? You can also open `/tmp/picasso-gallery/index.html` in your browser to browse them all."
89
89
 
@@ -158,7 +158,7 @@ Do NOT jump to code. Present a **Design Brief** -- a short, opinionated creative
158
158
  - Generate a self-contained HTML page showing a representative layout in the committed design tokens (nav + hero + card + buttons + input)
159
159
  - Use the Full Page Mood Preview structure from `references/visual-preview.md`
160
160
  - Write to `/tmp/picasso-brief-preview.html`
161
- - Open with Playwright MCP, screenshot, view with Read
161
+ - Screenshot via Bash: `npx playwright screenshot /tmp/picasso-brief-preview.html /tmp/picasso-brief-preview.png --viewport-size=1200,800`. View with `Read`.
162
162
  - Present alongside the text brief: "Here's what I'm proposing -- the reasoning and a visual preview."
163
163
 
164
164
  4. **Generate `.picasso.md`** from the answers and save to project root.
@@ -169,7 +169,7 @@ Do NOT jump to code. Present a **Design Brief** -- a short, opinionated creative
169
169
 
170
170
  After the user confirms the brief, load the SPECIFIC reference files for what they selected. Do not load all 30+ references. Load only what's relevant:
171
171
 
172
- - Selected motion Tier 2+? Load `motion-and-animation.md` + `micro-interactions.md` + `animation-performance.md`
172
+ - Selected motion Tier 2+? Load `motion-and-animation.md` + `micro-interactions.md`
173
173
  - Selected sounds? Load `sensory-design.md` (Section 1: UI Sound Design)
174
174
  - Selected haptics? Load `sensory-design.md` (Section 2: Haptic Feedback)
175
175
  - Selected animated icons? Load `micro-interactions.md` (Section 5: Toggle and Switch Animations)
@@ -288,10 +288,8 @@ skills/picasso/references/typography.md # Fonts, scales, pairing
288
288
  skills/picasso/references/color-and-contrast.md # OKLCH, tinted neutrals
289
289
  skills/picasso/references/spatial-design.md # Spacing, grids, hierarchy
290
290
  skills/picasso/references/depth-and-elevation.md # Shadows, z-index, layering
291
- skills/picasso/references/motion-and-animation.md # Easing, staggering, duration
291
+ skills/picasso/references/motion-and-animation.md # Easing, staggering, duration, performance (compositor props, will-change, contain)
292
292
  skills/picasso/references/micro-interactions.md # Scroll animations, gestures, View Transitions
293
- skills/picasso/references/animation-performance.md # Compositor props, will-change, contain
294
- skills/picasso/references/interaction-design.md # Forms, focus, states, Popover API
295
293
  skills/picasso/references/navigation-patterns.md # Breadcrumbs, sidebar, tabs, bottom bar
296
294
  skills/picasso/references/tables-and-forms.md # Sortable tables, validation, multi-step
297
295
  skills/picasso/references/loading-and-states.md # Skeletons, empty states, error boundaries
package/commands/mood.md CHANGED
@@ -35,7 +35,8 @@ If no mood word is provided, ask the user for one.
35
35
  - Footer with muted text
36
36
  - Load fonts using the Font Mapping table from `references/visual-preview.md`
37
37
  - Write to `/tmp/picasso-mood-{word}.html`
38
- - Open via Playwright MCP, screenshot at 1440x900, view with Read tool
38
+ - Screenshot via Bash: `npx playwright screenshot /tmp/picasso-mood-{word}.html /tmp/picasso-mood-{word}.png --viewport-size=1200,800`
39
+ - View: `Read /tmp/picasso-mood-{word}.png`
39
40
  - Present to user: "This is what '{word}' looks like as a design system. Does this feel right, or should I adjust?"
40
41
 
41
42
  3. **Wait for confirmation.** Do not write `.picasso.md` or `DESIGN.md` until the user approves the visual direction.
@@ -48,4 +49,4 @@ If no mood word is provided, ask the user for one.
48
49
 
49
50
  - Never write config files before showing the visual preview
50
51
  - If the user says "adjust" or "not quite", iterate on the tokens and regenerate the preview
51
- - If Playwright MCP is unavailable, write the HTML and tell user the path to open manually
52
+ - If npx playwright is unavailable, write the HTML and tell user the path to open manually
@@ -21,7 +21,7 @@ The preset name: `$ARGUMENTS`
21
21
  - Each card: preset name (in its heading font), 5-swatch color palette strip, one-line mood description, a sample button in the preset's primary color and radius
22
22
  - Card backgrounds use the preset's surface color, text uses its text color
23
23
  3. Write to `/tmp/picasso-preset-browser.html`
24
- 4. Open with Playwright MCP, screenshot at 1440x900, view with Read
24
+ 4. Screenshot via Bash: `npx playwright screenshot /tmp/picasso-preset-browser.html /tmp/picasso-preset-browser.png --viewport-size=1200,800`, then view with `Read`
25
25
  5. Present: "Here are all 22 presets. Which one catches your eye?"
26
26
  6. Wait for the user to pick
27
27
 
@@ -41,4 +41,4 @@ The preset name: `$ARGUMENTS`
41
41
  ## Rules
42
42
 
43
43
  - Never apply a preset without showing a visual preview first
44
- - If Playwright MCP is unavailable, write the HTML and give the user the file path
44
+ - If npx playwright is unavailable, write the HTML and give the user the file path
@@ -24,8 +24,8 @@ Generate and display visual previews of design options.
24
24
  - Nav bar, hero section, card grid, form, footer
25
25
  - All styled with the project's committed tokens
26
26
  5. Write to `/tmp/picasso-preview.html`
27
- 6. Open via Playwright MCP (`mcp__playwright__browser_navigate` to `file:///tmp/picasso-preview.html`)
28
- 7. Screenshot at 1440x900, view with Read tool
27
+ 6. Screenshot via Bash: `npx playwright screenshot /tmp/picasso-preview.html /tmp/picasso-preview.png --viewport-size=1200,800`
28
+ 7. View: `Read /tmp/picasso-preview.png`
29
29
  8. Present to user: "Here's what your current design tokens look like rendered. Open `/tmp/picasso-preview.html` in your browser for full resolution."
30
30
 
31
31
  ### `/preview <preset-name>`
@@ -47,6 +47,6 @@ Generate and display visual previews of design options.
47
47
  ## Rules
48
48
 
49
49
  - Always load font URLs from the Font Mapping table in `references/visual-preview.md`
50
- - If Playwright MCP is unavailable, write the file and tell the user the path to open manually
50
+ - If npx playwright is unavailable, write the file and tell the user the path to open manually
51
51
  - Never describe what the preview looks like without viewing the screenshot first
52
52
  - The HTML must be fully self-contained (inline styles, external font imports only)
@@ -21,9 +21,8 @@ Generate 2-3 genuinely different aesthetic directions and show them as a side-by
21
21
  - For each direction, render a preview card showing: color palette strip, nav bar, heading, body text, sample card, primary/secondary buttons, input field -- all in that direction's tokens
22
22
  - Load fonts using the Font Mapping table from `references/visual-preview.md`
23
23
  - Write the comparison HTML to `/tmp/picasso-variants.html`
24
- - Open via Playwright MCP: `mcp__playwright__browser_navigate` to `file:///tmp/picasso-variants.html`
25
- - Screenshot at 1440x900 viewport
26
- - View the screenshot with the Read tool
24
+ - Screenshot via Bash: `npx playwright screenshot /tmp/picasso-variants.html /tmp/picasso-variants.png --viewport-size=1200,800`
25
+ - View the screenshot: `Read /tmp/picasso-variants.png`
27
26
  6. Present the visual comparison to the user: "Here are the directions. Which speaks to you? Pick one, combine elements, or reject all."
28
27
  7. Also tell the user: "Open `/tmp/picasso-variants.html` in your browser for full resolution."
29
28
 
@@ -33,5 +32,5 @@ Generate 2-3 genuinely different aesthetic directions and show them as a side-by
33
32
  - No two directions can share the same heading font
34
33
  - At least one direction must be surprising or unconventional
35
34
  - Always include one "safe" option and one "bold" option
36
- - Visual preview is MANDATORY, not optional. If Playwright MCP is unavailable, write the HTML file and tell the user the path to open manually.
35
+ - Visual preview is MANDATORY, not optional. If npx playwright is unavailable, write the HTML file and tell the user the path to open manually.
37
36
  - Never describe what the directions look like without viewing the screenshot first
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "picasso-skill",
3
- "version": "2.5.0",
3
+ "version": "2.6.1",
4
4
  "description": "The ultimate AI design skill for producing distinctive, production-grade frontend interfaces",
5
5
  "bin": {
6
6
  "picasso-skill": "./bin/install.mjs"
@@ -86,6 +86,9 @@ Move focus to `<h1>` of new view (add `tabindex="-1"`) or main content landmark.
86
86
  <main id="main" tabindex="-1">...</main>
87
87
  ```
88
88
 
89
+ ### Focus Indicator Rule
90
+ Never remove focus outlines without replacement. Use `:focus-visible` (not `:focus`) to show focus rings only for keyboard navigation, not mouse clicks.
91
+
89
92
  ### Focus Trapping
90
93
  Contain Tab/Shift+Tab within overlays. Use `inert` attribute on background content (modern browsers) or manage via JS. On last focusable element, Tab wraps to first.
91
94
 
@@ -1,16 +1,5 @@
1
1
  # Code Typography Reference
2
2
 
3
- ## Table of Contents
4
- 1. Monospace Font Selection
5
- 2. Code Block Design
6
- 3. Syntax Highlighting Accessibility
7
- 4. Copy-to-Clipboard
8
- 5. Responsive Code Blocks
9
- 6. Inline Code Styling
10
- 7. Diff Views
11
- 8. Terminal Output
12
- 9. Common Mistakes
13
-
14
3
  ---
15
4
 
16
5
  ## 1. Monospace Font Selection
@@ -19,204 +8,85 @@
19
8
  |---|---|---|---|
20
9
  | JetBrains Mono | Yes | Clean, geometric | General purpose, IDEs |
21
10
  | Fira Code | Yes | Slightly rounded | Tutorials, docs |
22
- | Source Code Pro | No | Adobe, professional | Enterprise, clean look |
11
+ | Source Code Pro | No | Adobe, professional | Enterprise |
23
12
  | IBM Plex Mono | No | Corporate, legible | Documentation |
24
13
  | Geist Mono | No | Vercel, modern | Next.js projects |
25
14
  | Cascadia Code | Yes | Microsoft, playful | Terminals |
26
15
 
27
- ```css
28
- code, pre, .mono {
29
- font-family: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace;
30
- font-feature-settings: 'liga' 1, 'calt' 1; /* enable ligatures */
31
- font-variant-ligatures: common-ligatures;
32
- }
33
- ```
34
-
35
- Ligatures: `=>` becomes ⇒, `!==` becomes ≢, `>=` becomes ≥. Enable for display, disable for editing if users copy code.
16
+ Always specify a modern monospace font first, then fallback to `monospace`. Enable ligatures with `font-feature-settings: 'liga' 1, 'calt' 1` for display; disable for editing if users copy code.
36
17
 
37
18
  ---
38
19
 
39
20
  ## 2. Code Block Design
40
21
 
41
- ```css
42
- pre {
43
- background: var(--surface-1);
44
- border: 1px solid var(--border);
45
- border-radius: 8px;
46
- padding: 1rem 1.25rem;
47
- font-size: 0.875rem; /* 14px — slightly smaller than body */
48
- line-height: 1.65; /* Looser than body text for readability */
49
- overflow-x: auto;
50
- tab-size: 2;
51
- -moz-tab-size: 2;
52
- }
53
-
54
- /* Dark mode code blocks on light sites */
55
- [data-theme="light"] pre {
56
- background: oklch(0.14 0.02 230);
57
- color: oklch(0.90 0.01 230);
58
- }
59
- ```
60
-
61
- Line numbers (optional):
62
- ```css
63
- pre.line-numbers {
64
- counter-reset: line;
65
- padding-left: 3.5rem;
66
- position: relative;
67
- }
68
- pre.line-numbers .line::before {
69
- counter-increment: line;
70
- content: counter(line);
71
- position: absolute;
72
- left: 1rem;
73
- color: var(--text-muted);
74
- font-size: 0.75rem;
75
- user-select: none; /* don't copy line numbers */
76
- }
77
- ```
22
+ - Background: `var(--surface-1)` with 1px border, 8px radius
23
+ - Font size: 0.875rem (14px), line-height: 1.65 (looser than body for readability)
24
+ - `overflow-x: auto; tab-size: 2`
25
+ - Dark code blocks on light sites: `oklch(0.14 0.02 230)` background
26
+ - Line numbers: use CSS counters with `user-select: none` so they don't get copied
78
27
 
79
28
  ---
80
29
 
81
30
  ## 3. Syntax Highlighting Accessibility
82
31
 
83
- Every token color must have **minimum 3:1 contrast** against the code block background. Don't rely on color alone use font-weight or font-style for emphasis.
32
+ Every token color must have **minimum 3:1 contrast** against the code block background. Don't rely on color alone; use font-weight or font-style for emphasis.
84
33
 
85
- | Token Type | Suggested OKLCH (dark bg) | Purpose |
34
+ | Token Type | Suggested OKLCH (dark bg) | Style |
86
35
  |---|---|---|
87
- | Keywords | `oklch(0.75 0.15 300)` | purple-ish, bold |
88
- | Strings | `oklch(0.72 0.14 150)` | green |
89
- | Numbers | `oklch(0.75 0.12 60)` | amber |
90
- | Comments | `oklch(0.50 0.01 230)` | muted, italic |
91
- | Functions | `oklch(0.78 0.10 230)` | blue |
92
- | Variables | `oklch(0.85 0.01 230)` | near-white |
93
-
94
- ```css
95
- .token-keyword { color: oklch(0.75 0.15 300); font-weight: 600; }
96
- .token-string { color: oklch(0.72 0.14 150); }
97
- .token-comment { color: oklch(0.50 0.01 230); font-style: italic; }
98
- ```
36
+ | Keywords | `oklch(0.75 0.15 300)` | bold |
37
+ | Strings | `oklch(0.72 0.14 150)` | normal |
38
+ | Numbers | `oklch(0.75 0.12 60)` | normal |
39
+ | Comments | `oklch(0.50 0.01 230)` | italic |
40
+ | Functions | `oklch(0.78 0.10 230)` | normal |
41
+ | Variables | `oklch(0.85 0.01 230)` | normal |
99
42
 
100
43
  ---
101
44
 
102
45
  ## 4. Copy-to-Clipboard
103
46
 
104
- Position: top-right corner of the code block. Show on hover. Provide visual feedback.
105
-
106
- ```jsx
107
- function CopyButton({ code }) {
108
- const [copied, setCopied] = useState(false);
109
-
110
- return (
111
- <button
112
- onClick={() => {
113
- navigator.clipboard.writeText(code);
114
- setCopied(true);
115
- setTimeout(() => setCopied(false), 2000);
116
- }}
117
- className="absolute top-2 right-2 p-1.5 rounded-md bg-white/5 hover:bg-white/10 text-xs text-muted"
118
- aria-label="Copy code"
119
- >
120
- {copied ? 'Copied' : 'Copy'}
121
- </button>
122
- );
123
- }
124
- ```
47
+ Position top-right, show on hover, visual feedback ("Copied" for 2s). Use `navigator.clipboard.writeText()`. Add `aria-label="Copy code"`.
125
48
 
126
49
  ---
127
50
 
128
51
  ## 5. Responsive Code Blocks
129
52
 
130
- Code blocks should **scroll horizontally** on mobile, never wrap. Terminal output CAN wrap.
131
-
132
- ```css
133
- pre {
134
- overflow-x: auto;
135
- white-space: pre; /* code: no wrap */
136
- -webkit-overflow-scrolling: touch; /* smooth scroll on iOS */
137
- }
138
-
139
- pre.terminal {
140
- white-space: pre-wrap; /* terminal: wrap is OK */
141
- word-break: break-all;
142
- }
143
-
144
- /* Hide scrollbar but keep functionality */
145
- pre::-webkit-scrollbar { height: 4px; }
146
- pre::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
147
- ```
148
-
149
- On very small screens (< 375px), consider reducing code font-size to 12px.
53
+ - Code: `white-space: pre; overflow-x: auto` (never wrap)
54
+ - Terminal output: `white-space: pre-wrap` (wrapping OK)
55
+ - Thin scrollbar: 4px height, subtle thumb color
56
+ - Below 375px, consider reducing to 12px font size
150
57
 
151
58
  ---
152
59
 
153
60
  ## 6. Inline Code Styling
154
61
 
155
- Inline code needs subtle visual distinction from body text:
156
-
157
- ```css
158
- code:not(pre code) {
159
- background: var(--surface-2);
160
- padding: 0.15em 0.4em;
161
- border-radius: 4px;
162
- font-size: 0.9em; /* slightly smaller than surrounding text */
163
- font-weight: 500;
164
- border: 1px solid var(--border);
165
- }
166
- ```
167
-
168
- Never use inline code for emphasis. It's for code references (`useState`, `border-radius`, `GET /api/users`), not for highlighting words.
62
+ Subtle distinction from body text: light background, 0.15em/0.4em padding, 4px radius, 0.9em font-size, 1px border. Never use inline code for emphasis; it's for code references (`useState`, `GET /api/users`).
169
63
 
170
64
  ---
171
65
 
172
66
  ## 7. Diff Views
173
67
 
174
- Use color + icon, not color alone (colorblind users):
175
-
176
- ```css
177
- .diff-add {
178
- background: oklch(0.62 0.19 150 / 0.1);
179
- border-left: 3px solid oklch(0.62 0.19 150);
180
- }
181
- .diff-add::before { content: '+'; color: oklch(0.62 0.19 150); }
182
-
183
- .diff-remove {
184
- background: oklch(0.55 0.22 25 / 0.1);
185
- border-left: 3px solid oklch(0.55 0.22 25);
186
- text-decoration: line-through;
187
- opacity: 0.7;
188
- }
189
- .diff-remove::before { content: '-'; color: oklch(0.55 0.22 25); }
190
- ```
68
+ Use color + icon (not color alone, for colorblind users):
69
+ - Added: green-tinted background + left border + `+` prefix
70
+ - Removed: red-tinted background + left border + `-` prefix + `line-through` + reduced opacity
191
71
 
192
72
  ---
193
73
 
194
74
  ## 8. Terminal Output
195
75
 
196
- Terminal/console styling should feel distinct from code:
197
-
198
- ```css
199
- .terminal {
200
- background: oklch(0.08 0.01 230);
201
- color: oklch(0.80 0.01 150); /* slight green tint for terminal feel */
202
- font-family: 'JetBrains Mono', monospace;
203
- padding: 1rem;
204
- border-radius: 8px;
205
- }
206
- .terminal .prompt { color: oklch(0.65 0.10 230); } /* blue prompt */
207
- .terminal .output { color: oklch(0.75 0.01 230); } /* neutral output */
208
- .terminal .error { color: oklch(0.65 0.22 25); } /* red errors */
209
- ```
76
+ Terminal styling should feel distinct from code blocks:
77
+ - Darker background: `oklch(0.08 0.01 230)`
78
+ - Slight green tint for text: `oklch(0.80 0.01 150)`
79
+ - Blue prompt, neutral output, red errors
210
80
 
211
81
  ---
212
82
 
213
83
  ## 9. Common Mistakes
214
84
 
215
- - **Code font too large.** 14px for blocks, 0.9em for inline. Larger fights with body text.
216
- - **No horizontal scroll on code blocks.** Wrapping code breaks readability. Always `overflow-x: auto`.
217
- - **Syntax colors with < 3:1 contrast.** Comments especially — they tend to be too faint.
218
- - **Color-only diff indication.** Always add + / - markers or icons alongside color.
219
- - **Copying includes line numbers.** Use `user-select: none` on line number elements.
220
- - **Same styling for code blocks and terminal.** They serve different purposes. Terminal gets darker bg, green tint.
221
- - **`font-family: monospace` without named fonts.** Browsers default to Courier New which looks dated. Always specify a modern monospace font first.
222
- - **No copy button.** Users shouldn't have to triple-click and drag to copy code.
85
+ - Code font too large (14px for blocks, 0.9em for inline)
86
+ - No horizontal scroll on code blocks
87
+ - Syntax colors with < 3:1 contrast (especially comments)
88
+ - Color-only diff indication (add +/- markers)
89
+ - Copying includes line numbers (use `user-select: none`)
90
+ - Same styling for code blocks and terminal (different purposes)
91
+ - `font-family: monospace` without named fonts (defaults to Courier New)
92
+ - No copy button