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.
- package/README.md +301 -124
- package/bin/install.js +1 -1
- package/gsp/agents/gsp-accessibility-auditor.md +1 -60
- package/gsp/agents/gsp-brand-auditor.md +1 -61
- package/gsp/agents/gsp-brand-creative-director.md +10 -0
- package/gsp/agents/gsp-brand-engineer.md +1 -122
- package/gsp/agents/gsp-brand-researcher.md +11 -0
- package/gsp/agents/gsp-brand-strategist.md +1 -65
- package/gsp/agents/gsp-project-builder.md +17 -0
- package/gsp/agents/gsp-project-critic.md +11 -0
- package/gsp/agents/gsp-project-designer.md +11 -0
- package/gsp/agents/gsp-project-researcher.md +1 -74
- package/gsp/agents/gsp-project-reviewer.md +12 -0
- package/gsp/hooks/hooks.json +32 -14
- package/gsp/skills/get-shit-pretty/SKILL.md +2 -5
- package/gsp/skills/gsp-accessibility/SKILL.md +0 -1
- package/gsp/skills/gsp-accessibility-audit/SKILL.md +9 -8
- package/gsp/skills/gsp-accessibility-audit/methodology/gsp-accessibility-auditor.md +59 -0
- package/gsp/skills/gsp-add-reference/SKILL.md +0 -1
- package/gsp/skills/gsp-art/SKILL.md +13 -10
- package/gsp/skills/gsp-brand-audit/SKILL.md +4 -2
- package/gsp/skills/gsp-brand-audit/methodology/gsp-brand-auditor.md +61 -0
- package/gsp/skills/gsp-brand-brief/SKILL.md +129 -0
- package/gsp/skills/gsp-brand-guidelines/SKILL.md +13 -11
- package/gsp/skills/gsp-brand-guidelines/methodology/gsp-brand-engineer.md +122 -0
- package/gsp/skills/gsp-brand-identity/SKILL.md +19 -18
- package/gsp/{agents/gsp-creative-director.md → skills/gsp-brand-identity/methodology/gsp-brand-creative-director.md} +0 -9
- package/gsp/skills/gsp-brand-refine/SKILL.md +0 -1
- package/gsp/skills/gsp-brand-research/SKILL.md +13 -13
- package/gsp/{agents/gsp-researcher.md → skills/gsp-brand-research/methodology/gsp-brand-researcher.md} +0 -10
- package/gsp/skills/gsp-brand-strategy/SKILL.md +14 -14
- package/gsp/skills/gsp-brand-strategy/methodology/gsp-brand-strategist.md +65 -0
- package/gsp/skills/gsp-brand-sync/SKILL.md +60 -10
- package/gsp/skills/gsp-color/SKILL.md +0 -1
- package/gsp/skills/gsp-design-system/SKILL.md +0 -1
- package/gsp/skills/gsp-doctor/SKILL.md +0 -1
- package/gsp/skills/gsp-help/SKILL.md +10 -7
- package/gsp/skills/gsp-icons/SKILL.md +0 -1
- package/gsp/skills/gsp-logo/SKILL.md +0 -1
- package/gsp/skills/gsp-phase-transition/SKILL.md +0 -3
- package/gsp/skills/gsp-pretty/SKILL.md +25 -24
- package/gsp/skills/gsp-progress/SKILL.md +0 -1
- package/gsp/skills/gsp-project-brief/SKILL.md +51 -22
- package/gsp/skills/gsp-project-build/SKILL.md +216 -74
- package/gsp/skills/gsp-project-build/bento-grid.md +114 -0
- package/gsp/{agents/gsp-builder.md → skills/gsp-project-build/methodology/gsp-project-builder.md} +14 -16
- package/gsp/skills/gsp-project-critique/SKILL.md +21 -17
- package/gsp/{agents/gsp-critic.md → skills/gsp-project-critique/methodology/gsp-project-critic.md} +0 -11
- package/gsp/skills/gsp-project-design/SKILL.md +9 -6
- package/gsp/{agents/gsp-designer.md → skills/gsp-project-design/methodology/gsp-project-designer.md} +0 -11
- package/gsp/skills/gsp-project-research/SKILL.md +4 -2
- package/gsp/skills/gsp-project-research/methodology/gsp-project-researcher.md +73 -0
- package/gsp/skills/gsp-project-review/SKILL.md +8 -5
- package/gsp/{agents/gsp-reviewer.md → skills/gsp-project-review/methodology/gsp-project-reviewer.md} +0 -12
- package/gsp/skills/gsp-scaffold/SKILL.md +0 -1
- package/gsp/skills/gsp-start/SKILL.md +59 -210
- package/gsp/skills/gsp-style/SKILL.md +1 -2
- package/gsp/skills/gsp-style/styles/INDEX.yml +7 -1
- package/gsp/skills/gsp-style/styles/academia.md +751 -787
- package/gsp/skills/gsp-style/styles/art-deco.md +316 -352
- package/gsp/skills/gsp-style/styles/bauhaus.md +189 -225
- package/gsp/skills/gsp-style/styles/bold-typography.md +433 -469
- package/gsp/skills/gsp-style/styles/botanical.md +141 -177
- package/gsp/skills/gsp-style/styles/claymorphism.md +377 -413
- package/gsp/skills/gsp-style/styles/cyberpunk.md +419 -455
- package/gsp/skills/gsp-style/styles/enterprise.md +224 -260
- package/gsp/skills/gsp-style/styles/flat-design.md +119 -155
- package/gsp/skills/gsp-style/styles/fluent.md +0 -31
- package/gsp/skills/gsp-style/styles/glassmorphism.md +0 -36
- package/gsp/skills/gsp-style/styles/humanist-literary.md +0 -28
- package/gsp/skills/gsp-style/styles/industrial.md +406 -438
- package/gsp/skills/gsp-style/styles/kinetic.md +531 -563
- package/gsp/skills/gsp-style/styles/liquid-glass.md +0 -36
- package/gsp/skills/gsp-style/styles/luxury.md +402 -438
- package/gsp/skills/gsp-style/styles/material.md +555 -591
- package/gsp/skills/gsp-style/styles/maximalism.md +875 -911
- package/gsp/skills/gsp-style/styles/minimal-dark.md +442 -478
- package/gsp/skills/gsp-style/styles/modern-dark.md +390 -426
- package/gsp/skills/gsp-style/styles/monochrome.md +472 -504
- package/gsp/skills/gsp-style/styles/neubrutalism.md +354 -390
- package/gsp/skills/gsp-style/styles/neumorphism.md +195 -231
- package/gsp/skills/gsp-style/styles/newsprint.md +529 -565
- package/gsp/skills/gsp-style/styles/nothing.md +445 -0
- package/gsp/skills/gsp-style/styles/nothing.yml +146 -0
- package/gsp/skills/gsp-style/styles/organic.md +177 -213
- package/gsp/skills/gsp-style/styles/playful-geometric.md +211 -247
- package/gsp/skills/gsp-style/styles/professional.md +503 -539
- package/gsp/skills/gsp-style/styles/retro.md +664 -700
- package/gsp/skills/gsp-style/styles/saas.md +490 -526
- package/gsp/skills/gsp-style/styles/sketch.md +189 -225
- package/gsp/skills/gsp-style/styles/swiss-minimalist.md +195 -227
- package/gsp/skills/gsp-style/styles/terminal.md +99 -135
- package/gsp/skills/gsp-style/styles/vaporwave.md +356 -392
- package/gsp/skills/gsp-style/styles/web3.md +337 -373
- package/gsp/skills/gsp-typography/SKILL.md +0 -1
- package/gsp/skills/gsp-update/SKILL.md +0 -1
- package/gsp/skills/gsp-visuals/SKILL.md +0 -1
- package/gsp/templates/branding/config.json +3 -2
- package/gsp/templates/exports-index.md +0 -7
- package/gsp/templates/phases/build.md +13 -4
- package/gsp/templates/projects/config.json +3 -2
- package/gsp/templates/projects/roadmap.md +0 -7
- package/gsp/templates/projects/state.md +0 -4
- package/package.json +1 -1
- package/scripts/lint-check.sh +1 -1
- package/gsp/agents/gsp-ascii-artist.md +0 -66
- package/gsp/agents/gsp-brand-syncer.md +0 -126
- package/gsp/agents/gsp-campaign-director.md +0 -79
- package/gsp/agents/gsp-scoper.md +0 -85
- package/gsp/skills/gsp-launch/SKILL.md +0 -97
- package/gsp/skills/gsp-start/questioning.md +0 -87
- 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]
|