@dataengineeringformachinelearning/viking-ui 1.0.2 → 3.0.0-alpha.2

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.
Files changed (129) hide show
  1. package/README.md +180 -41
  2. package/dist/deml-components.css +1122 -0
  3. package/dist/design-tokens.css +688 -0
  4. package/dist/elements/button/viking-button.d.ts +14 -0
  5. package/dist/elements/card/viking-card.d.ts +8 -0
  6. package/dist/elements/core/dom.d.ts +4 -0
  7. package/dist/elements/core/styles.d.ts +2 -0
  8. package/dist/elements/modal/viking-modal.d.ts +15 -0
  9. package/dist/fonts/inter/InterVariable-Italic.woff2 +0 -0
  10. package/dist/fonts/inter/InterVariable.woff2 +0 -0
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.js +4051 -0
  13. package/dist/lib/core/brand-icons.d.ts +29 -0
  14. package/dist/lib/core/icons.d.ts +132 -0
  15. package/dist/lib/core/integration-brand-icons.d.ts +18 -0
  16. package/dist/lib/core/lucide-paths.generated.d.ts +90 -0
  17. package/dist/lib/site-drakkar/site-drakkar.config.d.ts +50 -0
  18. package/dist/lib/site-drakkar/suite-search-items.d.ts +17 -0
  19. package/dist/viking-components.css +1837 -0
  20. package/dist/viking-tokens.json +318 -0
  21. package/dist/viking-ui-elements.js +1750 -0
  22. package/dist/viking-ui.css +1 -0
  23. package/dist/web/badge/viking-badge-wc.d.ts +28 -0
  24. package/dist/web/button/viking-button-wc.d.ts +28 -0
  25. package/dist/web/callout/viking-callout-wc.d.ts +27 -0
  26. package/dist/web/card/viking-card-wc.d.ts +29 -0
  27. package/dist/web/core/base.d.ts +12 -0
  28. package/dist/web/core/dom.d.ts +11 -0
  29. package/dist/web/core/icons-inline.d.ts +7 -0
  30. package/dist/web/core/styles.d.ts +12 -0
  31. package/dist/web/core/types.d.ts +10 -0
  32. package/dist/web/field/viking-field-wc.d.ts +32 -0
  33. package/dist/web/index.d.ts +15 -0
  34. package/dist/web/input/viking-input-wc.d.ts +32 -0
  35. package/dist/web/modal/viking-modal-wc.d.ts +50 -0
  36. package/dist/web/search-palette/viking-search-palette-wc.d.ts +64 -0
  37. package/dist/web/select/viking-select-wc.d.ts +48 -0
  38. package/dist/web/suite-header/viking-suite-header-wc.d.ts +36 -0
  39. package/dist/web/suite-search-palette/viking-suite-search-palette-wc.d.ts +39 -0
  40. package/dist/web/theme-toggle/viking-theme-toggle-wc.d.ts +19 -0
  41. package/dist/web/types.d.ts +40 -0
  42. package/dist/web-components/index.d.ts +1 -0
  43. package/dist/web-components.js +1750 -0
  44. package/dist/widget.js +1182 -0
  45. package/package.json +89 -30
  46. package/src/assets/fonts/inter/InterVariable-Italic.woff2 +0 -0
  47. package/src/assets/fonts/inter/InterVariable.woff2 +0 -0
  48. package/src/elements/button/viking-button.ts +201 -0
  49. package/src/elements/card/viking-card.ts +60 -0
  50. package/src/elements/core/dom.ts +33 -0
  51. package/src/elements/core/styles.ts +28 -0
  52. package/src/elements/modal/viking-modal.ts +154 -0
  53. package/src/index.ts +1 -0
  54. package/src/lib/core/brand-icons.ts +62 -0
  55. package/src/lib/core/icons.ts +206 -0
  56. package/src/lib/core/integration-brand-icons.ts +77 -0
  57. package/src/lib/core/lucide-paths.generated.ts +130 -0
  58. package/src/lib/site-drakkar/site-drakkar.config.ts +295 -0
  59. package/src/lib/site-drakkar/suite-search-items.ts +246 -0
  60. package/src/styles/_buttons.scss +301 -0
  61. package/src/styles/_component-primitives.scss +183 -0
  62. package/src/styles/_drakkar-buttons.scss +85 -0
  63. package/src/styles/_fonts.scss +22 -0
  64. package/src/styles/_forms.scss +66 -0
  65. package/src/styles/_input.scss +106 -0
  66. package/src/styles/_layout-enforcement.scss +166 -0
  67. package/src/styles/_layout-rhythm.scss +158 -0
  68. package/src/styles/_legacy-aliases.scss +212 -0
  69. package/src/styles/_series-colors.scss +24 -0
  70. package/src/styles/_static-primitives.scss +857 -0
  71. package/src/styles/_typography.scss +87 -0
  72. package/src/styles/_variables.scss +527 -0
  73. package/src/styles/components/a11y.scss +90 -0
  74. package/src/styles/components/badges.scss +102 -0
  75. package/src/styles/components/extracted-utilities.scss +459 -0
  76. package/src/styles/components/footer.scss +155 -0
  77. package/src/styles/components/icon-heading.scss +47 -0
  78. package/src/styles/components/icon-inline.scss +78 -0
  79. package/src/styles/components/layout.scss +59 -0
  80. package/src/styles/components/utilities.scss +131 -0
  81. package/src/styles/components/viking-inspired.scss +204 -0
  82. package/src/styles/components/whitepaper-cta.scss +130 -0
  83. package/src/styles/components-bundle.scss +9 -0
  84. package/src/styles/components.scss +175 -0
  85. package/src/styles/deml-components.scss +10 -0
  86. package/src/styles/index.scss +8 -0
  87. package/src/styles/layout-shell.scss +39 -11
  88. package/src/styles/page-shell.scss +663 -33
  89. package/src/styles/static-navbar.scss +862 -146
  90. package/src/styles/surfaces/backend.scss +142 -0
  91. package/src/styles/surfaces/docs-global.scss +73 -0
  92. package/src/styles/surfaces/docs-shell.scss +412 -0
  93. package/src/styles/surfaces/docs-showcase.scss +1051 -0
  94. package/src/styles/surfaces/marketing-cta.scss +62 -0
  95. package/src/styles/surfaces/marketing-docs-bento.scss +67 -0
  96. package/src/styles/surfaces/marketing-global.scss +748 -0
  97. package/src/styles/surfaces/marketing-landing.scss +1260 -0
  98. package/src/styles/surfaces/marketing-publication.scss +535 -0
  99. package/src/styles/surfaces/marketing-theme.scss +14 -0
  100. package/src/styles/surfaces/swagger-ui.scss +921 -0
  101. package/src/styles/tokens-export.scss +18 -0
  102. package/src/styles/tokens.scss +5 -0
  103. package/src/styles/viking-ui-bundle.scss +20 -2
  104. package/src/styles/viking-ui.scss +213 -51
  105. package/src/tokens/viking-tokens.json +318 -0
  106. package/src/web/badge/viking-badge-wc.ts +116 -0
  107. package/src/web/button/viking-button-wc.ts +165 -0
  108. package/src/web/callout/viking-callout-wc.ts +105 -0
  109. package/src/web/card/viking-card-wc.ts +66 -0
  110. package/src/web/core/base.ts +56 -0
  111. package/src/web/core/dom.ts +53 -0
  112. package/src/web/core/icons-inline.ts +44 -0
  113. package/src/web/core/styles.ts +1138 -0
  114. package/src/web/core/types.ts +19 -0
  115. package/src/web/field/viking-field-wc.ts +154 -0
  116. package/src/web/index.ts +73 -0
  117. package/src/web/input/viking-input-wc.ts +211 -0
  118. package/src/web/modal/viking-modal-wc.ts +187 -0
  119. package/src/web/search-palette/viking-search-palette-wc.ts +494 -0
  120. package/src/web/select/viking-select-wc.ts +218 -0
  121. package/src/web/suite-header/viking-suite-header-wc.ts +714 -0
  122. package/src/web/suite-search-palette/viking-suite-search-palette-wc.ts +234 -0
  123. package/src/web/theme-toggle/viking-theme-toggle-wc.ts +139 -0
  124. package/src/web/types.ts +37 -0
  125. package/src/web-components/index.ts +1 -0
  126. package/fesm2022/dataengineeringformachinelearning-viking-ui.mjs +0 -6114
  127. package/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +0 -1
  128. package/types/dataengineeringformachinelearning-viking-ui.d.ts +0 -1397
  129. package/viking.manifest.json +0 -238
