@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,18 @@
1
+ /*! DEML Design Tokens — compiled from Viking-UI canonical tokens.
2
+ * Static CSS: npm run build:viking-ui:package */
3
+ @use 'tokens';
4
+
5
+ body {
6
+ font-size: var(--base-font-size);
7
+ color: var(--text-color);
8
+ background-color: var(--bg-color);
9
+ }
10
+
11
+ h1,
12
+ h2,
13
+ h3,
14
+ h4,
15
+ h5,
16
+ h6 {
17
+ letter-spacing: var(--header-letter-spacing);
18
+ }
@@ -0,0 +1,5 @@
1
+ /*! DEML Design Tokens — canonical source: packages/viking-ui/src/styles/_variables.scss
2
+ * Static CSS: npm run build:viking-ui:package (or python scripts/sync_design_system.py) */
3
+ @use 'variables';
4
+ @use 'series-colors';
5
+ @use 'legacy-aliases';
@@ -1,5 +1,23 @@
1
1
  // Static CSS bundle entry — tokens + page shell + footer + navbar + a11y for non-Angular apps.
2
+ @use 'fonts';
3
+ @use 'typography';
2
4
  @use 'viking-ui' as *;
3
- @use '../../../../../packages/deml-design-system/src/components/a11y' as *;
5
+ @use 'static-primitives';
6
+ @use 'buttons' as *;
7
+ @use 'input' as *;
8
+ @use 'drakkar-buttons' as *;
9
+ @use 'components/a11y' as *;
4
10
  @use 'static-navbar' as *;
5
- @use '../lib/footer/footer' as *;
11
+ @use 'components/footer' as *;
12
+ @use 'components/whitepaper-cta' as *;
13
+ @use 'surfaces/marketing-theme' as *;
14
+ @use 'surfaces/marketing-cta' as *;
15
+ @use 'surfaces/marketing-global' as *;
16
+ @use 'surfaces/marketing-docs-bento' as *;
17
+ @use 'surfaces/marketing-landing' as *;
18
+ @use 'surfaces/marketing-publication' as *;
19
+ @use 'surfaces/docs-showcase' as *;
20
+ @use 'surfaces/docs-global' as *;
21
+ @use 'surfaces/docs-shell' as *;
22
+ @use 'surfaces/backend' as *;
23
+ @use 'surfaces/swagger-ui' as *;
@@ -1,94 +1,173 @@
1
+ @use 'variables';
2
+ @use 'series-colors';
3
+ @use 'legacy-aliases';
4
+ @use 'typography';
5
+ @use 'component-primitives';
6
+ @use 'forms';
7
+ @use 'buttons';
8
+ @use 'layout-rhythm';
9
+ @use 'layout-enforcement';
1
10
  @use 'page-shell';
2
11
  @use 'layout-shell';
3
12
 
4
13
  // ============================================================================
5
14
  // Viking-UI design tokens
6
15
  // ----------------------------------------------------------------------------
7
- // DEML clinical design system Viking-UI patterns on THEME.md tokens.
8
- // Lab coat aesthetic: crayola-blue accents, sharp borders, no gradients.
9
- // 8px grid. 16px main / 14px UI font floors. No colors outside THEME.md.
16
+ // Premium engineering aestheticdark-first navy surfaces, metallic accents,
17
+ // electric blue primary + crimson secondary. Maps to parent DEML tokens when
18
+ // present for Angular app compatibility; falls back to _variables.scss.
10
19
  // ============================================================================
11
20
 
