@dataengineeringformachinelearning/viking-ui 4.0.1 → 4.0.3

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 (34) hide show
  1. package/README.md +7 -5
  2. package/dist/README.md +7 -5
  3. package/dist/deml-components.css +23 -0
  4. package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs +182 -23
  5. package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +1 -1
  6. package/dist/package.json +7 -1
  7. package/dist/src/web/card/viking-card-wc.ts +5 -1
  8. package/dist/src/web/core/styles.ts +125 -2
  9. package/dist/src/web/suite-header/viking-suite-header-wc.ts +15 -0
  10. package/dist/types/dataengineeringformachinelearning-viking-ui.d.ts +2 -1
  11. package/dist/viking-components.css +425 -31
  12. package/dist/viking-ui-elements.js +180 -42
  13. package/dist/viking-ui.css +1 -1
  14. package/dist/web-components.js +145 -3
  15. package/package.json +7 -1
  16. package/src/index.ts +1 -1
  17. package/src/lib/auth-panel/auth-panel.ts +9 -9
  18. package/src/lib/button/button.scss +23 -0
  19. package/src/lib/card/card.ts +33 -5
  20. package/src/lib/site-drakkar/site-navbar.ts +14 -4
  21. package/src/styles/_buttons.scss +92 -7
  22. package/src/styles/_layout-enforcement.scss +66 -3
  23. package/src/styles/components/icon-inline.scss +23 -0
  24. package/src/styles/components.scss +276 -9
  25. package/src/styles/static-navbar.scss +43 -4
  26. package/src/styles/surfaces/backend.scss +22 -10
  27. package/src/styles/surfaces/docs-shell.scss +40 -15
  28. package/src/styles/surfaces/docs-showcase.scss +132 -30
  29. package/src/styles/surfaces/marketing-landing.scss +311 -45
  30. package/src/styles/surfaces/swagger-ui.scss +9 -8
  31. package/src/styles/viking-ui.scss +12 -12
  32. package/src/web/card/viking-card-wc.ts +5 -1
  33. package/src/web/core/styles.ts +125 -2
  34. package/src/web/suite-header/viking-suite-header-wc.ts +15 -0
@@ -15,7 +15,7 @@
15
15
  gap: var(--viking-space-1);
16
16
  min-height: var(--viking-control-height);
17
17
  padding: 0 var(--viking-control-padding-x);
18
- border-radius: var(--viking-radius);
18
+ border-radius: var(--viking-radius-lg);
19
19
  border: 1px solid transparent;
20
20
  cursor: pointer;
21
21
  text-decoration: none;
@@ -24,8 +24,12 @@
24
24
  min-width: var(--viking-btn-min-width, 120px);
25
25
  white-space: nowrap;
26
26
  position: relative;
27
+ background-clip: padding-box;
28
+ isolation: isolate;
27
29
  user-select: none;
28
30
  -webkit-tap-highlight-color: transparent;
31
+ overflow: hidden;
32
+ box-shadow: var(--viking-shadow-sm);
29
33
 
30
34
  &:focus-visible {
31
35
  outline: var(--viking-ring-width) solid var(--viking-ring);
@@ -33,6 +37,46 @@
33
37
  z-index: 1;
34
38
  }
35
39
 
40
+ &::before {
41
+ content: "";
42
+ position: absolute;
43
+ inset: 1px 1px auto 1px;
44
+ height: 1px;
45
+ background: linear-gradient(
46
+ 90deg,
47
+ transparent,
48
+ color-mix(
49
+ in srgb,
50
+ var(--viking-metallic-100) 45%,
51
+ transparent
52
+ ),
53
+ transparent
54
+ );
55
+ pointer-events: none;
56
+ opacity: 0.82;
57
+ transition: var(--viking-transition-interactive);
58
+ }
59
+
60
+ &::after {
61
+ content: "";
62
+ position: absolute;
63
+ inset: auto 0 0 0;
64
+ height: 1px;
65
+ background: linear-gradient(
66
+ 90deg,
67
+ transparent,
68
+ color-mix(
69
+ in srgb,
70
+ var(--viking-metallic-100) 18%,
71
+ transparent
72
+ ),
73
+ transparent
74
+ );
75
+ pointer-events: none;
76
+ opacity: 0.45;
77
+ transition: var(--viking-transition-interactive);
78
+ }
79
+
36
80
  &:disabled,
