@dataengineeringformachinelearning/viking-ui 4.0.2 → 4.0.4

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 (37) 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 +211 -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 +2 -1
  8. package/dist/src/web/core/styles.ts +125 -2
  9. package/dist/src/web/search-palette/viking-search-palette-wc.ts +1 -0
  10. package/dist/src/web/suite-header/viking-suite-header-wc.ts +15 -0
  11. package/dist/types/dataengineeringformachinelearning-viking-ui.d.ts +3 -2
  12. package/dist/viking-components.css +425 -31
  13. package/dist/viking-ui-elements.js +180 -42
  14. package/dist/viking-ui.css +1 -1
  15. package/dist/web-components.js +143 -3
  16. package/package.json +7 -1
  17. package/src/index.ts +1 -1
  18. package/src/lib/button/button.scss +23 -0
  19. package/src/lib/card/card.ts +35 -5
  20. package/src/lib/footer/footer.scss +8 -1
  21. package/src/lib/site-drakkar/site-footer.ts +5 -1
  22. package/src/lib/site-drakkar/site-navbar.ts +23 -4
  23. package/src/lib/theme-toggle/theme-toggle.ts +1 -0
  24. package/src/styles/_buttons.scss +92 -7
  25. package/src/styles/_layout-enforcement.scss +66 -3
  26. package/src/styles/components/footer.scss +26 -13
  27. package/src/styles/components/icon-inline.scss +23 -0
  28. package/src/styles/components.scss +276 -9
  29. package/src/styles/static-navbar.scss +110 -36
  30. package/src/styles/surfaces/docs-showcase.scss +64 -1
  31. package/src/styles/surfaces/marketing-landing.scss +247 -6
  32. package/src/styles/surfaces/swagger-ui.scss +92 -1
  33. package/src/styles/viking-ui.scss +2 -0
  34. package/src/web/card/viking-card-wc.ts +2 -1
  35. package/src/web/core/styles.ts +125 -2
  36. package/src/web/search-palette/viking-search-palette-wc.ts +1 -0
  37. package/src/web/suite-header/viking-suite-header-wc.ts +15 -0
@@ -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
 
@@ -247,10 +247,63 @@
247
247
  flex-shrink: 1;
248
248
  min-width: 0;
249
249
  white-space: nowrap;
250
+ border-bottom: 1px solid transparent;
251
+ box-shadow: none;
252
+ }
253
+
254
+ .navbar-search::part(control),
255
+ .menu-toggle-btn::part(control),
256
+ .theme-toggle-btn::part(control),
257
+ .navbar-search-trigger::part(control),
258
+ .navbar-search-mobile-btn::part(control),
259
+ .auth-btn::part(control),
260
+ .mobile-auth-btn::part(control),
261
+ .auth-signout-btn::part(control),
262
+ .navbar .theme-toggle-btn::part(control),
263
+ .navbar .menu-toggle-btn::part(control),
264
+ .navbar .navbar-search-trigger::part(control),
265
+ .navbar .navbar-search-mobile-btn::part(control),
266
+ viking-button-wc.menu-toggle-btn::part(control),
267
+ viking-button-wc.theme-toggle-btn::part(control),
268
+ viking-button-wc.navbar-search-trigger::part(control),
269
+ viking-button-wc.mobile-auth-btn::part(control),
270
+ viking-button-wc.auth-btn::part(control),
271
+ viking-button-wc.auth-signout-btn::part(control) {
272
+ border-color: inherit;
273
+ }
274
+
275
+ .nav-btn:focus-visible,
276
+ .mobile-nav-btn:focus-visible,
277
+ .auth-btn:focus-visible,
278
+ .auth-signout-btn:focus-visible,
279
+ .menu-toggle-btn:focus-visible,
280
+ .theme-toggle-btn:focus-visible,
281
+ .navbar-search-trigger:focus-visible,
282
+ .navbar-search-mobile-btn:focus-visible,
283
+ .mobile-auth-btn:focus-visible {
284
+ outline: var(--viking-ring-width, 2px) solid
285
+ var(--viking-ring, var(--focus-ring-color));
286
+ outline-offset: var(--viking-ring-offset, 2px);
287
+ }
288
+
289
+ .viking-button-wc.nav-btn:focus-visible::part(control),
290
+ .viking-button-wc.auth-btn:focus-visible::part(control),
291
+ .viking-button-wc.auth-signout-btn:focus-visible::part(control),
292
+ .viking-button-wc.menu-toggle-btn:focus-visible::part(control),
293
+ .viking-button-wc.theme-toggle-btn:focus-visible::part(control),
294
+ .viking-button-wc.navbar-search-trigger:focus-visible::part(control),
295
+ .viking-button-wc.navbar-search-mobile-btn:focus-visible::part(control) {
296
+ outline: var(--viking-ring-width, 2px) solid var(--viking-ring, var(--focus-ring-color));
297
+ outline-offset: var(--viking-ring-offset, 2px);
250
298
  }
