tribunal-kit 4.3.1 → 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.
- package/.agent/agents/api-architect.md +66 -66
- package/.agent/agents/db-latency-auditor.md +216 -216
- package/.agent/agents/precedence-reviewer.md +250 -250
- package/.agent/agents/resilience-reviewer.md +88 -88
- package/.agent/agents/schema-reviewer.md +67 -67
- package/.agent/agents/throughput-optimizer.md +299 -299
- package/.agent/agents/ui-ux-auditor.md +292 -292
- package/.agent/agents/vitals-reviewer.md +223 -223
- package/.agent/scripts/_colors.js +18 -18
- package/.agent/scripts/_utils.js +42 -42
- package/.agent/scripts/append_flow.js +72 -72
- package/.agent/scripts/auto_preview.js +197 -197
- package/.agent/scripts/bundle_analyzer.js +290 -290
- package/.agent/scripts/case_law_manager.js +17 -6
- package/.agent/scripts/checklist.js +266 -266
- package/.agent/scripts/colors.js +17 -17
- package/.agent/scripts/compress_skills.js +141 -141
- package/.agent/scripts/consolidate_skills.js +149 -149
- package/.agent/scripts/context_broker.js +611 -609
- package/.agent/scripts/deep_compress.js +150 -150
- package/.agent/scripts/dependency_analyzer.js +272 -272
- package/.agent/scripts/graph_builder.js +151 -37
- package/.agent/scripts/graph_visualizer.js +384 -0
- package/.agent/scripts/inner_loop_validator.js +451 -465
- package/.agent/scripts/lint_runner.js +187 -187
- package/.agent/scripts/minify_context.js +100 -100
- package/.agent/scripts/mutation_runner.js +280 -0
- package/.agent/scripts/patch_skills_meta.js +156 -156
- package/.agent/scripts/patch_skills_output.js +244 -244
- package/.agent/scripts/schema_validator.js +297 -297
- package/.agent/scripts/security_scan.js +303 -303
- package/.agent/scripts/session_manager.js +276 -276
- package/.agent/scripts/skill_evolution.js +644 -644
- package/.agent/scripts/skill_integrator.js +313 -313
- package/.agent/scripts/strengthen_skills.js +193 -193
- package/.agent/scripts/strip_tribunal.js +47 -47
- package/.agent/scripts/swarm_dispatcher.js +360 -360
- package/.agent/scripts/test_runner.js +193 -193
- package/.agent/scripts/utils.js +32 -32
- package/.agent/scripts/verify_all.js +257 -256
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +1 -1
- package/.agent/skills/doc.md +1 -1
- package/.agent/skills/knowledge-graph/SKILL.md +32 -16
- package/.agent/skills/testing-patterns/SKILL.md +19 -2
- package/.agent/skills/ui-ux-pro-max/SKILL.md +480 -43
- package/.agent/workflows/generate.md +183 -183
- package/.agent/workflows/tribunal-speed.md +183 -183
- package/README.md +1 -1
- package/bin/tribunal-kit.js +134 -17
- package/package.json +6 -3
- package/scripts/changelog.js +167 -167
- package/scripts/sync-version.js +81 -81
- package/.agent/scripts/__pycache__/_colors.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/_utils.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/case_law_manager.cpython-311.pyc +0 -0
|
@@ -1,59 +1,495 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ui-ux-pro-max
|
|
3
|
-
description:
|
|
4
|
-
version:
|
|
5
|
-
last-updated: 2026-
|
|
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
6
|
applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
+
```
|
|
13
296
|
|
|
14
297
|
---
|
|
15
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 */
|
|
16
350
|
|
|
17
|
-
|
|
351
|
+
--text-primary: oklch(93% 0.005 250); /* Not pure white — too harsh */
|
|
352
|
+
--text-secondary: oklch(65% 0.01 250);
|
|
18
353
|
|
|
19
|
-
|
|
354
|
+
/* Borders become lighter in dark mode, not darker */
|
|
355
|
+
--border: oklch(22% 0.01 250);
|
|
20
356
|
|
|
21
|
-
|
|
22
|
-
|
|
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);
|
|
23
359
|
|
|
24
|
-
|
|
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
|
+
}
|
|
25
363
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
+
```
|
|
31
447
|
|
|
32
|
-
|
|
448
|
+
---
|
|
33
449
|
|
|
34
|
-
|
|
35
|
-
- Production-grade and functional
|
|
36
|
-
- Visually striking and memorable
|
|
37
|
-
- Cohesive with a clear aesthetic point-of-view
|
|
38
|
-
- Meticulously refined in every detail
|
|
450
|
+
## 10. Mobile-Specific Design Rules
|
|
39
451
|
|
|
40
|
-
|
|
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
|
+
```
|
|
41
470
|
|
|
42
|
-
|
|
43
|
-
- **Typography**: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font.
|
|
44
|
-
- **Color & Theme**: Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
|
|
45
|
-
- **Motion**: Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Use Motion library for React when available. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise.
|
|
46
|
-
- **Spatial Composition**: Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
|
|
47
|
-
- **UI Building Accuracy (MANDATORY)**: You must translate layouts with mathematical precision using strict numeric tokens (4px grid). Every layout must have explicitly defined `flex`/`grid` containers, alignment boundaries, and exact spacing. No vague "auto" spacing unless mathematically intended.
|
|
48
|
-
- **Backgrounds & Visual Details**: Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.
|
|
471
|
+
---
|
|
49
472
|
|
|
50
|
-
|
|
473
|
+
## 11. The Anti-AI-Slop Checklist
|
|
51
474
|
|
|
52
|
-
|
|
475
|
+
Before submitting ANY UI, verify against this list:
|
|
53
476
|
|
|
54
|
-
|
|
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
|
+
```
|
|
55
491
|
|
|
56
|
-
|
|
492
|
+
If any answer is NO, the design is not ready for production.
|
|
57
493
|
|
|
58
494
|
---
|
|
59
495
|
|
|
@@ -62,22 +498,20 @@ Remember: Claude (and any AI agent using this skill) is capable of extraordinary
|
|
|
62
498
|
When this skill produces a recommendation or design decision, structure your output as:
|
|
63
499
|
|
|
64
500
|
```
|
|
65
|
-
━━━
|
|
501
|
+
━━━ Picasso Protocol: UI Recommendation ━━━━━━━━━━━━━━━━
|
|
502
|
+
Identity: [chosen visual direction from Section 1]
|
|
66
503
|
Decision: [what was chosen / proposed]
|
|
67
504
|
Rationale: [why — one concise line]
|
|
68
505
|
Trade-offs: [what is consciously accepted]
|
|
69
506
|
Next action: [concrete next step for the user]
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
or ❌ [
|
|
507
|
+
─────────────────────────────────────────────────────────
|
|
508
|
+
Anti-Slop: ✅ Passed (12/12 checks)
|
|
509
|
+
or ❌ Failed: [specific check that failed]
|
|
73
510
|
```
|
|
74
511
|
|
|
75
512
|
---
|
|
76
513
|
|
|
77
514
|
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
|
|
81
515
|
|
|
82
516
|
AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
|
|
83
517
|
|
|
@@ -92,13 +526,14 @@ AI coding assistants often fall into specific bad habits when dealing with this
|
|
|
92
526
|
|
|
93
527
|
|
|
94
528
|
**Slash command: `/review` or `/tribunal-full`**
|
|
95
|
-
**Active reviewers: `logic-reviewer` · `security-auditor`**
|
|
529
|
+
**Active reviewers: `logic-reviewer` · `security-auditor` · `ui-ux-auditor` · `accessibility-reviewer`**
|
|
96
530
|
|
|
97
531
|
### ❌ Forbidden AI Tropes
|
|
98
532
|
|
|
99
533
|
1. **Blind Assumptions:** Never make an assumption without documenting it clearly with `// VERIFY: [reason]`.
|
|
100
534
|
2. **Silent Degradation:** Catching and suppressing errors without logging or handling.
|
|
101
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.
|
|
102
537
|
|
|
103
538
|
|
|
104
539
|
|
|
@@ -108,6 +543,7 @@ Review these questions before confirming output:
|
|
|
108
543
|
✅ Is this solution appropriately scoped to the user's constraints?
|
|
109
544
|
✅ Did I handle potential failure modes and edge cases?
|
|
110
545
|
✅ Have I avoided generic boilerplate that doesn't add value?
|
|
546
|
+
✅ Does this UI pass the Anti-AI-Slop Checklist (Section 11)?
|
|
111
547
|
```
|
|
112
548
|
|
|
113
549
|
### 🛑 Verification-Before-Completion (VBC) Protocol
|
|
@@ -120,6 +556,7 @@ Review these questions before confirming output:
|
|
|
120
556
|
## Pre-Flight Checklist
|
|
121
557
|
- [ ] Have I reviewed the user's specific constraints and requests?
|
|
122
558
|
- [ ] Have I checked the environment for relevant existing implementations?
|
|
559
|
+
- [ ] Have I verified the design passes the Anti-AI-Slop Checklist?
|
|
123
560
|
|
|
124
561
|
## VBC Protocol (Verification-Before-Completion)
|
|
125
562
|
You MUST verify existing code signatures and variables before attempting to modify or call them. No hallucination is permitted.
|