@dataengineeringformachinelearning/viking-ui 4.0.2 → 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.
@@ -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);
@@ -216,7 +216,7 @@
216
216
 
217
217
  viking-button,
218
218
  viking-button-wc {
219
- min-width: auto;
219
+ min-width: var(--viking-btn-min-width, 120px) !important;
220
220
  }
221
221
  }
222
222
 
@@ -488,7 +488,7 @@ button.auth-btn {
488
488
  align-items: center !important;
489
489
  justify-content: center !important;
490
490
  gap: var(--viking-space-1, 8px) !important;
491
- min-width: auto !important;
491
+ min-width: var(--viking-btn-min-width, 120px) !important;
492
492
  height: var(--viking-control-height, 40px) !important;
493
493
  min-height: var(--viking-control-height, 40px) !important;
494
494
  padding: 0 var(--viking-space-2, 16px) !important;
@@ -499,6 +499,23 @@ button.auth-btn {
499
499
  line-height: 1 !important;
500
500
  }
501
501
 
502
+ .auth-btn::part(control),
503
+ viking-button.auth-btn::part(control),
504
+ viking-button.auth-btn viking-button-wc::part(control),
505
+ viking-button.auth-btn viking-button-wc,
506
+ viking-button-wc.auth-btn::part(control),
507
+ .auth-btn.viking-full::part(control) {
508
+ display: inline-flex !important;
509
+ align-items: center !important;
510
+ justify-content: center !important;
511
+ gap: var(--viking-space-1, 8px) !important;
512
+ min-width: var(--viking-btn-min-width, 120px) !important;
513
+ min-height: var(--viking-control-height, 40px) !important;
514
+ height: var(--viking-control-height, 40px) !important;
515
+ padding: 0 var(--viking-space-2, 16px) !important;
516
+ box-sizing: border-box !important;
517
+ }
518
+
502
519
  .auth-signout-btn {
503
520
  background: transparent !important;
504
521
  color: var(--text-muted) !important;
@@ -522,6 +539,19 @@ button.auth-btn {
522
539
  display: none !important;
523
540
  }
524
541
 
542
+ .auth-btn [data-viking-icon],
543
+ .auth-btn [data-viking-icon] svg,
544
+ .auth-signout-btn [data-viking-icon],
545
+ .auth-signout-btn [data-viking-icon] svg {
546
+ margin: 0 !important;
547
+ display: inline-flex !important;
548
+ align-items: center !important;
549
+ justify-content: center !important;
550
+ width: 16px !important;
551
+ height: 16px !important;
552
+ line-height: 1 !important;
553
+ }
554
+
525
555
  .auth-signout-btn:hover {
526
556
  color: var(--text-color) !important;
527
557
  border-color: var(--viking-crimson-500) !important;
@@ -554,12 +584,17 @@ button.auth-btn {
554
584
  z-index: 49;
555
585
  gap: var(--viking-space-half, 4px);
556
586
 
557
- viking-button {
587
+ viking-button,
588
+ viking-button-wc,
589
+ .mobile-auth-btn {
558
590
  width: 100%;
559
591
  }
560
592
 
561
593
  .mobile-auth-btn,
562
- .auth-signout-btn {
594
+ .auth-signout-btn,
595
+ .mobile-auth-btn::part(control),
596
+ .mobile-auth-btn.auth-btn::part(control),
597
+ .mobile-auth-btn.auth-signout-btn::part(control) {
563
598
  flex-shrink: 0;
564
599
  width: 100%;
565
600
  }
@@ -1136,6 +1171,10 @@ button.auth-btn {
1136
1171
  display: none !important;
1137
1172
  }
1138
1173
 
1174
+ .mobile-menu.open {
1175
+ display: none !important;
1176
+ }
1177
+
1139
1178
  .navbar-right {
1140
1179
  gap: var(--viking-space-2, 16px);
1141
1180
  }
@@ -16,6 +16,22 @@
16
16
  flex-direction: column;
17
17
  gap: var(--viking-page-section-gap, var(--viking-space-5));
18
18
  padding-block: var(--viking-space-6);
19
+ position: relative;
20
+
21
+ &::before {
22
+ content: "";
23
+ position: absolute;
24
+ inset: 0;
25
+ pointer-events: none;
26
+ background:
27
+ linear-gradient(
28
+ 90deg,
29
+ transparent,
30
+ color-mix(in srgb, var(--viking-accent) 10%, transparent),
31
+ transparent
32
+ );
33
+ opacity: 0.03;
34
+ }
19
35
  }
20
36
 
21
37
  @media (min-width: 768px) {
@@ -29,6 +45,21 @@
29
45
  display: grid;
30
46
  gap: var(--viking-space-5);
31
47
  align-items: center;
48
+ position: relative;
49
+
50
+ &::before {
51
+ content: "";
52
+ position: absolute;
53
+ inset: auto 0 -2px 0;
54
+ height: 1px;
55
+ background: linear-gradient(
56
+ 90deg,
57
+ transparent,
58
+ color-mix(in srgb, var(--viking-accent) 35%, transparent),
59
+ transparent
60
+ );
61
+ opacity: 0.4;
62
+ }
32
63
  }
33
64
 
34
65
  @media (min-width: 960px) {
@@ -42,6 +73,20 @@
42
73
  display: flex;
43
74
  flex-direction: column;
44
75
  gap: var(--viking-space-3);
76
+ position: relative;
77
+
78
+ &::after {
79
+ content: "";
80
+ position: absolute;
81
+ top: -10px;
82
+ left: 0;
83
+ width: 22px;
84
+ height: 14px;
85
+ border-top: 1px solid color-mix(in srgb, var(--viking-accent) 40%, transparent);
86
+ border-left: 1px solid color-mix(in srgb, var(--viking-accent) 24%, transparent);
87
+ opacity: 0.5;
88
+ pointer-events: none;
89
+ }
45
90
  }
46
91
 
47
92
  .showcase-hero-badge {
@@ -54,6 +99,18 @@
54
99
  border-radius: var(--viking-radius-pill);
55
100
  background: var(--viking-surface);
56
101
  box-shadow: var(--viking-shadow-sm);
102
+ position: relative;
103
+
104
+ &::after {
105
+ content: "";
106
+ position: absolute;
107
+ left: 1px;
108
+ right: 1px;
109
+ top: 0;
110
+ height: 1px;
111
+ background: color-mix(in srgb, var(--viking-accent) 35%, transparent);
112
+ opacity: 0.55;
113
+ }
57
114
  }
58
115
 
59
116
  .showcase-hero-badge-dot {
@@ -90,7 +147,6 @@
90
147
  margin: 0;
91
148
  font-size: clamp(2rem, 4.5vw, 3rem);
92
149
  font-weight: var(--viking-font-weight-bold, 800);
93
- line-height: var(--viking-line-height-tight);
94
150
  letter-spacing: var(--viking-letter-spacing-tight);
95
151
  color: var(--viking-text);
96
152
  }
@@ -115,6 +171,11 @@
115
171
  gap: var(--viking-space-2);
116
172
  position: relative;
117
173
  overflow: hidden;
174
+ border: 1px solid var(--viking-border);
175
+ border-radius: var(--viking-radius-lg);
176
+ padding: var(--viking-space-2);
177
+ background: var(--viking-surface);
178
+ box-shadow: var(--viking-shadow-sm);
118
179
  }
119
180
 
120
181
  .showcase-hero-panel::before {
@@ -129,6 +190,7 @@
129
190
  transparent
130
191
  );
131
192
  pointer-events: none;
193
+ opacity: 0.7;
132
194
  }
133
195
 
134
196
  /* ── Toolbar ── */
@@ -252,6 +314,7 @@
252
314
  flex-direction: column;
253
315
  gap: var(--viking-space-4);
254
316
  padding-block: var(--viking-space-5);
317
+ border-top: 1px solid color-mix(in srgb, var(--viking-accent) 20%, transparent);
255
318
  border-bottom: 1px solid var(--viking-border);
256
319
  scroll-margin-top: calc(
257
320
  var(--viking-navbar-height, 64px) + var(--showcase-subnav-height, 52px) +