@dataengineeringformachinelearning/viking-ui 4.0.4 → 4.0.6

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 (246) hide show
  1. package/README.md +35 -11
  2. package/dist/README.md +35 -11
  3. package/dist/design-tokens.css +300 -85
  4. package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs +100 -64
  5. package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +1 -1
  6. package/dist/icons.js +306 -0
  7. package/dist/package.json +24 -5
  8. package/{src/lib/site-drakkar/site-drakkar.config.ts → dist/site-drakkar.js} +64 -130
  9. package/dist/src/tokens/viking-tokens.json +9 -7
  10. package/dist/types/dataengineeringformachinelearning-viking-ui.d.ts +97 -3
  11. package/dist/viking-components.css +161 -70
  12. package/dist/viking-tokens.json +9 -7
  13. package/dist/viking-ui-elements.js +44 -32
  14. package/dist/viking-ui.css +1 -1
  15. package/dist/web-components.js +44 -32
  16. package/package.json +30 -8
  17. package/dist/scripts/build-web-components.mjs +0 -37
  18. package/dist/src/web/badge/viking-badge-wc.ts +0 -116
  19. package/dist/src/web/button/viking-button-wc.ts +0 -165
  20. package/dist/src/web/callout/viking-callout-wc.ts +0 -105
  21. package/dist/src/web/card/viking-card-wc.ts +0 -67
  22. package/dist/src/web/core/base.ts +0 -56
  23. package/dist/src/web/core/dom.ts +0 -53
  24. package/dist/src/web/core/icons-inline.ts +0 -44
  25. package/dist/src/web/core/styles.ts +0 -1261
  26. package/dist/src/web/core/types.ts +0 -19
  27. package/dist/src/web/field/viking-field-wc.ts +0 -154
  28. package/dist/src/web/index.ts +0 -73
  29. package/dist/src/web/input/viking-input-wc.ts +0 -211
  30. package/dist/src/web/modal/viking-modal-wc.ts +0 -187
  31. package/dist/src/web/search-palette/viking-search-palette-wc.ts +0 -495
  32. package/dist/src/web/select/viking-select-wc.ts +0 -218
  33. package/dist/src/web/suite-header/viking-suite-header-wc.ts +0 -729
  34. package/dist/src/web/suite-search-palette/viking-suite-search-palette-wc.ts +0 -234
  35. package/dist/src/web/theme-toggle/viking-theme-toggle-wc.ts +0 -139
  36. package/dist/src/web/types.ts +0 -37
  37. package/dist/src/web/web-components.spec.ts +0 -297
  38. package/src/assets/drakkar-favicon.svg +0 -17
  39. package/src/assets/fonts/inter/InterVariable-Italic.woff2 +0 -0
  40. package/src/assets/fonts/inter/InterVariable.woff2 +0 -0
  41. package/src/core/brand/deml-lockup.svg +0 -5
  42. package/src/core/brand/deml-mark-compact.svg +0 -4
  43. package/src/core/brand/deml-mark-filled.svg +0 -3
  44. package/src/core/brand/deml-mark-outline.svg +0 -4
  45. package/src/core/brand-icons.ts +0 -62
  46. package/src/core/icons.spec.ts +0 -52
  47. package/src/core/icons.ts +0 -206
  48. package/src/core/integration-brand-icons.ts +0 -77
  49. package/src/core/lucide-paths.generated.ts +0 -130
  50. package/src/core/types.ts +0 -85
  51. package/src/core/uid.ts +0 -7
  52. package/src/elements/button/viking-button.ts +0 -201
  53. package/src/elements/card/viking-card.ts +0 -60
  54. package/src/elements/core/dom.ts +0 -33
  55. package/src/elements/core/styles.ts +0 -28
  56. package/src/elements/modal/viking-modal.ts +0 -154
  57. package/src/index.ts +0 -1
  58. package/src/lib/accordion/accordion.ts +0 -126
  59. package/src/lib/app-header/app-header.scss +0 -274
  60. package/src/lib/app-header/app-header.ts +0 -43
  61. package/src/lib/app-sidebar/app-sidebar.scss +0 -415
  62. package/src/lib/app-sidebar/app-sidebar.ts +0 -29
  63. package/src/lib/auth-panel/auth-panel.spec.ts +0 -132
  64. package/src/lib/auth-panel/auth-panel.ts +0 -228
  65. package/src/lib/autocomplete/autocomplete.ts +0 -223
  66. package/src/lib/avatar/avatar.ts +0 -126
  67. package/src/lib/badge/badge.ts +0 -182
  68. package/src/lib/bar/bar.ts +0 -31
  69. package/src/lib/brand/brand.ts +0 -60
  70. package/src/lib/breadcrumbs/breadcrumbs.ts +0 -81
  71. package/src/lib/button/button-group.ts +0 -40
  72. package/src/lib/button/button.scss +0 -119
  73. package/src/lib/button/button.ts +0 -98
  74. package/src/lib/calendar/calendar.ts +0 -253
  75. package/src/lib/callout/callout.ts +0 -211
  76. package/src/lib/card/card-title.spec.ts +0 -27
  77. package/src/lib/card/card-title.ts +0 -50
  78. package/src/lib/card/card.ts +0 -200
  79. package/src/lib/carousel/carousel.ts +0 -206
  80. package/src/lib/chart/chart-zoom.spec.ts +0 -65
  81. package/src/lib/chart/chart-zoom.ts +0 -71
  82. package/src/lib/chart/chart.ts +0 -1257
  83. package/src/lib/chart-card-header/chart-card-header.ts +0 -80
  84. package/src/lib/chart-empty-state/chart-empty-state.ts +0 -146
  85. package/src/lib/chart-panel/chart-panel.ts +0 -133
  86. package/src/lib/checkbox/checkbox.ts +0 -139
  87. package/src/lib/color-picker/color-picker.ts +0 -148
  88. package/src/lib/command/command.ts +0 -260
  89. package/src/lib/composer/composer.ts +0 -180
  90. package/src/lib/confirm-dialog/confirm-dialog.ts +0 -163
  91. package/src/lib/confirm-dialog/dialog.service.ts +0 -79
  92. package/src/lib/context/context.ts +0 -75
  93. package/src/lib/core/brand-icons.ts +0 -62
  94. package/src/lib/core/cva.ts +0 -33
  95. package/src/lib/core/icons.ts +0 -206
  96. package/src/lib/core/integration-brand-icons.ts +0 -77
  97. package/src/lib/core/lucide-paths.generated.ts +0 -130
  98. package/src/lib/date-picker/date-picker.ts +0 -139
  99. package/src/lib/dropdown/dropdown.ts +0 -188
  100. package/src/lib/editor/editor.ts +0 -170
  101. package/src/lib/empty-state/empty-state.ts +0 -100
  102. package/src/lib/fab/fab.ts +0 -76
  103. package/src/lib/field/field.ts +0 -111
  104. package/src/lib/file-upload/file-upload.ts +0 -208
  105. package/src/lib/footer/footer.scss +0 -162
  106. package/src/lib/footer/footer.ts +0 -28
  107. package/src/lib/form-section/form-section.ts +0 -200
  108. package/src/lib/forms.spec.ts +0 -92
  109. package/src/lib/gauge-arc/gauge-arc.ts +0 -85
  110. package/src/lib/hud-panel/hud-panel.ts +0 -27
  111. package/src/lib/icon/icon.ts +0 -284
  112. package/src/lib/icon-badge/icon-badge.ts +0 -87
  113. package/src/lib/icon-heading/icon-heading.spec.ts +0 -32
  114. package/src/lib/icon-heading/icon-heading.ts +0 -38
  115. package/src/lib/icon-text/icon-text.ts +0 -120
  116. package/src/lib/input/input.ts +0 -119
  117. package/src/lib/kanban/kanban.ts +0 -211
  118. package/src/lib/kbd/kbd.ts +0 -32
  119. package/src/lib/label/label.ts +0 -39
  120. package/src/lib/loading-overlay/loading-overlay.ts +0 -80
  121. package/src/lib/menubar/menubar.ts +0 -77
  122. package/src/lib/metric-card/metric-card.ts +0 -33
  123. package/src/lib/modal/modal.ts +0 -207
  124. package/src/lib/native-select/native-select.ts +0 -124
  125. package/src/lib/navbar/navbar.ts +0 -124
  126. package/src/lib/navigation-menu/navigation-menu.ts +0 -116
  127. package/src/lib/otp-input/otp-input.ts +0 -164
  128. package/src/lib/page-back-link/page-back-link.ts +0 -74
  129. package/src/lib/page-header/page-header.ts +0 -70
  130. package/src/lib/pagination/pagination.ts +0 -157
  131. package/src/lib/pillbox/pillbox.ts +0 -157
  132. package/src/lib/popover/popover.ts +0 -92
  133. package/src/lib/profile/profile.ts +0 -73
  134. package/src/lib/progress/progress.ts +0 -123
  135. package/src/lib/radio/radio.ts +0 -132
  136. package/src/lib/ring-gauge/ring-gauge.ts +0 -75
  137. package/src/lib/scroll-area/scroll-area.ts +0 -57
  138. package/src/lib/search-palette/search-palette.scss +0 -288
  139. package/src/lib/search-palette/search-palette.ts +0 -114
  140. package/src/lib/select/select.ts +0 -292
  141. package/src/lib/separator/separator.ts +0 -59
  142. package/src/lib/sheet/sheet.ts +0 -192
  143. package/src/lib/sidebar-nav/sidebar-nav.scss +0 -218
  144. package/src/lib/sidebar-nav/sidebar-nav.ts +0 -158
  145. package/src/lib/site-drakkar/site-footer.ts +0 -133
  146. package/src/lib/site-drakkar/site-navbar.scss +0 -2
  147. package/src/lib/site-drakkar/site-navbar.ts +0 -286
  148. package/src/lib/site-drakkar/suite-search-items.spec.ts +0 -61
  149. package/src/lib/site-drakkar/suite-search-items.ts +0 -246
  150. package/src/lib/skeleton/skeleton.ts +0 -51
  151. package/src/lib/slider/slider.ts +0 -133
  152. package/src/lib/spinner/spinner.ts +0 -75
  153. package/src/lib/status-metric-row/status-metric-row.ts +0 -74
  154. package/src/lib/suite-search-palette/suite-search-palette.ts +0 -95
  155. package/src/lib/switch/switch.ts +0 -131
  156. package/src/lib/table/table.ts +0 -137
  157. package/src/lib/tabs/tab-panel.ts +0 -61
  158. package/src/lib/tabs/tab.ts +0 -107
  159. package/src/lib/tabs/tabs.ts +0 -109
  160. package/src/lib/textarea/textarea.ts +0 -103
  161. package/src/lib/theme-toggle/theme-toggle.spec.ts +0 -40
  162. package/src/lib/theme-toggle/theme-toggle.ts +0 -40
  163. package/src/lib/time-picker/time-picker.ts +0 -197
  164. package/src/lib/timeline/timeline.ts +0 -152
  165. package/src/lib/toast/toast.ts +0 -196
  166. package/src/lib/toggle/toggle-group.ts +0 -60
  167. package/src/lib/toggle/toggle.ts +0 -101
  168. package/src/lib/tooltip/tooltip.ts +0 -119
  169. package/src/lib/typography/heading.ts +0 -52
  170. package/src/lib/typography/text.ts +0 -51
  171. package/src/lib/uptime-bar/uptime-bar.ts +0 -55
  172. package/src/lib/verification-code-field/verification-code-field.ts +0 -149
  173. package/src/lib/whitepaper-cta/whitepaper-cta.scss +0 -130
  174. package/src/lib/whitepaper-cta/whitepaper-cta.ts +0 -78
  175. package/src/lib/wizard/wizard.ts +0 -80
  176. package/src/public-api.ts +0 -172
  177. package/src/styles/_buttons.scss +0 -386
  178. package/src/styles/_component-primitives.scss +0 -183
  179. package/src/styles/_drakkar-buttons.scss +0 -85
  180. package/src/styles/_fonts.scss +0 -22
  181. package/src/styles/_forms.scss +0 -66
  182. package/src/styles/_input.scss +0 -106
  183. package/src/styles/_layout-enforcement.scss +0 -229
  184. package/src/styles/_layout-rhythm.scss +0 -158
  185. package/src/styles/_legacy-aliases.scss +0 -212
  186. package/src/styles/_series-colors.scss +0 -24
  187. package/src/styles/_static-primitives.scss +0 -857
  188. package/src/styles/_typography.scss +0 -87
  189. package/src/styles/_variables.scss +0 -527
  190. package/src/styles/components/a11y.scss +0 -90
  191. package/src/styles/components/badges.scss +0 -102
  192. package/src/styles/components/extracted-utilities.scss +0 -459
  193. package/src/styles/components/footer.scss +0 -168
  194. package/src/styles/components/icon-heading.scss +0 -47
  195. package/src/styles/components/icon-inline.scss +0 -101
  196. package/src/styles/components/layout.scss +0 -59
  197. package/src/styles/components/utilities.scss +0 -131
  198. package/src/styles/components/viking-inspired.scss +0 -204
  199. package/src/styles/components/whitepaper-cta.scss +0 -130
  200. package/src/styles/components-bundle.scss +0 -9
  201. package/src/styles/components.scss +0 -442
  202. package/src/styles/deml-components.scss +0 -10
  203. package/src/styles/index.scss +0 -8
  204. package/src/styles/layout-shell.scss +0 -111
  205. package/src/styles/page-shell.scss +0 -859
  206. package/src/styles/static-navbar.scss +0 -1250
  207. package/src/styles/surfaces/backend.scss +0 -154
  208. package/src/styles/surfaces/docs-global.scss +0 -73
  209. package/src/styles/surfaces/docs-shell.scss +0 -437
  210. package/src/styles/surfaces/docs-showcase.scss +0 -1153
  211. package/src/styles/surfaces/marketing-cta.scss +0 -62
  212. package/src/styles/surfaces/marketing-docs-bento.scss +0 -67
  213. package/src/styles/surfaces/marketing-global.scss +0 -748
  214. package/src/styles/surfaces/marketing-landing.scss +0 -1526
  215. package/src/styles/surfaces/marketing-publication.scss +0 -535
  216. package/src/styles/surfaces/marketing-theme.scss +0 -14
  217. package/src/styles/surfaces/swagger-ui.scss +0 -1013
  218. package/src/styles/tokens-export.scss +0 -18
  219. package/src/styles/tokens.scss +0 -5
  220. package/src/styles/viking-ui-bundle.scss +0 -23
  221. package/src/styles/viking-ui.scss +0 -272
  222. package/src/tokens/series-presets.ts +0 -15
  223. package/src/tokens/tailwind.preset.js +0 -209
  224. package/src/tokens/viking-tokens.json +0 -318
  225. package/src/viking-ui.spec.ts +0 -416
  226. package/src/web/badge/viking-badge-wc.ts +0 -116
  227. package/src/web/button/viking-button-wc.ts +0 -165
  228. package/src/web/callout/viking-callout-wc.ts +0 -105
  229. package/src/web/card/viking-card-wc.ts +0 -67
  230. package/src/web/core/base.ts +0 -56
  231. package/src/web/core/dom.ts +0 -53
  232. package/src/web/core/icons-inline.ts +0 -44
  233. package/src/web/core/styles.ts +0 -1261
  234. package/src/web/core/types.ts +0 -19
  235. package/src/web/field/viking-field-wc.ts +0 -154
  236. package/src/web/index.ts +0 -73
  237. package/src/web/input/viking-input-wc.ts +0 -211
  238. package/src/web/modal/viking-modal-wc.ts +0 -187
  239. package/src/web/search-palette/viking-search-palette-wc.ts +0 -495
  240. package/src/web/select/viking-select-wc.ts +0 -218
  241. package/src/web/suite-header/viking-suite-header-wc.ts +0 -729
  242. package/src/web/suite-search-palette/viking-suite-search-palette-wc.ts +0 -234
  243. package/src/web/theme-toggle/viking-theme-toggle-wc.ts +0 -139
  244. package/src/web/types.ts +0 -37
  245. package/src/web/web-components.spec.ts +0 -297
  246. package/src/web-components/index.ts +0 -1
