@almadar/ui 5.121.4 → 5.122.1
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/dist/avl/index.cjs +1504 -1414
- package/dist/avl/index.js +582 -492
- package/dist/components/index.cjs +1512 -1410
- package/dist/components/index.d.cts +168 -2
- package/dist/components/index.d.ts +168 -2
- package/dist/components/index.js +583 -482
- package/dist/context/index.cjs +24 -0
- package/dist/context/index.js +24 -0
- package/dist/marketing/index.cjs +8 -6
- package/dist/marketing/index.js +8 -6
- package/dist/providers/index.cjs +1387 -1297
- package/dist/providers/index.js +557 -467
- package/dist/runtime/index.cjs +1364 -1274
- package/dist/runtime/index.js +561 -471
- package/package.json +1 -1
- package/tailwind-preset.cjs +121 -2
- package/themes/_base.css +97 -5
- package/themes/_contract.md +25 -0
- package/themes/game-adventure.css +230 -0
- package/themes/game-rpg.css +228 -0
- package/themes/game-sci-fi.css +231 -0
- package/themes/game-ui-pack.css +229 -0
- package/themes/index.css +4 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Game RPG Theme — "Wood & Gold"
|
|
3
|
+
*
|
|
4
|
+
* Kenney's RPG adventure UI pack (carved wood panels + long buttons with
|
|
5
|
+
* normal/pressed art) as a real theme, same contract as every other theme.
|
|
6
|
+
* Dark near-black background so the warm wood chrome and gold accents read
|
|
7
|
+
* as a classic JRPG dialog/menu skin.
|
|
8
|
+
*
|
|
9
|
+
* Chrome sprites: --game-panel-border-image / --game-button-bg-image are CSS
|
|
10
|
+
* 9-slice / stretched backgrounds sourced from kenney-ui-adventure-pack's
|
|
11
|
+
* brown panel + long-button sprites, consumed by the `.chrome-panel` /
|
|
12
|
+
* `.chrome-button` utilities (tailwind-preset.cjs) that Card/Button/
|
|
13
|
+
* GameShell/GameHud/GameMenu already apply unconditionally.
|
|
14
|
+
*/
|
|
15
|
+
[data-theme="game-rpg-dark"] {
|
|
16
|
+
/* Shadows — warm gold glow */
|
|
17
|
+
--shadow-main: 0 4px 14px rgba(240, 200, 105, 0.14), 0 1px 3px rgba(0, 0, 0, 0.45);
|
|
18
|
+
--shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.3);
|
|
19
|
+
--shadow-lg: 0 8px 30px rgba(240, 200, 105, 0.2), 0 4px 10px rgba(0, 0, 0, 0.4);
|
|
20
|
+
--shadow-inner: inset 0 1px 3px rgba(0, 0, 0, 0.45);
|
|
21
|
+
--shadow-none: none;
|
|
22
|
+
--shadow-hover: 0 12px 40px rgba(240, 200, 105, 0.25), 0 4px 12px rgba(0, 0, 0, 0.35);
|
|
23
|
+
--shadow-active: 0 2px 8px rgba(0, 0, 0, 0.4);
|
|
24
|
+
|
|
25
|
+
/* Border radius — carved wood, only lightly rounded */
|
|
26
|
+
--radius-none: 0px;
|
|
27
|
+
--radius-sm: 3px;
|
|
28
|
+
--radius-md: 5px;
|
|
29
|
+
--radius-lg: 8px;
|
|
30
|
+
--radius-xl: 12px;
|
|
31
|
+
--radius-full: 9999px;
|
|
32
|
+
|
|
33
|
+
/* Border width */
|
|
34
|
+
--border-width: 1px;
|
|
35
|
+
--border-width-thin: 1px;
|
|
36
|
+
--border-width-thick: 2px;
|
|
37
|
+
|
|
38
|
+
/* ======================================================================
|
|
39
|
+
* CORE COLORS
|
|
40
|
+
* ====================================================================== */
|
|
41
|
+
|
|
42
|
+
/* Primary — amber CTA (from the button sprite's highlight edge) */
|
|
43
|
+
--color-primary: #d99a4e;
|
|
44
|
+
--color-primary-hover: #e6ac66;
|
|
45
|
+
--color-primary-foreground: #1a1108;
|
|
46
|
+
|
|
47
|
+
/* Secondary — dark wood */
|
|
48
|
+
--color-secondary: #4a3520;
|
|
49
|
+
--color-secondary-hover: #5a4227;
|
|
50
|
+
--color-secondary-foreground: #f5e6cf;
|
|
51
|
+
|
|
52
|
+
/* Accent — gold trim */
|
|
53
|
+
--color-accent: #f0c869;
|
|
54
|
+
--color-accent-foreground: #1a1108;
|
|
55
|
+
|
|
56
|
+
/* Muted */
|
|
57
|
+
--color-muted: #3a2a18;
|
|
58
|
+
--color-muted-foreground: #b39a78;
|
|
59
|
+
|
|
60
|
+
/* Surfaces */
|
|
61
|
+
--color-background: #1a1108;
|
|
62
|
+
--color-foreground: #f5e6cf;
|
|
63
|
+
--color-card: #97714a;
|
|
64
|
+
--color-card-foreground: #fff5e0;
|
|
65
|
+
--color-surface: #2a1d10;
|
|
66
|
+
|
|
67
|
+
/* Borders & Inputs */
|
|
68
|
+
--color-border: #886644;
|
|
69
|
+
--color-input: #4a3520;
|
|
70
|
+
--color-ring: #f0c869;
|
|
71
|
+
|
|
72
|
+
/* Semantic colors */
|
|
73
|
+
--color-error: #d9534f;
|
|
74
|
+
--color-error-foreground: #1a0808;
|
|
75
|
+
--color-success: #7ba05b;
|
|
76
|
+
--color-success-foreground: #0d1a08;
|
|
77
|
+
--color-warning: #f0c869;
|
|
78
|
+
--color-warning-foreground: #1a1108;
|
|
79
|
+
--color-info: #d99a4e;
|
|
80
|
+
--color-info-foreground: #1a1108;
|
|
81
|
+
|
|
82
|
+
/* ======================================================================
|
|
83
|
+
* CHROME — sprite-driven panel/button skin (kenney-ui-adventure-pack, brown)
|
|
84
|
+
* ====================================================================== */
|
|
85
|
+
--game-panel-border-image: url('https://almadar-kflow-assets.web.app/shared/ui-game-shell/kenney-ui-adventure-pack/ui/panel_brown.png');
|
|
86
|
+
--game-panel-border-image-slice: 26 fill;
|
|
87
|
+
--game-panel-border-image-width: 22px;
|
|
88
|
+
--game-button-bg-image: url('https://almadar-kflow-assets.web.app/shared/ui-game-shell/kenney-ui-adventure-pack/ui/buttonLong_brown.png');
|
|
89
|
+
|
|
90
|
+
/* ======================================================================
|
|
91
|
+
* TYPOGRAPHY
|
|
92
|
+
* ====================================================================== */
|
|
93
|
+
--font-family:
|
|
94
|
+
"Kenney Mini", ui-sans-serif, system-ui, sans-serif;
|
|
95
|
+
--font-weight-normal: 400;
|
|
96
|
+
--font-weight-medium: 500;
|
|
97
|
+
--font-weight-bold: 700;
|
|
98
|
+
--letter-spacing: 0.02em;
|
|
99
|
+
--line-height: 1.5;
|
|
100
|
+
|
|
101
|
+
/* Icon styling — gold tint */
|
|
102
|
+
--icon-stroke-width: 1.75;
|
|
103
|
+
--icon-color: #f0c869;
|
|
104
|
+
|
|
105
|
+
/* Transitions */
|
|
106
|
+
--transition-fast: 100ms;
|
|
107
|
+
--transition-normal: 200ms;
|
|
108
|
+
--transition-slow: 400ms;
|
|
109
|
+
--transition-timing: cubic-bezier(0.4, 0, 0.2, 1);
|
|
110
|
+
|
|
111
|
+
/* Hover/Active transforms */
|
|
112
|
+
--hover-scale: 1.01;
|
|
113
|
+
--hover-translate-y: -1px;
|
|
114
|
+
--hover-translate-x: 0;
|
|
115
|
+
--active-scale: 0.99;
|
|
116
|
+
--active-translate-y: 0;
|
|
117
|
+
|
|
118
|
+
/* Focus ring — gold */
|
|
119
|
+
--focus-ring-width: 2px;
|
|
120
|
+
--focus-ring-offset: 2px;
|
|
121
|
+
--focus-ring-color: #f0c869;
|
|
122
|
+
|
|
123
|
+
/* Layer 1 — backfill (see themes/_contract.md) */
|
|
124
|
+
/* Density axis — spacing scale */
|
|
125
|
+
--space-0: 0px;
|
|
126
|
+
--space-1: 4px;
|
|
127
|
+
--space-2: 8px;
|
|
128
|
+
--space-3: 12px;
|
|
129
|
+
--space-4: 16px;
|
|
130
|
+
--space-5: 20px;
|
|
131
|
+
--space-6: 24px;
|
|
132
|
+
--space-7: 28px;
|
|
133
|
+
--space-8: 32px;
|
|
134
|
+
--space-9: 36px;
|
|
135
|
+
--space-10: 40px;
|
|
136
|
+
--space-11: 44px;
|
|
137
|
+
--space-12: 48px;
|
|
138
|
+
/* Density axis — per-element heights */
|
|
139
|
+
--button-height-sm: 28px;
|
|
140
|
+
--button-height-md: 36px;
|
|
141
|
+
--button-height-lg: 44px;
|
|
142
|
+
--input-height-sm: 28px;
|
|
143
|
+
--input-height-md: 36px;
|
|
144
|
+
--input-height-lg: 44px;
|
|
145
|
+
--row-height-compact: 32px;
|
|
146
|
+
--row-height-normal: 40px;
|
|
147
|
+
--row-height-spacious: 48px;
|
|
148
|
+
/* Density axis — per-element padding */
|
|
149
|
+
--card-padding-sm: 12px;
|
|
150
|
+
--card-padding-md: 16px;
|
|
151
|
+
--card-padding-lg: 24px;
|
|
152
|
+
--dialog-padding: 24px;
|
|
153
|
+
--section-gap: 32px;
|
|
154
|
+
/* Type axis — family triplet */
|
|
155
|
+
--font-family-display: var(--font-family);
|
|
156
|
+
--font-family-body: var(--font-family);
|
|
157
|
+
--font-family-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
158
|
+
/* Type axis — size scale */
|
|
159
|
+
--text-xs: 12px;
|
|
160
|
+
--leading-xs: 16px;
|
|
161
|
+
--text-sm: 14px;
|
|
162
|
+
--leading-sm: 20px;
|
|
163
|
+
--text-base: 16px;
|
|
164
|
+
--leading-base: 24px;
|
|
165
|
+
--text-lg: 18px;
|
|
166
|
+
--leading-lg: 28px;
|
|
167
|
+
--text-xl: 20px;
|
|
168
|
+
--leading-xl: 28px;
|
|
169
|
+
--text-2xl: 24px;
|
|
170
|
+
--leading-2xl: 32px;
|
|
171
|
+
--text-3xl: 30px;
|
|
172
|
+
--leading-3xl: 36px;
|
|
173
|
+
--text-4xl: 36px;
|
|
174
|
+
--leading-4xl: 40px;
|
|
175
|
+
--text-display-1: 48px;
|
|
176
|
+
--leading-display-1: 52px;
|
|
177
|
+
--text-display-2: 60px;
|
|
178
|
+
--leading-display-2: 64px;
|
|
179
|
+
/* Type axis — intent mapping */
|
|
180
|
+
--intent-heading-major-size: var(--text-2xl);
|
|
181
|
+
--intent-heading-major-weight: var(--font-weight-bold);
|
|
182
|
+
--intent-heading-major-leading: var(--leading-2xl);
|
|
183
|
+
--intent-heading-minor-size: var(--text-lg);
|
|
184
|
+
--intent-heading-minor-weight: var(--font-weight-bold);
|
|
185
|
+
--intent-heading-minor-leading: var(--leading-lg);
|
|
186
|
+
--intent-body-emphasis-size: var(--text-base);
|
|
187
|
+
--intent-body-emphasis-weight: var(--font-weight-medium);
|
|
188
|
+
--intent-body-emphasis-leading: var(--leading-base);
|
|
189
|
+
--intent-body-default-size: var(--text-sm);
|
|
190
|
+
--intent-body-default-weight: var(--font-weight-normal);
|
|
191
|
+
--intent-body-default-leading: var(--leading-sm);
|
|
192
|
+
--intent-body-quiet-size: var(--text-sm);
|
|
193
|
+
--intent-body-quiet-weight: var(--font-weight-normal);
|
|
194
|
+
--intent-body-quiet-leading: var(--leading-sm);
|
|
195
|
+
--intent-caption-size: var(--text-xs);
|
|
196
|
+
--intent-caption-weight: var(--font-weight-normal);
|
|
197
|
+
--intent-caption-leading: var(--leading-xs);
|
|
198
|
+
--intent-numeric-size: var(--text-sm);
|
|
199
|
+
--intent-numeric-weight: var(--font-weight-medium);
|
|
200
|
+
--intent-numeric-leading: var(--leading-sm);
|
|
201
|
+
/* Motion axis — duration palette */
|
|
202
|
+
--duration-instant: 0ms;
|
|
203
|
+
--duration-fast: var(--transition-fast);
|
|
204
|
+
--duration-normal: var(--transition-normal);
|
|
205
|
+
--duration-slow: var(--transition-slow);
|
|
206
|
+
--duration-dramatic: 600ms;
|
|
207
|
+
/* Motion axis — easing palette */
|
|
208
|
+
--easing-linear: linear;
|
|
209
|
+
--easing-standard: var(--transition-timing);
|
|
210
|
+
--easing-emphasized: cubic-bezier(0.2, 0, 0, 1);
|
|
211
|
+
--easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
212
|
+
/* Iconography axis */
|
|
213
|
+
--icon-family: lucide;
|
|
214
|
+
--icon-default-size: 16px;
|
|
215
|
+
/* Elevation axis — per-layer mapping */
|
|
216
|
+
--elevation-card: var(--shadow-sm);
|
|
217
|
+
--elevation-popover: var(--shadow-main);
|
|
218
|
+
--elevation-dialog: var(--shadow-lg);
|
|
219
|
+
--elevation-toast: var(--shadow-main);
|
|
220
|
+
/* Geometry axis — radius rhythm with intent */
|
|
221
|
+
--radius-container: var(--radius-md);
|
|
222
|
+
--radius-interactive: var(--radius-md);
|
|
223
|
+
--radius-pill: var(--radius-full);
|
|
224
|
+
/* Geometry axis — border-width rhythm */
|
|
225
|
+
--border-hairline: 1px;
|
|
226
|
+
--border-standard: var(--border-width);
|
|
227
|
+
--border-heavy: var(--border-width-thick);
|
|
228
|
+
}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Game Sci-Fi Theme — "Deep Space HUD"
|
|
3
|
+
*
|
|
4
|
+
* Kenney sci-fi UI pack (glass/metal HUD panels, cyan/blue accents) as a real
|
|
5
|
+
* theme, following the same contract every other theme uses. Dark mode only —
|
|
6
|
+
* this is a game UI, not a productivity app (see trait-wars.css precedent).
|
|
7
|
+
*
|
|
8
|
+
* Chrome sprites: --game-panel-border-image is a CSS 9-slice (border-image)
|
|
9
|
+
* sourced from kenney-ui-pack-sci-fi's `metalPanel_blue` sprite, consumed by
|
|
10
|
+
* the `.bg-chrome-panel` utility (tailwind-preset.cjs) that Card/GameShell/
|
|
11
|
+
* GameHud/GameMenu already apply unconditionally. This pack ships no button
|
|
12
|
+
* sprites, so --game-button-bg-image is left undeclared — Button renders with
|
|
13
|
+
* flat theme-colored chrome instead (a legitimate sci-fi HUD look, and the
|
|
14
|
+
* `.bg-chrome-button` utility's `none` fallback already handles this cleanly).
|
|
15
|
+
*/
|
|
16
|
+
[data-theme="game-sci-fi-dark"] {
|
|
17
|
+
/* Shadows — cool cyan glow */
|
|
18
|
+
--shadow-main:
|
|
19
|
+
0 4px 14px rgba(62, 166, 255, 0.14), 0 1px 3px rgba(0, 0, 0, 0.35);
|
|
20
|
+
--shadow-sm: 0 2px 4px rgba(62, 166, 255, 0.08);
|
|
21
|
+
--shadow-lg:
|
|
22
|
+
0 8px 30px rgba(62, 166, 255, 0.20), 0 4px 10px rgba(0, 0, 0, 0.30);
|
|
23
|
+
--shadow-inner: inset 0 1px 3px rgba(0, 0, 0, 0.35);
|
|
24
|
+
--shadow-none: none;
|
|
25
|
+
--shadow-hover:
|
|
26
|
+
0 12px 40px rgba(62, 166, 255, 0.25), 0 4px 12px rgba(79, 195, 247, 0.12);
|
|
27
|
+
--shadow-active: 0 2px 8px rgba(62, 166, 255, 0.18);
|
|
28
|
+
|
|
29
|
+
/* Border radius — HUD panels are only lightly rounded */
|
|
30
|
+
--radius-none: 0px;
|
|
31
|
+
--radius-sm: 4px;
|
|
32
|
+
--radius-md: 6px;
|
|
33
|
+
--radius-lg: 8px;
|
|
34
|
+
--radius-xl: 12px;
|
|
35
|
+
--radius-full: 9999px;
|
|
36
|
+
|
|
37
|
+
/* Border width */
|
|
38
|
+
--border-width: 1px;
|
|
39
|
+
--border-width-thin: 1px;
|
|
40
|
+
--border-width-thick: 2px;
|
|
41
|
+
|
|
42
|
+
/* ======================================================================
|
|
43
|
+
* CORE COLORS
|
|
44
|
+
* ====================================================================== */
|
|
45
|
+
|
|
46
|
+
/* Primary — HUD cyan (actions, interactive elements) */
|
|
47
|
+
--color-primary: #3ea6ff;
|
|
48
|
+
--color-primary-hover: #6cc3ff;
|
|
49
|
+
--color-primary-foreground: #071018;
|
|
50
|
+
|
|
51
|
+
/* Secondary — deep space panel */
|
|
52
|
+
--color-secondary: #182338;
|
|
53
|
+
--color-secondary-hover: #22314c;
|
|
54
|
+
--color-secondary-foreground: #dceaf7;
|
|
55
|
+
|
|
56
|
+
/* Accent — energy yellow (score/highlight) */
|
|
57
|
+
--color-accent: #ffcc4d;
|
|
58
|
+
--color-accent-foreground: #1a1408;
|
|
59
|
+
|
|
60
|
+
/* Muted — dim HUD grey */
|
|
61
|
+
--color-muted: #22314c;
|
|
62
|
+
--color-muted-foreground: #7e93b3;
|
|
63
|
+
|
|
64
|
+
/* Surfaces */
|
|
65
|
+
--color-background: #0a0e1a;
|
|
66
|
+
--color-foreground: #e8f4fb;
|
|
67
|
+
--color-card: #141d30;
|
|
68
|
+
--color-card-foreground: #e8f4fb;
|
|
69
|
+
--color-surface: #141d30;
|
|
70
|
+
|
|
71
|
+
/* Borders & Inputs */
|
|
72
|
+
--color-border: #3a4a66;
|
|
73
|
+
--color-input: #182338;
|
|
74
|
+
--color-ring: #3ea6ff;
|
|
75
|
+
|
|
76
|
+
/* Semantic colors */
|
|
77
|
+
--color-error: #ff5c5c;
|
|
78
|
+
--color-error-foreground: #1a0808;
|
|
79
|
+
--color-success: #4ade80;
|
|
80
|
+
--color-success-foreground: #082014;
|
|
81
|
+
--color-warning: #ffcc4d;
|
|
82
|
+
--color-warning-foreground: #1a1408;
|
|
83
|
+
--color-info: #3ea6ff;
|
|
84
|
+
--color-info-foreground: #071018;
|
|
85
|
+
|
|
86
|
+
/* ======================================================================
|
|
87
|
+
* CHROME — sprite-driven panel skin (kenney-ui-pack-sci-fi/metalPanel_blue)
|
|
88
|
+
* ====================================================================== */
|
|
89
|
+
--game-panel-border-image: url('https://almadar-kflow-assets.web.app/shared/ui-game-shell/kenney-ui-pack-sci-fi/ui/metalPanel_blue.png');
|
|
90
|
+
--game-panel-border-image-slice: 26 fill;
|
|
91
|
+
--game-panel-border-image-width: 22px;
|
|
92
|
+
|
|
93
|
+
/* ======================================================================
|
|
94
|
+
* TYPOGRAPHY
|
|
95
|
+
* ====================================================================== */
|
|
96
|
+
--font-family:
|
|
97
|
+
"Kenney Future", "Orbitron", "Rajdhani", ui-sans-serif, system-ui, sans-serif;
|
|
98
|
+
--font-weight-normal: 400;
|
|
99
|
+
--font-weight-medium: 500;
|
|
100
|
+
--font-weight-bold: 700;
|
|
101
|
+
--letter-spacing: 0.02em;
|
|
102
|
+
--line-height: 1.5;
|
|
103
|
+
|
|
104
|
+
/* Icon styling — cyan tint */
|
|
105
|
+
--icon-stroke-width: 1.75;
|
|
106
|
+
--icon-color: #3ea6ff;
|
|
107
|
+
|
|
108
|
+
/* Transitions — snappy HUD response */
|
|
109
|
+
--transition-fast: 100ms;
|
|
110
|
+
--transition-normal: 200ms;
|
|
111
|
+
--transition-slow: 400ms;
|
|
112
|
+
--transition-timing: cubic-bezier(0.4, 0, 0.2, 1);
|
|
113
|
+
|
|
114
|
+
/* Hover/Active transforms */
|
|
115
|
+
--hover-scale: 1.01;
|
|
116
|
+
--hover-translate-y: -1px;
|
|
117
|
+
--hover-translate-x: 0;
|
|
118
|
+
--active-scale: 0.99;
|
|
119
|
+
--active-translate-y: 0;
|
|
120
|
+
|
|
121
|
+
/* Focus ring — cyan */
|
|
122
|
+
--focus-ring-width: 2px;
|
|
123
|
+
--focus-ring-offset: 2px;
|
|
124
|
+
--focus-ring-color: #3ea6ff;
|
|
125
|
+
|
|
126
|
+
/* Layer 1 — backfill (see themes/_contract.md) */
|
|
127
|
+
/* Density axis — spacing scale */
|
|
128
|
+
--space-0: 0px;
|
|
129
|
+
--space-1: 4px;
|
|
130
|
+
--space-2: 8px;
|
|
131
|
+
--space-3: 12px;
|
|
132
|
+
--space-4: 16px;
|
|
133
|
+
--space-5: 20px;
|
|
134
|
+
--space-6: 24px;
|
|
135
|
+
--space-7: 28px;
|
|
136
|
+
--space-8: 32px;
|
|
137
|
+
--space-9: 36px;
|
|
138
|
+
--space-10: 40px;
|
|
139
|
+
--space-11: 44px;
|
|
140
|
+
--space-12: 48px;
|
|
141
|
+
/* Density axis — per-element heights */
|
|
142
|
+
--button-height-sm: 28px;
|
|
143
|
+
--button-height-md: 36px;
|
|
144
|
+
--button-height-lg: 44px;
|
|
145
|
+
--input-height-sm: 28px;
|
|
146
|
+
--input-height-md: 36px;
|
|
147
|
+
--input-height-lg: 44px;
|
|
148
|
+
--row-height-compact: 32px;
|
|
149
|
+
--row-height-normal: 40px;
|
|
150
|
+
--row-height-spacious: 48px;
|
|
151
|
+
/* Density axis — per-element padding */
|
|
152
|
+
--card-padding-sm: 12px;
|
|
153
|
+
--card-padding-md: 16px;
|
|
154
|
+
--card-padding-lg: 24px;
|
|
155
|
+
--dialog-padding: 24px;
|
|
156
|
+
--section-gap: 32px;
|
|
157
|
+
/* Type axis — family triplet */
|
|
158
|
+
--font-family-display: var(--font-family);
|
|
159
|
+
--font-family-body: var(--font-family);
|
|
160
|
+
--font-family-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
161
|
+
/* Type axis — size scale */
|
|
162
|
+
--text-xs: 12px;
|
|
163
|
+
--leading-xs: 16px;
|
|
164
|
+
--text-sm: 14px;
|
|
165
|
+
--leading-sm: 20px;
|
|
166
|
+
--text-base: 16px;
|
|
167
|
+
--leading-base: 24px;
|
|
168
|
+
--text-lg: 18px;
|
|
169
|
+
--leading-lg: 28px;
|
|
170
|
+
--text-xl: 20px;
|
|
171
|
+
--leading-xl: 28px;
|
|
172
|
+
--text-2xl: 24px;
|
|
173
|
+
--leading-2xl: 32px;
|
|
174
|
+
--text-3xl: 30px;
|
|
175
|
+
--leading-3xl: 36px;
|
|
176
|
+
--text-4xl: 36px;
|
|
177
|
+
--leading-4xl: 40px;
|
|
178
|
+
--text-display-1: 48px;
|
|
179
|
+
--leading-display-1: 52px;
|
|
180
|
+
--text-display-2: 60px;
|
|
181
|
+
--leading-display-2: 64px;
|
|
182
|
+
/* Type axis — intent mapping */
|
|
183
|
+
--intent-heading-major-size: var(--text-2xl);
|
|
184
|
+
--intent-heading-major-weight: var(--font-weight-bold);
|
|
185
|
+
--intent-heading-major-leading: var(--leading-2xl);
|
|
186
|
+
--intent-heading-minor-size: var(--text-lg);
|
|
187
|
+
--intent-heading-minor-weight: var(--font-weight-bold);
|
|
188
|
+
--intent-heading-minor-leading: var(--leading-lg);
|
|
189
|
+
--intent-body-emphasis-size: var(--text-base);
|
|
190
|
+
--intent-body-emphasis-weight: var(--font-weight-medium);
|
|
191
|
+
--intent-body-emphasis-leading: var(--leading-base);
|
|
192
|
+
--intent-body-default-size: var(--text-sm);
|
|
193
|
+
--intent-body-default-weight: var(--font-weight-normal);
|
|
194
|
+
--intent-body-default-leading: var(--leading-sm);
|
|
195
|
+
--intent-body-quiet-size: var(--text-sm);
|
|
196
|
+
--intent-body-quiet-weight: var(--font-weight-normal);
|
|
197
|
+
--intent-body-quiet-leading: var(--leading-sm);
|
|
198
|
+
--intent-caption-size: var(--text-xs);
|
|
199
|
+
--intent-caption-weight: var(--font-weight-normal);
|
|
200
|
+
--intent-caption-leading: var(--leading-xs);
|
|
201
|
+
--intent-numeric-size: var(--text-sm);
|
|
202
|
+
--intent-numeric-weight: var(--font-weight-medium);
|
|
203
|
+
--intent-numeric-leading: var(--leading-sm);
|
|
204
|
+
/* Motion axis — duration palette */
|
|
205
|
+
--duration-instant: 0ms;
|
|
206
|
+
--duration-fast: var(--transition-fast);
|
|
207
|
+
--duration-normal: var(--transition-normal);
|
|
208
|
+
--duration-slow: var(--transition-slow);
|
|
209
|
+
--duration-dramatic: 600ms;
|
|
210
|
+
/* Motion axis — easing palette */
|
|
211
|
+
--easing-linear: linear;
|
|
212
|
+
--easing-standard: var(--transition-timing);
|
|
213
|
+
--easing-emphasized: cubic-bezier(0.2, 0, 0, 1);
|
|
214
|
+
--easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
215
|
+
/* Iconography axis */
|
|
216
|
+
--icon-family: lucide;
|
|
217
|
+
--icon-default-size: 16px;
|
|
218
|
+
/* Elevation axis — per-layer mapping */
|
|
219
|
+
--elevation-card: var(--shadow-sm);
|
|
220
|
+
--elevation-popover: var(--shadow-main);
|
|
221
|
+
--elevation-dialog: var(--shadow-lg);
|
|
222
|
+
--elevation-toast: var(--shadow-main);
|
|
223
|
+
/* Geometry axis — radius rhythm with intent */
|
|
224
|
+
--radius-container: var(--radius-md);
|
|
225
|
+
--radius-interactive: var(--radius-md);
|
|
226
|
+
--radius-pill: var(--radius-full);
|
|
227
|
+
/* Geometry axis — border-width rhythm */
|
|
228
|
+
--border-hairline: 1px;
|
|
229
|
+
--border-standard: var(--border-width);
|
|
230
|
+
--border-heavy: var(--border-width-thick);
|
|
231
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Game UI Pack Theme — "Neutral Flat HUD"
|
|
3
|
+
*
|
|
4
|
+
* Kenney's grey/neutral UI pack (light, flat chip-style panels + buttons) as a
|
|
5
|
+
* real theme, same contract as every other theme. Dark-mode background so the
|
|
6
|
+
* light sprite chrome pops as high-contrast HUD chips (the sprite art itself
|
|
7
|
+
* is near-white — pairing it with a light page background is what produced
|
|
8
|
+
* the original washed-out look this project fixed).
|
|
9
|
+
*
|
|
10
|
+
* Chrome sprites: --game-panel-border-image / --game-button-bg-image are CSS
|
|
11
|
+
* 9-slice / stretched backgrounds sourced from kenney-ui-pack's grey sheet,
|
|
12
|
+
* consumed by the `.chrome-panel` / `.chrome-button` utilities
|
|
13
|
+
* (tailwind-preset.cjs) that Card/Button/GameShell/GameHud/GameMenu already
|
|
14
|
+
* apply unconditionally.
|
|
15
|
+
*/
|
|
16
|
+
[data-theme="game-ui-pack-dark"] {
|
|
17
|
+
/* Shadows */
|
|
18
|
+
--shadow-main: 0 4px 14px rgba(0, 0, 0, 0.35), 0 1px 3px rgba(0, 0, 0, 0.4);
|
|
19
|
+
--shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.25);
|
|
20
|
+
--shadow-lg: 0 8px 30px rgba(0, 0, 0, 0.45), 0 4px 10px rgba(0, 0, 0, 0.3);
|
|
21
|
+
--shadow-inner: inset 0 1px 3px rgba(0, 0, 0, 0.35);
|
|
22
|
+
--shadow-none: none;
|
|
23
|
+
--shadow-hover: 0 12px 40px rgba(46, 167, 225, 0.25), 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
24
|
+
--shadow-active: 0 2px 8px rgba(0, 0, 0, 0.3);
|
|
25
|
+
|
|
26
|
+
/* Border radius — flat chip UI, lightly rounded */
|
|
27
|
+
--radius-none: 0px;
|
|
28
|
+
--radius-sm: 4px;
|
|
29
|
+
--radius-md: 6px;
|
|
30
|
+
--radius-lg: 8px;
|
|
31
|
+
--radius-xl: 12px;
|
|
32
|
+
--radius-full: 9999px;
|
|
33
|
+
|
|
34
|
+
/* Border width */
|
|
35
|
+
--border-width: 1px;
|
|
36
|
+
--border-width-thin: 1px;
|
|
37
|
+
--border-width-thick: 2px;
|
|
38
|
+
|
|
39
|
+
/* ======================================================================
|
|
40
|
+
* CORE COLORS
|
|
41
|
+
* ====================================================================== */
|
|
42
|
+
|
|
43
|
+
/* Primary — friendly flat blue */
|
|
44
|
+
--color-primary: #2ea7e1;
|
|
45
|
+
--color-primary-hover: #4fb8ea;
|
|
46
|
+
--color-primary-foreground: #06202c;
|
|
47
|
+
|
|
48
|
+
/* Secondary — neutral chip grey */
|
|
49
|
+
--color-secondary: #3a3f47;
|
|
50
|
+
--color-secondary-hover: #474d56;
|
|
51
|
+
--color-secondary-foreground: #f2f3f4;
|
|
52
|
+
|
|
53
|
+
/* Accent — score/highlight gold */
|
|
54
|
+
--color-accent: #ffb703;
|
|
55
|
+
--color-accent-foreground: #241a00;
|
|
56
|
+
|
|
57
|
+
/* Muted */
|
|
58
|
+
--color-muted: #33373d;
|
|
59
|
+
--color-muted-foreground: #9aa0a8;
|
|
60
|
+
|
|
61
|
+
/* Surfaces */
|
|
62
|
+
--color-background: #1b1e22;
|
|
63
|
+
--color-foreground: #f2f3f4;
|
|
64
|
+
--color-card: #eeeeee;
|
|
65
|
+
--color-card-foreground: #22262b;
|
|
66
|
+
--color-surface: #24272c;
|
|
67
|
+
|
|
68
|
+
/* Borders & Inputs */
|
|
69
|
+
--color-border: #999999;
|
|
70
|
+
--color-input: #3a3f47;
|
|
71
|
+
--color-ring: #2ea7e1;
|
|
72
|
+
|
|
73
|
+
/* Semantic colors */
|
|
74
|
+
--color-error: #ff5c5c;
|
|
75
|
+
--color-error-foreground: #1a0808;
|
|
76
|
+
--color-success: #4ade80;
|
|
77
|
+
--color-success-foreground: #082014;
|
|
78
|
+
--color-warning: #ffb703;
|
|
79
|
+
--color-warning-foreground: #241a00;
|
|
80
|
+
--color-info: #2ea7e1;
|
|
81
|
+
--color-info-foreground: #06202c;
|
|
82
|
+
|
|
83
|
+
/* ======================================================================
|
|
84
|
+
* CHROME — sprite-driven panel/button skin (kenney-ui-pack grey sheet)
|
|
85
|
+
* ====================================================================== */
|
|
86
|
+
--game-panel-border-image: url('https://almadar-kflow-assets.web.app/shared/ui-game-shell/kenney-ui-pack/ui/grey_panel.png');
|
|
87
|
+
--game-panel-border-image-slice: 26 fill;
|
|
88
|
+
--game-panel-border-image-width: 22px;
|
|
89
|
+
--game-button-bg-image: url('https://almadar-kflow-assets.web.app/shared/ui-game-shell/kenney-ui-pack/ui/grey_button00.png');
|
|
90
|
+
|
|
91
|
+
/* ======================================================================
|
|
92
|
+
* TYPOGRAPHY
|
|
93
|
+
* ====================================================================== */
|
|
94
|
+
--font-family:
|
|
95
|
+
"Kenney Future", ui-sans-serif, system-ui, sans-serif;
|
|
96
|
+
--font-weight-normal: 400;
|
|
97
|
+
--font-weight-medium: 500;
|
|
98
|
+
--font-weight-bold: 700;
|
|
99
|
+
--letter-spacing: 0.01em;
|
|
100
|
+
--line-height: 1.5;
|
|
101
|
+
|
|
102
|
+
/* Icon styling */
|
|
103
|
+
--icon-stroke-width: 1.75;
|
|
104
|
+
--icon-color: #2ea7e1;
|
|
105
|
+
|
|
106
|
+
/* Transitions */
|
|
107
|
+
--transition-fast: 100ms;
|
|
108
|
+
--transition-normal: 200ms;
|
|
109
|
+
--transition-slow: 400ms;
|
|
110
|
+
--transition-timing: cubic-bezier(0.4, 0, 0.2, 1);
|
|
111
|
+
|
|
112
|
+
/* Hover/Active transforms */
|
|
113
|
+
--hover-scale: 1.01;
|
|
114
|
+
--hover-translate-y: -1px;
|
|
115
|
+
--hover-translate-x: 0;
|
|
116
|
+
--active-scale: 0.99;
|
|
117
|
+
--active-translate-y: 0;
|
|
118
|
+
|
|
119
|
+
/* Focus ring */
|
|
120
|
+
--focus-ring-width: 2px;
|
|
121
|
+
--focus-ring-offset: 2px;
|
|
122
|
+
--focus-ring-color: #2ea7e1;
|
|
123
|
+
|
|
124
|
+
/* Layer 1 — backfill (see themes/_contract.md) */
|
|
125
|
+
/* Density axis — spacing scale */
|
|
126
|
+
--space-0: 0px;
|
|
127
|
+
--space-1: 4px;
|
|
128
|
+
--space-2: 8px;
|
|
129
|
+
--space-3: 12px;
|
|
130
|
+
--space-4: 16px;
|
|
131
|
+
--space-5: 20px;
|
|
132
|
+
--space-6: 24px;
|
|
133
|
+
--space-7: 28px;
|
|
134
|
+
--space-8: 32px;
|
|
135
|
+
--space-9: 36px;
|
|
136
|
+
--space-10: 40px;
|
|
137
|
+
--space-11: 44px;
|
|
138
|
+
--space-12: 48px;
|
|
139
|
+
/* Density axis — per-element heights */
|
|
140
|
+
--button-height-sm: 28px;
|
|
141
|
+
--button-height-md: 36px;
|
|
142
|
+
--button-height-lg: 44px;
|
|
143
|
+
--input-height-sm: 28px;
|
|
144
|
+
--input-height-md: 36px;
|
|
145
|
+
--input-height-lg: 44px;
|
|
146
|
+
--row-height-compact: 32px;
|
|
147
|
+
--row-height-normal: 40px;
|
|
148
|
+
--row-height-spacious: 48px;
|
|
149
|
+
/* Density axis — per-element padding */
|
|
150
|
+
--card-padding-sm: 12px;
|
|
151
|
+
--card-padding-md: 16px;
|
|
152
|
+
--card-padding-lg: 24px;
|
|
153
|
+
--dialog-padding: 24px;
|
|
154
|
+
--section-gap: 32px;
|
|
155
|
+
/* Type axis — family triplet */
|
|
156
|
+
--font-family-display: var(--font-family);
|
|
157
|
+
--font-family-body: var(--font-family);
|
|
158
|
+
--font-family-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
159
|
+
/* Type axis — size scale */
|
|
160
|
+
--text-xs: 12px;
|
|
161
|
+
--leading-xs: 16px;
|
|
162
|
+
--text-sm: 14px;
|
|
163
|
+
--leading-sm: 20px;
|
|
164
|
+
--text-base: 16px;
|
|
165
|
+
--leading-base: 24px;
|
|
166
|
+
--text-lg: 18px;
|
|
167
|
+
--leading-lg: 28px;
|
|
168
|
+
--text-xl: 20px;
|
|
169
|
+
--leading-xl: 28px;
|
|
170
|
+
--text-2xl: 24px;
|
|
171
|
+
--leading-2xl: 32px;
|
|
172
|
+
--text-3xl: 30px;
|
|
173
|
+
--leading-3xl: 36px;
|
|
174
|
+
--text-4xl: 36px;
|
|
175
|
+
--leading-4xl: 40px;
|
|
176
|
+
--text-display-1: 48px;
|
|
177
|
+
--leading-display-1: 52px;
|
|
178
|
+
--text-display-2: 60px;
|
|
179
|
+
--leading-display-2: 64px;
|
|
180
|
+
/* Type axis — intent mapping */
|
|
181
|
+
--intent-heading-major-size: var(--text-2xl);
|
|
182
|
+
--intent-heading-major-weight: var(--font-weight-bold);
|
|
183
|
+
--intent-heading-major-leading: var(--leading-2xl);
|
|
184
|
+
--intent-heading-minor-size: var(--text-lg);
|
|
185
|
+
--intent-heading-minor-weight: var(--font-weight-bold);
|
|
186
|
+
--intent-heading-minor-leading: var(--leading-lg);
|
|
187
|
+
--intent-body-emphasis-size: var(--text-base);
|
|
188
|
+
--intent-body-emphasis-weight: var(--font-weight-medium);
|
|
189
|
+
--intent-body-emphasis-leading: var(--leading-base);
|
|
190
|
+
--intent-body-default-size: var(--text-sm);
|
|
191
|
+
--intent-body-default-weight: var(--font-weight-normal);
|
|
192
|
+
--intent-body-default-leading: var(--leading-sm);
|
|
193
|
+
--intent-body-quiet-size: var(--text-sm);
|
|
194
|
+
--intent-body-quiet-weight: var(--font-weight-normal);
|
|
195
|
+
--intent-body-quiet-leading: var(--leading-sm);
|
|
196
|
+
--intent-caption-size: var(--text-xs);
|
|
197
|
+
--intent-caption-weight: var(--font-weight-normal);
|
|
198
|
+
--intent-caption-leading: var(--leading-xs);
|
|
199
|
+
--intent-numeric-size: var(--text-sm);
|
|
200
|
+
--intent-numeric-weight: var(--font-weight-medium);
|
|
201
|
+
--intent-numeric-leading: var(--leading-sm);
|
|
202
|
+
/* Motion axis — duration palette */
|
|
203
|
+
--duration-instant: 0ms;
|
|
204
|
+
--duration-fast: var(--transition-fast);
|
|
205
|
+
--duration-normal: var(--transition-normal);
|
|
206
|
+
--duration-slow: var(--transition-slow);
|
|
207
|
+
--duration-dramatic: 600ms;
|
|
208
|
+
/* Motion axis — easing palette */
|
|
209
|
+
--easing-linear: linear;
|
|
210
|
+
--easing-standard: var(--transition-timing);
|
|
211
|
+
--easing-emphasized: cubic-bezier(0.2, 0, 0, 1);
|
|
212
|
+
--easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
213
|
+
/* Iconography axis */
|
|
214
|
+
--icon-family: lucide;
|
|
215
|
+
--icon-default-size: 16px;
|
|
216
|
+
/* Elevation axis — per-layer mapping */
|
|
217
|
+
--elevation-card: var(--shadow-sm);
|
|
218
|
+
--elevation-popover: var(--shadow-main);
|
|
219
|
+
--elevation-dialog: var(--shadow-lg);
|
|
220
|
+
--elevation-toast: var(--shadow-main);
|
|
221
|
+
/* Geometry axis — radius rhythm with intent */
|
|
222
|
+
--radius-container: var(--radius-md);
|
|
223
|
+
--radius-interactive: var(--radius-md);
|
|
224
|
+
--radius-pill: var(--radius-full);
|
|
225
|
+
/* Geometry axis — border-width rhythm */
|
|
226
|
+
--border-hairline: 1px;
|
|
227
|
+
--border-standard: var(--border-width);
|
|
228
|
+
--border-heavy: var(--border-width-thick);
|
|
229
|
+
}
|
package/themes/index.css
CHANGED
|
@@ -25,6 +25,10 @@
|
|
|
25
25
|
@import "./almadar.css";
|
|
26
26
|
@import "./almadar-website.css";
|
|
27
27
|
@import "./trait-wars.css";
|
|
28
|
+
@import "./game-sci-fi.css";
|
|
29
|
+
@import "./game-ui-pack.css";
|
|
30
|
+
@import "./game-adventure.css";
|
|
31
|
+
@import "./game-rpg.css";
|
|
28
32
|
|
|
29
33
|
/* Extended themes */
|
|
30
34
|
@import "./ocean.css";
|