@dataengineeringformachinelearning/viking-ui 4.0.3 → 4.0.5

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 +135 -70
  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 +98 -4
  11. package/dist/viking-components.css +161 -70
  12. package/dist/viking-tokens.json +9 -7
  13. package/dist/viking-ui-elements.js +45 -33
  14. package/dist/viking-ui.css +1 -1
  15. package/dist/web-components.js +46 -36
  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 -70
  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 -494
  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 -198
  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 -155
  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 -129
  146. package/src/lib/site-drakkar/site-navbar.scss +0 -2
  147. package/src/lib/site-drakkar/site-navbar.ts +0 -277
  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 -39
  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 -155
  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 -1215
  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 -922
  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 -270
  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 -70
  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 -494
  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,1261 +0,0 @@
1
- /**
2
- * Shadow DOM styles for Viking-UI Web Components.
3
- * All values reference --viking-* tokens inherited from the document :root.
4
- */
5
-
6
- export const VIKING_BUTTON_STYLES = `
7
- :host {
8
- display: inline-flex;
9
- font-family: var(--viking-font-family);
10
- }
11
-
12
- :host([full-width]) {
13
- display: flex;
14
- width: 100%;
15
- }
16
-
17
- :host([full-width]) .viking-btn {
18
- width: 100%;
19
- min-width: 0;
20
- }
21
-
22
- :host([compact]) .viking-btn {
23
- min-width: 0;
24
- }
25
-
26
- :host([square]) {
27
- flex: 0 0 auto;
28
- }
29
-
30
- .viking-btn {
31
- font-family: inherit;
32
- font-size: var(--viking-font-size-ui, var(--viking-font-size-sm));
33
- font-weight: var(--viking-font-weight-semibold);
34
- letter-spacing: var(--viking-letter-spacing-wide);
35
- line-height: var(--viking-line-height-snug);
36
- display: inline-flex;
37
- align-items: center;
38
- justify-content: center;
39
- gap: var(--viking-space-1);
40
- min-height: var(--viking-control-height);
41
- padding: 0 var(--viking-control-padding-x);
42
- border-radius: var(--viking-radius-lg);
43
- border: 1px solid transparent;
44
- cursor: pointer;
45
- text-decoration: none;
46
- transition: var(--viking-transition-interactive);
47
- width: auto;
48
- min-width: var(--viking-btn-min-width, 120px);
49
- white-space: nowrap;
50
- position: relative;
51
- background-clip: padding-box;
52
- isolation: isolate;
53
- user-select: none;
54
- -webkit-tap-highlight-color: transparent;
55
- box-sizing: border-box;
56
- overflow: hidden;
57
- box-shadow: var(--viking-shadow-sm);
58
- }
59
-
60
- .viking-btn::before {
61
- content: "";
62
- position: absolute;
63
- inset: 1px 1px auto;
64
- height: 1px;
65
- background: linear-gradient(
66
- 90deg,
67
- transparent,
68
- color-mix(in srgb, var(--viking-metallic-100) 45%, transparent),
69
- transparent
70
- );
71
- pointer-events: none;
72
- opacity: 0.82;
73
- transition: var(--viking-transition-interactive);
74
- }
75
-
76
- .viking-btn:focus-visible {
77
- outline: var(--viking-ring-width) solid var(--viking-ring);
78
- outline-offset: var(--viking-ring-offset);
79
- z-index: 1;
80
- }
81
-
82
- .viking-btn:disabled,
83
- .viking-btn[aria-busy='true'] {
84
- opacity: var(--viking-state-disabled-opacity);
85
- cursor: not-allowed;
86
- transform: none !important;
87
- box-shadow: none !important;
88
- }
89
-
90
- .viking-btn[aria-busy='true']::before,
91
- .viking-btn[aria-busy='true'] .viking-btn-label {
92
- opacity: 0.85;
93
- transform: translateY(1px);
94
- }
95
-
96
- .viking-btn[aria-busy='true'] .viking-btn-spinner {
97
- opacity: 0.85;
98
- }
99
-
100
- .viking-btn::after {
101
- content: "";
102
- position: absolute;
103
- inset: auto 0 0 0;
104
- height: 1px;
105
- background: linear-gradient(
106
- 90deg,
107
- transparent,
108
- color-mix(
109
- in srgb,
110
- var(--viking-metallic-100) 18%,
111
- transparent
112
- ),
113
- transparent
114
- );
115
- pointer-events: none;
116
- opacity: 0.45;
117
- transition: var(--viking-transition-interactive);
118
- }
119
-
120
- .viking-btn-sm {
121
- min-height: var(--viking-control-height-sm);
122
- padding: 0 var(--viking-space-2);
123
- font-size: var(--viking-font-size-xs);
124
- min-width: auto;
125
- }
126
-
127
- .viking-btn-xs {
128
- min-height: var(--viking-control-height-xs);
129
- padding: 0 var(--viking-space-1);
130
- font-size: var(--viking-font-size-xs);
131
- min-width: auto;
132
- }
133
-
134
- .viking-btn-square {
135
- display: inline-grid;
136
- place-items: center;
137
- width: var(--viking-control-height);
138
- min-width: var(--viking-control-height);
139
- max-width: var(--viking-control-height);
140
- height: var(--viking-control-height);
141
- min-height: var(--viking-control-height);
142
- padding: 0;
143
- line-height: 1;
144
- }
145
-
146
- .viking-btn-square.viking-btn-sm {
147
- width: var(--viking-control-height-sm);
148
- min-width: var(--viking-control-height-sm);
149
- max-width: var(--viking-control-height-sm);
150
- height: var(--viking-control-height-sm);
151
- min-height: var(--viking-control-height-sm);
152
- }
153
-
154
- .viking-btn-square.viking-btn-xs {
155
- width: var(--viking-control-height-xs);
156
- min-width: var(--viking-control-height-xs);
157
- max-width: var(--viking-control-height-xs);
158
- height: var(--viking-control-height-xs);
159
- min-height: var(--viking-control-height-xs);
160
- }
161
-
162
- .viking-btn-square .viking-btn-label {
163
- display: inline-grid;
164
- place-items: center;
165
- width: 100%;
166
- height: 100%;
167
- line-height: 1;
168
- }
169
-
170
- .viking-btn-square ::slotted(*) {
171
- display: inline-flex;
172
- align-items: center;
173
- justify-content: center;
174
- margin: 0;
175
- line-height: 1;
176
- }
177
-
178
- .viking-btn-square ::slotted(svg),
179
- .viking-btn-square ::slotted([data-viking-icon]) {
180
- width: var(--viking-icon-size-md, 20px);
181
- height: var(--viking-icon-size-md, 20px);
182
- }
183
-
184
- ::slotted(viking-icon),
185
- ::slotted(.viking-icon),
186
- ::slotted([data-viking-icon]) {
187
- display: inline-flex;
188
- align-items: center;
189
- justify-content: center;
190
- width: var(--viking-icon-size-md);
191
- height: var(--viking-icon-size-md);
192
- line-height: 1;
193
- flex-shrink: 0;
194
- pointer-events: none;
195
- flex: 0 0 auto;
196
- }
197
-
198
- .viking-btn-outline {
199
- background: var(--viking-surface);
200
- color: var(--viking-text);
201
- border-color: var(--viking-border-strong);
202
- box-shadow: var(--viking-shadow-sm);
203
- }
204
-
205
- .viking-btn-outline:hover:not(:disabled):not([aria-busy='true']) {
206
- background: var(--viking-surface-alt);
207
- border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border-strong));
208
- box-shadow: var(--viking-shadow-md);
209
- transform: translateY(var(--viking-state-hover-lift));
210
- }
211
-
212
- .viking-btn-outline:active:not(:disabled):not([aria-busy='true']) {
213
- transform: translateY(0) scale(var(--viking-state-active-scale));
214
- box-shadow: inset 0 1px 2px
215
- color-mix(in srgb, var(--viking-black) 28%, transparent),
216
- var(--viking-shadow-sm);
217
- border-color: var(--viking-border-strong);
218
- }
219
-
220
- .viking-btn-primary {
221
- background: var(--viking-accent);
222
- color: var(--viking-accent-content);
223
- border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
224
- box-shadow: var(--viking-shadow-sm);
225
- }
226
-
227
- .viking-btn-primary:hover:not(:disabled):not([aria-busy='true']) {
228
- background: var(--viking-accent-hover);
229
- border-color: var(--viking-accent-hover);
230
- box-shadow: var(--viking-shadow-hover);
231
- transform: translateY(var(--viking-state-hover-lift));
232
- }
233
-
234
- .viking-btn-primary:active:not(:disabled):not([aria-busy='true']) {
235
- transform: translateY(0) scale(var(--viking-state-active-scale));
236
- box-shadow: inset 0 1px 2px
237
- color-mix(in srgb, var(--viking-black) 28%, transparent),
238
- var(--viking-shadow-sm);
239
- border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
240
- }
241
-
242
- .viking-btn-secondary {
243
- background: var(--viking-accent-secondary);
244
- color: var(--viking-accent-secondary-content);
245
- border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
246
- box-shadow: var(--viking-shadow-sm);
247
- }
248
-
249
- .viking-btn-secondary:hover:not(:disabled):not([aria-busy='true']) {
250
- background: var(--viking-accent-secondary-hover);
251
- border-color: var(--viking-accent-secondary-hover);
252
- box-shadow: var(--viking-shadow-hover);
253
- transform: translateY(var(--viking-state-hover-lift));
254
- }
255
-
256
- .viking-btn-secondary:active:not(:disabled):not([aria-busy='true']) {
257
- transform: translateY(0) scale(var(--viking-state-active-scale));
258
- box-shadow: inset 0 1px 2px
259
- color-mix(in srgb, var(--viking-black) 28%, transparent),
260
- var(--viking-shadow-sm);
261
- border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
262
- }
263
-
264
- .viking-btn-filled {
265
- background: var(--viking-surface-alt);
266
- color: var(--viking-text);
267
- border-color: var(--viking-border);
268
- box-shadow: var(--viking-shadow-xs);
269
- }
270
-
271
- .viking-btn-filled:hover:not(:disabled):not([aria-busy='true']) {
272
- border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border));
273
- background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface-alt));
274
- box-shadow: var(--viking-shadow-sm);
275
- transform: translateY(var(--viking-state-hover-lift));
276
- }
277
-
278
- .viking-btn-filled:active:not(:disabled):not([aria-busy='true']) {
279
- transform: translateY(0) scale(var(--viking-state-active-scale));
280
- box-shadow: var(--viking-shadow-sm);
281
- border-color: color-mix(in srgb, var(--viking-accent) 20%, var(--viking-border));
282
- background: color-mix(in srgb, var(--viking-surface-alt) 84%, var(--viking-accent));
283
- }
284
-
285
- .viking-btn-danger {
286
- background: var(--viking-danger);
287
- color: var(--viking-on-danger);
288
- border-color: color-mix(in srgb, var(--viking-danger) 85%, var(--viking-black));
289
- box-shadow: var(--viking-shadow-sm);
290
- }
291
-
292
- .viking-btn-danger:hover:not(:disabled):not([aria-busy='true']) {
293
- background: color-mix(in srgb, var(--viking-danger) 88%, var(--viking-white));
294
- border-color: color-mix(in srgb, var(--viking-danger) 92%, var(--viking-white));
295
- box-shadow: var(--viking-shadow-hover);
296
- transform: translateY(var(--viking-state-hover-lift));
297
- }
298
-
299
- .viking-btn-danger:active:not(:disabled):not([aria-busy='true']) {
300
- transform: translateY(0) scale(var(--viking-state-active-scale));
301
- border-color: color-mix(in srgb, var(--viking-danger) 72%, var(--viking-black));
302
- background: color-mix(in srgb, var(--viking-danger) 84%, var(--viking-black));
303
- box-shadow: inset 0 1px 2px
304
- color-mix(in srgb, var(--viking-black) 28%, transparent),
305
- var(--viking-shadow-sm);
306
- }
307
-
308
- .viking-btn-ghost {
309
- background: transparent;
310
- color: var(--viking-text);
311
- min-width: auto;
312
- box-shadow: none;
313
- border-color: transparent;
314
- }
315
-
316
- .viking-btn-ghost:hover:not(:disabled):not([aria-busy='true']) {
317
- background: var(--viking-accent-soft);
318
- color: var(--viking-accent-strong);
319
- }
320
-
321
- .viking-btn-ghost:active:not(:disabled):not([aria-busy='true']) {
322
- transform: translateY(0) scale(var(--viking-state-active-scale));
323
- background: var(--viking-accent-soft);
324
- color: var(--viking-accent-strong);
325
- }
326
-
327
- .viking-btn-subtle {
328
- background: transparent;
329
- color: var(--viking-text-muted);
330
- border-color: var(--viking-border-subtle);
331
- min-width: auto;
332
- box-shadow: none;
333
- }
334
-
335
- .viking-btn-subtle:hover:not(:disabled):not([aria-busy='true']) {
336
- color: var(--viking-text);
337
- background: var(--viking-accent-soft);
338
- border-color: var(--viking-border-strong);
339
- }
340
-
341
- .viking-btn-subtle:active:not(:disabled):not([aria-busy='true']) {
342
- transform: translateY(0) scale(var(--viking-state-active-scale));
343
- border-color: var(--viking-border);
344
- background: color-mix(in srgb, var(--viking-accent-soft) 70%, var(--viking-surface));
345
- box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 24%, transparent);
346
- }
347
-
348
- .viking-btn:active:not(:disabled):not([aria-busy='true']) {
349
- transform: translateY(0) scale(var(--viking-state-active-scale));
350
- }
351
-
352
- .viking-btn-label {
353
- display: inline-flex;
354
- align-items: center;
355
- gap: var(--viking-space-1);
356
- line-height: 1.2;
357
- min-width: 0;
358
- justify-content: center;
359
- text-align: center;
360
- white-space: nowrap;
361
- }
362
-
363
- .viking-btn-spinner {
364
- width: 1.125rem;
365
- height: 1.125rem;
366
- border: 2px solid currentColor;
367
- border-right-color: transparent;
368
- border-radius: 50%;
369
- animation: viking-spin 0.8s linear infinite;
370
- }
371
-
372
- @keyframes viking-spin {
373
- to { transform: rotate(360deg); }
374
- }
375
-
376
- @media (prefers-reduced-motion: reduce) {
377
- .viking-btn-spinner { animation-duration: 0.01ms; }
378
- .viking-btn { transition-duration: 0.01ms; }
379
- }
380
- `;
381
-
382
- export const VIKING_INPUT_STYLES = `
383
- :host {
384
- display: block;
385
- font-family: var(--viking-font-family);
386
- }
387
-
388
- .viking-input-shell {
389
- display: flex;
390
- align-items: center;
391
- gap: var(--viking-space-1);
392
- min-height: var(--viking-control-height);
393
- padding: 0 var(--viking-space-2);
394
- font-family: inherit;
395
- font-size: var(--viking-font-size);
396
- color: var(--viking-text);
397
- background: var(--viking-surface-alt);
398
- border: 1px solid var(--viking-border);
399
- border-radius: var(--viking-radius-sm);
400
- box-shadow: var(--viking-shadow-xs);
401
- transition: var(--viking-transition-interactive);
402
- width: 100%;
403
- min-width: 0;
404
- box-sizing: border-box;
405
- }
406
-
407
- .viking-input-shell:hover:not(.viking-disabled):not(.viking-loading) {
408
- border-color: color-mix(in srgb, var(--viking-accent) 35%, var(--viking-border-strong));
409
- box-shadow: var(--viking-shadow-sm);
410
- }
411
-
412
- .viking-input-shell:focus-within:not(.viking-loading) {
413
- outline: var(--viking-ring-width) solid var(--viking-ring);
414
- outline-offset: var(--viking-ring-offset);
415
- border-color: var(--viking-accent);
416
- box-shadow: var(--viking-shadow-sm);
417
- }
418
-
419
- .viking-input-shell.viking-disabled,
420
- .viking-input-shell.viking-loading {
421
- opacity: var(--viking-state-disabled-opacity);
422
- }
423
-
424
- .viking-input-shell.viking-loading {
425
- cursor: wait;
426
- }
427
-
428
- .viking-input-native {
429
- flex: 1;
430
- min-width: 0;
431
- width: 100%;
432
- border: none;
433
- outline: none !important;
434
- background: transparent;
435
- color: var(--viking-text);
436
- font-family: inherit;
437
- font-size: inherit;
438
- padding: 0;
439
- }
440
-
441
- .viking-input-native::placeholder {
442
- color: var(--viking-text-muted);
443
- }
444
-
445
- input {
446
- flex: 1;
447
- min-width: 0;
448
- border: none;
449
- outline: none !important;
450
- background: transparent;
451
- color: var(--viking-text);
452
- font-family: inherit;
453
- font-size: inherit;
454
- padding: 0;
455
- }
456
-
457
- input::placeholder {
458
- color: var(--viking-text-muted);
459
- }
460
-
461
- input:disabled {
462
- cursor: not-allowed;
463
- }
464
-
465
- .viking-input-clear {
466
- display: inline-flex;
467
- align-items: center;
468
- justify-content: center;
469
- min-width: var(--viking-touch-target-comfort, 44px);
470
- min-height: var(--viking-touch-target-comfort, 44px);
471
- border: none;
472
- background: transparent;
473
- color: var(--viking-text-muted);
474
- cursor: pointer;
475
- padding: var(--viking-space-half);
476
- border-radius: var(--viking-radius-pill);
477
- transition: var(--viking-transition-interactive);
478
- flex-shrink: 0;
479
- -webkit-tap-highlight-color: transparent;
480
- }
481
-
482
- .viking-input-clear:hover {
483
- color: var(--viking-text);
484
- background: var(--viking-accent-soft);
485
- }
486
-
487
- .viking-input-clear:focus-visible {
488
- outline: var(--viking-ring-width) solid var(--viking-ring);
489
- outline-offset: var(--viking-ring-offset);
490
- }
491
-
492
- .viking-input-spinner {
493
- width: 1rem;
494
- height: 1rem;
495
- border: 2px solid var(--viking-text-muted);
496
- border-right-color: transparent;
497
- border-radius: 50%;
498
- animation: viking-spin 0.8s linear infinite;
499
- flex-shrink: 0;
500
- }
501
-
502
- @keyframes viking-spin {
503
- to { transform: rotate(360deg); }
504
- }
505
- `;
506
-
507
- export const VIKING_FIELD_STYLES = `
508
- :host {
509
- display: block;
510
- font-family: var(--viking-font-family);
511
- color: var(--viking-text);
512
- min-width: 0;
513
- }
514
-
515
- :host([hidden]) {
516
- display: none;
517
- }
518
-
519
- :host([width='full']) {
520
- width: 100%;
521
- }
522
-
523
- :host([width='half']) {
524
- width: 100%;
525
- max-width: var(--viking-select-half-max-width, min(100%, 24rem));
526
- }
527
-
528
- .viking-field {
529
- display: flex;
530
- flex-direction: column;
531
- gap: var(--viking-space-1);
532
- }
533
-
534
- .viking-field-label-row {
535
- display: flex;
536
- align-items: baseline;
537
- justify-content: space-between;
538
- gap: var(--viking-space-2);
539
- }
540
-
541
- .viking-field-label {
542
- display: inline-flex;
543
- align-items: center;
544
- gap: var(--viking-space-half);
545
- font-size: var(--viking-font-size-ui);
546
- font-weight: var(--viking-font-weight-bold);
547
- color: var(--viking-text);
548
- line-height: var(--viking-line-height-snug);
549
- cursor: pointer;
550
- }
551
-
552
- .viking-field-required {
553
- color: var(--viking-danger-text);
554
- }
555
-
556
- .viking-field-control {
557
- min-width: 0;
558
- }
559
-
560
- .viking-field-description,
561
- .viking-field-error {
562
- margin: 0;
563
- font-size: var(--viking-font-size-xs);
564
- line-height: var(--viking-line-height-relaxed);
565
- }
566
-
567
- .viking-field-description {
568
- color: var(--viking-text-muted);
569
- }
570
-
571
- .viking-field-error {
572
- color: var(--viking-danger-text);
573
- }
574
- `;
575
-
576
- export const VIKING_BADGE_STYLES = `
577
- :host {
578
- display: inline-flex;
579
- align-items: center;
580
- gap: var(--viking-space-half);
581
- padding: var(--viking-space-half) var(--viking-space-1);
582
- font-family: var(--viking-font-family);
583
- font-size: var(--viking-font-size-xs);
584
- font-weight: var(--viking-font-weight-semibold);
585
- letter-spacing: var(--viking-letter-spacing-wide);
586
- line-height: var(--viking-line-height-snug);
587
- border-radius: var(--viking-radius-pill);
588
- border: 1px solid var(--viking-border);
589
- background: var(--viking-surface-alt);
590
- color: var(--viking-text);
591
- white-space: nowrap;
592
- transition: var(--viking-transition-interactive);
593
- box-shadow: var(--viking-shadow-xs);
594
- }
595
-
596
- :host([size='sm']) {
597
- padding: 0 var(--viking-space-1);
598
- font-size: var(--viking-font-size-2xs);
599
- }
600
-
601
- :host([tone='accent']) {
602
- background: var(--viking-accent);
603
- border-color: color-mix(in srgb, var(--viking-accent) 80%, var(--viking-black));
604
- color: var(--viking-accent-content);
605
- box-shadow: var(--viking-shadow-sm);
606
- }
607
-
608
- :host([tone='secondary']) {
609
- background: color-mix(in srgb, var(--viking-accent-secondary) 16%, var(--viking-surface));
610
- border-color: color-mix(in srgb, var(--viking-accent-secondary) 55%, transparent);
611
- color: var(--viking-accent-secondary);
612
- }
613
-
614
- :host([tone='success']) {
615
- background: color-mix(in srgb, var(--viking-success) 16%, var(--viking-surface));
616
- border-color: color-mix(in srgb, var(--viking-success) 55%, transparent);
617
- color: var(--viking-success);
618
- }
619
-
620
- :host([tone='warning']) {
621
- background: color-mix(in srgb, var(--viking-warning) 18%, var(--viking-surface));
622
- border-color: color-mix(in srgb, var(--viking-warning) 55%, transparent);
623
- color: var(--viking-warning);
624
- }
625
-
626
- :host([tone='danger']) {
627
- background: color-mix(in srgb, var(--viking-danger) 14%, var(--viking-surface));
628
- border-color: color-mix(in srgb, var(--viking-danger) 50%, transparent);
629
- color: var(--viking-danger-text);
630
- }
631
-
632
- :host([tone='info']) {
633
- background: color-mix(in srgb, var(--viking-info) 14%, var(--viking-surface));
634
- border-color: color-mix(in srgb, var(--viking-info) 50%, transparent);
635
- color: var(--viking-info);
636
- }
637
-
638
- :host([tone='muted']),
639
- :host([tone='subtle']) {
640
- color: var(--viking-text-muted);
641
- background: var(--viking-surface);
642
- border-color: var(--viking-border-subtle);
643
- }
644
-
645
- .viking-wc-icon {
646
- flex-shrink: 0;
647
- }
648
-
649
- .viking-badge-remove {
650
- display: inline-flex;
651
- align-items: center;
652
- justify-content: center;
653
- min-width: var(--viking-touch-target-comfort, 44px);
654
- min-height: var(--viking-touch-target-comfort, 44px);
655
- border: none;
656
- background: transparent;
657
- color: currentColor;
658
- cursor: pointer;
659
- padding: var(--viking-space-half);
660
- border-radius: var(--viking-radius-pill);
661
- transition: var(--viking-transition-interactive);
662
- margin-left: calc(var(--viking-space-half) * -1);
663
- }
664
-
665
- .viking-badge-remove:hover {
666
- background: color-mix(in srgb, currentColor 12%, transparent);
667
- }
668
-
669
- .viking-badge-remove:focus-visible {
670
- outline: var(--viking-ring-width) solid var(--viking-ring);
671
- outline-offset: var(--viking-ring-offset);
672
- }
673
- `;
674
-
675
- export const VIKING_CALLOUT_STYLES = `
676
- :host {
677
- display: block;
678
- font-family: var(--viking-font-family);
679
- }
680
-
681
- :host([hidden]) {
682
- display: none;
683
- }
684
-
685
- .viking-callout {
686
- display: flex;
687
- align-items: flex-start;
688
- gap: var(--viking-space-2);
689
- padding: var(--viking-space-2);
690
- border-radius: var(--viking-radius-lg);
691
- border: 1px solid var(--viking-border);
692
- border-left-width: 3px;
693
- background: var(--viking-surface-alt);
694
- color: var(--viking-text);
695
- font-size: var(--viking-font-size-sm);
696
- box-shadow: var(--viking-shadow-sm);
697
- }
698
-
699
- .viking-callout-icon {
700
- flex-shrink: 0;
701
- margin-top: 2px;
702
- color: var(--viking-text-muted);
703
- }
704
-
705
- .viking-callout-body {
706
- flex: 1;
707
- min-width: 0;
708
- }
709
-
710
- .viking-callout-heading {
711
- margin: 0 0 var(--viking-space-half);
712
- font-size: var(--viking-font-size-ui);
713
- font-weight: var(--viking-font-weight-bold);
714
- color: var(--viking-text);
715
- }
716
-
717
- .viking-callout-text {
718
- margin: 0;
719
- color: var(--viking-text);
720
- line-height: var(--viking-line-height-relaxed);
721
- }
722
-
723
- .viking-callout-close {
724
- display: inline-flex;
725
- align-items: center;
726
- justify-content: center;
727
- min-width: var(--viking-touch-target-comfort, 44px);
728
- min-height: var(--viking-touch-target-comfort, 44px);
729
- border: none;
730
- background: transparent;
731
- color: var(--viking-text-muted);
732
- cursor: pointer;
733
- padding: var(--viking-space-half);
734
- border-radius: var(--viking-radius);
735
- transition: var(--viking-transition-interactive);
736
- flex-shrink: 0;
737
- }
738
-
739
- .viking-callout-close:hover {
740
- color: var(--viking-text);
741
- background: color-mix(in srgb, currentColor 8%, transparent);
742
- }
743
-
744
- .viking-callout-close:focus-visible {
745
- outline: var(--viking-ring-width) solid var(--viking-ring);
746
- outline-offset: var(--viking-ring-offset);
747
- }
748
-
749
- .viking-callout-accent {
750
- border-color: var(--viking-accent);
751
- border-left-color: var(--viking-accent);
752
- background: var(--viking-accent-soft);
753
- }
754
-
755
- .viking-callout-accent .viking-callout-icon {
756
- color: var(--viking-accent);
757
- }
758
-
759
- .viking-callout-secondary {
760
- border-color: color-mix(in srgb, var(--viking-accent-secondary) 45%, transparent);
761
- border-left-color: var(--viking-accent-secondary);
762
- background: var(--viking-accent-secondary-soft);
763
- }
764
-
765
- .viking-callout-secondary .viking-callout-icon {
766
- color: var(--viking-accent-secondary);
767
- }
768
-
769
- .viking-callout-info {
770
- border-color: color-mix(in srgb, var(--viking-info) 45%, transparent);
771
- border-left-color: var(--viking-info);
772
- background: color-mix(in srgb, var(--viking-info) 10%, var(--viking-surface));
773
- }
774
-
775
- .viking-callout-info .viking-callout-icon {
776
- color: var(--viking-info);
777
- }
778
-
779
- .viking-callout-success {
780
- border-color: color-mix(in srgb, var(--viking-success) 45%, transparent);
781
- border-left-color: var(--viking-success);
782
- background: color-mix(in srgb, var(--viking-success) 10%, var(--viking-surface));
783
- }
784
-
785
- .viking-callout-success .viking-callout-icon {
786
- color: var(--viking-success);
787
- }
788
-
789
- .viking-callout-warning {
790
- border-color: color-mix(in srgb, var(--viking-warning) 45%, transparent);
791
- border-left-color: var(--viking-warning);
792
- background: color-mix(in srgb, var(--viking-warning) 12%, var(--viking-surface));
793
- }
794
-
795
- .viking-callout-warning .viking-callout-icon {
796
- color: var(--viking-warning);
797
- }
798
-
799
- .viking-callout-danger {
800
- border-color: var(--viking-danger);
801
- border-left-color: var(--viking-danger);
802
- background: color-mix(in srgb, var(--viking-crimson-600) 22%, var(--viking-surface));
803
- color: var(--viking-white);
804
- }
805
-
806
- .viking-callout-danger .viking-callout-icon {
807
- color: var(--viking-crimson-400);
808
- }
809
-
810
- .viking-callout-danger .viking-callout-text {
811
- color: var(--viking-white);
812
- }
813
- `;
814
-
815
- export const VIKING_SELECT_STYLES = `
816
- :host {
817
- display: block;
818
- font-family: var(--viking-font-family);
819
- min-width: 0;
820
- }
821
-
822
- :host([width='full']) {
823
- width: 100%;
824
- }
825
-
826
- :host([width='half']) {
827
- width: 100%;
828
- max-width: var(--viking-select-half-max-width, min(100%, 24rem));
829
- }
830
-
831
- .viking-field {
832
- display: flex;
833
- flex-direction: column;
834
- gap: var(--viking-space-1);
835
- }
836
-
837
- .viking-field-label {
838
- font-size: var(--viking-font-size-ui);
839
- font-weight: var(--viking-font-weight-bold);
840
- color: var(--viking-text);
841
- }
842
-
843
- .viking-field-description {
844
- margin: 0;
845
- font-size: var(--viking-font-size-xs);
846
- color: var(--viking-text-muted);
847
- }
848
-
849
- .viking-field-error {
850
- margin: 0;
851
- font-size: var(--viking-font-size-xs);
852
- color: var(--viking-danger);
853
- }
854
-
855
- .viking-select-native {
856
- width: 100%;
857
- min-height: var(--viking-control-height);
858
- padding: 0 var(--viking-space-2);
859
- border: 1px solid var(--viking-border-strong);
860
- border-radius: var(--viking-radius);
861
- background: var(--viking-surface);
862
- color: var(--viking-text);
863
- font-family: inherit;
864
- font-size: var(--viking-font-size);
865
- cursor: pointer;
866
- transition: var(--viking-transition-interactive);
867
- box-shadow: var(--viking-shadow-sm);
868
- }
869
-
870
- .viking-select-native:hover:not(:disabled) {
871
- border-color: var(--viking-accent-strong);
872
- box-shadow: var(--viking-shadow-md);
873
- }
874
-
875
- .viking-select-native:focus-visible {
876
- outline: var(--viking-ring-width) solid var(--viking-ring);
877
- outline-offset: var(--viking-ring-offset);
878
- }
879
-
880
- .viking-select-native:disabled {
881
- opacity: var(--viking-state-disabled-opacity);
882
- cursor: not-allowed;
883
- }
884
-
885
- .viking-select-native[aria-invalid='true'] {
886
- border-color: var(--viking-danger);
887
- }
888
- `;
889
-
890
- export const VIKING_MODAL_STYLES = `
891
- :host {
892
- display: contents;
893
- }
894
-
895
- .viking-modal-backdrop {
896
- position: fixed;
897
- inset: 0;
898
- z-index: var(--viking-z-overlay, 10001);
899
- display: flex;
900
- align-items: center;
901
- justify-content: center;
902
- padding: var(--viking-space-3);
903
- background: var(--viking-overlay-backdrop);
904
- backdrop-filter: blur(8px);
905
- -webkit-backdrop-filter: blur(8px);
906
- border: none;
907
- animation: viking-backdrop-in var(--viking-duration-fast) var(--viking-ease-out);
908
- }
909
-
910
- .viking-modal-panel {
911
- display: flex;
912
- flex-direction: column;
913
- gap: var(--viking-space-2);
914
- width: min(522px, calc(100vw - var(--viking-space-4)));
915
- max-height: calc(100vh - var(--viking-space-6));
916
- padding: var(--viking-space-3);
917
- border: 1px solid var(--viking-border-strong);
918
- border-radius: var(--viking-radius-lg);
919
- background: var(--viking-surface);
920
- color: var(--viking-text);
921
- box-shadow: var(--viking-shadow-lg);
922
- font-family: var(--viking-font-family);
923
- position: relative;
924
- overflow: hidden;
925
- animation: viking-modal-in var(--viking-duration) var(--viking-ease-default);
926
- }
927
-
928
- .viking-modal-panel::before {
929
- content: '';
930
- position: absolute;
931
- inset: 0 0 auto;
932
- height: 1px;
933
- background: linear-gradient(
934
- 90deg,
935
- transparent,
936
- color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),
937
- transparent
938
- );
939
- pointer-events: none;
940
- }
941
-
942
- .viking-modal-header {
943
- display: flex;
944
- align-items: flex-start;
945
- justify-content: space-between;
946
- gap: var(--viking-space-2);
947
- padding-bottom: var(--viking-space-1);
948
- border-bottom: 1px solid var(--viking-border-subtle);
949
- }
950
-
951
- .viking-modal-heading {
952
- margin: 0;
953
- font-size: var(--viking-font-size-md);
954
- font-weight: var(--viking-font-weight-bold);
955
- letter-spacing: var(--viking-letter-spacing-tight);
956
- color: var(--viking-text);
957
- line-height: var(--viking-line-height-tight);
958
- }
959
-
960
- .viking-modal-close {
961
- display: inline-flex;
962
- align-items: center;
963
- justify-content: center;
964
- min-width: var(--viking-touch-target-comfort, 44px);
965
- min-height: var(--viking-touch-target-comfort, 44px);
966
- border: 1px solid transparent;
967
- background: transparent;
968
- color: var(--viking-text-muted);
969
- cursor: pointer;
970
- border-radius: var(--viking-radius);
971
- transition: var(--viking-transition-interactive);
972
- flex-shrink: 0;
973
- }
974
-
975
- .viking-modal-close:hover {
976
- color: var(--viking-text);
977
- background: var(--viking-accent-soft);
978
- border-color: var(--viking-border-subtle);
979
- }
980
-
981
- .viking-modal-close:focus-visible {
982
- outline: var(--viking-ring-width) solid var(--viking-ring);
983
- outline-offset: var(--viking-ring-offset);
984
- }
985
-
986
- .viking-modal-body {
987
- overflow-y: auto;
988
- color: var(--viking-text-muted);
989
- font-size: var(--viking-font-size);
990
- line-height: var(--viking-line-height-relaxed);
991
- }
992
-
993
- .viking-modal-footer {
994
- display: flex;
995
- flex-wrap: wrap;
996
- gap: var(--viking-space-2);
997
- justify-content: flex-end;
998
- padding-top: var(--viking-space-2);
999
- border-top: 1px solid var(--viking-border-subtle);
1000
- }
1001
-
1002
- .viking-modal-footer:empty {
1003
- display: none;
1004
- }
1005
-
1006
- @keyframes viking-backdrop-in {
1007
- from { opacity: 0; }
1008
- to { opacity: 1; }
1009
- }
1010
-
1011
- @keyframes viking-modal-in {
1012
- from {
1013
- opacity: 0;
1014
- transform: translateY(var(--viking-space-1)) scale(0.98);
1015
- }
1016
- to {
1017
- opacity: 1;
1018
- transform: translateY(0) scale(1);
1019
- }
1020
- }
1021
-
1022
- @media (prefers-reduced-motion: reduce) {
1023
- .viking-modal-backdrop,
1024
- .viking-modal-panel {
1025
- animation: none;
1026
- }
1027
- }
1028
- `;
1029
-
1030
- export const VIKING_SEARCH_PALETTE_STYLES = `
1031
- :host {
1032
- display: contents;
1033
- }
1034
-
1035
- .viking-search-palette-backdrop {
1036
- position: fixed;
1037
- inset: 0;
1038
- z-index: var(--viking-z-overlay, 10001);
1039
- display: flex;
1040
- align-items: flex-start;
1041
- justify-content: center;
1042
- padding: 10vh var(--viking-space-2) var(--viking-space-2);
1043
- background: var(--viking-overlay-backdrop);
1044
- backdrop-filter: blur(8px);
1045
- -webkit-backdrop-filter: blur(8px);
1046
- border: none;
1047
- animation: viking-backdrop-in var(--viking-duration-fast) var(--viking-ease-out);
1048
- }
1049
-
1050
- .viking-search-palette-backdrop:not([open]) {
1051
- display: none !important;
1052
- pointer-events: none;
1053
- }
1054
-
1055
- .viking-search-palette {
1056
- display: flex;
1057
- flex-direction: column;
1058
- background: var(--viking-surface-raised, var(--viking-surface));
1059
- border: 1px solid var(--viking-border-strong);
1060
- border-radius: var(--viking-radius-lg);
1061
- box-shadow: var(--viking-shadow-lg);
1062
- overflow: hidden;
1063
- max-width: 600px;
1064
- width: min(100%, 600px);
1065
- margin: 0 auto;
1066
- font-family: var(--viking-font-family);
1067
- color: var(--viking-text);
1068
- animation: viking-modal-in var(--viking-duration) var(--viking-ease-default);
1069
- position: relative;
1070
- isolation: isolate;
1071
- }
1072
-
1073
- .viking-search-palette::before {
1074
- content: '';
1075
- position: absolute;
1076
- inset: 0 0 auto;
1077
- height: 1px;
1078
- background: linear-gradient(
1079
- 90deg,
1080
- transparent,
1081
- color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),
1082
- transparent
1083
- );
1084
- pointer-events: none;
1085
- z-index: 1;
1086
- }
1087
-
1088
- .viking-search-palette-header {
1089
- display: flex;
1090
- align-items: center;
1091
- padding: var(--viking-space-2);
1092
- border-bottom: 1px solid var(--viking-border);
1093
- gap: var(--viking-space-1);
1094
- background: color-mix(in srgb, var(--viking-bg) 26%, var(--viking-surface-raised));
1095
- }
1096
-
1097
- .viking-search-palette-header:focus-within {
1098
- border-bottom-color: var(--viking-accent);
1099
- box-shadow: inset 0 -2px 0 var(--viking-accent-soft);
1100
- }
1101
-
1102
- .viking-search-palette-icon {
1103
- color: var(--viking-text-muted);
1104
- flex-shrink: 0;
1105
- }
1106
-
1107
- .viking-search-palette-input {
1108
- flex: 1;
1109
- background: none;
1110
- border: none;
1111
- outline: none;
1112
- font-size: calc(var(--viking-font-size) * 1.05);
1113
- color: var(--viking-text);
1114
- font-family: inherit;
1115
- min-width: 0;
1116
- }
1117
-
1118
- .viking-search-palette-input::placeholder {
1119
- color: var(--viking-text-muted);
1120
- }
1121
-
1122
- .viking-search-palette-close {
1123
- display: inline-flex;
1124
- align-items: center;
1125
- justify-content: center;
1126
- min-width: var(--viking-touch-target-comfort, 44px);
1127
- min-height: var(--viking-touch-target-comfort, 44px);
1128
- border: none;
1129
- background: transparent;
1130
- color: var(--viking-text-muted);
1131
- cursor: pointer;
1132
- padding: var(--viking-space-half);
1133
- border-radius: var(--viking-radius);
1134
- transition: var(--viking-transition-interactive);
1135
- flex-shrink: 0;
1136
- }
1137
-
1138
- .viking-search-palette-close:hover {
1139
- color: var(--viking-text);
1140
- background: var(--viking-accent-soft);
1141
- }
1142
-
1143
- .viking-search-palette-close:focus-visible {
1144
- outline: var(--viking-ring-width) solid var(--viking-ring);
1145
- outline-offset: var(--viking-ring-offset);
1146
- }
1147
-
1148
- .viking-search-palette-body {
1149
- max-height: 50vh;
1150
- overflow-y: auto;
1151
- padding: var(--viking-space-2);
1152
- }
1153
-
1154
- .viking-search-palette-footer {
1155
- display: flex;
1156
- align-items: center;
1157
- justify-content: center;
1158
- gap: var(--viking-space-1);
1159
- padding: var(--viking-space-1) var(--viking-space-2);
1160
- border-top: 1px solid var(--viking-border);
1161
- font-size: calc(var(--viking-font-size) * 0.85);
1162
- color: var(--viking-text-muted);
1163
- }
1164
-
1165
- .viking-kbd {
1166
- display: inline-flex;
1167
- align-items: center;
1168
- justify-content: center;
1169
- min-width: 1.5rem;
1170
- padding: 2px 6px;
1171
- font-family: inherit;
1172
- font-size: calc(var(--viking-font-size) * 0.75);
1173
- border-radius: calc(var(--viking-radius) / 2);
1174
- border: 1px solid var(--viking-border);
1175
- background: var(--viking-surface-alt);
1176
- }
1177
-
1178
- .viking-search-results {
1179
- display: flex;
1180
- flex-direction: column;
1181
- gap: var(--viking-space-1);
1182
- }
1183
-
1184
- .viking-search-group-label {
1185
- margin: var(--viking-space-1) 0 var(--viking-space-half);
1186
- padding: 0 var(--viking-space-1);
1187
- font-size: var(--viking-font-size-2xs);
1188
- font-weight: var(--viking-font-weight-semibold);
1189
- letter-spacing: var(--viking-letter-spacing-caps);
1190
- text-transform: uppercase;
1191
- color: var(--viking-text-muted);
1192
- }
1193
-
1194
- .viking-search-result {
1195
- display: flex;
1196
- align-items: center;
1197
- min-height: var(--viking-control-height-sm, 36px);
1198
- padding: var(--viking-space-1) var(--viking-space-2);
1199
- border-radius: var(--viking-radius);
1200
- background: var(--viking-surface-alt);
1201
- border: 1px solid var(--viking-border-subtle);
1202
- cursor: pointer;
1203
- transition: var(--viking-transition-interactive);
1204
- gap: var(--viking-space-1);
1205
- text-decoration: none;
1206
- color: inherit;
1207
- }
1208
-
1209
- .viking-search-result:hover,
1210
- .viking-search-result.is-selected {
1211
- background: color-mix(in srgb, var(--viking-accent) 10%, var(--viking-surface-alt));
1212
- border-color: color-mix(in srgb, var(--viking-accent) 42%, var(--viking-border-strong));
1213
- box-shadow: var(--viking-shadow-sm);
1214
- }
1215
-
1216
- .viking-search-result:focus-visible {
1217
- outline: var(--viking-ring-width) solid var(--viking-ring);
1218
- outline-offset: var(--viking-ring-offset);
1219
- }
1220
-
1221
- .viking-search-result-title {
1222
- font-size: var(--viking-font-size-sm);
1223
- font-weight: var(--viking-font-weight-semibold);
1224
- color: var(--viking-text);
1225
- }
1226
-
1227
- .viking-search-result-snippet {
1228
- font-size: var(--viking-font-size-xs);
1229
- color: var(--viking-text-muted);
1230
- }
1231
-
1232
- .viking-search-empty {
1233
- padding: var(--viking-space-3);
1234
- text-align: center;
1235
- color: var(--viking-text-muted);
1236
- font-size: var(--viking-font-size-sm);
1237
- }
1238
-
1239
- @keyframes viking-backdrop-in {
1240
- from { opacity: 0; }
1241
- to { opacity: 1; }
1242
- }
1243
-
1244
- @keyframes viking-modal-in {
1245
- from {
1246
- opacity: 0;
1247
- transform: translateY(var(--viking-space-1)) scale(0.98);
1248
- }
1249
- to {
1250
- opacity: 1;
1251
- transform: translateY(0) scale(1);
1252
- }
1253
- }
1254
-
1255
- @media (prefers-reduced-motion: reduce) {
1256
- .viking-search-palette-backdrop,
1257
- .viking-search-palette {
1258
- animation: none;
1259
- }
1260
- }
1261
- `;