The ultimate design skill for producing distinctive, production-grade frontend interfaces, visual artifacts, and design systems. This skill consolidates best practices from Anthropic's frontend-design, canvas-design, algorithmic-art, and theme-factory skills, Impeccable's 7-domain reference system, VoltAgent's DESIGN.md format, Vercel's React and typography standards, and specialized libraries for sound, haptics, icons, and text animation.
Every output should look like it was built by a senior design engineer who spent days refining it, not generated by an AI in seconds.
These three dials (1-10) control the overall character of the output. Adjust based on what is being built. The user can set these explicitly or they can be inferred from context.
When the user says "make it premium" or "luxury feel," drop VISUAL_DENSITY to 2-3 and MOTION_INTENSITY to 4-5. When they say "dashboard" or "admin panel," raise VISUAL_DENSITY to 7-8. When they say "make it pop" or "wow factor," raise DESIGN_VARIANCE and MOTION_INTENSITY to 7-8.
New to Picasso? Here's the minimum viable workflow:
oklch(0.65 0.25 25) (warm red), oklch(0.55 0.20 160) (teal), oklch(0.60 0.22 300) (violet).#808080 or #000.references/anti-patterns.md before writing any code. It's the most important file.Then follow the full workflow below. Skip nothing.
Before writing any code, read the reference files relevant to the task. Each covers a domain in depth with rules, examples, and anti-patterns. Load only what you need.
Reference FileWhen to Readreferences/typography.mdAny task involving text, fonts, headings, or type hierarchyreferences/color-and-contrast.mdColor palettes, dark mode, accessibility, tinted neutralsreferences/spatial-design.mdLayout, spacing, grids, visual hierarchy, whitespacereferences/depth-and-elevation.mdDual shadows, layering technique, shadow scale, z-index, hover patternsreferences/motion-and-animation.mdTransitions, scroll effects, text morphing, micro-interactionsreferences/interaction-design.mdForms, focus states, loading, empty states, error handlingreferences/responsive-design.mdMobile-first, fluid, container queries, touch targetsreferences/sensory-design.mdUI sound effects, haptic feedback, multi-sensory interfacesreferences/react-patterns.mdReact/Next.js component architecture, hooks, performancereferences/anti-patterns.mdExplicit list of what NOT to do (the most important reference)references/design-system.mdGenerating DESIGN.md files, theming, systematic tokensreferences/generative-art.mdAlgorithmic art, p5.js, seeded randomness, flow fieldsreferences/component-patterns.mdStandard component naming, taxonomy, and state patternsreferences/navigation-patterns.mdBreadcrumbs, sidebar, tabs, bottom bar, mega menus, skip linksreferences/tables-and-forms.mdSortable tables, inline editing, multi-step forms, validationreferences/loading-and-states.mdSkeletons, spinners, empty states, error boundaries, offlinereferences/dark-mode.mdPreference hierarchy, surface elevation, transitions, testingreferences/images-and-media.mdFormat selection, responsive images, favicons, OG imagesreferences/micro-interactions.mdScroll animations, page transitions, gestures, magnetic effectsreferences/i18n-visual-patterns.mdRTL, logical properties, text expansion, CJK, number formattingreferences/brand-and-identity.mdLogo sizing, brand color usage, consistency, lockup variantsreferences/animation-performance.mdCompositor-only props, will-change, layout thrashing, containreferences/code-typography.mdMonospace fonts, syntax highlighting, code blocks, diff viewsreferences/accessibility-wcag.mdWCAG 2.2, ARIA patterns, keyboard nav, screen reader testingreferences/conversion-design.mdLanding pages, CTAs, pricing tables, friction reductionreferences/data-visualization.mdChart selection matrix, dashboard patterns, accessible chartsreferences/modern-css-performance.mdCSS nesting, :has(), View Transitions, Tailwind v4, container queriesreferences/performance-optimization.mdCore Web Vitals, Lighthouse, image optimization, 45 Vercel rulesreferences/style-presets.md22 curated design presets with exact OKLCH values and font pairingsreferences/tools-catalog.mdTool recommendations: torph, soundcn, Lucide, Facehash, better-iconsreferences/ux-psychology.mdGestalt principles, Fitts's Law, Hick's Law, cognitive load, heuristicsreferences/ux-writing.mdError messages, microcopy, terminology, voice and tone, CTAs
This step is non-negotiable. It takes 30 seconds and prevents hours of rework.
Read references/anti-patterns.md — specifically the AI Slop Fingerprint section and Professional Alternatives table. Actually read it, don't skip.
Write out your commitments — before touching code, declare:
Run the 3-Second Test — picture the finished design. Would a designer say "AI-generated" in 3 seconds? If yes, change your commitments.
Check for slop combinations — if 3+ of these are true, STOP and redesign:
HALT CONDITION: If you cannot fill out the commitments above with specific, non-default values, you MUST NOT proceed to Step 1. Go back to the references. Read anti-patterns.md. Try again. There is no "just do it" bypass for this step. The gate exists because without it, every output converges to the same generic AI aesthetic. This is not optional. No code until commitments are written.
Before writing a single line of code, answer these questions internally:
Purpose. What problem does this interface solve? Who uses it? What is the single most important action?
Tone. Commit to a specific aesthetic direction. Not "clean and modern" (that is meaningless). Pick something with teeth: brutalist, editorial, retro-terminal, luxury serif, toy-like, industrial, organic, Swiss grid, art deco, vaporwave, newspaper broadsheet, scientific journal, or something entirely original. The direction should be informed by the content, not applied generically.
Differentiation. What makes this unforgettable? What is the one thing someone will remember after closing the tab? If there is no answer, the design is not ready.
Constraints. Framework requirements, accessibility targets, performance budgets, existing design tokens.
Choose fonts that are distinctive, not default. Never use Inter, Roboto, Arial, or system fonts as primary choices. Pair a display font with a body font. Use a modular type scale (1.25 or 1.333 ratio). Set line heights between 1.4 and 1.6 for body text. Use OpenType features (ligatures, tabular numbers, small caps) when the font supports them. See references/typography.md for the full system.
Build palettes with intention. Use OKLCH for perceptually uniform color manipulation. Always tint neutrals (never use pure gray or pure black). Dominant color with sharp accent outperforms evenly distributed palettes. Test contrast ratios: 4.5:1 minimum for body text, 3:1 for large text and UI elements. See references/color-and-contrast.md.
Use a spacing scale (4px base: 4, 8, 12, 16, 24, 32, 48, 64, 96). Asymmetric layouts, overlapping elements, diagonal flow, and grid-breaking moments create visual interest. Generous negative space communicates confidence. Dense layouts need careful rhythm. See references/spatial-design.md.
Never default to flat solid colors. Create atmosphere with gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, grain overlays, or subtle backdrop filters. Depth comes from elevation systems: consistent shadow scales, surface hierarchy, and z-index discipline.
One well-orchestrated page load with staggered reveals (using animation-delay) creates more impact than scattered micro-interactions. Use CSS transitions for simple state changes. Use framer-motion or the Motion library for React when choreography matters. Never use bounce or elastic easing (it looks dated). Respect prefers-reduced-motion. See references/motion-and-animation.md.
For text morphing effects (counters, status changes, tab labels), use torph (dependency-free, works with React/Vue/Svelte). Import as import { TextMorph } from 'torph/react' and wrap any text that changes dynamically.
For UI sound feedback (clicks, notifications, transitions), use the soundcn pattern: inline base64 audio data URIs with a useSound hook via Web Audio API. Zero dependencies. See references/sensory-design.md.
For mobile web, use the WebHaptics pattern via the Vibration API ( navigator.vibrate()) to provide tactile feedback on button presses, toggles, and destructive actions. Always gate behind feature detection and user preference. See references/sensory-design.md.
Use Lucide React as the default icon library ( lucide-react). For broader searches across 200K+ icons from 150+ collections, use the better-icons CLI pattern: search by keyword, retrieve SVG, sync to project. Prefer outline style for UI, solid for emphasis.
For deterministic avatar generation from strings (usernames, emails, UUIDs), use the Facehash pattern: a React component that generates unique face avatars. Same input always produces the same face. Zero external assets.
When building for claude.ai artifacts (HTML or React), everything goes in one file. No external CSS files, no separate JS. Inline everything. For HTML artifacts, import external scripts only from https://cdnjs.cloudflare.com. For React artifacts, use only available libraries (lucide-react, recharts, d3, Three.js r128, Tone, shadcn/ui, Tailwind core utilities, lodash, mathjs, papaparse, Chart.js).
Follow these rules (see references/react-patterns.md for details):
'use client' only when neededSuspense boundaries with meaningful fallbacksdiv soupAlways define a CSS variable system for colors, spacing, typography, and shadows. This makes themes swappable and dark mode trivial.
css
:root {
--color-surface: #fafaf9;
--color-text: #1c1917;
--color-accent: #dc2626;
--radius: 8px;
--shadow-sm: 0 1px 2px oklch(0% 0 0 / 0.05);
}
Every interface must include: visible focus indicators (never outline: none without replacement), sufficient color contrast, keyboard navigability, ARIA labels on interactive elements without visible text, and alt text on meaningful images. Do not treat accessibility as optional.
Before delivering any interface, run this mental checklist:
prefers-reduced-motion disable non-essential animation?When asked to create a design system or DESIGN.md, follow the VoltAgent/Stitch format. See references/design-system.md for the complete template covering: visual theme and atmosphere, color palette with semantic roles, typography hierarchy, component styling (buttons, cards, inputs, navigation with states), layout principles, depth and elevation system, explicit dos and don'ts, responsive behavior, and an agent prompt guide.
When the task involves algorithmic art, generative visuals, or static poster/print design, see references/generative-art.md. The process: write an algorithmic philosophy (4-6 paragraphs), then express it through p5.js code with seeded randomness, parameter controls, and seed navigation.
These optional directives can be used to steer design refinement:
CommandEffect/auditTechnical quality check: accessibility, performance, responsive/critiqueUX design review: hierarchy, clarity, emotional resonance/polishFinal pass: refine spacing, transitions, copy/simplifyStrip to essence, remove visual noise/animateAdd purposeful motion and transitions/bolderAmplify timid designs with stronger visual choices/quieterTone down overly aggressive designs/normalizeAlign with design system standards/themeGenerate or apply a color/font theme/soundAdd UI sound effects to interactions/hapticsAdd haptic feedback for mobile web/redesignAudit an existing project, identify design problems, fix them systematically/softApply premium soft aesthetic: generous whitespace, depth, smooth spring animations/minimalistApply editorial minimalism: monochrome, crisp borders, inspired by Linear/Notion/brutalistApply raw mechanical aesthetic: Swiss typography meets CRT terminal/stitchGenerate a Google Stitch-compatible DESIGN.md for the current project
The anti-slop gate catches what NOT to do. This section describes what good design feels like -- the positive traits to aim for.
If you can describe these qualities in the output you are building, the design is probably good. If you cannot, revisit Step 1.
These are not best practices. These are things that actually break in production and that AI agents get wrong repeatedly. Each one has burned real time.
Font loading race condition. Google Fonts @import in CSS blocks rendering. The page flashes in the system font, then shifts when the custom font loads. Fix: use <link rel="preload" as="font"> in the <head>, add font-display: swap, and always declare a fallback stack with similar metrics. If you skip this, your type scale is wrong for the first 500ms.
Dark mode contrast passes WCAG but is unreadable. OKLCH 0.55 0.02 230 on 0.11 0.02 230 passes the 4.5:1 ratio check but looks washed out on cheap laptop screens. Always test with a screenshot on an actual dark background, not just the contrast calculator. Text below 0.60 lightness in OKLCH needs extra chroma or a bump to 0.65+.
transition: all causes invisible layout jank. It transitions width, height, padding -- properties that trigger reflow. The page looks fine at 60fps on your M-series Mac but stutters on a 2019 Chromebook. Always specify exact properties: transition: opacity 0.2s, transform 0.3s.
Staggered animations fire on every re-render. CSS animation-delay on child elements replays every time React re-renders the parent. Either use animation-fill-mode: both with a one-shot class that gets removed, or gate the animation behind a data-entered attribute set once on mount.
Responsive "works at breakpoints" but breaks between them. Testing at 375px and 768px looks fine, but at 520px the layout collapses because you used fixed grid-template-columns: repeat(2, 1fr) instead of repeat(auto-fill, minmax(280px, 1fr)). Always test at 480px and 600px too -- these are the kill zones.
Tailwind class strings over 200 characters. Once a class string hits 200+ characters the component is unmaintainable. Extract to a CSS class with @apply, or better yet, use a cn() utility with conditional objects. This isn't a style preference -- it's a readability threshold.
Icon SVGs without aria-hidden="true". Every inline SVG icon announces itself to screen readers as "image" with no label. Decorative icons need aria-hidden="true". Icons that ARE the only content (icon-only buttons) need aria-label on the button instead.
forced-colors mode breaks custom design. Windows High Contrast mode ( @media (forced-colors: active)) overrides custom focus rings, tinted neutrals, and subtle borders. Test with it. Custom focus indicators need forced-color-adjust: none or a Highlight system color fallback.
Missing width/ height on images causes CLS. Every <img> without explicit dimensions (or aspect-ratio) causes Cumulative Layout Shift when it loads. Always set dimensions or use aspect-ratio as a fallback. This is the #1 CLS offender in production.
Autofill styling overrides your inputs. Browsers apply their own background color to autofilled inputs, ignoring your dark mode or custom input styles. Fix with input:-webkit-autofill { -webkit-box-shadow: 0 0 0 1000px var(--surface-1) inset; }.
backdrop-filter: blur() fails with overflow: hidden parent. In some browsers (notably older Safari), backdrop-filter does not render if any ancestor has overflow: hidden. Move the blurred element outside the clipping context or restructure the DOM.
position: fixed breaks inside transform parents. A transform on any ancestor creates a new containing block, making position: fixed behave like position: absolute. Move fixed elements to a body-level portal or remove the ancestor transform.
content-visibility: auto breaks position: sticky. The content-visibility: auto optimization creates a new layout containment context that prevents position: sticky children from working. Either skip content-visibility on sticky containers or restructure the nesting.
scroll-behavior: smooth on html interferes with programmatic scrolling. Setting scroll-behavior: smooth globally makes scrollTo(), scrollIntoView(), and anchor navigation all animate, which breaks instant programmatic jumps. Apply scroll-behavior: smooth per-container instead of on <html>.
Preset style exceptions are not contradictions. Some presets (e.g., Swiss Modern using Archivo, or a retro terminal preset using monospace) intentionally use fonts that appear on the banned list. Presets are scoped exceptions with a clear aesthetic rationale. Do not flag them as anti-slop violations.