get-shit-pretty 0.7.0 → 0.7.3

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 (112) hide show
  1. package/README.md +301 -124
  2. package/bin/install.js +1 -1
  3. package/gsp/agents/gsp-accessibility-auditor.md +1 -60
  4. package/gsp/agents/gsp-brand-auditor.md +1 -61
  5. package/gsp/agents/gsp-brand-creative-director.md +10 -0
  6. package/gsp/agents/gsp-brand-engineer.md +1 -122
  7. package/gsp/agents/gsp-brand-researcher.md +11 -0
  8. package/gsp/agents/gsp-brand-strategist.md +1 -65
  9. package/gsp/agents/gsp-project-builder.md +17 -0
  10. package/gsp/agents/gsp-project-critic.md +11 -0
  11. package/gsp/agents/gsp-project-designer.md +11 -0
  12. package/gsp/agents/gsp-project-researcher.md +1 -74
  13. package/gsp/agents/gsp-project-reviewer.md +12 -0
  14. package/gsp/hooks/hooks.json +32 -14
  15. package/gsp/skills/get-shit-pretty/SKILL.md +2 -5
  16. package/gsp/skills/gsp-accessibility/SKILL.md +0 -1
  17. package/gsp/skills/gsp-accessibility-audit/SKILL.md +9 -8
  18. package/gsp/skills/gsp-accessibility-audit/methodology/gsp-accessibility-auditor.md +59 -0
  19. package/gsp/skills/gsp-add-reference/SKILL.md +0 -1
  20. package/gsp/skills/gsp-art/SKILL.md +13 -10
  21. package/gsp/skills/gsp-brand-audit/SKILL.md +4 -2
  22. package/gsp/skills/gsp-brand-audit/methodology/gsp-brand-auditor.md +61 -0
  23. package/gsp/skills/gsp-brand-brief/SKILL.md +129 -0
  24. package/gsp/skills/gsp-brand-guidelines/SKILL.md +13 -11
  25. package/gsp/skills/gsp-brand-guidelines/methodology/gsp-brand-engineer.md +122 -0
  26. package/gsp/skills/gsp-brand-identity/SKILL.md +19 -18
  27. package/gsp/{agents/gsp-creative-director.md → skills/gsp-brand-identity/methodology/gsp-brand-creative-director.md} +0 -9
  28. package/gsp/skills/gsp-brand-refine/SKILL.md +0 -1
  29. package/gsp/skills/gsp-brand-research/SKILL.md +13 -13
  30. package/gsp/{agents/gsp-researcher.md → skills/gsp-brand-research/methodology/gsp-brand-researcher.md} +0 -10
  31. package/gsp/skills/gsp-brand-strategy/SKILL.md +14 -14
  32. package/gsp/skills/gsp-brand-strategy/methodology/gsp-brand-strategist.md +65 -0
  33. package/gsp/skills/gsp-brand-sync/SKILL.md +60 -10
  34. package/gsp/skills/gsp-color/SKILL.md +0 -1
  35. package/gsp/skills/gsp-design-system/SKILL.md +0 -1
  36. package/gsp/skills/gsp-doctor/SKILL.md +0 -1
  37. package/gsp/skills/gsp-help/SKILL.md +10 -7
  38. package/gsp/skills/gsp-icons/SKILL.md +0 -1
  39. package/gsp/skills/gsp-logo/SKILL.md +0 -1
  40. package/gsp/skills/gsp-phase-transition/SKILL.md +0 -3
  41. package/gsp/skills/gsp-pretty/SKILL.md +25 -24
  42. package/gsp/skills/gsp-progress/SKILL.md +0 -1
  43. package/gsp/skills/gsp-project-brief/SKILL.md +51 -22
  44. package/gsp/skills/gsp-project-build/SKILL.md +216 -74
  45. package/gsp/skills/gsp-project-build/bento-grid.md +114 -0
  46. package/gsp/{agents/gsp-builder.md → skills/gsp-project-build/methodology/gsp-project-builder.md} +14 -16
  47. package/gsp/skills/gsp-project-critique/SKILL.md +21 -17
  48. package/gsp/{agents/gsp-critic.md → skills/gsp-project-critique/methodology/gsp-project-critic.md} +0 -11
  49. package/gsp/skills/gsp-project-design/SKILL.md +9 -6
  50. package/gsp/{agents/gsp-designer.md → skills/gsp-project-design/methodology/gsp-project-designer.md} +0 -11
  51. package/gsp/skills/gsp-project-research/SKILL.md +4 -2
  52. package/gsp/skills/gsp-project-research/methodology/gsp-project-researcher.md +73 -0
  53. package/gsp/skills/gsp-project-review/SKILL.md +8 -5
  54. package/gsp/{agents/gsp-reviewer.md → skills/gsp-project-review/methodology/gsp-project-reviewer.md} +0 -12
  55. package/gsp/skills/gsp-scaffold/SKILL.md +0 -1
  56. package/gsp/skills/gsp-start/SKILL.md +59 -210
  57. package/gsp/skills/gsp-style/SKILL.md +1 -2
  58. package/gsp/skills/gsp-style/styles/INDEX.yml +7 -1
  59. package/gsp/skills/gsp-style/styles/academia.md +751 -787
  60. package/gsp/skills/gsp-style/styles/art-deco.md +316 -352
  61. package/gsp/skills/gsp-style/styles/bauhaus.md +189 -225
  62. package/gsp/skills/gsp-style/styles/bold-typography.md +433 -469
  63. package/gsp/skills/gsp-style/styles/botanical.md +141 -177
  64. package/gsp/skills/gsp-style/styles/claymorphism.md +377 -413
  65. package/gsp/skills/gsp-style/styles/cyberpunk.md +419 -455
  66. package/gsp/skills/gsp-style/styles/enterprise.md +224 -260
  67. package/gsp/skills/gsp-style/styles/flat-design.md +119 -155
  68. package/gsp/skills/gsp-style/styles/fluent.md +0 -31
  69. package/gsp/skills/gsp-style/styles/glassmorphism.md +0 -36
  70. package/gsp/skills/gsp-style/styles/humanist-literary.md +0 -28
  71. package/gsp/skills/gsp-style/styles/industrial.md +406 -438
  72. package/gsp/skills/gsp-style/styles/kinetic.md +531 -563
  73. package/gsp/skills/gsp-style/styles/liquid-glass.md +0 -36
  74. package/gsp/skills/gsp-style/styles/luxury.md +402 -438
  75. package/gsp/skills/gsp-style/styles/material.md +555 -591
  76. package/gsp/skills/gsp-style/styles/maximalism.md +875 -911
  77. package/gsp/skills/gsp-style/styles/minimal-dark.md +442 -478
  78. package/gsp/skills/gsp-style/styles/modern-dark.md +390 -426
  79. package/gsp/skills/gsp-style/styles/monochrome.md +472 -504
  80. package/gsp/skills/gsp-style/styles/neubrutalism.md +354 -390
  81. package/gsp/skills/gsp-style/styles/neumorphism.md +195 -231
  82. package/gsp/skills/gsp-style/styles/newsprint.md +529 -565
  83. package/gsp/skills/gsp-style/styles/nothing.md +445 -0
  84. package/gsp/skills/gsp-style/styles/nothing.yml +146 -0
  85. package/gsp/skills/gsp-style/styles/organic.md +177 -213
  86. package/gsp/skills/gsp-style/styles/playful-geometric.md +211 -247
  87. package/gsp/skills/gsp-style/styles/professional.md +503 -539
  88. package/gsp/skills/gsp-style/styles/retro.md +664 -700
  89. package/gsp/skills/gsp-style/styles/saas.md +490 -526
  90. package/gsp/skills/gsp-style/styles/sketch.md +189 -225
  91. package/gsp/skills/gsp-style/styles/swiss-minimalist.md +195 -227
  92. package/gsp/skills/gsp-style/styles/terminal.md +99 -135
  93. package/gsp/skills/gsp-style/styles/vaporwave.md +356 -392
  94. package/gsp/skills/gsp-style/styles/web3.md +337 -373
  95. package/gsp/skills/gsp-typography/SKILL.md +0 -1
  96. package/gsp/skills/gsp-update/SKILL.md +0 -1
  97. package/gsp/skills/gsp-visuals/SKILL.md +0 -1
  98. package/gsp/templates/branding/config.json +3 -2
  99. package/gsp/templates/exports-index.md +0 -7
  100. package/gsp/templates/phases/build.md +13 -4
  101. package/gsp/templates/projects/config.json +3 -2
  102. package/gsp/templates/projects/roadmap.md +0 -7
  103. package/gsp/templates/projects/state.md +0 -4
  104. package/package.json +1 -1
  105. package/scripts/lint-check.sh +1 -1
  106. package/gsp/agents/gsp-ascii-artist.md +0 -66
  107. package/gsp/agents/gsp-brand-syncer.md +0 -126
  108. package/gsp/agents/gsp-campaign-director.md +0 -79
  109. package/gsp/agents/gsp-scoper.md +0 -85
  110. package/gsp/skills/gsp-launch/SKILL.md +0 -97
  111. package/gsp/skills/gsp-start/questioning.md +0 -87
  112. package/gsp/templates/phases/launch.md +0 -55
