@trading-game/design-intelligence-layer 0.8.5

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/src/styles.css ADDED
@@ -0,0 +1,398 @@
1
+ /*
2
+ * Trading Game Design System — Design Tokens
3
+ *
4
+ * Usage in consumer apps:
5
+ * import "@trading-game/design-intelligence-layer/styles"
6
+ *
7
+ * Requires Tailwind CSS v4 in your project.
8
+ * Add `@import "@trading-game/design-intelligence-layer/styles"` in your CSS
9
+ * or import it in your JS entry point.
10
+ */
11
+
12
+ /* Fonts — Plus Jakarta Sans (all) */
13
+ @import url("https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&display=swap");
14
+
15
+ @custom-variant dark (&:is(.dark *));
16
+
17
+ /* ── Tailwind theme bridge — maps CSS vars to utility classes ── */
18
+ @theme inline {
19
+ --color-background: var(--background);
20
+ --color-on-prominent: var(--on-prominent);
21
+ --color-on-prominent-static-inverse: var(--on-prominent-static-inverse);
22
+ --font-sans: var(--font-plus-jakarta-sans);
23
+ --font-body: var(--font-plus-jakarta-sans);
24
+ --font-display: var(--font-plus-jakarta-sans);
25
+ --color-sidebar-ring: var(--sidebar-ring);
26
+ --color-sidebar-border: var(--sidebar-border);
27
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
28
+ --color-sidebar-accent: var(--sidebar-accent);
29
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
30
+ --color-sidebar-primary: var(--sidebar-primary);
31
+ --color-sidebar-foreground: var(--sidebar-foreground);
32
+ --color-sidebar: var(--sidebar);
33
+ --color-ring: var(--ring);
34
+ --color-input: var(--input);
35
+ --color-border: var(--border);
36
+ /* @deprecated — use border-border-subtle or border-border-prominent */
37
+ --color-border-subtle: var(--border-subtle);
38
+ --color-border-prominent: var(--border-prominent);
39
+ --color-secondary-hover: var(--secondary-hover);
40
+ --color-on-subtle: var(--on-subtle);
41
+ --color-subtle: var(--subtle);
42
+ --color-primary: var(--primary);
43
+ --color-primary-hover: var(--primary-hover);
44
+ --color-popover-foreground: var(--popover-foreground);
45
+ --color-popover: var(--popover);
46
+ --color-card-foreground: var(--card-foreground);
47
+ --color-card: var(--card);
48
+ --color-semantic-win: var(--semantic-win);
49
+ --color-semantic-loss: var(--semantic-loss);
50
+ --color-semantic-warning: var(--semantic-warning);
51
+ --color-alert-info-text: var(--alert-info-text);
52
+ --color-alert-info-border: var(--alert-info-border);
53
+ --color-alert-error-text: var(--alert-error-text);
54
+ --color-alert-error-border: var(--alert-error-border);
55
+ --color-on-muted: var(--on-muted);
56
+ --color-overlay: var(--overlay);
57
+ --color-slider-range: var(--slider-range);
58
+ --color-semantic-info: var(--semantic-info);
59
+ --spacing-layout-gutter: var(--semantic-layout-gutter);
60
+ --spacing-layout-margin-inline: var(--semantic-layout-margin-inline);
61
+ --max-width-layout-diagram-default: var(--semantic-layout-diagram-max-default);
62
+ --max-width-layout-diagram-small: var(--semantic-layout-diagram-max-small);
63
+ --max-width-layout-diagram-medium: var(--semantic-layout-diagram-max-medium);
64
+ --radius-2xs: calc(var(--radius) - 8px);
65
+ --radius-xs: calc(var(--radius) - 6px);
66
+ --radius-sm: calc(var(--radius) - 4px);
67
+ --radius-md: calc(var(--radius) - 2px);
68
+ --radius-lg: var(--radius);
69
+ --radius-xl: calc(var(--radius) + 4px);
70
+ --radius-2xl: calc(var(--radius) + 8px);
71
+ --radius-3xl: calc(var(--radius) + 12px);
72
+ --radius-4xl: calc(var(--radius) + 16px);
73
+ }
74
+
75
+ /* ══════════════════════════════════════════════════════════════
76
+ LAYER 1 — PRIMITIVES
77
+ Raw palette values only. Never reference directly in components.
78
+ ══════════════════════════════════════════════════════════════ */
79
+ :root {
80
+ --font-plus-jakarta-sans: "Plus Jakarta Sans", ui-sans-serif, system-ui, sans-serif;
81
+ --radius: 0.625rem;
82
+
83
+ /* ── Blue scale ── */
84
+ --primitive-blue-50: oklch(0.93 0.05 267);
85
+ /* #E6E6FF */
86
+ --primitive-blue-100: oklch(0.77 0.14 267);
87
+ /* #B8B8FF */
88
+ --primitive-blue-200: oklch(0.66 0.21 267);
89
+ /* #8A8AFF */
90
+ --primitive-blue-300: oklch(0.57 0.26 267);
91
+ /* #5C5CFF */
92
+ --primitive-blue-400: oklch(0.51 0.285 267);
93
+ /* #3939FF */
94
+ --primitive-blue-500: oklch(0.476 0.297 267.4);
95
+ /* #2323FF — brand blue */
96
+ --primitive-blue-600: oklch(0.40 0.27 265);
97
+ /* #0B0BD2 */
98
+ --primitive-blue-700: oklch(0.31 0.21 264);
99
+ /* #0000A5 */
100
+ --primitive-blue-800: oklch(0.23 0.16 264);
101
+ /* #000078 */
102
+ --primitive-blue-900: oklch(0.15 0.10 264);
103
+ /* #00004C */
104
+ --primitive-blue-1000: oklch(0.07 0.05 264);
105
+ /* #00001F */
106
+
107
+ /* ── Monochrome scale ── */
108
+ --primitive-mono-50: oklch(1 0 0);
109
+ /* #FFFFFF */
110
+ --primitive-mono-100: oklch(0.95 0 0);
111
+ /* #EEEEEE */
112
+ --primitive-mono-200: oklch(0.90 0 0);
113
+ /* #EEEEEE */
114
+ --primitive-mono-300: oklch(0.84 0 0);
115
+ /* #CCCCCC */
116
+ --primitive-mono-400: oklch(0.79 0 0);
117
+ /* #BBBBBB */
118
+ --primitive-mono-500: oklch(0.74 0 0);
119
+ /* #AAAAAA */
120
+ --primitive-mono-600: oklch(0.63 0 0);
121
+ /* #888888 */
122
+ --primitive-mono-700: oklch(0.51 0 0);
123
+ /* #666666 */
124
+ --primitive-mono-800: oklch(0.39 0 0);
125
+ /* #444444 */
126
+ --primitive-mono-900: oklch(0.25 0 0);
127
+ /* #222222 */
128
+ --primitive-mono-1000: oklch(0 0 0);
129
+ /* #000000 */
130
+
131
+ /* ── Green ── */
132
+ --primitive-green-400: oklch(0.492 0.162 144);
133
+ /* #008832 */
134
+
135
+ /* ── Sky ── */
136
+ --primitive-sky-600: #3DAAFF;
137
+ /* #3DAAFF */
138
+
139
+ /* ── Red ── */
140
+ --primitive-red-600: #F92E26;
141
+ /* #F92E26 */
142
+ --primitive-red-500: oklch(0.653 0.234 18.5);
143
+ /* #FF3355 */
144
+
145
+ /* ── Orange ── */
146
+ --primitive-orange-600: oklch(0.52 0.168 38);
147
+ /* #D45200 */
148
+ --primitive-orange-500: oklch(0.62 0.185 38);
149
+ /* #FF6600 */
150
+ --primitive-orange-400: oklch(0.751 0.179 58.3);
151
+ /* #FF8C00 */
152
+
153
+ /* ── Violet ── */
154
+ --primitive-violet-500: oklch(0.601 0.263 301.6);
155
+ /* #A040FF */
156
+
157
+ /* ── Overlay ── */
158
+ --primitive-black-50: oklch(0 0 0 / 50%);
159
+
160
+ /* ── Layout — Standard responsive grid (gutter / margin) ── */
161
+ --primitive-layout-gutter-none: 0px;
162
+ --primitive-layout-gutter-sm: 16px;
163
+ --primitive-layout-gutter-md: 36px;
164
+ --primitive-layout-margin-sm: 16px;
165
+ --primitive-layout-margin-md: 36px;
166
+ --primitive-layout-margin-lg: 64px;
167
+ --primitive-layout-diagram-max-default: 319px;
168
+ --primitive-layout-diagram-max-small: 599px;
169
+ --primitive-layout-diagram-max-medium: 1135px;
170
+ }
171
+
172
+ /* ══════════════════════════════════════════════════════════════
173
+ LAYER 2 — SEMANTICS
174
+ UI role and meaning. References primitives only.
175
+ ══════════════════════════════════════════════════════════════ */
176
+ :root {
177
+ --background: var(--primitive-mono-50);
178
+ --on-prominent: var(--primitive-mono-1000);
179
+ --on-prominent-static-inverse: var(--primitive-mono-50);
180
+ /* #FFFFFF — always white, never changes between themes */
181
+ --primary: var(--primitive-blue-500);
182
+ --primary-hover: oklch(0.403 0.251 267.5);
183
+ --subtle: oklch(0.96 0 0);
184
+ --on-subtle: oklch(0.52 0 0);
185
+ --on-muted: oklch(0.38 0 0);
186
+ --border-subtle: oklch(0.92 0 0);
187
+ --border: var(--border-subtle);
188
+ /* @deprecated alias — use --border-subtle or --border-prominent */
189
+ --border-prominent: var(--primitive-mono-1000);
190
+ /* #000000 */
191
+ --secondary-hover: var(--primitive-mono-100);
192
+ /* #EEEEEE */
193
+ --ring: var(--primitive-blue-500);
194
+ --overlay: var(--primitive-black-50);
195
+ --semantic-win: var(--primitive-green-400);
196
+ --semantic-loss: var(--primitive-red-500);
197
+ --semantic-info: var(--primitive-sky-600);
198
+ --semantic-error: var(--primitive-red-600);
199
+ --semantic-warning: var(--primitive-orange-500);
200
+ --semantic-layout-diagram-max-default: var(--primitive-layout-diagram-max-default);
201
+ --semantic-layout-diagram-max-small: var(--primitive-layout-diagram-max-small);
202
+ --semantic-layout-diagram-max-medium: var(--primitive-layout-diagram-max-medium);
203
+ }
204
+
205
+ /* ══════════════════════════════════════════════════════════════
206
+ RESPONSIVE LAYOUT — Standard grid (columns / gutter / margin)
207
+ ══════════════════════════════════════════════════════════════ */
208
+ :root {
209
+ --semantic-layout-grid-columns: 1;
210
+ --semantic-layout-gutter: var(--primitive-layout-gutter-none);
211
+ --semantic-layout-margin-inline: var(--primitive-layout-margin-sm);
212
+ }
213
+
214
+ @media (min-width: 320px) {
215
+ :root {
216
+ --semantic-layout-grid-columns: 4;
217
+ --semantic-layout-gutter: var(--primitive-layout-gutter-sm);
218
+ --semantic-layout-margin-inline: var(--primitive-layout-margin-sm);
219
+ }
220
+ }
221
+
222
+ @media (min-width: 600px) {
223
+ :root {
224
+ --semantic-layout-grid-columns: 8;
225
+ --semantic-layout-gutter: var(--primitive-layout-gutter-md);
226
+ --semantic-layout-margin-inline: var(--primitive-layout-margin-md);
227
+ }
228
+ }
229
+
230
+ @media (min-width: 1136px) {
231
+ :root {
232
+ --semantic-layout-grid-columns: 12;
233
+ --semantic-layout-gutter: var(--primitive-layout-gutter-md);
234
+ --semantic-layout-margin-inline: var(--primitive-layout-margin-lg);
235
+ }
236
+ }
237
+
238
+ /* ══════════════════════════════════════════════════════════════
239
+ LAYER 3 — COMPONENTS
240
+ Component-specific tokens. References semantics or primitives.
241
+ ══════════════════════════════════════════════════════════════ */
242
+ :root {
243
+ --card: var(--primitive-mono-50);
244
+ --card-foreground: oklch(0.07 0.012 165);
245
+ --popover: var(--primitive-mono-50);
246
+ --popover-foreground: oklch(0.07 0.012 165);
247
+ --input: var(--border-subtle);
248
+ --alert-info-text: var(--semantic-info);
249
+ --alert-info-border: var(--semantic-info);
250
+ --alert-error-text: var(--semantic-error);
251
+ --alert-error-border: var(--semantic-error);
252
+ --slider-range: oklch(0.476 0.297 267.4 / 40%);
253
+ --sidebar: var(--primitive-mono-50);
254
+ --sidebar-foreground: oklch(0.07 0.012 165);
255
+ --sidebar-primary: var(--primary);
256
+ --sidebar-primary-foreground: var(--primitive-mono-50);
257
+ --sidebar-accent: oklch(0.96 0 0);
258
+ --sidebar-accent-foreground: oklch(0.12 0.015 160);
259
+ --sidebar-border: oklch(0.92 0 0);
260
+ --sidebar-ring: var(--ring);
261
+ }
262
+
263
+ /* ══════════════════════════════════════════════════════════════
264
+ DARK THEME — mirrors light for now
265
+ TODO: replace with proper dark values when new branding is ready
266
+ ══════════════════════════════════════════════════════════════ */
267
+ .dark {
268
+ --background: var(--primitive-mono-50);
269
+ --on-prominent: var(--primitive-mono-1000);
270
+ --on-prominent-static-inverse: var(--primitive-mono-50);
271
+ --primary: var(--primitive-blue-500);
272
+ --primary-hover: oklch(0.403 0.251 267.5);
273
+ --subtle: oklch(0.96 0 0);
274
+ --on-subtle: oklch(0.52 0 0);
275
+ --on-muted: oklch(0.38 0 0);
276
+ --border-subtle: oklch(0.92 0 0);
277
+ --border: var(--border-subtle);
278
+ /* @deprecated alias — use --border-subtle or --border-prominent */
279
+ --border-prominent: var(--primitive-mono-1000);
280
+ /* #000000 */
281
+ --secondary-hover: var(--primitive-mono-100);
282
+ /* #EEEEEE */
283
+ --ring: var(--primitive-blue-500);
284
+ --overlay: var(--primitive-black-50);
285
+ --semantic-win: var(--primitive-green-400);
286
+ --semantic-loss: var(--primitive-red-500);
287
+ --semantic-warning: var(--primitive-orange-500);
288
+ --card: var(--primitive-mono-50);
289
+ --card-foreground: oklch(0.07 0.012 165);
290
+ --popover: var(--primitive-mono-50);
291
+ --popover-foreground: oklch(0.07 0.012 165);
292
+ --input: var(--border-subtle);
293
+ --sidebar: var(--primitive-mono-50);
294
+ --sidebar-foreground: oklch(0.07 0.012 165);
295
+ --sidebar-primary: var(--primary);
296
+ --sidebar-primary-foreground: var(--primitive-mono-50);
297
+ --sidebar-accent: oklch(0.96 0 0);
298
+ --sidebar-accent-foreground: oklch(0.12 0.015 160);
299
+ --sidebar-border: oklch(0.92 0 0);
300
+ --sidebar-ring: var(--ring);
301
+ }
302
+
303
+ @layer base {
304
+ * {
305
+ border-color: var(--color-border-subtle);
306
+ outline-color: color-mix(in oklch, var(--color-ring) 50%, transparent);
307
+ }
308
+
309
+ body {
310
+ @apply bg-background text-on-prominent font-sans antialiased;
311
+ }
312
+ }
313
+
314
+ /* Spinner — pill-style activity indicator */
315
+ @keyframes spinner-fade {
316
+ 0% {
317
+ opacity: 1;
318
+ }
319
+
320
+ 100% {
321
+ opacity: 0.2;
322
+ }
323
+ }
324
+
325
+ /* Typography — Heading scale (Plus Jakarta Sans · Semibold 600 · LS 1.5px) */
326
+ .heading-h1 {
327
+ font-family: var(--font-plus-jakarta-sans);
328
+ font-weight: 600;
329
+ font-size: 72px;
330
+ line-height: 72px;
331
+ letter-spacing: 1.5px;
332
+ text-transform: uppercase;
333
+ }
334
+
335
+ .heading-h2 {
336
+ font-family: var(--font-plus-jakarta-sans);
337
+ font-weight: 600;
338
+ font-size: 64px;
339
+ line-height: 64px;
340
+ letter-spacing: 1.5px;
341
+ text-transform: uppercase;
342
+ }
343
+
344
+ .heading-h3 {
345
+ font-family: var(--font-plus-jakarta-sans);
346
+ font-weight: 600;
347
+ font-size: 48px;
348
+ line-height: 48px;
349
+ letter-spacing: 1.5px;
350
+ text-transform: uppercase;
351
+ }
352
+
353
+ .heading-h4 {
354
+ font-family: var(--font-plus-jakarta-sans);
355
+ font-weight: 600;
356
+ font-size: 40px;
357
+ line-height: 40px;
358
+ letter-spacing: 1.5px;
359
+ text-transform: uppercase;
360
+ }
361
+
362
+ .heading-xs {
363
+ font-family: var(--font-plus-jakarta-sans);
364
+ font-weight: 600;
365
+ font-size: 24px;
366
+ line-height: 24px;
367
+ letter-spacing: 1.5px;
368
+ text-transform: uppercase;
369
+ }
370
+
371
+ /* Typography — Body scale (Plus Jakarta Sans · Semibold 600) */
372
+ .body-lg {
373
+ font-family: var(--font-plus-jakarta-sans);
374
+ font-weight: 600;
375
+ font-size: 18px;
376
+ line-height: 28px;
377
+ }
378
+
379
+ .body-md {
380
+ font-family: var(--font-plus-jakarta-sans);
381
+ font-weight: 600;
382
+ font-size: 16px;
383
+ line-height: 24px;
384
+ }
385
+
386
+ .body-sm {
387
+ font-family: var(--font-plus-jakarta-sans);
388
+ font-weight: 600;
389
+ font-size: 12px;
390
+ line-height: 16px;
391
+ }
392
+
393
+ .body-xs {
394
+ font-family: var(--font-plus-jakarta-sans);
395
+ font-weight: 600;
396
+ font-size: 8px;
397
+ line-height: 12px;
398
+ }