37
81
  &[aria-busy='true'] {
38
82
  opacity: var(--viking-state-disabled-opacity);
@@ -41,14 +85,35 @@
41
85
  box-shadow: none !important;
42
86
  }
43
87
 
88
+ &[aria-busy='true']::before,
44
89
  &[aria-busy='true'] .viking-btn-label {
45
90
  opacity: 0.85;
91
+ transform: translateY(1px);
46
92
  }
47
93
 
48
94
  viking-icon,
49
- .viking-icon {
95
+ .viking-icon,
96
+ [data-viking-icon] {
50
97
  flex-shrink: 0;
98
+ display: inline-flex;
99
+ align-items: center;
100
+ justify-content: center;
101
+ width: var(--viking-icon-size-md);
102
+ height: var(--viking-icon-size-md);
103
+ line-height: 1;
51
104
  pointer-events: none;
105
+ flex: 0 0 auto;
106
+ }
107
+
108
+ .viking-btn-label {
109
+ display: inline-flex;
110
+ align-items: center;
111
+ gap: var(--viking-space-1);
112
+ line-height: 1.2;
113
+ min-width: 0;
114
+ justify-content: center;
115
+ text-align: center;
116
+ white-space: nowrap;
52
117
  }
53
118
  }
54
119
 
@@ -68,7 +133,10 @@
68
133
 
69
134
  &:active:not(:disabled):not([aria-busy='true']) {
70
135
  transform: translateY(0) scale(var(--viking-state-active-scale));
71
- box-shadow: var(--viking-shadow-sm);
136
+ border-color: var(--viking-border-strong);
137
+ box-shadow: inset 0 1px 2px
138
+ color-mix(in srgb, var(--viking-black) 28%, transparent),
139
+ var(--viking-shadow-sm);
72
140
  }
73
141
  }
74
142
 
@@ -88,7 +156,10 @@
88
156
 
89
157
  &:active:not(:disabled):not([aria-busy='true']) {
90
158
  transform: translateY(0) scale(var(--viking-state-active-scale));
91
- box-shadow: var(--viking-shadow-sm);
159
+ border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
160
+ box-shadow: inset 0 1px 2px
161
+ color-mix(in srgb, var(--viking-black) 28%, transparent),
162
+ var(--viking-shadow-sm);
92
163
  }
93
164
  }
94
165
 
@@ -108,7 +179,10 @@
108
179
 
109
180
  &:active:not(:disabled):not([aria-busy='true']) {
110
181
  transform: translateY(0) scale(var(--viking-state-active-scale));
111
- box-shadow: var(--viking-shadow-sm);
182
+ border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
183
+ box-shadow: inset 0 1px 2px
184
+ color-mix(in srgb, var(--viking-black) 28%, transparent),
185
+ var(--viking-shadow-sm);
112
186
  }
113
187
  }
114
188
 
@@ -127,6 +201,9 @@
127
201
 
128
202
  &:active:not(:disabled):not([aria-busy='true']) {
129
203
  transform: translateY(0) scale(var(--viking-state-active-scale));
204
+ box-shadow: var(--viking-shadow-sm);
205
+ border-color: color-mix(in srgb, var(--viking-accent) 20%, var(--viking-border));
206
+ background: color-mix(in srgb, var(--viking-surface-alt) 84%, var(--viking-accent));
130
207
  }
131
208
  }
132
209
 
@@ -146,6 +223,8 @@
146
223
 
