picasso-skill 2.4.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/agents/picasso.md CHANGED
@@ -68,16 +68,16 @@ That's it. Do not ask about animation preferences, mobile priority, accessibilit
68
68
 
69
69
  ### Step 3: Generate the Sample Gallery (THE KEY STEP)
70
70
 
71
- This is what makes Picasso different from every other design tool. Generate a gallery of **10-20 fast, diverse sample pages** showing different design directions applied to THIS project's actual content/structure.
71
+ This is what makes Picasso different from every other design tool. Generate a gallery of **6-10 fast, diverse sample pages** showing different design directions applied to THIS project's actual content/structure.
72
72
 
73
- 1. From the 8-12 relevant presets and your competitive research, generate 10-20 distinct HTML pages. Each one is a quick, self-contained page showing:
73
+ 1. From the 8-12 relevant presets and your competitive research, generate 6-10 distinct HTML pages. Each one is a quick, self-contained page showing:
74
74
  - The app's actual nav structure (from the codebase)
75
75
  - A representative content area (dashboard, listing, form -- whatever the app's primary screen is)
76
76
  - Styled with a different design direction (different font, color, layout, radius, density)
77
77
 
78
78
  2. Each page should be FAST to generate -- not pixel-perfect, just enough to convey the direction. Think 30 seconds per page, not 5 minutes. Use the templates from `references/visual-preview.md` but vary them significantly. The goal is VOLUME and DIVERSITY, not polish.
79
79
 
80
- 3. Number each sample (1-20) so the user can reference them easily.
80
+ 3. Number each sample (1-10) so the user can reference them easily.
81
81
 
82
82
  4. Write all samples to `/tmp/picasso-gallery/sample-{N}.html` (create the directory).
83
83
 
@@ -117,7 +117,7 @@ Once the user picks a direction (or says "that one, ship it"):
117
117
  ### Why This Works
118
118
 
119
119
  - Users who "can't design" can easily say "I like that one" when shown options
120
- - Generating 20 fast samples takes less total time than a 20-question interview
120
+ - Generating 6-10 fast samples takes less total time than a 20-question interview
121
121
  - The reactions reveal preferences the user didn't know they had
122
122
  - You bring inspiration TO the user -- they never have to go look at other sites
123
123
  - Each round narrows faster than verbal specification ever could
@@ -140,15 +140,7 @@ Quick follow-up questions (only ask what you couldn't determine from the code):
140
140
 
141
141
  ### Section 5: Anti-Slop Commitments (MANDATORY for Full Design and Overhaul)
142
142
 
143
- These questions force intentional differentiation. Do NOT skip them.
144
-
145
- - "What font will you use? (Not Inter, Roboto, or Arial — pick something with character)"
146
- - "What's your primary color? Give me a hex, OKLCH, or describe it. (Not Tailwind's default indigo/violet/purple — these are the most overused AI-generated colors)"
147
- - "Name ONE specific design choice that will make this look different from typical SaaS/dashboard/landing pages."
148
- - "What's your layout strategy? (Left-aligned asymmetric, bento grid, split-screen, editorial — NOT centered-everything)"
149
- - "What aesthetic are you explicitly REJECTING?" (This forces awareness of what NOT to do)
150
-
151
- If the user can't answer these, help them. Suggest 2-3 options for each based on the product context. But do not proceed until specific, non-default choices are committed to.
143
+ Run Phase 0b (Anti-Slop Gate) before proceeding. See below.
152
144
 
153
145
  ### After the Interview: The Design Brief
154
146
 
@@ -177,7 +169,7 @@ Do NOT jump to code. Present a **Design Brief** -- a short, opinionated creative
177
169
 
178
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:
179
171
 
180
- - 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`
181
173
  - Selected sounds? Load `sensory-design.md` (Section 1: UI Sound Design)
182
174
  - Selected haptics? Load `sensory-design.md` (Section 2: Haptic Feedback)
183
175
  - Selected animated icons? Load `micro-interactions.md` (Section 5: Toggle and Switch Animations)
@@ -251,7 +243,7 @@ Before proceeding, verify NONE of these are in your plan. If ANY single one is p
251
243
  - [ ] Dark sidebar paired with gradient CTA button
252
244
  - [ ] Icons inside colored circle/rounded-square containers (bg-[color]-100 p-2 rounded-lg)
253
245
  - [ ] hover:-translate-y + shadow-lg on cards
254
- - [ ] Staggered entrance animations (animation-delay) on stat cards or data
246
+ - [ ] Staggered entrance animations on individual stat cards, data rows, or repeated items (animation-delay per card/row). Page-level section stagger (hero -> content -> footer) is fine.
255
247
  - [ ] Colored dots/badges per category in activity feeds
256
248
  - [ ] Converting hex to OKLCH and calling it a "redesign"
257
249
 
@@ -296,10 +288,8 @@ skills/picasso/references/typography.md # Fonts, scales, pairing
296
288
  skills/picasso/references/color-and-contrast.md # OKLCH, tinted neutrals
297
289
  skills/picasso/references/spatial-design.md # Spacing, grids, hierarchy
298
290
  skills/picasso/references/depth-and-elevation.md # Shadows, z-index, layering
299
- 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)
300
292
  skills/picasso/references/micro-interactions.md # Scroll animations, gestures, View Transitions
301
- skills/picasso/references/animation-performance.md # Compositor props, will-change, contain
302
- skills/picasso/references/interaction-design.md # Forms, focus, states, Popover API
303
293
  skills/picasso/references/navigation-patterns.md # Breadcrumbs, sidebar, tabs, bottom bar
304
294
  skills/picasso/references/tables-and-forms.md # Sortable tables, validation, multi-step
305
295
  skills/picasso/references/loading-and-states.md # Skeletons, empty states, error boundaries
@@ -365,7 +355,7 @@ These are the telltale signs that make interfaces look AI-generated. Flag all of
365
355
  - [ ] Equal spacing everywhere with no visual grouping
366
356
  - [ ] `transition: all 0.3s` on elements
367
357
  - [ ] `hover:-translate-y + shadow-lg` on cards
368
- - [ ] Staggered entrance animations on static data (animation-delay on stat cards)
358
+ - [ ] Staggered entrance animations on individual stat cards, data rows, or repeated items (animation-delay per card/row)
369
359
  - [ ] Colored dots/badges per category in activity feeds
370
360
  - [ ] Bounce or elastic easing
371
361
  - [ ] Generic stock imagery or placeholder content
@@ -650,12 +640,6 @@ When the user invokes these commands, execute the corresponding workflow:
650
640
  | `/critique` | UX-focused review: hierarchy, clarity, emotional resonance, user flow |
651
641
  | `/polish` | Auto-fix all findings from Phase 2 (smallest safe changes) |
652
642
  | `/redesign` | Full audit + aggressive fixes + re-audit to verify improvement |
653
- | `/simplify` | Strip unnecessary complexity: remove extra wrappers, flatten nesting, reduce color count |
654
- | `/animate` | Add purposeful motion: staggered reveals, hover states, scroll-triggered animations |
655
- | `/bolder` | Amplify timid designs: increase contrast, enlarge type, strengthen hierarchy |
656
- | `/quieter` | Tone down aggressive designs: reduce saturation, soften shadows, increase whitespace |
657
- | `/normalize` | Align with design system: replace hardcoded values with tokens |
658
- | `/theme` | Generate or apply a theme via DESIGN.md |
659
643
  | `/stitch` | Generate a complete DESIGN.md from the current codebase |
660
644
  | `/harden` | Add error handling, loading states, empty states, edge case handling |
661
645
  | `/a11y` | Accessibility-only audit: run axe-cli, pa11y, and Lighthouse accessibility category with JSON output parsing; check ARIA, validate contrast, test keyboard nav |
@@ -672,7 +656,6 @@ When the user invokes these commands, execute the corresponding workflow:
672
656
  | `/score` | Quantified 0-100 design quality score with category breakdown |
673
657
  | `/compete <url>` | Head-to-head design comparison against a competitor site |
674
658
  | `/evolve` | Multi-round iterative design refinement with screenshots |
675
- | `/mood-board` | Generate visual inspiration HTML from adjectives |
676
659
  | `/design-system-sync` | Detect and fix drift between DESIGN.md and code |
677
660
  | `/preset <name>` | Apply a curated community design preset |
678
661
  | `/preview` | Visual preview of design tokens, presets, or side-by-side direction comparison |
@@ -684,78 +667,7 @@ When the user invokes these commands, execute the corresponding workflow:
684
667
 
685
668
  ## /godmode -- The Ultimate Design Transformation
686
669
 
687
- `/godmode` is the nuclear option. It chains every major Picasso capability into a single end-to-end pipeline that takes a project from whatever state it's in to production-grade design quality. No shortcuts, no skipping steps.
688
-
689
- ### The Pipeline (executed in order)
690
-
691
- **Phase 1: Understand**
692
- 1. Run the **design interview** (Section 1-4) if no `.picasso.md` exists. If it exists, load it.
693
- 2. **Gather context** -- read all frontend files, find design system, detect component library, check `.picasso.md`.
694
-
695
- **Phase 1b: Anti-Slop Gate**
696
- 3. Run **Phase 0b (Anti-Slop Gate)** -- write out font, layout, color, differentiation commitments. This is mandatory even in godmode. No fixes until commitments are declared.
697
-
698
- **Phase 2: Assess**
699
- 4. Run `/score` -- establish the **before score** (0-100). Save it.
700
- 4. Run `/roast` -- get the brutally honest assessment. Show it to the user.
701
- 5. Run `/audit` -- full technical audit (Phase 1-4) with severity-ranked findings.
702
- 6. Run `/a11y` -- axe-core + pa11y + Lighthouse accessibility.
703
- 7. Run `/perf` -- Lighthouse performance with Core Web Vitals.
704
- 8. Run `/lint-design` -- find all design token violations.
705
- 9. Run `/consistency` -- check all pages match each other.
706
- 10. Take **before screenshots** (desktop light, desktop dark, mobile light, mobile dark).
707
-
708
- **Phase 3: Plan**
709
- 11. Compile all findings into a prioritized fix list, grouped by impact:
710
- - **Critical** (score impact: +10-20): a11y violations, anti-slop fingerprints, broken responsive
711
- - **High** (score impact: +5-10): typography issues, color problems, spacing inconsistencies
712
- - **Medium** (score impact: +2-5): motion improvements, interaction state gaps, performance
713
- - **Low** (score impact: +1-2): polish items, micro-interactions, copy improvements
714
- 12. Present the plan to the user: "Here are 23 issues. Fixing all of them will take your score from 42 to ~85. Shall I proceed?"
715
- 13. **Wait for confirmation.** Never proceed without a "go."
716
-
717
- **Phase 4: Fix**
718
- 14. Execute fixes in priority order (Critical -> High -> Medium -> Low):
719
- - Typography: replace banned fonts, fix type scale, set max-width, correct line-heights
720
- - Color: replace pure black/gray, tint neutrals, fix contrast ratios, apply 60-30-10
721
- - Spacing: normalize to 4px scale, fix Gestalt grouping, add breathing room
722
- - Layout: break uniform card grids, add spatial surprises, vary section rhythm
723
- - Motion: add staggered entrance, fix transition:all, add reduced-motion support
724
- - Accessibility: fix axe violations, add focus-visible, add ARIA, fix semantic HTML
725
- - Interaction: add all 8 states, fix form labels, add loading/empty/error states
726
- - Performance: add lazy loading, set image dimensions, optimize font loading
727
- - Copy: replace generic headlines, fix button labels, improve error messages
728
- 15. After each category, re-run the relevant checks to verify the fix worked.
729
-
730
- **Phase 5: Verify**
731
- 16. Run `/score` again -- establish the **after score**.
732
- 17. Take **after screenshots** (same 4 viewports).
733
- 18. Run `/before-after` -- generate the visual comparison report.
734
- 19. Run `/a11y` and `/perf` again to confirm improvements.
735
-
736
- **Phase 6: Report**
737
- 20. Present the final report:
738
-
739
- ```
740
- ## GODMODE Complete
741
-
742
- Before: 42/100 → After: 87/100 (+45 points)
743
-
744
- Typography: 6/15 → 14/15 (+8)
745
- Color: 5/15 → 13/15 (+8)
746
- Spacing: 4/10 → 9/10 (+5)
747
- Accessibility: 8/20 → 19/20 (+11)
748
- Motion: 3/10 → 8/10 (+5)
749
- Responsive: 6/10 → 9/10 (+3)
750
- Performance: 5/10 → 8/10 (+3)
751
- Anti-Slop: 5/10 → 7/10 (+2)
752
-
753
- Changes made: 47 files modified
754
- Issues fixed: 23 (8 critical, 7 high, 5 medium, 3 low)
755
- Time: ~12 minutes
756
-
757
- Before/after report: /tmp/picasso-before-after.html
758
- ```
670
+ Full pipeline: interview + assess + plan + fix + verify + report. See `commands/godmode.md` for the complete workflow.
759
671
 
760
672
  ### Godmode Rules
761
673
 
@@ -773,163 +685,25 @@ Before/after report: /tmp/picasso-before-after.html
773
685
  ## Creative Commands
774
686
 
775
687
  ### /roast -- Brutally Honest Design Critique
776
-
777
- The anti-polite review. Write feedback in sharp, designer-Twitter energy. Be specific, be funny, be cutting -- but always constructive. Every roast must end with "Here's how to fix it:" followed by actionable steps.
778
-
779
- Example tone: "This hero section looks like every v0 output from 2024. The purple gradient physically hurts my eyes. The three identical cards are a cry for help. And the 'Build the future of work' headline? My brother in Christ, it's 2026."
780
-
781
- **MANDATORY: Before writing ANY roast, you MUST:**
782
- 1. Take desktop + mobile screenshots via `npx playwright screenshot`
783
- 2. **View them with the Read tool** (`Read /tmp/picasso-roast-desktop.png`)
784
- 3. Base ALL visual critiques on what you actually SEE in the screenshots
785
- 4. Never claim "this is light/dark mode" or "this color is X" without viewing a screenshot first
786
-
787
- Rules:
788
- - Never be mean about the developer, only the design
789
- - Every criticism must be specific (file:line or element)
790
- - Every roast point must include the fix
791
- - End with a genuine compliment about what IS working
792
- - Output a "Roast Score" from 🔥 (barely warm) to 🔥🔥🔥🔥🔥 (absolute inferno)
793
- - **NEVER make visual claims from code alone** -- all visual observations must come from screenshots
688
+ Sharp, specific, funny design critique with actionable fixes. See `commands/roast.md` for the full workflow.
794
689
 
795
690
  ### /before-after -- Visual Diff Report
796
-
797
- After any /polish or /redesign, auto-generate a comparison:
798
- 1. Take "before" screenshots (desktop + mobile) BEFORE making changes
799
- 2. Make the changes
800
- 3. Take "after" screenshots
801
- 4. Generate an HTML report at `/tmp/picasso-before-after.html` showing side-by-side comparisons with annotations
802
- 5. List every change made with file:line references
803
-
804
- ```bash
805
- # Before screenshots
806
- npx playwright screenshot http://localhost:3000 /tmp/picasso-before-desktop.png --viewport-size=1440,900
807
- npx playwright screenshot http://localhost:3000 /tmp/picasso-before-mobile.png --viewport-size=375,812
808
-
809
- # ... make changes ...
810
-
811
- # After screenshots
812
- npx playwright screenshot http://localhost:3000 /tmp/picasso-after-desktop.png --viewport-size=1440,900
813
- npx playwright screenshot http://localhost:3000 /tmp/picasso-after-mobile.png --viewport-size=375,812
814
- ```
691
+ Take before/after screenshots and generate an HTML side-by-side comparison report. See `commands/before-after.md` for the full workflow.
815
692
 
816
693
  ### /steal <url> -- Design DNA Extraction
817
-
818
- Point at any live website and extract its design DNA:
819
- 1. Screenshot the URL at multiple viewports
820
- 2. Analyze the screenshot visually for: fonts, color palette, spacing rhythm, border-radius, animation style, layout structure
821
- 3. Use bash to fetch the page and extract CSS:
822
- ```bash
823
- curl -s "<url>" | grep -oE 'font-family:[^;]+' | sort -u | head -10
824
- curl -s "<url>" | grep -oE '#[0-9a-fA-F]{3,8}' | sort | uniq -c | sort -rn | head -15
825
- curl -s "<url>" | grep -oE 'border-radius:[^;]+' | sort -u
826
- ```
827
- 4. Generate a `.picasso.md` config that matches the extracted aesthetic
828
- 5. Optionally generate a DESIGN.md based on the extraction
694
+ Extract design language (fonts, colors, spacing, radius) from any live website or Figma file into a `.picasso.md` config. See `commands/steal.md` for the full workflow.
829
695
 
830
696
  ### /mood <word> -- Instant Aesthetic from a Single Word
831
-
832
- Generate a complete design system from an evocative word or phrase:
833
- 1. Parse the mood word(s): "cyberpunk", "cottage", "brutalist-banking", "warm-saas", "dark-editorial"
834
- 2. Map to design tokens:
835
- - Color palette (5-7 OKLCH values)
836
- - Font pairing (display + body + mono)
837
- - Border radius scale
838
- - Shadow style
839
- - Motion intensity
840
- - Spacing density
841
- 3. Generate a complete `.picasso.md` config
842
- 4. Generate a `DESIGN.md` with the full token set
843
- 5. Show a preview summary: "Mood: cyberpunk -> Neon green on near-black, JetBrains Mono headers, sharp 2px radius, high motion, dense layout"
844
-
845
- Include a mood mapping table:
846
- | Mood | Palette Direction | Typography | Radius | Motion |
847
- |---|---|---|---|---|
848
- | cyberpunk | neon on dark, high contrast | monospace display + geometric body | sharp (0-2px) | high, glitch effects |
849
- | cottage | warm earth tones, muted | serif display + rounded body | soft (12-16px) | gentle, slow fades |
850
- | brutalist | black/white + one accent | mono or slab | none (0px) | minimal, abrupt |
851
- | luxury | deep neutrals + gold/cream | thin serif display + elegant sans | subtle (4-8px) | smooth, slow |
852
- | editorial | high contrast, limited palette | strong serif + clean sans | minimal (2-4px) | moderate, text-focused |
853
- | playful | bright, saturated, varied | rounded sans + handwritten accent | large (16-24px) | bouncy, energetic |
854
- | corporate | conservative blue/gray | clean sans + readable body | standard (8px) | subtle, professional |
855
- | dark-tech | dark surfaces + accent glow | geometric sans + monospace | sharp (2-4px) | fast, precise |
856
- | warm-saas | warm neutrals + friendly accent | humanist sans | medium (8-12px) | moderate, smooth |
857
- | minimal | near-black + white + one accent | one font family, varied weights | subtle (4px) | very subtle |
697
+ Generate a complete design system (`.picasso.md` + `DESIGN.md`) from an evocative word or phrase (e.g., "cyberpunk", "cottage", "brutalist-banking"). See `commands/mood.md` for the full workflow and mood mapping table.
858
698
 
859
699
  ### /score -- Quantified Design Quality Score
860
-
861
- Run a comprehensive scoring algorithm:
862
-
863
- 1. **Typography (0-15 pts)**: font choice (not banned default: 3), type scale consistency (3), max-width on text (3), line-height correctness (3), letter-spacing on caps (3)
864
- 2. **Color (0-15 pts)**: no pure black/gray (3), OKLCH or HSL usage (3), tinted neutrals (3), 60-30-10 rule (3), semantic colors exist (3)
865
- 3. **Spacing (0-10 pts)**: consistent scale (5), Gestalt grouping (5)
866
- 4. **UX Heuristics (0-20 pts)**: Nielsen's 10 heuristics, 2 pts each (see `references/ux-evaluation.md` Section 5). Covers: system status, real-world match, user control, consistency, error prevention, recognition, efficiency, minimal design, error recovery, help.
867
- 5. **Motion (0-10 pts)**: no transition:all (3), stagger pattern (3), reduced-motion support (2), no bounce easing (2)
868
- 6. **Responsive (0-10 pts)**: works at 375px (5), touch targets (3), no horizontal scroll (2)
869
- 7. **Performance (0-10 pts)**: Lighthouse perf score mapped (0-100 -> 0-10)
870
- 8. **Anti-Slop (0-10 pts)**: deductions for each AI-slop fingerprint detected (-2 each, minimum 0)
871
-
872
- Total: 0-100. Output as:
873
- ```
874
- ## Picasso Design Score: 73/100
875
-
876
- Typography: ████████████░░░ 12/15
877
- Color: ████████████░░░ 11/15
878
- Spacing: ████████░░ 8/10
879
- Accessibility: ████████████████ 16/20
880
- Motion: ██████░░░░ 6/10
881
- Responsive: ████████░░ 8/10
882
- Performance: ██████░░░░ 6/10
883
- Anti-Slop: ██████░░░░ 6/10
884
-
885
- Top issues to fix for +15 points:
886
- 1. Add prefers-reduced-motion support (+4)
887
- 2. Replace #000 with tinted near-black (+3)
888
- 3. ...
889
- ```
700
+ 0-100 score across 8 categories (Typography, Color, Spacing, UX Heuristics, Motion, Responsive, Performance, Anti-Slop) with visual bars and top fixes for max point improvement. See `commands/score.md` for the full scoring algorithm.
890
701
 
891
702
  ### /compete <url> -- Competitive Design Analysis
892
-
893
- Compare the current project against a competitor:
894
- 1. Screenshot both sites (desktop + mobile)
895
- 2. Extract design DNA from both
896
- 3. Compare head-to-head across categories:
897
- - Typography quality
898
- - Color cohesion
899
- - Spacing consistency
900
- - Motion sophistication
901
- - Mobile experience
902
- - Performance (Lighthouse)
903
- - Accessibility (axe)
904
- 4. Output a comparison table with winner per category
905
- 5. Generate specific recommendations: "Their typography is stronger because they use a modular type scale. Yours uses 7 different font sizes with no clear ratio."
703
+ Head-to-head comparison against a competitor site across typography, color, spacing, motion, mobile, performance, and accessibility. See `commands/compete.md` for the full workflow.
906
704
 
907
705
  ### /evolve -- Iterative Design Refinement Loop
908
-
909
- Multi-round design refinement with visual previews at every step:
910
- 1. **Round 1: Directions** -- Generate 3 distinct aesthetic directions. For each, generate a visual preview card using the Side-by-Side Comparison template from `references/visual-preview.md`. Write to `/tmp/picasso-evolve-round1.html`, screenshot, view, present. Ask user to pick one (or combine elements).
911
- 2. **Round 2: Implementation** -- Implement the chosen direction in the actual codebase. Screenshot the running app. Ask "What do you love? What's not right?"
912
- 3. **Round 3+: Refinement** -- Apply feedback. Screenshot again. Ask "Are we there? Or one more round?"
913
- 4. Continue until user says "ship it"
914
-
915
- Rules:
916
- - Round 1 MUST show visual previews, not just text descriptions
917
- - Each direction must be genuinely different (not three variations of the same thing)
918
- - Always screenshot between rounds so the user can SEE the change
919
- - Max 5 rounds before suggesting we ship (diminishing returns)
920
-
921
- ### /mood-board -- Generate Visual Inspiration
922
-
923
- When the user isn't sure what they want, generate a visual mood board:
924
- 1. Ask for 3-5 adjectives or reference points
925
- 2. Search `references/style-presets.md` for matching presets (2-4 best matches)
926
- 3. Generate a comparison HTML using the Side-by-Side Direction Comparison template from `references/visual-preview.md`, showing each matched preset as a visual card with:
927
- - Rendered font samples (heading + body) using actual fonts from the Font Mapping table
928
- - Color palette strip with the preset's 5 key colors
929
- - A sample card component and button in that preset's style
930
- 4. Write to `/tmp/picasso-moodboard.html`
931
- 5. Open with Playwright MCP, screenshot, view with Read (mandatory -- never skip)
932
- 6. Present to user: "Based on your adjectives, these presets match. Which elements resonate?"
706
+ Multi-round refinement: generate 3 directions with previews, implement user's pick, refine until "ship it." Max 5 rounds. See `commands/evolve.md` for the full workflow.
933
707
 
934
708
  ### /design-system-sync -- Auto-sync Code to DESIGN.md
935
709
 
@@ -942,63 +716,13 @@ Detect drift between DESIGN.md and actual code:
942
716
  4. Offer to auto-fix all drift with a single confirmation
943
717
 
944
718
  ### /preset <name> -- Apply Community Preset
945
-
946
- Apply a curated design preset by name.
947
-
948
- **When no preset name is given** (`/preset` with no arguments):
949
- 1. Load `references/style-presets.md` to get all 22 presets
950
- 2. Generate a **visual preset browser** using the Preset Browser Grid template from `references/visual-preview.md`
951
- - Grid of cards (4 columns), one per preset
952
- - Each card: preset name (in its heading font), color palette strip, one-line mood, sample button
953
- - Card background uses the preset's surface color, text uses its text color
954
- 3. Write to `/tmp/picasso-preset-browser.html`
955
- 4. Open with Playwright MCP, screenshot, view with Read
956
- 5. Present: "Here are all 22 presets. Which one catches your eye?"
957
- 6. Wait for user to pick before proceeding
958
-
959
- **When a preset name is given** (`/preset bold-signal`):
960
- 1. Load the named preset from `references/style-presets.md`
961
- 2. Generate a **visual preview** of the preset (Full Page Mood Preview from `references/visual-preview.md`)
962
- 3. Write to `/tmp/picasso-preset-{name}.html`, screenshot, view
963
- 4. Present: "Here's what {name} looks like. Apply it?"
964
- 5. After confirmation:
965
- - Generate `.picasso.md` + `DESIGN.md` from the preset
966
- - Apply to the codebase (CSS variables, Tailwind config, font imports, component styling)
719
+ Browse all 22 presets visually (no argument) or preview and apply a specific preset by name. Generates `.picasso.md` + `DESIGN.md` from the chosen preset. See `commands/preset.md` for the full workflow.
967
720
 
968
721
  ## Advanced Automation Commands
969
722
 
970
723
  ### /perf -- Performance Audit
971
724
 
972
- Run Lighthouse CLI, extract Core Web Vitals (LCP, CLS, INP/TBT), report scores with pass/fail thresholds:
973
-
974
- ```bash
975
- npx lighthouse http://localhost:3000 --only-categories=performance --output=json --output-path=/tmp/lh-perf.json --chrome-flags="--headless --no-sandbox" --quiet
976
- ```
977
-
978
- Parse the JSON output to extract these metrics with thresholds:
979
-
980
- | Metric | Pass | Needs Work | Fail |
981
- |---|---|---|---|
982
- | Performance Score | >= 90 | 50-89 | < 50 |
983
- | FCP (First Contentful Paint) | < 1.8s | 1.8-3.0s | > 3.0s |
984
- | LCP (Largest Contentful Paint) | < 2.5s | 2.5-4.0s | > 4.0s |
985
- | CLS (Cumulative Layout Shift) | < 0.1 | 0.1-0.25 | > 0.25 |
986
- | TBT (Total Blocking Time) | < 200ms | 200-600ms | > 600ms |
987
- | SI (Speed Index) | < 3.4s | 3.4-5.8s | > 5.8s |
988
-
989
- ```bash
990
- # Parse results from JSON
991
- node -e "
992
- const r = require('/tmp/lh-perf.json');
993
- const a = r.audits;
994
- console.log('Performance Score:', Math.round(r.categories.performance.score * 100));
995
- console.log('FCP:', a['first-contentful-paint'].displayValue);
996
- console.log('LCP:', a['largest-contentful-paint'].displayValue);
997
- console.log('CLS:', a['cumulative-layout-shift'].displayValue);
998
- console.log('TBT:', a['total-blocking-time'].displayValue);
999
- console.log('SI:', a['speed-index'].displayValue);
1000
- "
1001
- ```
725
+ Run Lighthouse CLI, extract Core Web Vitals (FCP, LCP, CLS, TBT, SI), report scores with pass/fail thresholds. Pass: Perf >= 90, LCP < 2.5s, CLS < 0.1, TBT < 200ms. Fail: Perf < 50, LCP > 4s, CLS > 0.25, TBT > 600ms.
1002
726
 
1003
727
  ### /visual-diff -- Visual Regression
1004
728
 
@@ -1091,266 +815,26 @@ Report findings grouped by category with severity and suggested token replacemen
1091
815
 
1092
816
  ### /install-hooks -- Git Pre-commit Hook
1093
817
 
1094
- Generate a `.git/hooks/pre-commit` script that runs fast design checks (grep-based, no server needed):
1095
-
1096
- ```bash
1097
- cat > .git/hooks/pre-commit << 'HOOK'
1098
- #!/usr/bin/env bash
1099
- set -e
1100
-
1101
- STAGED=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(tsx|jsx|css|html|svelte|vue)$' || true)
1102
- [ -z "$STAGED" ] && exit 0
1103
-
1104
- ERRORS=0
1105
-
1106
- echo "Running Picasso pre-commit checks..."
1107
-
1108
- # 1. transition:all detection
1109
- if echo "$STAGED" | xargs grep -l 'transition:\s*all' 2>/dev/null; then
1110
- echo "ERROR: transition:all found. Specify properties explicitly."
1111
- ERRORS=$((ERRORS + 1))
1112
- fi
1113
-
1114
- # 2. Pure black (#000) detection
1115
- if echo "$STAGED" | xargs grep -l '#000000\|#000[^0-9a-fA-F]' 2>/dev/null; then
1116
- echo "ERROR: Pure black (#000) found. Use tinted near-black instead."
1117
- ERRORS=$((ERRORS + 1))
1118
- fi
1119
-
1120
- # 3. outline:none detection (without focus-visible replacement)
1121
- if echo "$STAGED" | xargs grep -l 'outline:\s*none\|outline:\s*0[^.]' 2>/dev/null; then
1122
- echo "WARNING: outline:none found. Ensure :focus-visible has a replacement."
1123
- ERRORS=$((ERRORS + 1))
1124
- fi
1125
-
1126
- # 4. Missing alt text detection
1127
- if echo "$STAGED" | xargs grep -l '<img' 2>/dev/null | xargs grep -L 'alt=' 2>/dev/null; then
1128
- echo "ERROR: <img> tags without alt attribute found."
1129
- ERRORS=$((ERRORS + 1))
1130
- fi
1131
-
1132
- if [ "$ERRORS" -gt 0 ]; then
1133
- echo ""
1134
- echo "Picasso found $ERRORS design issue(s). Fix them before committing."
1135
- exit 1
1136
- fi
1137
-
1138
- echo "Picasso pre-commit checks passed."
1139
- exit 0
1140
- HOOK
1141
- chmod +x .git/hooks/pre-commit
1142
- echo "Pre-commit hook installed."
1143
- ```
818
+ Generate a pre-commit hook that checks staged frontend files for: `transition:all`, pure `#000`, `outline:none` without focus-visible, and missing img alt text.
1144
819
 
1145
820
  ### /ci-setup -- GitHub Actions Workflow
1146
821
 
1147
- Generate a `.github/workflows/picasso-review.yml` that runs on PRs touching frontend files:
1148
-
1149
- ```yaml
1150
- name: Picasso Design Review
1151
-
1152
- on:
1153
- pull_request:
1154
- paths:
1155
- - '**/*.tsx'
1156
- - '**/*.jsx'
1157
- - '**/*.css'
1158
- - '**/*.html'
1159
- - '**/*.svelte'
1160
- - '**/*.vue'
1161
-
1162
- jobs:
1163
- picasso-review:
1164
- runs-on: ubuntu-latest
1165
- steps:
1166
- - uses: actions/checkout@v4
1167
-
1168
- - uses: actions/setup-node@v4
1169
- with:
1170
- node-version: '20'
1171
- cache: 'npm'
1172
-
1173
- - run: npm ci
1174
-
1175
- - name: Start dev server
1176
- run: npm run dev &
1177
- env:
1178
- PORT: 3000
1179
-
1180
- - name: Wait for server
1181
- run: npx wait-on http://localhost:3000 --timeout 60000
1182
-
1183
- - name: Accessibility audit (axe-cli)
1184
- run: npx axe-cli http://localhost:3000 --exit --save /tmp/axe-results.json || true
1185
-
1186
- - name: Accessibility audit (pa11y)
1187
- run: npx pa11y http://localhost:3000 --reporter json > /tmp/pa11y-results.json || true
1188
-
1189
- - name: Lighthouse accessibility
1190
- run: |
1191
- npx lighthouse http://localhost:3000 --only-categories=accessibility --output=json --output-path=/tmp/lh-a11y.json --chrome-flags="--headless --no-sandbox" --quiet || true
1192
-
1193
- - name: Lighthouse performance
1194
- run: |
1195
- npx lighthouse http://localhost:3000 --only-categories=performance --output=json --output-path=/tmp/lh-perf.json --chrome-flags="--headless --no-sandbox" --quiet || true
1196
-
1197
- - name: Take screenshots
1198
- run: |
1199
- npx playwright install chromium --with-deps
1200
- npx playwright screenshot http://localhost:3000 /tmp/picasso-desktop.png --viewport-size=1440,900
1201
- npx playwright screenshot http://localhost:3000 /tmp/picasso-mobile.png --viewport-size=375,812
1202
-
1203
- - name: Parse scores
1204
- id: scores
1205
- run: |
1206
- PERF=$(node -e "const r=require('/tmp/lh-perf.json');console.log(Math.round(r.categories.performance.score*100))" 2>/dev/null || echo "N/A")
1207
- A11Y=$(node -e "const r=require('/tmp/lh-a11y.json');console.log(Math.round(r.categories.accessibility.score*100))" 2>/dev/null || echo "N/A")
1208
- echo "perf=$PERF" >> $GITHUB_OUTPUT
1209
- echo "a11y=$A11Y" >> $GITHUB_OUTPUT
1210
-
1211
- - name: Upload artifacts
1212
- uses: actions/upload-artifact@v4
1213
- with:
1214
- name: picasso-results
1215
- path: /tmp/picasso-*.png
1216
-
1217
- - name: Post PR comment
1218
- uses: actions/github-script@v7
1219
- with:
1220
- script: |
1221
- const perf = '${{ steps.scores.outputs.perf }}';
1222
- const a11y = '${{ steps.scores.outputs.a11y }}';
1223
- const body = `## Picasso Design Review\n\n| Metric | Score |\n|---|---|\n| Performance | ${perf}/100 |\n| Accessibility | ${a11y}/100 |\n\nScreenshots uploaded as workflow artifacts.`;
1224
- github.rest.issues.createComment({
1225
- issue_number: context.issue.number,
1226
- owner: context.repo.owner,
1227
- repo: context.repo.repo,
1228
- body
1229
- });
1230
- ```
822
+ Generate a GitHub Actions workflow that runs on frontend file PRs: install deps, start dev server, run axe-cli + pa11y + Lighthouse a11y/perf, take screenshots, post PR comment with scores.
1231
823
 
1232
824
  ### /a11y -- Accessibility Audit (Enhanced)
1233
825
 
1234
- Run all three accessibility tools with JSON output parsing:
1235
-
1236
- ```bash
1237
- # 1. axe-cli -- WCAG 2.1 AA violations
1238
- npx axe-cli http://localhost:3000 --exit --save /tmp/axe-results.json 2>/dev/null
1239
- node -e "
1240
- const r = require('/tmp/axe-results.json');
1241
- const v = r[0]?.violations || [];
1242
- console.log('axe-cli: ' + v.length + ' violations');
1243
- v.forEach(v => console.log(' [' + v.impact + '] ' + v.id + ': ' + v.description + ' (' + v.nodes.length + ' nodes)'));
1244
- "
1245
-
1246
- # 2. pa11y -- HTML_CodeSniffer + WCAG 2.1 AA
1247
- npx pa11y http://localhost:3000 --reporter json > /tmp/pa11y-results.json 2>/dev/null
1248
- node -e "
1249
- const r = require('/tmp/pa11y-results.json');
1250
- console.log('pa11y: ' + r.length + ' issues');
1251
- r.forEach(i => console.log(' [' + i.type + '] ' + i.code + ': ' + i.message));
1252
- "
1253
-
1254
- # 3. Lighthouse accessibility category
1255
- npx lighthouse http://localhost:3000 --only-categories=accessibility --output=json --output-path=/tmp/lh-a11y.json --chrome-flags="--headless --no-sandbox" --quiet
1256
- node -e "
1257
- const r = require('/tmp/lh-a11y.json');
1258
- const score = Math.round(r.categories.accessibility.score * 100);
1259
- console.log('Lighthouse a11y score: ' + score + '/100');
1260
- const failed = Object.values(r.audits).filter(a => a.score === 0);
1261
- failed.forEach(a => console.log(' FAIL: ' + a.id + ' - ' + a.title));
1262
- "
1263
- ```
1264
-
1265
- Combine results from all three tools, deduplicate overlapping findings, and report with severity levels.
826
+ Run axe-cli, pa11y, and Lighthouse accessibility category with JSON output parsing. Combine results from all three tools, deduplicate overlapping findings, and report with severity levels.
1266
827
 
1267
828
  ### /quick-audit -- 5-Minute Fast Audit
1268
-
1269
- When time is short or you need a triage before committing to a full audit. Takes 5 minutes, not 30.
1270
-
1271
- Check exactly these 6 things and report pass/fail for each:
1272
-
1273
- 1. **Font** -- Is it a banned default (Inter, Roboto, Arial, system-ui)? → FAIL/PASS
1274
- 2. **Color** -- Are neutrals pure gray (#808080, #ccc) or tinted? → FAIL/PASS
1275
- 3. **Layout** -- Is everything centered on one axis with no spatial variation? → FAIL/PASS
1276
- 4. **Spacing** -- Is spacing uniform everywhere or does it follow gestalt grouping? → FAIL/PASS
1277
- 5. **Accessibility** -- Does `outline: none` exist without `:focus-visible` replacement? → FAIL/PASS
1278
- 6. **Anti-Slop** -- Do 3+ AI-slop fingerprints appear simultaneously? → FAIL/PASS
1279
-
1280
- Output format:
1281
- ```
1282
- ## Quick Audit: [project name]
1283
-
1284
- Font: PASS ✓ (Cabinet Grotesk + DM Sans)
1285
- Color: FAIL ✗ (pure #808080 in 4 places)
1286
- Layout: PASS ✓ (asymmetric grid with primary card dominant)
1287
- Spacing: FAIL ✗ (uniform 32px between all sections)
1288
- Accessibility: PASS ✓ (focus-visible defined globally)
1289
- Anti-Slop: FAIL ✗ (4 fingerprints: centered layout + uniform cards + indigo accent + same spacing)
1290
-
1291
- Result: 3/6 — Needs work. Start with color and spacing.
1292
- ```
829
+ 6 binary checks (font, color, layout, spacing, a11y, anti-slop) with pass/fail for each. See `commands/quick-audit.md` for the full workflow.
1293
830
 
1294
831
  ### /autorefine -- Binary Evaluation Loop
1295
-
1296
- Iterative improvement using binary (pass/fail) criteria. Inspired by SkillForge's autoresearch pattern that improved one skill from 56% to 92%.
1297
-
1298
- ### How It Works
1299
-
1300
- 1. **Define 6 binary criteria** (exactly 6 -- fewer is insufficient signal, more is over-optimization):
1301
- ```
1302
- 1. Typography: Non-default font used? (yes/no)
1303
- 2. Color: OKLCH or tinted neutrals? (yes/no)
1304
- 3. Spacing: Follows 4px scale with gestalt grouping? (yes/no)
1305
- 4. Anti-slop: Fewer than 3 slop fingerprints? (yes/no)
1306
- 5. Motion: prefers-reduced-motion respected? (yes/no)
1307
- 6. Accessibility: No axe-core critical violations? (yes/no)
1308
- ```
1309
-
1310
- 2. **Run baseline evaluation** -- check all 6 criteria against current state. Report pass rate (e.g., 3/6 = 50%).
1311
-
1312
- 3. **Mutate one thing at a time.** Pick the highest-impact failing criterion. Make the smallest change that flips it from FAIL to PASS. Do NOT change multiple things simultaneously -- you need to know what worked.
1313
-
1314
- 4. **Re-evaluate all 6 criteria** after each mutation. Sometimes fixing one thing breaks another.
1315
-
1316
- 5. **Iterate until 6/6 pass** across 3 consecutive evaluations. If a criterion keeps flipping between PASS and FAIL, the fix is unstable -- investigate root cause.
1317
-
1318
- 6. **Stop after 8 mutations maximum.** If you haven't hit 95% by then, the remaining issues are structural and need a `/redesign`, not incremental fixes.
1319
-
1320
- ### Output format per iteration:
1321
- ```
1322
- ## Autorefine: Iteration 3
1323
-
1324
- Mutation: Replaced pure grays with blue-tinted OKLCH neutrals in globals.css
1325
-
1326
- Typography: PASS ✓
1327
- Color: PASS ✓ ← flipped from FAIL
1328
- Spacing: PASS ✓
1329
- Anti-slop: PASS ✓
1330
- Motion: FAIL ✗
1331
- Accessibility: PASS ✓
1332
-
1333
- Pass rate: 5/6 (83%) — up from 67%
1334
- Next: Add prefers-reduced-motion guard to animations
1335
- ```
832
+ Define 6 binary criteria, mutate one thing at a time, iterate to 6/6 pass. Max 8 mutations. See `commands/autorefine.md` for the full workflow.
1336
833
 
1337
834
  ---
1338
835
 
1339
836
  ## The Studio Standard
1340
-
1341
- Picasso is not a linter. It is not a checklist runner. It is a design studio that produces work indistinguishable from a senior human designer. Every invocation should feel like working with a creative director who:
1342
-
1343
- 1. **Analyzes before prescribing.** Read the codebase, understand the product, study the competitors, THEN make recommendations. Never present a generic capability menu -- two projects should get different recommendations because they ARE different. The right answer for a legal SaaS is not the same as for a music app.
1344
-
1345
- 2. **Delivers a creative vision** before writing code. A Design Brief that is specific to THIS project -- if you could swap the project name and the brief still works, it's too generic.
1346
-
1347
- 3. **Actually implements what was promised.** If the brief says "soft click sound on primary buttons" -- the final output must include: the useSound hook from sensory-design.md, the audio source (Tone.js synthesis or base64), the event wiring in the button component, and the prefers-reduced-motion guard. Not "I recommend adding sounds" -- the actual working code.
1348
-
1349
- 4. **Uses the reference library.** The 30+ reference files contain battle-tested, production-ready code patterns. When you recommend something, read the relevant reference and use its code. Do not reinvent. Do not hallucinate simpler versions.
1350
-
1351
- 5. **Verifies with screenshots.** Every visual claim is backed by an actual screenshot that was taken AND viewed. No exceptions.
1352
-
1353
- 6. **Knows when to say no.** Not every project needs animations. Not every project needs sound. Not every project needs haptics. The mark of a great designer is knowing what to leave out. If you recommend something, you must be able to articulate why THIS project benefits from it specifically -- not "it's a best practice" or "it improves perceived quality." WHY for THIS product, THESE users, THIS context.
837
+ Analyze the specific project before recommending anything. Deliver what was promised. Verify everything with screenshots. Know when to say no.
1354
838
 
1355
839
  ---
1356
840
 
@@ -1372,7 +856,7 @@ Picasso is not a linter. It is not a checklist runner. It is a design studio tha
1372
856
  14. **NEVER pair a dark sidebar with a gradient CTA button.**
1373
857
  15. **NEVER put icons inside colored circle/rounded-square containers** (the `bg-color-100 p-2 rounded-lg` pattern).
1374
858
  16. **NEVER add hover:-translate-y + shadow-lg to cards.** Use subtle background color change only.
1375
- 17. **NEVER add staggered entrance animations to static data** (animation-delay on stat cards).
859
+ 17. **NEVER add staggered entrance animations on individual stat cards, data rows, or repeated items** (animation-delay per card/row). Page-level section stagger (hero -> content -> footer) is fine.
1376
860
  18. **Prefer subtraction over addition.** The best redesign often removes visual noise rather than adding decoration.
1377
861
  19. **Study real competitors first.** Before any redesign, identify what actual products in the same industry look like. Match their energy, not a generic SaaS template.
1378
862
  20. **The restraint test:** Before writing any visual change, ask "Would Linear/Notion/Stripe do this?" If the answer is no, don't do it.