tribunal-kit 4.4.0 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/.agent/agents/api-architect.md +66 -66
  2. package/.agent/agents/db-latency-auditor.md +216 -216
  3. package/.agent/agents/precedence-reviewer.md +250 -250
  4. package/.agent/agents/resilience-reviewer.md +88 -88
  5. package/.agent/agents/schema-reviewer.md +67 -67
  6. package/.agent/agents/throughput-optimizer.md +299 -299
  7. package/.agent/agents/ui-ux-auditor.md +292 -292
  8. package/.agent/agents/vitals-reviewer.md +223 -223
  9. package/.agent/scripts/_colors.js +18 -18
  10. package/.agent/scripts/_utils.js +42 -42
  11. package/.agent/scripts/append_flow.js +72 -72
  12. package/.agent/scripts/auto_preview.js +197 -197
  13. package/.agent/scripts/bundle_analyzer.js +290 -290
  14. package/.agent/scripts/case_law_manager.js +17 -6
  15. package/.agent/scripts/checklist.js +266 -266
  16. package/.agent/scripts/colors.js +17 -17
  17. package/.agent/scripts/compress_skills.js +141 -141
  18. package/.agent/scripts/consolidate_skills.js +149 -149
  19. package/.agent/scripts/context_broker.js +611 -609
  20. package/.agent/scripts/deep_compress.js +150 -150
  21. package/.agent/scripts/dependency_analyzer.js +272 -272
  22. package/.agent/scripts/graph_builder.js +313 -311
  23. package/.agent/scripts/graph_visualizer.js +384 -384
  24. package/.agent/scripts/inner_loop_validator.js +451 -465
  25. package/.agent/scripts/lint_runner.js +187 -187
  26. package/.agent/scripts/minify_context.js +100 -100
  27. package/.agent/scripts/mutation_runner.js +280 -280
  28. package/.agent/scripts/patch_skills_meta.js +156 -156
  29. package/.agent/scripts/patch_skills_output.js +244 -244
  30. package/.agent/scripts/schema_validator.js +297 -297
  31. package/.agent/scripts/security_scan.js +303 -303
  32. package/.agent/scripts/session_manager.js +276 -276
  33. package/.agent/scripts/skill_evolution.js +644 -644
  34. package/.agent/scripts/skill_integrator.js +313 -313
  35. package/.agent/scripts/strengthen_skills.js +193 -193
  36. package/.agent/scripts/strip_tribunal.js +47 -47
  37. package/.agent/scripts/swarm_dispatcher.js +360 -360
  38. package/.agent/scripts/test_runner.js +193 -193
  39. package/.agent/scripts/utils.js +32 -32
  40. package/.agent/scripts/verify_all.js +257 -256
  41. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +1 -1
  42. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +1 -1
  43. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +1 -1
  44. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +1 -1
  45. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +1 -1
  46. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +1 -1
  47. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +1 -1
  48. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +1 -1
  49. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
  50. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +1 -1
  51. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +1 -1
  52. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +1 -1
  53. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +1 -1
  54. package/.agent/skills/doc.md +1 -1
  55. package/.agent/skills/knowledge-graph/SKILL.md +52 -52
  56. package/.agent/skills/ui-ux-pro-max/SKILL.md +562 -562
  57. package/.agent/workflows/generate.md +183 -183
  58. package/.agent/workflows/tribunal-speed.md +183 -183
  59. package/README.md +1 -1
  60. package/bin/tribunal-kit.js +76 -87
  61. package/package.json +6 -3
  62. package/scripts/changelog.js +167 -167
  63. package/scripts/sync-version.js +81 -81
  64. package/.agent/history/architecture-explorer.html +0 -352
  65. package/.agent/history/architecture-graph.yaml +0 -109
  66. package/.agent/history/graph-cache.json +0 -215
  67. package/.agent/history/snapshots/migrate_refs.js.json +0 -11
  68. package/.agent/history/snapshots/scripts__changelog.js.json +0 -12
  69. package/.agent/history/snapshots/scripts__sync-version.js.json +0 -11
  70. package/.agent/history/snapshots/scripts__validate-payload.js.json +0 -11
  71. package/.agent/history/snapshots/test__integration__bridges.test.js.json +0 -13
  72. package/.agent/history/snapshots/test__integration__init.test.js.json +0 -13
  73. package/.agent/history/snapshots/test__integration__routing.test.js.json +0 -11
  74. package/.agent/history/snapshots/test__integration__swarm_dispatcher.test.js.json +0 -13
  75. package/.agent/history/snapshots/test__integration__wave2.test.js.json +0 -13
  76. package/.agent/history/snapshots/test__unit__args.test.js.json +0 -10
  77. package/.agent/history/snapshots/test__unit__case_law_manager.test.js.json +0 -10
  78. package/.agent/history/snapshots/test__unit__copyDir.test.js.json +0 -13
  79. package/.agent/history/snapshots/test__unit__graph_tools.test.js.json +0 -11
  80. package/.agent/history/snapshots/test__unit__selfInstall.test.js.json +0 -13
  81. package/.agent/history/snapshots/test__unit__semver.test.js.json +0 -10
  82. package/.agent/history/snapshots/test__unit__swarm_dispatcher.test.js.json +0 -11
  83. package/.agent/scripts/__pycache__/_colors.cpython-311.pyc +0 -0
  84. package/.agent/scripts/__pycache__/_utils.cpython-311.pyc +0 -0
  85. package/.agent/scripts/__pycache__/case_law_manager.cpython-311.pyc +0 -0