147
224
  &:active:not(:disabled):not([aria-busy='true']) {
148
225
  transform: translateY(0) scale(var(--viking-state-active-scale));
226
+ border-color: color-mix(in srgb, var(--viking-danger) 72%, var(--viking-black));
227
+ background: color-mix(in srgb, var(--viking-danger) 84%, var(--viking-black));
149
228
  box-shadow: var(--viking-shadow-sm);
150
229
  }
151
230
  }
@@ -163,7 +242,9 @@
163
242
  }
164
243
 
165
244
  &:active:not(:disabled):not([aria-busy='true']) {
166
- transform: scale(var(--viking-state-active-scale));
245
+ transform: translateY(0) scale(var(--viking-state-active-scale));
246
+ background: var(--viking-accent-soft);
247
+ color: var(--viking-accent-strong);
167
248
  }
168
249
  }
169
250
 
@@ -181,7 +262,11 @@
181
262
  }
182
263
 
183
264
  &:active:not(:disabled):not([aria-busy='true']) {
184
- transform: scale(var(--viking-state-active-scale));
265
+ transform: translateY(0) scale(var(--viking-state-active-scale));
266
+ border-color: var(--viking-border);
267
+ background: color-mix(in srgb, var(--viking-accent-soft) 70%, var(--viking-surface));
268
+ box-shadow: inset 0 1px 2px
269
+ color-mix(in srgb, var(--viking-black) 24%, transparent);
185
270
  }
186
271
  }
187
272
 
@@ -53,7 +53,11 @@
53
53
  background: var(--viking-surface-recipe, var(--viking-surface));
54
54
  border: 1px solid var(--viking-border);
55
55
  border-radius: var(--viking-radius-lg);
56
- box-shadow: var(--viking-shadow-sm);
56
+ box-shadow: var(--viking-shadow-sm), inset 0 1px 0 color-mix(
57
+ in srgb,
58
+ var(--viking-white-pure) 6%,
59
+ transparent
60
+ );
57
61
  padding: var(--viking-card-padding);
58
62
  color: var(--viking-text);
59
63
  min-width: var(--viking-card-min-width);
@@ -63,6 +67,21 @@
63
67
  overflow: hidden;
64
68
  transition: var(--viking-transition-interactive);
65
69
 
70
+ &::after {
71
+ content: '';
72
+ position: absolute;
73
+ inset: 0 auto auto 0;
74
+ right: 0;
75
+ width: 1px;
76
+ height: 28px;
77
+ background: linear-gradient(
78
+ 180deg,
79
+ color-mix(in srgb, var(--viking-metallic-100) 22%, transparent),
80
+ transparent
81
+ );
82
+ pointer-events: none;
83
+ }
84
+
66
85
  @include viking-surface-hairline;
67
86
 
68
87
  &.viking-card-compact,
@@ -70,11 +89,55 @@
70
89
  padding: var(--viking-card-padding-compact);
71
90
  }
72
91
 
73
- &.viking-card-interactive:hover {
92
+ &.viking-card-interactive:hover,
93
+ &[data-interactive='true']:hover {
74
94
  border-color: var(--viking-accent-strong);
75
- box-shadow: var(--viking-shadow-hover);
95
+ box-shadow: var(--viking-shadow-hover),
96
+ inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 6%, transparent);
76
97
  transform: translateY(var(--viking-state-hover-lift));
77
98
  }
99
+
100
+ &.viking-card-interactive:active,
101
+ &[data-interactive='true']:active {
102
+ transform: translateY(0) scale(var(--viking-state-active-scale));
103
+ box-shadow: inset 0 1px 2px
104
+ color-mix(in srgb, var(--viking-black) 24%, transparent),
105
+ var(--viking-shadow-sm);
106
+ }
107
+
108
+ &.viking-card-interactive:focus-visible,
109
+ &[data-interactive='true']:focus-visible {
110
+ outline: var(--viking-ring-width) solid var(--viking-ring);
111
+ outline-offset: var(--viking-ring-offset);
112
+ }
113
+
114
+ &.viking-card-loading {
115
+ pointer-events: none;
116
+ }
117
+ }
118
+
119
+ .viking-card-header {
120
+ display: flex;
121
+ align-items: center;
122
+ justify-content: space-between;
123
+ gap: var(--viking-space-2);
124
+ margin-bottom: var(--viking-space-2);
125
+ }
126
+
127
+ .viking-card-footer {
128
+ display: flex;
129
+ align-items: center;
130
+ justify-content: flex-end;
131
+ gap: var(--viking-space-2);
132
+ margin-top: var(--viking-space-2);
133
+ }
134
+
135
+ .viking-card-title {
136
+ display: inline-flex;
137
+ align-items: center;
138
+ gap: var(--viking-space-1);
139
+ flex: 1 1 auto;
140
+ min-width: 0;
78
141
  }
