darkmatter-css/SKILL.md 5.7 K raw
1
---
2
name: darkmatter-css
3
description: Use when building any web UI for Steve - applies his personal dark aesthetic with Commit Mono font, #121113 background, white borders, minimal layout, and max-width centered content. Use for new pages, components, or when asked to match his existing style.
4
---
5
6
# Darkmatter CSS
7
8
## Overview
9
10
Steve's personal web aesthetic: dark, minimal, monospace. No frameworks, no decorative flourishes. Everything is functional and stark.
11
12
## Core Palette
13
14
| Token | Value | Usage |
15
|-------|-------|-------|
16
| Background | `#121113` | All surfaces — html, inputs, buttons, textarea |
17
| Foreground | `#ffffff` | All text and borders |
18
| Border | `1px solid white` | Inputs, buttons, textarea |
19
| Gray Dark | `#1e1c1f` | Code block backgrounds |
20
| Gray Mid | `#333` | Dividers, list item borders, section separators |
21
| Gray Light | `#555` | Tertiary borders (blockquote borders) |
22
23
**No accent colors, no gradients.** Background, white, and grays only.
24
25
### Visual Hierarchy via Opacity (NOT gray color values)
26
27
Use opacity on white text instead of gray hex colors for secondary/tertiary text:
28
29
| Level | Opacity | Usage |
30
|-------|---------|-------|
31
| Primary | 1.0 | Headings, body text, links |
32
| Secondary | 0.7 | Labels, form labels, blockquotes |
33
| Tertiary | 0.5 | Nav links dimmed, table headers, dates, metadata, empty states |
34
| Muted | 0.3 | Null/placeholder values |
35
| Error | 0.8 | Error messages |
36
37
**Do NOT use `color: #888` for secondary text.** Always use `opacity` on white text instead.
38
39
## Typography
40
41
- **Font:** `"Commit Mono"` (self-hosted .otf), fallback `monospace, sans-serif`
42
- Applied globally via `* { font-family: ... }`
43
- **Body font-size:** 14px
44
- **Line-height:** 1.6
45
46
### Font Size Scale
47
48
| Size | Usage |
49
|------|-------|
50
| 28px | Site logo/title (bold, uppercase) |
51
| 18px | Markdown h1 |
52
| 16px | Markdown h2, note/item titles, primary labels |
53
| 15px | Markdown h3 |
54
| 14px | Body text, inputs, buttons, markdown h4-h6 |
55
| 13px | Inline code, error messages |
56
| 12px | Nav links, form labels, metadata, dates, table headers, action links |
57
58
### Font Face Declarations
59
60
```css
61
@font-face {
62
  font-family: "Commit Mono";
63
  src: url("./assets/fonts/CommitMono-400-Regular.otf") format("opentype");
64
  font-weight: 400;
65
  font-style: normal;
66
}
67
68
@font-face {
69
  font-family: "Commit Mono";
70
  src: url("./assets/fonts/CommitMono-700-Regular.otf") format("opentype");
71
  font-weight: 700;
72
  font-style: normal;
73
}
74
```
75
76
## Base Reset
77
78
```css
79
* {
80
  padding: 0;
81
  margin: 0;
82
  box-sizing: border-box;
83
  font-family: "Commit Mono", monospace, sans-serif;
84
  scrollbar-width: none;
85
  -ms-overflow-style: none;
86
}
87
88
html {
89
  background: #121113;
90
  color: #ffffff;
91
  font-size: 14px;
92
  line-height: 1.6;
93
}
94
95
html::-webkit-scrollbar {
96
  display: none;
97
}
98
```
99
100
## Layout
101
102
Single-column, centered, max 700px wide. No top body padding — top spacing comes from header `margin-top`:
103
104
```css
105
body {
106
  display: flex;
107
  flex-direction: column;
108
  justify-content: start;
109
  align-items: start;
110
  gap: 1.5rem;
111
  min-height: 100vh;
112
  max-width: 700px;
113
  margin: auto;
114
  padding: 0 1rem;
115
}
116
117
@media (max-width: 480px) {
118
  body {
119
    padding: 1rem;
120
    gap: 1rem;
121
  }
122
}
123
```
124
125
## Header
126
127
The header uses a border-bottom separator and `margin-top: 2rem` for top spacing. The site title/logo is **always uppercase**, 28px bold:
128
129
```css
130
.header {
131
  display: flex;
132
  flex-direction: column;
133
  gap: 0.5rem;
134
  width: 100%;
135
  margin-top: 2rem;
136
  border-bottom: 1px solid #333;
137
  padding-bottom: 1rem;
138
}
139
140
.logo {
141
  font-size: 28px;
142
  font-weight: 700;
143
  text-decoration: none;
144
  text-transform: uppercase;
145
}
146
```
147
148
## Navigation Links
149
150
Compact gap, small font:
151
152
```css
153
.links {
154
  display: flex;
155
  align-items: center;
156
  gap: 0.75rem;
157
  font-size: 12px;
158
}
159
```
160
161
## Interactive Elements
162
163
All inputs, textareas, and buttons match the background — they blend into the surface with only a white border. **No border-radius**, padding uses `0.4rem 0.75rem`:
164
165
```css
166
input, textarea {
167
  background: #121113;
168
  color: #ffffff;
169
  border: 1px solid white;
170
  padding: 0.4rem 0.75rem;
171
  font-size: 14px;
172
  width: 100%;
173
  border-radius: 0;
174
}
175
176
textarea {
177
  min-height: 400px;
178
  resize: vertical;
179
}
180
181
button {
182
  background: #121113;
183
  color: #ffffff;
184
  padding: 0.4rem 0.75rem;
185
  border: 1px solid white;
186
  cursor: pointer;
187
  width: fit-content;
188
  font-size: 14px;
189
  border-radius: 0;
190
}
191
192
button:hover, a:hover {
193
  opacity: 0.7;
194
}
195
196
a {
197
  color: #ffffff;
198
  text-decoration: none;
199
}
200
```
201
202
## Labels
203
204
```css
205
label {
206
  font-size: 12px;
207
  opacity: 0.7;
208
}
209
```
210
211
## Errors
212
213
Use a left border accent, not a full box border:
214
215
```css
216
.error {
217
  color: #ffffff;
218
  border-left: 2px solid #ffffff;
219
  padding-left: 0.5rem;
220
  font-size: 13px;
221
  opacity: 0.8;
222
}
223
```
224
225
## List Items
226
227
Vertical stacking with bottom borders as dividers, 16px title size:
228
229
```css
230
.item-list {
231
  display: flex;
232
  flex-direction: column;
233
  width: 100%;
234
}
235
236
.item {
237
  display: flex;
238
  flex-direction: column;
239
  gap: 0.25rem;
240
  padding: 0.75rem 0;
241
  border-bottom: 1px solid #333;
242
}
243
244
.item:hover {
245
  opacity: 0.7;
246
}
247
248
.item-title {
249
  font-size: 16px;
250
}
251
252
.item-meta {
253
  font-size: 12px;
254
  opacity: 0.5;
255
}
256
```
257
258
## Table Headers
259
260
Uppercase, dimmed, lightweight:
261
262
```css
263
th {
264
  opacity: 0.5;
265
  font-weight: 400;
266
  font-size: 12px;
267
  text-transform: uppercase;
268
}
269
```
270
271
## Meta Tags
272
273
Always include:
274
```html
275
<meta name="theme-color" content="#121113" />
276
```
277
278
## What NOT to Do
279
280
- No `border-radius` — keep all corners sharp (explicitly set `border-radius: 0` on inputs/buttons)
281
- No box shadows or drop shadows
282
- No color other than `#121113`, `#ffffff`, and the gray tones (`#1e1c1f`, `#333`, `#555`)
283
- **No `color: #888`** — use `opacity` on white text for visual hierarchy instead
284
- No external font CDNs — fonts are self-hosted
285
- No utility frameworks (no Tailwind, no Bootstrap)
286
- No decorative elements, icons, or emojis