@@ -1,562 +1,562 @@
1
- ---
2
- name: ui-ux-pro-max
3
- description: The Picasso Protocol — Elite UI/UX design mastery for web and mobile. Covers visual identity systems, spatial composition, typography mathematics, color science (OKLCH), motion choreography, responsive architecture, dark mode engineering, and anti-AI-slop aesthetics. The definitive skill for building interfaces that feel designed by a human creative director, not an algorithm.
4
- version: 2.0.0
5
- last-updated: 2026-04-29
6
- applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
7
- ---
8
-
9
- # UI/UX Pro Max v2.0 — The Picasso Protocol
10
-
11
- > "Good design is obvious. Great design is transparent." — Joe Sparano
12
-
13
- This skill transforms AI-generated interfaces from generic "AI slop" into portfolio-grade work indistinguishable from a senior designer's output. Every section is a weapon against mediocrity.
14
-
15
- ---
16
-
17
- ## 🚨 Hallucination Traps (Read First — Violations = Instant Rejection)
18
-
19
- ```
20
- ❌ Purple/violet primary color → ✅ The #1 AI cliché. Use amber, teal, coral, slate, or warm neutrals.
21
- ❌ Inter/Roboto/Arial as body font → ✅ Generic. Use Geist, Satoshi, Cabinet Grotesk, General Sans, or Clash Display.
22
- ❌ Hero: left-text + right-image → ✅ Lazy. Use full-bleed, editorial overlap, or typographic-only hero.
23
- ❌ Mesh gradient backgrounds → ✅ The new stock photo. Use grain, solid contrast, or layered depth.
24
- ❌ Border-radius: 8px on everything → ✅ Monotonous. Mix sharp (2px) and soft (20px+) radii for hierarchy.
25
- ❌ Gray text (#888) on white (#fff) → ✅ Fails WCAG AA (3.7:1). Minimum contrast ratio is 4.5:1.
26
- ❌ "Bento box" grid for everything → ✅ Overused. Directional flow, overlap, or editorial asymmetry.
27
- ❌ Card → Card → Card with even spacing → ✅ Visual monotony. Vary sizes, break the grid, create tension.
28
- ❌ box-shadow: 0 2px 8px rgba(0,0,0,0.1) → ✅ Default AI shadow. Use layered multi-shadow for realism.
29
- ❌ Animating opacity + translateY on load → ✅ Every AI does this. Use clip-path reveals, blur-in, or scale-from-origin.
30
- ❌ Using px for font-size → ✅ Use rem (scales with user preference) or clamp() for fluid type.
31
- ❌ White (#FFFFFF) backgrounds → ✅ Harsh. Use off-white (#FAFAF8, #F5F3EF) or tinted neutrals.
32
- ```
33
-
34
- ---
35
-
36
- ## 1. The Identity System (Decide Before You Code)
37
-
38
- Before writing a single `div`, commit to a **visual identity**. This is the most important decision.
39
-
40
- ### The Spectrum of Intention
41
- ```
42
- PICK ONE direction — do NOT blend without purpose:
43
-
44
- Brutalist → Raw, exposed structure, monospace, high-contrast, no rounded corners
45
- Editorial → Magazine-inspired, dramatic type scale, generous whitespace, serif headlines
46
- Neo-Glassmorphism → Translucent layers, blur, light borders, floating panels, depth
47
- Soft Minimal → Warm neutrals, subtle shadows, rounded forms, breathing room
48
- Dark Luxury → True black (#09090B), gold/amber accents, thin weights, restrained motion
49
- Neon Cyberpunk → Dark base, vivid saturated accents, glow effects, sharp geometry
50
- Organic Natural → Earth tones, rounded blobs, hand-drawn feel, textured backgrounds
51
- Swiss Precision → Grid-locked, Helvetica-lineage type, clinical whitespace, no decoration
52
- Retro Analog → Warm grain, rounded type, muted palettes, physical texture
53
- ```
54
-
55
- ### Identity Lockfile (Define These 7 Tokens)
56
- ```css
57
- /* EVERY project must define these before any component work */
58
- :root {
59
- --font-display: 'Clash Display', sans-serif; /* Headlines — characterful */
60
- --font-body: 'Satoshi', sans-serif; /* Body — readable */
61
- --font-mono: 'JetBrains Mono', monospace; /* Code — purposeful */
62
-
63
- --radius-sharp: 2px; /* Tags, badges */
64
- --radius-default: 12px; /* Cards, inputs */
65
- --radius-soft: 24px; /* Buttons, pills */
66
-
67
- --shadow-subtle: 0 1px 2px rgba(0,0,0,0.04), 0 1px 4px rgba(0,0,0,0.04);
68
- --shadow-medium: 0 4px 12px rgba(0,0,0,0.06), 0 1px 3px rgba(0,0,0,0.04);
69
- --shadow-dramatic: 0 24px 48px rgba(0,0,0,0.12), 0 8px 16px rgba(0,0,0,0.06);
70
- }
71
- ```
72
-
73
- ---
74
-
75
- ## 2. Color Science (OKLCH Over HSL Over HEX)
76
-
77
- **OKLCH** is the modern standard: perceptually uniform, CSS-native, and predictable across lightness levels. HSL lies about perceived brightness (yellow at 50% L looks brighter than blue at 50% L). OKLCH fixes this.
78
-
79
- ```css
80
- :root {
81
- /* OKLCH: oklch(lightness% chroma hue) */
82
- --primary: oklch(65% 0.25 250); /* Vivid teal */
83
- --primary-hover: oklch(55% 0.25 250); /* Same hue, darker */
84
- --primary-subtle: oklch(95% 0.03 250); /* Tinted background */
85
-
86
- --danger: oklch(60% 0.25 25); /* Warm red */
87
- --success: oklch(70% 0.18 155); /* Natural green */
88
- --warning: oklch(80% 0.15 80); /* Amber */
89
-
90
- /* Neutral scale — tinted with brand hue for cohesion */
91
- --gray-50: oklch(98% 0.005 250);
92
- --gray-100: oklch(95% 0.008 250);
93
- --gray-200: oklch(90% 0.01 250);
94
- --gray-400: oklch(70% 0.01 250);
95
- --gray-600: oklch(45% 0.01 250);
96
- --gray-900: oklch(15% 0.01 250);
97
- }
98
-
99
- /* Dark mode — invert lightness, preserve chroma */
100
- @media (prefers-color-scheme: dark) {
101
- :root {
102
- --gray-50: oklch(8% 0.005 250);
103
- --gray-100: oklch(12% 0.008 250);
104
- --gray-200: oklch(18% 0.01 250);
105
- --gray-400: oklch(40% 0.01 250);
106
- --gray-600: oklch(65% 0.01 250);
107
- --gray-900: oklch(95% 0.01 250);
108
- }
109
- }
110
- ```
111
-
112
- ### Palette Rules
113
- ```
114
- 1. Primary: ONE dominant hue. Never two competing saturated colors.
115
- 2. Accent: Complementary or analogous to primary, used sparingly (<10% of surface area).
116
- 3. Neutrals: Tint your grays with the primary hue (5-10 chroma). Pure gray (#808080) looks dead.
117
- 4. Semantic: Red=danger, Green=success, Amber=warning — never override these cultural meanings.
118
- 5. Contrast: Large text (≥24px) needs 3:1 ratio. Body text needs 4.5:1. Use oklch lightness to guarantee this.
119
- ```
120
-
121
- ---
122
-
123
- ## 3. Typography Mathematics
124
-
125
- Typography is 80% of UI design. Get this right and everything else follows.
126
-
127
- ### The Type Scale (Musical Intervals)
128
- ```css
129
- /* Major Third scale (1.25 ratio) — balanced for UI */
130
- :root {
131
- --text-xs: clamp(0.64rem, 0.5vw + 0.5rem, 0.75rem); /* 10-12px */
132
- --text-sm: clamp(0.8rem, 0.6vw + 0.6rem, 0.875rem); /* 12-14px */
133
- --text-base: clamp(1rem, 0.8vw + 0.7rem, 1.125rem); /* 16-18px */
134
- --text-lg: clamp(1.25rem, 1vw + 0.8rem, 1.5rem); /* 20-24px */
135
- --text-xl: clamp(1.563rem, 1.5vw + 1rem, 2rem); /* 25-32px */
136
- --text-2xl: clamp(1.953rem, 2vw + 1.2rem, 2.5rem); /* 31-40px */
137
- --text-3xl: clamp(2.441rem, 3vw + 1.5rem, 3.5rem); /* 39-56px */
138
- --text-hero: clamp(3.052rem, 5vw + 1.5rem, 6rem); /* 48-96px */
139
- }
140
-
141
- /* Typographic rules */
142
- h1, h2, h3 {
143
- font-family: var(--font-display);
144
- letter-spacing: -0.02em; /* Tighten headlines */
145
- line-height: 1.1; /* Tight leading for large type */
146
- text-wrap: balance; /* CSS native text balancing */
147
- }
148
-
149
- p, li {
150
- font-family: var(--font-body);
151
- line-height: 1.6; /* Generous leading for readability */
152
- max-width: 65ch; /* Optimal reading measure */
153
- }
154
-
155
- /* Optical kerning for hero text */
156
- .hero-title {
157
- font-size: var(--text-hero);
158
- font-weight: 700;
159
- letter-spacing: -0.04em; /* Aggressive tightening at large sizes */
160
- line-height: 0.95; /* Negative leading for drama */
161
- }
162
- ```
163
-
164
- ### Font Pairing Rules
165
- ```
166
- WINNING PAIRS (character + readability):
167
- Display: Clash Display + Body: Satoshi → Modern editorial
168
- Display: Playfair Display + Body: Source Sans 3 → Luxury editorial
169
- Display: Space Grotesk + Body: General Sans → Tech-forward
170
- Display: Fraunces + Body: Inter → Warm approachable
171
- Display: Cabinet Grotesk + Body: Switzer → Swiss contemporary
172
-
173
- FORBIDDEN:
174
- ❌ Inter + Inter (monotonous)
175
- ❌ Roboto + Roboto (Android system default)
176
- ❌ Any two display fonts together (visual conflict)
177
- ❌ Thin weights (<300) for body text at <16px (unreadable)
178
- ```
179
-
180
- ---
181
-
182
- ## 4. Spatial Composition — Breaking the Grid
183
-
184
- The best designs follow a grid, then intentionally break it at key moments for drama.
185
-
186
- ### The 8px Spatial System
187
- ```css
188
- :root {
189
- --space-1: 0.25rem; /* 4px — micro: icon gap */
190
- --space-2: 0.5rem; /* 8px — tight: tag padding */
191
- --space-3: 0.75rem; /* 12px — compact: list item gap */
192
- --space-4: 1rem; /* 16px — default: input padding */
193
- --space-5: 1.5rem; /* 24px — card padding */
194
- --space-6: 2rem; /* 32px — section gap */
195
- --space-8: 3rem; /* 48px — major section break */
196
- --space-10: 4rem; /* 64px — page section */
197
- --space-16: 8rem; /* 128px — hero breathing room */
198
- }
199
- ```
200
-
201
- ### Layout Techniques That Stand Out
202
- ```css
203
- /* 1. Asymmetric two-column (not 50/50) */
204
- .layout-asymmetric {
205
- display: grid;
206
- grid-template-columns: 2fr 1fr; /* 66/33 split — creates visual tension */
207
- gap: var(--space-8);
208
- }
209
-
210
- /* 2. Overlap / Negative margin (elements bleeding into each other) */
211
- .card-featured {
212
- margin-top: -4rem; /* Pull into previous section */
213
- position: relative;
214
- z-index: 2;
215
- }
216
-
217
- /* 3. Full-bleed breakout from container */
218
- .full-bleed {
219
- width: 100vw;
220
- margin-left: calc(50% - 50vw); /* Escape any container */
221
- }
222
-
223
- /* 4. Broken grid — one element escapes alignment */
224
- .grid-broken > :nth-child(3) {
225
- grid-column: 1 / -1; /* Span full width */
226
- transform: rotate(-1deg); /* Subtle tilt = handmade feel */
227
- }
228
- ```
229
-
230
- ---
231
-
232
- ## 5. Motion Choreography (Not Just Animation)
233
-
234
- Motion should tell a story. Every animation needs a **purpose**: feedback, orientation, or delight.
235
-
236
- ### The Motion Hierarchy
237
- ```
238
- Priority 1: FEEDBACK — Button press, toggle, form validation (instant, <100ms)
239
- Priority 2: ORIENTATION — Page transitions, modal open/close (200-400ms)
240
- Priority 3: DELIGHT — Scroll reveals, hover effects, loading states (300-800ms)
241
-
242
- NEVER animate for decoration alone. Every motion answers: "What just happened?" or "Where am I?"
243
- ```
244
-
245
- ### CSS-First Motion Library
246
- ```css
247
- /* Custom easing — never use 'ease' or 'linear' */
248
- :root {
249
- --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1); /* Snappy exit */
250
- --ease-out-back: cubic-bezier(0.34, 1.56, 0.64, 1); /* Overshoot */
251
- --ease-in-out-quint: cubic-bezier(0.83, 0, 0.17, 1); /* Dramatic */
252
- --spring: cubic-bezier(0.22, 1.2, 0.36, 1); /* Bounce feel */
253
- }
254
-
255
- /* Staggered reveal — the single most impactful animation pattern */
256
- .stagger-children > * {
257
- opacity: 0;
258
- transform: translateY(20px);
259
- animation: fadeUp 0.6s var(--ease-out-expo) forwards;
260
- }
261
- .stagger-children > *:nth-child(1) { animation-delay: 0ms; }
262
- .stagger-children > *:nth-child(2) { animation-delay: 80ms; }
263
- .stagger-children > *:nth-child(3) { animation-delay: 160ms; }
264
- .stagger-children > *:nth-child(4) { animation-delay: 240ms; }
265
-
266
- @keyframes fadeUp {
267
- to { opacity: 1; transform: translateY(0); }
268
- }
269
-
270
- /* Clip-path reveal — more sophisticated than fade */
271
- .reveal-clip {
272
- clip-path: inset(100% 0 0 0);
273
- animation: clipReveal 0.8s var(--ease-out-expo) forwards;
274
- }
275
- @keyframes clipReveal {
276
- to { clip-path: inset(0 0 0 0); }
277
- }
278
-
279
- /* Magnetic hover (cursor follows) — for buttons and cards */
280
- .magnetic {
281
- transition: transform 0.3s var(--spring);
282
- }
283
- .magnetic:hover {
284
- transform: translate(var(--mx, 0), var(--my, 0)) scale(1.02);
285
- }
286
-
287
- /* Reduce motion — MANDATORY accessibility */
288
- @media (prefers-reduced-motion: reduce) {
289
- *, *::before, *::after {
290
- animation-duration: 0.01ms !important;
291
- animation-iteration-count: 1 !important;
292
- transition-duration: 0.01ms !important;
293
- }
294
- }
295
- ```
296
-
297
- ---
298
-
299
- ## 6. Multi-Shadow Realism
300
-
301
- Flat shadows look AI-generated. Real shadows have layers.
302
-
303
- ```css
304
- /* Layered shadow system — physics-based */
305
- .elevation-1 {
306
- box-shadow:
307
- 0 1px 2px rgba(0,0,0,0.03),
308
- 0 2px 4px rgba(0,0,0,0.03),
309
- 0 4px 8px rgba(0,0,0,0.03);
310
- }
311
-
312
- .elevation-2 {
313
- box-shadow:
314
- 0 2px 4px rgba(0,0,0,0.02),
315
- 0 4px 8px rgba(0,0,0,0.03),
316
- 0 8px 16px rgba(0,0,0,0.04),
317
- 0 16px 32px rgba(0,0,0,0.04);
318
- }
319
-
320
- .elevation-3 {
321
- box-shadow:
322
- 0 4px 8px rgba(0,0,0,0.02),
323
- 0 8px 16px rgba(0,0,0,0.04),
324
- 0 16px 32px rgba(0,0,0,0.06),
325
- 0 32px 64px rgba(0,0,0,0.08);
326
- }
327
-
328
- /* Colored shadow (matches card content) */
329
- .card-accent {
330
- box-shadow:
331
- 0 8px 24px oklch(65% 0.15 250 / 0.2), /* Tinted with primary */
332
- 0 2px 4px rgba(0,0,0,0.04);
333
- }
334
- ```
335
-
336
- ---
337
-
338
- ## 7. Dark Mode Engineering (Not Just Invert)
339
-
340
- Dark mode is a separate design system, not a filter.
341
-
342
- ```css
343
- /* Wrong: Just swap black and white */
344
- /* Right: Reduce contrast, shift depth model, adjust chroma */
345
-
346
- [data-theme="dark"] {
347
- --bg-base: oklch(8% 0.005 250); /* Near-black, not pure #000 */
348
- --bg-surface: oklch(13% 0.008 250); /* Cards — slightly lighter */
349
- --bg-elevated: oklch(18% 0.01 250); /* Modals — even lighter */
350
-
351
- --text-primary: oklch(93% 0.005 250); /* Not pure white — too harsh */
352
- --text-secondary: oklch(65% 0.01 250);
353
-
354
- /* Borders become lighter in dark mode, not darker */
355
- --border: oklch(22% 0.01 250);
356
-
357
- /* Shadows become ambient glows or disappear entirely */
358
- --shadow-medium: 0 4px 12px rgba(0,0,0,0.4), 0 0 1px rgba(255,255,255,0.05);
359
-
360
- /* Saturated colors DECREASE chroma in dark mode to avoid eye strain */
361
- --primary: oklch(70% 0.18 250); /* Lower chroma than light mode */
362
- }
363
-
364
- /* Key rules:
365
- 1. Dark backgrounds use INCREASING lightness for elevation (opposite of light mode)
366
- 2. Never use pure #000000 unless targeting OLED (then use it ONLY for the base layer)
367
- 3. Reduce image brightness: img { filter: brightness(0.9); }
368
- 4. Invert shadows: dark mode cards don't cast shadows — they glow or use borders
369
- */
370
- ```
371
-
372
- ---
373
-
374
- ## 8. Responsive Architecture
375
-
376
- Don't think "desktop then mobile." Think "content then container."
377
-
378
- ```css
379
- /* Container queries > media queries for components */
380
- .card-grid {
381
- container-type: inline-size;
382
- container-name: card-grid;
383
- }
384
-
385
- @container card-grid (min-width: 600px) {
386
- .card-grid-inner {
387
- grid-template-columns: repeat(2, 1fr);
388
- }
389
- }
390
-
391
- @container card-grid (min-width: 900px) {
392
- .card-grid-inner {
393
- grid-template-columns: repeat(3, 1fr);
394
- }
395
- }
396
-
397
- /* Fluid spacing that scales with viewport */
398
- .section {
399
- padding-block: clamp(2rem, 6vw, 6rem);
400
- padding-inline: clamp(1rem, 4vw, 4rem);
401
- }
402
-
403
- /* Mobile touch targets */
404
- @media (pointer: coarse) {
405
- button, a, input, select {
406
- min-height: 48px; /* Thumb-friendly */
407
- min-width: 48px;
408
- }
409
- }
410
- ```
411
-
412
- ---
413
-
414
- ## 9. Texture & Atmosphere
415
-
416
- The difference between "AI-generated" and "designed" is atmosphere.
417
-
418
- ```css
419
- /* Noise grain overlay — adds physical texture */
420
- .grain::after {
421
- content: '';
422
- position: fixed;
423
- inset: 0;
424
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
425
- pointer-events: none;
426
- z-index: 9999;
427
- opacity: 0.4;
428
- }
429
-
430
- /* Gradient mesh — subtle background depth */
431
- .atmosphere {
432
- background:
433
- radial-gradient(ellipse at 20% 50%, oklch(95% 0.03 250 / 0.5), transparent 50%),
434
- radial-gradient(ellipse at 80% 20%, oklch(95% 0.03 30 / 0.3), transparent 50%),
435
- oklch(98% 0.005 250);
436
- }
437
-
438
- /* Glassmorphism — done correctly */
439
- .glass {
440
- background: oklch(100% 0 0 / 0.6);
441
- backdrop-filter: blur(20px) saturate(1.2);
442
- -webkit-backdrop-filter: blur(20px) saturate(1.2);
443
- border: 1px solid oklch(100% 0 0 / 0.15);
444
- box-shadow: 0 8px 32px rgba(0,0,0,0.06);
445
- }
446
- ```
447
-
448
- ---
449
-
450
- ## 10. Mobile-Specific Design Rules
451
-
452
- ```
453
- TOUCH PSYCHOLOGY:
454
- • Bottom 40% of screen = primary actions (thumb zone)
455
- • Top 25% = destructive/rare actions (stretch zone)
456
- • 48px minimum touch target (visual size can be 24px with padding expanding hitbox)
457
- • Spring physics (stiffness: 400, damping: 15) for all interactive animations
458
-
459
- PLATFORM RESPECT:
460
- • iOS: Rounded 12px corners, system blur, SF Symbols icon style, sheet presentations
461
- • Android: Material You dynamic color, 4dp grid, ripple feedback, edge-to-edge
462
- • NEVER make iOS look like Android or vice versa — respect each platform's language
463
-
464
- PERFORMANCE:
465
- • Only animate transform + opacity (GPU composited)
466
- • Never animate width, height, margin, padding (layout recalc = jank)
467
- • FlashList over FlatList over ScrollView for lists (10x perf difference)
468
- • Cancel all animations on unmount (memory leak prevention)
469
- ```
470
-
471
- ---
472
-
473
- ## 11. The Anti-AI-Slop Checklist
474
-
475
- Before submitting ANY UI, verify against this list:
476
-
477
- ```
478
- □ Does it have a clear visual identity, or does it look like "default"?
479
- □ Is the font pairing distinctive (not Inter + Inter)?
480
- □ Are colors OKLCH-based and tinted (not flat gray)?
481
- □ Are shadows multi-layered (not single box-shadow)?
482
- □ Is there at least ONE grid-breaking element for visual tension?
483
- □ Does motion serve a PURPOSE (feedback/orientation/delight)?
484
- □ Is dark mode a separate design, not just inverted colors?
485
- □ Are touch targets 48px+ on mobile (pointer: coarse)?
486
- □ Does prefers-reduced-motion disable ALL animations?
487
- □ Is contrast ratio ≥ 4.5:1 for body text, ≥ 3:1 for large text?
488
- □ Is the hero section NOT "left text, right image"?
489
- □ Is the primary color NOT purple/violet?
490
- ```
491
-
492
- If any answer is NO, the design is not ready for production.
493
-
494
- ---
495
-
496
- ## Output Format
497
-
498
- When this skill produces a recommendation or design decision, structure your output as:
499
-
500
- ```
501
- ━━━ Picasso Protocol: UI Recommendation ━━━━━━━━━━━━━━━━
502
- Identity: [chosen visual direction from Section 1]
503
- Decision: [what was chosen / proposed]
504
- Rationale: [why — one concise line]
505
- Trade-offs: [what is consciously accepted]
506
- Next action: [concrete next step for the user]
507
- ─────────────────────────────────────────────────────────
508
- Anti-Slop: ✅ Passed (12/12 checks)
509
- or ❌ Failed: [specific check that failed]
510
- ```
511
-
512
- ---
513
-
514
-
515
-
516
- AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
517
-
518
- 1. **Over-engineering:** Proposing complex abstractions or distributed systems when a simpler approach suffices.
519
- 2. **Hallucinated Libraries/Methods:** Using non-existent methods or packages. Always `// VERIFY` or check `package.json` / `requirements.txt`.
520
- 3. **Skipping Edge Cases:** Writing the "happy path" and ignoring error handling, timeouts, or data validation.
521
- 4. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
522
- 5. **Silent Degradation:** Catching and suppressing errors without logging or re-raising.
523
-
524
- ---
525
-
526
-
527
-
528
- **Slash command: `/review` or `/tribunal-full`**
529
- **Active reviewers: `logic-reviewer` · `security-auditor` · `ui-ux-auditor` · `accessibility-reviewer`**
530
-
531
- ### ❌ Forbidden AI Tropes
532
-
533
- 1. **Blind Assumptions:** Never make an assumption without documenting it clearly with `// VERIFY: [reason]`.
534
- 2. **Silent Degradation:** Catching and suppressing errors without logging or handling.
535
- 3. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
536
- 4. **AI-Slop Convergence:** Producing the same purple-gradient, Inter-font, bento-grid layout that every AI defaults to.
537
-
538
-
539
-
540
- Review these questions before confirming output:
541
- ```
542
- ✅ Did I rely ONLY on real, verified tools and methods?
543
- ✅ Is this solution appropriately scoped to the user's constraints?
544
- ✅ Did I handle potential failure modes and edge cases?
545
- ✅ Have I avoided generic boilerplate that doesn't add value?
546
- ✅ Does this UI pass the Anti-AI-Slop Checklist (Section 11)?
547
- ```
548
-
549
- ### 🛑 Verification-Before-Completion (VBC) Protocol
550
-
551
- **CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
552
- - ❌ **Forbidden:** Declaring a task complete because the output "looks correct."
553
- - ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
554
-
555
-
556
- ## Pre-Flight Checklist
557
- - [ ] Have I reviewed the user's specific constraints and requests?
558
- - [ ] Have I checked the environment for relevant existing implementations?
559
- - [ ] Have I verified the design passes the Anti-AI-Slop Checklist?
560
-
561
- ## VBC Protocol (Verification-Before-Completion)
562
- You MUST verify existing code signatures and variables before attempting to modify or call them. No hallucination is permitted.
1
+ ---
2
+ name: ui-ux-pro-max
3
+ description: The Picasso Protocol — Elite UI/UX design mastery for web and mobile. Covers visual identity systems, spatial composition, typography mathematics, color science (OKLCH), motion choreography, responsive architecture, dark mode engineering, and anti-AI-slop aesthetics. The definitive skill for building interfaces that feel designed by a human creative director, not an algorithm.
4
+ version: 2.0.0
5
+ last-updated: 2026-04-29
6
+ applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
7
+ ---
8
+
9
+ # UI/UX Pro Max v2.0 — The Picasso Protocol
10
+
11
+ > "Good design is obvious. Great design is transparent." — Joe Sparano
12
+
13
+ This skill transforms AI-generated interfaces from generic "AI slop" into portfolio-grade work indistinguishable from a senior designer's output. Every section is a weapon against mediocrity.
14
+
15
+ ---
16
+
17
+ ## 🚨 Hallucination Traps (Read First — Violations = Instant Rejection)
18
+
19
+ ```
20
+ ❌ Purple/violet primary color → ✅ The #1 AI cliché. Use amber, teal, coral, slate, or warm neutrals.
21
+ ❌ Inter/Roboto/Arial as body font → ✅ Generic. Use Geist, Satoshi, Cabinet Grotesk, General Sans, or Clash Display.
22
+ ❌ Hero: left-text + right-image → ✅ Lazy. Use full-bleed, editorial overlap, or typographic-only hero.
23
+ ❌ Mesh gradient backgrounds → ✅ The new stock photo. Use grain, solid contrast, or layered depth.
24
+ ❌ Border-radius: 8px on everything → ✅ Monotonous. Mix sharp (2px) and soft (20px+) radii for hierarchy.
25
+ ❌ Gray text (#888) on white (#fff) → ✅ Fails WCAG AA (3.7:1). Minimum contrast ratio is 4.5:1.
26
+ ❌ "Bento box" grid for everything → ✅ Overused. Directional flow, overlap, or editorial asymmetry.
27
+ ❌ Card → Card → Card with even spacing → ✅ Visual monotony. Vary sizes, break the grid, create tension.
28
+ ❌ box-shadow: 0 2px 8px rgba(0,0,0,0.1) → ✅ Default AI shadow. Use layered multi-shadow for realism.
29
+ ❌ Animating opacity + translateY on load → ✅ Every AI does this. Use clip-path reveals, blur-in, or scale-from-origin.
30
+ ❌ Using px for font-size → ✅ Use rem (scales with user preference) or clamp() for fluid type.
31
+ ❌ White (#FFFFFF) backgrounds → ✅ Harsh. Use off-white (#FAFAF8, #F5F3EF) or tinted neutrals.
32
+ ```
33
+
34
+ ---
35
+
36
+ ## 1. The Identity System (Decide Before You Code)
37
+
38
+ Before writing a single `div`, commit to a **visual identity**. This is the most important decision.
39
+
40
+ ### The Spectrum of Intention
41
+ ```
42
+ PICK ONE direction — do NOT blend without purpose:
43
+
44
+ Brutalist → Raw, exposed structure, monospace, high-contrast, no rounded corners
45
+ Editorial → Magazine-inspired, dramatic type scale, generous whitespace, serif headlines
46
+ Neo-Glassmorphism → Translucent layers, blur, light borders, floating panels, depth
47
+ Soft Minimal → Warm neutrals, subtle shadows, rounded forms, breathing room
48
+ Dark Luxury → True black (#09090B), gold/amber accents, thin weights, restrained motion
49
+ Neon Cyberpunk → Dark base, vivid saturated accents, glow effects, sharp geometry
50
+ Organic Natural → Earth tones, rounded blobs, hand-drawn feel, textured backgrounds
51
+ Swiss Precision → Grid-locked, Helvetica-lineage type, clinical whitespace, no decoration
52
+ Retro Analog → Warm grain, rounded type, muted palettes, physical texture
53
+ ```
54
+
55
+ ### Identity Lockfile (Define These 7 Tokens)
56
+ ```css
57
+ /* EVERY project must define these before any component work */
58
+ :root {
59
+ --font-display: 'Clash Display', sans-serif; /* Headlines — characterful */
60
+ --font-body: 'Satoshi', sans-serif; /* Body — readable */
61
+ --font-mono: 'JetBrains Mono', monospace; /* Code — purposeful */
62
+
63
+ --radius-sharp: 2px; /* Tags, badges */
64
+ --radius-default: 12px; /* Cards, inputs */
65
+ --radius-soft: 24px; /* Buttons, pills */
66
+
67
+ --shadow-subtle: 0 1px 2px rgba(0,0,0,0.04), 0 1px 4px rgba(0,0,0,0.04);
68
+ --shadow-medium: 0 4px 12px rgba(0,0,0,0.06), 0 1px 3px rgba(0,0,0,0.04);
69
+ --shadow-dramatic: 0 24px 48px rgba(0,0,0,0.12), 0 8px 16px rgba(0,0,0,0.06);
70
+ }
71
+ ```
72
+
73
+ ---
74
+
75
+ ## 2. Color Science (OKLCH Over HSL Over HEX)
76
+
77
+ **OKLCH** is the modern standard: perceptually uniform, CSS-native, and predictable across lightness levels. HSL lies about perceived brightness (yellow at 50% L looks brighter than blue at 50% L). OKLCH fixes this.
78
+
79
+ ```css
80
+ :root {
81
+ /* OKLCH: oklch(lightness% chroma hue) */
82
+ --primary: oklch(65% 0.25 250); /* Vivid teal */
83
+ --primary-hover: oklch(55% 0.25 250); /* Same hue, darker */
84
+ --primary-subtle: oklch(95% 0.03 250); /* Tinted background */
85
+
86
+ --danger: oklch(60% 0.25 25); /* Warm red */
87
+ --success: oklch(70% 0.18 155); /* Natural green */
88
+ --warning: oklch(80% 0.15 80); /* Amber */
89
+
90
+ /* Neutral scale — tinted with brand hue for cohesion */
91
+ --gray-50: oklch(98% 0.005 250);
92
+ --gray-100: oklch(95% 0.008 250);
93
+ --gray-200: oklch(90% 0.01 250);
94
+ --gray-400: oklch(70% 0.01 250);
95
+ --gray-600: oklch(45% 0.01 250);
96
+ --gray-900: oklch(15% 0.01 250);
97
+ }
98
+
99
+ /* Dark mode — invert lightness, preserve chroma */
100
+ @media (prefers-color-scheme: dark) {
101
+ :root {
102
+ --gray-50: oklch(8% 0.005 250);
103
+ --gray-100: oklch(12% 0.008 250);
104
+ --gray-200: oklch(18% 0.01 250);
105
+ --gray-400: oklch(40% 0.01 250);
106
+ --gray-600: oklch(65% 0.01 250);
107
+ --gray-900: oklch(95% 0.01 250);
108
+ }
109
+ }
110
+ ```
111
+
112
+ ### Palette Rules
113
+ ```
114
+ 1. Primary: ONE dominant hue. Never two competing saturated colors.
115
+ 2. Accent: Complementary or analogous to primary, used sparingly (<10% of surface area).
116
+ 3. Neutrals: Tint your grays with the primary hue (5-10 chroma). Pure gray (#808080) looks dead.
117
+ 4. Semantic: Red=danger, Green=success, Amber=warning — never override these cultural meanings.
118
+ 5. Contrast: Large text (≥24px) needs 3:1 ratio. Body text needs 4.5:1. Use oklch lightness to guarantee this.
119
+ ```
120
+
121
+ ---
122
+
123
+ ## 3. Typography Mathematics
124
+
125
+ Typography is 80% of UI design. Get this right and everything else follows.
126
+
127
+ ### The Type Scale (Musical Intervals)
128
+ ```css
129
+ /* Major Third scale (1.25 ratio) — balanced for UI */
130
+ :root {
131
+ --text-xs: clamp(0.64rem, 0.5vw + 0.5rem, 0.75rem); /* 10-12px */
132
+ --text-sm: clamp(0.8rem, 0.6vw + 0.6rem, 0.875rem); /* 12-14px */
133
+ --text-base: clamp(1rem, 0.8vw + 0.7rem, 1.125rem); /* 16-18px */
134
+ --text-lg: clamp(1.25rem, 1vw + 0.8rem, 1.5rem); /* 20-24px */
135
+ --text-xl: clamp(1.563rem, 1.5vw + 1rem, 2rem); /* 25-32px */
136
+ --text-2xl: clamp(1.953rem, 2vw + 1.2rem, 2.5rem); /* 31-40px */
137
+ --text-3xl: clamp(2.441rem, 3vw + 1.5rem, 3.5rem); /* 39-56px */
138
+ --text-hero: clamp(3.052rem, 5vw + 1.5rem, 6rem); /* 48-96px */
139
+ }
140
+
141
+ /* Typographic rules */
142
+ h1, h2, h3 {
143
+ font-family: var(--font-display);
144
+ letter-spacing: -0.02em; /* Tighten headlines */
145
+ line-height: 1.1; /* Tight leading for large type */
146
+ text-wrap: balance; /* CSS native text balancing */
147
+ }
148
+
149
+ p, li {
150
+ font-family: var(--font-body);
151
+ line-height: 1.6; /* Generous leading for readability */
152
+ max-width: 65ch; /* Optimal reading measure */
153
+ }
154
+
155
+ /* Optical kerning for hero text */
156
+ .hero-title {
157
+ font-size: var(--text-hero);
158
+ font-weight: 700;
159
+ letter-spacing: -0.04em; /* Aggressive tightening at large sizes */
160
+ line-height: 0.95; /* Negative leading for drama */
161
+ }
162
+ ```
163
+
164
+ ### Font Pairing Rules
165
+ ```
166
+ WINNING PAIRS (character + readability):
167
+ Display: Clash Display + Body: Satoshi → Modern editorial
168
+ Display: Playfair Display + Body: Source Sans 3 → Luxury editorial
169
+ Display: Space Grotesk + Body: General Sans → Tech-forward
170
+ Display: Fraunces + Body: Inter → Warm approachable
171
+ Display: Cabinet Grotesk + Body: Switzer → Swiss contemporary
172
+
173
+ FORBIDDEN:
174
+ ❌ Inter + Inter (monotonous)
175
+ ❌ Roboto + Roboto (Android system default)
176
+ ❌ Any two display fonts together (visual conflict)
177
+ ❌ Thin weights (<300) for body text at <16px (unreadable)
178
+ ```
179
+
180
+ ---
181
+
182
+ ## 4. Spatial Composition — Breaking the Grid
183
+
184
+ The best designs follow a grid, then intentionally break it at key moments for drama.
185
+
186
+ ### The 8px Spatial System
187
+ ```css
188
+ :root {
189
+ --space-1: 0.25rem; /* 4px — micro: icon gap */
190
+ --space-2: 0.5rem; /* 8px — tight: tag padding */
191
+ --space-3: 0.75rem; /* 12px — compact: list item gap */
192
+ --space-4: 1rem; /* 16px — default: input padding */
193
+ --space-5: 1.5rem; /* 24px — card padding */
194
+ --space-6: 2rem; /* 32px — section gap */
195
+ --space-8: 3rem; /* 48px — major section break */
196
+ --space-10: 4rem; /* 64px — page section */
197
+ --space-16: 8rem; /* 128px — hero breathing room */
198
+ }
199
+ ```
200
+
201
+ ### Layout Techniques That Stand Out
202
+ ```css
203
+ /* 1. Asymmetric two-column (not 50/50) */
204
+ .layout-asymmetric {
205
+ display: grid;
206
+ grid-template-columns: 2fr 1fr; /* 66/33 split — creates visual tension */
207
+ gap: var(--space-8);
208
+ }
209
+
210
+ /* 2. Overlap / Negative margin (elements bleeding into each other) */
211
+ .card-featured {
212
+ margin-top: -4rem; /* Pull into previous section */
213
+ position: relative;
214
+ z-index: 2;
215
+ }
216
+
217
+ /* 3. Full-bleed breakout from container */
218
+ .full-bleed {
219
+ width: 100vw;
220
+ margin-left: calc(50% - 50vw); /* Escape any container */
221
+ }
222
+
223
+ /* 4. Broken grid — one element escapes alignment */
224
+ .grid-broken > :nth-child(3) {
225
+ grid-column: 1 / -1; /* Span full width */
226
+ transform: rotate(-1deg); /* Subtle tilt = handmade feel */
227
+ }
228
+ ```
229
+
230
+ ---
231
+
232
+ ## 5. Motion Choreography (Not Just Animation)
233
+
234
+ Motion should tell a story. Every animation needs a **purpose**: feedback, orientation, or delight.
235
+
236
+ ### The Motion Hierarchy
237
+ ```
238
+ Priority 1: FEEDBACK — Button press, toggle, form validation (instant, <100ms)
239
+ Priority 2: ORIENTATION — Page transitions, modal open/close (200-400ms)
240
+ Priority 3: DELIGHT — Scroll reveals, hover effects, loading states (300-800ms)
241
+
242
+ NEVER animate for decoration alone. Every motion answers: "What just happened?" or "Where am I?"
243
+ ```
244
+
245
+ ### CSS-First Motion Library
246
+ ```css
247
+ /* Custom easing — never use 'ease' or 'linear' */
248
+ :root {
249
+ --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1); /* Snappy exit */
250
+ --ease-out-back: cubic-bezier(0.34, 1.56, 0.64, 1); /* Overshoot */
251
+ --ease-in-out-quint: cubic-bezier(0.83, 0, 0.17, 1); /* Dramatic */
252
+ --spring: cubic-bezier(0.22, 1.2, 0.36, 1); /* Bounce feel */
253
+ }
254
+
255
+ /* Staggered reveal — the single most impactful animation pattern */
256
+ .stagger-children > * {
257
+ opacity: 0;
258
+ transform: translateY(20px);
259
+ animation: fadeUp 0.6s var(--ease-out-expo) forwards;
260
+ }
261
+ .stagger-children > *:nth-child(1) { animation-delay: 0ms; }
262
+ .stagger-children > *:nth-child(2) { animation-delay: 80ms; }
263
+ .stagger-children > *:nth-child(3) { animation-delay: 160ms; }
264
+ .stagger-children > *:nth-child(4) { animation-delay: 240ms; }
265
+
266
+ @keyframes fadeUp {
267
+ to { opacity: 1; transform: translateY(0); }
268
+ }
269
+
270
+ /* Clip-path reveal — more sophisticated than fade */
271
+ .reveal-clip {
272
+ clip-path: inset(100% 0 0 0);
273
+ animation: clipReveal 0.8s var(--ease-out-expo) forwards;
274
+ }
275
+ @keyframes clipReveal {
276
+ to { clip-path: inset(0 0 0 0); }
277
+ }
278
+
279
+ /* Magnetic hover (cursor follows) — for buttons and cards */
280
+ .magnetic {
281
+ transition: transform 0.3s var(--spring);
282
+ }
283
+ .magnetic:hover {
284
+ transform: translate(var(--mx, 0), var(--my, 0)) scale(1.02);
285
+ }
286
+
287
+ /* Reduce motion — MANDATORY accessibility */
288
+ @media (prefers-reduced-motion: reduce) {
289
+ *, *::before, *::after {
290
+ animation-duration: 0.01ms !important;
291
+ animation-iteration-count: 1 !important;
292
+ transition-duration: 0.01ms !important;
293
+ }
294
+ }
295
+ ```
296
+
297
+ ---
298
+
299
+ ## 6. Multi-Shadow Realism
300
+
301
+ Flat shadows look AI-generated. Real shadows have layers.
302
+
303
+ ```css
304
+ /* Layered shadow system — physics-based */
305
+ .elevation-1 {
306
+ box-shadow:
307
+ 0 1px 2px rgba(0,0,0,0.03),
308
+ 0 2px 4px rgba(0,0,0,0.03),
309
+ 0 4px 8px rgba(0,0,0,0.03);
310
+ }
311
+
312
+ .elevation-2 {
313
+ box-shadow:
314
+ 0 2px 4px rgba(0,0,0,0.02),
315
+ 0 4px 8px rgba(0,0,0,0.03),
316
+ 0 8px 16px rgba(0,0,0,0.04),
317
+ 0 16px 32px rgba(0,0,0,0.04);
318
+ }
319
+
320
+ .elevation-3 {
321
+ box-shadow:
322
+ 0 4px 8px rgba(0,0,0,0.02),
323
+ 0 8px 16px rgba(0,0,0,0.04),
324
+ 0 16px 32px rgba(0,0,0,0.06),
325
+ 0 32px 64px rgba(0,0,0,0.08);
326
+ }
327
+
328
+ /* Colored shadow (matches card content) */
329
+ .card-accent {
330
+ box-shadow:
331
+ 0 8px 24px oklch(65% 0.15 250 / 0.2), /* Tinted with primary */
332
+ 0 2px 4px rgba(0,0,0,0.04);
333
+ }
334
+ ```
335
+
336
+ ---
337
+
338
+ ## 7. Dark Mode Engineering (Not Just Invert)
339
+
340
+ Dark mode is a separate design system, not a filter.
341
+
342
+ ```css
343
+ /* Wrong: Just swap black and white */
344
+ /* Right: Reduce contrast, shift depth model, adjust chroma */
345
+
346
+ [data-theme="dark"] {
347
+ --bg-base: oklch(8% 0.005 250); /* Near-black, not pure #000 */
348
+ --bg-surface: oklch(13% 0.008 250); /* Cards — slightly lighter */
349
+ --bg-elevated: oklch(18% 0.01 250); /* Modals — even lighter */
350
+
351
+ --text-primary: oklch(93% 0.005 250); /* Not pure white — too harsh */
352
+ --text-secondary: oklch(65% 0.01 250);
353
+
354
+ /* Borders become lighter in dark mode, not darker */
355
+ --border: oklch(22% 0.01 250);
356
+
357
+ /* Shadows become ambient glows or disappear entirely */
358
+ --shadow-medium: 0 4px 12px rgba(0,0,0,0.4), 0 0 1px rgba(255,255,255,0.05);
359
+
360
+ /* Saturated colors DECREASE chroma in dark mode to avoid eye strain */
361
+ --primary: oklch(70% 0.18 250); /* Lower chroma than light mode */
362
+ }
363
+
364
+ /* Key rules:
365
+ 1. Dark backgrounds use INCREASING lightness for elevation (opposite of light mode)
366
+ 2. Never use pure #000000 unless targeting OLED (then use it ONLY for the base layer)
367
+ 3. Reduce image brightness: img { filter: brightness(0.9); }
368
+ 4. Invert shadows: dark mode cards don't cast shadows — they glow or use borders
369
+ */
370
+ ```
371
+
372
+ ---
373
+
374
+ ## 8. Responsive Architecture
375
+
376
+ Don't think "desktop then mobile." Think "content then container."
377
+
378
+ ```css
379
+ /* Container queries > media queries for components */
380
+ .card-grid {
381
+ container-type: inline-size;
382
+ container-name: card-grid;
383
+ }
384
+
385
+ @container card-grid (min-width: 600px) {
386
+ .card-grid-inner {
387
+ grid-template-columns: repeat(2, 1fr);
388
+ }
389
+ }
390
+
391
+ @container card-grid (min-width: 900px) {
392
+ .card-grid-inner {
393
+ grid-template-columns: repeat(3, 1fr);
394
+ }
395
+ }
396
+
397
+ /* Fluid spacing that scales with viewport */
398
+ .section {
399
+ padding-block: clamp(2rem, 6vw, 6rem);
400
+ padding-inline: clamp(1rem, 4vw, 4rem);
401
+ }
402
+
403
+ /* Mobile touch targets */
404
+ @media (pointer: coarse) {
405
+ button, a, input, select {
406
+ min-height: 48px; /* Thumb-friendly */
407
+ min-width: 48px;
408
+ }
409
+ }
410
+ ```
411
+
412
+ ---
413
+
414
+ ## 9. Texture & Atmosphere
415
+
416
+ The difference between "AI-generated" and "designed" is atmosphere.
417
+
418
+ ```css
419
+ /* Noise grain overlay — adds physical texture */
420
+ .grain::after {
421
+ content: '';
422
+ position: fixed;
423
+ inset: 0;
424
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
425
+ pointer-events: none;
426
+ z-index: 9999;
427
+ opacity: 0.4;
428
+ }
429
+
430
+ /* Gradient mesh — subtle background depth */
431
+ .atmosphere {
432
+ background:
433
+ radial-gradient(ellipse at 20% 50%, oklch(95% 0.03 250 / 0.5), transparent 50%),
434
+ radial-gradient(ellipse at 80% 20%, oklch(95% 0.03 30 / 0.3), transparent 50%),
435
+ oklch(98% 0.005 250);
436
+ }
437
+
438
+ /* Glassmorphism — done correctly */
439
+ .glass {
440
+ background: oklch(100% 0 0 / 0.6);
441
+ backdrop-filter: blur(20px) saturate(1.2);
442
+ -webkit-backdrop-filter: blur(20px) saturate(1.2);
443
+ border: 1px solid oklch(100% 0 0 / 0.15);
444
+ box-shadow: 0 8px 32px rgba(0,0,0,0.06);
445
+ }
446
+ ```
447
+
448
+ ---
449
+
450
+ ## 10. Mobile-Specific Design Rules
451
+
452
+ ```
453
+ TOUCH PSYCHOLOGY:
454
+ • Bottom 40% of screen = primary actions (thumb zone)
455
+ • Top 25% = destructive/rare actions (stretch zone)
456
+ • 48px minimum touch target (visual size can be 24px with padding expanding hitbox)
457
+ • Spring physics (stiffness: 400, damping: 15) for all interactive animations
458
+
459
+ PLATFORM RESPECT:
460
+ • iOS: Rounded 12px corners, system blur, SF Symbols icon style, sheet presentations
461
+ • Android: Material You dynamic color, 4dp grid, ripple feedback, edge-to-edge
462
+ • NEVER make iOS look like Android or vice versa — respect each platform's language
463
+
464
+ PERFORMANCE:
465
+ • Only animate transform + opacity (GPU composited)
466
+ • Never animate width, height, margin, padding (layout recalc = jank)
467
+ • FlashList over FlatList over ScrollView for lists (10x perf difference)
468
+ • Cancel all animations on unmount (memory leak prevention)
469
+ ```
470
+
471
+ ---
472
+
473
+ ## 11. The Anti-AI-Slop Checklist
474
+
475
+ Before submitting ANY UI, verify against this list:
476
+
477
+ ```
478
+ □ Does it have a clear visual identity, or does it look like "default"?
479
+ □ Is the font pairing distinctive (not Inter + Inter)?
480
+ □ Are colors OKLCH-based and tinted (not flat gray)?
481
+ □ Are shadows multi-layered (not single box-shadow)?
482
+ □ Is there at least ONE grid-breaking element for visual tension?
483
+ □ Does motion serve a PURPOSE (feedback/orientation/delight)?
484
+ □ Is dark mode a separate design, not just inverted colors?
485
+ □ Are touch targets 48px+ on mobile (pointer: coarse)?
486
+ □ Does prefers-reduced-motion disable ALL animations?
487
+ □ Is contrast ratio ≥ 4.5:1 for body text, ≥ 3:1 for large text?
488
+ □ Is the hero section NOT "left text, right image"?
489
+ □ Is the primary color NOT purple/violet?
490
+ ```
491
+
492
+ If any answer is NO, the design is not ready for production.
493
+
494
+ ---
495
+
496
+ ## Output Format
497
+
498
+ When this skill produces a recommendation or design decision, structure your output as:
499
+
500
+ ```
501
+ ━━━ Picasso Protocol: UI Recommendation ━━━━━━━━━━━━━━━━
502
+ Identity: [chosen visual direction from Section 1]
503
+ Decision: [what was chosen / proposed]
504
+ Rationale: [why — one concise line]
505
+ Trade-offs: [what is consciously accepted]
506
+ Next action: [concrete next step for the user]
507
+ ─────────────────────────────────────────────────────────
508
+ Anti-Slop: ✅ Passed (12/12 checks)
509
+ or ❌ Failed: [specific check that failed]
510
+ ```
511
+
512
+ ---
513
+
514
+
515
+
516
+ AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
517
+
518
+ 1. **Over-engineering:** Proposing complex abstractions or distributed systems when a simpler approach suffices.
519
+ 2. **Hallucinated Libraries/Methods:** Using non-existent methods or packages. Always `// VERIFY` or check `package.json` / `requirements.txt`.
520
+ 3. **Skipping Edge Cases:** Writing the "happy path" and ignoring error handling, timeouts, or data validation.
521
+ 4. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
522
+ 5. **Silent Degradation:** Catching and suppressing errors without logging or re-raising.
523
+
524
+ ---
525
+
526
+
527
+
528
+ **Slash command: `/review` or `/tribunal-full`**
529
+ **Active reviewers: `logic-reviewer` · `security-auditor` · `ui-ux-auditor` · `accessibility-reviewer`**
530
+
531
+ ### ❌ Forbidden AI Tropes
532
+
533
+ 1. **Blind Assumptions:** Never make an assumption without documenting it clearly with `// VERIFY: [reason]`.
534
+ 2. **Silent Degradation:** Catching and suppressing errors without logging or handling.
535
+ 3. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
536
+ 4. **AI-Slop Convergence:** Producing the same purple-gradient, Inter-font, bento-grid layout that every AI defaults to.
537
+
538
+
539
+
540
+ Review these questions before confirming output:
541
+ ```
542
+ ✅ Did I rely ONLY on real, verified tools and methods?
543
+ ✅ Is this solution appropriately scoped to the user's constraints?
544
+ ✅ Did I handle potential failure modes and edge cases?
545
+ ✅ Have I avoided generic boilerplate that doesn't add value?
546
+ ✅ Does this UI pass the Anti-AI-Slop Checklist (Section 11)?
547
+ ```
548
+
549
+ ### 🛑 Verification-Before-Completion (VBC) Protocol
550
+
551
+ **CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
552
+ - ❌ **Forbidden:** Declaring a task complete because the output "looks correct."
553
+ - ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
554
+
555
+
556
+ ## Pre-Flight Checklist
557
+ - [ ] Have I reviewed the user's specific constraints and requests?
558
+ - [ ] Have I checked the environment for relevant existing implementations?
559
+ - [ ] Have I verified the design passes the Anti-AI-Slop Checklist?
560
+
561
+ ## VBC Protocol (Verification-Before-Completion)
562
+ You MUST verify existing code signatures and variables before attempting to modify or call them. No hallucination is permitted.