79
142
 
80
143
  // ── Form width constraints ──────────────────────────────────────────────────
@@ -12,6 +12,19 @@ viking-icon,
12
12
  vertical-align: middle;
13
13
  }
14
14
 
15
+ [data-viking-icon] {
16
+ display: inline-flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ flex-shrink: 0;
20
+ line-height: 1;
21
+ }
22
+
23
+ [data-viking-icon] svg {
24
+ display: inline-block;
25
+ line-height: 1;
26
+ }
27
+
15
28
  .nav-btn,
16
29
  .mobile-nav-btn,
17
30
  .auth-btn,
@@ -35,6 +48,8 @@ viking-icon,
35
48
  .nav-btn viking-app-icon,
36
49
  .nav-btn viking-icon,
37
50
  .mobile-nav-btn viking-app-icon,
51
+ .nav-btn [data-viking-icon],
52
+ .mobile-nav-btn [data-viking-icon],
38
53
  .auth-btn viking-app-icon,
39
54
  .mobile-auth-btn viking-app-icon {
40
55
  width: var(--viking-icon-size-md, var(--base-font-size));
@@ -42,6 +57,14 @@ viking-icon,
42
57
  align-self: center;
43
58
  }
44
59
 
60
+ .nav-btn [data-viking-icon] svg,
61
+ .mobile-nav-btn [data-viking-icon] svg,
62
+ .auth-btn [data-viking-icon] svg,
63
+ .mobile-auth-btn [data-viking-icon] svg {
64
+ width: var(--viking-icon-size-md, var(--base-font-size));
65
+ height: var(--viking-icon-size-md, var(--base-font-size));
66
+ }
67
+
45
68
  .theme-toggle-btn viking-app-icon,
46
69
  .theme-toggle-btn viking-icon,
47
70
  .menu-toggle-btn viking-app-icon,
@@ -60,18 +60,76 @@ a {
60
60
 
61
61
  .viking-card {
62
62
  display: block;
63
+ position: relative;
64
+ overflow: hidden;
65
+ background-clip: padding-box;
66
+ isolation: isolate;
63
67
  padding: var(--viking-card-padding);
64
68
  border: 1px solid var(--viking-border);
65
69
  border-radius: var(--viking-radius-lg);
66
70
  background: var(--viking-surface-recipe);
67
71
  color: var(--viking-text);
68
- box-shadow: var(--viking-shadow-sm);
72
+ box-shadow: var(--viking-shadow-sm), inset 0 1px 0 color-mix(
73
+ in srgb,
74
+ var(--viking-white-pure) 6%,
75
+ transparent
76
+ );
77
+ }
78
+
79
+ .viking-card::before {
80
+ content: "";
81
+ position: absolute;
82
+ inset: 0 0 auto;
83
+ height: 1px;
84
+ background: linear-gradient(
85
+ 90deg,
86
+ transparent,
87
+ color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),
88
+ transparent
89
+ );
90
+ pointer-events: none;
91
+ }
92
+
93
+ .viking-card::after {
94
+ content: "";
95
+ position: absolute;
96
+ inset: 0 auto auto 0;
97
+ right: 0;
98
+ width: 1px;
99
+ height: 28px;
100
+ background: linear-gradient(
101
+ 180deg,
102
+ color-mix(in srgb, var(--viking-metallic-100) 22%, transparent),
103
+ transparent
104
+ );
105
+ pointer-events: none;
69
106
  }