251
299
 
252
300
  .nav-btn[hidden],
253
- .mobile-nav-btn[hidden] {
301
+ .mobile-nav-btn[hidden],
302
+ .auth-btn[hidden],
303
+ .auth-signout-btn[hidden],
304
+ .mobile-auth-btn[hidden],
305
+ viking-button-wc[hidden],
306
+ viking-button[hidden] {
254
307
  display: none !important;
255
308
  }
256
309
 
@@ -304,35 +357,9 @@
304
357
  height: 16px;
305
358
  }
306
359
 
307
- .nav-btn::before {
308
- content: '';
309
- position: absolute;
310
- inset: auto 16px 0;
311
- height: 2px;
312
- border-radius: 2px;
313
- background: linear-gradient(
314
- 90deg,
315
- transparent,
316
- color-mix(in srgb, var(--viking-accent) 80%, transparent),
317
- transparent
318
- );
319
- opacity: 0;
320
- transform: scaleX(0.4);
321
- transition:
322
- opacity 0.25s ease,
323
- transform 0.25s ease;
324
- pointer-events: none;
325
- }
326
-
327
360
  .nav-btn:hover {
328
361
  color: var(--text-color) !important;
329
362
  background-color: color-mix(in srgb, var(--viking-accent) 10%, transparent) !important;
330
- transform: translateY(-1px);
331
- }
332
-
333
- .nav-btn:hover::before {
334
- opacity: 1;
335
- transform: scaleX(1);
336
363
  }
337
364
 