@@ -1,859 +0,0 @@
1
- // Shared dashboard page shell — metrics, panels, cards, loaders (viking-ui).
2
- // Page width shell lives in layout-shell.scss (.viking-page-shell / .page-inner-wrapper).
3
-
4
- .viking-metric-row,
5
- .hud-metrics {
6
- display: grid;
7
- grid-template-columns: 1fr;
8
- gap: var(--viking-space-3);
9
- margin-bottom: var(--viking-page-section-gap, var(--viking-space-6));
10
-
11
- @media (min-width: 480px) {
12
- grid-template-columns: repeat(2, 1fr);
13
- }
14
-
15
- @media (min-width: 600px) {
16
- grid-template-columns: repeat(4, 1fr);
17
- }
18
-
19
- @media (min-width: 768px) {
20
- grid-template-columns: repeat(12, 1fr);
21
- }
22
- }
23
-
24
- .viking-metric-card,
25
- .metric-card {
26
- display: flex;
27
- flex-direction: column;
28
- gap: var(--viking-space-1);
29
- background: var(--viking-surface-recipe, var(--viking-surface));
30
- border: 1px solid var(--viking-border);
31
- padding: var(--viking-card-padding-compact, var(--viking-space-2));
32
- border-radius: var(--viking-radius-lg);
33
- min-width: 0;
34
- min-height: var(--viking-metric-card-min-height);
35
- align-items: center;
36
- justify-content: center;
37
- text-align: center;
38
- box-sizing: border-box;
39
- box-shadow: var(--viking-shadow-sm);
40
- transition: var(--viking-transition-interactive);
41
- position: relative;
42
- overflow: hidden;
43
-
44
- &::before {
45
- content: '';
46
- position: absolute;
47
- inset: 0 0 auto;
48
- height: 1px;
49
- background: linear-gradient(
50
- 90deg,
51
- transparent,
52
- color-mix(in srgb, var(--viking-metallic-200) var(--viking-surface-hairline-strength, 22%), transparent),
53
- transparent
54
- );
55
- pointer-events: none;
56
- }
57
-
58
- @media (min-width: 481px) {
59
- min-width: var(--viking-metric-card-min-width);
60
- }
61
- }
62
-
63
- .viking-metric-card-tall,
64
- .kpi-card {
65
- min-height: var(--viking-metric-card-tall-min-height);
66
- align-items: stretch;
67
- justify-content: flex-start;
68
- text-align: left;
69
- }
70
-
71
- .viking-metric-label,
72
- .metric-card .metric-label {
73
- font-size: var(--viking-font-size-ui);
74
- font-family: var(--viking-font-family);
75
- color: var(--viking-text-muted);
76
- letter-spacing: 0.05em;
77
- }
78
-
79
- .viking-metric-value,
80
- .metric-card .metric-value {
81
- font-size: calc(var(--viking-font-size) * 1.35);
82
- font-weight: 700;
83
- font-family: var(--viking-font-family);
84
- line-height: 1.2;
85
- }
86
-
87
- .viking-metric-card-warning,
88
- .metric-card.warning {
89
- border-left: 3px solid var(--viking-warning);
90
-
91
- .viking-metric-value,
92
- .metric-value {
93
- color: var(--viking-warning);
94
- }
95
- }
96
-
97
- .viking-metric-card-critical,
98
- .metric-card.critical {
99
- border-left: 3px solid var(--viking-danger);
100
-
101
- .viking-metric-value,
102
- .metric-value {
103
- color: var(--viking-danger-text, var(--viking-danger));
104
- }
105
- }
106
-
107
- .viking-hud-panel,
108
- .panel-section {
109
- background-color: var(--viking-surface);
110
- border: 1px solid var(--viking-border);
111
- border-radius: var(--viking-radius-lg);
112
- display: flex;
113
- flex-direction: column;
114
- overflow: hidden;
115
- box-shadow: var(--viking-shadow-sm);
116
- min-width: 0;
117
- position: relative;
118
-
119
- &::before {
120
- content: '';
121
- position: absolute;
122
- inset: 0 0 auto;
123
- height: 1px;
124
- background: linear-gradient(
125
- 90deg,
126
- transparent,
127
- color-mix(in srgb, var(--viking-metallic-200) var(--viking-surface-hairline-strength, 22%), transparent),
128
- transparent
129
- );
130
- pointer-events: none;
131
- z-index: 1;
132
- }
133
- }
134
-
135
- .viking-table-scroll,
136
- .table-scroll,
137
- .panel-body-scroll {
138
- width: 100%;
139
- overflow-x: auto;
140
- -webkit-overflow-scrolling: touch;
141
- }
142
-
143
- .viking-hud-panel-header,
144
- .panel-header {
145
- display: flex;
146
- flex-wrap: wrap;
147
- align-items: center;
148
- justify-content: space-between;
149
- gap: var(--viking-space-2);
150
- padding: var(--viking-panel-header-padding, var(--viking-space-3));
151
- background-color: color-mix(in srgb, var(--viking-bg) 2%, transparent);
152
- border-bottom: 1px solid var(--viking-border);
153
- }
154
-
155
- .viking-hud-panel-title,
156
- .panel-header h2 {
157
- font-size: var(--viking-font-size-ui);
158
- font-weight: 700;
159
- text-transform: uppercase;
160
- margin: 0;
161
- letter-spacing: 0.05em;
162
- flex: 1;
163
- }
164
-
165
- .viking-panel-card,
166
- .status-card-outlined {
167
- position: relative;
168
- border-radius: var(--viking-radius-lg);
169
- border: 1px solid var(--viking-border);
170
- background-color: var(--viking-surface);
171
- overflow: hidden;
172
- box-shadow: var(--viking-shadow-sm);
173
-
174
- &::before {
175
- content: '';
176
- position: absolute;
177
- inset: 0 0 auto;
178
- height: 1px;
179
- background: linear-gradient(
180
- 90deg,
181
- transparent,
182
- color-mix(in srgb, var(--viking-metallic-200) var(--viking-surface-hairline-strength, 22%), transparent),
183
- transparent
184
- );
185
- pointer-events: none;
186
- z-index: 1;
187
- }
188
- }
189
-
190
- .viking-panel-card-header,
191
- .card-header-clean {
192
- padding: var(--viking-panel-header-padding, var(--viking-space-3));
193
- display: flex;
194
- align-items: center;
195
- justify-content: space-between;
196
- gap: var(--viking-space-2);
197
- border-bottom: 1px solid var(--viking-border);
198
- }
199
-
200
- .viking-panel-card-body,
201
- .card-body-clean {
202
- padding: var(--viking-panel-padding, var(--viking-space-3));
203
- }
204
-
205
- .viking-page-header,
206
- .hud-header,
207
- .dashboard-topbar {
208
- display: flex;
209
- flex-wrap: wrap;
210
- align-items: center;
211
- justify-content: space-between;
212
- gap: var(--viking-space-4);
213
- padding-bottom: var(--viking-space-4);
214
- margin-bottom: var(--viking-page-section-gap, var(--viking-space-4));
215
- border-bottom: 1px solid var(--viking-border);
216
- }
217
-
218
- .viking-page-header-sidebar.dashboard-topbar {
219
- padding: var(--viking-panel-padding, var(--viking-space-3));
220
- background-color: var(--viking-surface);
221
- border-bottom: 1px solid var(--viking-border-subtle);
222
- box-shadow: var(--viking-shadow-xs);
223
- }
224
-
225
- .viking-page-header-main,
226
- .title-group.topbar-left {
227
- display: flex;
228
- flex-direction: column;
229
- align-items: flex-start;
230
- gap: var(--viking-space-2);
231
- min-width: 0;
232
- flex: 1 1 min(100%, 36rem);
233
- }
234
-
235
- .viking-page-header-title-block {
236
- display: flex;
237
- flex-direction: column;
238
- align-items: flex-start;
239
- gap: var(--viking-space-1);
240
- width: 100%;
241
- min-width: 0;
242
- }
243
-
244
- .viking-page-back-link-host {
245
- flex-shrink: 0;
246
- }
247
-
248
- .viking-page-header-title,
249
- .hud-title,
250
- .page-title {
251
- margin: 0;
252
- font-size: clamp(var(--viking-font-size-xl), 3vw, var(--viking-font-size-3xl));
253
- font-weight: 700;
254
- letter-spacing: var(--viking-letter-spacing-tight);
255
- color: var(--viking-text);
256
- line-height: var(--viking-line-height-tight);
257
- }
258
-
259
- .viking-page-header-subtitle,
260
- .hud-subtitle,
261
- .page-description {
262
- margin: var(--viking-space-1) 0 0;
263
- font-size: var(--viking-font-size);
264
- color: var(--viking-text-muted);
265
- line-height: var(--viking-line-height-relaxed);
266
- max-width: var(--viking-content-readable-max-width);
267
- }
268
-
269
- .viking-page-header-actions,
270
- .topbar-right {
271
- display: flex;
272
- flex-wrap: wrap;
273
- align-items: stretch;
274
- justify-content: flex-end;
275
- gap: var(--viking-space-2);
276
- flex-shrink: 0;
277
- min-width: 0;
278
- margin-left: auto;
279
- }
280
-
281
- .viking-empty-state,
282
- .empty-state {
283
- display: flex;
284
- flex-direction: column;
285
- align-items: center;
286
- justify-content: center;
287
- padding: var(--viking-space-4) var(--viking-space-3);
288
- text-align: center;
289
- color: var(--viking-text-muted);
290
- gap: var(--viking-space-1-5);
291
- animation: viking-fade-in var(--viking-duration) var(--viking-ease-default);
292
- }
293
-
294
- /* Chart cards — shared header/body rhythm for dashboard analytics grids */
295
- .status-card-outlined:has(.chart-custom-header),
296
- .viking-chart-panel:has(viking-chart-card-header) {
297
- .chart-custom-header,
298
- viking-chart-card-header {
299
- border-bottom: 1px solid var(--viking-border-subtle);
300
- padding-bottom: var(--viking-space-2);
301
- margin-bottom: 0;
302
- }
303
- }
304
-
305
- .viking-chart-panel-body {
306
- viking-chart,
307
- .viking-chart-large,
308
- .viking-chart-medium {
309
- flex: 1 1 auto;
310
- display: flex;
311
- width: 100%;
312
- min-height: inherit;
313
- height: 100%;
314
- }
315
- }
316
-
317
- .chart-container-large {
318
- --viking-chart-fill-min-height: var(--viking-chart-fill-min-height-lg, clamp(20rem, 40vw, 22rem));
319
- min-height: var(--viking-chart-panel-body-min-height-lg, 25rem);
320
- }
321
-
322
- .chart-container-medium {
323
- --viking-chart-fill-min-height: var(--viking-chart-fill-min-height, clamp(18rem, 36vw, 20rem));
324
- min-height: var(--viking-chart-panel-body-min-height-md, 22rem);
325
- }
326
-
327
- .viking-chart-empty,
328
- .empty-chart-state,
329
- .panel-empty {
330
- display: flex;
331
- flex-direction: column;
332
- align-items: center;
333
- justify-content: center;
334
- text-align: center;
335
- padding: var(--viking-space-4) var(--viking-space-3);
336
- border-radius: var(--viking-radius-lg);
337
- background: var(--viking-surface-alt);
338
- border: 1px dashed var(--viking-border-strong);
339
- box-shadow: var(--viking-shadow-inner);
340
- min-height: 220px;
341
- gap: var(--viking-space-2);
342
- animation: viking-fade-in var(--viking-duration) var(--viking-ease-default);
343
-
344
- &.compact {
345
- min-height: 160px;
346
- padding: var(--viking-space-3) var(--viking-space-3);
347
- }
348
-
349
- &.inline {
350
- min-height: auto;
351
- border-style: solid;
352
- border-color: var(--viking-border);
353
- background: color-mix(in srgb, var(--viking-surface-alt) 50%, transparent);
354
- }
355
-
356
- &.is-secure {
357
- .empty-icon,
358
- viking-app-icon {
359
- background: color-mix(in srgb, var(--viking-success) 14%, transparent);
360
- color: var(--viking-success);
361
- }
362
- }
363
-
364
- .empty-icon,
365
- viking-app-icon {
366
- display: flex;
367
- align-items: center;
368
- justify-content: center;
369
- width: var(--viking-space-6);
370
- height: var(--viking-space-6);
371
- border-radius: var(--viking-radius-lg);
372
- background: var(--viking-accent-soft);
373
- color: var(--viking-accent-strong);
374
- box-shadow: var(--viking-shadow-sm);
375
- margin-bottom: var(--viking-space-2);
376
- font-size: 28px;
377
- opacity: 1;
378
- }
379
-
380
- .empty-title,
381
- h3 {
382
- margin: 0 0 var(--viking-space-1) 0;
383
- font-size: var(--viking-font-size-md);
384
- font-weight: var(--viking-font-weight-semibold);
385
- letter-spacing: var(--viking-letter-spacing-caps);
386
- text-transform: uppercase;
387
- color: var(--viking-text);
388
- line-height: var(--viking-line-height-tight);
389
- }
390
-
391
- .empty-subtitle,
392
- p {
393
- margin: 0;
394
- font-size: var(--viking-font-size);
395
- color: var(--viking-text-muted);
396
- line-height: var(--viking-line-height-relaxed);
397
- max-width: 28rem;
398
- }
399
- }
400
-
401
- .viking-list-empty,
402
- .empty-data-text {
403
- display: flex;
404
- flex-direction: column;
405
- align-items: center;
406
- justify-content: center;
407
- text-align: center;
408
- padding: var(--viking-space-4) var(--viking-space-3);
409
- gap: var(--viking-space-1);
410
- color: var(--viking-text-muted);
411
- font-size: var(--viking-font-size);
412
- line-height: var(--viking-line-height-relaxed);
413
- background: var(--viking-surface-alt);
414
- border-top: 1px solid var(--viking-border-subtle);
415
-
416
- .empty-icon,
417
- viking-app-icon {
418
- display: flex;
419
- align-items: center;
420
- justify-content: center;
421
- width: var(--viking-space-5);
422
- height: var(--viking-space-5);
423
- border-radius: var(--viking-radius-md);
424
- background: var(--viking-accent-soft);
425
- color: var(--viking-accent-strong);
426
- font-size: 22px;
427
- margin-bottom: var(--viking-space-2);
428
- }
429
-
430
- .empty-title {
431
- margin: 0 0 var(--viking-space-1) 0;
432
- font-size: var(--viking-font-size-sm);
433
- font-weight: var(--viking-font-weight-semibold);
434
- letter-spacing: var(--viking-letter-spacing-caps);
435
- text-transform: uppercase;
436
- color: var(--viking-text);
437
- }
438
-
439
- .empty-subtitle {
440
- margin: 0;
441
- max-width: 24rem;
442
- }
443
- }
444
-
445
- .panel-card {
446
- position: relative;
447
- padding: var(--viking-panel-padding, var(--viking-space-3));
448
- border-radius: var(--viking-radius-lg);
449
- border: 1px solid var(--viking-border);
450
- background-color: var(--viking-surface);
451
- overflow: hidden;
452
- box-shadow: var(--viking-shadow-sm);
453
-
454
- &::before {
455
- content: '';
456
- position: absolute;
457
- inset: 0 0 auto;
458
- height: 1px;
459
- background: linear-gradient(
460
- 90deg,
461
- transparent,
462
- color-mix(in srgb, var(--viking-metallic-200) var(--viking-surface-hairline-strength, 22%), transparent),
463
- transparent
464
- );
465
- pointer-events: none;
466
- z-index: 1;
467
- }
468
- }
469
-
470
- .status-error-state {
471
- display: flex;
472
- flex-direction: column;
473
- align-items: center;
474
- justify-content: center;
475
- text-align: center;
476
- padding: var(--viking-space-4) var(--viking-space-3);
477
- margin-top: var(--viking-space-4);
478
- background: var(--viking-surface-alt);
479
- border: 1px dashed var(--viking-border-strong);
480
- border-radius: var(--viking-radius-lg);
481
- box-shadow: var(--viking-shadow-inner);
482
- gap: var(--viking-space-1-5);
483
- animation: viking-fade-in var(--viking-duration) var(--viking-ease-default);
484
-
485
- @media (min-width: 601px) {
486
- padding: var(--viking-space-7) var(--viking-space-4);
487
- }
488
-
489
- .error-state-icon,
490
- viking-app-icon {
491
- display: flex;
492
- align-items: center;
493
- justify-content: center;
494
- width: var(--viking-space-7);
495
- height: var(--viking-space-7);
496
- border-radius: var(--viking-radius-lg);
497
- background: color-mix(in srgb, var(--viking-text-muted) 10%, transparent);
498
- color: var(--viking-text-muted);
499
- font-size: 36px;
500
- margin-bottom: var(--viking-space-1);
501
- opacity: 0.85;
502
- }
503
-
504
- .error-title {
505
- margin: 0;
506
- font-size: var(--viking-font-size-xl);
507
- font-weight: var(--viking-font-weight-bold);
508
- color: var(--viking-text);
509
- letter-spacing: var(--viking-letter-spacing-tight);
510
- }
511
-
512
- .error-subtitle {
513
- margin: 0 0 var(--viking-space-2);
514
- font-size: var(--viking-font-size);
515
- line-height: var(--viking-line-height-relaxed);
516
- color: var(--viking-text-muted);
517
- max-width: 26rem;
518
- }
519
-
520
- .retry-btn {
521
- font-weight: var(--viking-font-weight-bold);
522
- }
523
- }
524
-
525
- .viking-loader-state,
526
- .loader-state {
527
- display: flex;
528
- flex-direction: column;
529
- align-items: center;
530
- justify-content: center;
531
- padding: var(--viking-space-4) var(--viking-space-3);
532
- gap: var(--viking-space-2);
533
- color: var(--viking-text-muted);
534
- animation: viking-fade-in var(--viking-duration) var(--viking-ease-default);
535
- }
536
-
537
- .viking-spinner,
538
- .spinner {
539
- width: var(--viking-space-4);
540
- height: var(--viking-space-4);
541
- border: 3px solid var(--viking-border);
542
- border-top-color: var(--viking-accent);
543
- border-radius: 50%;
544
- animation: viking-spin 0.8s linear infinite;
545
- }
546
-
547
- @media (prefers-reduced-motion: reduce) {
548
- .viking-spinner,
549
- .spinner {
550
- animation: none;
551
- border-top-color: var(--viking-accent);
552
- }
553
- }
554
-
555
- .viking-dashboard-layout,
556
- .dashboard-layout {
557
- position: relative;
558
- z-index: 1;
559
- display: flex;
560
- flex-direction: column;
561
- width: 100%;
562
- min-height: calc(100vh - 64px);
563
- }
564
-
565
- @media (min-width: 901px) {
566
- .viking-dashboard-layout,
567
- .dashboard-layout {
568
- flex-direction: row;
569
- }
570
- }
571
-
572
- .viking-dashboard-main,
573
- .dashboard-main {
574
- flex: 1;
575
- display: flex;
576
- flex-direction: column;
577
- min-width: 0;
578
- }
579
-
580
- /* Section rhythm — analytics, status, dashboard hierarchy */
581
- .metrics-overview-header {
582
- display: flex;
583
- flex-direction: column;
584
- gap: var(--viking-space-2);
585
- margin-bottom: var(--viking-space-4);
586
- }
587
-
588
- .metrics-section-spacing {
589
- margin-top: var(--viking-page-section-gap, var(--viking-space-7));
590
- }
591
-
592
- .section-title-premium {
593
- display: flex;
594
- align-items: center;
595
- gap: var(--viking-space-2);
596
- font-size: var(--viking-font-size-xl);
597
- font-weight: var(--viking-font-weight-bold, 700);
598
- letter-spacing: var(--viking-letter-spacing-tight, -0.01em);
599
- color: var(--viking-text, var(--text-color));
600
- margin: 0;
601
-
602
- viking-app-icon,
603
- viking-icon {
604
- display: inline-flex;
605
- align-items: center;
606
- justify-content: center;
607
- width: var(--viking-space-3);
608
- height: var(--viking-space-3);
609
- border-radius: var(--viking-radius-sm);
610
- background: var(--viking-accent-soft, color-mix(in srgb, var(--viking-accent) 14%, transparent));
611
- color: var(--viking-accent-strong, var(--viking-accent));
612
- flex-shrink: 0;
613
- }
614
- }
615
-
616
- .section-description-premium {
617
- font-size: var(--viking-font-size);
618
- line-height: var(--viking-line-height-relaxed);
619
- color: var(--viking-text-muted, var(--text-muted));
620
- margin: 0 0 var(--viking-space-4);
621
- max-width: var(--viking-content-readable-max-width, 42rem);
622
- }
623
-
624
- /* ML stat panels — telemetry KPI tiles */
625
- .ml-stat-panels-row,
626
- .stat-panels-grid {
627
- display: grid;
628
- grid-template-columns: 1fr;
629
- gap: var(--viking-space-2, var(--grid-gap));
630
- margin-bottom: var(--viking-space-3);
631
-
632
- @media (min-width: 600px) {
633
- grid-template-columns: repeat(2, 1fr);
634
- }
635
-
636
- @media (min-width: 1024px) {
637
- grid-template-columns: repeat(4, 1fr);
638
- }
639
- }
640
-
641
- .ml-stat-panel {
642
- position: relative;
643
- background: var(--viking-surface-recipe, var(--viking-surface));
644
- border: 1px solid var(--viking-border);
645
- border-radius: var(--viking-radius-lg);
646
- padding: var(--viking-card-padding-compact, var(--viking-space-2));
647
- display: flex;
648
- justify-content: space-between;
649
- align-items: center;
650
- box-shadow: var(--viking-shadow-sm);
651
- transition: var(--viking-transition-interactive);
652
- overflow: hidden;
653
- min-width: 0;
654
-
655
- &::before {
656
- content: '';
657
- position: absolute;
658
- inset: 0 0 auto;
659
- height: 1px;
660
- background: linear-gradient(
661
- 90deg,
662
- transparent,
663
- color-mix(in srgb, var(--viking-metallic-200) var(--viking-surface-hairline-strength, 22%), transparent),
664
- transparent
665
- );
666
- pointer-events: none;
667
- }
668
-
669
- &:hover {
670
- box-shadow: var(--viking-shadow-md);
671
- border-color: var(--viking-border-strong);
672
- }
673
-
674
- &.viking-stat-alert {
675
- border-color: var(--viking-danger);
676
- border-left: 3px solid var(--viking-danger);
677
-
678
- .stat-value {
679
- color: var(--viking-danger-text, var(--viking-danger));
680
- }
681
- }
682
- }
683
-
684
- .stat-info {
685
- display: flex;
686
- align-items: center;
687
- gap: var(--viking-space-2);
688
- min-width: 0;
689
- }
690
-
691
- .stat-title {
692
- font-weight: var(--viking-font-weight-semibold, 600);
693
- font-size: var(--viking-font-size-sm);
694
- letter-spacing: var(--viking-letter-spacing-caps, 0.04em);
695
- text-transform: uppercase;
696
- color: var(--viking-text-muted, var(--text-muted));
697
- white-space: nowrap;
698
- }
699
-
700
- .stat-value {
701
- font-size: calc(var(--viking-font-size) * 1.35);
702
- font-weight: var(--viking-font-weight-bold, 700);
703
- color: var(--viking-accent-strong, var(--viking-accent));
704
- letter-spacing: var(--viking-letter-spacing-tight, -0.02em);
705
- line-height: var(--viking-line-height-tight, 1.2);
706
- }
707
-
708
- .stat-unit {
709
- font-size: var(--viking-font-size-md);
710
- color: var(--viking-text-muted, var(--text-muted));
711
- font-weight: var(--viking-font-weight-medium, 500);
712
- }
713
-
714
- /* CES / analytics gauge cards */
715
- .ces-meter-section {
716
- margin-bottom: var(--viking-space-4);
717
- }
718
-
719
- .ces-gauge-cluster {
720
- display: grid;
721
- grid-template-columns: repeat(4, 1fr);
722
- gap: var(--viking-space-2, var(--grid-gap));
723
-
724
- @media (min-width: 768px) {
725
- grid-template-columns: repeat(12, 1fr);
726
- }
727
- }
728
-
729
- .gauge-card {
730
- position: relative;
731
- background: var(--viking-surface-recipe, var(--viking-surface));
732
- border: 1px solid var(--viking-border);
733
- border-radius: var(--viking-radius-lg);
734
- padding: var(--viking-card-padding, var(--viking-space-3));
735
- display: flex;
736
- flex-direction: column;
737
- align-items: center;
738
- box-shadow: var(--viking-shadow-sm);
739
- transition: var(--viking-transition-interactive);
740
- overflow: hidden;
741
-
742
- &::before {
743
- content: '';
744
- position: absolute;
745
- inset: 0 0 auto;
746
- height: 1px;
747
- background: linear-gradient(
748
- 90deg,
749
- transparent,
750
- color-mix(in srgb, var(--viking-metallic-200) var(--viking-surface-hairline-strength, 22%), transparent),
751
- transparent
752
- );
753
- pointer-events: none;
754
- }
755
-
756
- &:hover {
757
- box-shadow: var(--viking-shadow-md);
758
- border-color: var(--viking-border-strong);
759
- }
760
- }
761
-
762
- .gauge-card-header {
763
- width: 100%;
764
- display: flex;
765
- justify-content: space-between;
766
- align-items: center;
767
- margin-bottom: var(--viking-space-3);
768
- padding-bottom: var(--viking-space-1);
769
- border-bottom: 1px solid var(--viking-border-subtle);
770
-
771
- h3 {
772
- font-size: var(--viking-font-size-md);
773
- font-weight: var(--viking-font-weight-semibold, 600);
774
- color: var(--viking-text, var(--text-color));
775
- margin: 0;
776
- }
777
-
778
- viking-app-icon,
779
- viking-icon {
780
- color: var(--viking-text-muted, var(--text-muted));
781
- }
782
- }
783
-
784
- .gauge-card-footer {
785
- width: 100%;
786
- margin-top: var(--viking-space-3);
787
- padding-top: var(--viking-space-2);
788
- border-top: 1px solid var(--viking-border-subtle);
789
- font-size: var(--viking-font-size);
790
- color: var(--viking-text-muted, var(--text-muted));
791
- display: flex;
792
- align-items: center;
793
- justify-content: center;
794
- gap: var(--viking-space-1);
795
-
796
- viking-app-icon,
797
- viking-icon {
798
- color: var(--viking-warning, var(--color-warning));
799
- }
800
- }
801
-
802
- .gauge-wrapper {
803
- display: flex;
804
- flex-direction: column;
805
- align-items: center;
806
- position: relative;
807
- width: 100%;
808
- }
809
-
810
- .gauge-center-text {
811
- position: absolute;
812
- bottom: 0;
813
- left: 50%;
814
- transform: translateX(-50%);
815
- display: flex;
816
- flex-direction: column;
817
- align-items: center;
818
- width: 100%;
819
-
820
- &.threat-text {
821
- color: var(--viking-accent);
822
- }
823
-
824
- &.main-text {
825
- color: var(--viking-danger, var(--color-gauge-red));
826
- }
827
-
828
- &.stability-text {
829
- color: var(--viking-accent, var(--color-primary));
830
- }
831
-
832
- .unit {
833
- font-size: var(--viking-font-size-sm);
834
- margin-bottom: var(--viking-space-1);
835
- color: var(--viking-text-muted, var(--text-muted));
836
- text-transform: uppercase;
837
- letter-spacing: var(--viking-letter-spacing-caps, 0.1em);
838
- }
839
-
840
- .value {
841
- font-size: calc(var(--viking-font-size) * 2.25);
842
- line-height: var(--viking-line-height-tight, 1);
843
- color: var(--viking-text, var(--text-color));
844
- font-weight: var(--viking-font-weight-bold, 700);
845
-
846
- .unit-symbol {
847
- font-size: var(--viking-font-size-md);
848
- font-weight: var(--viking-font-weight-medium, 500);
849
- color: var(--viking-text-muted, var(--text-muted));
850
- }
851
- }
852
- }
853
-
854
- html[data-theme='light'] {
855
- .gauge-card,
856
- .ml-stat-panel {
857
- background: var(--viking-surface-recipe, var(--viking-surface));
858
- }
859
- }