70
107
 
71
108
  .viking-card[data-compact="true"] {
72
109
  padding: var(--viking-card-padding-compact);
73
110
  }
74
111
 
112
+ .viking-card[data-interactive="true"],
113
+ .viking-card.viking-card-interactive {
114
+ cursor: pointer;
115
+ }
116
+
117
+ .viking-card[data-interactive="true"]:hover,
118
+ .viking-card.viking-card-interactive:hover {
119
+ border-color: var(--viking-accent-strong);
120
+ box-shadow: var(--viking-shadow-hover),
121
+ inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 6%, transparent);
122
+ transform: translateY(var(--viking-state-hover-lift));
123
+ }
124
+
125
+ .viking-card[data-interactive="true"]:active,
126
+ .viking-card.viking-card-interactive:active {
127
+ transform: translateY(0) scale(var(--viking-state-active-scale));
128
+ box-shadow: inset 0 1px 2px
129
+ color-mix(in srgb, var(--viking-black) 24%, transparent),
130
+ var(--viking-shadow-sm);
131
+ }
132
+
75
133
  .viking-button,
76
134
  .viking-btn {
77
135
  display: inline-flex;
@@ -81,19 +139,100 @@ a {
81
139
  gap: var(--viking-space-1);
82
140
  padding: 0 var(--viking-control-padding-x);
83
141
  border: 1px solid var(--viking-border-strong);
84
- border-radius: var(--viking-radius);
142
+ border-radius: var(--viking-radius-lg);
85
143
  background: var(--viking-surface);
86
144
  color: var(--viking-text);
87
145
  box-shadow: var(--viking-shadow-sm);
146
+ background-clip: padding-box;
147
+ overflow: hidden;
148
+ position: relative;
88
149
  cursor: pointer;
89
- font: inherit;
90
- font-size: var(--viking-font-size-sm);
150
+ font-family: var(--viking-font-family);
151
+ font-size: var(--viking-font-size-ui, var(--viking-font-size-sm));
91
152
  font-weight: var(--viking-font-weight-semibold);
153
+ letter-spacing: var(--viking-letter-spacing-wide);
92
154
  line-height: var(--viking-line-height-snug);
93
155
  text-decoration: none;
94
156
  transition: var(--viking-transition-interactive);
95
157
  }
96
158
 
159
+ .viking-button:disabled,
160
+ .viking-btn:disabled,
161
+ .viking-button[aria-busy='true'],
162
+ .viking-btn[aria-busy='true'] {
163
+ opacity: var(--viking-state-disabled-opacity);
164
+ cursor: not-allowed;
165
+ transform: none !important;
166
+ box-shadow: none !important;
167
+ }
168
+
169
+ .viking-button[aria-busy='true'] .viking-btn-label,
170
+ .viking-btn[aria-busy='true'] .viking-btn-label {
171
+ opacity: 0.85;
172
+ transform: translateY(1px);
173
+ }
174
+
175
+ .viking-button::before,
176
+ .viking-btn::before {
177
+ content: "";
178
+ position: absolute;
179
+ inset: 1px 1px auto;
180
+ height: 1px;
181
+ background: linear-gradient(
182
+ 90deg,
183
+ transparent,
184
+ color-mix(in srgb, var(--viking-metallic-100) 45%, transparent),
185
+ transparent
186
+ );
187
+ pointer-events: none;
188
+ opacity: 0.82;
189
+ transition: var(--viking-transition-interactive);
190
+ }
191
+
192
+ .viking-button::after,
193
+ .viking-btn::after {
194
+ content: "";
195
+ position: absolute;
196
+ inset: auto 0 0 0;
197
+ height: 1px;
198
+ background: linear-gradient(
199
+ 90deg,
200
+ transparent,
201
+ color-mix(in srgb, var(--viking-metallic-100) 18%, transparent),
202
+ transparent
203
+ );
204
+ pointer-events: none;
205
+ opacity: 0.45;
206
+ transition: var(--viking-transition-interactive);
207
+ }
208
+
209
+ .viking-button viking-icon,
210
+ .viking-button .viking-icon,
211
+ .viking-button [data-viking-icon],
212
+ .viking-btn viking-icon,
213
+ .viking-btn .viking-icon,
214
+ .viking-btn [data-viking-icon] {
215
+ display: inline-flex;
216
+ align-items: center;
217
+ justify-content: center;
218
+ width: var(--viking-icon-size-md);
219
+ height: var(--viking-icon-size-md);
220
+ line-height: 1;
221
+ pointer-events: none;
222
+ flex: 0 0 auto;
223
+ }
224
+
225
+ .viking-button-label,
226
+ .viking-btn-label {
227
+ display: inline-flex;
228
+ align-items: center;
229
+ justify-content: center;
230
+ gap: var(--viking-space-1);
231
+ line-height: 1.2;
232
+ min-width: 0;
233
+ white-space: nowrap;
234
+ }
235
+
97
236
  .viking-button:hover,
98
237
  .viking-btn:hover {
99
238
  border-color: color-mix(
@@ -101,18 +240,41 @@ a {
101
240
  var(--viking-accent) 45%,
102
241
  var(--viking-border-strong)
103
242
  );
243
+ box-shadow: var(--viking-shadow-md);
104
244
  transform: translateY(var(--viking-state-hover-lift));
105
245
  }
106
246
 
247
+ .viking-button:active,
248
+ .viking-btn:active {
249
+ transform: translateY(0) scale(var(--viking-state-active-scale));
250
+ }
251
+
107
252
  .viking-button[data-variant="primary"],
108
253
  .viking-btn-primary {
109
- border-color: color-mix(
110
- in srgb,
111
- var(--viking-accent) 82%,
112
- var(--viking-black)
113
- );
254
+ border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
114
255
  background: var(--viking-accent);
115
256
  color: var(--viking-accent-content);
257
+ box-shadow: var(--viking-shadow-sm), inset 0 1px 0 color-mix(
258
+ in srgb,
259
+ var(--viking-white-pure) 8%,
260
+ transparent
261
+ );
262
+ }
263
+
264
+ .viking-button[data-variant="primary"]:hover,
265
+ .viking-btn-primary:hover {
266
+ background: var(--viking-accent-hover);
267
+ border-color: var(--viking-accent-hover);
268
+ box-shadow: var(--viking-shadow-hover);
269
+ transform: translateY(var(--viking-state-hover-lift));
270
+ }
271
+
272
+ .viking-button[data-variant="primary"]:active,
273
+ .viking-btn-primary:active {
274
+ transform: translateY(0) scale(var(--viking-state-active-scale));
275
+ border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
276
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent),
277
+ var(--viking-shadow-sm);
116
278
  }
117
279
 
118
280
  .viking-button[data-variant="secondary"],
@@ -126,13 +288,118 @@ a {
126
288
  color: var(--viking-accent-secondary-content);
127
289
  }
128
290
 
291
+ .viking-button[data-variant="secondary"]:hover,
292
+ .viking-btn-secondary:hover {
293
+ background: var(--viking-accent-secondary-hover);
294
+ border-color: var(--viking-accent-secondary-hover);
295
+ box-shadow: var(--viking-shadow-hover);
296
+ transform: translateY(var(--viking-state-hover-lift));
297
+ }
298
+
299
+ .viking-button[data-variant="secondary"]:active,
300
+ .viking-btn-secondary:active {
301
+ transform: translateY(0) scale(var(--viking-state-active-scale));
302
+ border-color: color-mix(
303
+ in srgb,
304
+ var(--viking-accent-secondary) 82%,
305
+ var(--viking-black)
306
+ );
307
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent),
308
+ var(--viking-shadow-sm);
309
+ }
310
+
311
+ .viking-button[data-variant="filled"],
312
+ .viking-btn-filled {
313
+ background: var(--viking-surface-alt);
314
+ border-color: var(--viking-border);
315
+ color: var(--viking-text);
316
+ box-shadow: var(--viking-shadow-xs);
317
+ }
318
+
319
+ .viking-button[data-variant="filled"]:hover,
320
+ .viking-btn-filled:hover {
321
+ border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border));
322
+ background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface-alt));
323
+ box-shadow: var(--viking-shadow-sm);
324
+ transform: translateY(var(--viking-state-hover-lift));
325
+ }
326
+
327
+ .viking-button[data-variant="filled"]:active,
328
+ .viking-btn-filled:active {
329
+ transform: translateY(0) scale(var(--viking-state-active-scale));
330
+ border-color: color-mix(in srgb, var(--viking-accent) 20%, var(--viking-border));
331
+ background: color-mix(in srgb, var(--viking-surface-alt) 84%, var(--viking-accent));
332
+ box-shadow: var(--viking-shadow-sm);
333
+ }
334
+
335
+ .viking-button[data-variant="danger"],
336
+ .viking-btn-danger {
337
+ background: var(--viking-danger);
338
+ color: var(--viking-on-danger);
339
+ border-color: color-mix(in srgb, var(--viking-danger) 85%, var(--viking-black));
340
+ box-shadow: var(--viking-shadow-sm);
341
+ }
342
+
343
+ .viking-button[data-variant="danger"]:hover,
344
+ .viking-btn-danger:hover {
345
+ background: color-mix(in srgb, var(--viking-danger) 88%, var(--viking-white));
346
+ border-color: color-mix(in srgb, var(--viking-danger) 92%, var(--viking-white));
347
+ box-shadow: var(--viking-shadow-hover);
348
+ transform: translateY(var(--viking-state-hover-lift));
349
+ }
350
+
351
+ .viking-button[data-variant="danger"]:active,
352
+ .viking-btn-danger:active {
353
+ transform: translateY(0) scale(var(--viking-state-active-scale));
354
+ border-color: color-mix(in srgb, var(--viking-danger) 72%, var(--viking-black));
355
+ background: color-mix(in srgb, var(--viking-danger) 84%, var(--viking-black));
356
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent),
357
+ var(--viking-shadow-sm);
358
+ }
359
+
129
360
  .viking-button[data-variant="ghost"],
