···4545### Mobile Adaptation (Desktop → Mobile)
46464747**Layout Strategy**:
4848+4849- Single column instead of multi-column
4950- Vertical stacking instead of side-by-side
5051- Full-width components instead of fixed widths
5152- Bottom navigation instead of top/side navigation
52535354**Interaction Strategy**:
5555+5456- Touch targets 44x44px minimum (not hover-dependent)
5557- Swipe gestures where appropriate (lists, carousels)
5658- Bottom sheets instead of dropdowns
···5860- Larger tap areas with more spacing
59616062**Content Strategy**:
6363+6164- Progressive disclosure (don't show everything at once)
6265- Prioritize primary content (secondary content in tabs/accordions)
6366- Shorter text (more concise)
6467- Larger text (16px minimum)
65686669**Navigation Strategy**:
7070+6771- Hamburger menu or bottom navigation
6872- Reduce navigation complexity
6973- Sticky headers for context
···7276### Tablet Adaptation (Hybrid Approach)
73777478**Layout Strategy**:
7979+7580- Two-column layouts (not single or three-column)
7681- Side panels for secondary content
7782- Master-detail views (list + detail)
7883- Adaptive based on orientation (portrait vs landscape)
79848085**Interaction Strategy**:
8686+8187- Support both touch and pointer
8288- Touch targets 44x44px but allow denser layouts than phone
8389- Side navigation drawers
···8692### Desktop Adaptation (Mobile → Desktop)
87938894**Layout Strategy**:
9595+8996- Multi-column layouts (use horizontal space)
9097- Side navigation always visible
9198- Multiple information panels simultaneously
9299- Fixed widths with max-width constraints (don't stretch to 4K)
9310094101**Interaction Strategy**:
102102+95103- Hover states for additional information
96104- Keyboard shortcuts
97105- Right-click context menus
···99107- Multi-select with Shift/Cmd
100108101109**Content Strategy**:
110110+102111- Show more information upfront (less progressive disclosure)
103112- Data tables with many columns
104113- Richer visualizations
···107116### Print Adaptation (Screen → Print)
108117109118**Layout Strategy**:
119119+110120- Page breaks at logical points
111121- Remove navigation, footer, interactive elements
112122- Black and white (or limited color)
113123- Proper margins for binding
114124115125**Content Strategy**:
126126+116127- Expand shortened content (show full URLs, hidden sections)
117128- Add page numbers, headers, footers
118129- Include metadata (print date, page title)
···121132### Email Adaptation (Web → Email)
122133123134**Layout Strategy**:
135135+124136- Narrow width (600px max)
125137- Single column only
126138- Inline CSS (no external stylesheets)
127139- Table-based layouts (for email client compatibility)
128140129141**Interaction Strategy**:
142142+130143- Large, obvious CTAs (buttons not text links)
131144- No hover states (not reliable)
132145- Deep links to web app for complex interactions
···138151### Responsive Breakpoints
139152140153Choose appropriate breakpoints:
154154+141155- Mobile: 320px-767px
142156- Tablet: 768px-1023px
143157- Desktop: 1024px+
···176190**IMPORTANT**: Test on real devices, not just browser DevTools. Device emulation is helpful but not perfect.
177191178192**NEVER**:
193193+179194- Hide core functionality on mobile (if it matters, make it work)
180195- Assume desktop = powerful device (consider accessibility, older machines)
181196- Use different information architecture across contexts (confusing)
···196211- **Edge cases**: Very small screens (320px), very large screens (4K)
197212- **Slow connections**: Test on throttled network
198213199199-Remember: You're a cross-platform design expert. Make experiences that feel native to each context while maintaining brand and functionality consistency. Adapt intentionally, test thoroughly.214214+Remember: You're a cross-platform design expert. Make experiences that feel native to each context while maintaining brand and functionality consistency. Adapt intentionally, test thoroughly.
+17-4
.agents/skills/animate/SKILL.md
···5151Add motion systematically across these categories:
52525353### Entrance Animations
5454+5455- **Page load choreography**: Stagger element reveals (100-150ms delays), fade + slide combinations
5556- **Hero section**: Dramatic entrance for primary content (scale, parallax, or creative effects)
5657- **Content reveals**: Scroll-triggered animations using intersection observer
5758- **Modal/drawer entry**: Smooth slide + fade, backdrop fade, focus management
58595960### Micro-interactions
6161+6062- **Button feedback**:
6163 - Hover: Subtle scale (1.02-1.05), color shift, shadow increase
6264 - Click: Quick scale down then up (0.95 → 1), ripple effect
···6971- **Like/favorite**: Scale + rotation, particle effects, color transition
70727173### State Transitions
7474+7275- **Show/hide**: Fade + slide (not instant), appropriate timing (200-300ms)
7376- **Expand/collapse**: Height transition with overflow handling, icon rotation
7477- **Loading states**: Skeleton screen fades, spinner animations, progress bars
···7679- **Enable/disable**: Opacity transitions, cursor changes
77807881### Navigation & Flow
8282+7983- **Page transitions**: Crossfade between routes, shared element transitions
8084- **Tab switching**: Slide indicator, content fade/slide
8185- **Carousel/slider**: Smooth transforms, snap points, momentum
8286- **Scroll effects**: Parallax layers, sticky headers with state changes, scroll progress indicators
83878488### Feedback & Guidance
8989+8590- **Hover hints**: Tooltip fade-ins, cursor changes, element highlights
8691- **Drag & drop**: Lift effect (shadow + scale), drop zone highlights, smooth repositioning
8792- **Copy/paste**: Brief highlight flash on paste, "copied" confirmation
8893- **Focus flow**: Highlight path through form or workflow
89949095### Delight Moments
9696+9197- **Empty states**: Subtle floating animations on illustrations
9298- **Completed actions**: Confetti, check mark flourish, success celebrations
9399- **Easter eggs**: Hidden interactions for discovery
···100106### Timing & Easing
101107102108**Durations by purpose:**
109109+103110- **100-150ms**: Instant feedback (button press, toggle)
104111- **200-300ms**: State changes (hover, menu open)
105112- **300-500ms**: Layout changes (accordion, modal)
106113- **500-800ms**: Entrance animations (page load)
107114108115**Easing curves (use these, not CSS defaults):**
116116+109117```css
110118/* Recommended - natural deceleration */
111111---ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1); /* Smooth, refined */
112112---ease-out-quint: cubic-bezier(0.22, 1, 0.36, 1); /* Slightly snappier */
113113---ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1); /* Confident, decisive */
119119+--ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1); /* Smooth, refined */
120120+--ease-out-quint: cubic-bezier(0.22, 1, 0.36, 1); /* Slightly snappier */
121121+--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1); /* Confident, decisive */
114122115123/* AVOID - feel dated and tacky */
116124/* bounce: cubic-bezier(0.34, 1.56, 0.64, 1); */
···120128**Exit animations are faster than entrances.** Use ~75% of enter duration.
121129122130### CSS Animations
131131+123132```css
124133/* Prefer for simple, declarative animations */
125134- transitions for state changes
···128137```
129138130139### JavaScript Animation
140140+131141```javascript
132142/* Use for complex, interactive animations */
133143- Web Animations API for programmatic control
···136146```
137147138148### Performance
149149+139150- **GPU acceleration**: Use `transform` and `opacity`, avoid layout properties
140151- **will-change**: Add sparingly for known expensive animations
141152- **Reduce paint**: Minimize repaints, use `contain` where appropriate
142153- **Monitor FPS**: Ensure 60fps on target devices
143154144155### Accessibility
156156+145157```css
146158@media (prefers-reduced-motion: reduce) {
147159 * {
···153165```
154166155167**NEVER**:
168168+156169- Use bounce or elastic easing curves—they feel dated and draw attention to the animation itself
157170- Animate layout properties (width, height, top, left)—use transform instead
158171- Use durations over 500ms for feedback—it feels laggy
···172185- **Doesn't block**: Users can interact during/after animations
173186- **Adds value**: Makes interface clearer or more delightful
174187175175-Remember: Motion should enhance understanding and provide feedback, not just add decoration. Animate with purpose, respect performance constraints, and always consider accessibility. Great animation is invisible - it just makes everything feel right.188188+Remember: Motion should enhance understanding and provide feedback, not just add decoration. Animate with purpose, respect performance constraints, and always consider accessibility. Great animation is invisible - it just makes everything feel right.
+19-9
.agents/skills/audit/SKILL.md
···2323### 1. Accessibility (A11y)
24242525**Check for**:
2626+2627- **Contrast issues**: Text contrast ratios < 4.5:1 (or 7:1 for AAA)
2728- **Missing ARIA**: Interactive elements without proper roles, labels, or states
2829- **Keyboard navigation**: Missing focus indicators, illogical tab order, keyboard traps
···3536### 2. Performance
36373738**Check for**:
3939+3840- **Layout thrashing**: Reading/writing layout properties in loops
3941- **Expensive animations**: Animating layout properties (width, height, top, left) instead of transform/opacity
4042- **Missing optimization**: Images without lazy loading, unoptimized assets, missing will-change
···4648### 3. Theming
47494850**Check for**:
5151+4952- **Hard-coded colors**: Colors not using design tokens
5053- **Broken dark mode**: Missing dark mode variants, poor contrast in dark theme
5154- **Inconsistent tokens**: Using wrong tokens, mixing token types
···5659### 4. Responsive Design
57605861**Check for**:
6262+5963- **Fixed widths**: Hard-coded widths that break on mobile
6064- **Touch targets**: Interactive elements < 44x44px
6165- **Horizontal scroll**: Content overflow on narrow viewports
···74787579### Audit Health Score
76807777-| # | Dimension | Score | Key Finding |
7878-|---|-----------|-------|-------------|
7979-| 1 | Accessibility | ? | [most critical a11y issue or "--"] |
8080-| 2 | Performance | ? | |
8181-| 3 | Responsive Design | ? | |
8282-| 4 | Theming | ? | |
8383-| 5 | Anti-Patterns | ? | |
8484-| **Total** | | **??/20** | **[Rating band]** |
8181+| # | Dimension | Score | Key Finding |
8282+| --------- | ----------------- | --------- | ---------------------------------- |
8383+| 1 | Accessibility | ? | [most critical a11y issue or "--"] |
8484+| 2 | Performance | ? | |
8585+| 3 | Responsive Design | ? | |
8686+| 4 | Theming | ? | |
8787+| 5 | Anti-Patterns | ? | |
8888+| **Total** | | **??/20** | **[Rating band]** |
85898690**Rating bands**: 18-20 Excellent (minor polish), 14-17 Good (address weak dimensions), 10-13 Acceptable (significant work needed), 6-9 Poor (major overhaul), 0-5 Critical (fundamental issues)
87918892### Anti-Patterns Verdict
9393+8994**Start here.** Pass/fail: Does this look AI-generated? List specific tells. Be brutally honest.
90959196### Executive Summary
9797+9298- Audit Health Score: **??/20** ([rating band])
9399- Total issues found (count by severity: P0/P1/P2/P3)
94100- Top 3-5 critical issues
···97103### Detailed Findings by Severity
9810499105Tag every issue with **P0-P3 severity**:
106106+100107- **P0 Blocking**: Prevents task completion — fix immediately
101108- **P1 Major**: Significant difficulty or WCAG AA violation — fix before release
102109- **P2 Minor**: Annoyance, workaround exists — fix in next pass
103110- **P3 Polish**: Nice-to-fix, no real user impact — fix if time permits
104111105112For each issue, document:
113113+106114- **[P?] Issue name**
107115- **Location**: Component, file, line
108116- **Category**: Accessibility / Performance / Theming / Responsive / Anti-Pattern
···114122### Patterns & Systemic Issues
115123116124Identify recurring problems that indicate systemic gaps rather than one-off mistakes:
125125+117126- "Hard-coded colors appear in 15+ components, should use design tokens"
118127- "Touch targets consistently too small (<44px) throughout mobile experience"
119128···139148**IMPORTANT**: Be thorough but actionable. Too many P3 issues creates noise. Focus on what actually matters.
140149141150**NEVER**:
151151+142152- Report issues without explaining impact (why does this matter?)
143153- Provide generic recommendations (be specific and actionable)
144154- Skip positive findings (celebrate what works)
145155- Forget to prioritize (everything can't be P0)
146156- Report false positives without verification
147157148148-Remember: You're a technical quality auditor. Document systematically, prioritize ruthlessly, cite specific code locations, and provide clear paths to improvement.158158+Remember: You're a technical quality auditor. Document systematically, prioritize ruthlessly, cite specific code locations, and provide clear paths to improvement.
+8-1
.agents/skills/bolder/SKILL.md
···5454Systematically increase impact across these dimensions:
55555656### Typography Amplification
5757+5758- **Replace generic fonts**: Swap system fonts for distinctive choices (see impeccable skill for inspiration)
5859- **Extreme scale**: Create dramatic size jumps (3x-5x differences, not 1.5x)
5960- **Weight contrast**: Pair 900 weights with 200 weights, not 600 with 400
6061- **Unexpected choices**: Variable fonts, display fonts for headlines, condensed/extended widths, monospace as intentional accent (not as lazy "dev tool" default)
61626263### Color Intensification
6464+6365- **Increase saturation**: Shift to more vibrant, energetic colors (but not neon)
6466- **Bold palette**: Introduce unexpected color combinations—avoid the purple-blue gradient AI slop
6567- **Dominant color strategy**: Let one bold color own 60% of the design
···6870- **Rich gradients**: Intentional multi-stop gradients (not generic purple-to-blue)
69717072### Spatial Drama
7373+7174- **Extreme scale jumps**: Make important elements 3-5x larger than surroundings
7275- **Break the grid**: Let hero elements escape containers and cross boundaries
7376- **Asymmetric layouts**: Replace centered, balanced layouts with tension-filled asymmetry
···7578- **Overlap**: Layer elements intentionally for depth
76797780### Visual Effects
8181+7882- **Dramatic shadows**: Large, soft shadows for elevation (but not generic drop shadows on rounded rectangles)
7983- **Background treatments**: Mesh patterns, noise textures, geometric patterns, intentional gradients (not purple-to-blue)
8084- **Texture & depth**: Grain, halftone, duotone, layered elements—NOT glassmorphism (it's overused AI slop)
···8286- **Custom elements**: Illustrative elements, custom icons, decorative details that reinforce brand
83878488### Motion & Animation
8989+8590- **Entrance choreography**: Staggered, dramatic page load animations with 50-100ms delays
8691- **Scroll effects**: Parallax, reveal animations, scroll-triggered sequences
8792- **Micro-interactions**: Satisfying hover effects, click feedback, state changes
8893- **Transitions**: Smooth, noticeable transitions using ease-out-quart/quint/expo (not bounce or elastic—they cheapen the effect)
89949095### Composition Boldness
9696+9197- **Hero moments**: Create clear focal points with dramatic treatment
9298- **Diagonal flows**: Escape horizontal/vertical rigidity with diagonal arrangements
9399- **Full-bleed elements**: Use full viewport width/height for impact
94100- **Unexpected proportions**: Golden ratio? Throw it out. Try 70/30, 80/20 splits
9510196102**NEVER**:
103103+97104- Add effects randomly without purpose (chaos ≠ bold)
98105- Sacrifice readability for aesthetics (body text must be readable)
99106- Make everything bold (then nothing is bold - need contrast)
···114121115122**The test**: If you showed this to someone and said "AI made this bolder," would they believe you immediately? If yes, you've failed. Bold means distinctive, not "more AI effects."
116123117117-Remember: Bold design is confident design. It takes risks, makes statements, and creates memorable experiences. But bold without strategy is just loud. Be intentional, be dramatic, be unforgettable.124124+Remember: Bold design is confident design. It takes risks, makes statements, and creates memorable experiences. But bold without strategy is just loud. Be intentional, be dramatic, be unforgettable.
+20-1
.agents/skills/clarify/SKILL.md
···5151Refine text across these common areas:
52525353### Error Messages
5454+5455**Bad**: "Error 403: Forbidden"
5556**Good**: "You don't have permission to view this page. Contact your admin for access."
5657···5859**Good**: "Email addresses need an @ symbol. Try: name@example.com"
59606061**Principles**:
6262+6163- Explain what went wrong in plain language
6264- Suggest how to fix it
6365- Don't blame the user
···6567- Link to help/support if applicable
66686769### Form Labels & Instructions
7070+6871**Bad**: "DOB (MM/DD/YYYY)"
6972**Good**: "Date of birth" (with placeholder showing format)
7073···7275**Good**: "Your email address" or "Company name"
73767477**Principles**:
7878+7579- Use clear, specific labels (not generic placeholders)
7680- Show format expectations with examples
7781- Explain why you're asking (when not obvious)
···7983- Keep required field indicators clear
80848185### Button & CTA Text
8686+8287**Bad**: "Click here" | "Submit" | "OK"
8388**Good**: "Create account" | "Save changes" | "Got it, thanks"
84898590**Principles**:
9191+8692- Describe the action specifically
8793- Use active voice (verb + noun)
8894- Match user's mental model
8995- Be specific ("Save" is better than "OK")
90969197### Help Text & Tooltips
9898+9299**Bad**: "This is the username field"
93100**Good**: "Choose a username. You can change this later in Settings."
9410195102**Principles**:
103103+96104- Add value (don't just repeat the label)
97105- Answer the implicit question ("What is this?" or "Why do you need this?")
98106- Keep it brief but complete
99107- Link to detailed docs if needed
100108101109### Empty States
110110+102111**Bad**: "No items"
103112**Good**: "No projects yet. Create your first project to get started."
104113105114**Principles**:
115115+106116- Explain why it's empty (if not obvious)
107117- Show next action clearly
108118- Make it welcoming, not dead-end
109119110120### Success Messages
121121+111122**Bad**: "Success"
112123**Good**: "Settings saved! Your changes will take effect immediately."
113124114125**Principles**:
126126+115127- Confirm what happened
116128- Explain what happens next (if relevant)
117129- Be brief but complete
118130- Match the user's emotional moment (celebrate big wins)
119131120132### Loading States
133133+121134**Bad**: "Loading..." (for 30+ seconds)
122135**Good**: "Analyzing your data... this usually takes 30-60 seconds"
123136124137**Principles**:
138138+125139- Set expectations (how long?)
126140- Explain what's happening (when it's not obvious)
127141- Show progress when possible
128142- Offer escape hatch if appropriate ("Cancel")
129143130144### Confirmation Dialogs
145145+131146**Bad**: "Are you sure?"
132147**Good**: "Delete 'Project Alpha'? This can't be undone."
133148134149**Principles**:
150150+135151- State the specific action
136152- Explain consequences (especially for destructive actions)
137153- Use clear button labels ("Delete project" not "Yes")
138154- Don't overuse confirmations (only for risky actions)
139155140156### Navigation & Wayfinding
157157+141158**Bad**: Generic labels like "Items" | "Things" | "Stuff"
142159**Good**: Specific labels like "Your projects" | "Team members" | "Settings"
143160144161**Principles**:
162162+145163- Be specific and descriptive
146164- Use language users understand (not internal jargon)
147165- Make hierarchy clear
···1591776. **Be consistent**: Use same terms throughout (don't vary for variety)
160178161179**NEVER**:
180180+162181- Use jargon without explanation
163182- Blame users ("You made an error" → "This field is required")
164183- Be vague ("Something went wrong" without explanation)
···180199- **Consistency**: Does it match terminology elsewhere?
181200- **Tone**: Is it appropriate for the situation?
182201183183-Remember: You're a clarity expert with excellent communication skills. Write like you're explaining to a smart friend who's unfamiliar with the product. Be clear, be helpful, be human.202202+Remember: You're a clarity expert with excellent communication skills. Write like you're explaining to a smart friend who's unfamiliar with the product. Be clear, be helpful, be human.
+13-2
.agents/skills/colorize/SKILL.md
···5252Add color systematically across these dimensions:
53535454### Semantic Color
5555+5556- **State indicators**:
5657 - Success: Green tones (emerald, forest, mint)
5758 - Error: Red/pink tones (rose, crimson, coral)
···6364- **Progress indicators**: Colored bars, rings, or charts showing completion or health
64656566### Accent Color Application
6767+6668- **Primary actions**: Color the most important buttons/CTAs
6769- **Links**: Add color to clickable text (maintain accessibility)
6870- **Icons**: Colorize key icons for recognition and personality
···7072- **Hover states**: Introduce color on interaction
71737274### Background & Surfaces
7575+7376- **Tinted backgrounds**: Replace pure gray (`#f5f5f5`) with warm neutrals (`oklch(97% 0.01 60)`) or cool tints (`oklch(97% 0.01 250)`)
7477- **Colored sections**: Use subtle background colors to separate areas
7578- **Gradient backgrounds**: Add depth with subtle, intentional gradients (not generic purple-blue)
7679- **Cards & surfaces**: Tint cards or surfaces slightly for warmth
77807878-**Use OKLCH for color**: It's perceptually uniform, meaning equal steps in lightness *look* equal. Great for generating harmonious scales.
8181+**Use OKLCH for color**: It's perceptually uniform, meaning equal steps in lightness _look_ equal. Great for generating harmonious scales.
79828083### Data Visualization
8484+8185- **Charts & graphs**: Use color to encode categories or values
8286- **Heatmaps**: Color intensity shows density or importance
8387- **Comparison**: Color coding for different datasets or timeframes
84888589### Borders & Accents
9090+8691- **Accent borders**: Add colored left/top borders to cards or sections
8792- **Underlines**: Color underlines for emphasis or active states
8893- **Dividers**: Subtle colored dividers instead of gray lines
8994- **Focus rings**: Colored focus indicators matching brand
90959196### Typography Color
9797+9298- **Colored headings**: Use brand colors for section headings (maintain contrast)
9399- **Highlight text**: Color for emphasis or categories
94100- **Labels & tags**: Small colored labels for metadata or categories
9510196102### Decorative Elements
103103+97104- **Illustrations**: Add colored illustrations or icons
98105- **Shapes**: Geometric shapes in brand colors as background elements
99106- **Gradients**: Colorful gradient overlays or mesh backgrounds
···104111Ensure color addition improves rather than overwhelms:
105112106113### Maintain Hierarchy
114114+107115- **Dominant color** (60%): Primary brand color or most used accent
108116- **Secondary color** (30%): Supporting color for variety
109117- **Accent color** (10%): High contrast for key moments
110118- **Neutrals** (remaining): Gray/black/white for structure
111119112120### Accessibility
121121+113122- **Contrast ratios**: Ensure WCAG compliance (4.5:1 for text, 3:1 for UI components)
114123- **Don't rely on color alone**: Use icons, labels, or patterns alongside color
115124- **Test for color blindness**: Verify red/green combinations work for all users
116125117126### Cohesion
127127+118128- **Consistent palette**: Use colors from defined palette, not arbitrary choices
119129- **Systematic application**: Same color meanings throughout (green always = success)
120130- **Temperature consistency**: Warm palette stays warm, cool stays cool
121131122132**NEVER**:
133133+123134- Use every color in the rainbow (choose 2-4 colors beyond neutrals)
124135- Apply color randomly without semantic meaning
125136- Put gray text on colored backgrounds—it looks washed out; use a darker shade of the background color or transparency instead
···140151- **Still accessible**: Do all color combinations meet WCAG standards?
141152- **Not overwhelming**: Is color balanced and purposeful?
142153143143-Remember: Color is emotional and powerful. Use it to create warmth, guide attention, communicate meaning, and express personality. But restraint and strategy matter more than saturation and variety. Be colorful, but be intentional.154154+Remember: Color is emotional and powerful. Use it to create warmth, guide attention, communicate meaning, and express personality. But restraint and strategy matter more than saturation and variety. Be colorful, but be intentional.
+39-20
.agents/skills/critique/SKILL.md
···2525#### Assessment A: LLM Design Review
26262727Read the relevant source files (HTML, CSS, JS/TS) and, if browser automation is available, visually inspect the live page. **Create a new tab** for this; do not reuse existing tabs. After navigation, label the tab by setting the document title:
2828+2829```javascript
2929-document.title = '[LLM] ' + document.title;
3030+document.title = "[LLM] " + document.title;
3031```
3232+3133Think like a design director. Evaluate:
32343335**AI Slop Detection (CRITICAL)**: Does this look like every other AI-generated interface? Review against ALL **DON'T** guidelines in the impeccable skill. Check for AI color palette, gradient text, dark glows, glassmorphism, hero metric layouts, identical card grids, generic fonts, and all other tells. **The test**: If someone said "AI made this," would you believe them immediately?
···3537**Holistic Design Review**: visual hierarchy (eye flow, primary action clarity), information architecture (structure, grouping, cognitive load), emotional resonance (does it match brand and audience?), discoverability (are interactive elements obvious?), composition (balance, whitespace, rhythm), typography (hierarchy, readability, font choices), color (purposeful use, cohesion, accessibility), states & edge cases (empty, loading, error, success), microcopy (clarity, tone, helpfulness).
36383739**Cognitive Load** (consult [cognitive-load](reference/cognitive-load.md)):
4040+3841- Run the 8-item cognitive load checklist. Report failure count: 0-1 = low (good), 2-3 = moderate, 4+ = critical.
3942- Count visible options at each decision point. If >4, flag it.
4043- Check for progressive disclosure: is complexity revealed only when needed?
41444245**Emotional Journey**:
4646+4347- What emotion does this interface evoke? Is that intentional?
4448- **Peak-end rule**: Is the most intense moment positive? Does the experience end well?
4549- **Emotional valleys**: Check for anxiety spikes at high-stakes moments (payment, delete, commit). Are there design interventions (progress indicators, reassurance copy, undo options)?
···5458Run the bundled deterministic detector, which flags 25 specific patterns (AI slop tells + general design quality).
55595660**CLI scan**:
6161+5762```bash
5863npx impeccable --json [--fast] [target]
5964```
···76812. **Create a new tab** and navigate to the page (use dev server URL for local files, or direct URL). Do not reuse existing tabs.
77823. **Label the tab** via `javascript_tool` so the user can distinguish it:
7883 ```javascript
7979- document.title = '[Human] ' + document.title;
8484+ document.title = "[Human] " + document.title;
8085 ```
81864. **Scroll to top** to ensure the page is scrolled to the very top before injection
82875. **Inject** via `javascript_tool` (replace PORT with the port from step 1):
8388 ```javascript
8484- const s = document.createElement('script'); s.src = 'http://localhost:PORT/detect.js'; document.head.appendChild(s);
8989+ const s = document.createElement("script");
9090+ s.src = "http://localhost:PORT/detect.js";
9191+ document.head.appendChild(s);
8592 ```
86936. Wait 2-3 seconds for the detector to render overlays
87947. **Read results from console** using `read_console_messages` with pattern `impeccable`. The detector logs all findings with the `[impeccable]` prefix. Do NOT scroll through the page to take screenshots of the overlays.
···101108Structure your feedback as a design director would:
102109103110#### Design Health Score
104104-> *Consult [heuristics-scoring](reference/heuristics-scoring.md)*
111111+112112+> _Consult [heuristics-scoring](reference/heuristics-scoring.md)_
105113106114Present the Nielsen's 10 heuristics scores as a table:
107115108108-| # | Heuristic | Score | Key Issue |
109109-|---|-----------|-------|-----------|
110110-| 1 | Visibility of System Status | ? | [specific finding or "n/a" if solid] |
111111-| 2 | Match System / Real World | ? | |
112112-| 3 | User Control and Freedom | ? | |
113113-| 4 | Consistency and Standards | ? | |
114114-| 5 | Error Prevention | ? | |
115115-| 6 | Recognition Rather Than Recall | ? | |
116116-| 7 | Flexibility and Efficiency | ? | |
117117-| 8 | Aesthetic and Minimalist Design | ? | |
118118-| 9 | Error Recovery | ? | |
119119-| 10 | Help and Documentation | ? | |
120120-| **Total** | | **??/40** | **[Rating band]** |
116116+| # | Heuristic | Score | Key Issue |
117117+| --------- | ------------------------------- | --------- | ------------------------------------ |
118118+| 1 | Visibility of System Status | ? | [specific finding or "n/a" if solid] |
119119+| 2 | Match System / Real World | ? | |
120120+| 3 | User Control and Freedom | ? | |
121121+| 4 | Consistency and Standards | ? | |
122122+| 5 | Error Prevention | ? | |
123123+| 6 | Recognition Rather Than Recall | ? | |
124124+| 7 | Flexibility and Efficiency | ? | |
125125+| 8 | Aesthetic and Minimalist Design | ? | |
126126+| 9 | Error Recovery | ? | |
127127+| 10 | Help and Documentation | ? | |
128128+| **Total** | | **??/40** | **[Rating band]** |
121129122130Be honest with scores. A 4 means genuinely excellent. Most real interfaces score 20-32.
123131···132140**Visual overlays** (if browser was used): Tell the user that overlays are now visible in the **[Human]** tab in their browser, highlighting the detected issues. Summarize what the console output reported.
133141134142#### Overall Impression
143143+135144A brief gut reaction: what works, what doesn't, and the single biggest opportunity.
136145137146#### What's Working
147147+138148Highlight 2-3 things done well. Be specific about why they work.
139149140150#### Priority Issues
151151+141152The 3-5 most impactful design problems, ordered by importance.
142153143154For each issue, tag with **P0-P3 severity** (consult [heuristics-scoring](reference/heuristics-scoring.md) for severity definitions):
155155+144156- **[P?] What**: Name the problem clearly
145157- **Why it matters**: How this hurts users or undermines goals
146158- **Fix**: What to do about it (be concrete)
147159- **Suggested command**: Which command could address this (from: /polish, /typeset, /colorize, /quieter, /critique, /overdrive, /clarify, /bolder, /audit, /distill, /harden, /layout, /shape, /animate, /optimize, /adapt, /delight)
148160149161#### Persona Red Flags
150150-> *Consult [personas](reference/personas.md)*
162162+163163+> _Consult [personas](reference/personas.md)_
151164152165Auto-select 2-3 personas most relevant to this interface type (use the selection table in the reference). If `.github/copilot-instructions.md` contains a `## Design Context` section from `impeccable teach`, also generate 1-2 project-specific personas from the audience/brand info.
153166···160173Be specific. Name the exact elements and interactions that fail each persona. Don't write generic persona descriptions; write what broke for them.
161174162175#### Minor Observations
176176+163177Quick notes on smaller issues worth addressing.
164178165179#### Questions to Consider
180180+166181Provocative questions that might unlock better solutions:
182182+167183- "What if the primary action were more prominent?"
168184- "Does this need to feel this complex?"
169185- "What would a confident version of this look like?"
170186171187**Remember**:
188188+172189- Be direct. Vague feedback wastes everyone's time.
173190- Be specific. "The submit button," not "some elements."
174191- Say what's wrong AND why it matters to users.
···1912084. **Constraints** (optional; only ask if relevant): If the findings touch many areas, ask if anything is off-limits. For example: "Should any sections stay as-is?" This prevents the plan from touching things the user considers done.
192209193210**Rules for questions**:
211211+194212- Every question must reference specific findings from the report. Never ask generic "who is your audience?" questions.
195213- Keep it to 2-4 questions maximum. Respect the user's time.
196214- Offer concrete options, not open-ended prompts.
···2062242072251. **`/command-name`**: Brief description of what to fix (specific context from critique findings)
2082262. **`/command-name`**: Brief description (specific context)
209209-...
227227+ ...
210228211229**Rules for recommendations**:
230230+212231- Only recommend commands from: /polish, /typeset, /colorize, /quieter, /critique, /overdrive, /clarify, /bolder, /audit, /distill, /harden, /layout, /shape, /animate, /optimize, /adapt, /delight
213232- Order by the user's stated priorities first, then by impact
214233- Each item's description should carry enough context that the command knows what to focus on
···222241223242> You can ask me to run these one at a time, all at once, or in any order you prefer.
224243>
225225-> Re-run `/critique` after fixes to see your score improve.244244+> Re-run `/critique` after fixes to see your score improve.
···77## Three Types of Cognitive Load
8899### Intrinsic Load — The Task Itself
1010+1011Complexity inherent to what the user is trying to do. You can't eliminate this, but you can structure it.
11121213**Manage it by**:
1414+1315- Breaking complex tasks into discrete steps
1416- Providing scaffolding (templates, defaults, examples)
1517- Progressive disclosure — show what's needed now, hide the rest
1618- Grouping related decisions together
17191820### Extraneous Load — Bad Design
2121+1922Mental effort caused by poor design choices. **Eliminate this ruthlessly** — it's pure waste.
20232124**Common sources**:
2525+2226- Confusing navigation that requires mental mapping
2327- Unclear labels that force users to guess meaning
2428- Visual clutter competing for attention
···2630- Unnecessary steps between user intent and result
27312832### Germane Load — Learning Effort
2929-Mental effort spent building understanding. This is *good* cognitive load — it leads to mastery.
3333+3434+Mental effort spent building understanding. This is _good_ cognitive load — it leads to mastery.
30353136**Support it by**:
3737+3238- Progressive disclosure that reveals complexity gradually
3339- Consistent patterns that reward learning
3440- Feedback that confirms correct understanding
···5864**Humans can hold ≤4 items in working memory at once** (Miller's Law revised by Cowan, 2001).
59656066At any decision point, count the number of distinct options, actions, or pieces of information a user must simultaneously consider:
6767+6168- **≤4 items**: Within working memory limits — manageable
6269- **5–7 items**: Pushing the boundary — consider grouping or progressive disclosure
6370- **8+ items**: Overloaded — users will skip, misclick, or abandon
64716572**Practical applications**:
7373+6674- Navigation menus: ≤5 top-level items (group the rest under clear categories)
6775- Form sections: ≤4 fields visible per group before a visual break
6876- Action buttons: 1 primary, 1–2 secondary, group the rest in a menu
···7482## Common Cognitive Load Violations
75837684### 1. The Wall of Options
8585+7786**Problem**: Presenting 10+ choices at once with no hierarchy.
7887**Fix**: Group into categories, highlight recommended, use progressive disclosure.
79888089### 2. The Memory Bridge
9090+8191**Problem**: User must remember info from step 1 to complete step 3.
8292**Fix**: Keep relevant context visible, or repeat it where it's needed.
83938494### 3. The Hidden Navigation
9595+8596**Problem**: User must build a mental map of where things are.
8697**Fix**: Always show current location (breadcrumbs, active states, progress indicators).
87988899### 4. The Jargon Barrier
100100+89101**Problem**: Technical or domain language forces translation effort.
90102**Fix**: Use plain language. If domain terms are unavoidable, define them inline.
9110392104### 5. The Visual Noise Floor
105105+93106**Problem**: Every element has the same visual weight — nothing stands out.
94107**Fix**: Establish clear hierarchy: one primary element, 2–3 secondary, everything else muted.
9510896109### 6. The Inconsistent Pattern
110110+97111**Problem**: Similar actions work differently in different places.
98112**Fix**: Standardize interaction patterns. Same type of action = same type of UI.
99113100114### 7. The Multi-Task Demand
115115+101116**Problem**: Interface requires processing multiple simultaneous inputs (reading + deciding + navigating).
102117**Fix**: Sequence the steps. Let the user do one thing at a time.
103118104119### 8. The Context Switch
120120+105121**Problem**: User must jump between screens/tabs/modals to gather info for a single decision.
106122**Fix**: Co-locate the information needed for each decision. Reduce back-and-forth.
···99Keep users informed about what's happening through timely, appropriate feedback.
10101111**Check for**:
1212+1213- Loading indicators during async operations
1314- Confirmation of user actions (save, submit, delete)
1415- Progress indicators for multi-step processes
···2930Speak the user's language. Follow real-world conventions. Information appears in natural, logical order.
30313132**Check for**:
3333+3234- Familiar terminology (no unexplained jargon)
3335- Logical information order matching user expectations
3436- Recognizable icons and metaphors
···4951Users need a clear "emergency exit" from unwanted states without extended dialogue.
50525153**Check for**:
5454+5255- Undo/redo functionality
5356- Cancel buttons on forms and modals
5457- Clear navigation back to safety (home, previous)
···6972Users shouldn't wonder whether different words, situations, or actions mean the same thing.
70737174**Check for**:
7575+7276- Consistent terminology throughout the interface
7377- Same actions produce same results everywhere
7478- Platform conventions followed (standard UI patterns)
···8993Better than good error messages is a design that prevents problems in the first place.
90949195**Check for**:
9696+9297- Confirmation before destructive actions (delete, overwrite)
9398- Constraints preventing invalid input (date pickers, dropdowns)
9499- Smart defaults that reduce errors
···109114Minimize memory load. Make objects, actions, and options visible or easily retrievable.
110115111116**Check for**:
117117+112118- Visible options (not buried in hidden menus)
113119- Contextual help when needed (tooltips, inline hints)
114120- Recent items and history
···129135Accelerators — invisible to novices — speed up expert interaction.
130136131137**Check for**:
138138+132139- Keyboard shortcuts for common actions
133140- Customizable interface elements
134141- Recent items and favorites
···149156Interfaces should not contain irrelevant or rarely needed information. Every element should serve a purpose.
150157151158**Check for**:
159159+152160- Only necessary information visible at each step
153161- Clear visual hierarchy directing attention
154162- Purposeful use of color and emphasis
···169177Error messages should use plain language, precisely indicate the problem, and constructively suggest a solution.
170178171179**Check for**:
180180+172181- Plain language error messages (no error codes for users)
173182- Specific problem identification ("Email is missing @" not "Invalid input")
174183- Actionable recovery suggestions
···189198Even if the system is usable without docs, help should be easy to find, task-focused, and concise.
190199191200**Check for**:
201201+192202- Searchable help or documentation
193203- Contextual help (tooltips, inline hints, guided tours)
194204- Task-focused organization (not feature-organized)
···210220211221**Total possible**: 40 points (10 heuristics × 4 max)
212222213213-| Score Range | Rating | What It Means |
214214-|-------------|--------|---------------|
215215-| 36–40 | Excellent | Minor polish only — ship it |
216216-| 28–35 | Good | Address weak areas, solid foundation |
217217-| 20–27 | Acceptable | Significant improvements needed before users are happy |
218218-| 12–19 | Poor | Major UX overhaul required — core experience broken |
219219-| 0–11 | Critical | Redesign needed — unusable in current state |
223223+| Score Range | Rating | What It Means |
224224+| ----------- | ---------- | ------------------------------------------------------ |
225225+| 36–40 | Excellent | Minor polish only — ship it |
226226+| 28–35 | Good | Address weak areas, solid foundation |
227227+| 20–27 | Acceptable | Significant improvements needed before users are happy |
228228+| 12–19 | Poor | Major UX overhaul required — core experience broken |
229229+| 0–11 | Critical | Redesign needed — unusable in current state |
220230221231---
222232···224234225235Tag each individual issue found during scoring with a priority level:
226236227227-| Priority | Name | Description | Action |
228228-|----------|------|-------------|--------|
229229-| **P0** | Blocking | Prevents task completion entirely | Fix immediately — this is a showstopper |
230230-| **P1** | Major | Causes significant difficulty or confusion | Fix before release |
231231-| **P2** | Minor | Annoyance, but workaround exists | Fix in next pass |
232232-| **P3** | Polish | Nice-to-fix, no real user impact | Fix if time permits |
237237+| Priority | Name | Description | Action |
238238+| -------- | -------- | ------------------------------------------ | --------------------------------------- |
239239+| **P0** | Blocking | Prevents task completion entirely | Fix immediately — this is a showstopper |
240240+| **P1** | Major | Causes significant difficulty or confusion | Fix before release |
241241+| **P2** | Minor | Annoyance, but workaround exists | Fix in next pass |
242242+| **P3** | Polish | Nice-to-fix, no real user impact | Fix if time permits |
233243234244**Tip**: If you're unsure between two levels, ask: "Would a user contact support about this?" If yes, it's at least P1.
+22-7
.agents/skills/critique/reference/personas.md
···1111**Profile**: Expert with similar products. Expects efficiency, hates hand-holding. Will find shortcuts or leave.
12121313**Behaviors**:
1414+1415- Skips all onboarding and instructions
1516- Looks for keyboard shortcuts immediately
1617- Tries to bulk-select, batch-edit, and automate
···1819- Abandons if anything feels slow or patronizing
19202021**Test Questions**:
2222+2123- Can Alex complete the core task in under 60 seconds?
2224- Are there keyboard shortcuts for common actions?
2325- Can onboarding be skipped entirely?
···2527- Is there a "power user" path (shortcuts, bulk actions)?
26282729**Red Flags** (report these specifically):
3030+2831- Forced tutorials or unskippable onboarding
2932- No keyboard navigation for primary actions
3033- Slow animations that can't be skipped
···3841**Profile**: Never used this type of product. Needs guidance at every step. Will abandon rather than figure it out.
39424043**Behaviors**:
4444+4145- Reads all instructions carefully
4246- Hesitates before clicking anything unfamiliar
4347- Looks for help or support constantly
···4549- Takes the most literal interpretation of any label
46504751**Test Questions**:
5252+4853- Is the first action obviously clear within 5 seconds?
4954- Are all icons labeled with text?
5055- Is there contextual help at decision points?
···5257- Is there a clear "back" or "undo" at every step?
53585459**Red Flags** (report these specifically):
6060+5561- Icon-only navigation with no labels
5662- Technical jargon without explanation
5763- No visible help option or guidance
···6571**Profile**: Uses screen reader (VoiceOver/NVDA), keyboard-only navigation. May have low vision, motor impairment, or cognitive differences.
66726773**Behaviors**:
7474+6875- Tabs through the interface linearly
6976- Relies on ARIA labels and heading structure
7077- Cannot see hover states or visual-only indicators
···7279- May use browser zoom up to 200%
73807481**Test Questions**:
8282+7583- Can the entire primary flow be completed keyboard-only?
7684- Are all interactive elements focusable with visible focus indicators?
7785- Do images have meaningful alt text?
···7987- Does the screen reader announce state changes (loading, success, errors)?
80888189**Red Flags** (report these specifically):
9090+8291- Click-only interactions with no keyboard alternative
8392- Missing or invisible focus indicators
8493- Meaning conveyed by color alone (red = error, green = success)
···93102**Profile**: Methodical user who pushes interfaces beyond the happy path. Tests edge cases, tries unexpected inputs, and probes for gaps in the experience.
9410395104**Behaviors**:
105105+96106- Tests edge cases intentionally (empty states, long strings, special characters)
97107- Submits forms with unexpected data (emoji, RTL text, very long values)
98108- Tries to break workflows by navigating backwards, refreshing mid-flow, or opening in multiple tabs
···100110- Documents problems methodically
101111102112**Test Questions**:
113113+103114- What happens at the edges (0 items, 1000 items, very long text)?
104115- Do error states recover gracefully or leave the UI in a broken state?
105116- What happens on refresh mid-workflow? Is state preserved?
···107118- How does the UI handle unexpected input (emoji, special chars, paste from Excel)?
108119109120**Red Flags** (report these specifically):
121121+110122- Features that appear to work but silently fail or produce wrong results
111123- Error handling that exposes technical details or leaves UI in a broken state
112124- Empty states that show nothing useful ("No results" with no guidance)
···120132**Profile**: Using phone one-handed on the go. Frequently interrupted. Possibly on a slow connection.
121133122134**Behaviors**:
135135+123136- Uses thumb only — prefers bottom-of-screen actions
124137- Gets interrupted mid-flow and returns later
125138- Switches between apps frequently
···127140- Types as little as possible, prefers taps and selections
128141129142**Test Questions**:
143143+130144- Are primary actions in the thumb zone (bottom half of screen)?
131145- Is state preserved if the user leaves and returns?
132146- Does it work on slow connections (3G)?
···134148- Are touch targets at least 44×44pt?
135149136150**Red Flags** (report these specifically):
151151+137152- Important actions positioned at the top of the screen (unreachable by thumb)
138153- No state persistence — progress lost on tab switch or interruption
139154- Large text inputs required where selection would work
···146161147162Choose personas based on the interface type:
148163149149-| Interface Type | Primary Personas | Why |
150150-|---------------|-----------------|-----|
164164+| Interface Type | Primary Personas | Why |
165165+| ------------------------ | -------------------- | -------------------------------- |
151166| Landing page / marketing | Jordan, Riley, Casey | First impressions, trust, mobile |
152152-| Dashboard / admin | Alex, Sam | Power users, accessibility |
153153-| E-commerce / checkout | Casey, Riley, Jordan | Mobile, edge cases, clarity |
154154-| Onboarding flow | Jordan, Casey | Confusion, interruption |
155155-| Data-heavy / analytics | Alex, Sam | Efficiency, keyboard nav |
156156-| Form-heavy / wizard | Jordan, Sam, Casey | Clarity, accessibility, mobile |
167167+| Dashboard / admin | Alex, Sam | Power users, accessibility |
168168+| E-commerce / checkout | Casey, Riley, Jordan | Mobile, edge cases, clarity |
169169+| Onboarding flow | Jordan, Casey | Confusion, interruption |
170170+| Data-heavy / analytics | Alex, Sam | Efficiency, keyboard nav |
171171+| Form-heavy / wizard | Jordan, Sam, Casey | Clarity, accessibility, mobile |
157172158173---
159174
+35-3
.agents/skills/delight/SKILL.md
···4848Follow these guidelines:
49495050### Delight Amplifies, Never Blocks
5151+5152- Delight moments should be quick (< 1 second)
5253- Never delay core functionality for delight
5354- Make delight skippable or subtle
5455- Respect user's time and task focus
55565657### Surprise and Discovery
5858+5759- Hide delightful details for users to discover
5860- Reward exploration and curiosity
5961- Don't announce every delight moment
6062- Let users share discoveries with others
61636264### Appropriate to Context
6565+6366- Match delight to emotional moment (celebrate success, empathize with errors)
6467- Respect the user's state (don't be playful during critical errors)
6568- Match brand personality and audience expectations
6669- Cultural sensitivity (what's delightful varies by culture)
67706871### Compound Over Time
7272+6973- Delight should remain fresh with repeated use
7074- Vary responses (not same animation every time)
7175- Reveal deeper layers with continued use
···7882### Micro-interactions & Animation
79838084**Button delight**:
8585+8186```css
8287/* Satisfying button press */
8388.button {
8484- transition: transform 0.1s, box-shadow 0.1s;
8989+ transition:
9090+ transform 0.1s,
9191+ box-shadow 0.1s;
8592}
8693.button:active {
8794 transform: translateY(2px);
8888- box-shadow: 0 2px 4px rgba(0,0,0,0.2);
9595+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
8996}
90979198/* Ripple effect on click */
···97104```
9810599106**Loading delight**:
107107+100108- Playful loading animations (not just spinners)
101109- Personality in loading messages (write product-specific ones, not generic AI filler)
102110- Progress indication with encouraging messages
103111- Skeleton screens with subtle animations
104112105113**Success animations**:
114114+106115- Checkmark draw animation
107116- Confetti burst for major achievements
108117- Gentle scale + fade for confirmation
109118- Satisfying sound effects (subtle)
110119111120**Hover surprises**:
121121+112122- Icons that animate on hover
113123- Color shifts or glow effects
114124- Tooltip reveals with personality
···117127### Personality in Copy
118128119129**Playful error messages**:
130130+120131```
121132"Error 404"
122133"This page is playing hide and seek. (And winning)"
···126137```
127138128139**Encouraging empty states**:
140140+129141```
130142"No projects"
131143"Your canvas awaits. Create something amazing."
···135147```
136148137149**Playful labels & tooltips**:
150150+138151```
139152"Delete"
140153"Send to void" (for playful brand)
···148161### Illustrations & Visual Personality
149162150163**Custom illustrations**:
164164+151165- Empty state illustrations (not stock icons)
152166- Error state illustrations (friendly monsters, quirky characters)
153167- Loading state illustrations (animated characters)
154168- Success state illustrations (celebrations)
155169156170**Icon personality**:
171171+157172- Custom icon set matching brand personality
158173- Animated icons (subtle motion on hover/click)
159174- Illustrative icons (more detailed than generic)
160175- Consistent style across all icons
161176162177**Background effects**:
178178+163179- Subtle particle effects
164180- Gradient mesh backgrounds
165181- Geometric patterns
···169185### Satisfying Interactions
170186171187**Drag and drop delight**:
188188+172189- Lift effect on drag (shadow, scale)
173190- Snap animation when dropped
174191- Satisfying placement sound
175192- Undo toast ("Dropped in wrong place? [Undo]")
176193177194**Toggle switches**:
195195+178196- Smooth slide with spring physics
179197- Color transition
180198- Haptic feedback on mobile
181199- Optional sound effect
182200183201**Progress & achievements**:
202202+184203- Streak counters with celebratory milestones
185204- Progress bars that "celebrate" at 100%
186205- Badge unlocks with animation
187206- Playful stats ("You're on fire! 5 days in a row")
188207189208**Form interactions**:
209209+190210- Input fields that animate on focus
191211- Checkboxes with a satisfying scale pulse when checked
192212- Success state that celebrates valid input
···195215### Sound Design
196216197217**Subtle audio cues** (when appropriate):
218218+198219- Notification sounds (distinctive but not annoying)
199220- Success sounds (satisfying "ding")
200221- Error sounds (empathetic, not harsh)
···202223- Ambient background audio (very subtle)
203224204225**IMPORTANT**:
226226+205227- Respect system sound settings
206228- Provide mute option
207229- Keep volumes quiet (subtle cues, not alarms)
···210232### Easter Eggs & Hidden Delights
211233212234**Discovery rewards**:
235235+213236- Konami code unlocks special theme
214237- Hidden keyboard shortcuts (Cmd+K for special features)
215238- Hover reveals on logos or illustrations
···217240- Console messages for developers ("Like what you see? We're hiring!")
218241219242**Seasonal touches**:
243243+220244- Holiday themes (subtle, tasteful)
221245- Seasonal color shifts
222246- Weather-based variations
223247- Time-based changes (dark at night, light during day)
224248225249**Contextual personality**:
250250+226251- Different messages based on time of day
227252- Responses to specific user actions
228253- Randomized variations (not same every time)
···231256### Loading & Waiting States
232257233258**Make waiting engaging**:
259259+234260- Interesting loading messages that rotate
235261- Progress bars with personality
236262- Mini-games during long loads
···250276### Celebration Moments
251277252278**Success celebrations**:
279279+253280- Confetti for major milestones
254281- Animated checkmarks for completions
255282- Progress bar celebrations at 100%
···257284- Personalized messages ("You published your 10th article!")
258285259286**Milestone recognition**:
287287+260288- First-time actions get special treatment
261289- Streak tracking and celebration
262290- Progress toward goals
···265293## Implementation Patterns
266294267295**Animation libraries**:
296296+268297- Framer Motion (React)
269298- GSAP (universal)
270299- Lottie (After Effects animations)
271300- Canvas confetti (party effects)
272301273302**Sound libraries**:
303303+274304- Howler.js (audio management)
275305- Use-sound (React hook)
276306277307**Physics libraries**:
308308+278309- React Spring (spring physics)
279310- Popmotion (animation primitives)
280311281312**IMPORTANT**: File size matters. Compress images, optimize animations, lazy load delight features.
282313283314**NEVER**:
315315+284316- Delay core functionality for delight
285317- Force users through delightful moments (make skippable)
286318- Use delight to hide poor UX
···301333- **Appropriate**: Matches brand and context
302334- **Accessible**: Works with reduced motion, screen readers
303335304304-Remember: Delight is the difference between a tool and an experience. Add personality, surprise users positively, and create moments worth sharing. But always respect usability - delight should enhance, never obstruct.336336+Remember: Delight is the difference between a tool and an experience. Add personality, surprise users positively, and create moments worth sharing. But always respect usability - delight should enhance, never obstruct.
+9-1
.agents/skills/distill/SKILL.md
···5252Systematically remove complexity across these dimensions:
53535454### Information Architecture
5555+5556- **Reduce scope**: Remove secondary actions, optional features, redundant information
5657- **Progressive disclosure**: Hide complexity behind clear entry points (accordions, modals, step-through flows)
5758- **Combine related actions**: Merge similar buttons, consolidate forms, group related content
···5960- **Remove redundancy**: If it's said elsewhere, don't repeat it here
60616162### Visual Simplification
6363+6264- **Reduce color palette**: Use 1-2 colors plus neutrals, not 5-7 colors
6365- **Limit typography**: One font family, 3-4 sizes maximum, 2-3 weights
6466- **Remove decorations**: Eliminate borders, shadows, backgrounds that don't serve hierarchy or function
···6769- **Consistent spacing**: Use one spacing scale, remove arbitrary gaps
68706971### Layout Simplification
7272+7073- **Linear flow**: Replace complex grids with simple vertical flow where possible
7174- **Remove sidebars**: Move secondary content inline or hide it
7275- **Full-width**: Use available space generously instead of complex multi-column layouts
···7477- **Generous white space**: Let content breathe, don't pack everything tight
75787679### Interaction Simplification
8080+7781- **Reduce choices**: Fewer buttons, fewer options, clearer path forward (paradox of choice is real)
7882- **Smart defaults**: Make common choices automatic, only ask when necessary
7983- **Inline actions**: Replace modal flows with inline editing where possible
···8185- **Clear CTAs**: ONE obvious next step, not five competing actions
82868387### Content Simplification
8888+8489- **Shorter copy**: Cut every sentence in half, then do it again
8590- **Active voice**: "Save changes" not "Changes will be saved"
8691- **Remove jargon**: Plain language always wins
···8994- **Remove redundant copy**: No headers restating intros, no repeated explanations, say it once
90959196### Code Simplification
9797+9298- **Remove unused code**: Dead CSS, unused components, orphaned files
9399- **Flatten component trees**: Reduce nesting depth
94100- **Consolidate styles**: Merge similar styles, use utilities consistently
95101- **Reduce variants**: Does that component need 12 variations, or can 3 cover 90% of cases?
9610297103**NEVER**:
104104+98105- Remove necessary functionality (simplicity ≠ feature-less)
99106- Sacrifice accessibility for simplicity (clear labels and ARIA still required)
100107- Make things so simple they're unclear (mystery ≠ minimalism)
···115122## Document Removed Complexity
116123117124If you removed features or options:
125125+118126- Document why they were removed
119127- Consider if they need alternative access points
120128- Note any user feedback to monitor
121129122122-Remember: You have great taste and judgment. Simplification is an act of confidence - knowing what to keep and courage to remove the rest. As Antoine de Saint-Exupéry said: "Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away."130130+Remember: You have great taste and judgment. Simplification is an act of confidence - knowing what to keep and courage to remove the rest. As Antoine de Saint-Exupéry said: "Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away."
+57-19
.agents/skills/harden/SKILL.md
···4545### Text Overflow & Wrapping
46464747**Long text handling**:
4848+4849```css
4950/* Single line with ellipsis */
5051.truncate {
···7071```
71727273**Flex/Grid overflow**:
7474+7375```css
7476/* Prevent flex items from overflowing */
7577.flex-item {
···8587```
86888789**Responsive text sizing**:
9090+8891- Use `clamp()` for fluid typography
8992- Set minimum readable sizes (14px on mobile)
9093- Test text scaling (zoom to 200%)
···9396### Internationalization (i18n)
94979598**Text expansion**:
9999+96100- Add 30-40% space budget for translations
97101- Use flexbox/grid that adapts to content
98102- Test with longest language (usually German)
···107111```
108112109113**RTL (Right-to-Left) support**:
114114+110115```css
111116/* Use logical properties */
112117margin-inline-start: 1rem; /* Not margin-left */
···114119border-inline-end: 1px solid; /* Not border-right */
115120116121/* Or use dir attribute */
117117-[dir="rtl"] .arrow { transform: scaleX(-1); }
122122+[dir="rtl"] .arrow {
123123+ transform: scaleX(-1);
124124+}
118125```
119126120127**Character set support**:
128128+121129- Use UTF-8 encoding everywhere
122130- Test with Chinese/Japanese/Korean (CJK) characters
123131- Test with emoji (they can be 2-4 bytes)
124132- Handle different scripts (Latin, Cyrillic, Arabic, etc.)
125133126134**Date/Time formatting**:
135135+127136```javascript
128137// ✅ Use Intl API for proper formatting
129129-new Intl.DateTimeFormat('en-US').format(date); // 1/15/2024
130130-new Intl.DateTimeFormat('de-DE').format(date); // 15.1.2024
138138+new Intl.DateTimeFormat("en-US").format(date); // 1/15/2024
139139+new Intl.DateTimeFormat("de-DE").format(date); // 15.1.2024
131140132132-new Intl.NumberFormat('en-US', {
133133- style: 'currency',
134134- currency: 'USD'
141141+new Intl.NumberFormat("en-US", {
142142+ style: "currency",
143143+ currency: "USD",
135144}).format(1234.56); // $1,234.56
136145```
137146138147**Pluralization**:
148148+139149```javascript
140150// ❌ Bad: Assumes English pluralization
141141-`${count} item${count !== 1 ? 's' : ''}`
151151+`${count} item${count !== 1 ? "s" : ""}`;
142152143153// ✅ Good: Use proper i18n library
144144-t('items', { count }) // Handles complex plural rules
154154+t("items", { count }); // Handles complex plural rules
145155```
146156147157### Error Handling
148158149159**Network errors**:
160160+150161- Show clear error messages
151162- Provide retry button
152163- Explain what happened
···155166156167```jsx
157168// Error states with recovery
158158-{error && (
159159- <ErrorMessage>
160160- <p>Failed to load data. {error.message}</p>
161161- <button onClick={retry}>Try again</button>
162162- </ErrorMessage>
163163-)}
169169+{
170170+ error && (
171171+ <ErrorMessage>
172172+ <p>Failed to load data. {error.message}</p>
173173+ <button onClick={retry}>Try again</button>
174174+ </ErrorMessage>
175175+ );
176176+}
164177```
165178166179**Form validation errors**:
180180+167181- Inline errors near fields
168182- Clear, specific messages
169183- Suggest corrections
···171185- Preserve user input on error
172186173187**API errors**:
188188+174189- Handle each status code appropriately
175190 - 400: Show validation errors
176191 - 401: Redirect to login
···180195 - 500: Show generic error, offer support
181196182197**Graceful degradation**:
198198+183199- Core functionality works without JavaScript
184200- Images have alt text
185201- Progressive enhancement
···188204### Edge Cases & Boundary Conditions
189205190206**Empty states**:
207207+191208- No items in list
192209- No search results
193210- No notifications
···195212- Provide clear next action
196213197214**Loading states**:
215215+198216- Initial load
199217- Pagination load
200218- Refresh
···202220- Time estimates for long operations
203221204222**Large datasets**:
223223+205224- Pagination or virtual scrolling
206225- Search/filter capabilities
207226- Performance optimization
208227- Don't load all 10,000 items at once
209228210229**Concurrent operations**:
230230+211231- Prevent double-submission (disable button while loading)
212232- Handle race conditions
213233- Optimistic updates with rollback
214234- Conflict resolution
215235216236**Permission states**:
237237+217238- No permission to view
218239- No permission to edit
219240- Read-only mode
220241- Clear explanation of why
221242222243**Browser compatibility**:
244244+223245- Polyfills for modern features
224246- Fallbacks for unsupported CSS
225247- Feature detection (not browser detection)
···230252Production-ready features work for first-time users, not just power users. Design the paths that get new users to value:
231253232254**Empty states**: Every zero-data screen needs:
255255+233256- What will appear here (description or illustration)
234257- Why it matters to the user
235258- Clear CTA to create the first item or start from a template
236259- Visual interest (not just blank space with "No items yet")
237260238261Empty state types to handle:
262262+239263- **First use**: emphasize value, provide templates
240264- **User cleared**: light touch, easy to recreate
241265- **No results**: suggest a different query, offer to clear filters
242266- **No permissions**: explain why, how to get access
243267244268**First-run experience**: Get users to their "aha moment" as quickly as possible.
269269+245270- Show, don't tell -- working examples over descriptions
246271- Progressive disclosure -- teach one thing at a time, not everything upfront
247272- Make onboarding optional -- let experienced users skip
248273- Provide smart defaults so required setup is minimal
249274250275**Feature discovery**: Teach features when users need them, not upfront.
276276+251277- Contextual tooltips at point of use (brief, dismissable, one-time)
252278- Badges or indicators on new or unused features
253279- Celebrate activation events quietly (a toast, not a modal)
254280255281**NEVER**:
282282+256283- Force long onboarding before users can touch the product
257284- Show the same tooltip repeatedly (track and respect dismissals)
258285- Block the entire UI during a guided tour
···262289### Input Validation & Sanitization
263290264291**Client-side validation**:
292292+265293- Required fields
266294- Format validation (email, phone, URL)
267295- Length limits
···269297- Custom validation rules
270298271299**Server-side validation** (always):
300300+272301- Never trust client-side only
273302- Validate and sanitize all inputs
274303- Protect against injection attacks
275304- Rate limiting
276305277306**Constraint handling**:
307307+278308```html
279309<!-- Set clear constraints -->
280280-<input
310310+<input
281311 type="text"
282312 maxlength="100"
283313 pattern="[A-Za-z0-9]+"
284314 required
285315 aria-describedby="username-hint"
286316/>
287287-<small id="username-hint">
288288- Letters and numbers only, up to 100 characters
289289-</small>
317317+<small id="username-hint"> Letters and numbers only, up to 100 characters </small>
290318```
291319292320### Accessibility Resilience
293321294322**Keyboard navigation**:
323323+295324- All functionality accessible via keyboard
296325- Logical tab order
297326- Focus management in modals
298327- Skip links for long content
299328300329**Screen reader support**:
330330+301331- Proper ARIA labels
302332- Announce dynamic changes (live regions)
303333- Descriptive alt text
304334- Semantic HTML
305335306336**Motion sensitivity**:
337337+307338```css
308339@media (prefers-reduced-motion: reduce) {
309340 * {
···315346```
316347317348**High contrast mode**:
349349+318350- Test in Windows high contrast mode
319351- Don't rely only on color
320352- Provide alternative visual cues
···322354### Performance Resilience
323355324356**Slow connections**:
357357+325358- Progressive image loading
326359- Skeleton screens
327360- Optimistic UI updates
328361- Offline support (service workers)
329362330363**Memory leaks**:
364364+331365- Clean up event listeners
332366- Cancel subscriptions
333367- Clear timers/intervals
334368- Abort pending requests on unmount
335369336370**Throttling & Debouncing**:
371371+337372```javascript
338373// Debounce search input
339374const debouncedSearch = debounce(handleSearch, 300);
···345380## Testing Strategies
346381347382**Manual testing**:
383383+348384- Test with extreme data (very long, very short, empty)
349385- Test in different languages
350386- Test offline
···354390- Test on old browsers
355391356392**Automated testing**:
393393+357394- Unit tests for edge cases
358395- Integration tests for error scenarios
359396- E2E tests for critical paths
···363400**IMPORTANT**: Hardening is about expecting the unexpected. Real users will do things you never imagined.
364401365402**NEVER**:
403403+366404- Assume perfect input (validate everything)
367405- Ignore internationalization (design for global)
368406- Leave error messages generic ("Error occurred")
···386424- **Errors**: Force API errors, test all error states
387425- **Empty**: Remove all data, test empty states
388426389389-Remember: You're hardening for production reality, not demo perfection. Expect users to input weird data, lose connection mid-flow, and use your product in unexpected ways. Build resilience into every component.427427+Remember: You're hardening for production reality, not demo perfection. Expect users to input weird data, lose connection mid-flow, and use your product in unexpected ways. Build resilience into every component.
+45-24
.agents/skills/impeccable/SKILL.md
···3030Design skills produce generic output without project context. You MUST have confirmed design context before doing any design work.
31313232**Required context** (every design skill needs at minimum):
3333+3334- **Target audience**: Who uses this product and in what context?
3435- **Use cases**: What jobs are they trying to get done?
3536- **Brand personality/tone**: How should the interface feel?
···3940**CRITICAL**: You cannot infer this context by reading the codebase. Code tells you what was built, not who it's for or what it should feel like. Only the creator can provide this context.
40414142**Gathering order:**
4343+42441. **Check current instructions (instant)**: If your loaded instructions already contain a **Design Context** section, proceed immediately.
43452. **Check .impeccable.md (fast)**: If not in instructions, read `.impeccable.md` from the project root. If it exists and contains the required context, proceed.
44463. **Run impeccable teach (REQUIRED)**: If neither source has context, you MUST run /impeccable teach NOW before doing anything else. Do NOT skip this step. Do NOT attempt to infer context from the codebase instead.
···4850## Design Direction
49515052Commit to a BOLD aesthetic direction:
5353+5154- **Purpose**: What problem does this interface solve? Who uses it?
5255- **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
5356- **Constraints**: Technical requirements (framework, performance, accessibility).
···5659**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work. The key is intentionality, not intensity.
57605861Then implement working code that is:
6262+5963- Production-grade and functional
6064- Visually striking and memorable
6165- Cohesive with a clear aesthetic point-of-view
···6468## Frontend Aesthetics Guidelines
65696670### Typography
6767-→ *Consult [typography reference](reference/typography.md) for OpenType features, web font loading, and the deeper material on scales.*
7171+7272+→ _Consult [typography reference](reference/typography.md) for OpenType features, web font loading, and the deeper material on scales._
68736974Choose fonts that are beautiful, unique, and interesting. Pair a distinctive display font with a refined body font.
7075···7580- Use fewer sizes with more contrast. A 5-step scale with at least a 1.25 ratio between steps creates clearer hierarchy than 8 sizes that are 1.1× apart.
7681- Line-height scales inversely with line length. Narrow columns want tighter leading, wide columns want more. For light text on dark backgrounds, ADD 0.05-0.1 to your normal line-height — light type reads as lighter weight and needs more breathing room.
7782- Cap line length at ~65-75ch. Body text wider than that is fatiguing.
7878-</typography_principles>
8383+ </typography_principles>
79848085<font_selection_procedure>
8186DO THIS BEFORE TYPING ANY FONT NAME.
···114119115120Reject every font that appears in the reflex_fonts_to_reject list. They are your training-data defaults and they create monoculture across projects.
116121117117-Step 3. Browse a font catalog with the 3 brand words in mind. Sources: Google Fonts, Pangram Pangram, Future Fonts, Adobe Fonts, ABC Dinamo, Klim Type Foundry, Velvetyne. Look for something that fits the brand as a *physical object* — a museum exhibit caption, a hand-painted shop sign, a 1970s mainframe terminal manual, a fabric label on the inside of a coat, a children's book printed on cheap newsprint. Reject the first thing that "looks designy" — that's the trained reflex too. Keep looking.
122122+Step 3. Browse a font catalog with the 3 brand words in mind. Sources: Google Fonts, Pangram Pangram, Future Fonts, Adobe Fonts, ABC Dinamo, Klim Type Foundry, Velvetyne. Look for something that fits the brand as a _physical object_ — a museum exhibit caption, a hand-painted shop sign, a 1970s mainframe terminal manual, a fabric label on the inside of a coat, a children's book printed on cheap newsprint. Reject the first thing that "looks designy" — that's the trained reflex too. Keep looking.
118123119124Step 4. Cross-check the result. The right font for an "elegant" brief is NOT necessarily a serif. The right font for a "technical" brief is NOT necessarily a sans-serif. The right font for a "warm" brief is NOT Fraunces. If your final pick lines up with your reflex pattern, go back to Step 3.
120125</font_selection_procedure>
···133138</typography_rules>
134139135140### Color & Theme
136136-→ *Consult [color reference](reference/color-and-contrast.md) for the deeper material on contrast, accessibility, and palette construction.*
141141+142142+→ _Consult [color reference](reference/color-and-contrast.md) for the deeper material on contrast, accessibility, and palette construction._
137143138144Commit to a cohesive palette. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
139145140146<color_principles>
141147Always apply these — do not consult a reference, just do them:
142148143143-- Use OKLCH, not HSL. OKLCH is perceptually uniform: equal steps in lightness *look* equal, which HSL does not deliver. As you move toward white or black, REDUCE chroma — high chroma at extreme lightness looks garish. A light blue at 85% lightness wants ~0.08 chroma, not the 0.15 of your base color.
149149+- Use OKLCH, not HSL. OKLCH is perceptually uniform: equal steps in lightness _look_ equal, which HSL does not deliver. As you move toward white or black, REDUCE chroma — high chroma at extreme lightness looks garish. A light blue at 85% lightness wants ~0.08 chroma, not the 0.15 of your base color.
144150- Tint your neutrals toward your brand hue. Even a chroma of 0.005-0.01 is perceptible and creates subconscious cohesion between brand color and UI surfaces. The hue you tint toward should come from THIS brand, not from a "warm = friendly" or "cool = tech" formula. Pick the brand's actual hue first, then tint everything toward it.
145145-- The 60-30-10 rule is about visual *weight*, not pixel count. 60% neutral / surface, 30% secondary text and borders, 10% accent. Accents work BECAUSE they're rare. Overuse kills their power.
146146-</color_principles>
151151+- The 60-30-10 rule is about visual _weight_, not pixel count. 60% neutral / surface, 30% secondary text and borders, 10% accent. Accents work BECAUSE they're rare. Overuse kills their power.
152152+ </color_principles>
147153148154<theme_selection>
149155Theme (light vs dark) should be DERIVED from audience and viewing context, not picked from a default. Read the brief and ask: when is this product used, by whom, in what physical setting?
···173179</color_rules>
174180175181### Layout & Space
176176-→ *Consult [spatial reference](reference/spatial-design.md) for the deeper material on grids, container queries, and optical adjustments.*
182182+183183+→ _Consult [spatial reference](reference/spatial-design.md) for the deeper material on grids, container queries, and optical adjustments._
177184178185Create visual rhythm through varied spacing, not the same padding everywhere. Embrace asymmetry and unexpected compositions. Break the grid intentionally for emphasis.
179186···185192- Vary spacing for hierarchy. A heading with extra space above it reads as more important — make use of that. Don't apply the same padding everywhere.
186193- Self-adjusting grid pattern: `grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))` is the breakpoint-free responsive grid for card-style content.
187194- Container queries are for components, viewport queries are for page layout. A card in a sidebar should adapt to the sidebar's width, not the viewport's.
188188-</spatial_principles>
195195+ </spatial_principles>
189196190197<spatial_rules>
191198DO create visual rhythm through varied spacing: tight groupings, generous separations.
···207214These CSS patterns are NEVER acceptable. They are the most recognizable AI design tells. Match-and-refuse: if you find yourself about to write any of these, stop and rewrite the element with a different structure entirely.
208215209216BAN 1: Side-stripe borders on cards/list items/callouts/alerts
210210- - PATTERN: `border-left:` or `border-right:` with width greater than 1px
211211- - INCLUDES: hard-coded colors AND CSS variables
212212- - FORBIDDEN: `border-left: 3px solid red`, `border-left: 4px solid #ff0000`, `border-left: 4px solid var(--color-warning)`, `border-left: 5px solid oklch(...)`, etc.
213213- - WHY: this is the single most overused "design touch" in admin, dashboard, and medical UIs. It never looks intentional regardless of color, radius, opacity, or whether the variable name is "primary" or "warning" or "accent."
214214- - REWRITE: use a different element structure entirely. Do not just swap to box-shadow inset. Reach for full borders, background tints, leading numbers/icons, or no visual indicator at all.
217217+218218+- PATTERN: `border-left:` or `border-right:` with width greater than 1px
219219+- INCLUDES: hard-coded colors AND CSS variables
220220+- FORBIDDEN: `border-left: 3px solid red`, `border-left: 4px solid #ff0000`, `border-left: 4px solid var(--color-warning)`, `border-left: 5px solid oklch(...)`, etc.
221221+- WHY: this is the single most overused "design touch" in admin, dashboard, and medical UIs. It never looks intentional regardless of color, radius, opacity, or whether the variable name is "primary" or "warning" or "accent."
222222+- REWRITE: use a different element structure entirely. Do not just swap to box-shadow inset. Reach for full borders, background tints, leading numbers/icons, or no visual indicator at all.
215223216224BAN 2: Gradient text
217217- - PATTERN: `background-clip: text` (or `-webkit-background-clip: text`) combined with a gradient background
218218- - FORBIDDEN: any combination that makes text fill come from a `linear-gradient`, `radial-gradient`, or `conic-gradient`
219219- - WHY: gradient text is decorative rather than meaningful and is one of the top three AI design tells
220220- - REWRITE: use a single solid color for text. If you want emphasis, use weight or size, not gradient fill.
221221-</absolute_bans>
225225+226226+- PATTERN: `background-clip: text` (or `-webkit-background-clip: text`) combined with a gradient background
227227+- FORBIDDEN: any combination that makes text fill come from a `linear-gradient`, `radial-gradient`, or `conic-gradient`
228228+- WHY: gradient text is decorative rather than meaningful and is one of the top three AI design tells
229229+- REWRITE: use a single solid color for text. If you want emphasis, use weight or size, not gradient fill.
230230+ </absolute_bans>
222231223232DO: Use intentional, purposeful decorative elements that reinforce brand.
224233DO NOT: Use border-left or border-right greater than 1px as a colored accent stripe on cards, list items, callouts, or alerts. See <absolute_bans> above for the strict CSS pattern.
···228237DO NOT: Use modals unless there's truly no better alternative. Modals are lazy.
229238230239### Motion
231231-→ *Consult [motion reference](reference/motion-design.md) for timing, easing, and reduced motion.*
240240+241241+→ _Consult [motion reference](reference/motion-design.md) for timing, easing, and reduced motion._
232242233243Focus on high-impact moments: one well-orchestrated page load with staggered reveals creates more delight than scattered micro-interactions.
234244···239249**DON'T**: Use bounce or elastic easing. They feel dated and tacky; real objects decelerate smoothly
240250241251### Interaction
242242-→ *Consult [interaction reference](reference/interaction-design.md) for forms, focus, and loading patterns.*
252252+253253+→ _Consult [interaction reference](reference/interaction-design.md) for forms, focus, and loading patterns._
243254244255Make interactions feel fast. Use optimistic UI: update immediately, sync later.
245256···250261**DON'T**: Make every button primary. Use ghost buttons, text links, secondary styles; hierarchy matters
251262252263### Responsive
253253-→ *Consult [responsive reference](reference/responsive-design.md) for mobile-first, fluid design, and container queries.*
264264+265265+→ _Consult [responsive reference](reference/responsive-design.md) for mobile-first, fluid design, and container queries._
254266255267**DO**: Use container queries (@container) for component-level responsiveness
256268**DO**: Adapt the interface for different contexts, not just shrink it
257269**DON'T**: Hide critical functionality on mobile. Adapt the interface, don't amputate it
258270259271### UX Writing
260260-→ *Consult [ux-writing reference](reference/ux-writing.md) for labels, errors, and empty states.*
272272+273273+→ _Consult [ux-writing reference](reference/ux-writing.md) for labels, errors, and empty states._
261274262275**DO**: Make every word earn its place
263276**DON'T**: Repeat information users can already see
···312325ask the user directly to clarify what you cannot infer. Focus only on what you couldn't infer from the codebase:
313326314327#### Users & Purpose
328328+315329- Who uses this? What's their context when using it?
316330- What job are they trying to get done?
317331- What emotions should the interface evoke? (confidence, delight, calm, urgency, etc.)
318332319333#### Brand & Personality
334334+320335- How would you describe the brand personality in 3 words?
321336- Any reference sites or apps that capture the right feel? What specifically about them?
322337- What should this explicitly NOT look like? Any anti-references?
323338324339#### Aesthetic Preferences
340340+325341- Any strong preferences for visual direction? (minimal, bold, elegant, playful, technical, organic, etc.)
326342- Light mode, dark mode, or both?
327343- Any colors that must be used or avoided?
328344329345#### Accessibility & Inclusion
346346+330347- Specific accessibility requirements? (WCAG level, known user needs)
331348- Considerations for reduced motion, color blindness, or other accommodations?
332349···340357## Design Context
341358342359### Users
360360+343361[Who they are, their context, the job to be done]
344362345363### Brand Personality
364364+346365[Voice, tone, 3-word personality, emotional goals]
347366348367### Aesthetic Direction
368368+349369[Visual tone, references, anti-references, theme]
350370351371### Design Principles
372372+352373[3-5 principles derived from the conversation that should guide all design decisions]
353374```
354375···362383363384## Extract Mode
364385365365-If this skill is invoked with the argument "extract" (e.g., `/impeccable extract [target]`), follow the [extract flow](reference/extract.md). Pass any additional arguments as the extraction target.386386+If this skill is invoked with the argument "extract" (e.g., `/impeccable extract [target]`), follow the [extract flow](reference/extract.md). Pass any additional arguments as the extraction target.
···2233## Color Spaces: Use OKLCH
4455-**Stop using HSL.** Use OKLCH (or LCH) instead. It's perceptually uniform, meaning equal steps in lightness *look* equal—unlike HSL where 50% lightness in yellow looks bright while 50% in blue looks dark.
55+**Stop using HSL.** Use OKLCH (or LCH) instead. It's perceptually uniform, meaning equal steps in lightness _look_ equal—unlike HSL where 50% lightness in yellow looks bright while 50% in blue looks dark.
6677The OKLCH function takes three components: `oklch(lightness chroma hue)` where lightness is 0-100%, chroma is roughly 0-0.4, and hue is 0-360. To build a primary color and its lighter / darker variants, hold the chroma+hue roughly constant and vary the lightness — but **reduce chroma as you approach white or black**, because high chroma at extreme lightness looks garish.
88···22222323A complete system needs:
24242525-| Role | Purpose | Example |
2626-|------|---------|---------|
2727-| **Primary** | Brand, CTAs, key actions | 1 color, 3-5 shades |
2828-| **Neutral** | Text, backgrounds, borders | 9-11 shade scale |
2525+| Role | Purpose | Example |
2626+| ------------ | ----------------------------- | ------------------------- |
2727+| **Primary** | Brand, CTAs, key actions | 1 color, 3-5 shades |
2828+| **Neutral** | Text, backgrounds, borders | 9-11 shade scale |
2929| **Semantic** | Success, error, warning, info | 4 colors, 2-3 shades each |
3030-| **Surface** | Cards, modals, overlays | 2-3 elevation levels |
3030+| **Surface** | Cards, modals, overlays | 2-3 elevation levels |
31313232**Skip secondary/tertiary unless you need them.** Most apps work fine with one accent color. Adding more creates decision fatigue and visual noise.
3333···3939- **30%**: Secondary colors—text, borders, inactive states
4040- **10%**: Accent—CTAs, highlights, focus states
41414242-The common mistake: using the accent color everywhere because it's "the brand color." Accent colors work *because* they're rare. Overuse kills their power.
4242+The common mistake: using the accent color everywhere because it's "the brand color." Accent colors work _because_ they're rare. Overuse kills their power.
43434444## Contrast & Accessibility
45454646### WCAG Requirements
47474848-| Content Type | AA Minimum | AAA Target |
4949-|--------------|------------|------------|
5050-| Body text | 4.5:1 | 7:1 |
5151-| Large text (18px+ or 14px bold) | 3:1 | 4.5:1 |
5252-| UI components, icons | 3:1 | 4.5:1 |
5353-| Non-essential decorations | None | None |
4848+| Content Type | AA Minimum | AAA Target |
4949+| ------------------------------- | ---------- | ---------- |
5050+| Body text | 4.5:1 | 7:1 |
5151+| Large text (18px+ or 14px bold) | 3:1 | 4.5:1 |
5252+| UI components, icons | 3:1 | 4.5:1 |
5353+| Non-essential decorations | None | None |
54545555**The gotcha**: Placeholder text still needs 4.5:1. That light gray placeholder you see everywhere? Usually fails WCAG.
5656···83838484You can't just swap colors. Dark mode requires different design decisions:
85858686-| Light Mode | Dark Mode |
8787-|------------|-----------|
8888-| Shadows for depth | Lighter surfaces for depth (no shadows) |
8989-| Dark text on light | Light text on dark (reduce font weight) |
9090-| Vibrant accents | Desaturate accents slightly |
9191-| White backgrounds | Never pure black—use dark gray (oklch 12-18%) |
8686+| Light Mode | Dark Mode |
8787+| ------------------ | --------------------------------------------- |
8888+| Shadows for depth | Lighter surfaces for depth (no shadows) |
8989+| Dark text on light | Light text on dark (reduce font weight) |
9090+| Vibrant accents | Desaturate accents slightly |
9191+| White backgrounds | Never pure black—use dark gray (oklch 12-18%) |
92929393In dark mode, depth comes from surface lightness, not shadow. Build a 3-step surface scale where higher elevations are lighter (e.g. 15% / 20% / 25% lightness). Use the SAME hue and chroma as your brand color (whatever it is for THIS project — do not reach for blue) and only vary the lightness. Reduce body text weight slightly (e.g. 350 instead of 400) because light text on dark reads as heavier than dark text on light.
9494
+3
.agents/skills/impeccable/reference/craft.md
···1818- [typography.md](typography.md) for type hierarchy
19192020Then add references based on the brief's needs:
2121+2122- Complex interactions or forms? Consult [interaction-design.md](interaction-design.md)
2223- Animation or transitions? Consult [motion-design.md](motion-design.md)
2324- Color-heavy or themed? Consult [color-and-contrast.md](color-and-contrast.md)
···37387. **Responsive**: Adapt for different viewports. Don't just shrink; redesign for the context.
38393940### During Build
4141+4042- Test with real (or realistic) data at every step, not placeholder text
4143- Check each state as you build it, not all at the end
4244- If you discover a design question, stop and ask rather than guessing
···6264## Step 5: Present
63656466Present the result to the user:
6767+6568- Show the feature in its primary state
6669- Walk through the key states (empty, error, responsive)
6770- Explain design decisions that connect back to the design brief
+1
.agents/skills/impeccable/reference/extract.md
···6060- Update any Storybook or component catalog
61616262**NEVER**:
6363+6364- Extract one-off, context-specific implementations without generalization
6465- Create components so generic they are useless
6566- Extract without considering existing design system conventions
···2121### The Squint Test
22222323Blur your eyes (or screenshot and blur). Can you still identify:
2424+2425- The most important element?
2526- The second most important?
2627- Clear groupings?
···31323233Don't rely on size alone. Combine:
33343434-| Tool | Strong Hierarchy | Weak Hierarchy |
3535-|------|------------------|----------------|
3636-| **Size** | 3:1 ratio or more | <2:1 ratio |
3737-| **Weight** | Bold vs Regular | Medium vs Regular |
3838-| **Color** | High contrast | Similar tones |
3939-| **Position** | Top/left (primary) | Bottom/right |
4040-| **Space** | Surrounded by white space | Crowded |
3535+| Tool | Strong Hierarchy | Weak Hierarchy |
3636+| ------------ | ------------------------- | ----------------- |
3737+| **Size** | 3:1 ratio or more | <2:1 ratio |
3838+| **Weight** | Bold vs Regular | Medium vs Regular |
3939+| **Color** | High contrast | Similar tones |
4040+| **Position** | Top/left (primary) | Bottom/right |
4141+| **Space** | Surrounded by white space | Crowded |
41424243**The best hierarchy uses 2-3 dimensions at once**: A heading that's larger, bolder, AND has more space above it.
4344···79808081```css
8182.icon-button {
8282- width: 24px; /* Visual size */
8383+ width: 24px; /* Visual size */
8384 height: 24px;
8485 position: relative;
8586}
86878788.icon-button::before {
8888- content: '';
8989+ content: "";
8990 position: absolute;
9090- inset: -10px; /* Expand tap target to 44px */
9191+ inset: -10px; /* Expand tap target to 44px */
9192}
9293```
9394
+35-23
.agents/skills/impeccable/reference/typography.md
···12121313**Use fewer sizes with more contrast.** A 5-size system covers most needs:
14141515-| Role | Typical Ratio | Use Case |
1616-|------|---------------|----------|
1717-| xs | 0.75rem | Captions, legal |
1818-| sm | 0.875rem | Secondary UI, metadata |
1919-| base | 1rem | Body text |
2020-| lg | 1.25-1.5rem | Subheadings, lead text |
2121-| xl+ | 2-4rem | Headlines, hero text |
1515+| Role | Typical Ratio | Use Case |
1616+| ---- | ------------- | ---------------------- |
1717+| xs | 0.75rem | Captions, legal |
1818+| sm | 0.875rem | Secondary UI, metadata |
1919+| base | 1rem | Body text |
2020+| lg | 1.25-1.5rem | Subheadings, lead text |
2121+| xl+ | 2-4rem | Headlines, hero text |
22222323Popular ratios: 1.25 (major third), 1.333 (perfect fourth), 1.5 (perfect fifth). Pick one and commit.
2424···34343535**Avoid the invisible defaults**: Inter, Roboto, Open Sans, Lato, Montserrat. These are everywhere, making your design feel generic. They're fine for documentation or tools where personality isn't the goal—but if you want distinctive design, look elsewhere.
36363737-**Pick the font from the brief, not from a category preset.** The most common AI typography failure is reaching for the same "tasteful" font for every editorial brief, the same "modern" font for every tech brief, the same "elegant serif" for every premium brief. Those reflexes produce monoculture across projects. The right font is one whose physical character matches *this specific* brand, audience, and moment.
3737+**Pick the font from the brief, not from a category preset.** The most common AI typography failure is reaching for the same "tasteful" font for every editorial brief, the same "modern" font for every tech brief, the same "elegant serif" for every premium brief. Those reflexes produce monoculture across projects. The right font is one whose physical character matches _this specific_ brand, audience, and moment.
38383939A working selection process:
404041411. Read the brief once. Write down three concrete words for the brand voice. Not "modern" or "elegant" — those are dead categories. Try "warm and mechanical and opinionated" or "calm and clinical and careful" or "fast and dense and unimpressed" or "handmade and a little weird."
4242-2. Now imagine the font as a physical object the brand could ship: a typewriter ribbon, a hand-lettered shop sign, a 1970s mainframe terminal manual, a fabric label on the inside of a coat, a museum exhibit caption, a tax form, a children's book printed on cheap newsprint. Whichever physical object fits the three words is pointing at the right *kind* of typeface.
4242+2. Now imagine the font as a physical object the brand could ship: a typewriter ribbon, a hand-lettered shop sign, a 1970s mainframe terminal manual, a fabric label on the inside of a coat, a museum exhibit caption, a tax form, a children's book printed on cheap newsprint. Whichever physical object fits the three words is pointing at the right _kind_ of typeface.
43433. Browse a font catalog (Google Fonts, Pangram Pangram, Adobe Fonts, Future Fonts, ABC Dinamo) with that physical object in mind. **Reject the first thing that "looks designy."** That's your trained-everywhere reflex. Keep looking.
44444. Avoid your defaults from previous projects. If you find yourself reaching for the same display font you used last time, make yourself pick something else.
45454646**Anti-reflexes worth defending against**:
4747+4748- A technical/utilitarian brief does NOT need a serif "for warmth." Most tech tools should look like tech tools.
4849- An editorial/premium brief does NOT need the same expressive serif everyone is using right now. Premium can be Swiss-modern, can be neo-grotesque, can be a literal monospace, can be a quiet humanist sans.
4950- A children's product does NOT need a rounded display font. Kids' books use real type.
···5657**The non-obvious truth**: You often don't need a second font. One well-chosen font family in multiple weights creates cleaner hierarchy than two competing typefaces. Only add a second font when you need genuine contrast (e.g., display headlines + body serif).
57585859When pairing, contrast on multiple axes:
6060+5961- Serif + Sans (structure contrast)
6062- Geometric + Humanist (personality contrast)
6163- Condensed display + Wide body (proportion contrast)
···6971```css
7072/* 1. Use font-display: swap for visibility */
7173@font-face {
7272- font-family: 'CustomFont';
7373- src: url('font.woff2') format('woff2');
7474+ font-family: "CustomFont";
7575+ src: url("font.woff2") format("woff2");
7476 font-display: swap;
7577}
76787779/* 2. Match fallback metrics to minimize shift */
7880@font-face {
7979- font-family: 'CustomFont-Fallback';
8080- src: local('Arial');
8181- size-adjust: 105%; /* Scale to match x-height */
8282- ascent-override: 90%; /* Match ascender height */
8383- descent-override: 20%; /* Match descender depth */
8484- line-gap-override: 10%; /* Match line spacing */
8181+ font-family: "CustomFont-Fallback";
8282+ src: local("Arial");
8383+ size-adjust: 105%; /* Scale to match x-height */
8484+ ascent-override: 90%; /* Match ascender height */
8585+ descent-override: 20%; /* Match descender depth */
8686+ line-gap-override: 10%; /* Match line spacing */
8587}
86888789body {
8888- font-family: 'CustomFont', 'CustomFont-Fallback', sans-serif;
9090+ font-family: "CustomFont", "CustomFont-Fallback", sans-serif;
8991}
9092```
9193···107109108110```css
109111/* Tabular numbers for data alignment */
110110-.data-table { font-variant-numeric: tabular-nums; }
112112+.data-table {
113113+ font-variant-numeric: tabular-nums;
114114+}
111115112116/* Proper fractions */
113113-.recipe-amount { font-variant-numeric: diagonal-fractions; }
117117+.recipe-amount {
118118+ font-variant-numeric: diagonal-fractions;
119119+}
114120115121/* Small caps for abbreviations */
116116-abbr { font-variant-caps: all-small-caps; }
122122+abbr {
123123+ font-variant-caps: all-small-caps;
124124+}
117125118126/* Disable ligatures in code */
119119-code { font-variant-ligatures: none; }
127127+code {
128128+ font-variant-ligatures: none;
129129+}
120130121131/* Enable kerning (usually on by default, but be explicit) */
122122-body { font-kerning: normal; }
132132+body {
133133+ font-kerning: normal;
134134+}
123135```
124136125137Check what features your font supports at [Wakamai Fondue](https://wakamaifondue.com/).
+33-32
.agents/skills/impeccable/reference/ux-writing.md
···4455**Never use "OK", "Submit", or "Yes/No".** These are lazy and ambiguous. Use specific verb + object patterns:
6677-| Bad | Good | Why |
88-|-----|------|-----|
99-| OK | Save changes | Says what will happen |
1010-| Submit | Create account | Outcome-focused |
1111-| Yes | Delete message | Confirms the action |
1212-| Cancel | Keep editing | Clarifies what "cancel" means |
1313-| Click here | Download PDF | Describes the destination |
77+| Bad | Good | Why |
88+| ---------- | -------------- | ----------------------------- |
99+| OK | Save changes | Says what will happen |
1010+| Submit | Create account | Outcome-focused |
1111+| Yes | Delete message | Confirms the action |
1212+| Cancel | Keep editing | Clarifies what "cancel" means |
1313+| Click here | Download PDF | Describes the destination |
14141515**For destructive actions**, name the destruction:
1616+1617- "Delete" not "Remove" (delete is permanent, remove implies recoverable)
1718- "Delete 5 items" not "Delete selected" (show the count)
1819···22232324### Error Message Templates
24252525-| Situation | Template |
2626-|-----------|----------|
2727-| **Format error** | "[Field] needs to be [format]. Example: [example]" |
2828-| **Missing required** | "Please enter [what's missing]" |
2929-| **Permission denied** | "You don't have access to [thing]. [What to do instead]" |
3030-| **Network error** | "We couldn't reach [thing]. Check your connection and [action]." |
3131-| **Server error** | "Something went wrong on our end. We're looking into it. [Alternative action]" |
2626+| Situation | Template |
2727+| --------------------- | ------------------------------------------------------------------------------ |
2828+| **Format error** | "[Field] needs to be [format]. Example: [example]" |
2929+| **Missing required** | "Please enter [what's missing]" |
3030+| **Permission denied** | "You don't have access to [thing]. [What to do instead]" |
3131+| **Network error** | "We couldn't reach [thing]. Check your connection and [action]." |
3232+| **Server error** | "Something went wrong on our end. We're looking into it. [Alternative action]" |
32333334### Don't Blame the User
3435···4344**Voice** is your brand's personality—consistent everywhere.
4445**Tone** adapts to the moment.
45464646-| Moment | Tone Shift |
4747-|--------|------------|
4848-| Success | Celebratory, brief: "Done! Your changes are live." |
4949-| Error | Empathetic, helpful: "That didn't work. Here's what to try..." |
5050-| Loading | Reassuring: "Saving your work..." |
5151-| Destructive confirm | Serious, clear: "Delete this project? This can't be undone." |
4747+| Moment | Tone Shift |
4848+| ------------------- | -------------------------------------------------------------- |
4949+| Success | Celebratory, brief: "Done! Your changes are live." |
5050+| Error | Empathetic, helpful: "That didn't work. Here's what to try..." |
5151+| Loading | Reassuring: "Saving your work..." |
5252+| Destructive confirm | Serious, clear: "Delete this project? This can't be undone." |
52535354**Never use humor for errors.** Users are already frustrated. Be helpful, not cute.
5455···62636364German text is ~30% longer than English. Allocate space:
64656565-| Language | Expansion |
6666-|----------|-----------|
6767-| German | +30% |
6868-| French | +20% |
6969-| Finnish | +30-40% |
7070-| Chinese | -30% (fewer chars, but same width) |
6666+| Language | Expansion |
6767+| -------- | ---------------------------------- |
6868+| German | +30% |
6969+| French | +20% |
7070+| Finnish | +30-40% |
7171+| Chinese | -30% (fewer chars, but same width) |
71727273### Translation-Friendly Patterns
7374···77787879Pick one term and stick with it:
79808080-| Inconsistent | Consistent |
8181-|--------------|------------|
8282-| Delete / Remove / Trash | Delete |
8383-| Settings / Preferences / Options | Settings |
8484-| Sign in / Log in / Enter | Sign in |
8585-| Create / Add / New | Create |
8181+| Inconsistent | Consistent |
8282+| -------------------------------- | ---------- |
8383+| Delete / Remove / Trash | Delete |
8484+| Settings / Preferences / Options | Settings |
8585+| Sign in / Log in / Enter | Sign in |
8686+| Create / Add / New | Create |
86878788Build a terminology glossary and enforce it. Variety creates confusion.
8889
···1818 * 4. Removes the corresponding entries from skills-lock.json.
1919 */
20202121-import { existsSync, readFileSync, writeFileSync, rmSync, readdirSync, statSync, lstatSync, unlinkSync } from 'node:fs';
2222-import { join, resolve } from 'node:path';
2121+import { existsSync, readFileSync, writeFileSync, rmSync, lstatSync, unlinkSync } from "node:fs";
2222+import { join, resolve } from "node:path";
23232424// Skills that were renamed, merged, or folded in v2.0 and v2.1.
2525const DEPRECATED_NAMES = [
2626- 'frontend-design', // renamed to impeccable (v2.0)
2727- 'teach-impeccable', // folded into /impeccable teach (v2.0)
2828- 'arrange', // renamed to layout (v2.1)
2929- 'normalize', // merged into polish (v2.1)
3030- 'onboard', // merged into harden (v2.1)
3131- 'extract', // merged into /impeccable extract (v2.1)
2626+ "frontend-design", // renamed to impeccable (v2.0)
2727+ "teach-impeccable", // folded into /impeccable teach (v2.0)
2828+ "arrange", // renamed to layout (v2.1)
2929+ "normalize", // merged into polish (v2.1)
3030+ "onboard", // merged into harden (v2.1)
3131+ "extract", // merged into /impeccable extract (v2.1)
3232];
33333434// All known harness directories that may contain a skills/ subfolder.
3535const HARNESS_DIRS = [
3636- '.claude', '.cursor', '.gemini', '.codex', '.agents',
3737- '.trae', '.trae-cn', '.pi', '.opencode', '.kiro', '.rovodev',
3636+ ".claude",
3737+ ".cursor",
3838+ ".gemini",
3939+ ".codex",
4040+ ".agents",
4141+ ".trae",
4242+ ".trae-cn",
4343+ ".pi",
4444+ ".opencode",
4545+ ".kiro",
4646+ ".rovodev",
3847];
39484049/**
···4352 */
4453export function findProjectRoot(startDir = process.cwd()) {
4554 let dir = resolve(startDir);
4646- const { root } = { root: '/' };
5555+ const { root } = { root: "/" };
4756 while (dir !== root) {
4857 if (
4949- existsSync(join(dir, 'package.json')) ||
5050- existsSync(join(dir, '.git')) ||
5151- existsSync(join(dir, 'skills-lock.json'))
5858+ existsSync(join(dir, "package.json")) ||
5959+ existsSync(join(dir, ".git")) ||
6060+ existsSync(join(dir, "skills-lock.json"))
5261 ) {
5362 return dir;
5463 }
5555- const parent = resolve(dir, '..');
6464+ const parent = resolve(dir, "..");
5665 if (parent === dir) break;
5766 dir = parent;
5867 }
···6574 * Returns false for non-existent paths or skills that don't match.
6675 */
6776export function isImpeccableSkill(skillDir) {
6868- const skillMd = join(skillDir, 'SKILL.md');
7777+ const skillMd = join(skillDir, "SKILL.md");
6978 if (!existsSync(skillMd)) return false;
7079 try {
7171- const content = readFileSync(skillMd, 'utf-8');
8080+ const content = readFileSync(skillMd, "utf-8");
7281 return /impeccable/i.test(content);
7382 } catch {
7483 return false;
···95104export function findSkillsDirs(projectRoot) {
96105 const dirs = [];
97106 for (const harness of HARNESS_DIRS) {
9898- const candidate = join(projectRoot, harness, 'skills');
107107+ const candidate = join(projectRoot, harness, "skills");
99108 if (existsSync(candidate)) {
100109 dirs.push(candidate);
101110 }
···154163 * Returns the list of removed skill names.
155164 */
156165export function cleanSkillsLock(projectRoot) {
157157- const lockPath = join(projectRoot, 'skills-lock.json');
166166+ const lockPath = join(projectRoot, "skills-lock.json");
158167 if (!existsSync(lockPath)) return [];
159168160169 let lock;
161170 try {
162162- lock = JSON.parse(readFileSync(lockPath, 'utf-8'));
171171+ lock = JSON.parse(readFileSync(lockPath, "utf-8"));
163172 } catch {
164173 return [];
165174 }
166175167167- if (!lock.skills || typeof lock.skills !== 'object') return [];
176176+ if (!lock.skills || typeof lock.skills !== "object") return [];
168177169178 const targets = buildTargetNames();
170179 const removed = [];
···173182 const entry = lock.skills[name];
174183 if (!entry) continue;
175184 // Only remove if it belongs to impeccable
176176- if (entry.source === 'pbakaus/impeccable') {
185185+ if (entry.source === "pbakaus/impeccable") {
177186 delete lock.skills[name];
178187 removed.push(name);
179188 }
180189 }
181190182191 if (removed.length > 0) {
183183- writeFileSync(lockPath, JSON.stringify(lock, null, 2) + '\n', 'utf-8');
192192+ writeFileSync(lockPath, JSON.stringify(lock, null, 2) + "\n", "utf-8");
184193 }
185194186195 return removed;
···200209if (process.argv[1] && resolve(process.argv[1]) === resolve(new URL(import.meta.url).pathname)) {
201210 const result = cleanup();
202211 if (result.deletedPaths.length === 0 && result.removedLockEntries.length === 0) {
203203- console.log('No deprecated Impeccable skills found. Nothing to clean up.');
212212+ console.log("No deprecated Impeccable skills found. Nothing to clean up.");
204213 } else {
205214 if (result.deletedPaths.length > 0) {
206215 console.log(`Removed ${result.deletedPaths.length} deprecated skill(s):`);
207216 for (const p of result.deletedPaths) console.log(` - ${p}`);
208217 }
209218 if (result.removedLockEntries.length > 0) {
210210- console.log(`Cleaned ${result.removedLockEntries.length} entry/entries from skills-lock.json:`);
219219+ console.log(
220220+ `Cleaned ${result.removedLockEntries.length} entry/entries from skills-lock.json:`,
221221+ );
211222 for (const name of result.removedLockEntries) console.log(` - ${name}`);
212223 }
213224 }
+2-1
.agents/skills/layout/SKILL.md
···103103- If an icon looks visually off-center despite being geometrically centered, nudge it — but only if you're confident it actually looks wrong. Don't adjust speculatively.
104104105105**NEVER**:
106106+106107- Use arbitrary spacing values outside your scale
107108- Make all spacing equal — variety creates hierarchy
108109- Wrap everything in cards — not everything needs a container
···122123- **Consistency**: Is the spacing system applied uniformly?
123124- **Responsiveness**: Does the layout adapt gracefully across screen sizes?
124125125125-Remember: Space is the most underused design tool. A layout with the right rhythm and hierarchy can make even simple content feel polished and intentional.126126+Remember: Space is the most underused design tool. A layout with the right rhythm and hierarchy can make even simple content feel polished and intentional.
+31-9
.agents/skills/optimize/SKILL.md
···3434### Loading Performance
35353636**Optimize Images**:
3737+3738- Use modern formats (WebP, AVIF)
3839- Proper sizing (don't load 3000px image for 300px display)
3940- Lazy loading for below-fold images
···4243- Use CDN for faster delivery
43444445```html
4545-<img
4646+<img
4647 src="hero.webp"
4748 srcset="hero-400.webp 400w, hero-800.webp 800w, hero-1200.webp 1200w"
4849 sizes="(max-width: 400px) 400px, (max-width: 800px) 800px, 1200px"
···5253```
53545455**Reduce JavaScript Bundle**:
5656+5557- Code splitting (route-based, component-based)
5658- Tree shaking (remove unused code)
5759- Remove unused dependencies
···60626163```javascript
6264// Lazy load heavy component
6363-const HeavyChart = lazy(() => import('./HeavyChart'));
6565+const HeavyChart = lazy(() => import("./HeavyChart"));
6466```
65676668**Optimize CSS**:
6969+6770- Remove unused CSS
6871- Critical CSS inline, rest async
6972- Minimize CSS files
7073- Use CSS containment for independent regions
71747275**Optimize Fonts**:
7676+7377- Use `font-display: swap` or `optional`
7478- Subset fonts (only characters you need)
7579- Preload critical fonts
···78827983```css
8084@font-face {
8181- font-family: 'CustomFont';
8282- src: url('/fonts/custom.woff2') format('woff2');
8585+ font-family: "CustomFont";
8686+ src: url("/fonts/custom.woff2") format("woff2");
8387 font-display: swap; /* Show fallback immediately */
8488 unicode-range: U+0020-007F; /* Basic Latin only */
8589}
8690```
87918892**Optimize Loading Strategy**:
9393+8994- Critical resources first (async/defer non-critical)
9095- Preload critical assets
9196- Prefetch likely next pages
···95100### Rendering Performance
9610197102**Avoid Layout Thrashing**:
103103+98104```javascript
99105// ❌ Bad: Alternating reads and writes (causes reflows)
100100-elements.forEach(el => {
106106+elements.forEach((el) => {
101107 const height = el.offsetHeight; // Read (forces layout)
102108 el.style.height = height * 2; // Write
103109});
104110105111// ✅ Good: Batch reads, then batch writes
106106-const heights = elements.map(el => el.offsetHeight); // All reads
112112+const heights = elements.map((el) => el.offsetHeight); // All reads
107113elements.forEach((el, i) => {
108114 el.style.height = heights[i] * 2; // All writes
109115});
110116```
111117112118**Optimize Rendering**:
119119+113120- Use CSS `contain` property for independent regions
114121- Minimize DOM depth (flatter is faster)
115122- Reduce DOM size (fewer elements)
···117124- Virtual scrolling for very long lists (react-window, react-virtualized)
118125119126**Reduce Paint & Composite**:
127127+120128- Use `transform` and `opacity` for animations (GPU-accelerated)
121129- Avoid animating layout properties (width, height, top, left)
122130- Use `will-change` sparingly for known expensive operations
···125133### Animation Performance
126134127135**GPU Acceleration**:
136136+128137```css
129138/* ✅ GPU-accelerated (fast) */
130139.animated {
···140149```
141150142151**Smooth 60fps**:
152152+143153- Target 16ms per frame (60fps)
144154- Use `requestAnimationFrame` for JS animations
145155- Debounce/throttle scroll handlers
···147157- Avoid long-running JavaScript during animations
148158149159**Intersection Observer**:
160160+150161```javascript
151162// Efficiently detect when elements enter viewport
152163const observer = new IntersectionObserver((entries) => {
153153- entries.forEach(entry => {
164164+ entries.forEach((entry) => {
154165 if (entry.isIntersecting) {
155166 // Element is visible, lazy load or animate
156167 }
···161172### React/Framework Optimization
162173163174**React-specific**:
175175+164176- Use `memo()` for expensive components
165177- `useMemo()` and `useCallback()` for expensive computations
166178- Virtualize long lists
···169181- Use React DevTools Profiler
170182171183**Framework-agnostic**:
184184+172185- Minimize re-renders
173186- Debounce expensive operations
174187- Memoize computed values
···177190### Network Optimization
178191179192**Reduce Requests**:
193193+180194- Combine small files
181195- Use SVG sprites for icons
182196- Inline small critical assets
183197- Remove unused third-party scripts
184198185199**Optimize APIs**:
200200+186201- Use pagination (don't load everything)
187202- GraphQL to request only needed fields
188203- Response compression (gzip, brotli)
···190205- CDN for static assets
191206192207**Optimize for Slow Connections**:
208208+193209- Adaptive loading based on connection (navigator.connection)
194210- Optimistic UI updates
195211- Request prioritization
···198214## Core Web Vitals Optimization
199215200216### Largest Contentful Paint (LCP < 2.5s)
217217+201218- Optimize hero images
202219- Inline critical CSS
203220- Preload key resources
···205222- Server-side rendering
206223207224### First Input Delay (FID < 100ms) / INP (< 200ms)
225225+208226- Break up long tasks
209227- Defer non-critical JavaScript
210228- Use web workers for heavy computation
211229- Reduce JavaScript execution time
212230213231### Cumulative Layout Shift (CLS < 0.1)
232232+214233- Set dimensions on images and videos
215234- Don't inject content above existing content
216235- Use `aspect-ratio` CSS property
···227246## Performance Monitoring
228247229248**Tools to use**:
249249+230250- Chrome DevTools (Lighthouse, Performance panel)
231251- WebPageTest
232252- Core Web Vitals (Chrome UX Report)
···234254- Performance monitoring (Sentry, DataDog, New Relic)
235255236256**Key metrics**:
257257+237258- LCP, FID/INP, CLS (Core Web Vitals)
238259- Time to Interactive (TTI)
239260- First Contentful Paint (FCP)
···244265**IMPORTANT**: Measure on real devices with real network conditions. Desktop Chrome with fast connection isn't representative.
245266246267**NEVER**:
268268+247269- Optimize without measuring (premature optimization)
248270- Sacrifice accessibility for performance
249271- Break functionality while optimizing
···261283- **Different devices**: Test on low-end Android, not just flagship iPhone
262284- **Slow connections**: Throttle to 3G, test experience
263285- **No regressions**: Ensure functionality still works
264264-- **User perception**: Does it *feel* faster?
286286+- **User perception**: Does it _feel_ faster?
265287266266-Remember: Performance is a feature. Fast experiences feel more responsive, more polished, more professional. Optimize systematically, measure ruthlessly, and prioritize user-perceived performance.288288+Remember: Performance is a feature. Fast experiences feel more responsive, more polished, more professional. Optimize systematically, measure ruthlessly, and prioritize user-perceived performance.
+21-4
.agents/skills/overdrive/SKILL.md
···4242The right kind of technical ambition depends entirely on what you're working with. Before choosing a technique, ask: **what would make a user of THIS specific interface say "wow, that's nice"?**
43434444### For visual/marketing surfaces
4545+4546Pages, hero sections, landing pages, portfolios — the "wow" is often sensory: a scroll-driven reveal, a shader background, a cinematic page transition, generative art that responds to the cursor.
46474748### For functional UI
4949+4850Tables, forms, dialogs, navigation — the "wow" is in how it FEELS: a dialog that morphs from the button that triggered it via View Transitions, a data table that renders 100k rows at 60fps via virtual scrolling, a form with streaming validation that feels instant, drag-and-drop with spring physics.
49515052### For performance-critical UI
5353+5154The "wow" is invisible but felt: a search that filters 50k items without a flicker, a complex form that never blocks the main thread, an image editor that processes in near-real-time. The interface just never hesitates.
52555356### For data-heavy interfaces
5757+5458Charts and dashboards — the "wow" is in fluidity: GPU-accelerated rendering via Canvas/WebGL for massive datasets, animated transitions between data states, force-directed graph layouts that settle naturally.
55595660**The common thread**: something about the implementation goes beyond what users expect from a web interface. The technique serves the experience, not the other way around.
···6064Organized by what you're trying to achieve, not by technology name.
61656266### Make transitions feel cinematic
6767+6368- **View Transitions API** (same-document: all browsers; cross-document: no Firefox) — shared element morphing between states. A list item expanding into a detail page. A button morphing into a dialog. This is the closest thing to native FLIP animations.
6469- **`@starting-style`** (all browsers) — animate elements from `display: none` to visible with CSS only, including entry keyframes
6570- **Spring physics** — natural motion with mass, tension, and damping instead of cubic-bezier. Libraries: motion (formerly Framer Motion), GSAP, or roll your own spring solver.
66716772### Tie animation to scroll position
7373+6874- **Scroll-driven animations** (`animation-timeline: scroll()`) — CSS-only, no JS. Parallax, progress bars, reveal sequences all driven by scroll position. (Chrome/Edge/Safari; Firefox: flag only — always provide a static fallback)
69757076### Render beyond CSS
7777+7178- **WebGL** (all browsers) — shader effects, post-processing, particle systems. Libraries: Three.js, OGL (lightweight), regl. Use for effects CSS can't express.
7279- **WebGPU** (Chrome/Edge; Safari partial; Firefox: flag only) — next-gen GPU compute. More powerful than WebGL but limited browser support. Always fall back to WebGL2.
7380- **Canvas 2D / OffscreenCanvas** — custom rendering, pixel manipulation, or moving heavy rendering off the main thread entirely via Web Workers + OffscreenCanvas.
7481- **SVG filter chains** — displacement maps, turbulence, morphology for organic distortion effects. CSS-animatable.
75827683### Make data feel alive
8484+7785- **Virtual scrolling** — render only visible rows for tables/lists with tens of thousands of items. No library required for simple cases; TanStack Virtual for complex ones.
7886- **GPU-accelerated charts** — Canvas or WebGL-rendered data visualization for datasets too large for SVG/DOM. Libraries: deck.gl, regl-based custom renderers.
7987- **Animated data transitions** — morph between chart states rather than replacing. D3's `transition()` or View Transitions for DOM-based charts.
80888189### Animate complex properties
9090+8291- **`@property`** (all browsers) — register custom CSS properties with types, enabling animation of gradients, colors, and complex values that CSS can't normally interpolate.
8392- **Web Animations API** (all browsers) — JavaScript-driven animations with the performance of CSS. Composable, cancellable, reversible. The foundation for complex choreography.
84938594### Push performance boundaries
9595+8696- **Web Workers** — move computation off the main thread. Heavy data processing, image manipulation, search indexing — anything that would cause jank.
8797- **OffscreenCanvas** — render in a Worker thread. The main thread stays free while complex visuals render in the background.
8898- **WASM** — near-native performance for computation-heavy features. Image processing, physics simulations, codecs.
899990100### Interact with the device
101101+91102- **Web Audio API** — spatial audio, audio-reactive visualizations, sonic feedback. Requires user gesture to start.
92103- **Device APIs** — orientation, ambient light, geolocation. Use sparingly and always with user permission.
93104···101112102113```css
103114@supports (animation-timeline: scroll()) {
104104- .hero { animation-timeline: scroll(); }
115115+ .hero {
116116+ animation-timeline: scroll();
117117+ }
105118}
106119```
107120108121```javascript
109109-if ('gpu' in navigator) { /* WebGPU */ }
110110-else if (canvas.getContext('webgl2')) { /* WebGL2 fallback */ }
122122+if ("gpu" in navigator) {
123123+ /* WebGPU */
124124+} else if (canvas.getContext("webgl2")) {
125125+ /* WebGL2 fallback */
126126+}
111127/* CSS-only fallback must still look good */
112128```
113129···124140The gap between "cool" and "extraordinary" is in the last 20% of refinement: the easing curve on a spring animation, the timing offset in a staggered reveal, the subtle secondary motion that makes a transition feel physical. Don't ship the first version that works — ship the version that feels inevitable.
125141126142**NEVER**:
143143+127144- Ignore `prefers-reduced-motion` — this is an accessibility requirement, not a suggestion
128145- Ship effects that cause jank on mid-range devices
129146- Use bleeding-edge APIs without a functional fallback
···139156- **The accessibility test**: Enable reduced motion. Still beautiful?
140157- **The context test**: Does this make sense for THIS brand and audience?
141158142142-Remember: "Technically extraordinary" isn't about using the newest API. It's about making an interface do something users didn't think a website could do.159159+Remember: "Technically extraordinary" isn't about using the newest API. It's about making an interface do something users didn't think a website could do.
+3-1
.agents/skills/polish/SKILL.md
···5757- **Grid adherence**: Elements snap to baseline grid
58585959**Check**:
6060+6061- Enable grid overlay and verify alignment
6162- Check spacing with browser inspector
6263- Test at multiple viewport sizes
···194195**IMPORTANT**: Polish is about details. Zoom in. Squint at it. Use it yourself. The little things add up.
195196196197**NEVER**:
198198+197199- Polish before it's functionally complete
198200- Spend hours on polish if it ships in 30 minutes (triage)
199201- Introduce bugs while polishing (test thoroughly)
···221223- **Consolidate tokens**: If you introduced new values, check whether they should be tokens.
222224- **Verify DRYness**: Look for duplication introduced during polishing and consolidate.
223225224224-Remember: You have impeccable attention to detail and exquisite taste. Polish until it feels effortless, looks intentional, and works flawlessly. Sweat the details - they matter.226226+Remember: You have impeccable attention to detail and exquisite taste. Polish until it feels effortless, looks intentional, and works flawlessly. Sweat the details - they matter.
+7-1
.agents/skills/quieter/SKILL.md
···5252Systematically reduce intensity across these dimensions:
53535454### Color Refinement
5555+5556- **Reduce saturation**: Shift from fully saturated to 70-85% saturation
5657- **Soften palette**: Replace bright colors with muted, sophisticated tones
5758- **Reduce color variety**: Use fewer colors more thoughtfully
···6162- **Never gray on color**: If you have gray text on a colored background, use a darker shade of that color or transparency instead
62636364### Visual Weight Reduction
6565+6466- **Typography**: Reduce font weights (900 → 600, 700 → 500), decrease sizes where appropriate
6567- **Hierarchy through subtlety**: Use weight, size, and space instead of color and boldness
6668- **White space**: Increase breathing room, reduce density
6769- **Borders & lines**: Reduce thickness, decrease opacity, or remove entirely
68706971### Simplification
7272+7073- **Remove decorative elements**: Gradients, shadows, patterns, textures that don't serve purpose
7174- **Simplify shapes**: Reduce border radius extremes, simplify custom shapes
7275- **Reduce layering**: Flatten visual hierarchy where possible
7376- **Clean up effects**: Reduce or remove blur effects, glows, multiple shadows
74777578### Motion Reduction
7979+7680- **Reduce animation intensity**: Shorter distances (10-20px instead of 40px), gentler easing
7781- **Remove decorative animations**: Keep functional motion, remove flourishes
7882- **Subtle micro-interactions**: Replace dramatic effects with gentle feedback
···8084- **Remove animations entirely** if they're not serving a clear purpose
81858286### Composition Refinement
8787+8388- **Reduce scale jumps**: Smaller contrast between sizes creates calmer feeling
8489- **Align to grid**: Bring rogue elements back into systematic alignment
8590- **Even out spacing**: Replace extreme spacing variations with consistent rhythm
86918792**NEVER**:
9393+8894- Make everything the same size/weight (hierarchy still matters)
8995- Remove all color (quiet ≠ grayscale)
9096- Eliminate all personality (maintain character through refinement)
···100106- **Better reading**: Is text easier to read for extended periods?
101107- **Sophistication**: Does it feel more refined and premium?
102108103103-Remember: Quiet design is confident design. It doesn't need to shout. Less is more, but less is also harder. Refine with precision and maintain intentionality.109109+Remember: Quiet design is confident design. It doesn't need to shout. Less is more, but less is also harder. Refine with precision and maintain intentionality.
+6-1
.agents/skills/shape/SKILL.md
···2929Ask these questions in conversation, adapting based on answers. Don't dump them all at once; have a natural dialogue. ask the user directly to clarify what you cannot infer.
30303131### Purpose & Context
3232+3233- What is this feature for? What problem does it solve?
3334- Who specifically will use it? (Not "users"; be specific: role, context, frequency)
3435- What does success look like? How will you know this feature is working?
3536- What's the user's state of mind when they reach this feature? (Rushed? Exploring? Anxious? Focused?)
36373738### Content & Data
3939+3840- What content or data does this feature display or collect?
3941- What are the realistic ranges? (Minimum, typical, maximum, e.g., 0 items, 5 items, 500 items)
4042- What are the edge cases? (Empty state, error state, first-time use, power user)
4143- Is any content dynamic? What changes and how often?
42444345### Design Goals
4646+4447- What's the single most important thing a user should do or understand here?
4548- What should this feel like? (Fast/efficient? Calm/trustworthy? Fun/playful? Premium/refined?)
4649- Are there existing patterns in the product this should be consistent with?
4750- Are there specific examples (inside or outside the product) that capture what you're going for?
48514952### Constraints
5353+5054- Are there technical constraints? (Framework, performance budget, browser support)
5155- Are there content constraints? (Localization, dynamic text length, user-generated content)
5256- Mobile/responsive requirements?
5357- Accessibility requirements beyond WCAG AA?
54585559### Anti-Goals
6060+5661- What should this NOT be? What would be a wrong direction?
5762- What's the biggest risk of getting this wrong?
5863···93989499ask the user directly to clarify what you cannot infer. Get explicit confirmation of the brief before finishing. If the user disagrees with any part, revisit the relevant discovery questions.
951009696-Once confirmed, the brief is complete. The user can now hand it to /impeccable, or use it to guide any other implementation approach. (If the user wants the full discovery-then-build flow in one step, they should use /impeccable craft instead, which runs this skill internally.)101101+Once confirmed, the brief is complete. The user can now hand it to /impeccable, or use it to guide any other implementation approach. (If the user wants the full discovery-then-build flow in one step, they should use /impeccable craft instead, which runs this skill internally.)
+4-1
.agents/skills/typeset/SKILL.md
···6161### Font Selection
62626363If fonts need replacing:
6464+6465- Choose fonts that reflect the brand personality
6566- Pair with genuine contrast (serif + sans, geometric + humanist) — or use a single family in multiple weights
6667- Ensure web font loading doesn't cause layout shift (`font-display: swap`, metric-matched fallbacks)
···6869### Establish Hierarchy
69707071Build a clear type scale:
7272+7173- **5 sizes cover most needs**: caption, secondary, body, subheading, heading
7274- **Use a consistent ratio** between levels (1.25, 1.333, or 1.5)
7375- **Combine dimensions**: Size + weight + color + space for strong hierarchy — don't rely on size alone
···9597- Load only the weights you actually use (each weight adds to page load)
96989799**NEVER**:
100100+98101- Use more than 2-3 font families
99102- Pick sizes arbitrarily — commit to a scale
100103- Set body text below 16px
···113116- **Performance**: Are web fonts loading efficiently without layout shift?
114117- **Accessibility**: Does text meet WCAG contrast ratios? Is it zoomable to 200%?
115118116116-Remember: Typography is the foundation of interface design — it carries the majority of information. Getting it right is the highest-leverage improvement you can make.119119+Remember: Typography is the foundation of interface design — it carries the majority of information. Getting it right is the highest-leverage improvement you can make.