@@ -0,0 +1,445 @@
1
+ <design-system>
2
+ # Design Style: Nothing
3
+
4
+ ## Design Philosophy
5
+
6
+ ### Core Principle
7
+
8
+ **Subtract, don't add.** Every element must earn its pixel. Structure is the ornament — expose the grid, the data, the hierarchy itself. Monochrome is the canvas; color is an event, not a default. Typography does the heavy lifting through scale, weight, and spacing — not color, not icons, not borders.
9
+
10
+ ### Visual Vibe
11
+
12
+ **Emotional Keywords**: Industrial, Precise, Mechanical, Confident, Sparse, Technical, Warm-through-restraint, Percussive, Honest
13
+
14
+ This is the visual language of:
15
+
16
+ - Nothing Phone's interface — dot-matrix meets Swiss precision
17
+ - Teenage Engineering products — instrument-panel aesthetic
18
+ - Braun industrial design — function expressed through form
19
+ - Technical manuals that are beautiful because they're clear
20
+ - A control room where every indicator serves a purpose
21
+
22
+ The design feels percussive, not fluid. Imagine UI sounds: click not swoosh, tick not chime. Mechanical precision with a human hand felt underneath.
23
+
24
+ ### What This Design Is NOT
25
+
26
+ - Not pure darkness for mood (uses OLED black for function)
27
+ - Not atmospheric or ambient (no glows, no blurred orbs)
28
+ - Not cold or sterile (industrial warmth through typography craft)
29
+ - Not colorful (monochrome with red as emergency signal only)
30
+ - Not soft or rounded (flat, sharp, instrument-like)
31
+ - Not similar to Minimal Dark (no amber, no glass, no shadows)
32
+ - Not similar to Modern Dark (no gradients, no ambient lighting)
33
+ - Not similar to Terminal (shares monospace DNA but broader type palette, more compositional ambition)
34
+
35
+ ### The DNA of Nothing
36
+
37
+ #### 1. Three-Layer Visual Hierarchy
38
+
39
+ Every screen has exactly three layers of importance — not two, not five. Primary: the ONE thing (Doto or Space Grotesk at display size, #FFFFFF). Secondary: supporting context (Space Grotesk body, #E8E8E8). Tertiary: metadata pushed to edges (Space Mono ALL CAPS, #999999 or #666666).
40
+
41
+ The test: squint at the screen. Can you still tell what's most important? If two things compete, one needs to shrink, fade, or move. Be brave — make the primary absurdly large and the tertiary absurdly small. The contrast IS the hierarchy.
42
+
43
+ #### 2. Monochrome Gray Scale as Hierarchy
44
+
45
+ The gray scale IS the design system. Max four levels per screen:
46
+
47
+ ```
48
+ #FFFFFF (100%) → Hero numbers. One per screen.
49
+ #E8E8E8 (90%) → Body text, primary content.
50
+ #999999 (60%) → Labels, captions, metadata.
51
+ #666666 (40%) → Disabled, timestamps, hints.
52
+ ```
53
+
54
+ Red (#D71921) is not part of the hierarchy. It's an interrupt — "look HERE, NOW." If nothing is urgent, no red on screen.
55
+
56
+ #### 3. Font Discipline
57
+
58
+ Per screen, maximum: 2 font families (Space Grotesk + Space Mono, Doto only for hero moments), 3 font sizes (one large, one medium, one small), 2 font weights (Regular + one other). Think of it as a budget — every additional size/weight costs visual coherence.
59
+
60
+ **Doto** (variable dot-matrix): 36px+ only, tight tracking, hero numbers and display moments. Never for body text.
61
+
62
+ **Space Grotesk** (geometric sans): Body text, headings, subheadings. Light 300, Regular 400, Medium 500.
63
+
64
+ **Space Mono** (monospace): ALL data, ALL labels (always ALL CAPS with 0.06-0.1em letter-spacing at 11-12px). The instrument panel voice.
65
+
66
+ #### 4. Spacing as Meaning
67
+
68
+ Spacing is the primary tool for communicating relationships:
69
+
70
+ ```
71
+ Tight (4-8px) = "These belong together" (icon + label, number + unit)
72
+ Medium (16px) = "Same group, different items" (list items, form fields)
73
+ Wide (32-48px) = "New group starts here" (section breaks)
74
+ Vast (64-96px) = "This is a new context" (hero to content, major divisions)
75
+ ```
76
+
77
+ If a divider line is needed, the spacing is probably wrong. Dividers are a symptom of insufficient spacing contrast.
78
+
79
+ #### 5. Flat Surfaces, Zero Shadows
80
+
81
+ No shadows anywhere. No blur. No glassmorphism. Flat surfaces separated by borders (#222222 subtle, #333333 intentional). Cards are #111111 on #000000 — elevation through value, not depth illusion.
82
+
83
+ #### 6. Asymmetric Composition
84
+
85
+ Centered layouts feel generic. Favor deliberately unbalanced composition: large left + small right, top-heavy, edge-anchored. Balance heavy elements with more empty space, not with more heavy elements.
86
+
87
+ #### 7. One Moment of Surprise
88
+
89
+ A single break from the pattern per screen IS the design. Without it: sterile grid. With more than one: visual chaos. A dot-matrix headline, a circular widget among rectangles, a red accent among grays, a vast gap where everything else is tight.
90
+
91
+ ---
92
+
93
+ ## Design Token System
94
+
95
+ ### Colors (OLED Black + Gray Scale)
96
+
97
+ ```
98
+ background: #000000 (OLED pure black)
99
+ surface: #111111 (elevated surfaces, cards)
100
+ surfaceRaised: #1A1A1A (secondary elevation)
101
+ border: #222222 (subtle dividers, decorative only)
102
+ borderVisible: #333333 (intentional borders, wireframe lines)
103
+ textDisabled: #666666 (disabled text, decorative, 4.0:1 contrast)
104
+ textSecondary: #999999 (labels, captions, metadata, 6.3:1 contrast)
105
+ textPrimary: #E8E8E8 (body text, 16.5:1 contrast)
106
+ textDisplay: #FFFFFF (headlines, hero numbers, 21:1 contrast)
107
+ accent: #D71921 (signal red — active states, urgent, destructive)
108
+ accentSubtle: rgba(215,25,33,0.15) (accent tint backgrounds)
109
+ success: #4A9E5C (confirmed, completed, in-range)
110
+ warning: #D4A843 (caution, pending, degraded)
111
+ info: #999999 (uses secondary text color)
112
+ interactive: #5B9BF6 (tappable text: links, picker values — not for buttons)
113
+ ```
114
+
115
+ ### Light Mode
116
+
117
+ Neither mode is "derived" — both get full design attention.
118
+
119
+ | Token | Dark | Light |
120
+ |-------|------|-------|
121
+ | background | #000000 | #F5F5F5 |
122
+ | surface | #111111 | #FFFFFF |
123
+ | surfaceRaised | #1A1A1A | #F0F0F0 |
124
+ | border | #222222 | #E8E8E8 |
125
+ | borderVisible | #333333 | #CCCCCC |
126
+ | textDisabled | #666666 | #999999 |
127
+ | textSecondary | #999999 | #666666 |
128
+ | textPrimary | #E8E8E8 | #1A1A1A |
129
+ | textDisplay | #FFFFFF | #000000 |
130
+ | interactive | #5B9BF6 | #007AFF |
131
+
132
+ Dark feel: instrument panel in a dark room. OLED black, white data glowing.
133
+ Light feel: printed technical manual. Off-white paper, black ink.
134
+
135
+ ### Typography
136
+
137
+ **Font Stack** (all Google Fonts — declare before building):
138
+
139
+ | Role | Font | Fallback | Weight |
140
+ |------|------|----------|--------|
141
+ | Display | Doto | Space Mono, monospace | 400-700 variable |
142
+ | Body/UI | Space Grotesk | DM Sans, system-ui, sans-serif | 300, 400, 500 |
143
+ | Data/Labels | Space Mono | JetBrains Mono, SF Mono, monospace | 400, 700 |
144
+
145
+ **Type Scale**:
146
+
147
+ ```
148
+ display-xl: 72px / 1.0 / -0.03em (hero numbers, time displays)
149
+ display-lg: 48px / 1.05 / -0.02em (section heroes, percentages)
150
+ display-md: 36px / 1.1 / -0.02em (page titles)
151
+ heading: 24px / 1.2 / -0.01em (section headings)
152
+ subheading: 18px / 1.3 / 0 (subsections)
153
+ body: 16px / 1.5 / 0 (body text)
154
+ body-sm: 14px / 1.5 / 0.01em (secondary body)
155
+ caption: 12px / 1.4 / 0.04em (timestamps, footnotes)
156
+ label: 11px / 1.2 / 0.08em (ALL CAPS monospace labels)
157
+ ```
158
+
159
+ ### Border Radius
160
+
161
+ ```
162
+ technical: 4px (buttons when technical variant, small elements)
163
+ compact: 8px (compact cards, inputs)
164
+ standard: 12px (standard cards)
165
+ large: 16px (max for cards — never larger)
166
+ pill: 999px (primary/secondary buttons, tags)
167
+ ```
168
+
169
+ ### Spacing (8px base)
170
+
171
+ ```
172
+ 2xs: 2px (optical adjustments only)
173
+ xs: 4px (icon-to-label gaps)
174
+ sm: 8px (component internal spacing)
175
+ md: 16px (standard padding, element gaps)
176
+ lg: 24px (group separation)
177
+ xl: 32px (section margins)
178
+ 2xl: 48px (major section breaks)
179
+ 3xl: 64px (page-level vertical rhythm)
180
+ 4xl: 96px (hero breathing room)
181
+ ```
182
+
183
+ ---
184
+
185
+ ## Component Stylings
186
+
187
+ ### Buttons
188
+
189
+ **Primary** (inverted — white on black):
190
+ ```
191
+ Background: #FFFFFF
192
+ Text: #000000
193
+ Border: none
194
+ Radius: 999px (pill)
195
+ Font: Space Mono, 13px, ALL CAPS, letter-spacing 0.06em
196
+ Padding: 12px 24px, min-height 44px
197
+ Hover: no glow, no scale — opacity or border state change only
198
+ ```
199
+
200
+ **Secondary** (outlined):
201
+ ```
202
+ Background: transparent
203
+ Text: #E8E8E8
204
+ Border: 1px solid #333333
205
+ Radius: 999px (pill)
206
+ Hover: border brightens to #E8E8E8
207
+ ```
208
+
209
+ **Ghost** (text only):
210
+ ```
211
+ Background: transparent
212
+ Text: #999999
213
+ Border: none
214
+ Hover: text brightens to #E8E8E8
215
+ ```
216
+
217
+ **Destructive** (red outlined):
218
+ ```
219
+ Background: transparent
220
+ Text: #D71921
221
+ Border: 1px solid #D71921
222
+ Radius: 999px (pill)
223
+ ```
224
+
225
+ ### Cards
226
+
227
+ ```
228
+ Background: #111111 (or #1A1A1A for raised)
229
+ Border: 1px solid #222222
230
+ Radius: 12-16px
231
+ Padding: 16-24px
232
+ Shadow: none — never
233
+ Hover (when interactive): border brightens to #333333
234
+ ```
235
+
236
+ No glass effects. No transparency. No backdrop-blur. Flat, honest surfaces.
237
+
238
+ ### Inputs
239
+
240
+ ```
241
+ Style: underline preferred (1px solid #333333 bottom border)
242
+ Alternative: full border with 8px radius
243
+ Label: Space Mono, ALL CAPS, 11px, #999999, positioned above
244
+ Focus: border → #E8E8E8
245
+ Error: border → #D71921, message below in #D71921
246
+ Data entry: Space Mono for input text
247
+ ```
248
+
249
+ ### Lists / Data Rows
250
+
251
+ ```
252
+ Dividers: 1px solid #222222, full-width
253
+ Row padding: 12-16px vertical
254
+ Label (left): Space Mono ALL CAPS, #999999
255
+ Value (right): #E8E8E8, status color when encoding data
256
+ Never alternating row backgrounds
257
+ ```
258
+
259
+ ### Navigation
260
+
261
+ ```
262
+ Desktop: horizontal text bar
263
+ Labels: Space Mono, ALL CAPS
264
+ Active: #FFFFFF + dot or underline indicator
265
+ Inactive: #666666
266
+ Format: bracket [ HOME ] GALLERY INFO or pipe-delimited
267
+ Back button: circular 40-44px, #111111 bg, thin chevron
268
+ ```
269
+
270
+ ### Tags / Chips
271
+
272
+ ```
273
+ Border: 1px solid #333333, no fill
274
+ Text: Space Mono, 11-12px, ALL CAPS
275
+ Radius: 999px (pill) or 4px (technical)
276
+ Padding: 4px 12px
277
+ Active: #FFFFFF border + text
278
+ ```
279
+
280
+ ---
281
+
282
+ ## Data Visualization
283
+
284
+ ### Segmented Progress Bars (Signature Element)
285
+
286
+ The signature data visualization — discrete rectangular blocks with 2px gaps. Square-ended, no border-radius. Mechanical, instrument-like.
287
+
288
+ ```
289
+ Filled: solid status color
290
+ Empty: #222222 (dark) / #E0E0E0 (light)
291
+ Sizes: Hero 16-20px, Standard 8-12px, Compact 4-6px height
292
+ Always pair with numeric readout
293
+ ```
294
+
295
+ ### Charts
296
+
297
+ ```
298
+ Line: 1.5-2px #FFFFFF
299
+ Average: dashed 1px #999999
300
+ Axis labels: Space Mono, caption size
301
+ Grid: #222222, horizontal only
302
+ No area fill, no legend boxes — label lines directly
303
+ ```
304
+
305
+ ### General Rules
306
+
307
+ - Differentiate with opacity (100%/60%/30%) or pattern (solid/striped/dotted) before introducing color
308
+ - Apply status color to the value itself, not labels or backgrounds
309
+ - Always show numeric value alongside any visual
310
+
311
+ ---
312
+
313
+ ## Special Elements
314
+
315
+ ### Dot-Matrix Motif
316
+
317
+ Use for: hero typography (Doto font), decorative grid backgrounds, loading indicators, empty state illustrations.
318
+
319
+ ```css
320
+ /* Standard dot grid */
321
+ background-image: radial-gradient(circle, #333333 1px, transparent 1px);
322
+ background-size: 16px 16px;
323
+
324
+ /* Subtle dot grid */
325
+ background-image: radial-gradient(circle, #222222 0.5px, transparent 0.5px);
326
+ background-size: 12px 12px;
327
+ ```
328
+
329
+ Dots 1-2px, uniform 12-16px spacing. Opacity 0.1-0.2 for backgrounds, full for data. Never as container border or button style.
330
+
331
+ ### State Patterns
332
+
333
+ ```
334
+ Error: input border → #D71921 + message below. Inline: [ERROR] prefix
335
+ Empty: centered, 96px+ padding, #999999 headline, dot-matrix illustration, no mascots
336
+ Loading: segmented spinner or [LOADING...] bracket text — never skeleton screens
337
+ Disabled: opacity 0.4 or #666666 text, borders fade to #222222
338
+ Status: inline text — [SAVED], [ERROR: ...], [LOADING...] in Space Mono caption
339
+ ```
340
+
341
+ ---
342
+
343
+ ## Layout Strategy
344
+
345
+ ### Composition
346
+
347
+ - Asymmetric over centered — large left + small right, top-heavy, edge-anchored
348
+ - Three layers visible on every screen (primary / secondary / tertiary)
349
+ - One deliberate pattern-break per screen (the surprise IS the design)
350
+ - Generous negative space — resist filling empty areas
351
+
352
+ ### Container Strategy (prefer lightest)
353
+
354
+ 1. Spacing alone (proximity groups items)
355
+ 2. A single divider line
356
+ 3. A subtle border outline
357
+ 4. A surface card with background change
358
+
359
+ Never box the most important element — let it float on the background.
360
+
361
+ ### Visual Variety in Data-Dense Screens
362
+
363
+ When 3+ data sections appear, vary the visual form:
364
+
365
+ | Form | Weight |
366
+ |------|--------|
367
+ | Hero number (large Doto/Space Mono) | Heavy — use once |
368
+ | Segmented progress bar | Medium |
369
+ | Concentric rings / arcs | Medium |
370
+ | Inline compact bar | Light |
371
+ | Number-only with status color | Lightest |
372
+ | Sparkline | Medium |
373
+ | Stat row (label + value) | Light |
374
+
375
+ Lead section → heaviest treatment. The form varies, the voice stays the same.
376
+
377
+ ---
378
+
379
+ ## Effects & Animation
380
+
381
+ **Motion Philosophy**: Percussive, not fluid. Click not swoosh.
382
+
383
+ - Transitions: 150-250ms, `cubic-bezier(0.25, 0.1, 0.25, 1)` — subtle ease-out
384
+ - Prefer opacity over position — elements fade, don't slide
385
+ - Hover: border/text brightens. No scale, no shadows, no glow
386
+ - No parallax, scroll-jacking, spring/bounce
387
+ - Loading: segmented spinner (hardware-style) or bracket text
388
+
389
+ ---
390
+
391
+ ## Iconography
392
+
393
+ - Monoline, 1.5px stroke, no fill
394
+ - 24x24 base, 20x20 live area, round caps/joins
395
+ - Color inherits text color, max 5-6 strokes
396
+ - Libraries: Lucide (thin), Phosphor (thin)
397
+ - Never filled, never multi-color
398
+
399
+ ---
400
+
401
+ ## Accessibility
402
+
403
+ **Contrast Ratios** (dark mode):
404
+
405
+ | Element | Foreground | Background | Ratio |
406
+ |---------|-----------|------------|-------|
407
+ | Display text | #FFFFFF | #000000 | 21:1 (AAA) |
408
+ | Primary text | #E8E8E8 | #000000 | 16.5:1 (AAA) |
409
+ | Secondary text | #999999 | #000000 | 6.3:1 (AA) |
410
+ | Disabled text | #666666 | #000000 | 4.0:1 (AA large) |
411
+
412
+ **Focus States**: border → #E8E8E8 — sharp, visible, mechanical. No decorative rings or glows.
413
+
414
+ ---
415
+
416
+ ## Bold Choices (Non-Negotiable)
417
+
418
+ 1. **OLED pure black** (#000000) — not "rich dark" or slate, actual black
419
+ 2. **Zero shadows** — flat surfaces, border separation only
420
+ 3. **Red is a signal** (#D71921) — one per screen max, never decorative
421
+ 4. **Space Mono ALL CAPS for every label** — the instrument-panel voice
422
+ 5. **Three-layer hierarchy on every screen** — primary absurdly large, tertiary absurdly small
423
+ 6. **Asymmetric composition** — never default to centered
424
+ 7. **Doto for hero moments** — dot-matrix display font, 36px+ only
425
+ 8. **Spacing over dividers** — if you need a line, the spacing is wrong
426
+ 9. **Data as beauty** — `36GB/s` in Space Mono at 48px IS the visual
427
+
428
+ ---
429
+
430
+ ## What Success Looks Like
431
+
432
+ A successfully implemented Nothing design should feel like:
433
+
434
+ - A Nothing Phone's interface — precise, monochromatic, with a dot-matrix surprise
435
+ - A Teenage Engineering product — instrument panel, every control serves a purpose
436
+ - A Braun alarm clock — mechanical honesty, industrial warmth
437
+ - Technical documentation that's beautiful because it's clear
438
+
439
+ It should NOT feel like:
440
+
441
+ - Dark mode with moody atmosphere (no glows, no ambient lighting)
442
+ - Minimalist in a soft, gentle way (this is minimalist in a precise, mechanical way)
443
+ - A terminal emulator (shares DNA but has broader typographic ambition)
444
+ - Generic monochrome (the red signal, Doto display, and asymmetry give it personality)
445
+ </design-system>
@@ -0,0 +1,146 @@
1
+ name: nothing
2
+ description: Monochromatic industrial precision — OLED black, Space Grotesk type hierarchy, red signal accent, dot-matrix motifs, no shadows
3
+ tags: [monochrome, industrial, dark, minimal, technical, instrument, mechanical, swiss]
4
+
5
+ tokens:
6
+ color:
7
+ primary: "#FFFFFF"
8
+ secondary: "#999999"
9
+ accent: "#D71921"
10
+ background: "#000000"
11
+ surface: "#111111"
12
+ on-primary: "#000000"
13
+ on-background: "#E8E8E8"
14
+ error: "#D71921"
15
+ success: "#4A9E5C"
16
+ warning: "#D4A843"
17
+ info: "#999999"
18
+ muted: "#666666"
19
+
20
+ typography:
21
+ font-family-primary: "Space Grotesk, DM Sans, system-ui, sans-serif"
22
+ font-family-mono: "Space Mono, JetBrains Mono, SF Mono, monospace"
23
+ font-family-display: "Doto, Space Mono, monospace"
24
+ font-weight-heading: 400
25
+ font-weight-body: 400
26
+ font-size-base: "16px"
27
+ line-height-base: 1.5
28
+
29
+ shape:
30
+ border-radius-sm: "4px"
31
+ border-radius-md: "8px"
32
+ border-radius-lg: "12px"
33
+ border-radius-pill: "999px"
34
+ border-width: "1px"
35
+ border-color: "#222222"
36
+
37
+ elevation:
38
+ shadow-sm: "none"
39
+ shadow-md: "none"
40
+ shadow-lg: "none"
41
+ shadow-xl: "none"
42
+
43
+ spacing:
44
+ base: 8
45
+ scale: [2, 4, 8, 16, 24, 32, 48, 64, 96]
46
+
47
+ motion:
48
+ duration-fast: "150ms"
49
+ duration-normal: "250ms"
50
+ easing: "cubic-bezier(0.25, 0.1, 0.25, 1)"
51
+
52
+ dark_mode:
53
+ color:
54
+ background: "#000000"
55
+ surface: "#111111"
56
+ on-background: "#E8E8E8"
57
+ border-color: "#222222"
58
+ muted: "#666666"
59
+
60
+ light_mode:
61
+ color:
62
+ background: "#F5F5F5"
63
+ surface: "#FFFFFF"
64
+ on-background: "#1A1A1A"
65
+ border-color: "#E8E8E8"
66
+ muted: "#999999"
67
+
68
+ intensity:
69
+ variance: 3 # deliberate asymmetry but disciplined grid
70
+ motion: 2 # percussive, not fluid — opacity fades only
71
+ density: 5 # information-dense, instrument-panel aesthetic
72
+
73
+ patterns:
74
+ card:
75
+ border: "1px solid #222222"
76
+ shadow: "none"
77
+ radius: "12-16px cards, 8px compact, 4px technical"
78
+ background: "#111111"
79
+ padding: "16-24px"
80
+ button-primary:
81
+ background: "#FFFFFF"
82
+ border: "none"
83
+ text: "Space Mono, 13px, ALL CAPS, letter-spacing 0.06em, #000000"
84
+ radius: "999px (pill)"
85
+ button-secondary:
86
+ background: "transparent"
87
+ border: "1px solid #333333"
88
+ text: "Space Mono, 13px, ALL CAPS, letter-spacing 0.06em, #E8E8E8"
89
+ radius: "999px (pill)"
90
+ input:
91
+ border: "1px solid #333333 bottom (underline preferred) or full border 8px radius"
92
+ radius: "8px"
93
+ background: "transparent"
94
+ focus: "border → #E8E8E8"
95
+ badge:
96
+ shape: "pill (999px) or technical (4px)"
97
+ text: "Space Mono, 11px, ALL CAPS, letter-spacing 0.06em"
98
+ nav:
99
+ style: "horizontal text bar desktop, bottom bar mobile — bracket [ACTIVE] or pipe delimited"
100
+ links: "Space Mono, ALL CAPS — active: #FFFFFF + dot/underline, inactive: #666666"
101
+ layout:
102
+ archetype: "asymmetric-grid"
103
+ max-width: "max-w-6xl"
104
+ section-spacing: "64-96px — vast breathing room"
105
+ grid-gap: "gap-4 to gap-6"
106
+ surfaces: "OLED black (#000) → surface (#111) → raised (#1A1A1A)"
107
+ decoration: "dot-matrix grid (16px spacing, 1px dots), Doto display headlines"
108
+
109
+ constraints:
110
+ never:
111
+ - "gradients in UI chrome"
112
+ - "shadows or blur — flat surfaces, border separation only"
113
+ - "skeleton loading screens — use [LOADING...] bracket text"
114
+ - "toast popups — use inline status: [SAVED], [ERROR: ...]"
115
+ - "sad-face illustrations, mascots, or emoji as UI"
116
+ - "zebra striping in tables"
117
+ - "filled icons or multi-color icons"
118
+ - "parallax, scroll-jacking, or gratuitous animation"
119
+ - "spring/bounce easing — subtle ease-out only"
120
+ - "border-radius > 16px on cards"
121
+ - "more than 2 font families per screen"
122
+ - "more than 3 font sizes per screen"
123
+ - "more than 2 font weights per screen"
124
+ - "divider lines when spacing alone would work"
125
+ always:
126
+ - "three-layer visual hierarchy: primary (display), secondary (body), tertiary (metadata)"
127
+ - "Space Mono ALL CAPS with wide letter-spacing for all labels"
128
+ - "OLED black (#000000) as primary background"
129
+ - "red accent (#D71921) used as signal — one per screen, never decorative"
130
+ - "one moment of deliberate pattern-break per screen (the design IS the single surprise)"
131
+ - "asymmetric composition over centered layouts"
132
+ - "data and numbers displayed in Space Mono — data as beauty"
133
+
134
+ effects:
135
+ interaction-vocabulary: [border-brighten, opacity-fade, mechanical-press]
136
+ hover:
137
+ card: "border-brighten — border shifts #222→#333, text brightens"
138
+ button: "border-brighten — border/text brightens, no scale, no shadows"
139
+ active:
140
+ button: "mechanical-press — no spring, immediate state change"
141
+ focus:
142
+ general: "border → #E8E8E8, no ring glow — sharp and mechanical"
143
+ transition: "150-250ms cubic-bezier(0.25, 0.1, 0.25, 1)"
144
+
145
+ compatibility: [terminal, monochrome, industrial]
146
+ clashes: [botanical, glassmorphism, claymorphism, playful-geometric]