130
361
  .viking-btn-ghost {
362
+ background: transparent;
131
363
  border-color: transparent;
364
+ box-shadow: none;
365
+ }
366
+
367
+ .viking-button[data-variant="ghost"]:hover,
368
+ .viking-btn-ghost:hover {
369
+ background: var(--viking-accent-soft);
370
+ color: var(--viking-accent-strong);
371
+ }
372
+
373
+ .viking-button[data-variant="ghost"]:active,
374
+ .viking-btn-ghost:active {
375
+ transform: translateY(0) scale(var(--viking-state-active-scale));
376
+ background: var(--viking-accent-soft);
377
+ color: var(--viking-accent-strong);
378
+ }
379
+
380
+ .viking-button[data-variant="subtle"],
381
+ .viking-btn-subtle {
132
382
  background: transparent;
383
+ color: var(--viking-text-muted);
384
+ border-color: var(--viking-border-subtle);
133
385
  box-shadow: none;
134
386
  }
135
387
 
388
+ .viking-button[data-variant="subtle"]:hover,
389
+ .viking-btn-subtle:hover {
390
+ color: var(--viking-text);
391
+ background: var(--viking-accent-soft);
392
+ border-color: var(--viking-border-strong);
393
+ }
394
+
395
+ .viking-button[data-variant="subtle"]:active,
396
+ .viking-btn-subtle:active {
397
+ transform: translateY(0) scale(var(--viking-state-active-scale));
398
+ border-color: var(--viking-border);
399
+ background: color-mix(in srgb, var(--viking-accent-soft) 70%, var(--viking-surface));
400
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 24%, transparent);
401
+ }
402
+
136
403
  .viking-field {
137
404
  display: grid;
138
405
  gap: var(--viking-space-1);