@noobsociety/nsds 0.1.2 → 0.2.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/CHANGELOG.md +24 -3
- package/README.md +347 -193
- package/dist/components/hud/HUDBar.d.ts +17 -0
- package/dist/components/hud/HUDDivider.d.ts +11 -0
- package/dist/components/hud/HUDLabel.d.ts +17 -0
- package/dist/components/icons/RPGIcon.d.ts +42 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +587 -0
- package/{styles.css → dist/styles.css} +1 -0
- package/dist/tailwind/package.json +1 -0
- package/dist/tailwind/preset.js +144 -0
- package/{tokens → dist/tokens}/colors.css +25 -19
- package/dist/tokens/hud.css +133 -0
- package/{tokens → dist/tokens}/motion.css +9 -9
- package/{tokens → dist/tokens}/spacing.css +9 -16
- package/{tokens → dist/tokens}/typography.css +2 -2
- package/package.json +34 -62
- package/SKILL.md +0 -18
- 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.js +0 -55
- package/components/buttons/Button.prompt.md +0 -22
- package/components/buttons/buttons.card.html +0 -24
- package/components/cards/FeatureCard.js +0 -36
- package/components/cards/FeatureCard.prompt.md +0 -17
- package/components/cards/QuestCard.js +0 -27
- package/components/cards/QuestCard.prompt.md +0 -19
- package/components/cards/cards.card.html +0 -54
- package/components/navigation/SectionArrow.js +0 -28
- package/components/navigation/navigation.card.html +0 -29
- package/components/react/index.d.ts +0 -11
- package/components/react/index.js +0 -4
- package/components/shared/styles.js +0 -22
- package/guidelines/brand.card.html +0 -41
- package/guidelines/colors.card.html +0 -43
- package/guidelines/motion.card.html +0 -24
- package/guidelines/pixel-accents.card.html +0 -50
- package/guidelines/radii-shadows.card.html +0 -28
- package/guidelines/semantic-colors.card.html +0 -30
- package/guidelines/spacing.card.html +0 -53
- package/guidelines/sprites.card.html +0 -22
- package/guidelines/type.card.html +0 -24
- package/index.d.ts +0 -1
- package/index.js +0 -1
- package/mui-theme/ThemeProvider.js +0 -14
- package/mui-theme/ThemeProvider.tsx +0 -20
- package/mui-theme/examples/FeatureCard.tsx +0 -52
- package/mui-theme/examples/QuestStatusChip.tsx +0 -41
- package/mui-theme/examples/SectionHeader.tsx +0 -44
- package/mui-theme/index.d.ts +0 -49
- package/mui-theme/index.js +0 -2
- package/mui-theme/index.ts +0 -2
- package/mui-theme/preview.dc.html +0 -195
- package/mui-theme/support.js +0 -1513
- package/mui-theme/theme.js +0 -594
- package/mui-theme/theme.ts +0 -604
- package/references/noobsociety-monokai.dc.html +0 -360
- package/support.js +0 -1513
- package/ui-kits/homepage/index.html +0 -319
- /package/{components → dist/components}/buttons/Button.d.ts +0 -0
- /package/{components → dist/components}/cards/FeatureCard.d.ts +0 -0
- /package/{components → dist/components}/cards/QuestCard.d.ts +0 -0
- /package/{components → dist/components}/navigation/SectionArrow.d.ts +0 -0
- /package/{components → dist/components}/primitives.css +0 -0
- /package/{tokens → dist/tokens}/base.css +0 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NoobSociety Design System — Tailwind CSS preset
|
|
3
|
+
*
|
|
4
|
+
* Usage in tailwind.config.js / tailwind.config.ts:
|
|
5
|
+
*
|
|
6
|
+
* import nsdPreset from '@noobsociety/nsds/tailwind';
|
|
7
|
+
*
|
|
8
|
+
* export default {
|
|
9
|
+
* presets: [nsdPreset],
|
|
10
|
+
* content: ['./src/**\/*.{ts,tsx}'],
|
|
11
|
+
* };
|
|
12
|
+
*
|
|
13
|
+
* All values reference CSS custom properties so they stay in sync with
|
|
14
|
+
* styles.css at runtime — change a token once, Tailwind classes update too.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/** @type {import('tailwindcss').Config} */
|
|
18
|
+
const nsdPreset = {
|
|
19
|
+
darkMode: ['class', '[data-theme="dark"]'],
|
|
20
|
+
theme: {
|
|
21
|
+
extend: {
|
|
22
|
+
|
|
23
|
+
/* ── Colors ──────────────────────────────────────────────── */
|
|
24
|
+
colors: {
|
|
25
|
+
ns: {
|
|
26
|
+
/* Surfaces */
|
|
27
|
+
bg: {
|
|
28
|
+
0: 'var(--ns-bg-0)',
|
|
29
|
+
1: 'var(--ns-bg-1)',
|
|
30
|
+
2: 'var(--ns-bg-2)',
|
|
31
|
+
glass: 'var(--ns-glass)',
|
|
32
|
+
},
|
|
33
|
+
/* Ink */
|
|
34
|
+
ink: {
|
|
35
|
+
DEFAULT: 'var(--ns-ink)',
|
|
36
|
+
dim: 'var(--ns-ink-dim)',
|
|
37
|
+
faint: 'var(--ns-ink-faint)',
|
|
38
|
+
},
|
|
39
|
+
/* Gold — primary accent */
|
|
40
|
+
gold: {
|
|
41
|
+
DEFAULT: 'var(--ns-gold)',
|
|
42
|
+
pale: 'var(--ns-gold-pale)',
|
|
43
|
+
deep: 'var(--ns-gold-deep)',
|
|
44
|
+
shadow: 'var(--ns-gold-shadow)',
|
|
45
|
+
fg: 'var(--ns-gold-btn-fg)',
|
|
46
|
+
},
|
|
47
|
+
/* Monokai accents */
|
|
48
|
+
green: 'var(--ns-green)',
|
|
49
|
+
cyan: 'var(--ns-cyan)',
|
|
50
|
+
orange: 'var(--ns-orange)',
|
|
51
|
+
pink: 'var(--ns-pink)',
|
|
52
|
+
purple: 'var(--ns-purple)',
|
|
53
|
+
/* Semantic */
|
|
54
|
+
accent: 'var(--ns-accent)',
|
|
55
|
+
line: 'var(--ns-line)',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
/* ── Typography ──────────────────────────────────────────── */
|
|
60
|
+
fontFamily: {
|
|
61
|
+
body: ['var(--ns-font-body)', { fallback: ['system-ui', 'sans-serif'] }],
|
|
62
|
+
pixel: ['var(--ns-font-pixel)', { fallback: ['monospace'] }],
|
|
63
|
+
},
|
|
64
|
+
fontSize: {
|
|
65
|
+
'ns-xs': ['var(--ns-text-xs)', { lineHeight: 'var(--ns-leading-normal)' }],
|
|
66
|
+
'ns-sm': ['var(--ns-text-sm)', { lineHeight: 'var(--ns-leading-normal)' }],
|
|
67
|
+
'ns-base': ['var(--ns-text-base)', { lineHeight: 'var(--ns-leading-normal)' }],
|
|
68
|
+
'ns-lg': ['var(--ns-text-lg)', { lineHeight: 'var(--ns-leading-snug)' }],
|
|
69
|
+
'ns-xl': ['var(--ns-text-xl)', { lineHeight: 'var(--ns-leading-snug)' }],
|
|
70
|
+
'ns-2xl': ['var(--ns-text-2xl)', { lineHeight: 'var(--ns-leading-tight)' }],
|
|
71
|
+
'ns-3xl': ['var(--ns-text-3xl)', { lineHeight: 'var(--ns-leading-tight)' }],
|
|
72
|
+
'ns-4xl': ['var(--ns-text-4xl)', { lineHeight: 'var(--ns-leading-tight)' }],
|
|
73
|
+
},
|
|
74
|
+
fontWeight: {
|
|
75
|
+
'ns-normal': 'var(--ns-weight-normal)',
|
|
76
|
+
'ns-medium': 'var(--ns-weight-medium)',
|
|
77
|
+
'ns-semibold': 'var(--ns-weight-semibold)',
|
|
78
|
+
'ns-bold': 'var(--ns-weight-bold)',
|
|
79
|
+
},
|
|
80
|
+
lineHeight: {
|
|
81
|
+
'ns-tight': 'var(--ns-leading-tight)',
|
|
82
|
+
'ns-snug': 'var(--ns-leading-snug)',
|
|
83
|
+
'ns-normal': 'var(--ns-leading-normal)',
|
|
84
|
+
'ns-relaxed': 'var(--ns-leading-relaxed)',
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
/* ── Spacing ─────────────────────────────────────────────── */
|
|
88
|
+
spacing: {
|
|
89
|
+
'ns-1': 'var(--ns-space-1)',
|
|
90
|
+
'ns-2': 'var(--ns-space-2)',
|
|
91
|
+
'ns-3': 'var(--ns-space-3)',
|
|
92
|
+
'ns-4': 'var(--ns-space-4)',
|
|
93
|
+
'ns-5': 'var(--ns-space-5)',
|
|
94
|
+
'ns-6': 'var(--ns-space-6)',
|
|
95
|
+
'ns-8': 'var(--ns-space-8)',
|
|
96
|
+
'ns-10': 'var(--ns-space-10)',
|
|
97
|
+
'ns-12': 'var(--ns-space-12)',
|
|
98
|
+
'ns-16': 'var(--ns-space-16)',
|
|
99
|
+
'ns-20': 'var(--ns-space-20)',
|
|
100
|
+
},
|
|
101
|
+
maxWidth: {
|
|
102
|
+
'ns-container': 'var(--ns-container)',
|
|
103
|
+
},
|
|
104
|
+
height: {
|
|
105
|
+
'ns-header': 'var(--ns-header-h)',
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
/* ── Border radius ───────────────────────────────────────── */
|
|
109
|
+
borderRadius: {
|
|
110
|
+
'ns-sm': 'var(--ns-radius-sm)',
|
|
111
|
+
'ns-md': 'var(--ns-radius-md)',
|
|
112
|
+
'ns-lg': 'var(--ns-radius-lg)',
|
|
113
|
+
'ns-xl': 'var(--ns-radius-xl)',
|
|
114
|
+
'ns-full': 'var(--ns-radius-full)',
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
/* ── Box shadow ──────────────────────────────────────────── */
|
|
118
|
+
boxShadow: {
|
|
119
|
+
'ns-card-hover': 'var(--ns-shadow-card-hover)',
|
|
120
|
+
'ns-btn': 'var(--ns-shadow-btn)',
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
/* ── Transitions ─────────────────────────────────────────── */
|
|
124
|
+
transitionDuration: {
|
|
125
|
+
'ns-fast': 'var(--ns-dur-fast)',
|
|
126
|
+
'ns-base': 'var(--ns-dur-base)',
|
|
127
|
+
'ns-slow': 'var(--ns-dur-slow)',
|
|
128
|
+
},
|
|
129
|
+
transitionTimingFunction: {
|
|
130
|
+
'ns-out': 'var(--ns-ease-out)',
|
|
131
|
+
'ns-spring': 'var(--ns-ease-spring)',
|
|
132
|
+
},
|
|
133
|
+
|
|
134
|
+
/* ── Ring / focus ────────────────────────────────────────── */
|
|
135
|
+
ringColor: {
|
|
136
|
+
'ns-focus': 'var(--ns-focus-ring)',
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
|
|
141
|
+
plugins: [],
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
module.exports = nsdPreset;
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
--ns-glass-2: rgba(30, 31, 26, 0.60); /* lighter glass */
|
|
9
9
|
--ns-glass-soft: rgba(30, 31, 26, 0.75); /* subtle card surface */
|
|
10
10
|
|
|
11
|
-
--ns-bg-0-rgb: 26 26 22;
|
|
12
|
-
--ns-bg-1-rgb: 39 40 34;
|
|
13
|
-
--ns-bg-2-rgb: 50 51 43;
|
|
14
|
-
--ns-glass-rgb: 30 31 26;
|
|
11
|
+
--ns-bg-0-rgb: 26 26 22; /* @kind other */
|
|
12
|
+
--ns-bg-1-rgb: 39 40 34; /* @kind other */
|
|
13
|
+
--ns-bg-2-rgb: 50 51 43; /* @kind other */
|
|
14
|
+
--ns-glass-rgb: 30 31 26; /* @kind other */
|
|
15
15
|
|
|
16
16
|
/* ── Borders ──────────────────────────────────────────────── */
|
|
17
17
|
--ns-line: rgba(255, 255, 255, 0.12);
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
--ns-ink: #f8f8f2; /* primary text — Monokai foreground */
|
|
23
23
|
--ns-ink-dim: #a8a28c; /* secondary text */
|
|
24
24
|
--ns-ink-faint: #75715e; /* placeholder, captions — Monokai comment */
|
|
25
|
-
--ns-ink-rgb: 248 248 242;
|
|
26
|
-
--ns-ink-dim-rgb: 168 162 140;
|
|
27
|
-
--ns-ink-faint-rgb: 117 113 94;
|
|
25
|
+
--ns-ink-rgb: 248 248 242; /* @kind other */
|
|
26
|
+
--ns-ink-dim-rgb: 168 162 140; /* @kind other */
|
|
27
|
+
--ns-ink-faint-rgb: 117 113 94; /* @kind other */
|
|
28
28
|
|
|
29
29
|
/* ── Brand yellow (gold) — primary accent ─────────────────── */
|
|
30
30
|
--ns-gold: #e6db74;
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
--ns-gold-deep: #cabb50;
|
|
33
33
|
--ns-gold-shadow: #b5a83f;
|
|
34
34
|
--ns-gold-btn-fg: #1c1c17; /* text on gold buttons */
|
|
35
|
-
--ns-gold-rgb: 230 219 116;
|
|
36
|
-
--ns-gold-pale-rgb: 244 240 153;
|
|
37
|
-
--ns-gold-deep-rgb: 202 187 80;
|
|
38
|
-
--ns-gold-shadow-rgb: 181 168 63;
|
|
35
|
+
--ns-gold-rgb: 230 219 116; /* @kind other */
|
|
36
|
+
--ns-gold-pale-rgb: 244 240 153; /* @kind other */
|
|
37
|
+
--ns-gold-deep-rgb: 202 187 80; /* @kind other */
|
|
38
|
+
--ns-gold-shadow-rgb: 181 168 63; /* @kind other */
|
|
39
39
|
|
|
40
40
|
/* ── Monokai semantic accents ─────────────────────────────── */
|
|
41
41
|
--ns-green: #a6e22e; /* "Holds" / success */
|
|
@@ -46,14 +46,14 @@
|
|
|
46
46
|
--ns-orange-deep: #c96f00;
|
|
47
47
|
--ns-pink: #f92672; /* danger / highlight */
|
|
48
48
|
--ns-purple: #ae81ff; /* decorative */
|
|
49
|
-
--ns-green-rgb: 166 226 46;
|
|
50
|
-
--ns-green-deep-rgb: 127 184 30;
|
|
51
|
-
--ns-cyan-rgb: 102 217 232;
|
|
52
|
-
--ns-cyan-deep-rgb: 91 200 215;
|
|
53
|
-
--ns-orange-rgb: 253 151 31;
|
|
54
|
-
--ns-orange-deep-rgb: 201 111 0;
|
|
55
|
-
--ns-pink-rgb: 249 38 114;
|
|
56
|
-
--ns-purple-rgb: 174 129 255;
|
|
49
|
+
--ns-green-rgb: 166 226 46; /* @kind other */
|
|
50
|
+
--ns-green-deep-rgb: 127 184 30; /* @kind other */
|
|
51
|
+
--ns-cyan-rgb: 102 217 232; /* @kind other */
|
|
52
|
+
--ns-cyan-deep-rgb: 91 200 215; /* @kind other */
|
|
53
|
+
--ns-orange-rgb: 253 151 31; /* @kind other */
|
|
54
|
+
--ns-orange-deep-rgb: 201 111 0; /* @kind other */
|
|
55
|
+
--ns-pink-rgb: 249 38 114; /* @kind other */
|
|
56
|
+
--ns-purple-rgb: 174 129 255; /* @kind other */
|
|
57
57
|
|
|
58
58
|
/* ── Semantic aliases ─────────────────────────────────────── */
|
|
59
59
|
--ns-surface-page: var(--ns-bg-1);
|
|
@@ -68,6 +68,12 @@
|
|
|
68
68
|
--ns-status-building: var(--ns-orange);
|
|
69
69
|
--ns-status-planned: var(--ns-cyan);
|
|
70
70
|
--ns-status-later: var(--ns-ink-faint);
|
|
71
|
+
|
|
72
|
+
/* ── Quest card status pill backgrounds ──────────────────────── */
|
|
73
|
+
--ns-quest-pill-done: rgba(166, 226, 46, 0.10);
|
|
74
|
+
--ns-quest-pill-active: rgba(253, 151, 31, 0.12);
|
|
75
|
+
--ns-quest-pill-planned: rgba(102, 217, 232, 0.12);
|
|
76
|
+
--ns-quest-pill-locked: rgba(255, 255, 255, 0.05);
|
|
71
77
|
--ns-focus-ring: rgba(230, 219, 116, 0.35);
|
|
72
78
|
--ns-selection-bg: rgba(249, 38, 114, 0.28);
|
|
73
79
|
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/* NoobSociety — HUD-specific tokens
|
|
2
|
+
Game chrome (`--hud-*`) that extend the base `--ns-*` palette.
|
|
3
|
+
These are the design-system source of truth for all in-game HUD styling.
|
|
4
|
+
The --win-* light-modal surface is intentionally excluded (dark-only until redesigned).
|
|
5
|
+
|
|
6
|
+
Alias rule: where an --hud-* concept maps exactly to an --ns-* token, the hud
|
|
7
|
+
token is a var() alias so both names work and the game can migrate incrementally.
|
|
8
|
+
Where the HUD needs a distinct value (e.g. lighter glass over the world canvas,
|
|
9
|
+
vital bar colours that have no homepage analogue) the token is defined independently. */
|
|
10
|
+
|
|
11
|
+
:root {
|
|
12
|
+
|
|
13
|
+
/* ── Fonts ─────────────────────────────────────────────────── */
|
|
14
|
+
--hud-font: var(--ns-font-pixel); /* chrome labels, tab caps, key glyphs */
|
|
15
|
+
--hud-font-ui: var(--ns-font-body); /* draggable windows, dialogue, inventory */
|
|
16
|
+
|
|
17
|
+
/* ── Accent / currency ─────────────────────────────────────── */
|
|
18
|
+
/* DS is source of truth: game migrates from #ffe066 → --ns-gold (#e6db74). */
|
|
19
|
+
--hud-gold: var(--ns-gold);
|
|
20
|
+
--hud-talents: var(--ns-gold); /* Talents wallet number */
|
|
21
|
+
|
|
22
|
+
/* ── Text ───────────────────────────────────────────────────── */
|
|
23
|
+
--hud-text: var(--ns-ink);
|
|
24
|
+
--hud-text-dim: var(--ns-ink-dim);
|
|
25
|
+
--hud-shadow: none; /* no text-shadow at HUD pixel sizes */
|
|
26
|
+
--hud-bar-shadow: none;
|
|
27
|
+
|
|
28
|
+
/* ── Surfaces ───────────────────────────────────────────────── */
|
|
29
|
+
/* Game chrome glass: lighter than --ns-glass so the world reads through. */
|
|
30
|
+
--hud-glass: rgba(12, 16, 22, 0.62);
|
|
31
|
+
--hud-glass-blur: 6px;
|
|
32
|
+
--hud-bg: rgba(0, 0, 0, 0.35);
|
|
33
|
+
--hud-bg-strong: rgba(0, 0, 0, 0.72);
|
|
34
|
+
--hud-track: rgba(255, 255, 255, 0.10); /* bar + XP track background */
|
|
35
|
+
--hud-line: rgba(255, 255, 255, 0.18);
|
|
36
|
+
--hud-avatar-bg: rgba(72, 86, 116, 0.82);
|
|
37
|
+
|
|
38
|
+
/* ── Input / selection ─────────────────────────────────────── */
|
|
39
|
+
--hud-input-bg: rgba(10, 14, 20, 0.55);
|
|
40
|
+
--hud-sel-bg: var(--ns-ink);
|
|
41
|
+
--hud-sel-fg: var(--ns-bg-1);
|
|
42
|
+
|
|
43
|
+
/* ── Elements (identity.ts ELEMENT_DISPLAY) ───────────────────── */
|
|
44
|
+
/* ── Elements (identity.ts ELEMENT_DISPLAY exact colors) ─────────── */
|
|
45
|
+
--hud-el-neutral: #888780;
|
|
46
|
+
--hud-el-earth: #639922;
|
|
47
|
+
--hud-el-wind: #5dcaa5;
|
|
48
|
+
--hud-el-water: #378add;
|
|
49
|
+
--hud-el-fire: #ba7517;
|
|
50
|
+
--hud-el-light: #fac775;
|
|
51
|
+
--hud-el-dark: #888780;
|
|
52
|
+
--hud-el-void: #7f77dd;
|
|
53
|
+
|
|
54
|
+
/* ── Vital bars ─────────────────────────────────────────────── */
|
|
55
|
+
/* HP — green track, bright fill, low-HP red warning */
|
|
56
|
+
--hud-hp: var(--hud-track); /* track background */
|
|
57
|
+
--hud-hp-fill: #4caf73; /* normal fill */
|
|
58
|
+
--hud-hp-low: #cc3333; /* fill under 30% → also pulses */
|
|
59
|
+
--hud-hp-label: #88ee88; /* "HP" label text in classic bar */
|
|
60
|
+
/* MP — blue track, bright fill, low-MP muted */
|
|
61
|
+
--hud-mp: var(--hud-track); /* track background (internal id: sp) */
|
|
62
|
+
--hud-mp-fill: #5b9bd5; /* normal fill */
|
|
63
|
+
--hud-mp-low: #4f7fc0; /* fill under 30% */
|
|
64
|
+
--hud-mp-label: #8888ee; /* "MP"/"SP" label text */
|
|
65
|
+
|
|
66
|
+
/* ── XP tracks ──────────────────────────────────────────────── */
|
|
67
|
+
/* Three independent mastery tracks: Base (BXP), Tech (TXP), Weapon (WXP). */
|
|
68
|
+
--hud-xp-base: #4488cc; /* BXP fill — steel blue */
|
|
69
|
+
--hud-xp-base-rgb: 68 136 204; /* @kind other */
|
|
70
|
+
--hud-xp-base-label: #88aaee; /* BXP label */
|
|
71
|
+
--hud-xp-job: #8855cc; /* TXP fill — purple */
|
|
72
|
+
--hud-xp-job-rgb: 136 85 204; /* @kind other */
|
|
73
|
+
--hud-xp-job-label: #aa88ee; /* TXP label */
|
|
74
|
+
--hud-xp-weapon: #cc8844; /* WXP fill — amber */
|
|
75
|
+
--hud-xp-weapon-rgb: 204 136 68; /* @kind other */
|
|
76
|
+
--hud-xp-weapon-label: #eeaa66; /* WXP label */
|
|
77
|
+
|
|
78
|
+
/* Progress bars in the player card detail (Marks / Craft). */
|
|
79
|
+
--hud-marks-track: #3a2e6e;
|
|
80
|
+
--hud-marks-fill: #7f77dd;
|
|
81
|
+
--hud-craft-track: #4a2e0a;
|
|
82
|
+
--hud-craft-fill: #ba7517;
|
|
83
|
+
|
|
84
|
+
/* ── Chat log channel tones ─────────────────────────────────── */
|
|
85
|
+
/* Logs tab (battle narration) vs Chat tab (social stream). */
|
|
86
|
+
--hud-tone-battle: #ff8888; /* combat hits, defeat lines */
|
|
87
|
+
--hud-tone-world: #88ccff; /* map announcements, world events */
|
|
88
|
+
--hud-tone-gain: #aaffaa; /* EXP / loot / discovery / rewards */
|
|
89
|
+
--hud-tone-say: #cccccc; /* player speech, system messages */
|
|
90
|
+
|
|
91
|
+
/* ── Status / buffs ─────────────────────────────────────────── */
|
|
92
|
+
--hud-danger: var(--ns-pink); /* death zone, error states */
|
|
93
|
+
--hud-buff: var(--ns-green); /* positive effect glyphs */
|
|
94
|
+
--hud-debuff: #ee6666; /* negative effect glyphs */
|
|
95
|
+
|
|
96
|
+
/* ── Minimap ────────────────────────────────────────────────── */
|
|
97
|
+
--hud-minimap-bg: #091509; /* canvas fill */
|
|
98
|
+
--hud-minimap-edge: #2a4a2a; /* outer diamond stroke */
|
|
99
|
+
--hud-minimap-player: #ffffff; /* player dot */
|
|
100
|
+
--hud-minimap-enemy: #ff5a5a; /* aggressive mob dot */
|
|
101
|
+
--hud-minimap-npc: #f4c542; /* interactable / NPC dot */
|
|
102
|
+
--hud-minimap-dest: var(--ns-cyan); /* walk-goal diamond */
|
|
103
|
+
|
|
104
|
+
/* ── Geometry ───────────────────────────────────────────────── */
|
|
105
|
+
--hud-radius: 4px;
|
|
106
|
+
--hud-radius-sm: 2px;
|
|
107
|
+
|
|
108
|
+
/* ── Cross-layout geometry (640×360 design space) ───────────── */
|
|
109
|
+
/* The HUD lives in a 3×3 grid over the 640×360 canvas.
|
|
110
|
+
Each corner pocket sits inside its cell with 5% padding per axis. */
|
|
111
|
+
--hud-cross-cell-w: calc(640px / 3); /* @kind other */ /* 213.33px */
|
|
112
|
+
--hud-cross-cell-h: calc(360px / 3); /* @kind other */ /* 120px */
|
|
113
|
+
--hud-cross-pad-x: calc(var(--hud-cross-cell-w) * 0.05); /* 10.67px */
|
|
114
|
+
/* NOTE: CSS percentage padding always resolves to % of the element WIDTH,
|
|
115
|
+
so pad-y equals pad-x, not 5% of the cell height. */
|
|
116
|
+
--hud-cross-pad-y: calc(var(--hud-cross-cell-w) * 0.05); /* 10.67px — same as pad-x */
|
|
117
|
+
|
|
118
|
+
/* ── Inner 8×8 grid cell size (padded pocket ÷ 8) ──────────── */
|
|
119
|
+
/* The padded pocket is 90% of the cell (5% pad each side). */
|
|
120
|
+
/* Padded inner area: width = cell-w - 2*pad = 192px, height = cell-h - 2*pad = 98.67px */
|
|
121
|
+
--hud-grid-cell-w: calc((var(--hud-cross-cell-w) - 2 * var(--hud-cross-pad-x)) / 8); /* @kind spacing */ /* 24px */
|
|
122
|
+
--hud-grid-cell-h: calc((var(--hud-cross-cell-h) - 2 * var(--hud-cross-pad-y)) / 8); /* @kind spacing */ /* 12.33px */
|
|
123
|
+
|
|
124
|
+
/* ── Minimum interactive element: 2×2 inner grid cells ─────── */
|
|
125
|
+
/* No HUD element (button, slot, pip row, icon) may be smaller than this.
|
|
126
|
+
Smaller than 2×2 is invisible at a glance and un-tappable on mobile.
|
|
127
|
+
At runtime the HUD scales by --hud-scale (~2–3×), so 48×27 design px
|
|
128
|
+
maps to ~96×54 real px on a typical phone — the 44px mobile floor. */
|
|
129
|
+
/* Interactive elements only — buttons, slots, icons, cells.
|
|
130
|
+
Passive elements (bars, dividers, borders) are exempt. */
|
|
131
|
+
--hud-min-tap-w: calc(var(--hud-grid-cell-w) * 2); /* @kind spacing */ /* 48px */
|
|
132
|
+
--hud-min-tap-h: calc(var(--hud-grid-cell-h) * 2); /* @kind spacing */ /* 27px */
|
|
133
|
+
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/* NoobSociety — Motion tokens & keyframes */
|
|
2
2
|
:root {
|
|
3
3
|
/* ── Durations ────────────────────────────────────────────── */
|
|
4
|
-
--ns-dur-fast: 150ms;
|
|
5
|
-
--ns-dur-base: 200ms;
|
|
6
|
-
--ns-dur-slow: 400ms;
|
|
7
|
-
--ns-dur-xslow: 600ms;
|
|
4
|
+
--ns-dur-fast: 150ms; /* @kind other */
|
|
5
|
+
--ns-dur-base: 200ms; /* @kind other */
|
|
6
|
+
--ns-dur-slow: 400ms; /* @kind other */
|
|
7
|
+
--ns-dur-xslow: 600ms; /* @kind other */
|
|
8
8
|
|
|
9
9
|
/* ── Easings ──────────────────────────────────────────────── */
|
|
10
|
-
--ns-ease-out: ease-out;
|
|
11
|
-
--ns-ease-in-out: ease-in-out;
|
|
12
|
-
--ns-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
10
|
+
--ns-ease-out: ease-out; /* @kind other */
|
|
11
|
+
--ns-ease-in-out: ease-in-out; /* @kind other */
|
|
12
|
+
--ns-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1); /* @kind other */
|
|
13
13
|
|
|
14
14
|
/* ── Transitions (common shorthand) ──────────────────────── */
|
|
15
|
-
--ns-transition-fast: var(--ns-dur-fast) var(--ns-ease-out);
|
|
16
|
-
--ns-transition-base: var(--ns-dur-base) var(--ns-ease-out);
|
|
15
|
+
--ns-transition-fast: var(--ns-dur-fast) var(--ns-ease-out); /* @kind other */
|
|
16
|
+
--ns-transition-base: var(--ns-dur-base) var(--ns-ease-out); /* @kind other */
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
/* ── Keyframes ────────────────────────────────────────────────── */
|
|
@@ -20,20 +20,13 @@
|
|
|
20
20
|
--ns-space-24: 5.75rem; /* 92px */
|
|
21
21
|
|
|
22
22
|
/* ── Fluid layout tokens (viewport-responsive) ────────────────── */
|
|
23
|
-
|
|
24
|
-
--ns-fluid-
|
|
25
|
-
|
|
26
|
-
--ns-fluid-
|
|
27
|
-
|
|
28
|
-
--ns-fluid-
|
|
29
|
-
|
|
30
|
-
--ns-fluid-gap-cards: clamp(0.75rem, 2vw, 1.5rem);
|
|
31
|
-
/* Card internal padding: 16px → 20px */
|
|
32
|
-
--ns-fluid-card-pad: clamp(1rem, 2vw, 1.25rem);
|
|
33
|
-
/* Hero two-col gap: 24px → 48px */
|
|
34
|
-
--ns-fluid-hero-gap: clamp(1.5rem, 4vw, 3rem);
|
|
35
|
-
/* Footer two-col gap: 32px → 48px */
|
|
36
|
-
--ns-fluid-footer-gap: clamp(2rem, 5vw, 3rem);
|
|
23
|
+
--ns-fluid-container: clamp(1rem, 4vw, 2rem); /* @kind spacing */
|
|
24
|
+
--ns-fluid-section-top: clamp(2.5rem, 8svh, 4rem); /* @kind spacing */
|
|
25
|
+
--ns-fluid-section-bottom: clamp(4rem, 10svh, 5.5rem); /* @kind spacing */
|
|
26
|
+
--ns-fluid-gap-cards: clamp(0.75rem, 2vw, 1.5rem); /* @kind spacing */
|
|
27
|
+
--ns-fluid-card-pad: clamp(1rem, 2vw, 1.25rem); /* @kind spacing */
|
|
28
|
+
--ns-fluid-hero-gap: clamp(1.5rem, 4vw, 3rem); /* @kind spacing */
|
|
29
|
+
--ns-fluid-footer-gap: clamp(2rem, 5vw, 3rem); /* @kind spacing */
|
|
37
30
|
|
|
38
31
|
/* ── Fixed layout ─────────────────────────────────────────────── */
|
|
39
32
|
--ns-container: 1080px;
|
|
@@ -60,8 +53,8 @@
|
|
|
60
53
|
--ns-border-gold: 2px solid var(--ns-gold-deep);
|
|
61
54
|
|
|
62
55
|
/* ── Blur ─────────────────────────────────────────────────────── */
|
|
63
|
-
--ns-blur-glass: blur(8px);
|
|
64
|
-
--ns-blur-header: blur(12px);
|
|
56
|
+
--ns-blur-glass: blur(8px); /* @kind other */
|
|
57
|
+
--ns-blur-header: blur(12px); /* @kind other */
|
|
65
58
|
|
|
66
59
|
/* ── Component sizing ──────────────────────────────────────────── */
|
|
67
60
|
--ns-icon-slot: 2.625rem; /* 42px */
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
--ns-pixel-md: 12px;
|
|
23
23
|
--ns-pixel-lg: 13px;
|
|
24
24
|
--ns-pixel-xl: 1.6rem; /* hero accent title */
|
|
25
|
-
--ns-pixel-2xl: clamp(2rem, 1rem + 3vw, 3.5rem);
|
|
26
|
-
--ns-title-section: clamp(1.8rem, 1rem + 2vw, 2.4rem);
|
|
25
|
+
--ns-pixel-2xl: clamp(2rem, 1rem + 3vw, 3.5rem); /* @kind other */
|
|
26
|
+
--ns-title-section: clamp(1.8rem, 1rem + 2vw, 2.4rem); /* @kind other */
|
|
27
27
|
|
|
28
28
|
/* ── Line heights ─────────────────────────────────────────── */
|
|
29
29
|
--ns-leading-tight: 1.08;
|
package/package.json
CHANGED
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noobsociety/nsds",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "NoobSociety Design System
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "NoobSociety Design System — Monokai dark tokens, Tailwind preset, and pixel-art React components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"design-system",
|
|
7
|
-
"css",
|
|
8
|
-
"tokens",
|
|
9
7
|
"react",
|
|
10
|
-
"mui",
|
|
11
|
-
"theme",
|
|
12
|
-
"pixel-art",
|
|
13
8
|
"monokai",
|
|
9
|
+
"tailwind",
|
|
10
|
+
"pixel-art",
|
|
14
11
|
"noobsociety"
|
|
15
12
|
],
|
|
16
13
|
"author": "NoobSociety",
|
|
17
14
|
"license": "MIT",
|
|
18
15
|
"scripts": {
|
|
19
|
-
"
|
|
16
|
+
"build": "vite build",
|
|
17
|
+
"check": "npm run build && npm run check:package && npm run check:types && npm run test:smoke",
|
|
20
18
|
"check:package": "node scripts/check-package.mjs",
|
|
21
19
|
"check:types": "tsc --noEmit",
|
|
20
|
+
"prepublishOnly": "npm run build",
|
|
22
21
|
"test": "npm run check",
|
|
23
22
|
"test:smoke": "node scripts/smoke-imports.mjs",
|
|
24
|
-
"release:dry-run": "npm
|
|
23
|
+
"release:dry-run": "npm pack --dry-run"
|
|
25
24
|
},
|
|
26
25
|
"repository": {
|
|
27
26
|
"type": "git",
|
|
@@ -32,9 +31,10 @@
|
|
|
32
31
|
},
|
|
33
32
|
"homepage": "https://github.com/noobsociety/nsds#readme",
|
|
34
33
|
"type": "module",
|
|
35
|
-
"main": "./index.
|
|
36
|
-
"
|
|
37
|
-
"
|
|
34
|
+
"main": "./dist/index.cjs",
|
|
35
|
+
"module": "./dist/index.js",
|
|
36
|
+
"types": "./dist/index.d.ts",
|
|
37
|
+
"style": "./dist/styles.css",
|
|
38
38
|
"sideEffects": [
|
|
39
39
|
"*.css",
|
|
40
40
|
"**/*.css"
|
|
@@ -43,70 +43,42 @@
|
|
|
43
43
|
"access": "public"
|
|
44
44
|
},
|
|
45
45
|
"files": [
|
|
46
|
-
"
|
|
46
|
+
"dist",
|
|
47
47
|
"CHANGELOG.md",
|
|
48
48
|
"CONTRIBUTING.md",
|
|
49
49
|
"LICENSE",
|
|
50
|
-
"SECURITY.md"
|
|
51
|
-
"SKILL.md",
|
|
52
|
-
"index.js",
|
|
53
|
-
"index.d.ts",
|
|
54
|
-
"styles.css",
|
|
55
|
-
"support.js",
|
|
56
|
-
"tokens",
|
|
57
|
-
"components",
|
|
58
|
-
"mui-theme",
|
|
59
|
-
"assets",
|
|
60
|
-
"guidelines",
|
|
61
|
-
"references",
|
|
62
|
-
"ui-kits"
|
|
50
|
+
"SECURITY.md"
|
|
63
51
|
],
|
|
64
52
|
"exports": {
|
|
65
53
|
".": {
|
|
66
|
-
"types": "./index.d.ts",
|
|
67
|
-
"import": "./index.js"
|
|
54
|
+
"types": "./dist/index.d.ts",
|
|
55
|
+
"import": "./dist/index.js",
|
|
56
|
+
"require": "./dist/index.cjs"
|
|
68
57
|
},
|
|
69
58
|
"./react": {
|
|
70
|
-
"types": "./
|
|
71
|
-
"import": "./
|
|
72
|
-
|
|
73
|
-
"./mui": {
|
|
74
|
-
"types": "./mui-theme/index.d.ts",
|
|
75
|
-
"import": "./mui-theme/index.js"
|
|
59
|
+
"types": "./dist/index.d.ts",
|
|
60
|
+
"import": "./dist/index.js",
|
|
61
|
+
"require": "./dist/index.cjs"
|
|
76
62
|
},
|
|
77
|
-
"./
|
|
78
|
-
"./
|
|
79
|
-
"./
|
|
80
|
-
"./
|
|
81
|
-
"./
|
|
82
|
-
"./
|
|
83
|
-
"./
|
|
84
|
-
"./references/*": "./references/*",
|
|
85
|
-
"./ui-kits/*": "./ui-kits/*"
|
|
63
|
+
"./tailwind": "./dist/tailwind/preset.js",
|
|
64
|
+
"./styles": "./dist/styles.css",
|
|
65
|
+
"./styles.css": "./dist/styles.css",
|
|
66
|
+
"./tokens/*": "./dist/tokens/*",
|
|
67
|
+
"./primitives": "./dist/components/primitives.css",
|
|
68
|
+
"./components/primitives.css": "./dist/components/primitives.css",
|
|
69
|
+
"./package.json": "./package.json"
|
|
86
70
|
},
|
|
87
71
|
"peerDependencies": {
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"@mui/material": ">=5",
|
|
91
|
-
"react": ">=18"
|
|
92
|
-
},
|
|
93
|
-
"peerDependenciesMeta": {
|
|
94
|
-
"@emotion/react": {
|
|
95
|
-
"optional": true
|
|
96
|
-
},
|
|
97
|
-
"@emotion/styled": {
|
|
98
|
-
"optional": true
|
|
99
|
-
},
|
|
100
|
-
"@mui/material": {
|
|
101
|
-
"optional": true
|
|
102
|
-
}
|
|
72
|
+
"react": ">=18.0.0",
|
|
73
|
+
"react-dom": ">=18.0.0"
|
|
103
74
|
},
|
|
104
75
|
"devDependencies": {
|
|
105
|
-
"@emotion/react": "^11.14.0",
|
|
106
|
-
"@emotion/styled": "^11.14.1",
|
|
107
|
-
"@mui/material": "^9.1.1",
|
|
108
76
|
"@types/react": "^19.2.17",
|
|
77
|
+
"@vitejs/plugin-react": "^4.0.0",
|
|
109
78
|
"react": "^19.2.7",
|
|
110
|
-
"
|
|
79
|
+
"react-dom": "^19.2.7",
|
|
80
|
+
"tailwindcss": "^3.0.0",
|
|
81
|
+
"typescript": "^6.0.3",
|
|
82
|
+
"vite": "^5.0.0"
|
|
111
83
|
}
|
|
112
84
|
}
|
package/SKILL.md
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: noobsociety-design
|
|
3
|
-
description: Use this skill to design and implement NoobSociety interfaces with the NSDS package, including design tokens, CSS primitives, React components, MUI theme source, pixel assets, and reference UI kits.
|
|
4
|
-
user-invocable: true
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
Read `README.md` first, then inspect the relevant tokens, components, assets, guidelines, references, or UI kits for the task.
|
|
8
|
-
|
|
9
|
-
If creating visual artifacts such as mockups, slides, or prototypes, use the included assets and produce static HTML the user can open. If working in production code, import the package entry points and follow the documented token and component rules.
|
|
10
|
-
|
|
11
|
-
**Core principles:**
|
|
12
|
-
1. Monokai colors are semantic foregrounds: text, icons, accents, buttons, borders, and status colors.
|
|
13
|
-
2. Dark surfaces are the world canvas: page base, raised surfaces, glass overlays, cards, headers, and footers.
|
|
14
|
-
3. Never reassign a Monokai color to a different semantic role.
|
|
15
|
-
4. The default experience is dark. Do not introduce light mode as the default.
|
|
16
|
-
5. Keep copy direct, short, and playful without becoming corporate.
|
|
17
|
-
|
|
18
|
-
When the user does not specify an output format, choose the most useful one: static HTML for visual artifacts, package imports for production code, or concise design guidance for review and planning.
|
package/assets/bg.png
DELETED
|
Binary file
|
package/assets/bloop.png
DELETED
|
Binary file
|
package/assets/hero.png
DELETED
|
Binary file
|
package/assets/lamp.png
DELETED
|
Binary file
|
package/assets/logo.png
DELETED
|
Binary file
|
package/assets/mailbox.png
DELETED
|
Binary file
|
package/assets/plaza.png
DELETED
|
Binary file
|
package/assets/prickle.png
DELETED
|
Binary file
|
package/assets/sign.png
DELETED
|
Binary file
|