@dataengineeringformachinelearning/viking-ui 4.1.1 → 4.1.3

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.
@@ -0,0 +1,903 @@
1
+ @charset "UTF-8";
2
+ /*! DEML Design Tokens — compiled from Viking-UI canonical tokens.
3
+ * Static CSS: npm run build:viking-ui:package */
4
+ /*! DEML Design Tokens — canonical source: packages/viking-ui/src/styles/_variables.scss
5
+ * Static CSS: npm run build:viking-ui:package (or python scripts/sync_design_system.py) */
6
+ :root {
7
+ color-scheme: dark light;
8
+ /* ── Deep navy surfaces (precision-engineered industrial luxury) ──── */
9
+ --viking-navy-1000: #01030a;
10
+ --viking-navy-950: #030818;
11
+ --viking-navy-900: #0a1024;
12
+ --viking-navy-800: #101b33;
13
+ --viking-navy-700: #162544;
14
+ --viking-navy-600: #1e3054;
15
+ --viking-navy-500: #284068;
16
+ --viking-navy-400: #39547f;
17
+ --viking-navy-300: #58719e;
18
+ --viking-navy-200: #8fa2c2;
19
+ --viking-navy-100: #d7e0ef;
20
+ /* ── Electric blue accents (primary CTA, focus, links) ───────────────── */
21
+ --viking-electric-900: #04225f;
22
+ --viking-electric-800: #073a99;
23
+ --viking-electric-700: #0a4fd4;
24
+ --viking-electric-600: #1565f0;
25
+ --viking-electric-500: #2176ff;
26
+ --viking-electric-400: #4d94ff;
27
+ --viking-electric-300: #7ab0ff;
28
+ --viking-electric-200: #b6d3ff;
29
+ --viking-electric-100: #e7f1ff;
30
+ /* ── Charcoal surfaces (legacy alias — maps to navy in semantic tokens) ─ */
31
+ --viking-charcoal-950: var(--viking-navy-950);
32
+ --viking-charcoal-900: var(--viking-navy-900);
33
+ --viking-charcoal-800: var(--viking-navy-800);
34
+ --viking-charcoal-700: var(--viking-navy-700);
35
+ --viking-charcoal-600: var(--viking-navy-600);
36
+ --viking-charcoal-500: var(--viking-navy-500);
37
+ --viking-charcoal-400: var(--viking-navy-400);
38
+ --viking-charcoal-300: var(--viking-navy-300);
39
+ --viking-charcoal-200: var(--viking-navy-200);
40
+ --viking-charcoal-100: var(--viking-navy-100);
41
+ /* ── Metallic accents (borders, dividers, subtle depth) ────────────────── */
42
+ --viking-metallic-600: #555555;
43
+ --viking-metallic-500: #666666;
44
+ --viking-metallic-400: #777777;
45
+ --viking-metallic-300: #999999;
46
+ --viking-metallic-200: #aaaaaa;
47
+ --viking-metallic-100: #bbbbbb;
48
+ --viking-metallic-050: #e6e8ec;
49
+ /* ── Primary accent — electric blue (CTAs, focus, links) ───────────────── */
50
+ --viking-teal-700: var(--viking-electric-700);
51
+ --viking-teal-600: var(--viking-electric-600);
52
+ --viking-teal-500: var(--viking-electric-500);
53
+ --viking-teal-400: var(--viking-electric-400);
54
+ --viking-teal-300: var(--viking-electric-300);
55
+ /* ── Secondary accent — rich crimson (emphasis, destructive) ───────────── */
56
+ --viking-crimson-700: #7a2231;
57
+ --viking-crimson-600: #922b3e;
58
+ --viking-crimson-500: #a83344;
59
+ --viking-crimson-400: #c44355;
60
+ --viking-crimson-300: #dc6b78;
61
+ --viking-crimson-100: #fde8ec;
62
+ /* ── Refined accents — data, info, and product moments ────────────────── */
63
+ --viking-cyan-600: #168aad;
64
+ --viking-cyan-500: #1fa2c9;
65
+ --viking-cyan-400: #47bee0;
66
+ --viking-violet-600: #6f5bd7;
67
+ --viking-violet-500: #8674f0;
68
+ --viking-amber-600: #a77912;
69
+ --viking-amber-500: #d69e2e;
70
+ /* ── Status (refined for premium palette) ──────────────────────────────── */
71
+ --viking-green-500: #2a9d8f;
72
+ --viking-gold-500: #c4a035;
73
+ /* Info / chart series 6 — electric blue family */
74
+ --viking-blue-500: var(--viking-electric-400);
75
+ --viking-red-500: var(--viking-crimson-500);
76
+ /* ── Neutrals ──────────────────────────────────────────────────────────── */
77
+ --viking-ink-1000: #000000;
78
+ --viking-ink-950: #050609;
79
+ --viking-ink-900: #0c0f14;
80
+ --viking-ink-800: #151a22;
81
+ --viking-ink-700: #202735;
82
+ --viking-slate-100: #f4f7fb;
83
+ --viking-slate-050: #fbfcfe;
84
+ --viking-white: #f5f5f5;
85
+ --viking-white-pure: #ffffff;
86
+ --viking-black: #000000;
87
+ /* ── Spacing — 8px scale with 4px micro-grid aliases preserved ─────────── */
88
+ --viking-grid-unit: 4px;
89
+ --viking-space-unit: 8px;
90
+ --viking-space-0: 0;
91
+ --viking-space-px: 1px;
92
+ --viking-space-half: 4px;
93
+ --viking-space-0-5: 4px;
94
+ --viking-space-1: 8px;
95
+ --viking-space-1-5: 12px;
96
+ --viking-space-2: 16px;
97
+ --viking-space-2-5: 20px;
98
+ --viking-space-3: 24px;
99
+ --viking-space-4: 32px;
100
+ --viking-space-5: 40px;
101
+ --viking-space-6: 48px;
102
+ --viking-space-7: 56px;
103
+ --viking-space-8: 64px;
104
+ --viking-space-8-5: 72px;
105
+ --viking-space-9: 80px;
106
+ --viking-space-10: 96px;
107
+ --viking-space-11: 112px;
108
+ --viking-space-12: 128px;
109
+ --viking-space-14: 160px;
110
+ --viking-space-16: 192px;
111
+ --viking-space-20: 256px;
112
+ --viking-space-24: 320px;
113
+ /* ── Typography (Inter self-hosted — see _fonts.scss) ───────────────────── */
114
+ --viking-font-family:
115
+ "Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto,
116
+ "Helvetica Neue", Arial, sans-serif;
117
+ --viking-font-family-mono:
118
+ ui-monospace, "JetBrains Mono", "SF Mono", "Cascadia Code", Consolas,
119
+ monospace;
120
+ --viking-font-size-2xs: 11px;
121
+ --viking-font-size-xs: 12px;
122
+ --viking-font-size-sm: 14px;
123
+ --viking-font-size-base: 16px;
124
+ --viking-font-size-md: 18px;
125
+ --viking-font-size-lg: 20px;
126
+ --viking-font-size-xl: 24px;
127
+ --viking-font-size-2xl: 30px;
128
+ --viking-font-size-3xl: 36px;
129
+ --viking-font-size-4xl: 48px;
130
+ --viking-font-size-5xl: 60px;
131
+ --viking-font-size-6xl: 72px;
132
+ --viking-font-weight-regular: 400;
133
+ --viking-font-weight-medium: 500;
134
+ --viking-font-weight-semibold: 600;
135
+ --viking-font-weight-bold: 700;
136
+ --viking-font-weight-extrabold: 800;
137
+ --viking-line-height-none: 1;
138
+ --viking-line-height-tight: 1.25;
139
+ --viking-line-height-snug: 1.375;
140
+ --viking-line-height-normal: 1.5;
141
+ --viking-line-height-relaxed: 1.625;
142
+ --viking-line-height-loose: 1.75;
143
+ --viking-letter-spacing-tighter: -0.03em;
144
+ --viking-letter-spacing-tight: -0.02em;
145
+ --viking-letter-spacing-normal: 0;
146
+ --viking-letter-spacing-wide: 0.025em;
147
+ --viking-letter-spacing-wider: 0.05em;
148
+ --viking-letter-spacing-caps: 0.08em;
149
+ --viking-type-caption: var(--viking-font-weight-medium)
150
+ var(--viking-font-size-xs) / var(--viking-line-height-normal)
151
+ var(--viking-font-family);
152
+ --viking-type-body-sm: var(--viking-font-weight-regular)
153
+ var(--viking-font-size-sm) / var(--viking-line-height-normal)
154
+ var(--viking-font-family);
155
+ --viking-type-body: var(--viking-font-weight-regular)
156
+ var(--viking-font-size-base) / var(--viking-line-height-normal)
157
+ var(--viking-font-family);
158
+ --viking-type-body-lg: var(--viking-font-weight-regular)
159
+ var(--viking-font-size-md) / var(--viking-line-height-relaxed)
160
+ var(--viking-font-family);
161
+ --viking-type-heading-sm: var(--viking-font-weight-semibold)
162
+ var(--viking-font-size-lg) / var(--viking-line-height-tight)
163
+ var(--viking-font-family);
164
+ --viking-type-heading: var(--viking-font-weight-bold)
165
+ var(--viking-font-size-2xl) / var(--viking-line-height-tight)
166
+ var(--viking-font-family);
167
+ --viking-type-display: var(--viking-font-weight-extrabold)
168
+ var(--viking-font-size-4xl) / var(--viking-line-height-none)
169
+ var(--viking-font-family);
170
+ /* ── Border radius — 6–12px premium feel ─────────────────────────────────── */
171
+ --viking-radius-xs: 4px;
172
+ --viking-radius-sm: 6px;
173
+ --viking-radius: 8px;
174
+ --viking-radius-md: 10px;
175
+ --viking-radius-lg: 12px;
176
+ --viking-radius-xl: 16px;
177
+ --viking-radius-2xl: 24px;
178
+ --viking-radius-pill: 999px;
179
+ --viking-radius-full: var(--viking-radius-pill);
180
+ /* ── Elevation — tactile shadows with subtle metallic top-edge ───────────── */
181
+ --viking-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.2);
182
+ --viking-shadow-sm:
183
+ 0 1px 2px rgba(0, 0, 0, 0.18), 0 1px 3px rgba(0, 0, 0, 0.12),
184
+ inset 0 1px 0 rgba(255, 255, 255, 0.04);
185
+ --viking-shadow-md:
186
+ 0 2px 4px rgba(0, 0, 0, 0.16), 0 4px 8px rgba(0, 0, 0, 0.12),
187
+ inset 0 1px 0 rgba(255, 255, 255, 0.05);
188
+ --viking-shadow-lg:
189
+ 0 4px 8px rgba(0, 0, 0, 0.14), 0 12px 24px rgba(0, 0, 0, 0.18),
190
+ inset 0 1px 0 rgba(255, 255, 255, 0.06);
191
+ --viking-shadow-inner: inset 0 1px 2px rgba(0, 0, 0, 0.14);
192
+ --viking-shadow-hover:
193
+ 0 8px 16px rgba(0, 0, 0, 0.14), 0 4px 8px rgba(0, 0, 0, 0.1),
194
+ inset 0 1px 0 rgba(255, 255, 255, 0.06);
195
+ --viking-shadow-focus:
196
+ 0 0 0 var(--viking-ring-offset) var(--viking-bg),
197
+ 0 0 0 calc(var(--viking-ring-offset) + var(--viking-ring-width))
198
+ var(--viking-ring);
199
+ --viking-surface-highlight: inset 0 1px 0 rgba(255, 255, 255, 0.06);
200
+ /* ── Chart scale — unified responsive min/max (matches 720×240 SVG viewBox) ─ */
201
+ --viking-chart-ratio: 3 / 1;
202
+ --viking-chart-min-height: clamp(9.5rem, 22vw, 12rem);
203
+ --viking-chart-max-height: clamp(13rem, 36vw, 17.5rem);
204
+ --viking-chart-fill-min-height: clamp(18rem, 36vw, 20rem);
205
+ --viking-chart-fill-max-height: none;
206
+ --viking-chart-fill-min-height-lg: clamp(20rem, 40vw, 22rem);
207
+ --viking-chart-fill-max-height-lg: none;
208
+ --viking-chart-empty-min-height: var(--viking-chart-fill-min-height);
209
+ --viking-chart-empty-min-height-lg: var(--viking-chart-fill-min-height-lg);
210
+ --viking-chart-panel-min-height-md: 26rem;
211
+ --viking-chart-panel-min-height-lg: 30rem;
212
+ --viking-chart-panel-body-min-height-md: 22rem;
213
+ --viking-chart-panel-body-min-height-lg: 25rem;
214
+ --viking-chart-sparkline-height: 2.5rem;
215
+ --viking-chart-map-min-height: 22.5rem;
216
+ /* ── Breakpoints (mobile-first) ─────────────────────────────────────────── */
217
+ --viking-bp-sm: 600px;
218
+ --viking-bp-md: 768px;
219
+ --viking-bp-sidebar: 901px;
220
+ --viking-bp-lg: 1024px;
221
+ --viking-bp-xl: 1440px;
222
+ --viking-bp-2xl: 1920px;
223
+ /* ── Motion ──────────────────────────────────────────────────────────────── */
224
+ --viking-ease-default: cubic-bezier(0.4, 0, 0.2, 1);
225
+ --viking-ease-in: cubic-bezier(0.4, 0, 1, 1);
226
+ --viking-ease-out: cubic-bezier(0, 0, 0.2, 1);
227
+ --viking-ease-emphasized: cubic-bezier(0.2, 0, 0, 1);
228
+ --viking-duration-instant: 75ms;
229
+ --viking-duration-fast: 150ms;
230
+ --viking-duration: 250ms;
231
+ --viking-duration-slow: 350ms;
232
+ --viking-duration-slower: 500ms;
233
+ --viking-transition-colors:
234
+ color var(--viking-duration) var(--viking-ease-default),
235
+ background-color var(--viking-duration) var(--viking-ease-default),
236
+ border-color var(--viking-duration) var(--viking-ease-default),
237
+ box-shadow var(--viking-duration) var(--viking-ease-default),
238
+ fill var(--viking-duration) var(--viking-ease-default),
239
+ stroke var(--viking-duration) var(--viking-ease-default);
240
+ --viking-transition-interactive:
241
+ color var(--viking-duration) var(--viking-ease-default),
242
+ background-color var(--viking-duration) var(--viking-ease-default),
243
+ border-color var(--viking-duration) var(--viking-ease-default),
244
+ box-shadow var(--viking-duration) var(--viking-ease-default),
245
+ fill var(--viking-duration) var(--viking-ease-default),
246
+ stroke var(--viking-duration) var(--viking-ease-default),
247
+ transform var(--viking-duration) var(--viking-ease-default),
248
+ opacity var(--viking-duration) var(--viking-ease-default);
249
+ --viking-transition: all var(--viking-duration) var(--viking-ease-default);
250
+ --viking-transition-fast: all var(--viking-duration-fast)
251
+ var(--viking-ease-default);
252
+ --viking-transition-transform: transform var(--viking-duration)
253
+ var(--viking-ease-emphasized);
254
+ /* ── Interactive state ───────────────────────────────────────────────────── */
255
+ --viking-state-hover-lift: -1px;
256
+ --viking-state-active-scale: 0.985;
257
+ --viking-state-disabled-opacity: 0.48;
258
+ /* ── Controls ──────────────────────────────────────────────────────────── */
259
+ --viking-control-height: 44px;
260
+ --viking-control-height-sm: 32px;
261
+ --viking-control-height-xs: 24px;
262
+ --viking-touch-target-min: 44px;
263
+ --viking-control-padding-x: var(--viking-space-2);
264
+ --viking-btn-min-width: 120px;
265
+ --viking-select-panel-bg: var(--viking-surface-raised);
266
+ --viking-select-half-max-width: min(100%, 24rem);
267
+ /* ── Layout ────────────────────────────────────────────────────────────── */
268
+ --viking-container-max-width: 1260px;
269
+ --viking-navbar-height: 64px;
270
+ --viking-sidebar-width: 256px;
271
+ /* ── Layout rhythm — premium spacing enforcement (THEME.md §3) ─────────── */
272
+ --viking-page-gutter: var(--viking-space-3);
273
+ --viking-page-gutter-lg: var(--viking-space-4);
274
+ --viking-page-gutter-xl: var(--viking-space-6);
275
+ --viking-page-stack-gap: var(--viking-space-4);
276
+ --viking-page-section-gap: var(--viking-space-6);
277
+ --viking-section-padding-y: var(--viking-space-8);
278
+ --viking-section-padding-y-compact: var(--viking-space-5);
279
+ --viking-card-padding: var(--viking-space-4);
280
+ --viking-card-padding-compact: var(--viking-space-3);
281
+ --viking-card-content-gap: var(--viking-space-3);
282
+ --viking-card-content-gap-compact: var(--viking-space-2);
283
+ --viking-panel-padding: var(--viking-space-4);
284
+ --viking-panel-header-padding: var(--viking-space-3) var(--viking-space-4);
285
+ --viking-form-max-width: 42rem;
286
+ --viking-form-narrow-max-width: 28rem;
287
+ --viking-content-readable-max-width: 48rem;
288
+ --viking-card-min-width: 0;
289
+ --viking-card-max-width: none;
290
+ --viking-metric-card-min-height: 6.5rem;
291
+ --viking-metric-card-tall-min-height: 8.25rem;
292
+ --viking-metric-card-min-width: 10rem;
293
+ --viking-surface-hairline-strength: 28%;
294
+ /* ── Layering ────────────────────────────────────────────────────────────── */
295
+ --viking-z-overlay: 1000;
296
+ --viking-z-toast: 1100;
297
+ --viking-z-tooltip: 1200;
298
+ /* ── Chart ───────────────────────────────────────────────────────────────── */
299
+ --viking-chart-axis-size: 12px;
300
+ /* ── Icons ─────────────────────────────────────────────────────────────────── */
301
+ --viking-icon-size-sm: 16px;
302
+ --viking-icon-size-md: 20px;
303
+ --viking-icon-size-lg: 24px;
304
+ --viking-icon-stroke-width: 1.75;
305
+ --viking-icon-stroke-width-sm: 1.5;
306
+ }
307
+
308
+ /* ── Dark mode (default) ─────────────────────────────────────────────────── */
309
+ :root,
310
+ html[data-theme=dark] {
311
+ color-scheme: dark;
312
+ --viking-bg: var(--viking-charcoal-900);
313
+ --viking-bg-subtle: var(--viking-ink-950);
314
+ --viking-bg-inverted: var(--viking-white-pure);
315
+ --viking-surface: var(--viking-charcoal-800);
316
+ --viking-surface-alt: var(--viking-charcoal-700);
317
+ --viking-surface-inset: var(--viking-charcoal-950);
318
+ --viking-surface-raised: var(--viking-charcoal-600);
319
+ --viking-surface-overlay: var(--viking-ink-800);
320
+ --viking-text: var(--viking-white);
321
+ --viking-text-muted: var(--viking-metallic-200);
322
+ --viking-text-subtle: var(--viking-metallic-300);
323
+ --viking-text-disabled: var(--viking-metallic-400);
324
+ --viking-text-link: var(--viking-electric-300);
325
+ --viking-text-link-hover: var(--viking-electric-200);
326
+ --viking-text-inverted: var(--viking-charcoal-900);
327
+ --viking-border: color-mix(
328
+ in srgb,
329
+ var(--viking-metallic-600) 48%,
330
+ transparent
331
+ );
332
+ --viking-border-strong: color-mix(
333
+ in srgb,
334
+ var(--viking-metallic-400) 68%,
335
+ transparent
336
+ );
337
+ --viking-border-subtle: color-mix(
338
+ in srgb,
339
+ var(--viking-metallic-600) 28%,
340
+ transparent
341
+ );
342
+ --viking-border-accent: color-mix(
343
+ in srgb,
344
+ var(--viking-electric-500) 72%,
345
+ transparent
346
+ );
347
+ --viking-accent: var(--viking-electric-500);
348
+ --viking-accent-hover: var(--viking-electric-400);
349
+ --viking-accent-active: var(--viking-electric-700);
350
+ --viking-accent-content: var(--viking-white-pure);
351
+ --viking-accent-soft: color-mix(
352
+ in srgb,
353
+ var(--viking-electric-500) 18%,
354
+ transparent
355
+ );
356
+ --viking-accent-muted: color-mix(
357
+ in srgb,
358
+ var(--viking-electric-500) 10%,
359
+ transparent
360
+ );
361
+ --viking-accent-strong: var(--viking-electric-300);
362
+ --viking-accent-secondary: var(--viking-crimson-600);
363
+ --viking-accent-secondary-hover: var(--viking-crimson-500);
364
+ --viking-accent-secondary-active: var(--viking-crimson-700);
365
+ --viking-accent-secondary-content: var(--viking-white-pure);
366
+ --viking-accent-secondary-soft: color-mix(
367
+ in srgb,
368
+ var(--viking-crimson-600) 16%,
369
+ transparent
370
+ );
371
+ --viking-success: var(--viking-green-500);
372
+ --viking-success-soft: color-mix(
373
+ in srgb,
374
+ var(--viking-green-500) 14%,
375
+ transparent
376
+ );
377
+ --viking-warning: var(--viking-gold-500);
378
+ --viking-warning-soft: color-mix(
379
+ in srgb,
380
+ var(--viking-gold-500) 16%,
381
+ transparent
382
+ );
383
+ --viking-danger: var(--viking-crimson-500);
384
+ --viking-danger-soft: color-mix(
385
+ in srgb,
386
+ var(--viking-crimson-500) 16%,
387
+ transparent
388
+ );
389
+ --viking-info: var(--viking-blue-500);
390
+ --viking-info-soft: color-mix(
391
+ in srgb,
392
+ var(--viking-blue-500) 14%,
393
+ transparent
394
+ );
395
+ --viking-danger-text: var(--viking-crimson-400);
396
+ --viking-on-danger: var(--viking-white-pure);
397
+ --viking-ring: var(--viking-electric-400);
398
+ --viking-ring-width: 2px;
399
+ --viking-ring-offset: 2px;
400
+ --viking-overlay-backdrop: color-mix(
401
+ in srgb,
402
+ var(--viking-charcoal-950) 72%,
403
+ transparent
404
+ );
405
+ --viking-surface-glass: color-mix(
406
+ in srgb,
407
+ var(--viking-charcoal-800) 82%,
408
+ transparent
409
+ );
410
+ --viking-surface-glass-blur: 12px;
411
+ --viking-state-hover-bg: color-mix(
412
+ in srgb,
413
+ var(--viking-electric-500) 10%,
414
+ transparent
415
+ );
416
+ --viking-state-active-bg: color-mix(
417
+ in srgb,
418
+ var(--viking-electric-700) 14%,
419
+ transparent
420
+ );
421
+ --viking-state-selected-bg: color-mix(
422
+ in srgb,
423
+ var(--viking-electric-500) 18%,
424
+ transparent
425
+ );
426
+ --viking-state-disabled-bg: color-mix(
427
+ in srgb,
428
+ var(--viking-metallic-600) 20%,
429
+ transparent
430
+ );
431
+ --viking-shadow-sm:
432
+ 0 1px 2px rgba(0, 0, 0, 0.28), 0 1px 3px rgba(0, 0, 0, 0.18),
433
+ inset 0 1px 0 rgba(255, 255, 255, 0.04);
434
+ --viking-shadow-md:
435
+ 0 2px 4px rgba(0, 0, 0, 0.24), 0 4px 8px rgba(0, 0, 0, 0.16),
436
+ inset 0 1px 0 rgba(255, 255, 255, 0.05);
437
+ --viking-shadow-lg:
438
+ 0 4px 8px rgba(0, 0, 0, 0.2), 0 12px 24px rgba(0, 0, 0, 0.24),
439
+ inset 0 1px 0 rgba(255, 255, 255, 0.06);
440
+ }
441
+
442
+ /* ── Light mode ──────────────────────────────────────────────────────────── */
443
+ html[data-theme=light] {
444
+ color-scheme: light;
445
+ --viking-bg: var(--viking-slate-050);
446
+ --viking-bg-subtle: var(--viking-slate-100);
447
+ --viking-bg-inverted: var(--viking-charcoal-900);
448
+ --viking-surface: var(--viking-white-pure);
449
+ --viking-surface-alt: var(--viking-slate-100);
450
+ --viking-surface-inset: var(--viking-metallic-050);
451
+ --viking-surface-raised: var(--viking-white-pure);
452
+ --viking-surface-overlay: var(--viking-white-pure);
453
+ --viking-text: var(--viking-charcoal-900);
454
+ --viking-text-muted: var(--viking-metallic-500);
455
+ --viking-text-subtle: var(--viking-metallic-400);
456
+ --viking-text-disabled: var(--viking-metallic-300);
457
+ --viking-text-link: var(--viking-electric-700);
458
+ --viking-text-link-hover: var(--viking-electric-600);
459
+ --viking-text-inverted: var(--viking-white-pure);
460
+ --viking-border: color-mix(
461
+ in srgb,
462
+ var(--viking-metallic-600) 32%,
463
+ transparent
464
+ );
465
+ --viking-border-strong: color-mix(
466
+ in srgb,
467
+ var(--viking-metallic-600) 48%,
468
+ transparent
469
+ );
470
+ --viking-border-subtle: color-mix(
471
+ in srgb,
472
+ var(--viking-metallic-600) 22%,
473
+ transparent
474
+ );
475
+ --viking-border-accent: color-mix(
476
+ in srgb,
477
+ var(--viking-electric-600) 58%,
478
+ transparent
479
+ );
480
+ --viking-accent: var(--viking-electric-600);
481
+ --viking-accent-hover: var(--viking-electric-500);
482
+ --viking-accent-active: var(--viking-electric-700);
483
+ --viking-accent-content: var(--viking-white-pure);
484
+ --viking-accent-soft: color-mix(
485
+ in srgb,
486
+ var(--viking-electric-600) 14%,
487
+ transparent
488
+ );
489
+ --viking-accent-muted: color-mix(
490
+ in srgb,
491
+ var(--viking-electric-600) 8%,
492
+ transparent
493
+ );
494
+ --viking-accent-strong: var(--viking-electric-400);
495
+ --viking-accent-secondary: var(--viking-crimson-700);
496
+ --viking-accent-secondary-hover: var(--viking-crimson-600);
497
+ --viking-accent-secondary-active: var(--viking-crimson-700);
498
+ --viking-accent-secondary-content: var(--viking-white-pure);
499
+ --viking-accent-secondary-soft: color-mix(
500
+ in srgb,
501
+ var(--viking-crimson-700) 12%,
502
+ transparent
503
+ );
504
+ --viking-success-soft: color-mix(
505
+ in srgb,
506
+ var(--viking-green-500) 12%,
507
+ transparent
508
+ );
509
+ --viking-warning-soft: color-mix(
510
+ in srgb,
511
+ var(--viking-gold-500) 14%,
512
+ transparent
513
+ );
514
+ --viking-danger-soft: color-mix(
515
+ in srgb,
516
+ var(--viking-crimson-500) 12%,
517
+ transparent
518
+ );
519
+ --viking-info-soft: color-mix(
520
+ in srgb,
521
+ var(--viking-blue-500) 12%,
522
+ transparent
523
+ );
524
+ --viking-danger-text: var(--viking-crimson-700);
525
+ --viking-on-danger: var(--viking-white-pure);
526
+ --viking-ring: var(--viking-electric-500);
527
+ --viking-overlay-backdrop: color-mix(
528
+ in srgb,
529
+ var(--viking-charcoal-900) 45%,
530
+ transparent
531
+ );
532
+ --viking-surface-glass: color-mix(
533
+ in srgb,
534
+ var(--viking-white-pure) 88%,
535
+ transparent
536
+ );
537
+ --viking-surface-glass-blur: 10px;
538
+ --viking-state-hover-bg: color-mix(
539
+ in srgb,
540
+ var(--viking-electric-600) 8%,
541
+ transparent
542
+ );
543
+ --viking-state-active-bg: color-mix(
544
+ in srgb,
545
+ var(--viking-electric-700) 12%,
546
+ transparent
547
+ );
548
+ --viking-state-selected-bg: color-mix(
549
+ in srgb,
550
+ var(--viking-electric-600) 14%,
551
+ transparent
552
+ );
553
+ --viking-state-disabled-bg: color-mix(
554
+ in srgb,
555
+ var(--viking-metallic-600) 12%,
556
+ transparent
557
+ );
558
+ --viking-shadow-sm:
559
+ 0 1px 2px rgba(17, 17, 17, 0.06), 0 1px 3px rgba(17, 17, 17, 0.08);
560
+ --viking-shadow-md:
561
+ 0 2px 4px rgba(17, 17, 17, 0.06), 0 4px 8px rgba(17, 17, 17, 0.08);
562
+ --viking-shadow-lg:
563
+ 0 4px 8px rgba(17, 17, 17, 0.06), 0 12px 24px rgba(17, 17, 17, 0.1);
564
+ }
565
+
566
+ /* Respect system preference when no explicit theme is set */
567
+ @media (prefers-color-scheme: light) {
568
+ html:not([data-theme=dark]) {
569
+ color-scheme: light;
570
+ --viking-bg: var(--viking-slate-050);
571
+ --viking-bg-subtle: var(--viking-slate-100);
572
+ --viking-bg-inverted: var(--viking-charcoal-900);
573
+ --viking-surface: var(--viking-white-pure);
574
+ --viking-surface-alt: var(--viking-slate-100);
575
+ --viking-surface-inset: var(--viking-metallic-050);
576
+ --viking-surface-raised: var(--viking-white-pure);
577
+ --viking-surface-overlay: var(--viking-white-pure);
578
+ --viking-text: var(--viking-charcoal-900);
579
+ --viking-text-muted: var(--viking-metallic-500);
580
+ --viking-text-subtle: var(--viking-metallic-400);
581
+ --viking-text-disabled: var(--viking-metallic-300);
582
+ --viking-text-link: var(--viking-electric-700);
583
+ --viking-text-link-hover: var(--viking-electric-600);
584
+ --viking-text-inverted: var(--viking-white-pure);
585
+ --viking-border: color-mix(
586
+ in srgb,
587
+ var(--viking-metallic-600) 22%,
588
+ transparent
589
+ );
590
+ --viking-border-strong: color-mix(
591
+ in srgb,
592
+ var(--viking-metallic-600) 38%,
593
+ transparent
594
+ );
595
+ --viking-border-subtle: color-mix(
596
+ in srgb,
597
+ var(--viking-metallic-600) 12%,
598
+ transparent
599
+ );
600
+ --viking-border-accent: color-mix(
601
+ in srgb,
602
+ var(--viking-electric-600) 58%,
603
+ transparent
604
+ );
605
+ --viking-accent: var(--viking-electric-600);
606
+ --viking-accent-hover: var(--viking-electric-500);
607
+ --viking-accent-active: var(--viking-electric-700);
608
+ --viking-accent-content: var(--viking-white-pure);
609
+ --viking-accent-soft: color-mix(
610
+ in srgb,
611
+ var(--viking-electric-600) 10%,
612
+ transparent
613
+ );
614
+ --viking-accent-muted: color-mix(
615
+ in srgb,
616
+ var(--viking-electric-600) 8%,
617
+ transparent
618
+ );
619
+ --viking-accent-strong: var(--viking-electric-400);
620
+ --viking-accent-secondary: var(--viking-crimson-700);
621
+ --viking-accent-secondary-hover: var(--viking-crimson-600);
622
+ --viking-accent-secondary-active: var(--viking-crimson-700);
623
+ --viking-accent-secondary-content: var(--viking-white-pure);
624
+ --viking-accent-secondary-soft: color-mix(
625
+ in srgb,
626
+ var(--viking-crimson-700) 8%,
627
+ transparent
628
+ );
629
+ --viking-success-soft: color-mix(
630
+ in srgb,
631
+ var(--viking-green-500) 12%,
632
+ transparent
633
+ );
634
+ --viking-warning-soft: color-mix(
635
+ in srgb,
636
+ var(--viking-gold-500) 14%,
637
+ transparent
638
+ );
639
+ --viking-danger-soft: color-mix(
640
+ in srgb,
641
+ var(--viking-crimson-500) 12%,
642
+ transparent
643
+ );
644
+ --viking-info-soft: color-mix(
645
+ in srgb,
646
+ var(--viking-blue-500) 12%,
647
+ transparent
648
+ );
649
+ --viking-danger-text: var(--viking-crimson-700);
650
+ --viking-on-danger: var(--viking-white-pure);
651
+ --viking-ring: var(--viking-electric-500);
652
+ --viking-overlay-backdrop: color-mix(
653
+ in srgb,
654
+ var(--viking-charcoal-900) 45%,
655
+ transparent
656
+ );
657
+ --viking-surface-glass: color-mix(
658
+ in srgb,
659
+ var(--viking-white-pure) 88%,
660
+ transparent
661
+ );
662
+ --viking-surface-glass-blur: 10px;
663
+ --viking-state-hover-bg: color-mix(
664
+ in srgb,
665
+ var(--viking-electric-600) 8%,
666
+ transparent
667
+ );
668
+ --viking-state-active-bg: color-mix(
669
+ in srgb,
670
+ var(--viking-electric-700) 12%,
671
+ transparent
672
+ );
673
+ --viking-state-selected-bg: color-mix(
674
+ in srgb,
675
+ var(--viking-electric-600) 14%,
676
+ transparent
677
+ );
678
+ --viking-state-disabled-bg: color-mix(
679
+ in srgb,
680
+ var(--viking-metallic-600) 12%,
681
+ transparent
682
+ );
683
+ --viking-shadow-sm:
684
+ 0 1px 2px rgba(17, 17, 17, 0.06), 0 1px 3px rgba(17, 17, 17, 0.08);
685
+ --viking-shadow-md:
686
+ 0 2px 4px rgba(17, 17, 17, 0.06), 0 4px 8px rgba(17, 17, 17, 0.08);
687
+ --viking-shadow-lg:
688
+ 0 4px 8px rgba(17, 17, 17, 0.06), 0 12px 24px rgba(17, 17, 17, 0.1);
689
+ }
690
+ }
691
+ :root {
692
+ --viking-series-1: var(--viking-electric-500);
693
+ --viking-series-2: var(--viking-crimson-600);
694
+ --viking-series-3: var(--viking-green-500);
695
+ --viking-series-4: var(--viking-gold-500);
696
+ --viking-series-5: var(--viking-crimson-500);
697
+ --viking-series-6: var(--viking-blue-500);
698
+ --viking-series-7: var(--viking-charcoal-700);
699
+ --viking-series-8: var(--viking-metallic-500);
700
+ --viking-series-default: var(--viking-series-1);
701
+ /* Premium palette v3 — electric primary, crimson secondary, semantic + muted slots */
702
+ --viking-series-palette: var(--viking-series-1), var(--viking-series-2),
703
+ var(--viking-series-3), var(--viking-series-4), var(--viking-series-5),
704
+ var(--viking-series-6), var(--viking-series-7), var(--viking-series-8);
705
+ }
706
+
707
+ :root {
708
+ /* Primitive aliases (short names used in older SCSS) */
709
+ --charcoal-950: var(--viking-charcoal-950);
710
+ --charcoal-900: var(--viking-charcoal-900);
711
+ --charcoal-800: var(--viking-charcoal-800);
712
+ --charcoal-700: var(--viking-charcoal-700);
713
+ --charcoal-600: var(--viking-charcoal-600);
714
+ --charcoal-500: var(--viking-charcoal-500);
715
+ --metallic-600: var(--viking-metallic-600);
716
+ --metallic-500: var(--viking-metallic-500);
717
+ --metallic-400: var(--viking-metallic-400);
718
+ --metallic-300: var(--viking-metallic-300);
719
+ --metallic-200: var(--viking-metallic-200);
720
+ --metallic-100: var(--viking-metallic-100);
721
+ --white: var(--viking-white-pure);
722
+ --black: var(--viking-black);
723
+ /* Typography floors */
724
+ --base-font-size: var(--viking-font-size-base);
725
+ --ui-font-size: var(--viking-font-size-sm);
726
+ --header-letter-spacing: var(--viking-letter-spacing-tight);
727
+ /* Spacing — legacy --space-N (4px grid) */
728
+ --grid-unit: var(--viking-grid-unit);
729
+ --space-0: var(--viking-space-0);
730
+ --space-half: var(--viking-space-half);
731
+ --space-0-5: var(--viking-space-0-5);
732
+ --space-1: var(--viking-space-1);
733
+ --space-1-5: var(--viking-space-1-5);
734
+ --space-2: var(--viking-space-2);
735
+ --space-2-5: var(--viking-space-2-5);
736
+ --space-3: var(--viking-space-3);
737
+ --space-4: var(--viking-space-4);
738
+ --space-5: var(--viking-space-5);
739
+ --space-6: var(--viking-space-6);
740
+ --space-7: var(--viking-space-7);
741
+ --space-8: var(--viking-space-8);
742
+ --space-8-5: var(--viking-space-8-5);
743
+ --space-9: var(--viking-space-9);
744
+ --space-10: var(--viking-space-10);
745
+ --space-11: var(--viking-space-11);
746
+ --space-12: var(--viking-space-12);
747
+ --space-14: var(--viking-space-14);
748
+ --space-16: var(--viking-space-16);
749
+ --space-20: var(--viking-space-20);
750
+ --space-24: var(--viking-space-24);
751
+ --grid-gap: var(--viking-space-3);
752
+ --card-padding: var(--viking-card-padding);
753
+ /* Layout rhythm aliases */
754
+ --page-gutter: var(--viking-page-gutter);
755
+ --page-gutter-lg: var(--viking-page-gutter-lg);
756
+ --page-stack-gap: var(--viking-page-stack-gap);
757
+ --page-section-gap: var(--viking-page-section-gap);
758
+ --form-max-width: var(--viking-form-max-width);
759
+ --form-narrow-max-width: var(--viking-form-narrow-max-width);
760
+ --content-readable-max-width: var(--viking-content-readable-max-width);
761
+ /* Layout */
762
+ --container-max-width: var(--viking-container-max-width);
763
+ --navbar-height: var(--viking-navbar-height);
764
+ --btn-min-width: var(--viking-btn-min-width);
765
+ /* Radii */
766
+ --border-radius-xs: var(--viking-radius-xs);
767
+ --border-radius-sm: var(--viking-radius-sm);
768
+ --border-radius-md: var(--viking-radius);
769
+ --border-radius-lg: var(--viking-radius-lg);
770
+ --border-radius-xl: var(--viking-radius-xl);
771
+ --border-radius-pill: var(--viking-radius-pill);
772
+ /* Motion & elevation */
773
+ --transition-smooth: var(--viking-transition);
774
+ --shadow-sm: var(--viking-shadow-sm);
775
+ --shadow-md: var(--viking-shadow-md);
776
+ --shadow-lg: var(--viking-shadow-lg);
777
+ --shadow-hover: var(--viking-shadow-hover);
778
+ /* Semantic short names */
779
+ --primary-color: var(--viking-electric-500);
780
+ --accent-color: var(--viking-crimson-600);
781
+ /* Focus */
782
+ --focus-ring-width: var(--viking-ring-width);
783
+ --focus-ring-offset: var(--viking-ring-offset);
784
+ }
785
+
786
+ :root,
787
+ html[data-theme=dark] {
788
+ --color-primary: var(--viking-electric-500);
789
+ --color-on-primary: var(--viking-white-pure);
790
+ --color-primary-container: var(--viking-electric-400);
791
+ --color-on-primary-container: var(--viking-charcoal-900);
792
+ --color-surface: var(--viking-charcoal-800);
793
+ --color-on-surface: var(--viking-white);
794
+ --color-background: var(--viking-charcoal-900);
795
+ --color-on-background: var(--viking-white);
796
+ --color-surface-variant: var(--viking-charcoal-700);
797
+ --color-success: var(--viking-green-500);
798
+ --color-warning: var(--viking-gold-500);
799
+ --color-error: var(--viking-crimson-500);
800
+ --color-info: var(--viking-blue-500);
801
+ --color-gauge-red: var(--color-error);
802
+ --border: var(--viking-border);
803
+ --border-layout: var(--viking-border-strong);
804
+ --hover-color: var(--viking-electric-400);
805
+ --bg-color: var(--viking-bg);
806
+ --text-color: var(--viking-text);
807
+ --text-muted: var(--viking-text-muted);
808
+ --card-bg: var(--viking-surface);
809
+ --navbar-bg: color-mix(in srgb, var(--viking-bg) 96%, transparent);
810
+ --link-color: var(--viking-electric-300);
811
+ --link-hover-color: var(--viking-electric-400);
812
+ --hero-title-color: var(--viking-white);
813
+ --primary-text-color: var(--viking-electric-300);
814
+ --button-primary: var(--color-primary);
815
+ --button-primary-text: var(--viking-white-pure);
816
+ --color-dark-grey-btn-bg: var(--viking-charcoal-700);
817
+ --color-dark-grey-btn-text: var(--viking-white);
818
+ --focus-ring-color: var(--viking-electric-400);
819
+ }
820
+
821
+ html[data-theme=light] {
822
+ --color-primary: var(--viking-electric-600);
823
+ --color-on-primary: var(--viking-white-pure);
824
+ --color-primary-container: var(--viking-teal-500);
825
+ --color-on-primary-container: var(--viking-white-pure);
826
+ --color-surface: var(--viking-white-pure);
827
+ --color-on-surface: var(--viking-charcoal-900);
828
+ --color-background: var(--viking-white-pure);
829
+ --color-on-background: var(--viking-charcoal-900);
830
+ --color-surface-variant: var(--viking-surface-alt);
831
+ --color-success: var(--viking-green-500);
832
+ --color-warning: var(--viking-gold-500);
833
+ --color-error: var(--viking-crimson-700);
834
+ --color-info: var(--viking-blue-500);
835
+ --color-gauge-red: var(--color-error);
836
+ --border: var(--viking-border);
837
+ --border-layout: var(--viking-border-strong);
838
+ --hover-color: var(--viking-electric-500);
839
+ --bg-color: var(--viking-bg);
840
+ --text-color: var(--viking-text);
841
+ --text-muted: var(--viking-text-muted);
842
+ --card-bg: var(--viking-surface);
843
+ --navbar-bg: color-mix(in srgb, var(--viking-white-pure) 96%, transparent);
844
+ --link-color: var(--viking-electric-700);
845
+ --link-hover-color: var(--viking-electric-600);
846
+ --hero-title-color: var(--viking-charcoal-900);
847
+ --primary-text-color: var(--viking-electric-700);
848
+ --button-primary: var(--color-primary);
849
+ --button-primary-text: var(--color-on-primary);
850
+ --color-dark-grey-btn-bg: var(--viking-charcoal-800);
851
+ --color-dark-grey-btn-text: var(--viking-white);
852
+ --focus-ring-color: var(--viking-electric-500);
853
+ }
854
+
855
+ @media (prefers-color-scheme: light) {
856
+ html:not([data-theme=dark]) {
857
+ --color-primary: var(--viking-electric-600);
858
+ --color-on-primary: var(--viking-white-pure);
859
+ --color-primary-container: var(--viking-teal-500);
860
+ --color-on-primary-container: var(--viking-white-pure);
861
+ --color-surface: var(--viking-white-pure);
862
+ --color-on-surface: var(--viking-charcoal-900);
863
+ --color-background: var(--viking-white-pure);
864
+ --color-on-background: var(--viking-charcoal-900);
865
+ --color-surface-variant: var(--viking-surface-alt);
866
+ --color-success: var(--viking-green-500);
867
+ --color-warning: var(--viking-gold-500);
868
+ --color-error: var(--viking-crimson-700);
869
+ --color-info: var(--viking-blue-500);
870
+ --color-gauge-red: var(--color-error);
871
+ --border: var(--viking-border);
872
+ --border-layout: var(--viking-border-strong);
873
+ --hover-color: var(--viking-electric-500);
874
+ --bg-color: var(--viking-bg);
875
+ --text-color: var(--viking-text);
876
+ --text-muted: var(--viking-text-muted);
877
+ --card-bg: var(--viking-surface);
878
+ --navbar-bg: color-mix(in srgb, var(--viking-white-pure) 96%, transparent);
879
+ --link-color: var(--viking-electric-700);
880
+ --link-hover-color: var(--viking-electric-600);
881
+ --hero-title-color: var(--viking-charcoal-900);
882
+ --primary-text-color: var(--viking-electric-700);
883
+ --button-primary: var(--color-primary);
884
+ --button-primary-text: var(--color-on-primary);
885
+ --color-dark-grey-btn-bg: var(--viking-charcoal-800);
886
+ --color-dark-grey-btn-text: var(--viking-white);
887
+ --focus-ring-color: var(--viking-electric-500);
888
+ }
889
+ }
890
+ body {
891
+ font-size: var(--base-font-size);
892
+ color: var(--text-color);
893
+ background-color: var(--bg-color);
894
+ }
895
+
896
+ h1,
897
+ h2,
898
+ h3,
899
+ h4,
900
+ h5,
901
+ h6 {
902
+ letter-spacing: var(--header-letter-spacing);
903
+ }