@noobsociety/nsds 0.1.0
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 +220 -0
- package/SKILL.md +18 -0
- package/assets/bg.png +0 -0
- package/assets/bloop.png +0 -0
- package/assets/hero.png +0 -0
- package/assets/lamp.png +0 -0
- package/assets/logo.png +0 -0
- package/assets/mailbox.png +0 -0
- package/assets/plaza.png +0 -0
- package/assets/prickle.png +0 -0
- package/assets/sign.png +0 -0
- package/components/buttons/Button.d.ts +21 -0
- package/components/buttons/Button.js +55 -0
- package/components/buttons/Button.prompt.md +22 -0
- package/components/buttons/buttons.card.html +24 -0
- package/components/cards/FeatureCard.d.ts +18 -0
- package/components/cards/FeatureCard.js +36 -0
- package/components/cards/FeatureCard.prompt.md +17 -0
- package/components/cards/QuestCard.d.ts +16 -0
- package/components/cards/QuestCard.js +27 -0
- package/components/cards/QuestCard.prompt.md +19 -0
- package/components/cards/cards.card.html +54 -0
- package/components/navigation/SectionArrow.d.ts +13 -0
- package/components/navigation/SectionArrow.js +28 -0
- package/components/navigation/navigation.card.html +29 -0
- package/components/primitives.css +407 -0
- package/components/react/index.d.ts +11 -0
- package/components/react/index.js +4 -0
- package/components/shared/styles.js +22 -0
- package/guidelines/brand.card.html +41 -0
- package/guidelines/colors.card.html +43 -0
- package/guidelines/motion.card.html +24 -0
- package/guidelines/pixel-accents.card.html +50 -0
- package/guidelines/radii-shadows.card.html +28 -0
- package/guidelines/semantic-colors.card.html +30 -0
- package/guidelines/spacing.card.html +53 -0
- package/guidelines/sprites.card.html +22 -0
- package/guidelines/type.card.html +24 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/mui-theme/ThemeProvider.tsx +20 -0
- package/mui-theme/examples/FeatureCard.tsx +52 -0
- package/mui-theme/examples/QuestStatusChip.tsx +41 -0
- package/mui-theme/examples/SectionHeader.tsx +44 -0
- package/mui-theme/index.ts +2 -0
- package/mui-theme/preview.dc.html +195 -0
- package/mui-theme/support.js +1513 -0
- package/mui-theme/theme.ts +604 -0
- package/package.json +83 -0
- package/references/noobsociety-monokai.dc.html +360 -0
- package/styles.css +12 -0
- package/support.js +1513 -0
- package/tokens/base.css +46 -0
- package/tokens/colors.css +73 -0
- package/tokens/motion.css +64 -0
- package/tokens/spacing.css +70 -0
- package/tokens/typography.css +43 -0
- package/ui-kits/homepage/index.html +319 -0
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
/* NoobSociety shared component primitives.
|
|
2
|
+
Import through styles.css; keep these classes token-driven. */
|
|
3
|
+
|
|
4
|
+
.ns-sr-only {
|
|
5
|
+
position: absolute;
|
|
6
|
+
width: 1px;
|
|
7
|
+
height: 1px;
|
|
8
|
+
padding: 0;
|
|
9
|
+
margin: -1px;
|
|
10
|
+
overflow: hidden;
|
|
11
|
+
clip: rect(0, 0, 0, 0);
|
|
12
|
+
white-space: nowrap;
|
|
13
|
+
border: 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.ns-container {
|
|
17
|
+
width: 100%;
|
|
18
|
+
max-width: var(--ns-container);
|
|
19
|
+
margin-inline: auto;
|
|
20
|
+
padding-inline: var(--ns-fluid-container);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.ns-section {
|
|
24
|
+
position: relative;
|
|
25
|
+
min-height: var(--ns-section-min);
|
|
26
|
+
padding-block: var(--ns-fluid-section-top) var(--ns-fluid-section-bottom);
|
|
27
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.ns-eyebrow {
|
|
31
|
+
display: flex;
|
|
32
|
+
align-items: center;
|
|
33
|
+
gap: var(--ns-space-2);
|
|
34
|
+
margin: 0 0 var(--ns-space-3);
|
|
35
|
+
color: var(--ns-gold);
|
|
36
|
+
font: var(--ns-weight-bold) var(--ns-pixel-lg) / 1 var(--ns-font-body);
|
|
37
|
+
letter-spacing: 0.18em;
|
|
38
|
+
text-transform: uppercase;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.ns-section-title {
|
|
42
|
+
margin: 0;
|
|
43
|
+
color: var(--ns-ink);
|
|
44
|
+
font: var(--ns-weight-bold) var(--ns-title-section) / 1.14 var(--ns-font-body);
|
|
45
|
+
letter-spacing: 0;
|
|
46
|
+
text-wrap: balance;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.ns-section-copy {
|
|
50
|
+
margin: var(--ns-space-3) 0 0;
|
|
51
|
+
color: var(--ns-ink-dim);
|
|
52
|
+
font-size: 1.05rem;
|
|
53
|
+
line-height: var(--ns-leading-normal);
|
|
54
|
+
text-wrap: pretty;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.ns-button {
|
|
58
|
+
display: inline-flex;
|
|
59
|
+
align-items: center;
|
|
60
|
+
justify-content: center;
|
|
61
|
+
gap: 0.6em;
|
|
62
|
+
min-width: 0;
|
|
63
|
+
border: 0;
|
|
64
|
+
color: inherit;
|
|
65
|
+
font-family: var(--ns-font-pixel);
|
|
66
|
+
line-height: 1;
|
|
67
|
+
text-align: center;
|
|
68
|
+
text-decoration: none;
|
|
69
|
+
white-space: nowrap;
|
|
70
|
+
cursor: pointer;
|
|
71
|
+
transition:
|
|
72
|
+
color var(--ns-transition-fast),
|
|
73
|
+
background-color var(--ns-transition-fast),
|
|
74
|
+
border-color var(--ns-transition-fast),
|
|
75
|
+
box-shadow var(--ns-transition-fast),
|
|
76
|
+
transform var(--ns-transition-fast);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.ns-button svg {
|
|
80
|
+
display: block;
|
|
81
|
+
flex: 0 0 auto;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.ns-button--sm {
|
|
85
|
+
padding: 0.625rem 0.875rem;
|
|
86
|
+
border-radius: var(--ns-radius-md);
|
|
87
|
+
font-size: var(--ns-pixel-sm);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.ns-button--md {
|
|
91
|
+
padding: 1rem 1.625rem;
|
|
92
|
+
border-radius: 0.5625rem;
|
|
93
|
+
font-size: var(--ns-pixel-md);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.ns-button--lg {
|
|
97
|
+
padding: 1.125rem 2rem;
|
|
98
|
+
border-radius: var(--ns-radius-lg);
|
|
99
|
+
font-size: var(--ns-pixel-lg);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.ns-button--play {
|
|
103
|
+
color: var(--ns-gold-btn-fg);
|
|
104
|
+
background: var(--ns-gold);
|
|
105
|
+
border: var(--ns-border-gold);
|
|
106
|
+
box-shadow: var(--ns-shadow-btn);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.ns-button--play:hover {
|
|
110
|
+
color: var(--ns-gold-btn-fg);
|
|
111
|
+
background: var(--ns-gold-pale);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.ns-button--ghost {
|
|
115
|
+
color: var(--ns-gold);
|
|
116
|
+
background: transparent;
|
|
117
|
+
border: 1px solid rgba(248, 248, 242, 0.55);
|
|
118
|
+
box-shadow: none;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.ns-button--ghost:hover {
|
|
122
|
+
color: var(--ns-gold-btn-fg);
|
|
123
|
+
background: var(--ns-gold);
|
|
124
|
+
border-color: var(--ns-gold);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.ns-button:active {
|
|
128
|
+
box-shadow: none;
|
|
129
|
+
transform: translateY(2px);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.ns-button:disabled,
|
|
133
|
+
.ns-button[aria-disabled="true"] {
|
|
134
|
+
cursor: not-allowed;
|
|
135
|
+
opacity: 0.5;
|
|
136
|
+
pointer-events: none;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.ns-card {
|
|
140
|
+
background: var(--ns-glass);
|
|
141
|
+
border: var(--ns-border-card-strong);
|
|
142
|
+
border-radius: var(--ns-radius-lg);
|
|
143
|
+
box-shadow: var(--ns-shadow-card-rest);
|
|
144
|
+
backdrop-filter: var(--ns-blur-glass);
|
|
145
|
+
-webkit-backdrop-filter: var(--ns-blur-glass);
|
|
146
|
+
transition:
|
|
147
|
+
border-color var(--ns-transition-fast),
|
|
148
|
+
box-shadow var(--ns-transition-fast),
|
|
149
|
+
transform var(--ns-transition-fast);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.ns-card:hover {
|
|
153
|
+
border-color: rgba(230, 219, 116, 0.55);
|
|
154
|
+
box-shadow: var(--ns-shadow-card-hover);
|
|
155
|
+
transform: translateY(-4px);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.ns-icon-slot {
|
|
159
|
+
display: inline-flex;
|
|
160
|
+
align-items: center;
|
|
161
|
+
justify-content: center;
|
|
162
|
+
width: var(--ns-icon-slot);
|
|
163
|
+
height: var(--ns-icon-slot);
|
|
164
|
+
color: var(--ns-gold);
|
|
165
|
+
background: var(--ns-bg-2);
|
|
166
|
+
border-radius: var(--ns-radius-sm);
|
|
167
|
+
flex: 0 0 auto;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.ns-feature-card {
|
|
171
|
+
--ns-feature-accent: var(--ns-gold);
|
|
172
|
+
position: relative;
|
|
173
|
+
display: flex;
|
|
174
|
+
min-height: 13.25rem;
|
|
175
|
+
padding: var(--ns-fluid-card-pad);
|
|
176
|
+
flex-direction: column;
|
|
177
|
+
gap: var(--ns-space-4);
|
|
178
|
+
list-style: none;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.ns-feature-card__icon {
|
|
182
|
+
color: var(--ns-feature-accent);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.ns-feature-card__title {
|
|
186
|
+
margin: 0 0 var(--ns-space-2);
|
|
187
|
+
color: var(--ns-ink);
|
|
188
|
+
font-family: var(--ns-font-pixel);
|
|
189
|
+
font-size: var(--ns-pixel-base);
|
|
190
|
+
line-height: var(--ns-leading-normal);
|
|
191
|
+
text-wrap: balance;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.ns-feature-card__body {
|
|
195
|
+
margin: 0;
|
|
196
|
+
color: var(--ns-ink-dim);
|
|
197
|
+
font-size: var(--ns-text-sm);
|
|
198
|
+
line-height: var(--ns-leading-normal);
|
|
199
|
+
text-wrap: pretty;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.ns-tag,
|
|
203
|
+
.ns-status-pill {
|
|
204
|
+
display: inline-block;
|
|
205
|
+
width: fit-content;
|
|
206
|
+
padding: var(--ns-space-1) 0.375rem;
|
|
207
|
+
border-radius: var(--ns-radius-sm);
|
|
208
|
+
font-family: var(--ns-font-pixel);
|
|
209
|
+
font-size: var(--ns-pixel-xs);
|
|
210
|
+
line-height: var(--ns-leading-pixel);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.ns-tag {
|
|
214
|
+
color: var(--ns-feature-accent);
|
|
215
|
+
background: color-mix(in srgb, var(--ns-feature-accent) 8%, transparent);
|
|
216
|
+
border: 1px solid color-mix(in srgb, var(--ns-feature-accent) 26%, transparent);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.ns-feature-card__tag {
|
|
220
|
+
margin-top: auto;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.ns-quest-card {
|
|
224
|
+
--ns-quest-color: var(--ns-status-later);
|
|
225
|
+
--ns-quest-pill-bg: rgba(255, 255, 255, 0.05);
|
|
226
|
+
display: grid;
|
|
227
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
228
|
+
align-items: start;
|
|
229
|
+
gap: var(--ns-space-3);
|
|
230
|
+
padding: 0.875rem;
|
|
231
|
+
border: var(--ns-border-card);
|
|
232
|
+
border-left: 4px solid rgba(255, 255, 255, 0.18);
|
|
233
|
+
border-radius: 0.5625rem;
|
|
234
|
+
background: var(--ns-glass-soft);
|
|
235
|
+
backdrop-filter: var(--ns-blur-glass);
|
|
236
|
+
-webkit-backdrop-filter: var(--ns-blur-glass);
|
|
237
|
+
list-style: none;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.ns-quest-card--done {
|
|
241
|
+
--ns-quest-color: var(--ns-status-holds);
|
|
242
|
+
--ns-quest-pill-bg: rgba(166, 226, 46, 0.1);
|
|
243
|
+
border-left-color: var(--ns-status-holds);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.ns-quest-card--active {
|
|
247
|
+
--ns-quest-color: var(--ns-status-building);
|
|
248
|
+
--ns-quest-pill-bg: rgba(253, 151, 31, 0.12);
|
|
249
|
+
background: rgba(253, 151, 31, 0.06);
|
|
250
|
+
border-left-color: var(--ns-status-building);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.ns-quest-card--planned {
|
|
254
|
+
--ns-quest-color: var(--ns-status-planned);
|
|
255
|
+
--ns-quest-pill-bg: rgba(102, 217, 232, 0.12);
|
|
256
|
+
border-left-color: var(--ns-status-planned);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.ns-quest-card--locked {
|
|
260
|
+
opacity: 0.5;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.ns-quest-card__icon {
|
|
264
|
+
display: flex;
|
|
265
|
+
align-items: center;
|
|
266
|
+
justify-content: center;
|
|
267
|
+
width: var(--ns-icon-slot-sm);
|
|
268
|
+
height: var(--ns-icon-slot-sm);
|
|
269
|
+
color: var(--ns-quest-color);
|
|
270
|
+
background: var(--ns-bg-2);
|
|
271
|
+
border-radius: var(--ns-radius-full);
|
|
272
|
+
font-family: var(--ns-font-pixel);
|
|
273
|
+
font-size: var(--ns-pixel-sm);
|
|
274
|
+
line-height: 1;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.ns-quest-card__body {
|
|
278
|
+
display: flex;
|
|
279
|
+
min-width: 0;
|
|
280
|
+
flex: 1;
|
|
281
|
+
flex-direction: column;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.ns-quest-card__title {
|
|
285
|
+
margin: 0 0 0.375rem;
|
|
286
|
+
color: var(--ns-ink);
|
|
287
|
+
font-family: var(--ns-font-pixel);
|
|
288
|
+
font-size: 9.5px;
|
|
289
|
+
line-height: var(--ns-leading-pixel);
|
|
290
|
+
text-wrap: balance;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.ns-quest-card__desc {
|
|
294
|
+
margin: 0 0 var(--ns-space-2);
|
|
295
|
+
color: var(--ns-ink-dim);
|
|
296
|
+
font-size: 0.8125rem;
|
|
297
|
+
line-height: var(--ns-leading-snug);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
.ns-status-pill {
|
|
301
|
+
margin-top: auto;
|
|
302
|
+
color: var(--ns-quest-color);
|
|
303
|
+
background: var(--ns-quest-pill-bg);
|
|
304
|
+
font-size: var(--ns-pixel-2xs);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.ns-site-nav {
|
|
308
|
+
display: flex;
|
|
309
|
+
align-items: center;
|
|
310
|
+
height: var(--ns-header-h);
|
|
311
|
+
padding-inline: var(--ns-fluid-container);
|
|
312
|
+
background: var(--ns-glass);
|
|
313
|
+
border-bottom: 1px solid var(--ns-line);
|
|
314
|
+
backdrop-filter: var(--ns-blur-header);
|
|
315
|
+
-webkit-backdrop-filter: var(--ns-blur-header);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
.ns-brand {
|
|
319
|
+
display: inline-flex;
|
|
320
|
+
align-items: center;
|
|
321
|
+
gap: var(--ns-space-3);
|
|
322
|
+
color: var(--ns-ink);
|
|
323
|
+
text-decoration: none;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.ns-brand:hover {
|
|
327
|
+
color: var(--ns-ink);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.ns-brand img {
|
|
331
|
+
width: auto;
|
|
332
|
+
height: 2rem;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
.ns-brand__text {
|
|
336
|
+
color: var(--ns-ink);
|
|
337
|
+
font-family: var(--ns-font-pixel);
|
|
338
|
+
font-size: var(--ns-pixel-lg);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
.ns-brand__accent {
|
|
342
|
+
color: var(--ns-gold);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
.ns-nav-links {
|
|
346
|
+
display: flex;
|
|
347
|
+
gap: var(--ns-space-8);
|
|
348
|
+
margin: 0 0 0 auto;
|
|
349
|
+
padding: 0;
|
|
350
|
+
list-style: none;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
.ns-nav-links a {
|
|
354
|
+
display: inline-block;
|
|
355
|
+
padding-bottom: var(--ns-space-1);
|
|
356
|
+
border-bottom: 2px solid transparent;
|
|
357
|
+
color: var(--ns-ink);
|
|
358
|
+
font-size: var(--ns-text-sm);
|
|
359
|
+
font-weight: var(--ns-weight-medium);
|
|
360
|
+
transition:
|
|
361
|
+
color var(--ns-transition-fast),
|
|
362
|
+
border-color var(--ns-transition-fast);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
.ns-nav-links a:hover,
|
|
366
|
+
.ns-nav-links a[aria-current="page"],
|
|
367
|
+
.ns-nav-links a.is-active {
|
|
368
|
+
color: var(--ns-gold);
|
|
369
|
+
border-bottom-color: var(--ns-gold);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
.ns-section-arrow {
|
|
373
|
+
position: absolute;
|
|
374
|
+
left: 50%;
|
|
375
|
+
bottom: var(--ns-space-6);
|
|
376
|
+
display: grid;
|
|
377
|
+
width: var(--ns-arrow-size);
|
|
378
|
+
height: var(--ns-arrow-size);
|
|
379
|
+
place-items: center;
|
|
380
|
+
color: var(--ns-gold-btn-fg);
|
|
381
|
+
background: linear-gradient(180deg, var(--ns-gold-pale), var(--ns-gold));
|
|
382
|
+
border: 2px solid rgba(255, 255, 255, 0.72);
|
|
383
|
+
border-radius: var(--ns-radius-full);
|
|
384
|
+
box-shadow: var(--ns-shadow-arrow);
|
|
385
|
+
text-decoration: none;
|
|
386
|
+
transform: translateX(-50%);
|
|
387
|
+
animation: ns-arrow 2s var(--ns-ease-in-out) infinite;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.ns-section-arrow:hover {
|
|
391
|
+
color: var(--ns-gold-btn-fg);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
.ns-section-arrow svg {
|
|
395
|
+
display: block;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
@media (max-width: 430px) {
|
|
399
|
+
.ns-nav-links {
|
|
400
|
+
display: none;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
.ns-button--md,
|
|
404
|
+
.ns-button--lg {
|
|
405
|
+
width: 100%;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { Button } from '../buttons/Button.js';
|
|
2
|
+
export type { ButtonProps } from '../buttons/Button.js';
|
|
3
|
+
|
|
4
|
+
export { FeatureCard } from '../cards/FeatureCard.js';
|
|
5
|
+
export type { FeatureCardProps } from '../cards/FeatureCard.js';
|
|
6
|
+
|
|
7
|
+
export { QuestCard } from '../cards/QuestCard.js';
|
|
8
|
+
export type { QuestCardProps } from '../cards/QuestCard.js';
|
|
9
|
+
|
|
10
|
+
export { SectionArrow } from '../navigation/SectionArrow.js';
|
|
11
|
+
export type { SectionArrowProps } from '../navigation/SectionArrow.js';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const cx = (...parts) => parts.filter(Boolean).join(' ');
|
|
2
|
+
|
|
3
|
+
export function mergeStyles(base, override) {
|
|
4
|
+
return override ? { ...base, ...override } : base;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export const NS = {
|
|
8
|
+
gold: 'var(--ns-gold)',
|
|
9
|
+
pink: 'var(--ns-pink)',
|
|
10
|
+
purple: 'var(--ns-purple)',
|
|
11
|
+
cyan: 'var(--ns-cyan)',
|
|
12
|
+
green: 'var(--ns-green)',
|
|
13
|
+
orange: 'var(--ns-orange)',
|
|
14
|
+
later: 'var(--ns-ink-faint)',
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const questStatus = {
|
|
18
|
+
done: { className: 'ns-quest-card--done', label: 'HOLDS', icon: '✓' },
|
|
19
|
+
active: { className: 'ns-quest-card--active', label: 'BUILDING', icon: '▶' },
|
|
20
|
+
planned: { className: 'ns-quest-card--planned', label: 'PLANNED', icon: '◌' },
|
|
21
|
+
locked: { className: 'ns-quest-card--locked', label: 'LATER', icon: '✦' },
|
|
22
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!-- @dsCard group="Brand" viewport="700x160" name="Logo & wordmark" subtitle="Logo usage and wordmark construction" -->
|
|
2
|
+
<!DOCTYPE html>
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<link rel="stylesheet" href="../styles.css">
|
|
7
|
+
<style>
|
|
8
|
+
body { background: var(--ns-bg-1); padding: 24px 32px; display: flex; flex-wrap: wrap; gap: 40px; align-items: center; }
|
|
9
|
+
.unit { display: flex; flex-direction: column; gap: 10px; align-items: flex-start; }
|
|
10
|
+
.label { font-family: 'Press Start 2P', system-ui, sans-serif; font-size: 7px; color: #75715e; }
|
|
11
|
+
.mark { display: flex; align-items: center; gap: 12px; }
|
|
12
|
+
</style>
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
<div class="unit">
|
|
16
|
+
<div class="label">Default</div>
|
|
17
|
+
<div class="mark">
|
|
18
|
+
<img src="../assets/logo.png" style="height:40px;width:auto">
|
|
19
|
+
<span style="font-family:'Press Start 2P',system-ui,sans-serif;font-size:16px;color:#f8f8f2">Noob<b style="color:#e6db74">Society</b></span>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="unit">
|
|
23
|
+
<div class="label">Header (32px)</div>
|
|
24
|
+
<div class="mark">
|
|
25
|
+
<img src="../assets/logo.png" style="height:32px;width:auto">
|
|
26
|
+
<span style="font-family:'Press Start 2P',system-ui,sans-serif;font-size:13px;color:#f8f8f2">Noob<b style="color:#e6db74">Society</b></span>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
<div class="unit">
|
|
30
|
+
<div class="label">Icon only</div>
|
|
31
|
+
<img src="../assets/logo.png" style="height:56px;width:auto">
|
|
32
|
+
</div>
|
|
33
|
+
<div class="unit">
|
|
34
|
+
<div class="label">On dark glass</div>
|
|
35
|
+
<div class="mark" style="background:rgba(30,31,26,.88);padding:12px 16px;border-radius:8px;border:1px solid rgba(255,255,255,.12)">
|
|
36
|
+
<img src="../assets/logo.png" style="height:28px;width:auto">
|
|
37
|
+
<span style="font-family:'Press Start 2P',system-ui,sans-serif;font-size:11px;color:#f8f8f2">Noob<b style="color:#e6db74">Society</b></span>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
</body>
|
|
41
|
+
</html>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!-- @dsCard group="Colors" viewport="700x320" name="Palette" subtitle="Monokai foregrounds + dark backgrounds — two separate systems" -->
|
|
2
|
+
<!DOCTYPE html>
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<link rel="stylesheet" href="../styles.css">
|
|
7
|
+
<style>
|
|
8
|
+
body { background: var(--ns-bg-1); padding: 24px 28px; display: flex; flex-direction: column; gap: 22px; }
|
|
9
|
+
.row { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-start; }
|
|
10
|
+
.swatch { display: flex; flex-direction: column; gap: 6px; }
|
|
11
|
+
.chip { width: 56px; height: 40px; border-radius: 6px; border: 1px solid rgba(255,255,255,.1); }
|
|
12
|
+
.name { font-family: 'Press Start 2P', system-ui, sans-serif; font-size: 6px; color: #75715e; white-space: nowrap; }
|
|
13
|
+
.hex { font-family: 'Press Start 2P', system-ui, sans-serif; font-size: 6px; color: #a8a28c; }
|
|
14
|
+
.group-label { font-family: 'Press Start 2P', system-ui, sans-serif; font-size: 7px; margin: 0 0 8px; }
|
|
15
|
+
.divider { border: none; border-top: 1px solid rgba(255,255,255,.08); margin: 4px 0; }
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
<body>
|
|
19
|
+
<div>
|
|
20
|
+
<p class="group-label" style="color:#e6db74">Monokai foregrounds</p>
|
|
21
|
+
<div class="row">
|
|
22
|
+
<div class="swatch"><div class="chip" style="background:#f8f8f2"></div><div class="name">ink</div><div class="hex">#f8f8f2</div></div>
|
|
23
|
+
<div class="swatch"><div class="chip" style="background:#75715e"></div><div class="name">comment</div><div class="hex">#75715e</div></div>
|
|
24
|
+
<div class="swatch"><div class="chip" style="background:#e6db74"></div><div class="name">yellow</div><div class="hex">#e6db74</div></div>
|
|
25
|
+
<div class="swatch"><div class="chip" style="background:#a6e22e"></div><div class="name">green</div><div class="hex">#a6e22e</div></div>
|
|
26
|
+
<div class="swatch"><div class="chip" style="background:#fd971f"></div><div class="name">orange</div><div class="hex">#fd971f</div></div>
|
|
27
|
+
<div class="swatch"><div class="chip" style="background:#66d9e8"></div><div class="name">cyan</div><div class="hex">#66d9e8</div></div>
|
|
28
|
+
<div class="swatch"><div class="chip" style="background:#f92672"></div><div class="name">pink</div><div class="hex">#f92672</div></div>
|
|
29
|
+
<div class="swatch"><div class="chip" style="background:#ae81ff"></div><div class="name">purple</div><div class="hex">#ae81ff</div></div>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
<hr class="divider">
|
|
33
|
+
<div>
|
|
34
|
+
<p class="group-label" style="color:#a8a28c">Dark backgrounds</p>
|
|
35
|
+
<div class="row">
|
|
36
|
+
<div class="swatch"><div class="chip" style="background:#1a1a16"></div><div class="name">bg-0</div><div class="hex">#1a1a16</div></div>
|
|
37
|
+
<div class="swatch"><div class="chip" style="background:#272822"></div><div class="name">bg-1</div><div class="hex">#272822</div></div>
|
|
38
|
+
<div class="swatch"><div class="chip" style="background:#32332b"></div><div class="name">bg-2</div><div class="hex">#32332b</div></div>
|
|
39
|
+
<div class="swatch"><div class="chip" style="background:rgba(30,31,26,.88);backdrop-filter:blur(8px)"></div><div class="name">glass</div><div class="hex">rgba 88%</div></div>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</body>
|
|
43
|
+
</html>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<!-- @dsCard group="Spacing" viewport="700x140" name="Motion" subtitle="Keyframes and timing tokens for ns-* animations" -->
|
|
2
|
+
<!DOCTYPE html>
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<link rel="stylesheet" href="../styles.css">
|
|
7
|
+
<style>
|
|
8
|
+
body { background: var(--ns-bg-1); padding: 24px 32px; display: flex; gap: 32px; align-items: flex-end; flex-wrap: wrap; }
|
|
9
|
+
.unit { display: flex; flex-direction: column; align-items: center; gap: 10px; }
|
|
10
|
+
.label { font-family: 'Press Start 2P', system-ui, sans-serif; font-size: 7px; color: #75715e; }
|
|
11
|
+
.sub { font-family: 'Press Start 2P', system-ui, sans-serif; font-size: 6px; color: #49483e; }
|
|
12
|
+
.bob { animation: ns-bob-plain 3.6s ease-in-out infinite; image-rendering: pixelated; }
|
|
13
|
+
.blink { font-family: 'Press Start 2P', system-ui, sans-serif; font-size: 10px; color: #e6db74; animation: ns-blink 1.5s steps(1) infinite; }
|
|
14
|
+
.live { width: 10px; height: 10px; border-radius: 50%; background: #a6e22e; animation: ns-live 2.4s ease-in-out infinite; }
|
|
15
|
+
.twinkle { font-size: 18px; color: #f8f8f2; animation: ns-twinkle 5.5s ease-in-out infinite; }
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
<body>
|
|
19
|
+
<div class="unit"><img class="bob" src="../assets/hero.png" style="height:72px"><div class="label">ns-bob</div><div class="sub">3.6s idle</div></div>
|
|
20
|
+
<div class="unit"><span class="blink">PRESS START</span><div class="label">ns-blink</div><div class="sub">1.5s steps(1)</div></div>
|
|
21
|
+
<div class="unit"><span class="live"></span><div class="label">ns-live</div><div class="sub">2.4s pulse</div></div>
|
|
22
|
+
<div class="unit"><span class="twinkle">✦</span><div class="label">ns-twinkle</div><div class="sub">5.5s fade</div></div>
|
|
23
|
+
</body>
|
|
24
|
+
</html>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<!-- @dsCard group="Type" viewport="700x120" name="Pixel accents" subtitle="SVG symbols used as UI icons — never glyphs or emoji" -->
|
|
2
|
+
<!DOCTYPE html>
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<link rel="stylesheet" href="../styles.css">
|
|
7
|
+
<style>
|
|
8
|
+
body { background: var(--ns-bg-1); padding: 1.5rem 2rem; }
|
|
9
|
+
.row { display: flex; flex-wrap: wrap; gap: 1.5rem; align-items: flex-end; }
|
|
10
|
+
.unit { display: flex; flex-direction: column; align-items: center; gap: 0.5rem; }
|
|
11
|
+
.label { font-family: var(--ns-font-pixel); font-size: 7px; color: var(--ns-ink-faint); }
|
|
12
|
+
</style>
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
<div class="row">
|
|
16
|
+
<div class="unit">
|
|
17
|
+
<svg viewBox="0 0 10 10" width="22" height="22" fill="#e6db74"><polygon points="5,0.5 6.2,3.8 9.8,3.8 6.9,5.9 8,9.2 5,7.1 2,9.2 3.1,5.9 0.2,3.8 3.8,3.8"/></svg>
|
|
18
|
+
<span class="label">eyebrow</span>
|
|
19
|
+
</div>
|
|
20
|
+
<div class="unit">
|
|
21
|
+
<svg viewBox="0 0 10 10" width="22" height="22" fill="#e6db74"><polygon points="1,0.5 9.5,5 1,9.5"/></svg>
|
|
22
|
+
<span class="label">play / CTA</span>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="unit">
|
|
25
|
+
<svg viewBox="0 0 10 10" width="22" height="22" fill="#e6db74"><polygon points="5,0.5 6.2,3.8 9.8,3.8 6.9,5.9 8,9.2 5,7.1 2,9.2 3.1,5.9 0.2,3.8 3.8,3.8"/></svg>
|
|
26
|
+
<span class="label">star / github</span>
|
|
27
|
+
</div>
|
|
28
|
+
<div class="unit">
|
|
29
|
+
<svg viewBox="0 0 12 8" width="22" height="22" fill="none" stroke="#e6db74" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="1,1.5 6,6.5 11,1.5"/></svg>
|
|
30
|
+
<span class="label">section nav</span>
|
|
31
|
+
</div>
|
|
32
|
+
<div class="unit">
|
|
33
|
+
<span style="font-family:'Press Start 2P',system-ui,sans-serif;font-size:20px;color:#a6e22e">✓</span>
|
|
34
|
+
<span class="label">holds</span>
|
|
35
|
+
</div>
|
|
36
|
+
<div class="unit">
|
|
37
|
+
<svg viewBox="0 0 10 10" width="22" height="22" fill="#fd971f"><polygon points="1,0.5 9.5,5 1,9.5"/></svg>
|
|
38
|
+
<span class="label">building</span>
|
|
39
|
+
</div>
|
|
40
|
+
<div class="unit">
|
|
41
|
+
<span style="font-family:'Press Start 2P',system-ui,sans-serif;font-size:20px;color:#66d9e8">◌</span>
|
|
42
|
+
<span class="label">planned</span>
|
|
43
|
+
</div>
|
|
44
|
+
<div class="unit">
|
|
45
|
+
<svg viewBox="0 0 10 10" width="22" height="22" fill="#75715e"><polygon points="5,0.5 6.2,3.8 9.8,3.8 6.9,5.9 8,9.2 5,7.1 2,9.2 3.1,5.9 0.2,3.8 3.8,3.8"/></svg>
|
|
46
|
+
<span class="label">later</span>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</body>
|
|
50
|
+
</html>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!-- @dsCard group="Spacing" viewport="700x160" name="Radii & Shadows" subtitle="Border radii and shadow system" -->
|
|
2
|
+
<!DOCTYPE html>
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<link rel="stylesheet" href="../styles.css">
|
|
7
|
+
<style>
|
|
8
|
+
body { background: var(--ns-bg-1); padding: 24px 28px; display: flex; flex-direction: column; gap: 20px; }
|
|
9
|
+
.row { display: flex; flex-wrap: wrap; gap: 16px; align-items: center; }
|
|
10
|
+
.box { background: rgba(30,31,26,.88); border: 1px solid rgba(255,255,255,.22); width: 60px; height: 44px; display: flex; align-items: center; justify-content: center; }
|
|
11
|
+
.label { font-family: 'Press Start 2P', system-ui, sans-serif; font-size: 7px; color: #75715e; text-align: center; margin-top: 6px; }
|
|
12
|
+
.unit { display: flex; flex-direction: column; align-items: center; }
|
|
13
|
+
.shadow-box { width: 80px; height: 44px; background: rgba(30,31,26,.88); border: 1px solid rgba(255,255,255,.22); border-radius: 10px; display: flex; align-items: center; justify-content: center; font-family: 'Press Start 2P', system-ui, sans-serif; font-size: 6px; color: #75715e; text-align: center; }
|
|
14
|
+
</style>
|
|
15
|
+
</head>
|
|
16
|
+
<body>
|
|
17
|
+
<div class="row">
|
|
18
|
+
<div class="unit"><div class="box" style="border-radius:4px"></div><div class="label">sm · 4px</div></div>
|
|
19
|
+
<div class="unit"><div class="box" style="border-radius:8px"></div><div class="label">md · 8px</div></div>
|
|
20
|
+
<div class="unit"><div class="box" style="border-radius:10px"></div><div class="label">lg · 10px</div></div>
|
|
21
|
+
<div class="unit"><div class="box" style="border-radius:12px"></div><div class="label">xl · 12px</div></div>
|
|
22
|
+
<div class="unit"><div class="box" style="border-radius:9999px;width:80px"></div><div class="label">full</div></div>
|
|
23
|
+
<div class="unit"><div class="shadow-box" style="box-shadow:0 16px 34px rgba(0,0,0,.38)">card</div><div class="label">card hover</div></div>
|
|
24
|
+
<div class="unit"><div class="shadow-box" style="box-shadow:0 24px 56px rgba(0,0,0,.5)">modal</div><div class="label">modal</div></div>
|
|
25
|
+
<div class="unit"><div class="shadow-box" style="box-shadow:0 3px 0 #b5a83f;background:#e6db74;color:#1c1c17">btn</div><div class="label">btn press</div></div>
|
|
26
|
+
</div>
|
|
27
|
+
</body>
|
|
28
|
+
</html>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<!-- @dsCard group="Colors" viewport="700x180" name="Semantic roles" subtitle="What each Monokai foreground color means" -->
|
|
2
|
+
<!DOCTYPE html>
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<link rel="stylesheet" href="../styles.css">
|
|
7
|
+
<style>
|
|
8
|
+
body { background: var(--ns-bg-1); padding: 24px 28px; }
|
|
9
|
+
table { border-collapse: collapse; width: 100%; }
|
|
10
|
+
th { font-family: 'Press Start 2P', system-ui, sans-serif; font-size: 7px; color: var(--ns-ink-faint); text-align: left; padding: 0 12px 10px 0; font-weight: 400; }
|
|
11
|
+
td { font-size: 13px; color: var(--ns-ink-dim); padding: 5px 12px 5px 0; border-top: 1px solid rgba(255,255,255,.06); }
|
|
12
|
+
.dot { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin-right: 8px; vertical-align: middle; }
|
|
13
|
+
</style>
|
|
14
|
+
</head>
|
|
15
|
+
<body>
|
|
16
|
+
<table>
|
|
17
|
+
<thead><tr><th>Color</th><th>Role</th><th>Used on</th></tr></thead>
|
|
18
|
+
<tbody>
|
|
19
|
+
<tr><td><span class="dot" style="background:#f8f8f2"></span>#f8f8f2</td><td>Primary text</td><td>Headings, body, labels</td></tr>
|
|
20
|
+
<tr><td><span class="dot" style="background:#75715e"></span>#75715e</td><td>Muted / comment</td><td>Captions, timestamps, placeholders</td></tr>
|
|
21
|
+
<tr><td><span class="dot" style="background:#e6db74"></span>#e6db74</td><td>Primary accent</td><td>Wordmark "Society", CTAs, eyebrows, active nav</td></tr>
|
|
22
|
+
<tr><td><span class="dot" style="background:#a6e22e"></span>#a6e22e</td><td>Holds / success / live</td><td>Quest "HOLDS", live dot, Gate ✓</td></tr>
|
|
23
|
+
<tr><td><span class="dot" style="background:#fd971f"></span>#fd971f</td><td>Building / in-progress</td><td>Quest "BUILDING", active quest border + bg</td></tr>
|
|
24
|
+
<tr><td><span class="dot" style="background:#66d9e8"></span>#66d9e8</td><td>Planned / info</td><td>Quest "PLANNED", feature icon (open)</td></tr>
|
|
25
|
+
<tr><td><span class="dot" style="background:#f92672"></span>#f92672</td><td>Highlight / accent</td><td>CTA panel border, feature icon (energy)</td></tr>
|
|
26
|
+
<tr><td><span class="dot" style="background:#ae81ff"></span>#ae81ff</td><td>Decorative / personal</td><td>Feature icon (sprite-forward / identity)</td></tr>
|
|
27
|
+
</tbody>
|
|
28
|
+
</table>
|
|
29
|
+
</body>
|
|
30
|
+
</html>
|