12
21
  :root {
13
- /* Accent (Viking "accent" concept -> Material primary) */
14
- --viking-accent: var(--color-primary, #2176ff);
15
- --viking-accent-content: var(--color-on-primary, #ffffff);
16
- --viking-accent-soft: color-mix(in srgb, var(--viking-accent) 12%, transparent);
17
- --viking-accent-strong: var(--color-primary-container, #33a1fd);
22
+ /* Accent electric blue primary, crimson secondary */
23
+ --viking-accent: var(--color-primary, var(--viking-electric-500));
24
+ --viking-accent-hover: var(--viking-electric-400);
25
+ --viking-accent-content: var(--color-on-primary, var(--viking-white-pure));
26
+ --viking-accent-soft: color-mix(in srgb, var(--viking-accent) 18%, transparent);
27
+ --viking-accent-strong: var(--color-primary-container, var(--viking-electric-300));
28
+
29
+ --viking-accent-secondary: var(--accent-color, var(--viking-crimson-600));
30
+ --viking-accent-secondary-hover: var(--viking-crimson-500);
31
+ --viking-accent-secondary-content: var(--viking-white-pure);
32
+ --viking-accent-secondary-soft: color-mix(in srgb, var(--viking-accent-secondary) 16%, transparent);
18
33
 
19
34
  /* Surfaces */
20
- --viking-bg: var(--bg-color, #ffffff);
21
- --viking-surface: var(--card-bg, #ffffff);
22
- --viking-surface-alt: var(--color-surface-variant, color-mix(in srgb, #31393c 5%, #ffffff));
23
- --viking-overlay-backdrop: color-mix(in srgb, var(--jet-black, #31393c) 55%, transparent);
35
+ --viking-bg: var(--bg-color, var(--viking-charcoal-900));
36
+ --viking-surface: var(--card-bg, var(--viking-charcoal-800));
37
+ --viking-surface-alt: var(--color-surface-variant, var(--viking-charcoal-700));
38
+ --viking-surface-raised: var(--viking-charcoal-600);
39
+ --viking-overlay-backdrop: color-mix(in srgb, var(--viking-charcoal-950) 72%, transparent);
24
40
 
25
41
  /* Text */
26
- --viking-text: var(--text-color, #31393c);
27
- --viking-text-muted: var(--text-muted, color-mix(in srgb, #31393c 72%, #ffffff));
28
- --viking-text-inverted: var(--color-on-primary, #ffffff);
29
-
30
- /* Borders / focus */
31
- --viking-border: var(--border, color-mix(in srgb, #31393c 15%, transparent));
32
- --viking-border-strong: var(--border-layout, color-mix(in srgb, #31393c 25%, transparent));
33
- --viking-ring: var(--focus-ring-color, #2176ff);
34
- --viking-ring-width: var(--focus-ring-width, 3px);
42
+ --viking-text: var(--text-color, var(--viking-white));
43
+ --viking-text-muted: var(--text-muted, var(--viking-metallic-200));
44
+ --viking-text-subtle: var(--viking-metallic-300);
45
+ --viking-text-inverted: var(--color-on-primary, var(--viking-charcoal-900));
46
+
47
+ /* Borders / focus fallbacks match _variables.scss premium v2.1 depths */
48
+ --viking-border: var(--border, color-mix(in srgb, var(--viking-metallic-600) 48%, transparent));
49
+ --viking-border-strong: var(--border-layout, color-mix(in srgb, var(--viking-metallic-400) 68%, transparent));
50
+ --viking-border-subtle: color-mix(in srgb, var(--viking-metallic-600) 28%, transparent);
51
+ --viking-ring: var(--focus-ring-color, var(--viking-electric-400));
52
+ --viking-ring-width: var(--focus-ring-width, 2px);
35
53
  --viking-ring-offset: var(--focus-ring-offset, 2px);
36
54
 
37
- /* Status (THEME.md semantic map) */
38
- --viking-success: var(--color-success, #33a1fd);
39
- --viking-warning: var(--color-warning, #fdca40);
40
- --viking-danger: var(--color-error, #f79824);
41
- --viking-info: var(--color-info, #2176ff);
42
- /* Danger-tinted TEXT on light surfaces needs deepening for WCAG AA. */
43
- --viking-danger-text: color-mix(in srgb, var(--viking-danger) 50%, var(--jet-black, #31393c));
44
- /* Text placed ON danger-filled surfaces (carrot orange requires dark text). */
45
- --viking-on-danger: var(--jet-black, #31393c);
46
-
47
- /* Shape (8px grid) */
55
+ /* Status */
56
+ --viking-success: var(--color-success, var(--viking-green-500));
57
+ --viking-warning: var(--color-warning, var(--viking-gold-500));
58
+ --viking-danger: var(--color-error, var(--viking-crimson-500));
59
+ --viking-info: var(--color-info, var(--viking-blue-500));
60
+ --viking-danger-text: color-mix(in srgb, var(--viking-danger) 50%, var(--viking-charcoal-900));
61
+ --viking-on-danger: var(--viking-white-pure);
62
+
63
+ /* Shape */
64
+ --viking-radius-xs: 4px;
65
+ --viking-radius-sm: 6px;
48
66
  --viking-radius: var(--border-radius-md, 8px);
49
- --viking-radius-lg: var(--border-radius-lg, 16px);
67
+ --viking-radius-md: 10px;
68
+ --viking-radius-lg: var(--border-radius-lg, 12px);
69
+ --viking-radius-xl: 16px;
50
70
  --viking-radius-pill: var(--border-radius-pill, 999px);
51
71
 
52
- /* Elevation — sharp and clinical, no diffuse glows */
72
+ /* Elevation */
73
+ --viking-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.2);
53
74
  --viking-shadow-sm: var(
54
75
  --shadow-sm,
55
- 0 1px 2px color-mix(in srgb, #31393c 5%, transparent),
56
- 0 1px 3px color-mix(in srgb, #31393c 10%, transparent)
76
+ 0 1px 2px rgba(0, 0, 0, 0.18),
77
+ 0 1px 3px rgba(0, 0, 0, 0.12),
78
+ inset 0 1px 0 rgba(255, 255, 255, 0.04)
57
79
  );
58
80
  --viking-shadow-md: var(
59
81
  --shadow-md,
60
- 0 4px 6px -1px color-mix(in srgb, #31393c 10%, transparent),
61
- 0 2px 4px -1px color-mix(in srgb, #31393c 6%, transparent)
82
+ 0 2px 4px rgba(0, 0, 0, 0.16),
83
+ 0 4px 8px rgba(0, 0, 0, 0.12),
84
+ inset 0 1px 0 rgba(255, 255, 255, 0.05)
85
+ );
86
+ --viking-shadow-lg: var(
87
+ --shadow-lg,
88
+ 0 4px 8px rgba(0, 0, 0, 0.14),
89
+ 0 12px 24px rgba(0, 0, 0, 0.18),
90
+ inset 0 1px 0 rgba(255, 255, 255, 0.06)
62
91
  );
92
+ --viking-shadow-inner: inset 0 1px 2px rgba(0, 0, 0, 0.14);
63
93
 
64
- /* Typography — 16px main content, 14px bold/UI chrome */
65
- --viking-font-family: 'Inter', sans-serif;
94
+ /* Typography — 16px body floor, 14px Drakkar shell controls */
95
+ --viking-font-family: 'Inter', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto,
96
+ 'Helvetica Neue', Arial, sans-serif;
97
+ --viking-font-family-mono: ui-monospace, 'JetBrains Mono', 'SF Mono', 'Cascadia Code', Consolas,
98
+ monospace;
99
+
100
+ --viking-font-size-2xs: 11px;
101
+ --viking-font-size-xs: 12px;
102
+ --viking-font-size-sm: max(14px, var(--ui-font-size, 14px));
66
103
  --viking-font-size: max(16px, var(--base-font-size, 16px));
67
- --viking-font-size-ui: max(14px, var(--ui-font-size, 14px));
68
- --viking-font-size-lg: max(16px, calc(var(--viking-font-size) * 1.125));
69
- --viking-font-size-xl: max(16px, calc(var(--viking-font-size) * 1.25));
104
+ --viking-font-size-md: max(16px, calc(var(--viking-font-size) * 1.125));
105
+ --viking-font-size-lg: max(16px, calc(var(--viking-font-size) * 1.25));
106
+ --viking-font-size-xl: max(18px, calc(var(--viking-font-size) * 1.5));
107
+ --viking-font-size-2xl: max(20px, calc(var(--viking-font-size) * 1.875));
108
+ --viking-font-size-3xl: max(24px, calc(var(--viking-font-size) * 2.25));
109
+ --viking-font-size-4xl: max(30px, calc(var(--viking-font-size) * 3));
110
+
111
+ /* Legacy aliases (backward compatible) */
112
+ --viking-font-size-ui: var(--viking-font-size-sm);
113
+
114
+ --viking-font-weight-regular: 400;
115
+ --viking-font-weight-medium: 500;
116
+ --viking-font-weight-semibold: 600;
117
+ --viking-font-weight-bold: 700;
118
+
119
+ --viking-line-height-tight: 1.25;
120
+ --viking-line-height-snug: 1.375;
121
+ --viking-line-height-normal: 1.5;
122
+ --viking-line-height-relaxed: 1.625;
123
+ --viking-line-height-loose: 1.75;
70
124
 
71
- /* Controls (8px grid heights) */
72
- --viking-control-height: 40px;
73
- --viking-control-height-sm: 32px;
125
+ --viking-letter-spacing-tight: var(--header-letter-spacing, -0.02em);
126
+ --viking-letter-spacing-normal: 0;
127
+ --viking-letter-spacing-wide: 0.025em;
128
+ --viking-letter-spacing-wider: 0.05em;
129
+ --viking-letter-spacing-caps: 0.08em;
130
+
131
+ /* Controls */
132
+ --viking-control-height: var(--viking-touch-target-min, 44px);
133
+ --viking-control-height-sm: 40px;
74
134
  --viking-control-height-xs: 24px;
75
- --viking-control-padding-x: var(--space-2, 16px);
135
+ --viking-control-padding-x: var(--space-2, var(--viking-space-2, 16px));
76
136
  --viking-btn-min-width: var(--btn-min-width, 120px);
77
137
 
78
- /* Spacing */
138
+ /* Spacing — 4px grid with legacy aliases */
139
+ --viking-grid-unit: 4px;
140
+ --viking-space-0: 0;
141
+ --viking-space-half: var(--space-half, 4px);
79
142
  --viking-space-1: var(--space-1, 8px);
143
+ --viking-space-1-5: var(--space-1-5, 12px);
80
144
  --viking-space-2: var(--space-2, 16px);
81
145
  --viking-space-3: var(--space-3, 24px);
82
146
  --viking-space-4: var(--space-4, 32px);
147
+ --viking-space-5: var(--space-5, 40px);
148
+ --viking-space-6: var(--space-6, 48px);
149
+ --viking-space-7: var(--space-7, 56px);
150
+ --viking-space-8: var(--space-8, 64px);
83
151
 
84
- /* Chart axis labels — compact but WCAG-readable on chart surfaces */
152
+ /* Chart axis labels */
85
153
  --viking-chart-axis-size: 12px;
86
154
 
87
155
  /* Page shell */
88
156
  --viking-container-max-width: var(--container-max-width, 1260px);
157
+ --viking-navbar-height: var(--navbar-height, 64px);
158
+ --viking-sidebar-width: 256px;
89
159
 
90
160
  /* Motion */
91
- --viking-transition: var(--transition-smooth, all 0.2s cubic-bezier(0.4, 0, 0.2, 1));
161
+ --viking-ease-default: cubic-bezier(0.4, 0, 0.2, 1);
162
+ --viking-duration-fast: 150ms;
163
+ --viking-duration: 250ms;
164
+ --viking-duration-slow: 350ms;
165
+ --viking-transition-colors:
166
+ color var(--viking-duration) var(--viking-ease-default),
167
+ background-color var(--viking-duration) var(--viking-ease-default),
168
+ border-color var(--viking-duration) var(--viking-ease-default),
169
+ box-shadow var(--viking-duration) var(--viking-ease-default);
170
+ --viking-transition: var(--transition-smooth, all 0.25s cubic-bezier(0.4, 0, 0.2, 1));
92
171
 
93
172
  /* Layering */
94
173
  --viking-z-overlay: 1000;
@@ -96,7 +175,7 @@
96
175
  --viking-z-tooltip: 1200;
97
176
  }
98
177
 
99
- /* Dark surfaces give the raw danger orange sufficient contrast already. */
178
+ /* Dark surfaces danger text uses full crimson */
100
179
  html[data-theme='dark'] {
101
180
  --viking-danger-text: var(--viking-danger);
102
181
  }
@@ -106,3 +185,86 @@ html[data-theme='dark'] {
106
185
  --viking-danger-text: var(--viking-danger);
107
186
  }
108
187
  }
188
+
189
+ /* Smooth theme transitions on root surfaces */
190
+ html {
191
+ color-scheme: dark light;
192
+ }
193
+
194
+ html,
195
+ body,
196
+ .viking-btn,
197
+ .viking-card,
198
+ .viking-hud-panel,
199
+ .viking-metric-card,
200
+ .viking-panel-card {
201
+ transition: var(--viking-transition-colors);
202
+ }
203
+
204
+ /* Mobile-first control sizing — compact controls from tablet/desktop up */
205
+ @media (min-width: 768px) {
206
+ :root {
207
+ --viking-control-height: 40px;
208
+ --viking-control-height-sm: 32px;
209
+ }
210
+ }
211
+
212
+ /* Global tooltip surface (rendered on document.body by vikingTooltip directive) */
213
+ .viking-tooltip {
214
+ position: fixed;
215
+ z-index: var(--viking-z-tooltip);
216
+ display: inline-flex;
217
+ align-items: center;
218
+ gap: var(--viking-space-1);
219
+ max-width: min(20rem, calc(100vw - var(--viking-space-4)));
220
+ padding: var(--viking-space-half) var(--viking-space-1);
221
+ font-family: var(--viking-font-family);
222
+ font-size: var(--viking-font-size-ui);
223
+ line-height: var(--viking-line-height-snug);
224
+ color: var(--viking-text-inverted);
225
+ background: var(--viking-charcoal-900);
226
+ border: 1px solid var(--viking-border-strong);
227
+ border-radius: var(--viking-radius);
228
+ box-shadow: var(--viking-shadow-md);
229
+ pointer-events: none;
230
+ animation: viking-tooltip-in var(--viking-duration-fast) var(--viking-ease-out);
231
+ }
232
+
233
+ html[data-theme='light'] .viking-tooltip {
234
+ color: var(--viking-white-pure);
235
+ background: var(--viking-charcoal-800);
236
+ border-color: color-mix(in srgb, var(--viking-charcoal-600) 45%, transparent);
237
+ }
238
+
239
+ @media (prefers-color-scheme: light) {
240
+ html:not([data-theme='dark']) .viking-tooltip {
241
+ color: var(--viking-white-pure);
242
+ background: var(--viking-charcoal-800);
243
+ border-color: color-mix(in srgb, var(--viking-charcoal-600) 45%, transparent);
244
+ }
245
+ }
246
+
247
+ .viking-tooltip-text {
248
+ flex: 1;
249
+ min-width: 0;
250
+ }
251
+
252
+ .viking-tooltip-kbd {
253
+ font-family: var(--viking-font-family-mono);
254
+ font-size: var(--viking-font-size-xs);
255
+ padding: 0 var(--viking-space-half);
256
+ border: 1px solid color-mix(in srgb, var(--viking-text-inverted) 35%, transparent);
257
+ border-radius: var(--viking-radius-xs);
258
+ line-height: 1.4;
259
+ white-space: nowrap;
260
+ }
261
+
262
+ .viking-tooltip-host {
263
+ -webkit-tap-highlight-color: transparent;
264
+ }
265
+
266
+ @media (prefers-reduced-motion: reduce) {
267
+ .viking-tooltip {
268
+ animation: none;
269
+ }
270
+ }