@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,1260 @@
1
+ .landing-container {
2
+ position: relative;
3
+ min-height: calc(100vh - 64px);
4
+ padding: 48px 16px 32px;
5
+ overflow: hidden;
6
+ font-family: var(--viking-font-family);
7
+
8
+ @media (min-width: 768px) {
9
+ padding: 72px 32px 64px;
10
+ }
11
+ }
12
+
13
+ .showcase-layout {
14
+ max-width: var(--container-max-width, 1260px);
15
+ margin: 0 auto;
16
+ }
17
+
18
+ /* ── Hero Showcase ── */
19
+ .hero-showcase {
20
+ display: grid;
21
+ grid-template-columns: 1fr;
22
+ gap: 48px;
23
+ align-items: center;
24
+ margin-bottom: 72px;
25
+ position: relative;
26
+ z-index: 10;
27
+ overflow: hidden;
28
+ @media (min-width: 960px) {
29
+ grid-template-columns: 1fr 1.1fr;
30
+ gap: 64px;
31
+ }
32
+ }
33
+
34
+ .hero-copy {
35
+ display: flex;
36
+ flex-direction: column;
37
+ gap: 24px;
38
+ }
39
+
40
+ .hero-badge {
41
+ display: inline-flex;
42
+ align-items: center;
43
+ gap: 8px;
44
+ background: var(--viking-surface);
45
+ border: 1px solid var(--border);
46
+ padding: 8px 16px;
47
+ border-radius: 1000px;
48
+ width: fit-content;
49
+ box-shadow: var(--shadow-sm);
50
+
51
+ .badge-dot {
52
+ width: var(--grid-unit, 8px);
53
+ height: var(--grid-unit, 8px);
54
+ border-radius: 50%;
55
+ background-color: var(--color-primary);
56
+ }
57
+
58
+ .badge-text {
59
+ font-size: 1rem;
60
+ font-weight: 600;
61
+ letter-spacing: 0.05em;
62
+ color: var(--text-color);
63
+ }
64
+ }
65
+
66
+ .title {
67
+ font-size: clamp(2.25rem, 5vw, 3.75rem);
68
+ font-weight: 900;
69
+ line-height: 1.05;
70
+ letter-spacing: -0.02em;
71
+ margin: 0;
72
+ color: var(--hero-title-color, var(--text-color)) !important;
73
+ text-transform: uppercase;
74
+ }
75
+
76
+ .subtitle {
77
+ font-size: clamp(1.05rem, 2vw, 1.25rem);
78
+ color: var(--text-muted);
79
+ line-height: 1.6;
80
+ margin: 0;
81
+ max-width: 520px;
82
+ }
83
+
84
+ .hero-stats {
85
+ display: flex;
86
+ flex-wrap: wrap;
87
+ gap: 10px;
88
+ }
89
+
90
+ .hero-stat-pill {
91
+ display: inline-flex;
92
+ align-items: center;
93
+ gap: 8px;
94
+ padding: 8px 14px;
95
+ border-radius: 1000px;
96
+ background: color-mix(in srgb, var(--viking-accent) 10%, var(--color-surface));
97
+ border: 1px solid color-mix(in srgb, var(--viking-accent) 25%, transparent);
98
+ font-size: 0.85rem;
99
+ font-weight: 600;
100
+ color: var(--text-color);
101
+ letter-spacing: 0.02em;
102
+
103
+ svg {
104
+ width: 18px;
105
+ height: 18px;
106
+ color: var(--viking-accent);
107
+ flex-shrink: 0;
108
+ }
109
+ }
110
+
111
+ .pulse-dot {
112
+ animation: pulseDot 2s ease-in-out infinite;
113
+ }
114
+
115
+ @keyframes pulseDot {
116
+ 0%,
117
+ 100% {
118
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--viking-accent) 60%, transparent);
119
+ }
120
+ 50% {
121
+ box-shadow: 0 0 0 6px
122
+ color-mix(in srgb, var(--viking-accent) 0%, transparent);
123
+ }
124
+ }
125
+
126
+ // Hero/pricing CTAs — see ../styles/cta.scss (shared with docs portal).
127
+
128
+ /* Mock dashboard in hero */
129
+ .hero-mockup {
130
+ perspective: 1200px;
131
+ }
132
+
133
+ .mockup-window {
134
+ background: var(--color-surface);
135
+ border: 1px solid var(--border);
136
+ border-radius: 16px;
137
+ overflow: hidden;
138
+ box-shadow:
139
+ 0 24px 64px color-mix(in srgb, var(--viking-charcoal-900) 40%, transparent),
140
+ 0 0 0 1px color-mix(in srgb, var(--viking-accent) 15%, transparent);
141
+ transform: rotateY(-4deg) rotateX(2deg);
142
+ transition: transform 0.4s ease;
143
+
144
+ &:hover {
145
+ transform: rotateY(0deg) rotateX(0deg);
146
+ }
147
+ }
148
+
149
+ .mockup-titlebar {
150
+ display: flex;
151
+ align-items: center;
152
+ gap: 8px;
153
+ padding: 12px 16px;
154
+ background: color-mix(in srgb, var(--viking-charcoal-900) 60%, var(--color-surface));
155
+ border-bottom: 1px solid var(--border);
156
+
157
+ .mockup-dot {
158
+ width: 10px;
159
+ height: 10px;
160
+ border-radius: 50%;
161
+ background: var(--text-muted);
162
+ opacity: 0.5;
163
+
164
+ &:first-child {
165
+ background: var(--viking-crimson-500);
166
+ opacity: 0.8;
167
+ }
168
+ &:nth-child(2) {
169
+ background: var(--viking-gold-500);
170
+ opacity: 0.8;
171
+ }
172
+ &:nth-child(3) {
173
+ background: var(--viking-accent-strong);
174
+ opacity: 0.8;
175
+ }
176
+ }
177
+
178
+ .mockup-title {
179
+ margin-left: 8px;
180
+ font-size: 0.85rem;
181
+ font-family: monospace;
182
+ color: var(--text-muted);
183
+ letter-spacing: 0.04em;
184
+ }
185
+ }
186
+
187
+ .mockup-body {
188
+ display: flex;
189
+ min-height: 280px;
190
+ }
191
+
192
+ .mockup-sidebar {
193
+ width: 48px;
194
+ padding: 16px 8px;
195
+ display: flex;
196
+ flex-direction: column;
197
+ gap: 12px;
198
+ border-right: 1px solid var(--border);
199
+ background: color-mix(in srgb, var(--viking-charcoal-900) 30%, transparent);
200
+
201
+ .mockup-nav-item {
202
+ height: 32px;
203
+ border-radius: 8px;
204
+ background: color-mix(in srgb, var(--text-muted) 20%, transparent);
205
+
206
+ &.active {
207
+ background: color-mix(in srgb, var(--viking-accent) 35%, transparent);
208
+ box-shadow: inset 0 0 0 1px var(--viking-accent);
209
+ }
210
+ }
211
+ }
212
+
213
+ .mockup-main {
214
+ flex: 1;
215
+ padding: 20px;
216
+ display: flex;
217
+ flex-direction: column;
218
+ gap: 16px;
219
+ }
220
+
221
+ .mockup-gauges {
222
+ display: grid;
223
+ grid-template-columns: 1fr;
224
+ gap: 12px;
225
+
226
+ @media (min-width: 480px) {
227
+ grid-template-columns: repeat(3, 1fr);
228
+ }
229
+ }
230
+
231
+ .mockup-gauge {
232
+ background: color-mix(in srgb, var(--viking-charcoal-900) 40%, var(--color-surface));
233
+ border: 1px solid var(--border);
234
+ border-radius: 10px;
235
+ padding: 12px;
236
+ text-align: center;
237
+
238
+ &.primary {
239
+ border-color: var(--viking-accent);
240
+ box-shadow: 0 0 16px
241
+ color-mix(in srgb, var(--viking-accent) 25%, transparent);
242
+ }
243
+
244
+ .gauge-label {
245
+ display: block;
246
+ font-size: 0.7rem;
247
+ text-transform: uppercase;
248
+ letter-spacing: 0.08em;
249
+ color: var(--text-muted);
250
+ margin-bottom: 4px;
251
+ }
252
+
253
+ .gauge-val {
254
+ font-size: 1.25rem;
255
+ font-weight: 800;
256
+ color: var(--text-color);
257
+ }
258
+ }
259
+
260
+ .mockup-chart {
261
+ flex: 1;
262
+ display: flex;
263
+ align-items: flex-end;
264
+ gap: 6px;
265
+ padding: 12px;
266
+ background: color-mix(in srgb, var(--viking-charcoal-900) 50%, transparent);
267
+ border-radius: 10px;
268
+ border: 1px solid var(--border);
269
+ min-height: 100px;
270
+
271
+ .chart-bar {
272
+ flex: 1;
273
+ background: linear-gradient(180deg, var(--viking-accent), var(--viking-accent-strong));
274
+ border-radius: 4px 4px 0 0;
275
+ opacity: 0.85;
276
+ animation: barPulse 3s ease-in-out infinite;
277
+ height: calc(var(--chart-bar-height, 50) * 1%);
278
+
279
+ @for $i from 1 through 8 {
280
+ &:nth-child(#{$i}) {
281
+ animation-delay: #{$i * 0.15}s;
282
+ }
283
+ }
284
+
285
+ @for $h from 40 through 95 {
286
+ &[data-height='#{$h}'] {
287
+ --chart-bar-height: #{$h};
288
+ }
289
+ }
290
+ }
291
+ }
292
+
293
+ @keyframes barPulse {
294
+ 0%,
295
+ 100% {
296
+ opacity: 0.7;
297
+ }
298
+ 50% {
299
+ opacity: 1;
300
+ }
301
+ }
302
+
303
+ .mockup-stats-row {
304
+ display: grid;
305
+ grid-template-columns: 1fr;
306
+ gap: 12px;
307
+
308
+ @media (min-width: 480px) {
309
+ grid-template-columns: repeat(3, 1fr);
310
+ }
311
+
312
+ .mockup-stat {
313
+ background: var(--viking-surface);
314
+ border: 1px solid var(--border);
315
+ border-radius: 8px;
316
+ padding: 10px 12px;
317
+
318
+ span {
319
+ display: block;
320
+ font-size: 0.7rem;
321
+ text-transform: uppercase;
322
+ letter-spacing: 0.06em;
323
+ color: var(--text-muted);
324
+ }
325
+
326
+ strong {
327
+ font-size: 1rem;
328
+ color: var(--viking-accent);
329
+ }
330
+ }
331
+ }
332
+
333
+ /* ── Quick start ── */
334
+ .quick-start-band {
335
+ padding: 56px 0 64px;
336
+ margin-bottom: 32px;
337
+ border-bottom: 1px solid var(--border);
338
+ position: relative;
339
+ }
340
+
341
+ /* pola.rs-inspired minimal geometric rule (subtle, high-contrast, works in light/dark) */
342
+ .quick-start-band::after {
343
+ content: "";
344
+ position: absolute;
345
+ bottom: -1px;
346
+ left: 50%;
347
+ transform: translateX(-50%);
348
+ width: 120px;
349
+ height: 1px;
350
+ background: linear-gradient(
351
+ 90deg,
352
+ transparent,
353
+ var(--viking-accent),
354
+ transparent
355
+ );
356
+ opacity: 0.35;
357
+ }
358
+
359
+ .quick-start-header {
360
+ text-align: center;
361
+ max-width: 640px;
362
+ margin: 0 auto 48px;
363
+
364
+ h2 {
365
+ font-size: clamp(1.75rem, 3vw, 2.25rem);
366
+ font-weight: 800;
367
+ margin: 0 0 12px 0;
368
+ text-transform: uppercase;
369
+ letter-spacing: -0.02em;
370
+ }
371
+
372
+ p {
373
+ color: var(--text-muted);
374
+ margin: 0;
375
+ line-height: 1.6;
376
+ font-size: 1.1rem;
377
+ }
378
+ }
379
+
380
+ .quick-start-steps {
381
+ display: grid;
382
+ grid-template-columns: 1fr;
383
+ gap: 24px;
384
+ list-style: none;
385
+ padding: 0;
386
+ margin: 0;
387
+
388
+ @media (min-width: 768px) {
389
+ grid-template-columns: repeat(2, 1fr);
390
+ gap: 32px;
391
+ }
392
+
393
+ @media (min-width: 1100px) {
394
+ grid-template-columns: repeat(4, 1fr);
395
+ }
396
+ }
397
+
398
+ .quick-start-step {
399
+ position: relative;
400
+ background: var(--color-surface);
401
+ border: 1px solid var(--border);
402
+ border-radius: var(--viking-radius-xl, 16px);
403
+ padding: 32px 28px;
404
+ text-align: center;
405
+ transition:
406
+ border-color 0.25s ease,
407
+ transform 0.25s ease,
408
+ box-shadow 0.25s ease;
409
+
410
+ &:hover {
411
+ border-color: var(--viking-accent);
412
+ transform: translateY(-4px);
413
+ box-shadow: var(--shadow-hover);
414
+ }
415
+
416
+ .step-number {
417
+ position: absolute;
418
+ top: 16px;
419
+ right: 20px;
420
+ font-size: 0.75rem;
421
+ font-weight: 800;
422
+ letter-spacing: 0.1em;
423
+ color: var(--viking-accent);
424
+ opacity: 0.7;
425
+ }
426
+
427
+ .step-icon {
428
+ font-size: 36px;
429
+ color: var(--viking-accent);
430
+ margin-bottom: 16px;
431
+ filter: drop-shadow(
432
+ 0 0 8px color-mix(in srgb, var(--viking-accent) 35%, transparent)
433
+ );
434
+ }
435
+
436
+ h3 {
437
+ font-size: 1.25rem;
438
+ font-weight: 800;
439
+ margin: 0 0 10px 0;
440
+ text-transform: uppercase;
441
+ letter-spacing: 0.04em;
442
+ }
443
+
444
+ p {
445
+ margin: 0;
446
+ color: var(--text-muted);
447
+ line-height: 1.55;
448
+ font-size: 1rem;
449
+ }
450
+ }
451
+
452
+ /* ── Security pillars ── */
453
+ .security-pillars-band {
454
+ padding: 72px 0;
455
+ border-bottom: 1px solid var(--border);
456
+ position: relative;
457
+ }
458
+
459
+ /* pola.rs minimal accent line */
460
+ .security-pillars-band::after {
461
+ content: "";
462
+ position: absolute;
463
+ bottom: -1px;
464
+ left: 50%;
465
+ transform: translateX(-50%);
466
+ width: 80px;
467
+ height: 1px;
468
+ background: linear-gradient(
469
+ 90deg,
470
+ transparent,
471
+ var(--viking-accent),
472
+ transparent
473
+ );
474
+ opacity: 0.25;
475
+ }
476
+
477
+ .security-pillars-header {
478
+ text-align: center;
479
+ max-width: 680px;
480
+ margin: 0 auto 48px;
481
+
482
+ h2 {
483
+ font-size: clamp(1.75rem, 3vw, 2.5rem);
484
+ font-weight: 800;
485
+ margin: 0 0 12px 0;
486
+ text-transform: uppercase;
487
+ letter-spacing: -0.02em;
488
+ }
489
+
490
+ p {
491
+ color: var(--text-muted);
492
+ margin: 0;
493
+ line-height: 1.6;
494
+ font-size: 1.1rem;
495
+ }
496
+ }
497
+
498
+ .security-pillars-grid {
499
+ display: grid;
500
+ grid-template-columns: 1fr;
501
+ gap: 20px;
502
+ list-style: none;
503
+ padding: 0;
504
+ margin: 0;
505
+
506
+ @media (min-width: 600px) {
507
+ grid-template-columns: repeat(2, 1fr);
508
+ }
509
+
510
+ @media (min-width: 960px) {
511
+ grid-template-columns: repeat(4, 1fr);
512
+ }
513
+ }
514
+
515
+ .security-pillar {
516
+ display: flex;
517
+ flex-direction: column;
518
+ align-items: center;
519
+ text-align: center;
520
+ gap: 10px;
521
+ padding: 28px 20px;
522
+ border-radius: 16px;
523
+ background: color-mix(in srgb, var(--viking-accent) 6%, var(--color-surface));
524
+ border: 1px solid color-mix(in srgb, var(--viking-accent) 18%, transparent);
525
+ transition:
526
+ border-color 0.2s ease,
527
+ box-shadow 0.2s ease;
528
+
529
+ &:hover {
530
+ border-color: var(--viking-accent);
531
+ box-shadow: 0 0 24px
532
+ color-mix(in srgb, var(--viking-accent) 15%, transparent);
533
+ }
534
+
535
+ svg {
536
+ width: 32px;
537
+ height: 32px;
538
+ color: var(--viking-accent);
539
+ }
540
+
541
+ strong {
542
+ font-size: 0.95rem;
543
+ font-weight: 700;
544
+ text-transform: uppercase;
545
+ letter-spacing: 0.06em;
546
+ color: var(--text-color);
547
+ }
548
+
549
+ span:last-child {
550
+ font-size: 0.9rem;
551
+ color: var(--text-muted);
552
+ line-height: 1.45;
553
+ }
554
+ }
555
+
556
+ /* ── Integrations strip ── */
557
+ .integrations-strip {
558
+ width: 100%;
559
+ padding: 32px 0;
560
+ margin-bottom: 64px;
561
+ border: 0;
562
+ text-align: center;
563
+ position: relative;
564
+ }
565
+
566
+ .integrations-strip::before,
567
+ .integrations-strip::after {
568
+ content: "";
569
+ position: absolute;
570
+ left: 50%;
571
+ transform: translateX(-50%);
572
+ width: 100px;
573
+ height: 1px;
574
+ background: linear-gradient(
575
+ 90deg,
576
+ transparent,
577
+ var(--viking-accent),
578
+ transparent
579
+ );
580
+ opacity: 0.3;
581
+ }
582
+
583
+ .integrations-strip::before {
584
+ top: 0;
585
+ }
586
+
587
+ .integrations-strip::after {
588
+ bottom: 0;
589
+ }
590
+
591
+ .strip-label {
592
+ font-size: 0.85rem;
593
+ font-weight: 700;
594
+ letter-spacing: 0.15em;
595
+ color: var(--text-muted);
596
+ margin: 0 0 24px 0;
597
+ }
598
+
599
+ .integration-logos {
600
+ display: flex;
601
+ flex-wrap: wrap;
602
+ justify-content: center;
603
+ gap: 32px 48px;
604
+ }
605
+
606
+ .integration-logo-item {
607
+ display: flex;
608
+ align-items: center;
609
+ gap: 10px;
610
+ text-decoration: none !important;
611
+ color: var(--text-muted) !important;
612
+ font-weight: 700;
613
+ font-size: 0.95rem;
614
+ letter-spacing: 0.04em;
615
+ text-transform: uppercase;
616
+ transition: color 0.2s ease;
617
+
618
+ svg {
619
+ width: 22px;
620
+ height: 22px;
621
+ }
622
+
623
+ svg:not(.viking-icon-integration-brand) {
624
+ color: var(--viking-accent);
625
+ }
626
+
627
+ &:hover {
628
+ color: var(--text-color) !important;
629
+ }
630
+ }
631
+
632
+ /* ── Wide capability bands ── */
633
+ .showcase-band {
634
+ display: grid;
635
+ grid-template-columns: 1fr;
636
+ gap: 40px;
637
+ align-items: center;
638
+ padding: 56px 0;
639
+ border-bottom: 1px solid var(--border);
640
+ position: relative;
641
+
642
+ @media (min-width: 900px) {
643
+ grid-template-columns: 1fr 1fr;
644
+ gap: 64px;
645
+ padding: 72px 0;
646
+ }
647
+
648
+ /* double divider accent for each capability showcase */
649
+ &::after {
650
+ content: "";
651
+ position: absolute;
652
+ bottom: -1px;
653
+ left: 50%;
654
+ transform: translateX(-50%);
655
+ width: 60px;
656
+ height: 1px;
657
+ background: linear-gradient(
658
+ 90deg,
659
+ transparent,
660
+ var(--viking-accent),
661
+ transparent
662
+ );
663
+ opacity: 0.2;
664
+ }
665
+
666
+ &.reversed {
667
+ @media (min-width: 900px) {
668
+ .showcase-band-copy {
669
+ order: 2;
670
+ }
671
+ .showcase-band-visual {
672
+ order: 1;
673
+ }
674
+ }
675
+ }
676
+ }
677
+
678
+ .showcase-band-copy {
679
+ .section-tag {
680
+ font-size: 0.85rem;
681
+ font-weight: 700;
682
+ letter-spacing: 0.15em;
683
+ color: var(--viking-accent);
684
+ text-transform: uppercase;
685
+ display: block;
686
+ margin-bottom: 16px;
687
+ }
688
+
689
+ h2 {
690
+ font-size: clamp(1.75rem, 3vw, 2.5rem);
691
+ font-weight: 800;
692
+ margin: 0 0 16px 0;
693
+ text-transform: uppercase;
694
+ letter-spacing: -0.02em;
695
+ color: var(--text-color);
696
+ }
697
+
698
+ p {
699
+ font-size: 1.1rem;
700
+ color: var(--text-muted);
701
+ line-height: 1.65;
702
+ margin: 0 0 24px 0;
703
+ }
704
+ }
705
+
706
+ .showcase-link {
707
+ font-weight: 600;
708
+ color: var(--viking-accent) !important;
709
+ text-decoration: none !important;
710
+ letter-spacing: 0.04em;
711
+
712
+ &:hover {
713
+ color: var(--viking-accent-strong) !important;
714
+ }
715
+
716
+ &.muted-link {
717
+ color: var(--text-muted) !important;
718
+ font-weight: 600;
719
+
720
+ &:hover {
721
+ color: var(--viking-accent) !important;
722
+ }
723
+ }
724
+ }
725
+
726
+ .visual-panel {
727
+ background: var(--color-surface);
728
+ border: 1px solid var(--border);
729
+ border-radius: var(--viking-radius-xl, 16px);
730
+ padding: 28px;
731
+ box-shadow: var(--shadow-md);
732
+ }
733
+
734
+ .visual-panel-header {
735
+ display: flex;
736
+ align-items: center;
737
+ gap: 12px;
738
+ margin-bottom: 24px;
739
+ font-weight: 700;
740
+ text-transform: uppercase;
741
+ letter-spacing: 0.06em;
742
+ font-size: 0.9rem;
743
+ color: var(--text-muted);
744
+
745
+ svg {
746
+ width: 24px;
747
+ height: 24px;
748
+ color: var(--viking-accent);
749
+ }
750
+ }
751
+
752
+ .visual-metrics {
753
+ display: grid;
754
+ grid-template-columns: 1fr;
755
+ gap: 12px;
756
+ margin-bottom: 24px;
757
+
758
+ @media (min-width: 600px) {
759
+ grid-template-columns: repeat(2, 1fr);
760
+ gap: 16px;
761
+ }
762
+
763
+ @media (min-width: 900px) {
764
+ grid-template-columns: repeat(3, 1fr);
765
+ }
766
+ }
767
+
768
+ .visual-metric {
769
+ background: color-mix(in srgb, var(--viking-charcoal-900) 35%, var(--color-surface));
770
+ border: 1px solid var(--border);
771
+ border-radius: var(--viking-radius-lg);
772
+ padding: 16px;
773
+ position: relative;
774
+
775
+ .metric-label {
776
+ display: block;
777
+ font-size: 0.7rem;
778
+ text-transform: uppercase;
779
+ letter-spacing: 0.06em;
780
+ color: var(--text-muted);
781
+ margin-bottom: 6px;
782
+ }
783
+
784
+ .metric-value {
785
+ font-size: 1.35rem;
786
+ font-weight: 800;
787
+ color: var(--text-color);
788
+ }
789
+
790
+ .metric-trend {
791
+ position: absolute;
792
+ top: 12px;
793
+ right: 12px;
794
+ font-size: 0.85rem;
795
+ font-weight: 700;
796
+
797
+ &.trend-up {
798
+ color: var(--viking-accent-strong);
799
+ }
800
+ &.trend-down {
801
+ color: var(--viking-gold-500);
802
+ }
803
+ &.trend-stable {
804
+ color: var(--text-muted);
805
+ }
806
+ }
807
+ }
808
+
809
+ .visual-sparkline {
810
+ height: 48px;
811
+ opacity: 0.9;
812
+
813
+ svg {
814
+ width: 100%;
815
+ height: 100%;
816
+ }
817
+ }
818
+
819
+ /* ── Widget showcase ── */
820
+ .widget-showcase {
821
+ padding: 72px 0;
822
+ border-bottom: 1px solid var(--border);
823
+ position: relative;
824
+ }
825
+
826
+ /* pola.rs-inspired double divider accent */
827
+ .widget-showcase::after {
828
+ content: "";
829
+ position: absolute;
830
+ bottom: -1px;
831
+ left: 50%;
832
+ transform: translateX(-50%);
833
+ width: 80px;
834
+ height: 1px;
835
+ background: linear-gradient(
836
+ 90deg,
837
+ transparent,
838
+ var(--viking-accent),
839
+ transparent
840
+ );
841
+ opacity: 0.25;
842
+ }
843
+
844
+ .widget-showcase-inner {
845
+ display: grid;
846
+ grid-template-columns: 1fr;
847
+ gap: 40px;
848
+ align-items: center;
849
+
850
+ @media (min-width: 900px) {
851
+ grid-template-columns: 1fr 1fr;
852
+ gap: 64px;
853
+ }
854
+ }
855
+
856
+ .widget-copy {
857
+ .section-tag {
858
+ font-size: 0.85rem;
859
+ font-weight: 700;
860
+ letter-spacing: 0.15em;
861
+ color: var(--viking-accent);
862
+ text-transform: uppercase;
863
+ display: block;
864
+ margin-bottom: 16px;
865
+ }
866
+
867
+ h2 {
868
+ font-size: clamp(1.75rem, 3vw, 2.25rem);
869
+ font-weight: 800;
870
+ margin: 0 0 16px 0;
871
+ text-transform: uppercase;
872
+ }
873
+
874
+ p {
875
+ color: var(--text-muted);
876
+ line-height: 1.6;
877
+ margin: 0 0 24px 0;
878
+ }
879
+
880
+ .embed-code {
881
+ background: color-mix(in srgb, var(--viking-charcoal-900) 70%, transparent);
882
+ padding: 16px;
883
+ border-radius: var(--viking-radius-lg);
884
+ border: 1px solid color-mix(in srgb, var(--viking-accent) 30%, transparent);
885
+ overflow-x: auto;
886
+
887
+ code {
888
+ color: var(--viking-accent);
889
+ font-family: monospace;
890
+ font-size: 0.85rem;
891
+ white-space: pre-wrap;
892
+ word-break: break-all;
893
+ }
894
+ }
895
+ }
896
+
897
+ .widget-mount-point {
898
+ min-height: 200px;
899
+ display: flex;
900
+ align-items: center;
901
+ justify-content: center;
902
+ background: var(--color-surface);
903
+ border: 1px solid var(--border);
904
+ border-radius: var(--viking-radius-xl, 16px);
905
+ padding: 32px;
906
+ box-shadow: var(--shadow-md);
907
+ }
908
+
909
+ /* ── Pricing ── */
910
+ .pricing-showcase {
911
+ padding: 72px 0;
912
+ text-align: center;
913
+ border-bottom: 1px solid var(--border);
914
+ position: relative;
915
+ }
916
+
917
+ /* pola.rs-inspired double divider accent */
918
+ .pricing-showcase::after {
919
+ content: "";
920
+ position: absolute;
921
+ bottom: -1px;
922
+ left: 50%;
923
+ transform: translateX(-50%);
924
+ width: 80px;
925
+ height: 1px;
926
+ background: linear-gradient(
927
+ 90deg,
928
+ transparent,
929
+ var(--viking-accent),
930
+ transparent
931
+ );
932
+ opacity: 0.25;
933
+ }
934
+
935
+ .pricing-header {
936
+ margin-bottom: 48px;
937
+
938
+ .section-tag {
939
+ font-size: 0.85rem;
940
+ font-weight: 700;
941
+ letter-spacing: 0.15em;
942
+ color: var(--viking-accent);
943
+ text-transform: uppercase;
944
+ display: block;
945
+ margin-bottom: 16px;
946
+ }
947
+
948
+ h2 {
949
+ font-size: clamp(1.75rem, 3vw, 2.5rem);
950
+ font-weight: 800;
951
+ margin: 0 0 12px 0;
952
+ text-transform: uppercase;
953
+ }
954
+
955
+ p {
956
+ color: var(--text-muted);
957
+ margin: 0;
958
+ }
959
+ }
960
+
961
+ .pricing-cards-container {
962
+ display: flex;
963
+ gap: 2rem;
964
+ flex-direction: column;
965
+ align-items: center;
966
+ justify-content: center;
967
+ max-width: 800px;
968
+ margin: 0 auto;
969
+
970
+ @media (min-width: 600px) {
971
+ flex-direction: row;
972
+ flex-wrap: wrap;
973
+ }
974
+
975
+ .pricing-card {
976
+ flex: 1 1 100%;
977
+ width: 100%;
978
+ min-width: 0;
979
+ max-width: 100%;
980
+ padding: 2.5rem 2rem;
981
+ border-radius: 1.5rem;
982
+ background: var(--color-surface);
983
+ border: 1px solid var(--border);
984
+ transition:
985
+ transform 0.3s ease,
986
+ box-shadow 0.3s ease;
987
+ display: flex;
988
+ flex-direction: column;
989
+ text-align: left;
990
+
991
+ @media (min-width: 600px) {
992
+ flex: 1;
993
+ min-width: 260px;
994
+ max-width: 360px;
995
+ width: auto;
996
+ }
997
+
998
+ &:hover {
999
+ transform: translateY(-8px);
1000
+ box-shadow: var(--shadow-hover);
1001
+ }
1002
+
1003
+ h3 {
1004
+ font-size: 1.1rem;
1005
+ color: var(--text-muted);
1006
+ margin: 0;
1007
+ text-transform: uppercase;
1008
+ letter-spacing: 0.1em;
1009
+ }
1010
+
1011
+ .price {
1012
+ font-size: 3rem;
1013
+ font-weight: 800;
1014
+ margin: 1rem 0;
1015
+ color: var(--text-color);
1016
+
1017
+ span {
1018
+ font-size: 1rem;
1019
+ font-weight: normal;
1020
+ color: var(--text-muted);
1021
+ }
1022
+ }
1023
+
1024
+ .features-list {
1025
+ list-style: none;
1026
+ padding: 0;
1027
+ margin-bottom: 2rem;
1028
+ flex-grow: 1;
1029
+
1030
+ li {
1031
+ display: flex;
1032
+ align-items: center;
1033
+ margin-bottom: 1rem;
1034
+ color: var(--text-color);
1035
+ font-size: 1rem;
1036
+
1037
+ svg {
1038
+ width: 20px;
1039
+ height: 20px;
1040
+ color: var(--viking-accent);
1041
+ margin-right: 0.75rem;
1042
+ flex-shrink: 0;
1043
+ }
1044
+ }
1045
+ }
1046
+
1047
+ .cta-button {
1048
+ margin-top: auto;
1049
+ width: 100%;
1050
+ }
1051
+
1052
+ &.pro-tier {
1053
+ border: 2px solid var(--viking-accent);
1054
+ position: relative;
1055
+ background: color-mix(
1056
+ in srgb,
1057
+ var(--viking-accent) 6%,
1058
+ var(--color-surface)
1059
+ );
1060
+
1061
+ .recommended-badge {
1062
+ position: absolute;
1063
+ top: -14px;
1064
+ left: 50%;
1065
+ transform: translateX(-50%);
1066
+ background: var(--viking-accent);
1067
+ color: var(--white);
1068
+ padding: 6px 14px;
1069
+ border-radius: 1000px;
1070
+ font-size: 0.75rem;
1071
+ font-weight: 800;
1072
+ letter-spacing: 0.1em;
1073
+ text-transform: uppercase;
1074
+ }
1075
+
1076
+ .pro-btn {
1077
+ background: var(--viking-accent);
1078
+ color: var(--white);
1079
+ border: none;
1080
+
1081
+ &:hover {
1082
+ background: var(--viking-accent-strong);
1083
+ }
1084
+ }
1085
+ }
1086
+ }
1087
+ }
1088
+
1089
+ /* ── Whitepaper CTA (viking-ui) ── */
1090
+ .landing-container .viking-whitepaper-cta {
1091
+ margin-block: 56px;
1092
+ }
1093
+
1094
+ /* ── Whitepaper band (legacy) ── */
1095
+ .whitepaper-band {
1096
+ padding: 56px 0;
1097
+
1098
+ &.no-bottom-rule {
1099
+ border-bottom: none;
1100
+ }
1101
+ }
1102
+
1103
+ .whitepaper-band-inner {
1104
+ display: flex;
1105
+ flex-direction: column;
1106
+ gap: 24px;
1107
+ align-items: flex-start;
1108
+ padding: 40px;
1109
+ border-radius: var(--viking-radius-xl, 16px);
1110
+ background: color-mix(in srgb, var(--viking-accent) 8%, var(--color-surface));
1111
+ border: 1px solid color-mix(in srgb, var(--viking-accent) 20%, transparent);
1112
+
1113
+ @media (min-width: 768px) {
1114
+ flex-direction: row;
1115
+ align-items: center;
1116
+ justify-content: space-between;
1117
+ }
1118
+
1119
+ .section-tag {
1120
+ font-size: 0.85rem;
1121
+ font-weight: 700;
1122
+ letter-spacing: 0.15em;
1123
+ color: var(--viking-accent);
1124
+ text-transform: uppercase;
1125
+ display: block;
1126
+ margin-bottom: 12px;
1127
+ }
1128
+
1129
+ h2 {
1130
+ font-size: 1.75rem;
1131
+ font-weight: 800;
1132
+ margin: 0 0 8px 0;
1133
+ text-transform: uppercase;
1134
+ }
1135
+
1136
+ p {
1137
+ color: var(--text-muted);
1138
+ margin: 0;
1139
+ max-width: 480px;
1140
+ line-height: 1.55;
1141
+ }
1142
+
1143
+ .whitepaper-btn {
1144
+ width: auto;
1145
+ max-width: 100%;
1146
+ flex-shrink: 0;
1147
+ align-self: flex-start;
1148
+
1149
+ @media (min-width: 768px) {
1150
+ align-self: center;
1151
+ }
1152
+ }
1153
+ }
1154
+
1155
+ /* ── Compliance ── */
1156
+ .transparency-atmospheric {
1157
+ width: 100%;
1158
+ margin: 72px auto 0;
1159
+ padding: 64px 24px;
1160
+ position: relative;
1161
+ z-index: 10;
1162
+ border-top: 1px solid color-mix(in srgb, var(--viking-accent) 25%, transparent);
1163
+ display: flex;
1164
+ flex-direction: column;
1165
+ align-items: center;
1166
+ text-align: center;
1167
+ gap: 48px;
1168
+
1169
+ .atmospheric-header {
1170
+ max-width: 640px;
1171
+
1172
+ .section-tag {
1173
+ font-size: 0.85rem;
1174
+ font-weight: 700;
1175
+ letter-spacing: 0.2em;
1176
+ color: var(--viking-accent);
1177
+ text-transform: uppercase;
1178
+ margin-bottom: 16px;
1179
+ display: block;
1180
+ }
1181
+
1182
+ h2 {
1183
+ font-size: clamp(1.75rem, 3vw, 2.5rem);
1184
+ font-weight: 200;
1185
+ color: var(--text-color);
1186
+ letter-spacing: 0.1em;
1187
+ text-transform: uppercase;
1188
+ margin: 0 0 12px 0;
1189
+ }
1190
+
1191
+ p {
1192
+ font-size: 1.1rem;
1193
+ color: var(--text-muted);
1194
+ line-height: 1.6;
1195
+ margin: 0;
1196
+ }
1197
+ }
1198
+
1199
+ .purpose-list {
1200
+ display: flex;
1201
+ flex-wrap: wrap;
1202
+ justify-content: center;
1203
+ gap: 48px 64px;
1204
+ list-style: none;
1205
+ padding: 0;
1206
+ margin: 0;
1207
+
1208
+ li {
1209
+ display: flex;
1210
+ flex-direction: column;
1211
+ align-items: center;
1212
+ text-align: center;
1213
+ gap: 16px;
1214
+ max-width: 220px;
1215
+
1216
+ svg {
1217
+ width: 48px;
1218
+ height: 48px;
1219
+ color: var(--viking-accent);
1220
+ filter: drop-shadow(
1221
+ 0 0 10px color-mix(in srgb, var(--viking-accent) 40%, transparent)
1222
+ );
1223
+ }
1224
+
1225
+ .purpose-text {
1226
+ font-size: 1rem;
1227
+ color: var(--text-muted);
1228
+ line-height: 1.55;
1229
+
1230
+ strong {
1231
+ display: block;
1232
+ color: var(--text-color);
1233
+ font-weight: 600;
1234
+ letter-spacing: 0.08em;
1235
+ text-transform: uppercase;
1236
+ margin-bottom: 6px;
1237
+ }
1238
+ }
1239
+ }
1240
+ }
1241
+ }
1242
+
1243
+ .section-tag {
1244
+ font-size: 0.85rem;
1245
+ font-weight: 700;
1246
+ letter-spacing: 0.15em;
1247
+ color: var(--viking-accent);
1248
+ text-transform: uppercase;
1249
+ }
1250
+
1251
+ /* Inline Viking SVG icons must not clip in marketing pages */
1252
+ .landing-container svg[aria-hidden='true'] {
1253
+ overflow: visible;
1254
+ line-height: 1;
1255
+ display: inline-flex;
1256
+ align-items: center;
1257
+ justify-content: center;
1258
+ flex-shrink: 0;
1259
+ vertical-align: middle;
1260
+ }