@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,1837 @@
1
+ @charset "UTF-8";
2
+ /*! Viking-UI Interactive Components — framework-agnostic CSS primitives.
3
+ * Load after design-tokens.css for Astro, Django, or any HTML project.
4
+ * Build: npm run build:viking-ui:package */
5
+ @font-face {
6
+ font-family: "Inter";
7
+ font-style: normal;
8
+ font-weight: 100 900;
9
+ font-display: swap;
10
+ src: url("fonts/inter/InterVariable.woff2") format("woff2 supports variations"), url("fonts/inter/InterVariable.woff2") format("woff2-variations");
11
+ }
12
+ @font-face {
13
+ font-family: "Inter";
14
+ font-style: italic;
15
+ font-weight: 100 900;
16
+ font-display: swap;
17
+ src: url("fonts/inter/InterVariable-Italic.woff2") format("woff2 supports variations"), url("fonts/inter/InterVariable-Italic.woff2") format("woff2-variations");
18
+ }
19
+ :root {
20
+ /* Touch targets — WCAG 2.5.5 / mobile-first minimum hit area */
21
+ --viking-touch-target-min: 44px;
22
+ --viking-touch-target-comfort: 44px;
23
+ /* Interactive state */
24
+ --viking-state-disabled-opacity: 0.48;
25
+ --viking-state-hover-lift: -1px;
26
+ --viking-state-active-scale: 0.985;
27
+ --viking-state-press-inset: inset 0 1px 2px rgba(0, 0, 0, 0.18);
28
+ --viking-shadow-hover: var(
29
+ --shadow-hover,
30
+ 0 8px 16px rgba(0, 0, 0, 0.14),
31
+ 0 4px 8px rgba(0, 0, 0, 0.1),
32
+ inset 0 1px 0 rgba(255, 255, 255, 0.06)
33
+ );
34
+ --viking-surface-highlight: inset 0 1px 0 rgba(255, 255, 255, 0.06);
35
+ --viking-surface-recipe: var(--viking-surface) linear-gradient(180deg, rgba(255, 255, 255, 0.03) 0%, transparent 100%);
36
+ --viking-transition-interactive:
37
+ color var(--viking-duration) var(--viking-ease-default),
38
+ background-color var(--viking-duration) var(--viking-ease-default),
39
+ border-color var(--viking-duration) var(--viking-ease-default),
40
+ box-shadow var(--viking-duration) var(--viking-ease-default),
41
+ transform var(--viking-duration-fast) var(--viking-ease-default),
42
+ opacity var(--viking-duration-fast) var(--viking-ease-default);
43
+ --viking-transition-transform: transform var(--viking-duration-fast) var(--viking-ease-default);
44
+ }
45
+
46
+ /* Shared keyframes */
47
+ @keyframes viking-fade-in {
48
+ from {
49
+ opacity: 0;
50
+ }
51
+ to {
52
+ opacity: 1;
53
+ }
54
+ }
55
+ @keyframes viking-slide-up {
56
+ from {
57
+ opacity: 0;
58
+ transform: translateY(8px);
59
+ }
60
+ to {
61
+ opacity: 1;
62
+ transform: translateY(0);
63
+ }
64
+ }
65
+ @keyframes viking-slide-in-right {
66
+ from {
67
+ opacity: 0;
68
+ transform: translateX(16px);
69
+ }
70
+ to {
71
+ opacity: 1;
72
+ transform: translateX(0);
73
+ }
74
+ }
75
+ @keyframes viking-modal-in {
76
+ from {
77
+ opacity: 0;
78
+ transform: translateY(12px) scale(0.98);
79
+ }
80
+ to {
81
+ opacity: 1;
82
+ transform: translateY(0) scale(1);
83
+ }
84
+ }
85
+ @keyframes viking-backdrop-in {
86
+ from {
87
+ opacity: 0;
88
+ }
89
+ to {
90
+ opacity: 1;
91
+ }
92
+ }
93
+ @keyframes viking-shimmer {
94
+ from {
95
+ background-position: 120% 0;
96
+ }
97
+ to {
98
+ background-position: -80% 0;
99
+ }
100
+ }
101
+ @keyframes viking-pulse-soft {
102
+ 0%, 100% {
103
+ opacity: 1;
104
+ }
105
+ 50% {
106
+ opacity: 0.72;
107
+ }
108
+ }
109
+ @keyframes viking-shake {
110
+ 0%, 100% {
111
+ transform: translateX(0);
112
+ }
113
+ 20%, 60% {
114
+ transform: translateX(-4px);
115
+ }
116
+ 40%, 80% {
117
+ transform: translateX(4px);
118
+ }
119
+ }
120
+ @keyframes viking-tooltip-in {
121
+ from {
122
+ opacity: 0;
123
+ transform: translateY(4px) scale(0.96);
124
+ }
125
+ to {
126
+ opacity: 1;
127
+ transform: translateY(0) scale(1);
128
+ }
129
+ }
130
+ @keyframes viking-spin {
131
+ to {
132
+ transform: rotate(360deg);
133
+ }
134
+ }
135
+ /* Shared focus-ring utilities — use on interactive hosts without duplicating tokens */
136
+ .viking-focus-ring:focus-visible {
137
+ outline: var(--viking-ring-width) solid var(--viking-ring);
138
+ outline-offset: var(--viking-ring-offset);
139
+ }
140
+
141
+ .viking-focus-ring-inset:focus-visible {
142
+ outline: var(--viking-ring-width) solid var(--viking-ring);
143
+ outline-offset: calc(var(--viking-ring-offset) * -1);
144
+ }
145
+
146
+ /* Expand visual-only controls to touch-friendly hit areas without changing layout */
147
+ .viking-touch-target {
148
+ position: relative;
149
+ min-width: var(--viking-touch-target-min);
150
+ min-height: var(--viking-touch-target-min);
151
+ }
152
+
153
+ .viking-touch-target::before {
154
+ content: "";
155
+ position: absolute;
156
+ inset: 50%;
157
+ width: max(100%, var(--viking-touch-target-min));
158
+ height: max(100%, var(--viking-touch-target-min));
159
+ transform: translate(-50%, -50%);
160
+ }
161
+
162
+ @media (min-width: 768px) {
163
+ :root {
164
+ --viking-touch-target-comfort: 36px;
165
+ }
166
+ }
167
+ @media (prefers-reduced-motion: reduce) {
168
+ *,
169
+ ::before,
170
+ ::after {
171
+ animation-duration: 0.01ms !important;
172
+ animation-iteration-count: 1 !important;
173
+ transition-duration: 0.01ms !important;
174
+ }
175
+ }
176
+ .viking-heading {
177
+ margin: 0;
178
+ font-weight: var(--viking-font-weight-bold);
179
+ letter-spacing: var(--viking-letter-spacing-tight);
180
+ line-height: var(--viking-line-height-tight);
181
+ color: var(--viking-text);
182
+ }
183
+
184
+ .viking-heading-xl {
185
+ font-size: clamp(var(--viking-font-size-2xl), 4vw, var(--viking-font-size-4xl));
186
+ }
187
+
188
+ .viking-heading-lg {
189
+ font-size: var(--viking-font-size-xl);
190
+ }
191
+
192
+ .viking-heading-sm {
193
+ font-size: var(--viking-font-size-lg);
194
+ }
195
+
196
+ .viking-text {
197
+ margin: 0;
198
+ line-height: var(--viking-line-height-relaxed);
199
+ color: var(--viking-text);
200
+ }
201
+
202
+ .viking-text-muted {
203
+ margin: 0;
204
+ line-height: var(--viking-line-height-relaxed);
205
+ color: var(--viking-text-muted);
206
+ max-width: var(--viking-content-readable-max-width, 48rem);
207
+ }
208
+
209
+ .viking-label {
210
+ display: block;
211
+ font-size: var(--viking-font-size-xs);
212
+ font-weight: var(--viking-font-weight-semibold);
213
+ letter-spacing: var(--viking-letter-spacing-caps);
214
+ text-transform: uppercase;
215
+ color: var(--viking-text-muted);
216
+ }
217
+
218
+ .viking-metric {
219
+ display: block;
220
+ font-size: var(--viking-font-size-2xl);
221
+ font-weight: var(--viking-font-weight-bold);
222
+ font-variant-numeric: tabular-nums;
223
+ color: var(--viking-text);
224
+ }
225
+
226
+ .viking-badge {
227
+ display: inline-flex;
228
+ align-items: center;
229
+ gap: var(--viking-space-half);
230
+ padding: var(--viking-space-half) var(--viking-space-1);
231
+ font-size: var(--viking-font-size-xs);
232
+ font-weight: var(--viking-font-weight-semibold);
233
+ letter-spacing: var(--viking-letter-spacing-wide);
234
+ border-radius: var(--viking-radius-pill);
235
+ border: 1px solid var(--viking-border);
236
+ background: var(--viking-surface-alt);
237
+ color: var(--viking-text);
238
+ white-space: nowrap;
239
+ }
240
+
241
+ .viking-badge-accent {
242
+ background: var(--viking-accent);
243
+ border-color: color-mix(in srgb, var(--viking-accent) 80%, var(--viking-black));
244
+ color: var(--viking-accent-content);
245
+ }
246
+
247
+ .viking-badge-success {
248
+ background: color-mix(in srgb, var(--viking-success) 18%, var(--viking-surface));
249
+ border-color: color-mix(in srgb, var(--viking-success) 40%, transparent);
250
+ color: var(--viking-success);
251
+ }
252
+
253
+ .viking-badge-warning {
254
+ background: color-mix(in srgb, var(--viking-warning) 18%, var(--viking-surface));
255
+ border-color: color-mix(in srgb, var(--viking-warning) 40%, transparent);
256
+ color: var(--viking-warning);
257
+ }
258
+
259
+ .viking-badge-danger {
260
+ background: color-mix(in srgb, var(--viking-danger) 18%, var(--viking-surface));
261
+ border-color: color-mix(in srgb, var(--viking-danger) 40%, transparent);
262
+ color: var(--viking-danger);
263
+ }
264
+
265
+ .viking-badge-subtle {
266
+ background: var(--viking-surface-alt);
267
+ color: var(--viking-text-muted);
268
+ font-size: var(--viking-font-size-2xs);
269
+ }
270
+
271
+ .viking-callout-static {
272
+ padding: var(--viking-space-2);
273
+ border-radius: var(--viking-radius);
274
+ border: 1px solid var(--viking-border);
275
+ background: var(--viking-surface-alt);
276
+ }
277
+
278
+ .viking-callout-static strong {
279
+ display: block;
280
+ margin-bottom: var(--viking-space-half);
281
+ }
282
+
283
+ .viking-callout-static p {
284
+ margin: 0;
285
+ font-size: var(--viking-font-size-sm);
286
+ color: var(--viking-text-muted);
287
+ }
288
+
289
+ .viking-callout-info {
290
+ border-color: color-mix(in srgb, var(--viking-accent) 35%, var(--viking-border));
291
+ background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface));
292
+ }
293
+
294
+ .viking-callout-warning {
295
+ border-color: color-mix(in srgb, var(--viking-warning) 35%, var(--viking-border));
296
+ background: color-mix(in srgb, var(--viking-warning) 8%, var(--viking-surface));
297
+ }
298
+
299
+ .viking-callout-success {
300
+ border-color: color-mix(in srgb, var(--viking-success) 35%, var(--viking-border));
301
+ background: color-mix(in srgb, var(--viking-success) 8%, var(--viking-surface));
302
+ }
303
+
304
+ .viking-callout-danger {
305
+ border-color: color-mix(in srgb, var(--viking-danger) 35%, var(--viking-border));
306
+ background: color-mix(in srgb, var(--viking-danger) 8%, var(--viking-surface));
307
+ }
308
+
309
+ .viking-progress {
310
+ width: 100%;
311
+ height: var(--viking-space-1);
312
+ border-radius: var(--viking-radius-pill);
313
+ background: var(--viking-surface-alt);
314
+ overflow: hidden;
315
+ }
316
+
317
+ .viking-progress-bar {
318
+ height: 100%;
319
+ background: var(--viking-accent);
320
+ border-radius: inherit;
321
+ transition: width var(--viking-duration) var(--viking-ease-out);
322
+ }
323
+
324
+ .viking-progress-indeterminate .viking-progress-bar {
325
+ width: 40%;
326
+ animation: viking-progress-slide 1.2s ease-in-out infinite;
327
+ }
328
+
329
+ @keyframes viking-progress-slide {
330
+ 0% {
331
+ transform: translateX(-100%);
332
+ }
333
+ 100% {
334
+ transform: translateX(350%);
335
+ }
336
+ }
337
+ .viking-skeleton-row {
338
+ display: flex;
339
+ align-items: center;
340
+ gap: var(--viking-space-2);
341
+ }
342
+
343
+ .viking-skeleton-lines {
344
+ flex: 1;
345
+ display: flex;
346
+ flex-direction: column;
347
+ gap: var(--viking-space-1);
348
+ }
349
+
350
+ .viking-skeleton {
351
+ background: linear-gradient(90deg, var(--viking-surface-alt) 25%, var(--viking-surface-raised) 50%, var(--viking-surface-alt) 75%);
352
+ background-size: 200% 100%;
353
+ animation: viking-shimmer 1.5s ease-in-out infinite;
354
+ border-radius: var(--viking-radius-sm);
355
+ }
356
+
357
+ .viking-skeleton-circle {
358
+ width: 3rem;
359
+ height: 3rem;
360
+ border-radius: 50%;
361
+ flex-shrink: 0;
362
+ }
363
+
364
+ .viking-skeleton-line {
365
+ height: 0.75rem;
366
+ }
367
+
368
+ .viking-skeleton-line-short {
369
+ width: 60%;
370
+ }
371
+
372
+ @keyframes viking-shimmer {
373
+ 0% {
374
+ background-position: 200% 0;
375
+ }
376
+ 100% {
377
+ background-position: -200% 0;
378
+ }
379
+ }
380
+ .viking-checkbox-label {
381
+ display: inline-flex;
382
+ align-items: center;
383
+ gap: var(--viking-space-1);
384
+ cursor: pointer;
385
+ font-size: var(--viking-font-size-sm);
386
+ min-height: var(--viking-touch-target-min, 44px);
387
+ }
388
+
389
+ .viking-checkbox-label input {
390
+ width: 1.125rem;
391
+ height: 1.125rem;
392
+ accent-color: var(--viking-accent);
393
+ }
394
+
395
+ .viking-select-native {
396
+ width: 100%;
397
+ min-height: var(--viking-control-height, 40px);
398
+ padding: 0 var(--viking-space-2);
399
+ border: 1px solid var(--viking-border);
400
+ border-radius: var(--viking-radius);
401
+ background: var(--viking-surface);
402
+ color: var(--viking-text);
403
+ font-family: inherit;
404
+ font-size: var(--viking-font-size-sm);
405
+ }
406
+
407
+ .viking-select-native:focus-visible {
408
+ outline: var(--viking-ring-width, 2px) solid var(--viking-ring);
409
+ outline-offset: var(--viking-ring-offset, 2px);
410
+ }
411
+
412
+ .viking-table-wrap {
413
+ overflow-x: auto;
414
+ width: 100%;
415
+ }
416
+
417
+ .viking-table {
418
+ width: 100%;
419
+ border-collapse: collapse;
420
+ font-size: var(--viking-font-size-sm);
421
+ }
422
+
423
+ .viking-table th,
424
+ .viking-table td {
425
+ padding: var(--viking-space-1) var(--viking-space-2);
426
+ text-align: left;
427
+ border-bottom: 1px solid var(--viking-border);
428
+ }
429
+
430
+ .viking-table th {
431
+ color: var(--viking-text-muted);
432
+ font-weight: var(--viking-font-weight-semibold);
433
+ }
434
+
435
+ .viking-tabs {
436
+ display: inline-flex;
437
+ gap: var(--viking-space-half);
438
+ padding: var(--viking-space-half);
439
+ border: 1px solid var(--viking-border);
440
+ border-radius: var(--viking-radius);
441
+ background: var(--viking-surface-alt);
442
+ }
443
+
444
+ .viking-tab {
445
+ padding: var(--viking-space-1) var(--viking-space-2);
446
+ border: none;
447
+ border-radius: var(--viking-radius-sm);
448
+ background: transparent;
449
+ color: var(--viking-text-muted);
450
+ font-size: var(--viking-font-size-sm);
451
+ font-weight: var(--viking-font-weight-medium);
452
+ cursor: pointer;
453
+ min-height: var(--viking-touch-target-min, 44px);
454
+ }
455
+
456
+ .viking-tab-active {
457
+ background: var(--viking-surface);
458
+ color: var(--viking-text);
459
+ box-shadow: var(--viking-shadow-xs);
460
+ }
461
+
462
+ .viking-tab:focus-visible {
463
+ outline: var(--viking-ring-width, 2px) solid var(--viking-ring);
464
+ outline-offset: var(--viking-ring-offset, 2px);
465
+ }
466
+
467
+ .viking-page-header-static {
468
+ display: flex;
469
+ flex-direction: column;
470
+ gap: var(--viking-space-2);
471
+ padding: var(--viking-space-4);
472
+ border: 1px solid var(--viking-border);
473
+ border-radius: var(--viking-radius-lg);
474
+ background: var(--viking-surface-recipe, var(--viking-surface));
475
+ box-shadow: var(--viking-shadow-md);
476
+ }
477
+
478
+ .viking-kbd-static {
479
+ display: inline-block;
480
+ font-family: inherit;
481
+ font-size: calc(var(--viking-font-size) * 0.75);
482
+ padding: 2px 6px;
483
+ border-radius: calc(var(--viking-radius) / 2);
484
+ border: 1px solid var(--viking-border);
485
+ background: var(--viking-surface-alt);
486
+ }
487
+
488
+ .viking-divider {
489
+ display: flex;
490
+ align-items: center;
491
+ gap: var(--viking-space-2);
492
+ color: var(--viking-text-muted);
493
+ font-size: var(--viking-font-size-xs);
494
+ }
495
+
496
+ .viking-divider::before,
497
+ .viking-divider::after {
498
+ content: "";
499
+ flex: 1;
500
+ height: 1px;
501
+ background: var(--viking-border);
502
+ }
503
+
504
+ .viking-demo-row {
505
+ display: flex;
506
+ flex-wrap: wrap;
507
+ align-items: center;
508
+ gap: var(--viking-space-2);
509
+ }
510
+
511
+ .viking-demo-row-stack {
512
+ flex-direction: column;
513
+ align-items: stretch;
514
+ }
515
+
516
+ .viking-breadcrumbs-static {
517
+ font-size: var(--viking-font-size-sm);
518
+ }
519
+
520
+ .viking-breadcrumbs-list {
521
+ display: flex;
522
+ flex-wrap: wrap;
523
+ align-items: center;
524
+ gap: var(--viking-space-1);
525
+ margin: 0;
526
+ padding: 0;
527
+ list-style: none;
528
+ }
529
+
530
+ .viking-breadcrumbs-list li:not(:last-child)::after {
531
+ content: "/";
532
+ margin-left: var(--viking-space-1);
533
+ color: var(--viking-text-muted);
534
+ }
535
+
536
+ .viking-breadcrumbs-list a {
537
+ color: var(--viking-accent);
538
+ text-decoration: none;
539
+ }
540
+
541
+ .viking-breadcrumbs-list a:hover {
542
+ text-decoration: underline;
543
+ }
544
+
545
+ .viking-pagination-static {
546
+ display: flex;
547
+ flex-wrap: wrap;
548
+ align-items: center;
549
+ gap: var(--viking-space-2);
550
+ }
551
+
552
+ .viking-switch-static {
553
+ display: inline-flex;
554
+ align-items: center;
555
+ gap: var(--viking-space-1);
556
+ cursor: pointer;
557
+ font-size: var(--viking-font-size-sm);
558
+ min-height: var(--viking-touch-target-min, 44px);
559
+ }
560
+
561
+ .viking-switch-static input {
562
+ width: 2.5rem;
563
+ height: 1.375rem;
564
+ accent-color: var(--viking-accent);
565
+ }
566
+
567
+ .viking-kanban-demo {
568
+ display: flex;
569
+ flex-wrap: wrap;
570
+ gap: var(--viking-space-2);
571
+ }
572
+
573
+ .viking-kanban-col {
574
+ flex: 1;
575
+ min-width: 10rem;
576
+ padding: var(--viking-space-2);
577
+ display: flex;
578
+ flex-direction: column;
579
+ gap: var(--viking-space-1);
580
+ }
581
+
582
+ .viking-kanban-card {
583
+ padding: var(--viking-space-1) var(--viking-space-2);
584
+ border: 1px solid var(--viking-border);
585
+ border-radius: var(--viking-radius-sm);
586
+ background: var(--viking-surface-alt);
587
+ font-size: var(--viking-font-size-sm);
588
+ }
589
+
590
+ .viking-uptime-demo {
591
+ display: flex;
592
+ flex-direction: column;
593
+ gap: var(--viking-space-1);
594
+ max-width: 20rem;
595
+ }
596
+
597
+ .viking-uptime-segments {
598
+ display: flex;
599
+ gap: 2px;
600
+ height: var(--viking-space-2);
601
+ }
602
+
603
+ .viking-uptime-seg {
604
+ flex: 1;
605
+ border-radius: 1px;
606
+ min-width: 4px;
607
+ }
608
+
609
+ .viking-uptime-up {
610
+ background: var(--viking-success);
611
+ }
612
+
613
+ .viking-uptime-degraded {
614
+ background: var(--viking-warning);
615
+ }
616
+
617
+ .viking-uptime-down {
618
+ background: var(--viking-danger);
619
+ }
620
+
621
+ .viking-sheet-demo {
622
+ max-width: 20rem;
623
+ padding: var(--viking-space-2);
624
+ }
625
+
626
+ .viking-wizard-demo {
627
+ max-width: 24rem;
628
+ padding: var(--viking-space-2);
629
+ display: flex;
630
+ flex-direction: column;
631
+ gap: var(--viking-space-2);
632
+ }
633
+
634
+ @media (prefers-reduced-motion: reduce) {
635
+ .viking-skeleton,
636
+ .viking-progress-indeterminate .viking-progress-bar {
637
+ animation: none;
638
+ }
639
+ }
640
+ .viking-hud-panel {
641
+ display: flex;
642
+ flex-direction: column;
643
+ gap: var(--viking-space-1);
644
+ padding: var(--viking-card-padding);
645
+ border: 1px solid var(--viking-border-strong);
646
+ border-radius: var(--viking-radius-lg);
647
+ background: var(--viking-surface-recipe, var(--viking-surface));
648
+ box-shadow: var(--viking-shadow-md);
649
+ max-width: 20rem;
650
+ }
651
+
652
+ .viking-avatar-static {
653
+ display: inline-flex;
654
+ align-items: center;
655
+ justify-content: center;
656
+ width: 2.5rem;
657
+ height: 2.5rem;
658
+ border-radius: 50%;
659
+ border: 1px solid var(--viking-border);
660
+ background: var(--viking-surface-alt);
661
+ font-size: var(--viking-font-size-xs);
662
+ font-weight: var(--viking-font-weight-bold);
663
+ color: var(--viking-text);
664
+ }
665
+
666
+ .viking-avatar-accent {
667
+ background: var(--viking-accent-soft);
668
+ border-color: var(--viking-accent);
669
+ color: var(--viking-accent);
670
+ }
671
+
672
+ .viking-empty-state-static {
673
+ display: flex;
674
+ flex-direction: column;
675
+ align-items: center;
676
+ gap: var(--viking-space-2);
677
+ padding: var(--viking-space-4);
678
+ text-align: center;
679
+ border: 1px dashed var(--viking-border);
680
+ border-radius: var(--viking-radius-lg);
681
+ max-width: 24rem;
682
+ }
683
+
684
+ .viking-spinner-static {
685
+ display: inline-block;
686
+ width: 1.25rem;
687
+ height: 1.25rem;
688
+ border: 2px solid var(--viking-border);
689
+ border-top-color: var(--viking-accent);
690
+ border-radius: 50%;
691
+ animation: viking-spinner-spin 0.8s linear infinite;
692
+ }
693
+
694
+ @keyframes viking-spinner-spin {
695
+ to {
696
+ transform: rotate(360deg);
697
+ }
698
+ }
699
+ .viking-loading-overlay-demo {
700
+ display: flex;
701
+ flex-direction: column;
702
+ align-items: center;
703
+ gap: var(--viking-space-2);
704
+ padding: var(--viking-space-3);
705
+ max-width: 20rem;
706
+ }
707
+
708
+ .viking-separator-static {
709
+ border: 0;
710
+ border-top: 1px solid var(--viking-border);
711
+ margin: var(--viking-space-1) 0;
712
+ }
713
+
714
+ .viking-icon-badge-static {
715
+ display: inline-flex;
716
+ align-items: center;
717
+ justify-content: center;
718
+ width: var(--viking-icon-badge-size, var(--viking-space-6));
719
+ height: var(--viking-icon-badge-size, var(--viking-space-6));
720
+ padding: var(--viking-icon-badge-padding, var(--viking-space-half));
721
+ box-sizing: border-box;
722
+ border-radius: var(--viking-radius-lg);
723
+ border: none;
724
+ background: var(--viking-accent-soft);
725
+ color: var(--viking-accent-strong);
726
+ box-shadow: var(--viking-shadow-sm);
727
+ font-size: var(--viking-font-size-sm);
728
+ }
729
+
730
+ .viking-textarea-static {
731
+ width: 100%;
732
+ min-height: 5rem;
733
+ padding: var(--viking-space-2);
734
+ border: 1px solid var(--viking-border);
735
+ border-radius: var(--viking-radius);
736
+ background: var(--viking-surface);
737
+ color: var(--viking-text);
738
+ font-family: inherit;
739
+ font-size: var(--viking-font-size-sm);
740
+ resize: vertical;
741
+ }
742
+
743
+ .viking-textarea-static:focus-visible {
744
+ outline: var(--viking-ring-width) solid var(--viking-ring);
745
+ outline-offset: var(--viking-ring-offset);
746
+ }
747
+
748
+ .viking-radio-static {
749
+ border: none;
750
+ padding: 0;
751
+ margin: 0;
752
+ display: flex;
753
+ flex-direction: column;
754
+ gap: var(--viking-space-1);
755
+ }
756
+
757
+ .viking-radio-static label {
758
+ display: inline-flex;
759
+ align-items: center;
760
+ gap: var(--viking-space-1);
761
+ font-size: var(--viking-font-size-sm);
762
+ min-height: var(--viking-touch-target-min, 44px);
763
+ }
764
+
765
+ .viking-slider-static {
766
+ width: 100%;
767
+ accent-color: var(--viking-accent);
768
+ }
769
+
770
+ .viking-otp-static {
771
+ display: flex;
772
+ gap: var(--viking-space-1);
773
+ }
774
+
775
+ .viking-otp-static input {
776
+ width: 2.5rem;
777
+ height: 2.5rem;
778
+ text-align: center;
779
+ border: 1px solid var(--viking-border);
780
+ border-radius: var(--viking-radius);
781
+ background: var(--viking-surface);
782
+ color: var(--viking-text);
783
+ font-size: var(--viking-font-size-lg);
784
+ }
785
+
786
+ .viking-file-upload-static {
787
+ display: flex;
788
+ flex-direction: column;
789
+ align-items: center;
790
+ gap: var(--viking-space-2);
791
+ text-align: center;
792
+ }
793
+
794
+ .viking-pillbox-static {
795
+ display: flex;
796
+ flex-wrap: wrap;
797
+ align-items: center;
798
+ gap: var(--viking-space-1);
799
+ padding: var(--viking-space-1);
800
+ border: 1px solid var(--viking-border);
801
+ border-radius: var(--viking-radius);
802
+ background: var(--viking-surface-alt);
803
+ }
804
+
805
+ .viking-gauge-demo,
806
+ .viking-ring-gauge-demo {
807
+ display: flex;
808
+ flex-direction: column;
809
+ align-items: center;
810
+ gap: var(--viking-space-1);
811
+ }
812
+
813
+ .viking-chart-empty-static {
814
+ text-align: center;
815
+ }
816
+
817
+ .viking-status-metric-row {
818
+ display: flex;
819
+ flex-wrap: wrap;
820
+ align-items: center;
821
+ gap: var(--viking-space-2);
822
+ padding: var(--viking-space-2);
823
+ border: 1px solid var(--viking-border);
824
+ border-radius: var(--viking-radius);
825
+ background: var(--viking-surface-alt);
826
+ }
827
+
828
+ .viking-bar-static {
829
+ display: flex;
830
+ flex-direction: column;
831
+ gap: var(--viking-space-half);
832
+ max-width: 16rem;
833
+ }
834
+
835
+ .viking-bar-track {
836
+ width: 100%;
837
+ height: var(--viking-space-1);
838
+ border-radius: var(--viking-radius-pill);
839
+ background: var(--viking-surface-alt);
840
+ overflow: hidden;
841
+ }
842
+
843
+ .viking-bar-fill {
844
+ height: 100%;
845
+ background: var(--viking-accent);
846
+ border-radius: inherit;
847
+ }
848
+
849
+ .viking-nav-menu-static,
850
+ .viking-sidebar-nav-static {
851
+ display: flex;
852
+ flex-direction: column;
853
+ gap: var(--viking-space-half);
854
+ max-width: 14rem;
855
+ }
856
+
857
+ .viking-nav-item-static,
858
+ .viking-sidebar-nav-item {
859
+ display: block;
860
+ padding: var(--viking-space-1) var(--viking-space-2);
861
+ border-radius: var(--viking-radius-sm);
862
+ color: var(--viking-text-muted);
863
+ text-decoration: none;
864
+ font-size: var(--viking-font-size-sm);
865
+ }
866
+
867
+ .viking-nav-item-static.is-active,
868
+ .viking-sidebar-nav-item.is-active {
869
+ background: var(--viking-accent-soft);
870
+ color: var(--viking-accent);
871
+ font-weight: var(--viking-font-weight-semibold);
872
+ }
873
+
874
+ .viking-menubar-static {
875
+ display: inline-flex;
876
+ gap: var(--viking-space-half);
877
+ padding: var(--viking-space-half);
878
+ border: 1px solid var(--viking-border);
879
+ border-radius: var(--viking-radius);
880
+ background: var(--viking-surface-alt);
881
+ }
882
+
883
+ .viking-command-static {
884
+ display: flex;
885
+ flex-direction: column;
886
+ gap: var(--viking-space-1);
887
+ }
888
+
889
+ .viking-accordion-static {
890
+ padding: var(--viking-space-2);
891
+ border: 1px solid var(--viking-border);
892
+ border-radius: var(--viking-radius);
893
+ background: var(--viking-surface-alt);
894
+ }
895
+
896
+ .viking-accordion-static summary {
897
+ cursor: pointer;
898
+ list-style: none;
899
+ }
900
+
901
+ .viking-accordion-static summary::-webkit-details-marker {
902
+ display: none;
903
+ }
904
+
905
+ .viking-timeline-static {
906
+ margin: 0;
907
+ padding: 0 0 0 var(--viking-space-3);
908
+ border-left: 2px solid var(--viking-border);
909
+ list-style: none;
910
+ display: flex;
911
+ flex-direction: column;
912
+ gap: var(--viking-space-2);
913
+ }
914
+
915
+ .viking-toggle-group-static {
916
+ display: inline-flex;
917
+ gap: var(--viking-space-half);
918
+ padding: var(--viking-space-half);
919
+ border: 1px solid var(--viking-border);
920
+ border-radius: var(--viking-radius);
921
+ background: var(--viking-surface-alt);
922
+ }
923
+
924
+ .viking-fab-static {
925
+ position: absolute;
926
+ right: var(--viking-space-2);
927
+ bottom: var(--viking-space-2);
928
+ display: inline-flex;
929
+ align-items: center;
930
+ justify-content: center;
931
+ width: 3rem;
932
+ height: 3rem;
933
+ border: 1px solid var(--viking-border-strong);
934
+ border-radius: 50%;
935
+ background: var(--viking-accent);
936
+ color: var(--viking-accent-content);
937
+ font-size: var(--viking-font-size-xl);
938
+ cursor: pointer;
939
+ box-shadow: var(--viking-shadow-md);
940
+ }
941
+
942
+ .viking-scroll-area-static {
943
+ max-height: 8rem;
944
+ overflow-y: auto;
945
+ padding: var(--viking-space-2);
946
+ border: 1px solid var(--viking-border);
947
+ border-radius: var(--viking-radius);
948
+ background: var(--viking-surface-alt);
949
+ }
950
+
951
+ .viking-button-group-static {
952
+ display: inline-flex;
953
+ flex-wrap: wrap;
954
+ gap: var(--viking-space-half);
955
+ }
956
+
957
+ .viking-whitepaper-cta-static {
958
+ display: flex;
959
+ flex-direction: column;
960
+ gap: var(--viking-space-2);
961
+ max-width: 24rem;
962
+ }
963
+
964
+ .viking-search-result-static {
965
+ display: flex;
966
+ flex-direction: column;
967
+ gap: var(--viking-space-half);
968
+ padding: var(--viking-space-1) var(--viking-space-2);
969
+ border-radius: var(--viking-radius);
970
+ border: 1px solid transparent;
971
+ text-decoration: none;
972
+ color: inherit;
973
+ transition: var(--viking-transition-interactive);
974
+ }
975
+
976
+ .viking-search-result-static:hover {
977
+ background: color-mix(in srgb, var(--viking-accent) 5%, transparent);
978
+ border-color: color-mix(in srgb, var(--viking-accent) 30%, transparent);
979
+ }
980
+
981
+ .viking-search-result-title {
982
+ font-size: var(--viking-font-size-sm);
983
+ font-weight: var(--viking-font-weight-semibold);
984
+ color: var(--viking-text);
985
+ }
986
+
987
+ .viking-search-result-snippet {
988
+ font-size: var(--viking-font-size-xs);
989
+ color: var(--viking-text-muted);
990
+ }
991
+
992
+ @media (prefers-reduced-motion: reduce) {
993
+ .viking-spinner-static {
994
+ animation: none;
995
+ }
996
+ }
997
+ .viking-btn,
998
+ a.viking-btn,
999
+ button.viking-btn {
1000
+ font-family: var(--viking-font-family);
1001
+ font-size: var(--viking-font-size-ui);
1002
+ font-weight: var(--viking-font-weight-semibold);
1003
+ letter-spacing: var(--viking-letter-spacing-wide);
1004
+ line-height: var(--viking-line-height-snug);
1005
+ display: inline-flex;
1006
+ align-items: center;
1007
+ justify-content: center;
1008
+ gap: var(--viking-space-1);
1009
+ min-height: var(--viking-control-height);
1010
+ padding: 0 var(--viking-control-padding-x);
1011
+ border-radius: var(--viking-radius);
1012
+ border: 1px solid transparent;
1013
+ cursor: pointer;
1014
+ text-decoration: none;
1015
+ transition: var(--viking-transition-interactive);
1016
+ width: auto;
1017
+ min-width: var(--viking-btn-min-width, 120px);
1018
+ white-space: nowrap;
1019
+ position: relative;
1020
+ user-select: none;
1021
+ -webkit-tap-highlight-color: transparent;
1022
+ }
1023
+ .viking-btn:focus-visible,
1024
+ a.viking-btn:focus-visible,
1025
+ button.viking-btn:focus-visible {
1026
+ outline: var(--viking-ring-width) solid var(--viking-ring);
1027
+ outline-offset: var(--viking-ring-offset);
1028
+ z-index: 1;
1029
+ }
1030
+ .viking-btn:disabled, .viking-btn[aria-busy=true],
1031
+ a.viking-btn:disabled,
1032
+ a.viking-btn[aria-busy=true],
1033
+ button.viking-btn:disabled,
1034
+ button.viking-btn[aria-busy=true] {
1035
+ opacity: var(--viking-state-disabled-opacity);
1036
+ cursor: not-allowed;
1037
+ transform: none !important;
1038
+ box-shadow: none !important;
1039
+ }
1040
+ .viking-btn[aria-busy=true] .viking-btn-label,
1041
+ a.viking-btn[aria-busy=true] .viking-btn-label,
1042
+ button.viking-btn[aria-busy=true] .viking-btn-label {
1043
+ opacity: 0.85;
1044
+ }
1045
+ .viking-btn viking-icon,
1046
+ .viking-btn .viking-icon,
1047
+ a.viking-btn viking-icon,
1048
+ a.viking-btn .viking-icon,
1049
+ button.viking-btn viking-icon,
1050
+ button.viking-btn .viking-icon {
1051
+ flex-shrink: 0;
1052
+ pointer-events: none;
1053
+ }
1054
+
1055
+ .viking-btn-primary,
1056
+ a.viking-btn-primary,
1057
+ button.viking-btn-primary {
1058
+ font-family: var(--viking-font-family);
1059
+ font-size: var(--viking-font-size-ui);
1060
+ font-weight: var(--viking-font-weight-semibold);
1061
+ letter-spacing: var(--viking-letter-spacing-wide);
1062
+ line-height: var(--viking-line-height-snug);
1063
+ display: inline-flex;
1064
+ align-items: center;
1065
+ justify-content: center;
1066
+ gap: var(--viking-space-1);
1067
+ min-height: var(--viking-control-height);
1068
+ padding: 0 var(--viking-control-padding-x);
1069
+ border-radius: var(--viking-radius);
1070
+ border: 1px solid transparent;
1071
+ cursor: pointer;
1072
+ text-decoration: none;
1073
+ transition: var(--viking-transition-interactive);
1074
+ width: auto;
1075
+ min-width: var(--viking-btn-min-width, 120px);
1076
+ white-space: nowrap;
1077
+ position: relative;
1078
+ user-select: none;
1079
+ -webkit-tap-highlight-color: transparent;
1080
+ }
1081
+ .viking-btn-primary:focus-visible,
1082
+ a.viking-btn-primary:focus-visible,
1083
+ button.viking-btn-primary:focus-visible {
1084
+ outline: var(--viking-ring-width) solid var(--viking-ring);
1085
+ outline-offset: var(--viking-ring-offset);
1086
+ z-index: 1;
1087
+ }
1088
+ .viking-btn-primary:disabled, .viking-btn-primary[aria-busy=true],
1089
+ a.viking-btn-primary:disabled,
1090
+ a.viking-btn-primary[aria-busy=true],
1091
+ button.viking-btn-primary:disabled,
1092
+ button.viking-btn-primary[aria-busy=true] {
1093
+ opacity: var(--viking-state-disabled-opacity);
1094
+ cursor: not-allowed;
1095
+ transform: none !important;
1096
+ box-shadow: none !important;
1097
+ }
1098
+ .viking-btn-primary[aria-busy=true] .viking-btn-label,
1099
+ a.viking-btn-primary[aria-busy=true] .viking-btn-label,
1100
+ button.viking-btn-primary[aria-busy=true] .viking-btn-label {
1101
+ opacity: 0.85;
1102
+ }
1103
+ .viking-btn-primary viking-icon,
1104
+ .viking-btn-primary .viking-icon,
1105
+ a.viking-btn-primary viking-icon,
1106
+ a.viking-btn-primary .viking-icon,
1107
+ button.viking-btn-primary viking-icon,
1108
+ button.viking-btn-primary .viking-icon {
1109
+ flex-shrink: 0;
1110
+ pointer-events: none;
1111
+ }
1112
+ .viking-btn-primary,
1113
+ a.viking-btn-primary,
1114
+ button.viking-btn-primary {
1115
+ background: var(--viking-accent);
1116
+ color: var(--viking-accent-content);
1117
+ border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
1118
+ box-shadow: var(--viking-shadow-sm);
1119
+ }
1120
+ .viking-btn-primary:hover:not(:disabled):not([aria-busy=true]),
1121
+ a.viking-btn-primary:hover:not(:disabled):not([aria-busy=true]),
1122
+ button.viking-btn-primary:hover:not(:disabled):not([aria-busy=true]) {
1123
+ background: var(--viking-accent-hover);
1124
+ border-color: var(--viking-accent-hover);
1125
+ color: var(--viking-accent-content);
1126
+ box-shadow: var(--viking-shadow-hover);
1127
+ transform: translateY(var(--viking-state-hover-lift));
1128
+ }
1129
+ .viking-btn-primary:active:not(:disabled):not([aria-busy=true]),
1130
+ a.viking-btn-primary:active:not(:disabled):not([aria-busy=true]),
1131
+ button.viking-btn-primary:active:not(:disabled):not([aria-busy=true]) {
1132
+ transform: translateY(0) scale(var(--viking-state-active-scale));
1133
+ box-shadow: var(--viking-shadow-sm);
1134
+ }
1135
+
1136
+ .viking-btn-secondary,
1137
+ a.viking-btn-secondary,
1138
+ button.viking-btn-secondary {
1139
+ font-family: var(--viking-font-family);
1140
+ font-size: var(--viking-font-size-ui);
1141
+ font-weight: var(--viking-font-weight-semibold);
1142
+ letter-spacing: var(--viking-letter-spacing-wide);
1143
+ line-height: var(--viking-line-height-snug);
1144
+ display: inline-flex;
1145
+ align-items: center;
1146
+ justify-content: center;
1147
+ gap: var(--viking-space-1);
1148
+ min-height: var(--viking-control-height);
1149
+ padding: 0 var(--viking-control-padding-x);
1150
+ border-radius: var(--viking-radius);
1151
+ border: 1px solid transparent;
1152
+ cursor: pointer;
1153
+ text-decoration: none;
1154
+ transition: var(--viking-transition-interactive);
1155
+ width: auto;
1156
+ min-width: var(--viking-btn-min-width, 120px);
1157
+ white-space: nowrap;
1158
+ position: relative;
1159
+ user-select: none;
1160
+ -webkit-tap-highlight-color: transparent;
1161
+ }
1162
+ .viking-btn-secondary:focus-visible,
1163
+ a.viking-btn-secondary:focus-visible,
1164
+ button.viking-btn-secondary:focus-visible {
1165
+ outline: var(--viking-ring-width) solid var(--viking-ring);
1166
+ outline-offset: var(--viking-ring-offset);
1167
+ z-index: 1;
1168
+ }
1169
+ .viking-btn-secondary:disabled, .viking-btn-secondary[aria-busy=true],
1170
+ a.viking-btn-secondary:disabled,
1171
+ a.viking-btn-secondary[aria-busy=true],
1172
+ button.viking-btn-secondary:disabled,
1173
+ button.viking-btn-secondary[aria-busy=true] {
1174
+ opacity: var(--viking-state-disabled-opacity);
1175
+ cursor: not-allowed;
1176
+ transform: none !important;
1177
+ box-shadow: none !important;
1178
+ }
1179
+ .viking-btn-secondary[aria-busy=true] .viking-btn-label,
1180
+ a.viking-btn-secondary[aria-busy=true] .viking-btn-label,
1181
+ button.viking-btn-secondary[aria-busy=true] .viking-btn-label {
1182
+ opacity: 0.85;
1183
+ }
1184
+ .viking-btn-secondary viking-icon,
1185
+ .viking-btn-secondary .viking-icon,
1186
+ a.viking-btn-secondary viking-icon,
1187
+ a.viking-btn-secondary .viking-icon,
1188
+ button.viking-btn-secondary viking-icon,
1189
+ button.viking-btn-secondary .viking-icon {
1190
+ flex-shrink: 0;
1191
+ pointer-events: none;
1192
+ }
1193
+ .viking-btn-secondary,
1194
+ a.viking-btn-secondary,
1195
+ button.viking-btn-secondary {
1196
+ background: var(--viking-accent-secondary);
1197
+ color: var(--viking-accent-secondary-content);
1198
+ border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
1199
+ box-shadow: var(--viking-shadow-sm);
1200
+ }
1201
+ .viking-btn-secondary:hover:not(:disabled):not([aria-busy=true]),
1202
+ a.viking-btn-secondary:hover:not(:disabled):not([aria-busy=true]),
1203
+ button.viking-btn-secondary:hover:not(:disabled):not([aria-busy=true]) {
1204
+ background: var(--viking-accent-secondary-hover);
1205
+ border-color: var(--viking-accent-secondary-hover);
1206
+ color: var(--viking-accent-secondary-content);
1207
+ box-shadow: var(--viking-shadow-hover);
1208
+ transform: translateY(var(--viking-state-hover-lift));
1209
+ }
1210
+ .viking-btn-secondary:active:not(:disabled):not([aria-busy=true]),
1211
+ a.viking-btn-secondary:active:not(:disabled):not([aria-busy=true]),
1212
+ button.viking-btn-secondary:active:not(:disabled):not([aria-busy=true]) {
1213
+ transform: translateY(0) scale(var(--viking-state-active-scale));
1214
+ box-shadow: var(--viking-shadow-sm);
1215
+ }
1216
+
1217
+ .viking-btn-outline,
1218
+ a.viking-btn-outline,
1219
+ button.viking-btn-outline {
1220
+ font-family: var(--viking-font-family);
1221
+ font-size: var(--viking-font-size-ui);
1222
+ font-weight: var(--viking-font-weight-semibold);
1223
+ letter-spacing: var(--viking-letter-spacing-wide);
1224
+ line-height: var(--viking-line-height-snug);
1225
+ display: inline-flex;
1226
+ align-items: center;
1227
+ justify-content: center;
1228
+ gap: var(--viking-space-1);
1229
+ min-height: var(--viking-control-height);
1230
+ padding: 0 var(--viking-control-padding-x);
1231
+ border-radius: var(--viking-radius);
1232
+ border: 1px solid transparent;
1233
+ cursor: pointer;
1234
+ text-decoration: none;
1235
+ transition: var(--viking-transition-interactive);
1236
+ width: auto;
1237
+ min-width: var(--viking-btn-min-width, 120px);
1238
+ white-space: nowrap;
1239
+ position: relative;
1240
+ user-select: none;
1241
+ -webkit-tap-highlight-color: transparent;
1242
+ }
1243
+ .viking-btn-outline:focus-visible,
1244
+ a.viking-btn-outline:focus-visible,
1245
+ button.viking-btn-outline:focus-visible {
1246
+ outline: var(--viking-ring-width) solid var(--viking-ring);
1247
+ outline-offset: var(--viking-ring-offset);
1248
+ z-index: 1;
1249
+ }
1250
+ .viking-btn-outline:disabled, .viking-btn-outline[aria-busy=true],
1251
+ a.viking-btn-outline:disabled,
1252
+ a.viking-btn-outline[aria-busy=true],
1253
+ button.viking-btn-outline:disabled,
1254
+ button.viking-btn-outline[aria-busy=true] {
1255
+ opacity: var(--viking-state-disabled-opacity);
1256
+ cursor: not-allowed;
1257
+ transform: none !important;
1258
+ box-shadow: none !important;
1259
+ }
1260
+ .viking-btn-outline[aria-busy=true] .viking-btn-label,
1261
+ a.viking-btn-outline[aria-busy=true] .viking-btn-label,
1262
+ button.viking-btn-outline[aria-busy=true] .viking-btn-label {
1263
+ opacity: 0.85;
1264
+ }
1265
+ .viking-btn-outline viking-icon,
1266
+ .viking-btn-outline .viking-icon,
1267
+ a.viking-btn-outline viking-icon,
1268
+ a.viking-btn-outline .viking-icon,
1269
+ button.viking-btn-outline viking-icon,
1270
+ button.viking-btn-outline .viking-icon {
1271
+ flex-shrink: 0;
1272
+ pointer-events: none;
1273
+ }
1274
+ .viking-btn-outline,
1275
+ a.viking-btn-outline,
1276
+ button.viking-btn-outline {
1277
+ background: var(--viking-surface);
1278
+ color: var(--viking-text);
1279
+ border-color: var(--viking-border-strong);
1280
+ box-shadow: var(--viking-shadow-sm);
1281
+ }
1282
+ .viking-btn-outline:hover:not(:disabled):not([aria-busy=true]),
1283
+ a.viking-btn-outline:hover:not(:disabled):not([aria-busy=true]),
1284
+ button.viking-btn-outline:hover:not(:disabled):not([aria-busy=true]) {
1285
+ background: var(--viking-surface-alt);
1286
+ border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border-strong));
1287
+ color: var(--viking-text);
1288
+ box-shadow: var(--viking-shadow-md);
1289
+ transform: translateY(var(--viking-state-hover-lift));
1290
+ }
1291
+ .viking-btn-outline:active:not(:disabled):not([aria-busy=true]),
1292
+ a.viking-btn-outline:active:not(:disabled):not([aria-busy=true]),
1293
+ button.viking-btn-outline:active:not(:disabled):not([aria-busy=true]) {
1294
+ transform: translateY(0) scale(var(--viking-state-active-scale));
1295
+ box-shadow: var(--viking-shadow-sm);
1296
+ }
1297
+
1298
+ .viking-btn-danger,
1299
+ a.viking-btn-danger,
1300
+ button.viking-btn-danger {
1301
+ font-family: var(--viking-font-family);
1302
+ font-size: var(--viking-font-size-ui);
1303
+ font-weight: var(--viking-font-weight-semibold);
1304
+ letter-spacing: var(--viking-letter-spacing-wide);
1305
+ line-height: var(--viking-line-height-snug);
1306
+ display: inline-flex;
1307
+ align-items: center;
1308
+ justify-content: center;
1309
+ gap: var(--viking-space-1);
1310
+ min-height: var(--viking-control-height);
1311
+ padding: 0 var(--viking-control-padding-x);
1312
+ border-radius: var(--viking-radius);
1313
+ border: 1px solid transparent;
1314
+ cursor: pointer;
1315
+ text-decoration: none;
1316
+ transition: var(--viking-transition-interactive);
1317
+ width: auto;
1318
+ min-width: var(--viking-btn-min-width, 120px);
1319
+ white-space: nowrap;
1320
+ position: relative;
1321
+ user-select: none;
1322
+ -webkit-tap-highlight-color: transparent;
1323
+ }
1324
+ .viking-btn-danger:focus-visible,
1325
+ a.viking-btn-danger:focus-visible,
1326
+ button.viking-btn-danger:focus-visible {
1327
+ outline: var(--viking-ring-width) solid var(--viking-ring);
1328
+ outline-offset: var(--viking-ring-offset);
1329
+ z-index: 1;
1330
+ }
1331
+ .viking-btn-danger:disabled, .viking-btn-danger[aria-busy=true],
1332
+ a.viking-btn-danger:disabled,
1333
+ a.viking-btn-danger[aria-busy=true],
1334
+ button.viking-btn-danger:disabled,
1335
+ button.viking-btn-danger[aria-busy=true] {
1336
+ opacity: var(--viking-state-disabled-opacity);
1337
+ cursor: not-allowed;
1338
+ transform: none !important;
1339
+ box-shadow: none !important;
1340
+ }
1341
+ .viking-btn-danger[aria-busy=true] .viking-btn-label,
1342
+ a.viking-btn-danger[aria-busy=true] .viking-btn-label,
1343
+ button.viking-btn-danger[aria-busy=true] .viking-btn-label {
1344
+ opacity: 0.85;
1345
+ }
1346
+ .viking-btn-danger viking-icon,
1347
+ .viking-btn-danger .viking-icon,
1348
+ a.viking-btn-danger viking-icon,
1349
+ a.viking-btn-danger .viking-icon,
1350
+ button.viking-btn-danger viking-icon,
1351
+ button.viking-btn-danger .viking-icon {
1352
+ flex-shrink: 0;
1353
+ pointer-events: none;
1354
+ }
1355
+ .viking-btn-danger,
1356
+ a.viking-btn-danger,
1357
+ button.viking-btn-danger {
1358
+ background: var(--viking-danger);
1359
+ color: var(--viking-on-danger);
1360
+ border-color: color-mix(in srgb, var(--viking-danger) 85%, var(--viking-black));
1361
+ box-shadow: var(--viking-shadow-sm);
1362
+ }
1363
+ .viking-btn-danger:hover:not(:disabled):not([aria-busy=true]),
1364
+ a.viking-btn-danger:hover:not(:disabled):not([aria-busy=true]),
1365
+ button.viking-btn-danger:hover:not(:disabled):not([aria-busy=true]) {
1366
+ background: color-mix(in srgb, var(--viking-danger) 88%, var(--viking-white));
1367
+ border-color: color-mix(in srgb, var(--viking-danger) 92%, var(--viking-white));
1368
+ color: var(--viking-on-danger);
1369
+ box-shadow: var(--viking-shadow-hover);
1370
+ transform: translateY(var(--viking-state-hover-lift));
1371
+ }
1372
+ .viking-btn-danger:active:not(:disabled):not([aria-busy=true]),
1373
+ a.viking-btn-danger:active:not(:disabled):not([aria-busy=true]),
1374
+ button.viking-btn-danger:active:not(:disabled):not([aria-busy=true]) {
1375
+ transform: translateY(0) scale(var(--viking-state-active-scale));
1376
+ box-shadow: var(--viking-shadow-sm);
1377
+ }
1378
+
1379
+ .viking-btn-ghost,
1380
+ a.viking-btn-ghost,
1381
+ button.viking-btn-ghost {
1382
+ font-family: var(--viking-font-family);
1383
+ font-size: var(--viking-font-size-ui);
1384
+ font-weight: var(--viking-font-weight-semibold);
1385
+ letter-spacing: var(--viking-letter-spacing-wide);
1386
+ line-height: var(--viking-line-height-snug);
1387
+ display: inline-flex;
1388
+ align-items: center;
1389
+ justify-content: center;
1390
+ gap: var(--viking-space-1);
1391
+ min-height: var(--viking-control-height);
1392
+ padding: 0 var(--viking-control-padding-x);
1393
+ border-radius: var(--viking-radius);
1394
+ border: 1px solid transparent;
1395
+ cursor: pointer;
1396
+ text-decoration: none;
1397
+ transition: var(--viking-transition-interactive);
1398
+ width: auto;
1399
+ min-width: var(--viking-btn-min-width, 120px);
1400
+ white-space: nowrap;
1401
+ position: relative;
1402
+ user-select: none;
1403
+ -webkit-tap-highlight-color: transparent;
1404
+ }
1405
+ .viking-btn-ghost:focus-visible,
1406
+ a.viking-btn-ghost:focus-visible,
1407
+ button.viking-btn-ghost:focus-visible {
1408
+ outline: var(--viking-ring-width) solid var(--viking-ring);
1409
+ outline-offset: var(--viking-ring-offset);
1410
+ z-index: 1;
1411
+ }
1412
+ .viking-btn-ghost:disabled, .viking-btn-ghost[aria-busy=true],
1413
+ a.viking-btn-ghost:disabled,
1414
+ a.viking-btn-ghost[aria-busy=true],
1415
+ button.viking-btn-ghost:disabled,
1416
+ button.viking-btn-ghost[aria-busy=true] {
1417
+ opacity: var(--viking-state-disabled-opacity);
1418
+ cursor: not-allowed;
1419
+ transform: none !important;
1420
+ box-shadow: none !important;
1421
+ }
1422
+ .viking-btn-ghost[aria-busy=true] .viking-btn-label,
1423
+ a.viking-btn-ghost[aria-busy=true] .viking-btn-label,
1424
+ button.viking-btn-ghost[aria-busy=true] .viking-btn-label {
1425
+ opacity: 0.85;
1426
+ }
1427
+ .viking-btn-ghost viking-icon,
1428
+ .viking-btn-ghost .viking-icon,
1429
+ a.viking-btn-ghost viking-icon,
1430
+ a.viking-btn-ghost .viking-icon,
1431
+ button.viking-btn-ghost viking-icon,
1432
+ button.viking-btn-ghost .viking-icon {
1433
+ flex-shrink: 0;
1434
+ pointer-events: none;
1435
+ }
1436
+ .viking-btn-ghost,
1437
+ a.viking-btn-ghost,
1438
+ button.viking-btn-ghost {
1439
+ background: transparent;
1440
+ color: var(--viking-text);
1441
+ min-width: auto;
1442
+ box-shadow: none;
1443
+ border-color: transparent;
1444
+ }
1445
+ .viking-btn-ghost:hover:not(:disabled):not([aria-busy=true]),
1446
+ a.viking-btn-ghost:hover:not(:disabled):not([aria-busy=true]),
1447
+ button.viking-btn-ghost:hover:not(:disabled):not([aria-busy=true]) {
1448
+ background: var(--viking-accent-soft);
1449
+ color: var(--viking-accent-strong);
1450
+ }
1451
+ .viking-btn-ghost:active:not(:disabled):not([aria-busy=true]),
1452
+ a.viking-btn-ghost:active:not(:disabled):not([aria-busy=true]),
1453
+ button.viking-btn-ghost:active:not(:disabled):not([aria-busy=true]) {
1454
+ transform: scale(var(--viking-state-active-scale));
1455
+ }
1456
+
1457
+ .viking-btn-subtle,
1458
+ a.viking-btn-subtle,
1459
+ button.viking-btn-subtle {
1460
+ font-family: var(--viking-font-family);
1461
+ font-size: var(--viking-font-size-ui);
1462
+ font-weight: var(--viking-font-weight-semibold);
1463
+ letter-spacing: var(--viking-letter-spacing-wide);
1464
+ line-height: var(--viking-line-height-snug);
1465
+ display: inline-flex;
1466
+ align-items: center;
1467
+ justify-content: center;
1468
+ gap: var(--viking-space-1);
1469
+ min-height: var(--viking-control-height);
1470
+ padding: 0 var(--viking-control-padding-x);
1471
+ border-radius: var(--viking-radius);
1472
+ border: 1px solid transparent;
1473
+ cursor: pointer;
1474
+ text-decoration: none;
1475
+ transition: var(--viking-transition-interactive);
1476
+ width: auto;
1477
+ min-width: var(--viking-btn-min-width, 120px);
1478
+ white-space: nowrap;
1479
+ position: relative;
1480
+ user-select: none;
1481
+ -webkit-tap-highlight-color: transparent;
1482
+ }
1483
+ .viking-btn-subtle:focus-visible,
1484
+ a.viking-btn-subtle:focus-visible,
1485
+ button.viking-btn-subtle:focus-visible {
1486
+ outline: var(--viking-ring-width) solid var(--viking-ring);
1487
+ outline-offset: var(--viking-ring-offset);
1488
+ z-index: 1;
1489
+ }
1490
+ .viking-btn-subtle:disabled, .viking-btn-subtle[aria-busy=true],
1491
+ a.viking-btn-subtle:disabled,
1492
+ a.viking-btn-subtle[aria-busy=true],
1493
+ button.viking-btn-subtle:disabled,
1494
+ button.viking-btn-subtle[aria-busy=true] {
1495
+ opacity: var(--viking-state-disabled-opacity);
1496
+ cursor: not-allowed;
1497
+ transform: none !important;
1498
+ box-shadow: none !important;
1499
+ }
1500
+ .viking-btn-subtle[aria-busy=true] .viking-btn-label,
1501
+ a.viking-btn-subtle[aria-busy=true] .viking-btn-label,
1502
+ button.viking-btn-subtle[aria-busy=true] .viking-btn-label {
1503
+ opacity: 0.85;
1504
+ }
1505
+ .viking-btn-subtle viking-icon,
1506
+ .viking-btn-subtle .viking-icon,
1507
+ a.viking-btn-subtle viking-icon,
1508
+ a.viking-btn-subtle .viking-icon,
1509
+ button.viking-btn-subtle viking-icon,
1510
+ button.viking-btn-subtle .viking-icon {
1511
+ flex-shrink: 0;
1512
+ pointer-events: none;
1513
+ }
1514
+ .viking-btn-subtle,
1515
+ a.viking-btn-subtle,
1516
+ button.viking-btn-subtle {
1517
+ background: transparent;
1518
+ color: var(--viking-text-muted);
1519
+ border-color: var(--viking-border-subtle);
1520
+ min-width: auto;
1521
+ box-shadow: none;
1522
+ }
1523
+ .viking-btn-subtle:hover:not(:disabled):not([aria-busy=true]),
1524
+ a.viking-btn-subtle:hover:not(:disabled):not([aria-busy=true]),
1525
+ button.viking-btn-subtle:hover:not(:disabled):not([aria-busy=true]) {
1526
+ color: var(--viking-text);
1527
+ background: var(--viking-accent-soft);
1528
+ border-color: var(--viking-border-strong);
1529
+ }
1530
+ .viking-btn-subtle:active:not(:disabled):not([aria-busy=true]),
1531
+ a.viking-btn-subtle:active:not(:disabled):not([aria-busy=true]),
1532
+ button.viking-btn-subtle:active:not(:disabled):not([aria-busy=true]) {
1533
+ transform: scale(var(--viking-state-active-scale));
1534
+ }
1535
+
1536
+ .viking-btn.viking-outline {
1537
+ background: var(--viking-surface);
1538
+ color: var(--viking-text);
1539
+ border-color: var(--viking-border-strong);
1540
+ box-shadow: var(--viking-shadow-sm);
1541
+ }
1542
+ .viking-btn.viking-outline:hover:not(:disabled):not([aria-busy=true]) {
1543
+ background: var(--viking-surface-alt);
1544
+ border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border-strong));
1545
+ color: var(--viking-text);
1546
+ box-shadow: var(--viking-shadow-md);
1547
+ transform: translateY(var(--viking-state-hover-lift));
1548
+ }
1549
+ .viking-btn.viking-outline:active:not(:disabled):not([aria-busy=true]) {
1550
+ transform: translateY(0) scale(var(--viking-state-active-scale));
1551
+ box-shadow: var(--viking-shadow-sm);
1552
+ }
1553
+
1554
+ .viking-btn.viking-primary {
1555
+ background: var(--viking-accent);
1556
+ color: var(--viking-accent-content);
1557
+ border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
1558
+ box-shadow: var(--viking-shadow-sm);
1559
+ }
1560
+ .viking-btn.viking-primary:hover:not(:disabled):not([aria-busy=true]) {
1561
+ background: var(--viking-accent-hover);
1562
+ border-color: var(--viking-accent-hover);
1563
+ color: var(--viking-accent-content);
1564
+ box-shadow: var(--viking-shadow-hover);
1565
+ transform: translateY(var(--viking-state-hover-lift));
1566
+ }
1567
+ .viking-btn.viking-primary:active:not(:disabled):not([aria-busy=true]) {
1568
+ transform: translateY(0) scale(var(--viking-state-active-scale));
1569
+ box-shadow: var(--viking-shadow-sm);
1570
+ }
1571
+
1572
+ .viking-btn.viking-secondary {
1573
+ background: var(--viking-accent-secondary);
1574
+ color: var(--viking-accent-secondary-content);
1575
+ border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
1576
+ box-shadow: var(--viking-shadow-sm);
1577
+ }
1578
+ .viking-btn.viking-secondary:hover:not(:disabled):not([aria-busy=true]) {
1579
+ background: var(--viking-accent-secondary-hover);
1580
+ border-color: var(--viking-accent-secondary-hover);
1581
+ color: var(--viking-accent-secondary-content);
1582
+ box-shadow: var(--viking-shadow-hover);
1583
+ transform: translateY(var(--viking-state-hover-lift));
1584
+ }
1585
+ .viking-btn.viking-secondary:active:not(:disabled):not([aria-busy=true]) {
1586
+ transform: translateY(0) scale(var(--viking-state-active-scale));
1587
+ box-shadow: var(--viking-shadow-sm);
1588
+ }
1589
+
1590
+ .viking-btn.viking-filled {
1591
+ background: var(--viking-surface-alt);
1592
+ color: var(--viking-text);
1593
+ border-color: var(--viking-border);
1594
+ box-shadow: var(--viking-shadow-xs);
1595
+ }
1596
+ .viking-btn.viking-filled:hover:not(:disabled):not([aria-busy=true]) {
1597
+ border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border));
1598
+ background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface-alt));
1599
+ box-shadow: var(--viking-shadow-sm);
1600
+ transform: translateY(var(--viking-state-hover-lift));
1601
+ }
1602
+ .viking-btn.viking-filled:active:not(:disabled):not([aria-busy=true]) {
1603
+ transform: translateY(0) scale(var(--viking-state-active-scale));
1604
+ }
1605
+
1606
+ .viking-btn.viking-danger {
1607
+ background: var(--viking-danger);
1608
+ color: var(--viking-on-danger);
1609
+ border-color: color-mix(in srgb, var(--viking-danger) 85%, var(--viking-black));
1610
+ box-shadow: var(--viking-shadow-sm);
1611
+ }
1612
+ .viking-btn.viking-danger:hover:not(:disabled):not([aria-busy=true]) {
1613
+ background: color-mix(in srgb, var(--viking-danger) 88%, var(--viking-white));
1614
+ border-color: color-mix(in srgb, var(--viking-danger) 92%, var(--viking-white));
1615
+ color: var(--viking-on-danger);
1616
+ box-shadow: var(--viking-shadow-hover);
1617
+ transform: translateY(var(--viking-state-hover-lift));
1618
+ }
1619
+ .viking-btn.viking-danger:active:not(:disabled):not([aria-busy=true]) {
1620
+ transform: translateY(0) scale(var(--viking-state-active-scale));
1621
+ box-shadow: var(--viking-shadow-sm);
1622
+ }
1623
+
1624
+ .viking-btn.viking-ghost {
1625
+ background: transparent;
1626
+ color: var(--viking-text);
1627
+ min-width: auto;
1628
+ box-shadow: none;
1629
+ border-color: transparent;
1630
+ }
1631
+ .viking-btn.viking-ghost:hover:not(:disabled):not([aria-busy=true]) {
1632
+ background: var(--viking-accent-soft);
1633
+ color: var(--viking-accent-strong);
1634
+ }
1635
+ .viking-btn.viking-ghost:active:not(:disabled):not([aria-busy=true]) {
1636
+ transform: scale(var(--viking-state-active-scale));
1637
+ }
1638
+
1639
+ .viking-btn.viking-subtle {
1640
+ background: transparent;
1641
+ color: var(--viking-text-muted);
1642
+ border-color: var(--viking-border-subtle);
1643
+ min-width: auto;
1644
+ box-shadow: none;
1645
+ }
1646
+ .viking-btn.viking-subtle:hover:not(:disabled):not([aria-busy=true]) {
1647
+ color: var(--viking-text);
1648
+ background: var(--viking-accent-soft);
1649
+ border-color: var(--viking-border-strong);
1650
+ }
1651
+ .viking-btn.viking-subtle:active:not(:disabled):not([aria-busy=true]) {
1652
+ transform: scale(var(--viking-state-active-scale));
1653
+ }
1654
+
1655
+ .viking-btn.viking-compact {
1656
+ min-width: 0;
1657
+ }
1658
+
1659
+ .viking-btn.viking-full {
1660
+ width: 100%;
1661
+ min-width: 0;
1662
+ }
1663
+
1664
+ .viking-btn-label {
1665
+ display: inline-flex;
1666
+ align-items: center;
1667
+ line-height: inherit;
1668
+ }
1669
+
1670
+ .viking-control {
1671
+ display: flex;
1672
+ align-items: center;
1673
+ gap: var(--viking-space-1);
1674
+ min-height: var(--viking-control-height);
1675
+ padding: 0 var(--viking-space-2);
1676
+ font-family: var(--viking-font-family);
1677
+ font-size: var(--viking-font-size);
1678
+ color: var(--viking-text);
1679
+ background: var(--viking-surface-alt);
1680
+ border: 1px solid var(--viking-border);
1681
+ border-radius: var(--viking-radius-sm);
1682
+ box-shadow: var(--viking-shadow-xs);
1683
+ transition: var(--viking-transition-interactive);
1684
+ width: 100%;
1685
+ min-width: 0;
1686
+ box-sizing: border-box;
1687
+ }
1688
+ .viking-control:hover:not(.viking-disabled):not(.viking-loading):not(:disabled) {
1689
+ border-color: color-mix(in srgb, var(--viking-accent) 35%, var(--viking-border-strong));
1690
+ box-shadow: var(--viking-shadow-sm);
1691
+ }
1692
+ .viking-control:focus-within:not(.viking-loading) {
1693
+ outline: var(--viking-ring-width) solid var(--viking-ring);
1694
+ outline-offset: var(--viking-ring-offset);
1695
+ border-color: var(--viking-accent);
1696
+ box-shadow: var(--viking-shadow-sm);
1697
+ }
1698
+
1699
+ .viking-form-row {
1700
+ display: grid;
1701
+ grid-template-columns: 1fr;
1702
+ gap: var(--viking-space-3);
1703
+ width: 100%;
1704
+ max-width: var(--viking-form-max-width);
1705
+ }
1706
+ @media (min-width: 600px) {
1707
+ .viking-form-row {
1708
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1709
+ }
1710
+ }
1711
+
1712
+ @media (min-width: 768px) {
1713
+ .viking-form-row--3 {
1714
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1715
+ }
1716
+ }
1717
+
1718
+ .viking-form-section-actions viking-button .viking-btn,
1719
+ .viking-modal-footer viking-button .viking-btn,
1720
+ .viking-sheet-footer viking-button .viking-btn,
1721
+ .viking-empty-state-actions viking-button .viking-btn,
1722
+ .viking-chart-empty-actions viking-button .viking-btn {
1723
+ min-width: 0;
1724
+ }
1725
+
1726
+ .viking-input,
1727
+ .viking-input-shell {
1728
+ display: flex;
1729
+ align-items: center;
1730
+ gap: var(--viking-space-1);
1731
+ min-height: var(--viking-control-height);
1732
+ padding: 0 var(--viking-space-2);
1733
+ font-family: var(--viking-font-family);
1734
+ font-size: var(--viking-font-size);
1735
+ color: var(--viking-text);
1736
+ background: var(--viking-surface-alt);
1737
+ border: 1px solid var(--viking-border);
1738
+ border-radius: var(--viking-radius-sm);
1739
+ box-shadow: var(--viking-shadow-xs);
1740
+ transition: var(--viking-transition-interactive);
1741
+ width: 100%;
1742
+ min-width: 0;
1743
+ box-sizing: border-box;
1744
+ }
1745
+ .viking-input:hover:not(.viking-disabled):not(.viking-loading):not(:disabled),
1746
+ .viking-input-shell:hover:not(.viking-disabled):not(.viking-loading):not(:disabled) {
1747
+ border-color: color-mix(in srgb, var(--viking-accent) 35%, var(--viking-border-strong));
1748
+ box-shadow: var(--viking-shadow-sm);
1749
+ }
1750
+ .viking-input:focus-within:not(.viking-loading),
1751
+ .viking-input-shell:focus-within:not(.viking-loading) {
1752
+ outline: var(--viking-ring-width) solid var(--viking-ring);
1753
+ outline-offset: var(--viking-ring-offset);
1754
+ border-color: var(--viking-accent);
1755
+ box-shadow: var(--viking-shadow-sm);
1756
+ }
1757
+
1758
+ .viking-input input,
1759
+ .viking-input-shell input,
1760
+ input.viking-input-native {
1761
+ flex: 1;
1762
+ min-width: 0;
1763
+ border: none;
1764
+ outline: none !important;
1765
+ background: transparent;
1766
+ color: var(--viking-text);
1767
+ font-family: var(--viking-font-family);
1768
+ font-size: var(--viking-font-size);
1769
+ padding: 0;
1770
+ }
1771
+ .viking-input input::placeholder,
1772
+ .viking-input-shell input::placeholder,
1773
+ input.viking-input-native::placeholder {
1774
+ color: var(--viking-text-muted);
1775
+ }
1776
+ .viking-input input:disabled,
1777
+ .viking-input-shell input:disabled,
1778
+ input.viking-input-native:disabled {
1779
+ cursor: not-allowed;
1780
+ }
1781
+
1782
+ .viking-input-clear {
1783
+ display: inline-flex;
1784
+ align-items: center;
1785
+ justify-content: center;
1786
+ min-width: var(--viking-touch-target-comfort);
1787
+ min-height: var(--viking-touch-target-comfort);
1788
+ border: none;
1789
+ background: transparent;
1790
+ color: var(--viking-text-muted);
1791
+ cursor: pointer;
1792
+ padding: var(--viking-space-half);
1793
+ border-radius: var(--viking-radius-pill);
1794
+ transition: var(--viking-transition-interactive);
1795
+ position: relative;
1796
+ flex-shrink: 0;
1797
+ -webkit-tap-highlight-color: transparent;
1798
+ }
1799
+ .viking-input-clear:hover {
1800
+ color: var(--viking-text);
1801
+ background: var(--viking-accent-soft);
1802
+ }
1803
+ .viking-input-clear:focus-visible {
1804
+ outline: var(--viking-ring-width) solid var(--viking-ring);
1805
+ outline-offset: var(--viking-ring-offset);
1806
+ }
1807
+ .viking-input-clear:active {
1808
+ transform: scale(var(--viking-state-active-scale));
1809
+ }
1810
+
1811
+ .viking-input-kbd {
1812
+ font-family: var(--viking-font-family-mono);
1813
+ font-size: var(--viking-font-size-xs);
1814
+ color: var(--viking-text-muted);
1815
+ background: var(--viking-surface-alt);
1816
+ border: 1px solid var(--viking-border);
1817
+ border-radius: var(--viking-radius-xs);
1818
+ padding: 0 var(--viking-space-half);
1819
+ line-height: 1.4;
1820
+ }
1821
+
1822
+ .viking-input-icon {
1823
+ color: var(--viking-text-muted);
1824
+ flex-shrink: 0;
1825
+ }
1826
+
1827
+ .viking-input-shell.viking-disabled,
1828
+ .viking-input-shell.viking-loading,
1829
+ .viking-input.viking-disabled,
1830
+ .viking-input.viking-loading {
1831
+ opacity: var(--viking-state-disabled-opacity);
1832
+ }
1833
+
1834
+ .viking-input-shell.viking-loading,
1835
+ .viking-input.viking-loading {
1836
+ cursor: wait;
1837
+ }