@dataengineeringformachinelearning/viking-ui 1.0.1 → 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 -37
  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 +21 -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 -5949
  127. package/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +0 -1
  128. package/types/dataengineeringformachinelearning-viking-ui.d.ts +0 -1374
  129. package/viking.manifest.json +0 -189
@@ -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,4 +1,23 @@
1
- // Static CSS bundle entry — tokens + page shell + footer + navbar for non-Angular apps.
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 *;
5
+ @use 'static-primitives';
6
+ @use 'buttons' as *;
7
+ @use 'input' as *;
8
+ @use 'drakkar-buttons' as *;
9
+ @use 'components/a11y' as *;
3
10
  @use 'static-navbar' as *;
4
- @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 Flux UI + Spartan-inspired patterns on THEME.md.
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
+ }