@dataengineeringformachinelearning/viking-ui 1.0.2 → 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 -41
  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 +20 -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 -6114
  127. package/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +0 -1
  128. package/types/dataengineeringformachinelearning-viking-ui.d.ts +0 -1397
  129. package/viking.manifest.json +0 -238
@@ -0,0 +1,1051 @@
1
+ /* Docs showcase — premium marketing-aligned layout */
2
+
3
+ /* ── Section tag (marketing parity) ── */
4
+ .section-tag {
5
+ display: inline-block;
6
+ font-size: var(--viking-font-size-xs);
7
+ font-weight: var(--viking-font-weight-semibold);
8
+ letter-spacing: var(--viking-letter-spacing-caps);
9
+ text-transform: uppercase;
10
+ color: var(--viking-accent);
11
+ }
12
+
13
+ /* ── Page shell ── */
14
+ .showcase-page {
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: var(--viking-page-section-gap, var(--viking-space-5));
18
+ padding-block: var(--viking-space-4);
19
+ }
20
+
21
+ @media (min-width: 768px) {
22
+ .showcase-page {
23
+ padding-block: var(--viking-space-5);
24
+ }
25
+ }
26
+
27
+ /* ── Hero ── */
28
+ .showcase-hero {
29
+ display: grid;
30
+ gap: var(--viking-space-5);
31
+ align-items: center;
32
+ }
33
+
34
+ @media (min-width: 960px) {
35
+ .showcase-hero {
36
+ grid-template-columns: 1.15fr 1fr;
37
+ gap: var(--viking-space-6);
38
+ }
39
+ }
40
+
41
+ .showcase-hero-copy {
42
+ display: flex;
43
+ flex-direction: column;
44
+ gap: var(--viking-space-3);
45
+ }
46
+
47
+ .showcase-hero-badge {
48
+ display: inline-flex;
49
+ align-items: center;
50
+ gap: var(--viking-space-1);
51
+ width: fit-content;
52
+ padding: var(--viking-space-1) var(--viking-space-2);
53
+ border: 1px solid var(--viking-border);
54
+ border-radius: var(--viking-radius-pill);
55
+ background: var(--viking-surface);
56
+ box-shadow: var(--viking-shadow-sm);
57
+ }
58
+
59
+ .showcase-hero-badge-dot {
60
+ width: var(--viking-space-1);
61
+ height: var(--viking-space-1);
62
+ border-radius: 50%;
63
+ background: var(--viking-accent);
64
+ flex-shrink: 0;
65
+ }
66
+
67
+ .pulse-dot {
68
+ animation: showcasePulseDot 2s ease-in-out infinite;
69
+ }
70
+
71
+ @keyframes showcasePulseDot {
72
+ 0%,
73
+ 100% {
74
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--viking-accent) 60%, transparent);
75
+ }
76
+ 50% {
77
+ box-shadow: 0 0 0 6px color-mix(in srgb, var(--viking-accent) 0%, transparent);
78
+ }
79
+ }
80
+
81
+ @media (prefers-reduced-motion: reduce) {
82
+ .pulse-dot {
83
+ animation: none;
84
+ }
85
+ }
86
+
87
+ .showcase-hero-title {
88
+ margin: 0;
89
+ font-size: clamp(2rem, 4.5vw, 3rem);
90
+ font-weight: var(--viking-font-weight-bold, 800);
91
+ line-height: var(--viking-line-height-tight);
92
+ letter-spacing: var(--viking-letter-spacing-tight);
93
+ color: var(--viking-text);
94
+ }
95
+
96
+ .showcase-hero-lead {
97
+ margin: 0;
98
+ max-width: var(--viking-content-readable-max-width, 48rem);
99
+ font-size: var(--viking-font-size-lg);
100
+ line-height: var(--viking-line-height-relaxed);
101
+ color: var(--viking-text-muted);
102
+ }
103
+
104
+ .showcase-hero-actions {
105
+ display: flex;
106
+ flex-wrap: wrap;
107
+ gap: var(--viking-space-2);
108
+ }
109
+
110
+ .showcase-hero-panel {
111
+ display: flex;
112
+ flex-direction: column;
113
+ gap: var(--viking-space-2);
114
+ position: relative;
115
+ overflow: hidden;
116
+ }
117
+
118
+ .showcase-hero-panel::before {
119
+ content: '';
120
+ position: absolute;
121
+ inset: 0 0 auto;
122
+ height: 1px;
123
+ background: linear-gradient(
124
+ 90deg,
125
+ transparent,
126
+ color-mix(in srgb, var(--viking-accent) 40%, transparent),
127
+ transparent
128
+ );
129
+ pointer-events: none;
130
+ }
131
+
132
+ /* ── Toolbar ── */
133
+ .showcase-toolbar {
134
+ padding: var(--viking-card-padding);
135
+ }
136
+
137
+ .showcase-toolbar-row {
138
+ display: grid;
139
+ grid-template-columns: 1fr;
140
+ gap: var(--viking-space-2);
141
+ }
142
+
143
+ @media (min-width: 768px) {
144
+ .showcase-toolbar-row {
145
+ grid-template-columns: minmax(0, 2fr) minmax(12rem, 1fr);
146
+ align-items: end;
147
+ }
148
+ }
149
+
150
+ .showcase-search-field,
151
+ .showcase-category-field {
152
+ margin: 0;
153
+ }
154
+
155
+ /* ── Category bar (sticky horizontal nav) ── */
156
+ .showcase-category-bar {
157
+ position: sticky;
158
+ top: calc(var(--viking-navbar-height, 64px) + var(--showcase-subnav-height, 52px));
159
+ z-index: 40;
160
+ border-block: 1px solid var(--viking-border);
161
+ background: color-mix(in srgb, var(--viking-bg) 94%, transparent);
162
+ backdrop-filter: blur(8px);
163
+ }
164
+
165
+ .showcase-category-bar-inner {
166
+ padding-block: var(--viking-space-2);
167
+ }
168
+
169
+ .showcase-category-bar-scroll {
170
+ display: flex;
171
+ gap: var(--viking-space-1);
172
+ overflow-x: auto;
173
+ scrollbar-width: none;
174
+ -webkit-overflow-scrolling: touch;
175
+ padding-bottom: var(--viking-space-half);
176
+ }
177
+
178
+ .showcase-category-bar-scroll::-webkit-scrollbar {
179
+ display: none;
180
+ }
181
+
182
+ .showcase-category-chip {
183
+ flex-shrink: 0;
184
+ padding: var(--viking-space-1) var(--viking-space-2);
185
+ border: 1px solid var(--viking-border);
186
+ border-radius: var(--viking-radius-pill);
187
+ background: var(--viking-surface);
188
+ color: var(--viking-text-muted);
189
+ font-size: var(--viking-font-size-sm);
190
+ font-weight: var(--viking-font-weight-medium);
191
+ text-decoration: none;
192
+ white-space: nowrap;
193
+ transition: var(--viking-transition-interactive);
194
+ min-height: var(--viking-control-height, 44px);
195
+ display: inline-flex;
196
+ align-items: center;
197
+ }
198
+
199
+ .showcase-category-chip:hover {
200
+ border-color: var(--viking-accent);
201
+ color: var(--viking-accent);
202
+ }
203
+
204
+ .showcase-category-chip.is-active {
205
+ border-color: var(--viking-accent);
206
+ background: color-mix(in srgb, var(--viking-accent) 10%, var(--viking-surface));
207
+ color: var(--viking-accent);
208
+ }
209
+
210
+ /* ── Legacy section classes (other doc pages) ── */
211
+ .showcase-category {
212
+ display: flex;
213
+ flex-direction: column;
214
+ gap: var(--viking-space-3);
215
+ padding: var(--viking-space-4) 0;
216
+ border-bottom: 1px solid var(--viking-border);
217
+ scroll-margin-top: calc(var(--viking-navbar-height, 64px) + var(--showcase-subnav-height, 52px) + 56px);
218
+ }
219
+
220
+ .showcase-category:last-child {
221
+ border-bottom: 0;
222
+ }
223
+
224
+ .showcase-category-header {
225
+ display: flex;
226
+ flex-direction: column;
227
+ gap: var(--viking-space-1);
228
+ padding-bottom: var(--viking-space-2);
229
+ border-bottom: 1px solid var(--viking-border-subtle);
230
+ }
231
+
232
+ .showcase-component-list {
233
+ display: flex;
234
+ flex-direction: column;
235
+ gap: var(--viking-space-4);
236
+ }
237
+
238
+ /* ── Category sections (component gallery) ── */
239
+ .showcase-section {
240
+ display: flex;
241
+ flex-direction: column;
242
+ gap: var(--viking-space-4);
243
+ padding-block: var(--viking-space-5);
244
+ border-bottom: 1px solid var(--viking-border);
245
+ scroll-margin-top: calc(var(--viking-navbar-height, 64px) + var(--showcase-subnav-height, 52px) + 56px);
246
+ position: relative;
247
+ }
248
+
249
+ .showcase-section::after {
250
+ content: '';
251
+ position: absolute;
252
+ top: 0;
253
+ left: 50%;
254
+ transform: translateX(-50%);
255
+ width: 80px;
256
+ height: 1px;
257
+ background: linear-gradient(90deg, transparent, var(--viking-accent), transparent);
258
+ opacity: 0.25;
259
+ }
260
+
261
+ .showcase-section:last-child {
262
+ border-bottom: 0;
263
+ }
264
+
265
+ .showcase-section-compact {
266
+ padding-block: var(--viking-space-4);
267
+ }
268
+
269
+ .showcase-section-header {
270
+ display: flex;
271
+ flex-direction: column;
272
+ gap: var(--viking-space-1);
273
+ max-width: var(--viking-content-readable-max-width, 48rem);
274
+ }
275
+
276
+ .showcase-section-title {
277
+ margin: 0;
278
+ font-size: var(--viking-font-size-2xl);
279
+ font-weight: var(--viking-font-weight-bold);
280
+ letter-spacing: var(--viking-letter-spacing-tight);
281
+ color: var(--viking-text);
282
+ }
283
+
284
+ .showcase-section-desc {
285
+ margin: 0;
286
+ font-size: var(--viking-font-size-lg);
287
+ }
288
+
289
+ /* ── Component grid ── */
290
+ .showcase-component-grid {
291
+ display: grid;
292
+ grid-template-columns: 1fr;
293
+ gap: var(--viking-space-3);
294
+ }
295
+
296
+ @media (min-width: 768px) {
297
+ .showcase-component-grid {
298
+ grid-template-columns: repeat(2, 1fr);
299
+ }
300
+ }
301
+
302
+ /* ── Component showcase card ── */
303
+ .component-showcase-card {
304
+ display: flex;
305
+ flex-direction: column;
306
+ gap: var(--viking-space-2);
307
+ padding: var(--viking-card-padding);
308
+ scroll-margin-top: calc(var(--viking-navbar-height, 64px) + var(--showcase-subnav-height, 52px) + 56px);
309
+ transition:
310
+ transform var(--viking-duration-normal) var(--viking-ease-out),
311
+ border-color var(--viking-duration-normal) var(--viking-ease-out),
312
+ box-shadow var(--viking-duration-normal) var(--viking-ease-out);
313
+ }
314
+
315
+ .component-showcase-card-compact:hover {
316
+ transform: translateY(var(--viking-state-hover-lift, -4px));
317
+ border-color: var(--viking-accent-strong, var(--viking-accent));
318
+ box-shadow: var(--viking-shadow-hover);
319
+ }
320
+
321
+ .component-showcase-header {
322
+ display: flex;
323
+ flex-direction: column;
324
+ gap: var(--viking-space-1);
325
+ }
326
+
327
+ .component-showcase-title-block {
328
+ display: flex;
329
+ flex-direction: column;
330
+ gap: var(--viking-space-half);
331
+ }
332
+
333
+ .component-showcase-link {
334
+ color: inherit;
335
+ text-decoration: none;
336
+ transition: color var(--viking-duration-fast) var(--viking-ease-out);
337
+ }
338
+
339
+ .component-showcase-link:hover {
340
+ color: var(--viking-accent);
341
+ }
342
+
343
+ .component-showcase-desc {
344
+ margin: 0;
345
+ font-size: var(--viking-font-size-sm);
346
+ display: -webkit-box;
347
+ -webkit-line-clamp: 2;
348
+ -webkit-box-orient: vertical;
349
+ overflow: hidden;
350
+ }
351
+
352
+ .component-showcase-tags {
353
+ display: flex;
354
+ flex-wrap: wrap;
355
+ gap: var(--viking-space-half);
356
+ }
357
+
358
+ .component-showcase-preview {
359
+ padding: var(--viking-space-3);
360
+ background: color-mix(in srgb, var(--viking-bg) 30%, var(--viking-surface-alt));
361
+ border: 1px solid var(--viking-border-subtle);
362
+ border-radius: var(--viking-radius-lg);
363
+ min-height: 5rem;
364
+ display: flex;
365
+ align-items: center;
366
+ justify-content: center;
367
+ position: relative;
368
+ overflow: hidden;
369
+ }
370
+
371
+ .component-showcase-preview::before {
372
+ content: '';
373
+ position: absolute;
374
+ inset: 0 0 auto;
375
+ height: 1px;
376
+ background: linear-gradient(
377
+ 90deg,
378
+ transparent,
379
+ color-mix(in srgb, var(--viking-metallic-200, var(--viking-border)) 22%, transparent),
380
+ transparent
381
+ );
382
+ pointer-events: none;
383
+ }
384
+
385
+ .component-showcase-footer {
386
+ display: flex;
387
+ flex-wrap: wrap;
388
+ align-items: center;
389
+ justify-content: space-between;
390
+ gap: var(--viking-space-2);
391
+ padding-top: var(--viking-space-1);
392
+ border-top: 1px solid var(--viking-border-subtle);
393
+ }
394
+
395
+ .component-showcase-frameworks {
396
+ display: flex;
397
+ flex-wrap: wrap;
398
+ gap: var(--viking-space-half);
399
+ }
400
+
401
+ .component-framework-chip {
402
+ padding: var(--viking-space-half) var(--viking-space-1);
403
+ border-radius: var(--viking-radius-sm);
404
+ background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface-alt));
405
+ border: 1px solid color-mix(in srgb, var(--viking-accent) 15%, transparent);
406
+ font-size: var(--viking-font-size-2xs, var(--viking-font-size-xs));
407
+ font-weight: var(--viking-font-weight-medium);
408
+ color: var(--viking-text-muted);
409
+ }
410
+
411
+ .component-showcase-cta {
412
+ display: inline-flex;
413
+ align-items: center;
414
+ gap: var(--viking-space-half);
415
+ font-size: var(--viking-font-size-sm);
416
+ font-weight: var(--viking-font-weight-semibold);
417
+ color: var(--viking-accent);
418
+ text-decoration: none;
419
+ min-height: var(--viking-control-height, 44px);
420
+ padding-inline: var(--viking-space-1);
421
+ }
422
+
423
+ .component-showcase-cta:hover {
424
+ text-decoration: underline;
425
+ }
426
+
427
+ .component-showcase-code {
428
+ display: flex;
429
+ flex-direction: column;
430
+ gap: var(--viking-space-1);
431
+ }
432
+
433
+ .component-showcase-code-label {
434
+ margin: 0;
435
+ }
436
+
437
+ .component-showcase-api {
438
+ padding-top: var(--viking-space-2);
439
+ border-top: 1px solid var(--viking-border-subtle);
440
+ }
441
+
442
+ /* ── Detail page ── */
443
+ .component-detail-page {
444
+ gap: var(--viking-space-4);
445
+ }
446
+
447
+ .component-breadcrumb {
448
+ display: flex;
449
+ flex-wrap: wrap;
450
+ align-items: center;
451
+ gap: var(--viking-space-half);
452
+ font-size: var(--viking-font-size-sm);
453
+ color: var(--viking-text-muted);
454
+ }
455
+
456
+ .component-breadcrumb a {
457
+ color: var(--viking-accent);
458
+ text-decoration: none;
459
+ }
460
+
461
+ .component-breadcrumb a:hover {
462
+ text-decoration: underline;
463
+ }
464
+
465
+ .showcase-detail-header {
466
+ display: flex;
467
+ flex-direction: column;
468
+ gap: var(--viking-space-2);
469
+ }
470
+
471
+ .component-api-panel {
472
+ padding: var(--viking-card-padding);
473
+ }
474
+
475
+ .showcase-related-grid {
476
+ display: grid;
477
+ grid-template-columns: 1fr;
478
+ gap: var(--viking-space-2);
479
+ }
480
+
481
+ @media (min-width: 640px) {
482
+ .showcase-related-grid {
483
+ grid-template-columns: repeat(2, 1fr);
484
+ }
485
+ }
486
+
487
+ .showcase-related-card {
488
+ display: flex;
489
+ flex-direction: column;
490
+ gap: var(--viking-space-half);
491
+ padding: var(--viking-card-padding);
492
+ text-decoration: none;
493
+ color: inherit;
494
+ transition: var(--viking-transition-interactive);
495
+ }
496
+
497
+ .showcase-related-card:hover {
498
+ transform: translateY(var(--viking-state-hover-lift, -4px));
499
+ border-color: var(--viking-accent);
500
+ box-shadow: var(--viking-shadow-hover);
501
+ }
502
+
503
+ .showcase-detail-actions {
504
+ display: flex;
505
+ flex-wrap: wrap;
506
+ gap: var(--viking-space-2);
507
+ padding-top: var(--viking-space-3);
508
+ border-top: 1px solid var(--viking-border-subtle);
509
+ }
510
+
511
+ /* ── API reference cards ── */
512
+ .api-reference {
513
+ display: flex;
514
+ flex-direction: column;
515
+ gap: var(--viking-space-3);
516
+ }
517
+
518
+ .api-reference-header {
519
+ display: flex;
520
+ flex-wrap: wrap;
521
+ align-items: flex-start;
522
+ justify-content: space-between;
523
+ gap: var(--viking-space-2);
524
+ }
525
+
526
+ .api-selectors {
527
+ display: flex;
528
+ flex-wrap: wrap;
529
+ gap: var(--viking-space-1);
530
+ }
531
+
532
+ .api-selector-chip {
533
+ display: inline-flex;
534
+ align-items: center;
535
+ gap: var(--viking-space-half);
536
+ padding: var(--viking-space-half) var(--viking-space-1);
537
+ border: 1px solid var(--viking-border);
538
+ border-radius: var(--viking-radius-pill);
539
+ font-size: var(--viking-font-size-xs);
540
+ color: var(--viking-text-muted);
541
+ background: var(--viking-surface-alt);
542
+ }
543
+
544
+ .api-prop-group {
545
+ display: flex;
546
+ flex-direction: column;
547
+ gap: var(--viking-space-2);
548
+ }
549
+
550
+ .api-prop-group-label {
551
+ margin: 0;
552
+ }
553
+
554
+ .api-prop-grid {
555
+ display: grid;
556
+ grid-template-columns: 1fr;
557
+ gap: var(--viking-space-2);
558
+ }
559
+
560
+ @media (min-width: 640px) {
561
+ .api-prop-grid {
562
+ grid-template-columns: repeat(2, 1fr);
563
+ }
564
+ }
565
+
566
+ @media (min-width: 1024px) {
567
+ .api-prop-grid {
568
+ grid-template-columns: repeat(3, 1fr);
569
+ }
570
+ }
571
+
572
+ .api-prop-card {
573
+ display: flex;
574
+ flex-direction: column;
575
+ gap: var(--viking-space-half);
576
+ }
577
+
578
+ .api-prop-name {
579
+ display: flex;
580
+ flex-wrap: wrap;
581
+ align-items: baseline;
582
+ gap: var(--viking-space-1);
583
+ }
584
+
585
+ .api-prop-type {
586
+ font-size: var(--viking-font-size-xs);
587
+ color: var(--viking-accent);
588
+ font-family: var(--viking-font-family-mono, ui-monospace, monospace);
589
+ }
590
+
591
+ .api-prop-default {
592
+ margin: 0;
593
+ font-size: var(--viking-font-size-xs);
594
+ color: var(--viking-text-muted);
595
+ }
596
+
597
+ .api-prop-desc {
598
+ margin: 0;
599
+ font-size: var(--viking-font-size-sm);
600
+ }
601
+
602
+ /* ── Landing page (index) ── */
603
+ .landing-showcase {
604
+ display: flex;
605
+ flex-direction: column;
606
+ gap: var(--viking-page-section-gap, var(--viking-space-6));
607
+ }
608
+
609
+ .landing-hero {
610
+ display: grid;
611
+ gap: var(--viking-space-5);
612
+ align-items: center;
613
+ padding: var(--viking-space-5) 0 var(--viking-space-3);
614
+ }
615
+
616
+ @media (min-width: 960px) {
617
+ .landing-hero {
618
+ grid-template-columns: minmax(0, 1.02fr) minmax(24rem, 0.98fr);
619
+ gap: var(--viking-space-6);
620
+ }
621
+ }
622
+
623
+ .landing-hero-copy {
624
+ display: flex;
625
+ flex-direction: column;
626
+ gap: var(--viking-space-3);
627
+ min-width: 0;
628
+ }
629
+
630
+ .landing-hero-copy > .viking-heading {
631
+ max-width: 18ch;
632
+ }
633
+
634
+ .landing-hero-copy > .viking-text-muted {
635
+ max-width: var(--viking-content-readable-max-width, 48rem);
636
+ }
637
+
638
+ .landing-hero-badge {
639
+ display: inline-flex;
640
+ align-items: center;
641
+ gap: var(--viking-space-1);
642
+ width: fit-content;
643
+ padding: var(--viking-space-1) var(--viking-space-2);
644
+ border: 1px solid var(--viking-border);
645
+ border-radius: var(--viking-radius-pill);
646
+ background: var(--viking-surface);
647
+ font-size: var(--viking-font-size-sm);
648
+ font-weight: var(--viking-font-weight-semibold);
649
+ letter-spacing: var(--viking-letter-spacing-wide);
650
+ }
651
+
652
+ .landing-hero-badge-dot {
653
+ width: var(--viking-space-1);
654
+ height: var(--viking-space-1);
655
+ border-radius: 50%;
656
+ background: var(--viking-accent);
657
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--viking-accent) 30%, transparent);
658
+ }
659
+
660
+ .landing-hero-actions {
661
+ display: flex;
662
+ flex-wrap: wrap;
663
+ gap: var(--viking-space-2);
664
+ }
665
+
666
+ .landing-stats {
667
+ display: grid;
668
+ grid-template-columns: repeat(2, 1fr);
669
+ gap: var(--viking-space-2);
670
+ }
671
+
672
+ @media (min-width: 640px) {
673
+ .landing-stats {
674
+ grid-template-columns: repeat(4, 1fr);
675
+ }
676
+ }
677
+
678
+ .landing-stat {
679
+ padding: var(--viking-space-2);
680
+ border: 1px solid var(--viking-border);
681
+ border-radius: var(--viking-radius);
682
+ background: var(--viking-surface-recipe, var(--viking-surface));
683
+ min-width: 0;
684
+ box-shadow: var(--viking-shadow-xs);
685
+ }
686
+
687
+ .landing-section {
688
+ display: flex;
689
+ flex-direction: column;
690
+ gap: var(--viking-space-3);
691
+ padding-block: var(--viking-space-4);
692
+ border-top: 1px solid var(--viking-border-subtle);
693
+ }
694
+
695
+ .landing-section-header {
696
+ display: flex;
697
+ flex-direction: column;
698
+ gap: var(--viking-space-1);
699
+ max-width: var(--viking-content-readable-max-width, 48rem);
700
+ }
701
+
702
+ .landing-section-header-row {
703
+ max-width: none;
704
+ justify-content: space-between;
705
+ gap: var(--viking-space-3);
706
+ }
707
+
708
+ @media (min-width: 820px) {
709
+ .landing-section-header-row {
710
+ flex-direction: row;
711
+ align-items: end;
712
+ }
713
+ }
714
+
715
+ .landing-feature-grid {
716
+ display: grid;
717
+ grid-template-columns: 1fr;
718
+ gap: var(--viking-space-3);
719
+ }
720
+
721
+ @media (min-width: 768px) {
722
+ .landing-feature-grid {
723
+ grid-template-columns: repeat(3, 1fr);
724
+ }
725
+ }
726
+
727
+ .landing-preview-panel {
728
+ padding: var(--viking-card-padding);
729
+ border: 1px solid var(--viking-border-strong);
730
+ border-radius: var(--viking-radius-lg);
731
+ background: var(--viking-surface-recipe, var(--viking-surface));
732
+ box-shadow: var(--viking-shadow-lg);
733
+ display: flex;
734
+ flex-direction: column;
735
+ gap: var(--viking-space-2);
736
+ position: relative;
737
+ overflow: hidden;
738
+ }
739
+
740
+ .landing-preview-panel::before {
741
+ content: '';
742
+ position: absolute;
743
+ inset: 0 0 auto 0;
744
+ height: 1px;
745
+ background: linear-gradient(
746
+ 90deg,
747
+ transparent,
748
+ color-mix(in srgb, var(--viking-accent) 40%, transparent),
749
+ transparent
750
+ );
751
+ }
752
+
753
+ .landing-preview-toolbar,
754
+ .landing-preview-form {
755
+ display: flex;
756
+ flex-direction: column;
757
+ gap: var(--viking-space-2);
758
+ }
759
+
760
+ .landing-preview-toolbar {
761
+ flex-direction: row;
762
+ justify-content: space-between;
763
+ align-items: center;
764
+ }
765
+
766
+ .landing-preview-grid {
767
+ display: grid;
768
+ grid-template-columns: 1fr;
769
+ gap: var(--viking-space-2);
770
+ }
771
+
772
+ @media (min-width: 560px) {
773
+ .landing-preview-grid {
774
+ grid-template-columns: repeat(2, 1fr);
775
+ }
776
+ }
777
+
778
+ .landing-framework-strip {
779
+ display: flex;
780
+ flex-wrap: wrap;
781
+ gap: var(--viking-space-2);
782
+ padding: var(--viking-space-3) 0;
783
+ }
784
+
785
+ .landing-framework-chip {
786
+ display: inline-flex;
787
+ align-items: center;
788
+ gap: var(--viking-space-half);
789
+ padding: var(--viking-space-1) var(--viking-space-2);
790
+ border: 1px solid var(--viking-border);
791
+ border-radius: var(--viking-radius-pill);
792
+ background: var(--viking-surface-alt);
793
+ font-size: var(--viking-font-size-sm);
794
+ font-weight: var(--viking-font-weight-medium);
795
+ }
796
+
797
+ .landing-framework-chip code {
798
+ font-size: var(--viking-font-size-xs);
799
+ color: var(--viking-accent);
800
+ }
801
+
802
+ .landing-quickstart-grid {
803
+ display: grid;
804
+ grid-template-columns: 1fr;
805
+ gap: var(--viking-space-3);
806
+ align-items: start;
807
+ }
808
+
809
+ @media (min-width: 980px) {
810
+ .landing-quickstart-grid {
811
+ grid-template-columns: minmax(16rem, 0.8fr) minmax(0, 1.2fr);
812
+ }
813
+ }
814
+
815
+ .landing-quickstart-steps {
816
+ display: flex;
817
+ flex-direction: column;
818
+ gap: var(--viking-space-2);
819
+ padding: var(--viking-card-padding);
820
+ }
821
+
822
+ .landing-step-list {
823
+ display: flex;
824
+ flex-direction: column;
825
+ gap: var(--viking-space-1);
826
+ margin: 0;
827
+ padding-left: var(--viking-space-3);
828
+ }
829
+
830
+ .landing-quickstart-code {
831
+ min-width: 0;
832
+ }
833
+
834
+ .landing-component-grid,
835
+ .landing-framework-grid {
836
+ display: grid;
837
+ grid-template-columns: 1fr;
838
+ gap: var(--viking-space-2);
839
+ }
840
+
841
+ @media (min-width: 720px) {
842
+ .landing-component-grid {
843
+ grid-template-columns: repeat(2, 1fr);
844
+ }
845
+
846
+ .landing-framework-grid {
847
+ grid-template-columns: repeat(2, 1fr);
848
+ }
849
+ }
850
+
851
+ @media (min-width: 1080px) {
852
+ .landing-component-grid {
853
+ grid-template-columns: repeat(3, 1fr);
854
+ }
855
+
856
+ .landing-framework-grid {
857
+ grid-template-columns: repeat(4, 1fr);
858
+ }
859
+ }
860
+
861
+ .landing-component-card,
862
+ .landing-framework-card {
863
+ display: flex;
864
+ flex-direction: column;
865
+ gap: var(--viking-space-1);
866
+ padding: var(--viking-card-padding);
867
+ color: inherit;
868
+ text-decoration: none;
869
+ transition:
870
+ transform var(--viking-duration-normal) var(--viking-ease-out),
871
+ border-color var(--viking-duration-normal) var(--viking-ease-out),
872
+ box-shadow var(--viking-duration-normal) var(--viking-ease-out);
873
+ }
874
+
875
+ .landing-component-card:hover,
876
+ .landing-framework-card:hover {
877
+ transform: translateY(var(--viking-state-hover-lift, -4px));
878
+ border-color: var(--viking-accent);
879
+ box-shadow: var(--viking-shadow-hover);
880
+ }
881
+
882
+ .landing-component-card p,
883
+ .landing-framework-card span:last-child {
884
+ margin: 0;
885
+ }
886
+
887
+ .landing-playground-band {
888
+ display: grid;
889
+ grid-template-columns: 1fr;
890
+ gap: var(--viking-space-3);
891
+ align-items: center;
892
+ padding: var(--viking-space-4);
893
+ border: 1px solid var(--viking-border);
894
+ border-radius: var(--viking-radius-lg);
895
+ background: var(--viking-surface-recipe, var(--viking-surface));
896
+ box-shadow: var(--viking-shadow-md);
897
+ }
898
+
899
+ @media (min-width: 900px) {
900
+ .landing-playground-band {
901
+ grid-template-columns: 1fr minmax(18rem, 0.72fr);
902
+ }
903
+ }
904
+
905
+ .landing-playground-copy,
906
+ .landing-playground-preview {
907
+ display: flex;
908
+ flex-direction: column;
909
+ gap: var(--viking-space-2);
910
+ }
911
+
912
+ .landing-playground-preview {
913
+ padding: var(--viking-card-padding);
914
+ }
915
+
916
+ .component-detail-link {
917
+ display: inline-block;
918
+ margin-top: var(--viking-space-1);
919
+ font-size: var(--viking-font-size-sm);
920
+ color: var(--viking-accent);
921
+ text-decoration: none;
922
+ }
923
+
924
+ .component-detail-link:hover {
925
+ text-decoration: underline;
926
+ }
927
+
928
+ /* ── Demo helpers ── */
929
+ .showcase-auth-panel {
930
+ max-width: 24rem;
931
+ padding: var(--viking-space-3);
932
+ border: 1px solid var(--viking-border);
933
+ border-radius: var(--viking-radius-lg);
934
+ background: var(--viking-surface-alt);
935
+ display: flex;
936
+ flex-direction: column;
937
+ gap: var(--viking-space-2);
938
+ }
939
+
940
+ .showcase-search-palette {
941
+ max-width: 36rem;
942
+ display: flex;
943
+ flex-direction: column;
944
+ border: 1px solid var(--viking-border-strong);
945
+ border-radius: var(--viking-radius-lg);
946
+ background: var(--viking-surface-raised, var(--viking-surface));
947
+ box-shadow: var(--viking-shadow-lg);
948
+ overflow: hidden;
949
+ isolation: isolate;
950
+ }
951
+
952
+ .viking-search-group-label-static {
953
+ margin: var(--viking-space-1) 0 var(--viking-space-half);
954
+ padding: 0 var(--viking-space-1);
955
+ font-size: var(--viking-font-size-2xs, var(--viking-font-size-xs));
956
+ font-weight: var(--viking-font-weight-semibold, 600);
957
+ letter-spacing: var(--viking-letter-spacing-caps);
958
+ text-transform: uppercase;
959
+ color: var(--viking-text-muted);
960
+ }
961
+
962
+ .showcase-search-palette-header {
963
+ display: flex;
964
+ align-items: center;
965
+ gap: var(--viking-space-1);
966
+ padding: var(--viking-space-2);
967
+ border-bottom: 1px solid var(--viking-border);
968
+ background: color-mix(in srgb, var(--viking-bg) 26%, var(--viking-surface-raised));
969
+ }
970
+
971
+ .showcase-search-icon {
972
+ color: var(--viking-text-muted);
973
+ font-size: var(--viking-font-size-lg);
974
+ }
975
+
976
+ .showcase-search-input {
977
+ flex: 1;
978
+ border: none;
979
+ background: transparent;
980
+ color: var(--viking-text);
981
+ font: inherit;
982
+ outline: none;
983
+ }
984
+
985
+ .showcase-search-palette-body {
986
+ padding: var(--viking-space-2);
987
+ }
988
+
989
+ .showcase-search-palette-footer {
990
+ padding: var(--viking-space-1) var(--viking-space-2);
991
+ border-top: 1px solid var(--viking-border);
992
+ font-size: calc(var(--viking-font-size) * 0.85);
993
+ color: var(--viking-text-muted);
994
+ text-align: center;
995
+ }
996
+
997
+ .showcase-chart-demo {
998
+ width: 100%;
999
+ max-width: 24rem;
1000
+ padding: var(--viking-space-2);
1001
+ border: 1px solid var(--viking-border);
1002
+ border-radius: var(--viking-radius);
1003
+ background: color-mix(in srgb, var(--viking-surface) 96%, var(--viking-bg));
1004
+ }
1005
+
1006
+ .showcase-chart-line {
1007
+ fill: none;
1008
+ stroke: var(--viking-accent);
1009
+ stroke-width: 2;
1010
+ }
1011
+
1012
+ .showcase-chart-area {
1013
+ fill: color-mix(in srgb, var(--viking-accent) 20%, transparent);
1014
+ stroke: none;
1015
+ }
1016
+
1017
+ .showcase-modal-demo {
1018
+ position: relative;
1019
+ padding: var(--viking-space-4);
1020
+ border-radius: var(--viking-radius-lg);
1021
+ background: var(--viking-surface-alt);
1022
+ overflow: hidden;
1023
+ }
1024
+
1025
+ .showcase-modal-backdrop {
1026
+ position: absolute;
1027
+ inset: 0;
1028
+ background: color-mix(in srgb, var(--viking-bg) 60%, transparent);
1029
+ }
1030
+
1031
+ .showcase-modal-panel {
1032
+ position: relative;
1033
+ z-index: 1;
1034
+ max-width: 28rem;
1035
+ margin: 0 auto;
1036
+ }
1037
+
1038
+ .showcase-toast-demo {
1039
+ max-width: 24rem;
1040
+ border-left: 3px solid var(--viking-success);
1041
+ }
1042
+
1043
+ .showcase-icon-demo {
1044
+ display: inline-flex;
1045
+ align-items: center;
1046
+ justify-content: center;
1047
+ width: var(--viking-space-5);
1048
+ height: var(--viking-space-5);
1049
+ color: var(--viking-accent);
1050
+ font-size: var(--viking-font-size-lg);
1051
+ }