338
365
  html[data-theme='light'] {
@@ -364,11 +391,6 @@ html[data-theme='light'] {
364
391
  0 0 12px color-mix(in srgb, var(--viking-accent) 18%, transparent) !important;
365
392
  }
366
393
 
367
- .nav-btn.active::before {
368
- opacity: 1;
369
- transform: scaleX(1);
370
- }
371
-
372
394
  .navbar .theme-toggle-btn,
373
395
  .theme-toggle-btn {
374
396
  @include viking-navbar-utility-btn;
@@ -488,7 +510,7 @@ button.auth-btn {
488
510
  align-items: center !important;
489
511
  justify-content: center !important;
490
512
  gap: var(--viking-space-1, 8px) !important;
491
- min-width: auto !important;
513
+ min-width: var(--viking-btn-min-width, 120px) !important;
492
514
  height: var(--viking-control-height, 40px) !important;
493
515
  min-height: var(--viking-control-height, 40px) !important;
494
516
  padding: 0 var(--viking-space-2, 16px) !important;
@@ -499,6 +521,23 @@ button.auth-btn {
499
521
  line-height: 1 !important;
500
522
  }
501
523
 
524
+ .auth-btn::part(control),
525
+ viking-button.auth-btn::part(control),
526
+ viking-button.auth-btn viking-button-wc::part(control),
527
+ viking-button.auth-btn viking-button-wc,
528
+ viking-button-wc.auth-btn::part(control),
529
+ .auth-btn.viking-full::part(control) {
530
+ display: inline-flex !important;
531
+ align-items: center !important;
532
+ justify-content: center !important;
533
+ gap: var(--viking-space-1, 8px) !important;
534
+ min-width: var(--viking-btn-min-width, 120px) !important;
535
+ min-height: var(--viking-control-height, 40px) !important;
536
+ height: var(--viking-control-height, 40px) !important;
537
+ padding: 0 var(--viking-space-2, 16px) !important;
538
+ box-sizing: border-box !important;
539
+ }
540
+
502
541
  .auth-signout-btn {
503
542
  background: transparent !important;
504
543
  color: var(--text-muted) !important;
@@ -522,6 +561,19 @@ button.auth-btn {
522
561
  display: none !important;
523
562
  }
524
563
 
564
+ .auth-btn [data-viking-icon],
565
+ .auth-btn [data-viking-icon] svg,
566
+ .auth-signout-btn [data-viking-icon],
567
+ .auth-signout-btn [data-viking-icon] svg {
568
+ margin: 0 !important;
569
+ display: inline-flex !important;
570
+ align-items: center !important;
571
+ justify-content: center !important;
572
+ width: 16px !important;
573
+ height: 16px !important;
574
+ line-height: 1 !important;
575
+ }
576
+
525
577
  .auth-signout-btn:hover {
526
578
  color: var(--text-color) !important;
527
579
  border-color: var(--viking-crimson-500) !important;
@@ -536,6 +588,8 @@ button.auth-btn {
536
588
  display: none;
537
589
  flex-direction: column;
538
590
  position: absolute;
591
+ visibility: hidden;
592
+ pointer-events: none;
539
593
  top: var(--viking-navbar-height, var(--navbar-height, 64px));
540
594
  left: 0;
541
595
  right: 0;
@@ -554,12 +608,17 @@ button.auth-btn {
554
608
  z-index: 49;
555
609
  gap: var(--viking-space-half, 4px);
556
610
 
557
- viking-button {
611
+ viking-button,
612
+ viking-button-wc,
613
+ .mobile-auth-btn {
558
614
  width: 100%;
559
615
  }
560
616
 
561
617
  .mobile-auth-btn,
562
- .auth-signout-btn {
618
+ .auth-signout-btn,
619
+ .mobile-auth-btn::part(control),
620
+ .mobile-auth-btn.auth-btn::part(control),
621
+ .mobile-auth-btn.auth-signout-btn::part(control) {
563
622
  flex-shrink: 0;
564
623
  width: 100%;
565
624
  }
@@ -577,6 +636,7 @@ button.auth-btn {
577
636
  opacity: 1;
578
637
  pointer-events: auto;
579
638
  display: flex;
639
+ visibility: visible;
580
640
  }
581
641
 
582
642
  .mobile-nav-btn {
@@ -694,6 +754,11 @@ button.auth-btn {
694
754
  }
695
755
  }
696
756
 
757
+ .navbar [hidden],
758
+ .mobile-menu [hidden] {
759
+ display: none !important;
760
+ }
761
+
697
762
  .algolia-autocomplete-host {
698
763
  display: none;
699
764
  font-family: var(--viking-font-family, inherit);
@@ -1134,6 +1199,15 @@ button.auth-btn {
1134
1199
 
1135
1200
  .mobile-menu:not(.open) {
1136
1201
  display: none !important;
1202
+ visibility: hidden !important;
1203
+ pointer-events: none !important;
1204
+ }
1205
+
1206
+ .mobile-menu.open {
1207
+ display: none !important;
1208
+ opacity: 0 !important;
1209
+ pointer-events: none !important;
1210
+ visibility: hidden !important;
1137
1211
  }
1138
1212
 
1139
1213
  .navbar-right {
@@ -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) +