@@ -0,0 +1,87 @@
1
+ // Global typography — Inter via self-hosted variable font (_fonts.scss).
2
+
3
+ html {
4
+ font-family: var(--viking-font-family);
5
+ font-size: var(--viking-font-size, 16px);
6
+ line-height: var(--viking-line-height-relaxed, 1.625);
7
+ font-optical-sizing: auto;
8
+ -webkit-font-smoothing: antialiased;
9
+ -moz-osx-font-smoothing: grayscale;
10
+ text-rendering: optimizeLegibility;
11
+ }
12
+
13
+ body,
14
+ .viking-ui-body {
15
+ font-family: inherit;
16
+ font-size: inherit;
17
+ line-height: inherit;
18
+ font-weight: var(--viking-font-weight-regular, 400);
19
+ color: var(--viking-text);
20
+ background-color: var(--viking-bg);
21
+ }
22
+
23
+ h1,
24
+ h2,
25
+ h3,
26
+ h4,
27
+ h5,
28
+ h6 {
29
+ font-family: var(--viking-font-family);
30
+ font-weight: var(--viking-font-weight-semibold, 600);
31
+ line-height: var(--viking-line-height-tight, 1.25);
32
+ letter-spacing: var(--viking-letter-spacing-tight, -0.02em);
33
+ }
34
+
35
+ h1 {
36
+ font-size: var(--viking-font-size-2xl, 30px);
37
+ font-weight: var(--viking-font-weight-bold, 700);
38
+ letter-spacing: var(--viking-letter-spacing-tighter, -0.03em);
39
+ }
40
+
41
+ h2 {
42
+ font-size: var(--viking-font-size-xl, 24px);
43
+ }
44
+
45
+ h3 {
46
+ font-size: var(--viking-font-size-lg, 20px);
47
+ }
48
+
49
+ h4 {
50
+ font-size: var(--viking-font-size-md, 18px);
51
+ }
52
+
53
+ h5,
54
+ h6 {
55
+ font-size: var(--viking-font-size, 16px);
56
+ font-weight: var(--viking-font-weight-medium, 500);
57
+ }
58
+
59
+ p {
60
+ line-height: var(--viking-line-height-relaxed, 1.625);
61
+ }
62
+
63
+ code,
64
+ pre,
65
+ kbd,
66
+ samp,
67
+ .viking-font-mono {
68
+ font-family: var(--viking-font-family-mono);
69
+ }
70
+
71
+ button,
72
+ input,
73
+ select,
74
+ textarea {
75
+ font-family: inherit;
76
+ }
77
+
78
+ .viking-font-display {
79
+ font-family: var(--viking-font-family);
80
+ font-weight: var(--viking-font-weight-bold, 700);
81
+ letter-spacing: var(--viking-letter-spacing-caps, 0.08em);
82
+ text-transform: uppercase;
83
+ }
84
+
85
+ .viking-tabular-nums {
86
+ font-variant-numeric: tabular-nums lining-nums;
87
+ }
@@ -0,0 +1,527 @@
1
+ // ============================================================================
2
+ // Viking-UI Premium Foundation Tokens
3
+ // ----------------------------------------------------------------------------
4
+ // Dark-first precision aesthetic: deep navy/black surfaces, #2176ff primary,
5
+ // refined secondary accents. 8px spacing scale with 4px micro-grid aliases.
6
+ // All --viking-* semantic tokens in viking-ui.scss map from these values.
7
+ // ============================================================================
8
+
9
+ :root {
10
+ color-scheme: dark light;
11
+
12
+ /* ── Deep navy surfaces (Lockheed × SpaceX precision aesthetic) ──────── */
13
+ --viking-navy-1000: #01030a;
14
+ --viking-navy-950: #030818;
15
+ --viking-navy-900: #0a1024;
16
+ --viking-navy-800: #101b33;
17
+ --viking-navy-700: #162544;
18
+ --viking-navy-600: #1e3054;
19
+ --viking-navy-500: #284068;
20
+ --viking-navy-400: #39547f;
21
+ --viking-navy-300: #58719e;
22
+ --viking-navy-200: #8fa2c2;
23
+ --viking-navy-100: #d7e0ef;
24
+
25
+ /* ── Electric blue accents (primary CTA, focus, links) ───────────────── */
26
+ --viking-electric-900: #04225f;
27
+ --viking-electric-800: #073a99;
28
+ --viking-electric-700: #0a4fd4;
29
+ --viking-electric-600: #1565f0;
30
+ --viking-electric-500: #2176ff;
31
+ --viking-electric-400: #4d94ff;
32
+ --viking-electric-300: #7ab0ff;
33
+ --viking-electric-200: #b6d3ff;
34
+ --viking-electric-100: #e7f1ff;
35
+
36
+ /* ── Charcoal surfaces (legacy alias — maps to navy in semantic tokens) ─ */
37
+ --viking-charcoal-950: var(--viking-navy-950);
38
+ --viking-charcoal-900: var(--viking-navy-900);
39
+ --viking-charcoal-800: var(--viking-navy-800);
40
+ --viking-charcoal-700: var(--viking-navy-700);
41
+ --viking-charcoal-600: var(--viking-navy-600);
42
+ --viking-charcoal-500: var(--viking-navy-500);
43
+ --viking-charcoal-400: var(--viking-navy-400);
44
+ --viking-charcoal-300: var(--viking-navy-300);
45
+ --viking-charcoal-200: var(--viking-navy-200);
46
+ --viking-charcoal-100: var(--viking-navy-100);
47
+
48
+ /* ── Metallic accents (borders, dividers, subtle depth) ────────────────── */
49
+ --viking-metallic-600: #555555;
50
+ --viking-metallic-500: #666666;
51
+ --viking-metallic-400: #777777;
52
+ --viking-metallic-300: #999999;
53
+ --viking-metallic-200: #aaaaaa;
54
+ --viking-metallic-100: #bbbbbb;
55
+ --viking-metallic-050: #e6e8ec;
56
+
57
+ /* ── Primary accent — electric blue (CTAs, focus, links) ───────────────── */
58
+ --viking-teal-700: var(--viking-electric-700);
59
+ --viking-teal-600: var(--viking-electric-600);
60
+ --viking-teal-500: var(--viking-electric-500);
61
+ --viking-teal-400: var(--viking-electric-400);
62
+ --viking-teal-300: var(--viking-electric-300);
63
+
64
+ /* ── Secondary accent — rich crimson (emphasis, destructive) ───────────── */
65
+ --viking-crimson-700: #7a2231;
66
+ --viking-crimson-600: #922b3e;
67
+ --viking-crimson-500: #a83344;
68
+ --viking-crimson-400: #c44355;
69
+ --viking-crimson-300: #dc6b78;
70
+ --viking-crimson-100: #fde8ec;
71
+
72
+ /* ── Refined accents — data, info, and product moments ────────────────── */
73
+ --viking-cyan-600: #168aad;
74
+ --viking-cyan-500: #1fa2c9;
75
+ --viking-cyan-400: #47bee0;
76
+ --viking-violet-600: #6f5bd7;
77
+ --viking-violet-500: #8674f0;
78
+ --viking-amber-600: #a77912;
79
+ --viking-amber-500: #d69e2e;
80
+
81
+ /* ── Status (refined for premium palette) ──────────────────────────────── */
82
+ --viking-green-500: #2a9d8f;
83
+ --viking-gold-500: #c4a035;
84
+ /* Info / chart series 6 — electric blue family */
85
+ --viking-blue-500: var(--viking-electric-400);
86
+ --viking-red-500: var(--viking-crimson-500);
87
+
88
+ /* ── Neutrals ──────────────────────────────────────────────────────────── */
89
+ --viking-ink-1000: #000000;
90
+ --viking-ink-950: #050609;
91
+ --viking-ink-900: #0c0f14;
92
+ --viking-ink-800: #151a22;
93
+ --viking-ink-700: #202735;
94
+ --viking-slate-100: #f4f7fb;
95
+ --viking-slate-050: #fbfcfe;
96
+ --viking-white: #f5f5f5;
97
+ --viking-white-pure: #ffffff;
98
+ --viking-black: #000000;
99
+
100
+ /* ── Spacing — 8px scale with 4px micro-grid aliases preserved ─────────── */
101
+ --viking-grid-unit: 4px;
102
+ --viking-space-unit: 8px;
103
+ --viking-space-0: 0;
104
+ --viking-space-px: 1px;
105
+ --viking-space-half: 4px;
106
+ --viking-space-0-5: 4px;
107
+ --viking-space-1: 8px;
108
+ --viking-space-1-5: 12px;
109
+ --viking-space-2: 16px;
110
+ --viking-space-2-5: 20px;
111
+ --viking-space-3: 24px;
112
+ --viking-space-4: 32px;
113
+ --viking-space-5: 40px;
114
+ --viking-space-6: 48px;
115
+ --viking-space-7: 56px;
116
+ --viking-space-8: 64px;
117
+ --viking-space-8-5: 72px;
118
+ --viking-space-9: 80px;
119
+ --viking-space-10: 96px;
120
+ --viking-space-11: 112px;
121
+ --viking-space-12: 128px;
122
+ --viking-space-14: 160px;
123
+ --viking-space-16: 192px;
124
+ --viking-space-20: 256px;
125
+ --viking-space-24: 320px;
126
+
127
+ /* ── Typography (Inter self-hosted — see _fonts.scss) ───────────────────── */
128
+ --viking-font-family: 'Inter', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto,
129
+ 'Helvetica Neue', Arial, sans-serif;
130
+ --viking-font-family-mono: ui-monospace, 'JetBrains Mono', 'SF Mono', 'Cascadia Code', Consolas,
131
+ monospace;
132
+
133
+ --viking-font-size-2xs: 11px;
134
+ --viking-font-size-xs: 12px;
135
+ --viking-font-size-sm: 14px;
136
+ --viking-font-size-base: 16px;
137
+ --viking-font-size-md: 18px;
138
+ --viking-font-size-lg: 20px;
139
+ --viking-font-size-xl: 24px;
140
+ --viking-font-size-2xl: 30px;
141
+ --viking-font-size-3xl: 36px;
142
+ --viking-font-size-4xl: 48px;
143
+ --viking-font-size-5xl: 60px;
144
+ --viking-font-size-6xl: 72px;
145
+
146
+ --viking-font-weight-regular: 400;
147
+ --viking-font-weight-medium: 500;
148
+ --viking-font-weight-semibold: 600;
149
+ --viking-font-weight-bold: 700;
150
+ --viking-font-weight-extrabold: 800;
151
+
152
+ --viking-line-height-none: 1;
153
+ --viking-line-height-tight: 1.25;
154
+ --viking-line-height-snug: 1.375;
155
+ --viking-line-height-normal: 1.5;
156
+ --viking-line-height-relaxed: 1.625;
157
+ --viking-line-height-loose: 1.75;
158
+
159
+ --viking-letter-spacing-tighter: -0.03em;
160
+ --viking-letter-spacing-tight: -0.02em;
161
+ --viking-letter-spacing-normal: 0;
162
+ --viking-letter-spacing-wide: 0.025em;
163
+ --viking-letter-spacing-wider: 0.05em;
164
+ --viking-letter-spacing-caps: 0.08em;
165
+
166
+ --viking-type-caption:
167
+ var(--viking-font-weight-medium) var(--viking-font-size-xs) /
168
+ var(--viking-line-height-normal) var(--viking-font-family);
169
+ --viking-type-body-sm:
170
+ var(--viking-font-weight-regular) var(--viking-font-size-sm) /
171
+ var(--viking-line-height-normal) var(--viking-font-family);
172
+ --viking-type-body:
173
+ var(--viking-font-weight-regular) var(--viking-font-size-base) /
174
+ var(--viking-line-height-normal) var(--viking-font-family);
175
+ --viking-type-body-lg:
176
+ var(--viking-font-weight-regular) var(--viking-font-size-md) /
177
+ var(--viking-line-height-relaxed) var(--viking-font-family);
178
+ --viking-type-heading-sm:
179
+ var(--viking-font-weight-semibold) var(--viking-font-size-lg) /
180
+ var(--viking-line-height-tight) var(--viking-font-family);
181
+ --viking-type-heading:
182
+ var(--viking-font-weight-bold) var(--viking-font-size-2xl) /
183
+ var(--viking-line-height-tight) var(--viking-font-family);
184
+ --viking-type-display:
185
+ var(--viking-font-weight-extrabold) var(--viking-font-size-4xl) /
186
+ var(--viking-line-height-none) var(--viking-font-family);
187
+
188
+ /* ── Border radius — 6–12px premium feel ─────────────────────────────────── */
189
+ --viking-radius-xs: 4px;
190
+ --viking-radius-sm: 6px;
191
+ --viking-radius: 8px;
192
+ --viking-radius-md: 10px;
193
+ --viking-radius-lg: 12px;
194
+ --viking-radius-xl: 16px;
195
+ --viking-radius-2xl: 24px;
196
+ --viking-radius-pill: 999px;
197
+ --viking-radius-full: var(--viking-radius-pill);
198
+
199
+ /* ── Elevation — soft shadows with subtle metallic top-edge ──────────────── */
200
+ --viking-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.2);
201
+ --viking-shadow-sm:
202
+ 0 1px 2px rgba(0, 0, 0, 0.18), 0 1px 3px rgba(0, 0, 0, 0.12),
203
+ inset 0 1px 0 rgba(255, 255, 255, 0.04);
204
+ --viking-shadow-md:
205
+ 0 2px 4px rgba(0, 0, 0, 0.16), 0 4px 8px rgba(0, 0, 0, 0.12),
206
+ inset 0 1px 0 rgba(255, 255, 255, 0.05);
207
+ --viking-shadow-lg:
208
+ 0 4px 8px rgba(0, 0, 0, 0.14), 0 12px 24px rgba(0, 0, 0, 0.18),
209
+ inset 0 1px 0 rgba(255, 255, 255, 0.06);
210
+ --viking-shadow-inner: inset 0 1px 2px rgba(0, 0, 0, 0.14);
211
+ --viking-shadow-hover:
212
+ 0 8px 16px rgba(0, 0, 0, 0.14), 0 4px 8px rgba(0, 0, 0, 0.1),
213
+ inset 0 1px 0 rgba(255, 255, 255, 0.06);
214
+ --viking-shadow-focus: 0 0 0 var(--viking-ring-offset) var(--viking-bg),
215
+ 0 0 0 calc(var(--viking-ring-offset) + var(--viking-ring-width)) var(--viking-ring);
216
+ --viking-surface-highlight: inset 0 1px 0 rgba(255, 255, 255, 0.06);
217
+
218
+ /* ── Chart scale — unified responsive min/max (matches 720×240 SVG viewBox) ─ */
219
+ --viking-chart-ratio: 3 / 1;
220
+ --viking-chart-min-height: clamp(9.5rem, 22vw, 12rem);
221
+ --viking-chart-max-height: clamp(13rem, 36vw, 17.5rem);
222
+ --viking-chart-fill-min-height: clamp(18rem, 36vw, 20rem);
223
+ --viking-chart-fill-max-height: none;
224
+ --viking-chart-fill-min-height-lg: clamp(20rem, 40vw, 22rem);
225
+ --viking-chart-fill-max-height-lg: none;
226
+ --viking-chart-empty-min-height: var(--viking-chart-fill-min-height);
227
+ --viking-chart-empty-min-height-lg: var(--viking-chart-fill-min-height-lg);
228
+ --viking-chart-panel-min-height-md: 26rem;
229
+ --viking-chart-panel-min-height-lg: 30rem;
230
+ --viking-chart-panel-body-min-height-md: 22rem;
231
+ --viking-chart-panel-body-min-height-lg: 25rem;
232
+ --viking-chart-sparkline-height: 2.5rem;
233
+ --viking-chart-map-min-height: 22.5rem;
234
+
235
+ /* ── Breakpoints (mobile-first) ─────────────────────────────────────────── */
236
+ --viking-bp-sm: 600px;
237
+ --viking-bp-md: 768px;
238
+ --viking-bp-sidebar: 901px;
239
+ --viking-bp-lg: 1024px;
240
+ --viking-bp-xl: 1440px;
241
+ --viking-bp-2xl: 1920px;
242
+
243
+ /* ── Motion ──────────────────────────────────────────────────────────────── */
244
+ --viking-ease-default: cubic-bezier(0.4, 0, 0.2, 1);
245
+ --viking-ease-in: cubic-bezier(0.4, 0, 1, 1);
246
+ --viking-ease-out: cubic-bezier(0, 0, 0.2, 1);
247
+ --viking-ease-emphasized: cubic-bezier(0.2, 0, 0, 1);
248
+
249
+ --viking-duration-instant: 75ms;
250
+ --viking-duration-fast: 150ms;
251
+ --viking-duration: 250ms;
252
+ --viking-duration-slow: 350ms;
253
+ --viking-duration-slower: 500ms;
254
+
255
+ --viking-transition-colors:
256
+ color var(--viking-duration) var(--viking-ease-default),
257
+ background-color var(--viking-duration) var(--viking-ease-default),
258
+ border-color var(--viking-duration) var(--viking-ease-default),
259
+ box-shadow var(--viking-duration) var(--viking-ease-default),
260
+ fill var(--viking-duration) var(--viking-ease-default),
261
+ stroke var(--viking-duration) var(--viking-ease-default);
262
+ --viking-transition-interactive:
263
+ color var(--viking-duration) var(--viking-ease-default),
264
+ background-color var(--viking-duration) var(--viking-ease-default),
265
+ border-color var(--viking-duration) var(--viking-ease-default),
266
+ box-shadow var(--viking-duration) var(--viking-ease-default),
267
+ fill var(--viking-duration) var(--viking-ease-default),
268
+ stroke var(--viking-duration) var(--viking-ease-default),
269
+ transform var(--viking-duration) var(--viking-ease-default),
270
+ opacity var(--viking-duration) var(--viking-ease-default);
271
+ --viking-transition: all var(--viking-duration) var(--viking-ease-default);
272
+ --viking-transition-fast: all var(--viking-duration-fast) var(--viking-ease-default);
273
+ --viking-transition-transform: transform var(--viking-duration) var(--viking-ease-emphasized);
274
+
275
+ /* ── Interactive state ───────────────────────────────────────────────────── */
276
+ --viking-state-hover-lift: -1px;
277
+ --viking-state-active-scale: 0.985;
278
+ --viking-state-disabled-opacity: 0.48;
279
+
280
+ /* ── Controls ──────────────────────────────────────────────────────────── */
281
+ --viking-control-height: 44px;
282
+ --viking-control-height-sm: 32px;
283
+ --viking-control-height-xs: 24px;
284
+ --viking-touch-target-min: 44px;
285
+ --viking-control-padding-x: var(--viking-space-2);
286
+ --viking-btn-min-width: 120px;
287
+ --viking-select-panel-bg: var(--viking-surface-raised);
288
+ --viking-select-half-max-width: min(100%, 24rem);
289
+
290
+ /* ── Layout ────────────────────────────────────────────────────────────── */
291
+ --viking-container-max-width: 1260px;
292
+ --viking-navbar-height: 64px;
293
+ --viking-sidebar-width: 256px;
294
+
295
+ /* ── Layout rhythm — premium spacing enforcement (THEME.md §3) ─────────── */
296
+ --viking-page-gutter: var(--viking-space-3);
297
+ --viking-page-gutter-lg: var(--viking-space-4);
298
+ --viking-page-gutter-xl: var(--viking-space-6);
299
+ --viking-page-stack-gap: var(--viking-space-4);
300
+ --viking-page-section-gap: var(--viking-space-6);
301
+ --viking-section-padding-y: var(--viking-space-8);
302
+ --viking-section-padding-y-compact: var(--viking-space-5);
303
+ --viking-card-padding: var(--viking-space-4);
304
+ --viking-card-padding-compact: var(--viking-space-3);
305
+ --viking-panel-padding: var(--viking-space-4);
306
+ --viking-panel-header-padding: var(--viking-space-3) var(--viking-space-4);
307
+ --viking-form-max-width: 42rem;
308
+ --viking-form-narrow-max-width: 28rem;
309
+ --viking-content-readable-max-width: 48rem;
310
+ --viking-card-min-width: 0;
311
+ --viking-card-max-width: none;
312
+ --viking-metric-card-min-height: 6.5rem;
313
+ --viking-metric-card-tall-min-height: 8.25rem;
314
+ --viking-metric-card-min-width: 10rem;
315
+ --viking-surface-hairline-strength: 22%;
316
+
317
+ /* ── Layering ────────────────────────────────────────────────────────────── */
318
+ --viking-z-overlay: 1000;
319
+ --viking-z-toast: 1100;
320
+ --viking-z-tooltip: 1200;
321
+
322
+ /* ── Chart ───────────────────────────────────────────────────────────────── */
323
+ --viking-chart-axis-size: 12px;
324
+
325
+ /* ── Icons ─────────────────────────────────────────────────────────────────── */
326
+ --viking-icon-size-sm: 16px;
327
+ --viking-icon-size-md: 20px;
328
+ --viking-icon-size-lg: 24px;
329
+ --viking-icon-stroke-width: 1.75;
330
+ --viking-icon-stroke-width-sm: 1.5;
331
+ }
332
+
333
+ /* ── Dark mode (default) ─────────────────────────────────────────────────── */
334
+ :root,
335
+ html[data-theme='dark'] {
336
+ color-scheme: dark;
337
+
338
+ --viking-bg: var(--viking-charcoal-900);
339
+ --viking-bg-subtle: var(--viking-ink-950);
340
+ --viking-bg-inverted: var(--viking-white-pure);
341
+ --viking-surface: var(--viking-charcoal-800);
342
+ --viking-surface-alt: var(--viking-charcoal-700);
343
+ --viking-surface-inset: var(--viking-charcoal-950);
344
+ --viking-surface-raised: var(--viking-charcoal-600);
345
+ --viking-surface-overlay: var(--viking-ink-800);
346
+
347
+ --viking-text: var(--viking-white);
348
+ --viking-text-muted: var(--viking-metallic-200);
349
+ --viking-text-subtle: var(--viking-metallic-300);
350
+ --viking-text-disabled: var(--viking-metallic-400);
351
+ --viking-text-link: var(--viking-electric-300);
352
+ --viking-text-link-hover: var(--viking-electric-200);
353
+ --viking-text-inverted: var(--viking-charcoal-900);
354
+
355
+ --viking-border: color-mix(in srgb, var(--viking-metallic-600) 48%, transparent);
356
+ --viking-border-strong: color-mix(in srgb, var(--viking-metallic-400) 68%, transparent);
357
+ --viking-border-subtle: color-mix(in srgb, var(--viking-metallic-600) 28%, transparent);
358
+ --viking-border-accent: color-mix(in srgb, var(--viking-electric-500) 72%, transparent);
359
+
360
+ --viking-accent: var(--viking-electric-500);
361
+ --viking-accent-hover: var(--viking-electric-400);
362
+ --viking-accent-active: var(--viking-electric-700);
363
+ --viking-accent-content: var(--viking-white-pure);
364
+ --viking-accent-soft: color-mix(in srgb, var(--viking-electric-500) 18%, transparent);
365
+ --viking-accent-muted: color-mix(in srgb, var(--viking-electric-500) 10%, transparent);
366
+ --viking-accent-strong: var(--viking-electric-300);
367
+
368
+ --viking-accent-secondary: var(--viking-crimson-600);
369
+ --viking-accent-secondary-hover: var(--viking-crimson-500);
370
+ --viking-accent-secondary-active: var(--viking-crimson-700);
371
+ --viking-accent-secondary-content: var(--viking-white-pure);
372
+ --viking-accent-secondary-soft: color-mix(in srgb, var(--viking-crimson-600) 16%, transparent);
373
+
374
+ --viking-success: var(--viking-green-500);
375
+ --viking-success-soft: color-mix(in srgb, var(--viking-green-500) 14%, transparent);
376
+ --viking-warning: var(--viking-gold-500);
377
+ --viking-warning-soft: color-mix(in srgb, var(--viking-gold-500) 16%, transparent);
378
+ --viking-danger: var(--viking-crimson-500);
379
+ --viking-danger-soft: color-mix(in srgb, var(--viking-crimson-500) 16%, transparent);
380
+ --viking-info: var(--viking-blue-500);
381
+ --viking-info-soft: color-mix(in srgb, var(--viking-blue-500) 14%, transparent);
382
+ --viking-danger-text: var(--viking-crimson-400);
383
+ --viking-on-danger: var(--viking-white-pure);
384
+
385
+ --viking-ring: var(--viking-electric-400);
386
+ --viking-ring-width: 2px;
387
+ --viking-ring-offset: 2px;
388
+
389
+ --viking-overlay-backdrop: color-mix(in srgb, var(--viking-charcoal-950) 72%, transparent);
390
+ --viking-surface-glass: color-mix(in srgb, var(--viking-charcoal-800) 82%, transparent);
391
+ --viking-surface-glass-blur: 12px;
392
+ --viking-state-hover-bg: color-mix(in srgb, var(--viking-electric-500) 10%, transparent);
393
+ --viking-state-active-bg: color-mix(in srgb, var(--viking-electric-700) 14%, transparent);
394
+ --viking-state-selected-bg: color-mix(in srgb, var(--viking-electric-500) 18%, transparent);
395
+ --viking-state-disabled-bg: color-mix(in srgb, var(--viking-metallic-600) 20%, transparent);
396
+
397
+ --viking-shadow-sm:
398
+ 0 1px 2px rgba(0, 0, 0, 0.28), 0 1px 3px rgba(0, 0, 0, 0.18),
399
+ inset 0 1px 0 rgba(255, 255, 255, 0.04);
400
+ --viking-shadow-md:
401
+ 0 2px 4px rgba(0, 0, 0, 0.24), 0 4px 8px rgba(0, 0, 0, 0.16),
402
+ inset 0 1px 0 rgba(255, 255, 255, 0.05);
403
+ --viking-shadow-lg:
404
+ 0 4px 8px rgba(0, 0, 0, 0.2), 0 12px 24px rgba(0, 0, 0, 0.24),
405
+ inset 0 1px 0 rgba(255, 255, 255, 0.06);
406
+ }
407
+
408
+ /* ── Light mode ──────────────────────────────────────────────────────────── */
409
+ html[data-theme='light'] {
410
+ color-scheme: light;
411
+
412
+ --viking-bg: var(--viking-slate-050);
413
+ --viking-bg-subtle: var(--viking-slate-100);
414
+ --viking-bg-inverted: var(--viking-charcoal-900);
415
+ --viking-surface: var(--viking-white-pure);
416
+ --viking-surface-alt: var(--viking-slate-100);
417
+ --viking-surface-inset: var(--viking-metallic-050);
418
+ --viking-surface-raised: var(--viking-white-pure);
419
+ --viking-surface-overlay: var(--viking-white-pure);
420
+
421
+ --viking-text: var(--viking-charcoal-900);
422
+ --viking-text-muted: var(--viking-metallic-500);
423
+ --viking-text-subtle: var(--viking-metallic-400);
424
+ --viking-text-disabled: var(--viking-metallic-300);
425
+ --viking-text-link: var(--viking-electric-700);
426
+ --viking-text-link-hover: var(--viking-electric-600);
427
+ --viking-text-inverted: var(--viking-white-pure);
428
+
429
+ --viking-border: color-mix(in srgb, var(--viking-metallic-600) 32%, transparent);
430
+ --viking-border-strong: color-mix(in srgb, var(--viking-metallic-600) 48%, transparent);
431
+ --viking-border-subtle: color-mix(in srgb, var(--viking-metallic-600) 22%, transparent);
432
+ --viking-border-accent: color-mix(in srgb, var(--viking-electric-600) 58%, transparent);
433
+
434
+ --viking-accent: var(--viking-electric-600);
435
+ --viking-accent-hover: var(--viking-electric-500);
436
+ --viking-accent-active: var(--viking-electric-700);
437
+ --viking-accent-content: var(--viking-white-pure);
438
+ --viking-accent-soft: color-mix(in srgb, var(--viking-electric-600) 14%, transparent);
439
+ --viking-accent-muted: color-mix(in srgb, var(--viking-electric-600) 8%, transparent);
440
+ --viking-accent-strong: var(--viking-electric-400);
441
+
442
+ --viking-accent-secondary: var(--viking-crimson-700);
443
+ --viking-accent-secondary-hover: var(--viking-crimson-600);
444
+ --viking-accent-secondary-active: var(--viking-crimson-700);
445
+ --viking-accent-secondary-content: var(--viking-white-pure);
446
+ --viking-accent-secondary-soft: color-mix(in srgb, var(--viking-crimson-700) 12%, transparent);
447
+
448
+ --viking-success-soft: color-mix(in srgb, var(--viking-green-500) 12%, transparent);
449
+ --viking-warning-soft: color-mix(in srgb, var(--viking-gold-500) 14%, transparent);
450
+ --viking-danger-soft: color-mix(in srgb, var(--viking-crimson-500) 12%, transparent);
451
+ --viking-info-soft: color-mix(in srgb, var(--viking-blue-500) 12%, transparent);
452
+ --viking-danger-text: var(--viking-crimson-700);
453
+ --viking-on-danger: var(--viking-white-pure);
454
+
455
+ --viking-ring: var(--viking-electric-500);
456
+
457
+ --viking-overlay-backdrop: color-mix(in srgb, var(--viking-charcoal-900) 45%, transparent);
458
+ --viking-surface-glass: color-mix(in srgb, var(--viking-white-pure) 88%, transparent);
459
+ --viking-surface-glass-blur: 10px;
460
+ --viking-state-hover-bg: color-mix(in srgb, var(--viking-electric-600) 8%, transparent);
461
+ --viking-state-active-bg: color-mix(in srgb, var(--viking-electric-700) 12%, transparent);
462
+ --viking-state-selected-bg: color-mix(in srgb, var(--viking-electric-600) 14%, transparent);
463
+ --viking-state-disabled-bg: color-mix(in srgb, var(--viking-metallic-600) 12%, transparent);
464
+
465
+ --viking-shadow-sm:
466
+ 0 1px 2px rgba(17, 17, 17, 0.06), 0 1px 3px rgba(17, 17, 17, 0.08);
467
+ --viking-shadow-md:
468
+ 0 2px 4px rgba(17, 17, 17, 0.06), 0 4px 8px rgba(17, 17, 17, 0.08);
469
+ --viking-shadow-lg:
470
+ 0 4px 8px rgba(17, 17, 17, 0.06), 0 12px 24px rgba(17, 17, 17, 0.1);
471
+ }
472
+
473
+ /* Respect system preference when no explicit theme is set */
474
+ @media (prefers-color-scheme: light) {
475
+ html:not([data-theme='dark']) {
476
+ color-scheme: light;
477
+
478
+ --viking-bg: var(--viking-slate-050);
479
+ --viking-bg-subtle: var(--viking-slate-100);
480
+ --viking-bg-inverted: var(--viking-charcoal-900);
481
+ --viking-surface: var(--viking-white-pure);
482
+ --viking-surface-alt: var(--viking-slate-100);
483
+ --viking-surface-inset: var(--viking-metallic-050);
484
+ --viking-surface-raised: var(--viking-white-pure);
485
+ --viking-surface-overlay: var(--viking-white-pure);
486
+ --viking-text: var(--viking-charcoal-900);
487
+ --viking-text-muted: var(--viking-metallic-500);
488
+ --viking-text-subtle: var(--viking-metallic-400);
489
+ --viking-text-disabled: var(--viking-metallic-300);
490
+ --viking-text-link: var(--viking-electric-700);
491
+ --viking-text-link-hover: var(--viking-electric-600);
492
+ --viking-text-inverted: var(--viking-white-pure);
493
+ --viking-border: color-mix(in srgb, var(--viking-metallic-600) 22%, transparent);
494
+ --viking-border-strong: color-mix(in srgb, var(--viking-metallic-600) 38%, transparent);
495
+ --viking-border-subtle: color-mix(in srgb, var(--viking-metallic-600) 12%, transparent);
496
+ --viking-border-accent: color-mix(in srgb, var(--viking-electric-600) 58%, transparent);
497
+ --viking-accent: var(--viking-electric-600);
498
+ --viking-accent-hover: var(--viking-electric-500);
499
+ --viking-accent-active: var(--viking-electric-700);
500
+ --viking-accent-content: var(--viking-white-pure);
501
+ --viking-accent-soft: color-mix(in srgb, var(--viking-electric-600) 10%, transparent);
502
+ --viking-accent-muted: color-mix(in srgb, var(--viking-electric-600) 8%, transparent);
503
+ --viking-accent-strong: var(--viking-electric-400);
504
+ --viking-accent-secondary: var(--viking-crimson-700);
505
+ --viking-accent-secondary-hover: var(--viking-crimson-600);
506
+ --viking-accent-secondary-active: var(--viking-crimson-700);
507
+ --viking-accent-secondary-content: var(--viking-white-pure);
508
+ --viking-accent-secondary-soft: color-mix(in srgb, var(--viking-crimson-700) 8%, transparent);
509
+ --viking-success-soft: color-mix(in srgb, var(--viking-green-500) 12%, transparent);
510
+ --viking-warning-soft: color-mix(in srgb, var(--viking-gold-500) 14%, transparent);
511
+ --viking-danger-soft: color-mix(in srgb, var(--viking-crimson-500) 12%, transparent);
512
+ --viking-info-soft: color-mix(in srgb, var(--viking-blue-500) 12%, transparent);
513
+ --viking-danger-text: var(--viking-crimson-700);
514
+ --viking-on-danger: var(--viking-white-pure);
515
+ --viking-ring: var(--viking-electric-500);
516
+ --viking-overlay-backdrop: color-mix(in srgb, var(--viking-charcoal-900) 45%, transparent);
517
+ --viking-surface-glass: color-mix(in srgb, var(--viking-white-pure) 88%, transparent);
518
+ --viking-surface-glass-blur: 10px;
519
+ --viking-state-hover-bg: color-mix(in srgb, var(--viking-electric-600) 8%, transparent);
520
+ --viking-state-active-bg: color-mix(in srgb, var(--viking-electric-700) 12%, transparent);
521
+ --viking-state-selected-bg: color-mix(in srgb, var(--viking-electric-600) 14%, transparent);
522
+ --viking-state-disabled-bg: color-mix(in srgb, var(--viking-metallic-600) 12%, transparent);
523
+ --viking-shadow-sm: 0 1px 2px rgba(17, 17, 17, 0.06), 0 1px 3px rgba(17, 17, 17, 0.08);
524
+ --viking-shadow-md: 0 2px 4px rgba(17, 17, 17, 0.06), 0 4px 8px rgba(17, 17, 17, 0.08);
525
+ --viking-shadow-lg: 0 4px 8px rgba(17, 17, 17, 0.06), 0 12px 24px rgba(17, 17, 17, 0.1);
526
+ }
527
+ }