@dataengineeringformachinelearning/viking-ui 4.0.4 → 4.0.5

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 (246) hide show
  1. package/README.md +35 -11
  2. package/dist/README.md +35 -11
  3. package/dist/design-tokens.css +300 -85
  4. package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs +100 -64
  5. package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +1 -1
  6. package/dist/icons.js +306 -0
  7. package/dist/package.json +24 -5
  8. package/{src/lib/site-drakkar/site-drakkar.config.ts → dist/site-drakkar.js} +64 -130
  9. package/dist/src/tokens/viking-tokens.json +9 -7
  10. package/dist/types/dataengineeringformachinelearning-viking-ui.d.ts +97 -3
  11. package/dist/viking-components.css +161 -70
  12. package/dist/viking-tokens.json +9 -7
  13. package/dist/viking-ui-elements.js +44 -32
  14. package/dist/viking-ui.css +1 -1
  15. package/dist/web-components.js +44 -32
  16. package/package.json +30 -8
  17. package/dist/scripts/build-web-components.mjs +0 -37
  18. package/dist/src/web/badge/viking-badge-wc.ts +0 -116
  19. package/dist/src/web/button/viking-button-wc.ts +0 -165
  20. package/dist/src/web/callout/viking-callout-wc.ts +0 -105
  21. package/dist/src/web/card/viking-card-wc.ts +0 -67
  22. package/dist/src/web/core/base.ts +0 -56
  23. package/dist/src/web/core/dom.ts +0 -53
  24. package/dist/src/web/core/icons-inline.ts +0 -44
  25. package/dist/src/web/core/styles.ts +0 -1261
  26. package/dist/src/web/core/types.ts +0 -19
  27. package/dist/src/web/field/viking-field-wc.ts +0 -154
  28. package/dist/src/web/index.ts +0 -73
  29. package/dist/src/web/input/viking-input-wc.ts +0 -211
  30. package/dist/src/web/modal/viking-modal-wc.ts +0 -187
  31. package/dist/src/web/search-palette/viking-search-palette-wc.ts +0 -495
  32. package/dist/src/web/select/viking-select-wc.ts +0 -218
  33. package/dist/src/web/suite-header/viking-suite-header-wc.ts +0 -729
  34. package/dist/src/web/suite-search-palette/viking-suite-search-palette-wc.ts +0 -234
  35. package/dist/src/web/theme-toggle/viking-theme-toggle-wc.ts +0 -139
  36. package/dist/src/web/types.ts +0 -37
  37. package/dist/src/web/web-components.spec.ts +0 -297
  38. package/src/assets/drakkar-favicon.svg +0 -17
  39. package/src/assets/fonts/inter/InterVariable-Italic.woff2 +0 -0
  40. package/src/assets/fonts/inter/InterVariable.woff2 +0 -0
  41. package/src/core/brand/deml-lockup.svg +0 -5
  42. package/src/core/brand/deml-mark-compact.svg +0 -4
  43. package/src/core/brand/deml-mark-filled.svg +0 -3
  44. package/src/core/brand/deml-mark-outline.svg +0 -4
  45. package/src/core/brand-icons.ts +0 -62
  46. package/src/core/icons.spec.ts +0 -52
  47. package/src/core/icons.ts +0 -206
  48. package/src/core/integration-brand-icons.ts +0 -77
  49. package/src/core/lucide-paths.generated.ts +0 -130
  50. package/src/core/types.ts +0 -85
  51. package/src/core/uid.ts +0 -7
  52. package/src/elements/button/viking-button.ts +0 -201
  53. package/src/elements/card/viking-card.ts +0 -60
  54. package/src/elements/core/dom.ts +0 -33
  55. package/src/elements/core/styles.ts +0 -28
  56. package/src/elements/modal/viking-modal.ts +0 -154
  57. package/src/index.ts +0 -1
  58. package/src/lib/accordion/accordion.ts +0 -126
  59. package/src/lib/app-header/app-header.scss +0 -274
  60. package/src/lib/app-header/app-header.ts +0 -43
  61. package/src/lib/app-sidebar/app-sidebar.scss +0 -415
  62. package/src/lib/app-sidebar/app-sidebar.ts +0 -29
  63. package/src/lib/auth-panel/auth-panel.spec.ts +0 -132
  64. package/src/lib/auth-panel/auth-panel.ts +0 -228
  65. package/src/lib/autocomplete/autocomplete.ts +0 -223
  66. package/src/lib/avatar/avatar.ts +0 -126
  67. package/src/lib/badge/badge.ts +0 -182
  68. package/src/lib/bar/bar.ts +0 -31
  69. package/src/lib/brand/brand.ts +0 -60
  70. package/src/lib/breadcrumbs/breadcrumbs.ts +0 -81
  71. package/src/lib/button/button-group.ts +0 -40
  72. package/src/lib/button/button.scss +0 -119
  73. package/src/lib/button/button.ts +0 -98
  74. package/src/lib/calendar/calendar.ts +0 -253
  75. package/src/lib/callout/callout.ts +0 -211
  76. package/src/lib/card/card-title.spec.ts +0 -27
  77. package/src/lib/card/card-title.ts +0 -50
  78. package/src/lib/card/card.ts +0 -200
  79. package/src/lib/carousel/carousel.ts +0 -206
  80. package/src/lib/chart/chart-zoom.spec.ts +0 -65
  81. package/src/lib/chart/chart-zoom.ts +0 -71
  82. package/src/lib/chart/chart.ts +0 -1257
  83. package/src/lib/chart-card-header/chart-card-header.ts +0 -80
  84. package/src/lib/chart-empty-state/chart-empty-state.ts +0 -146
  85. package/src/lib/chart-panel/chart-panel.ts +0 -133
  86. package/src/lib/checkbox/checkbox.ts +0 -139
  87. package/src/lib/color-picker/color-picker.ts +0 -148
  88. package/src/lib/command/command.ts +0 -260
  89. package/src/lib/composer/composer.ts +0 -180
  90. package/src/lib/confirm-dialog/confirm-dialog.ts +0 -163
  91. package/src/lib/confirm-dialog/dialog.service.ts +0 -79
  92. package/src/lib/context/context.ts +0 -75
  93. package/src/lib/core/brand-icons.ts +0 -62
  94. package/src/lib/core/cva.ts +0 -33
  95. package/src/lib/core/icons.ts +0 -206
  96. package/src/lib/core/integration-brand-icons.ts +0 -77
  97. package/src/lib/core/lucide-paths.generated.ts +0 -130
  98. package/src/lib/date-picker/date-picker.ts +0 -139
  99. package/src/lib/dropdown/dropdown.ts +0 -188
  100. package/src/lib/editor/editor.ts +0 -170
  101. package/src/lib/empty-state/empty-state.ts +0 -100
  102. package/src/lib/fab/fab.ts +0 -76
  103. package/src/lib/field/field.ts +0 -111
  104. package/src/lib/file-upload/file-upload.ts +0 -208
  105. package/src/lib/footer/footer.scss +0 -162
  106. package/src/lib/footer/footer.ts +0 -28
  107. package/src/lib/form-section/form-section.ts +0 -200
  108. package/src/lib/forms.spec.ts +0 -92
  109. package/src/lib/gauge-arc/gauge-arc.ts +0 -85
  110. package/src/lib/hud-panel/hud-panel.ts +0 -27
  111. package/src/lib/icon/icon.ts +0 -284
  112. package/src/lib/icon-badge/icon-badge.ts +0 -87
  113. package/src/lib/icon-heading/icon-heading.spec.ts +0 -32
  114. package/src/lib/icon-heading/icon-heading.ts +0 -38
  115. package/src/lib/icon-text/icon-text.ts +0 -120
  116. package/src/lib/input/input.ts +0 -119
  117. package/src/lib/kanban/kanban.ts +0 -211
  118. package/src/lib/kbd/kbd.ts +0 -32
  119. package/src/lib/label/label.ts +0 -39
  120. package/src/lib/loading-overlay/loading-overlay.ts +0 -80
  121. package/src/lib/menubar/menubar.ts +0 -77
  122. package/src/lib/metric-card/metric-card.ts +0 -33
  123. package/src/lib/modal/modal.ts +0 -207
  124. package/src/lib/native-select/native-select.ts +0 -124
  125. package/src/lib/navbar/navbar.ts +0 -124
  126. package/src/lib/navigation-menu/navigation-menu.ts +0 -116
  127. package/src/lib/otp-input/otp-input.ts +0 -164
  128. package/src/lib/page-back-link/page-back-link.ts +0 -74
  129. package/src/lib/page-header/page-header.ts +0 -70
  130. package/src/lib/pagination/pagination.ts +0 -157
  131. package/src/lib/pillbox/pillbox.ts +0 -157
  132. package/src/lib/popover/popover.ts +0 -92
  133. package/src/lib/profile/profile.ts +0 -73
  134. package/src/lib/progress/progress.ts +0 -123
  135. package/src/lib/radio/radio.ts +0 -132
  136. package/src/lib/ring-gauge/ring-gauge.ts +0 -75
  137. package/src/lib/scroll-area/scroll-area.ts +0 -57
  138. package/src/lib/search-palette/search-palette.scss +0 -288
  139. package/src/lib/search-palette/search-palette.ts +0 -114
  140. package/src/lib/select/select.ts +0 -292
  141. package/src/lib/separator/separator.ts +0 -59
  142. package/src/lib/sheet/sheet.ts +0 -192
  143. package/src/lib/sidebar-nav/sidebar-nav.scss +0 -218
  144. package/src/lib/sidebar-nav/sidebar-nav.ts +0 -158
  145. package/src/lib/site-drakkar/site-footer.ts +0 -133
  146. package/src/lib/site-drakkar/site-navbar.scss +0 -2
  147. package/src/lib/site-drakkar/site-navbar.ts +0 -286
  148. package/src/lib/site-drakkar/suite-search-items.spec.ts +0 -61
  149. package/src/lib/site-drakkar/suite-search-items.ts +0 -246
  150. package/src/lib/skeleton/skeleton.ts +0 -51
  151. package/src/lib/slider/slider.ts +0 -133
  152. package/src/lib/spinner/spinner.ts +0 -75
  153. package/src/lib/status-metric-row/status-metric-row.ts +0 -74
  154. package/src/lib/suite-search-palette/suite-search-palette.ts +0 -95
  155. package/src/lib/switch/switch.ts +0 -131
  156. package/src/lib/table/table.ts +0 -137
  157. package/src/lib/tabs/tab-panel.ts +0 -61
  158. package/src/lib/tabs/tab.ts +0 -107
  159. package/src/lib/tabs/tabs.ts +0 -109
  160. package/src/lib/textarea/textarea.ts +0 -103
  161. package/src/lib/theme-toggle/theme-toggle.spec.ts +0 -40
  162. package/src/lib/theme-toggle/theme-toggle.ts +0 -40
  163. package/src/lib/time-picker/time-picker.ts +0 -197
  164. package/src/lib/timeline/timeline.ts +0 -152
  165. package/src/lib/toast/toast.ts +0 -196
  166. package/src/lib/toggle/toggle-group.ts +0 -60
  167. package/src/lib/toggle/toggle.ts +0 -101
  168. package/src/lib/tooltip/tooltip.ts +0 -119
  169. package/src/lib/typography/heading.ts +0 -52
  170. package/src/lib/typography/text.ts +0 -51
  171. package/src/lib/uptime-bar/uptime-bar.ts +0 -55
  172. package/src/lib/verification-code-field/verification-code-field.ts +0 -149
  173. package/src/lib/whitepaper-cta/whitepaper-cta.scss +0 -130
  174. package/src/lib/whitepaper-cta/whitepaper-cta.ts +0 -78
  175. package/src/lib/wizard/wizard.ts +0 -80
  176. package/src/public-api.ts +0 -172
  177. package/src/styles/_buttons.scss +0 -386
  178. package/src/styles/_component-primitives.scss +0 -183
  179. package/src/styles/_drakkar-buttons.scss +0 -85
  180. package/src/styles/_fonts.scss +0 -22
  181. package/src/styles/_forms.scss +0 -66
  182. package/src/styles/_input.scss +0 -106
  183. package/src/styles/_layout-enforcement.scss +0 -229
  184. package/src/styles/_layout-rhythm.scss +0 -158
  185. package/src/styles/_legacy-aliases.scss +0 -212
  186. package/src/styles/_series-colors.scss +0 -24
  187. package/src/styles/_static-primitives.scss +0 -857
  188. package/src/styles/_typography.scss +0 -87
  189. package/src/styles/_variables.scss +0 -527
  190. package/src/styles/components/a11y.scss +0 -90
  191. package/src/styles/components/badges.scss +0 -102
  192. package/src/styles/components/extracted-utilities.scss +0 -459
  193. package/src/styles/components/footer.scss +0 -168
  194. package/src/styles/components/icon-heading.scss +0 -47
  195. package/src/styles/components/icon-inline.scss +0 -101
  196. package/src/styles/components/layout.scss +0 -59
  197. package/src/styles/components/utilities.scss +0 -131
  198. package/src/styles/components/viking-inspired.scss +0 -204
  199. package/src/styles/components/whitepaper-cta.scss +0 -130
  200. package/src/styles/components-bundle.scss +0 -9
  201. package/src/styles/components.scss +0 -442
  202. package/src/styles/deml-components.scss +0 -10
  203. package/src/styles/index.scss +0 -8
  204. package/src/styles/layout-shell.scss +0 -111
  205. package/src/styles/page-shell.scss +0 -859
  206. package/src/styles/static-navbar.scss +0 -1250
  207. package/src/styles/surfaces/backend.scss +0 -154
  208. package/src/styles/surfaces/docs-global.scss +0 -73
  209. package/src/styles/surfaces/docs-shell.scss +0 -437
  210. package/src/styles/surfaces/docs-showcase.scss +0 -1153
  211. package/src/styles/surfaces/marketing-cta.scss +0 -62
  212. package/src/styles/surfaces/marketing-docs-bento.scss +0 -67
  213. package/src/styles/surfaces/marketing-global.scss +0 -748
  214. package/src/styles/surfaces/marketing-landing.scss +0 -1526
  215. package/src/styles/surfaces/marketing-publication.scss +0 -535
  216. package/src/styles/surfaces/marketing-theme.scss +0 -14
  217. package/src/styles/surfaces/swagger-ui.scss +0 -1013
  218. package/src/styles/tokens-export.scss +0 -18
  219. package/src/styles/tokens.scss +0 -5
  220. package/src/styles/viking-ui-bundle.scss +0 -23
  221. package/src/styles/viking-ui.scss +0 -272
  222. package/src/tokens/series-presets.ts +0 -15
  223. package/src/tokens/tailwind.preset.js +0 -209
  224. package/src/tokens/viking-tokens.json +0 -318
  225. package/src/viking-ui.spec.ts +0 -416
  226. package/src/web/badge/viking-badge-wc.ts +0 -116
  227. package/src/web/button/viking-button-wc.ts +0 -165
  228. package/src/web/callout/viking-callout-wc.ts +0 -105
  229. package/src/web/card/viking-card-wc.ts +0 -67
  230. package/src/web/core/base.ts +0 -56
  231. package/src/web/core/dom.ts +0 -53
  232. package/src/web/core/icons-inline.ts +0 -44
  233. package/src/web/core/styles.ts +0 -1261
  234. package/src/web/core/types.ts +0 -19
  235. package/src/web/field/viking-field-wc.ts +0 -154
  236. package/src/web/index.ts +0 -73
  237. package/src/web/input/viking-input-wc.ts +0 -211
  238. package/src/web/modal/viking-modal-wc.ts +0 -187
  239. package/src/web/search-palette/viking-search-palette-wc.ts +0 -495
  240. package/src/web/select/viking-select-wc.ts +0 -218
  241. package/src/web/suite-header/viking-suite-header-wc.ts +0 -729
  242. package/src/web/suite-search-palette/viking-suite-search-palette-wc.ts +0 -234
  243. package/src/web/theme-toggle/viking-theme-toggle-wc.ts +0 -139
  244. package/src/web/types.ts +0 -37
  245. package/src/web/web-components.spec.ts +0 -297
  246. package/src/web-components/index.ts +0 -1
@@ -1,1526 +0,0 @@
1
- .landing-container {
2
- position: relative;
3
- min-height: calc(100vh - 64px);
4
- padding-block: var(--viking-space-6) var(--viking-space-4);
5
- overflow: hidden;
6
- font-family: var(--viking-font-family);
7
-
8
- @media (min-width: 768px) {
9
- padding-block: var(--viking-space-9) var(--viking-space-8);
10
- }
11
- }
12
-
13
- .showcase-layout {
14
- max-width: var(
15
- --viking-container-max-width,
16
- var(--container-max-width, 1260px)
17
- );
18
- margin: 0 auto;
19
- }
20
-
21
- /* ── Hero Showcase ── */
22
- .hero-showcase {
23
- display: grid;
24
- grid-template-columns: 1fr;
25
- gap: var(--viking-page-section-gap, var(--viking-space-6));
26
- align-items: center;
27
- margin-bottom: var(--viking-space-9);
28
- position: relative;
29
- z-index: 10;
30
- overflow: hidden;
31
- @media (min-width: 960px) {
32
- grid-template-columns: 1fr 1.1fr;
33
- gap: var(--viking-space-8);
34
- }
35
-
36
- &::before {
37
- content: "";
38
- position: absolute;
39
- inset: auto 0 -2px 0;
40
- height: 1px;
41
- background: linear-gradient(
42
- 90deg,
43
- transparent,
44
- color-mix(in srgb, var(--viking-accent) 35%, transparent),
45
- transparent
46
- );
47
- opacity: 0.45;
48
- pointer-events: none;
49
- }
50
- }
51
-
52
- .hero-copy {
53
- display: flex;
54
- flex-direction: column;
55
- gap: var(--viking-space-3);
56
- position: relative;
57
-
58
- &::before {
59
- content: "";
60
- position: absolute;
61
- left: 0;
62
- right: 0;
63
- top: 0;
64
- height: 1px;
65
- background: linear-gradient(
66
- 90deg,
67
- transparent,
68
- color-mix(in srgb, var(--viking-metallic-400) 48%, transparent),
69
- transparent
70
- );
71
- opacity: 0.4;
72
- pointer-events: none;
73
- }
74
-
75
- &::after {
76
- content: "";
77
- position: absolute;
78
- top: -10px;
79
- left: 0;
80
- width: 24px;
81
- height: 16px;
82
- border-top: 1px solid color-mix(in srgb, var(--viking-accent) 45%, transparent);
83
- border-left: 1px solid color-mix(in srgb, var(--viking-accent) 22%, transparent);
84
- opacity: 0.55;
85
- pointer-events: none;
86
- }
87
- }
88
-
89
- .hero-badge {
90
- display: inline-flex;
91
- align-items: center;
92
- gap: 8px;
93
- background: var(--viking-surface);
94
- border: 1px solid var(--border);
95
- padding: 8px 16px;
96
- border-radius: 1000px;
97
- width: fit-content;
98
- box-shadow: var(--shadow-sm);
99
- position: relative;
100
- overflow: hidden;
101
- border-color: var(--viking-border-strong);
102
-
103
- &::after {
104
- content: "";
105
- position: absolute;
106
- left: 1px;
107
- right: 1px;
108
- top: 0;
109
- height: 1px;
110
- background: color-mix(in srgb, var(--viking-accent) 35%, transparent);
111
- opacity: 0.6;
112
- pointer-events: none;
113
- }
114
-
115
- .badge-dot {
116
- width: var(--grid-unit, 8px);
117
- height: var(--grid-unit, 8px);
118
- border-radius: 50%;
119
- background-color: var(--color-primary);
120
- }
121
-
122
- .badge-text {
123
- font-size: 1rem;
124
- font-weight: 600;
125
- letter-spacing: 0.05em;
126
- color: var(--text-color);
127
- }
128
- }
129
-
130
- .title {
131
- font-size: clamp(2.25rem, 5vw, 3.75rem);
132
- font-weight: 900;
133
- line-height: 1.05;
134
- letter-spacing: -0.02em;
135
- margin: 0;
136
- color: var(--hero-title-color, var(--text-color)) !important;
137
- text-transform: uppercase;
138
- }
139
-
140
- .subtitle {
141
- font-size: clamp(1.05rem, 2vw, 1.25rem);
142
- color: var(--text-muted);
143
- line-height: 1.6;
144
- margin: 0;
145
- max-width: 520px;
146
- }
147
-
148
- .hero-stats {
149
- display: flex;
150
- flex-wrap: wrap;
151
- gap: 10px;
152
- }
153
-
154
- .hero-stat-pill {
155
- display: inline-flex;
156
- align-items: center;
157
- gap: 8px;
158
- padding: 8px 14px;
159
- border-radius: 1000px;
160
- background: color-mix(
161
- in srgb,
162
- var(--viking-accent) 10%,
163
- var(--color-surface)
164
- );
165
- border: 1px solid color-mix(in srgb, var(--viking-accent) 25%, transparent);
166
- font-size: 0.85rem;
167
- font-weight: 600;
168
- color: var(--text-color);
169
- letter-spacing: 0.02em;
170
- position: relative;
171
- overflow: hidden;
172
- border-color: color-mix(in srgb, var(--viking-accent) 28%, var(--border));
173
- box-shadow: var(--shadow-sm);
174
-
175
- &::before {
176
- content: "";
177
- position: absolute;
178
- inset: 0 0 auto 0;
179
- height: 1px;
180
- background: color-mix(in srgb, var(--viking-accent) 40%, transparent);
181
- opacity: 0.45;
182
- pointer-events: none;
183
- }
184
-
185
- svg {
186
- width: 18px;
187
- height: 18px;
188
- color: var(--viking-accent);
189
- flex-shrink: 0;
190
- }
191
- }
192
-
193
- .pulse-dot {
194
- animation: pulseDot 2s ease-in-out infinite;
195
- }
196
-
197
- @keyframes pulseDot {
198
- 0%,
199
- 100% {
200
- box-shadow: 0 0 0 0
201
- color-mix(in srgb, var(--viking-accent) 60%, transparent);
202
- }
203
- 50% {
204
- box-shadow: 0 0 0 6px
205
- color-mix(in srgb, var(--viking-accent) 0%, transparent);
206
- }
207
- }
208
-
209
- // Hero/pricing CTAs — see ../styles/cta.scss (shared with docs portal).
210
-
211
- /* Mock dashboard in hero */
212
- .hero-mockup {
213
- perspective: 1200px;
214
- }
215
-
216
- .mockup-window {
217
- background: var(--color-surface);
218
- border: 1px solid var(--border);
219
- border-radius: 16px;
220
- overflow: hidden;
221
- box-shadow:
222
- 0 24px 64px color-mix(in srgb, var(--viking-charcoal-900) 40%, transparent),
223
- 0 0 0 1px color-mix(in srgb, var(--viking-accent) 15%, transparent);
224
- transform: rotateY(-4deg) rotateX(2deg);
225
- transition: transform 0.4s ease;
226
- position: relative;
227
-
228
- &::before {
229
- content: "";
230
- position: absolute;
231
- inset: 0;
232
- border-radius: inherit;
233
- pointer-events: none;
234
- border: 1px solid color-mix(in srgb, var(--viking-metallic-500) 28%, transparent);
235
- box-shadow: inset 0 1px 0 color-mix(in srgb, var(--viking-white) 7%, transparent);
236
- opacity: 0.75;
237
- background:
238
- linear-gradient(
239
- 135deg,
240
- transparent,
241
- color-mix(in srgb, var(--viking-accent) 12%, transparent) 50%,
242
- transparent
243
- );
244
- }
245
-
246
- &::after {
247
- content: "";
248
- position: absolute;
249
- top: 0;
250
- right: 28px;
251
- width: 30px;
252
- height: 18px;
253
- border-bottom: 1px solid color-mix(in srgb, var(--viking-accent) 24%, transparent);
254
- border-right: 1px solid color-mix(in srgb, var(--viking-accent) 18%, transparent);
255
- transform: skewX(-18deg);
256
- pointer-events: none;
257
- opacity: 0.55;
258
- z-index: 2;
259
- }
260
-
261
- &:hover {
262
- transform: rotateY(0deg) rotateX(0deg);
263
- }
264
- }
265
-
266
- .mockup-titlebar {
267
- display: flex;
268
- align-items: center;
269
- gap: 8px;
270
- padding: 12px 16px;
271
- background: color-mix(
272
- in srgb,
273
- var(--viking-charcoal-900) 60%,
274
- var(--color-surface)
275
- );
276
- border-bottom: 1px solid var(--border);
277
-
278
- .mockup-dot {
279
- width: 10px;
280
- height: 10px;
281
- border-radius: 50%;
282
- background: var(--text-muted);
283
- opacity: 0.5;
284
-
285
- &:first-child {
286
- background: var(--viking-crimson-500);
287
- opacity: 0.8;
288
- }
289
- &:nth-child(2) {
290
- background: var(--viking-gold-500);
291
- opacity: 0.8;
292
- }
293
- &:nth-child(3) {
294
- background: var(--viking-accent-strong);
295
- opacity: 0.8;
296
- }
297
- }
298
-
299
- .mockup-title {
300
- margin-left: 8px;
301
- font-size: 0.85rem;
302
- font-family: monospace;
303
- color: var(--text-muted);
304
- letter-spacing: 0.04em;
305
- }
306
- }
307
-
308
- .mockup-body {
309
- display: flex;
310
- min-height: 280px;
311
- }
312
-
313
- .mockup-sidebar {
314
- width: 48px;
315
- padding: 16px 8px;
316
- display: flex;
317
- flex-direction: column;
318
- gap: 12px;
319
- border-right: 1px solid var(--border);
320
- background: color-mix(in srgb, var(--viking-charcoal-900) 30%, transparent);
321
-
322
- .mockup-nav-item {
323
- height: 32px;
324
- border-radius: 8px;
325
- background: color-mix(in srgb, var(--text-muted) 20%, transparent);
326
-
327
- &.active {
328
- background: color-mix(in srgb, var(--viking-accent) 35%, transparent);
329
- box-shadow: inset 0 0 0 1px var(--viking-accent);
330
- }
331
- }
332
- }
333
-
334
- .mockup-main {
335
- flex: 1;
336
- padding: 20px;
337
- display: flex;
338
- flex-direction: column;
339
- gap: 16px;
340
- }
341
-
342
- .mockup-gauges {
343
- display: grid;
344
- grid-template-columns: 1fr;
345
- gap: 12px;
346
-
347
- @media (min-width: 480px) {
348
- grid-template-columns: repeat(3, 1fr);
349
- }
350
- }
351
-
352
- .mockup-gauge {
353
- background: color-mix(
354
- in srgb,
355
- var(--viking-charcoal-900) 40%,
356
- var(--color-surface)
357
- );
358
- border: 1px solid var(--border);
359
- border-radius: 10px;
360
- padding: 12px;
361
- text-align: center;
362
-
363
- &.primary {
364
- border-color: var(--viking-accent);
365
- box-shadow: 0 0 16px
366
- color-mix(in srgb, var(--viking-accent) 25%, transparent);
367
- }
368
-
369
- .gauge-label {
370
- display: block;
371
- font-size: 0.7rem;
372
- text-transform: uppercase;
373
- letter-spacing: 0.08em;
374
- color: var(--text-muted);
375
- margin-bottom: 4px;
376
- }
377
-
378
- .gauge-val {
379
- font-size: 1.25rem;
380
- font-weight: 800;
381
- color: var(--text-color);
382
- }
383
- }
384
-
385
- .mockup-chart {
386
- flex: 1;
387
- display: flex;
388
- align-items: flex-end;
389
- gap: 6px;
390
- padding: 12px;
391
- background: color-mix(in srgb, var(--viking-charcoal-900) 50%, transparent);
392
- border-radius: 10px;
393
- border: 1px solid var(--border);
394
- min-height: 100px;
395
-
396
- .chart-bar {
397
- flex: 1;
398
- background: linear-gradient(
399
- 180deg,
400
- var(--viking-accent),
401
- var(--viking-accent-strong)
402
- );
403
- border-radius: 4px 4px 0 0;
404
- opacity: 0.85;
405
- animation: barPulse 3s ease-in-out infinite;
406
- height: calc(var(--chart-bar-height, 50) * 1%);
407
-
408
- @for $i from 1 through 8 {
409
- &:nth-child(#{$i}) {
410
- animation-delay: #{$i * 0.15}s;
411
- }
412
- }
413
-
414
- @for $h from 40 through 95 {
415
- &[data-height="#{$h}"] {
416
- --chart-bar-height: #{$h};
417
- }
418
- }
419
- }
420
- }
421
-
422
- @keyframes barPulse {
423
- 0%,
424
- 100% {
425
- opacity: 0.7;
426
- }
427
- 50% {
428
- opacity: 1;
429
- }
430
- }
431
-
432
- .mockup-stats-row {
433
- display: grid;
434
- grid-template-columns: 1fr;
435
- gap: 12px;
436
-
437
- @media (min-width: 480px) {
438
- grid-template-columns: repeat(3, 1fr);
439
- }
440
-
441
- .mockup-stat {
442
- background: var(--viking-surface);
443
- border: 1px solid var(--border);
444
- border-radius: 8px;
445
- padding: 10px 12px;
446
-
447
- span {
448
- display: block;
449
- font-size: 0.7rem;
450
- text-transform: uppercase;
451
- letter-spacing: 0.06em;
452
- color: var(--text-muted);
453
- }
454
-
455
- strong {
456
- font-size: 1rem;
457
- color: var(--viking-accent);
458
- }
459
- }
460
- }
461
-
462
- /* ── Quick start ── */
463
- .quick-start-band {
464
- padding: var(--viking-space-7) 0 var(--viking-space-8);
465
- margin-bottom: var(--viking-space-4);
466
- border-bottom: 1px solid var(--border);
467
- position: relative;
468
- }
469
-
470
- /* Structural command-line divider for section cadence */
471
- .quick-start-band::after {
472
- content: "";
473
- position: absolute;
474
- bottom: -1px;
475
- left: 50%;
476
- transform: translateX(-50%);
477
- width: 120px;
478
- height: 1px;
479
- background: linear-gradient(
480
- 90deg,
481
- transparent,
482
- var(--viking-accent),
483
- transparent
484
- );
485
- opacity: 0.35;
486
- }
487
-
488
- .quick-start-header {
489
- text-align: center;
490
- max-width: 640px;
491
- margin: 0 auto var(--viking-page-section-gap, var(--viking-space-6));
492
-
493
- h2 {
494
- font-size: clamp(1.75rem, 3vw, 2.25rem);
495
- font-weight: 800;
496
- margin: 0 0 12px 0;
497
- text-transform: uppercase;
498
- letter-spacing: -0.02em;
499
- }
500
-
501
- p {
502
- color: var(--text-muted);
503
- margin: 0;
504
- line-height: 1.6;
505
- font-size: 1.1rem;
506
- }
507
- }
508
-
509
- .quick-start-steps {
510
- display: grid;
511
- grid-template-columns: 1fr;
512
- gap: var(--viking-space-3);
513
- list-style: none;
514
- padding: 0;
515
- margin: 0;
516
-
517
- @media (min-width: 768px) {
518
- grid-template-columns: repeat(2, 1fr);
519
- gap: var(--viking-space-4);
520
- }
521
-
522
- @media (min-width: 1100px) {
523
- grid-template-columns: repeat(4, 1fr);
524
- }
525
- }
526
-
527
- .quick-start-step {
528
- position: relative;
529
- background: var(--color-surface);
530
- border: 1px solid var(--border);
531
- border-radius: var(--viking-radius-xl, 16px);
532
- padding: 32px 28px;
533
- text-align: center;
534
- transition:
535
- border-color 0.25s ease,
536
- transform 0.25s ease,
537
- box-shadow 0.25s ease;
538
- box-shadow: var(--shadow-sm);
539
- overflow: hidden;
540
-
541
- &::before {
542
- content: "";
543
- position: absolute;
544
- left: 0;
545
- right: 0;
546
- top: 0;
547
- height: 1px;
548
- background: linear-gradient(
549
- 90deg,
550
- color-mix(in srgb, var(--viking-accent) 35%, transparent),
551
- transparent
552
- );
553
- opacity: 0.45;
554
- pointer-events: none;
555
- }
556
-
557
- &:hover {
558
- border-color: var(--viking-accent);
559
- transform: translateY(-2px);
560
- box-shadow: var(--shadow-hover);
561
- }
562
-
563
- .step-number {
564
- position: absolute;
565
- top: 16px;
566
- right: 20px;
567
- font-size: 0.75rem;
568
- font-weight: 800;
569
- letter-spacing: 0.1em;
570
- color: var(--viking-accent);
571
- opacity: 0.7;
572
- }
573
-
574
- .step-icon {
575
- font-size: 36px;
576
- color: var(--viking-accent);
577
- margin-bottom: 16px;
578
- filter: drop-shadow(
579
- 0 0 8px color-mix(in srgb, var(--viking-accent) 35%, transparent)
580
- );
581
- }
582
-
583
- h3 {
584
- font-size: 1.25rem;
585
- font-weight: 800;
586
- margin: 0 0 10px 0;
587
- text-transform: uppercase;
588
- letter-spacing: 0.04em;
589
- }
590
-
591
- p {
592
- margin: 0;
593
- color: var(--text-muted);
594
- line-height: 1.55;
595
- font-size: 1rem;
596
- }
597
- }
598
-
599
- /* ── Security pillars ── */
600
- .security-pillars-band {
601
- padding: 72px 0;
602
- border-bottom: 1px solid var(--border);
603
- position: relative;
604
- }
605
-
606
- /* pola.rs minimal accent line */
607
- .security-pillars-band::after {
608
- content: "";
609
- position: absolute;
610
- bottom: -1px;
611
- left: 50%;
612
- transform: translateX(-50%);
613
- width: 80px;
614
- height: 1px;
615
- background: linear-gradient(
616
- 90deg,
617
- transparent,
618
- var(--viking-accent),
619
- transparent
620
- );
621
- opacity: 0.25;
622
- }
623
-
624
- .security-pillars-header {
625
- text-align: center;
626
- max-width: 680px;
627
- margin: 0 auto 48px;
628
-
629
- h2 {
630
- font-size: clamp(1.75rem, 3vw, 2.5rem);
631
- font-weight: 800;
632
- margin: 0 0 12px 0;
633
- text-transform: uppercase;
634
- letter-spacing: -0.02em;
635
- }
636
-
637
- p {
638
- color: var(--text-muted);
639
- margin: 0;
640
- line-height: 1.6;
641
- font-size: 1.1rem;
642
- }
643
- }
644
-
645
- .security-pillars-grid {
646
- display: grid;
647
- grid-template-columns: 1fr;
648
- gap: 20px;
649
- list-style: none;
650
- padding: 0;
651
- margin: 0;
652
-
653
- @media (min-width: 600px) {
654
- grid-template-columns: repeat(2, 1fr);
655
- }
656
-
657
- @media (min-width: 960px) {
658
- grid-template-columns: repeat(4, 1fr);
659
- }
660
- }
661
-
662
- .security-pillar {
663
- display: flex;
664
- flex-direction: column;
665
- align-items: center;
666
- text-align: center;
667
- gap: 10px;
668
- padding: 28px 20px;
669
- border-radius: 16px;
670
- background: color-mix(in srgb, var(--viking-accent) 6%, var(--color-surface));
671
- border: 1px solid color-mix(in srgb, var(--viking-accent) 18%, transparent);
672
- position: relative;
673
- overflow: hidden;
674
- transition:
675
- border-color 0.2s ease,
676
- box-shadow 0.2s ease;
677
-
678
- &:hover {
679
- border-color: var(--viking-accent);
680
- box-shadow: 0 0 24px
681
- color-mix(in srgb, var(--viking-accent) 15%, transparent);
682
- }
683
-
684
- svg {
685
- width: 32px;
686
- height: 32px;
687
- color: var(--viking-accent);
688
- }
689
-
690
- strong {
691
- font-size: 0.95rem;
692
- font-weight: 700;
693
- text-transform: uppercase;
694
- letter-spacing: 0.06em;
695
- color: var(--text-color);
696
- }
697
-
698
- span:last-child {
699
- font-size: 0.9rem;
700
- color: var(--text-muted);
701
- line-height: 1.45;
702
- }
703
-
704
- &::after {
705
- content: "";
706
- position: absolute;
707
- inset: 8px;
708
- border: 1px solid color-mix(in srgb, var(--viking-metallic-400) 26%, transparent);
709
- border-radius: inherit;
710
- opacity: 0.5;
711
- pointer-events: none;
712
- }
713
- }
714
-
715
- /* ── Integrations strip ── */
716
- .integrations-strip {
717
- width: 100%;
718
- padding: 32px 0;
719
- margin-bottom: 64px;
720
- border: 0;
721
- text-align: center;
722
- position: relative;
723
- }
724
-
725
- .integrations-strip::before,
726
- .integrations-strip::after {
727
- content: "";
728
- position: absolute;
729
- left: 50%;
730
- transform: translateX(-50%);
731
- width: 100px;
732
- height: 1px;
733
- background: linear-gradient(
734
- 90deg,
735
- transparent,
736
- var(--viking-accent),
737
- transparent
738
- );
739
- opacity: 0.3;
740
- }
741
-
742
- .integrations-strip::before {
743
- top: 0;
744
- }
745
-
746
- .integrations-strip::after {
747
- bottom: 0;
748
- }
749
-
750
- .strip-label {
751
- font-size: 0.85rem;
752
- font-weight: 700;
753
- letter-spacing: 0.15em;
754
- color: var(--text-muted);
755
- margin: 0 0 24px 0;
756
- }
757
-
758
- .integration-logos {
759
- display: flex;
760
- flex-wrap: wrap;
761
- justify-content: center;
762
- gap: 32px 48px;
763
- }
764
-
765
- .integration-logo-item {
766
- display: flex;
767
- align-items: center;
768
- gap: 10px;
769
- text-decoration: none !important;
770
- color: var(--text-muted) !important;
771
- font-weight: 700;
772
- font-size: 0.95rem;
773
- letter-spacing: 0.04em;
774
- text-transform: uppercase;
775
- transition: color 0.2s ease;
776
-
777
- svg {
778
- width: 22px;
779
- height: 22px;
780
- }
781
-
782
- svg:not(.viking-icon-integration-brand) {
783
- color: var(--viking-accent);
784
- }
785
-
786
- &:hover {
787
- color: var(--text-color) !important;
788
- }
789
- }
790
-
791
- /* ── Wide capability bands ── */
792
- .showcase-band {
793
- display: grid;
794
- grid-template-columns: 1fr;
795
- gap: var(--viking-space-5);
796
- align-items: center;
797
- padding: var(--viking-space-7) 0;
798
- border-bottom: 1px solid var(--border);
799
- position: relative;
800
-
801
- @media (min-width: 900px) {
802
- grid-template-columns: 1fr 1fr;
803
- gap: var(--viking-space-8);
804
- padding: var(--viking-space-9) 0;
805
- }
806
-
807
- &::before {
808
- content: "";
809
- position: absolute;
810
- left: 0;
811
- top: 0;
812
- right: 0;
813
- height: 1px;
814
- background: linear-gradient(
815
- 90deg,
816
- transparent,
817
- color-mix(in srgb, var(--viking-accent) 22%, transparent),
818
- transparent
819
- );
820
- opacity: 0.25;
821
- }
822
-
823
- /* Structured divider marker for each capability showcase */
824
- &::after {
825
- content: "";
826
- position: absolute;
827
- bottom: -1px;
828
- left: 50%;
829
- transform: translateX(-50%);
830
- width: 60px;
831
- height: 1px;
832
- background: linear-gradient(
833
- 90deg,
834
- transparent,
835
- var(--viking-accent),
836
- transparent
837
- );
838
- opacity: 0.2;
839
- }
840
-
841
- &.reversed {
842
- @media (min-width: 900px) {
843
- .showcase-band-copy {
844
- order: 2;
845
- }
846
- .showcase-band-visual {
847
- order: 1;
848
- }
849
- }
850
- }
851
- }
852
-
853
- .showcase-band-copy {
854
- .section-tag {
855
- font-size: 0.85rem;
856
- font-weight: 700;
857
- letter-spacing: 0.15em;
858
- color: var(--viking-accent);
859
- text-transform: uppercase;
860
- display: block;
861
- margin-bottom: 16px;
862
- }
863
-
864
- h2 {
865
- font-size: clamp(1.75rem, 3vw, 2.5rem);
866
- font-weight: 800;
867
- margin: 0 0 16px 0;
868
- text-transform: uppercase;
869
- letter-spacing: -0.02em;
870
- color: var(--text-color);
871
- }
872
-
873
- p {
874
- font-size: 1.1rem;
875
- color: var(--text-muted);
876
- line-height: 1.65;
877
- margin: 0 0 24px 0;
878
- }
879
-
880
- &::after {
881
- content: "";
882
- display: block;
883
- width: 42px;
884
- height: 1px;
885
- margin-top: 18px;
886
- background: linear-gradient(
887
- 90deg,
888
- var(--viking-accent),
889
- transparent
890
- );
891
- opacity: 0.35;
892
- }
893
- }
894
-
895
- .showcase-link {
896
- font-weight: 600;
897
- color: var(--viking-accent) !important;
898
- text-decoration: none !important;
899
- letter-spacing: 0.04em;
900
-
901
- &:hover {
902
- color: var(--viking-accent-strong) !important;
903
- }
904
-
905
- &.muted-link {
906
- color: var(--text-muted) !important;
907
- font-weight: 600;
908
-
909
- &:hover {
910
- color: var(--viking-accent) !important;
911
- }
912
- }
913
- }
914
-
915
- .visual-panel {
916
- background: var(--color-surface);
917
- border: 1px solid var(--border);
918
- border-radius: var(--viking-radius-xl, 16px);
919
- padding: var(--viking-card-padding, var(--viking-space-4));
920
- box-shadow: var(--shadow-md);
921
- position: relative;
922
- overflow: hidden;
923
-
924
- &::before {
925
- content: "";
926
- position: absolute;
927
- inset: 0;
928
- border: 1px solid color-mix(in srgb, var(--viking-metallic-500) 24%, transparent);
929
- border-radius: inherit;
930
- box-shadow: inset 0 1px 0 color-mix(in srgb, var(--viking-white) 6%, transparent);
931
- pointer-events: none;
932
- }
933
-
934
- &::after {
935
- content: "";
936
- position: absolute;
937
- top: 0;
938
- left: 18px;
939
- width: 36px;
940
- height: 12px;
941
- border-bottom: 1px solid color-mix(in srgb, var(--viking-accent) 35%, transparent);
942
- border-left: 1px solid color-mix(in srgb, var(--viking-accent) 18%, transparent);
943
- opacity: 0.45;
944
- pointer-events: none;
945
- }
946
- }
947
-
948
- .visual-panel-header {
949
- display: flex;
950
- align-items: center;
951
- gap: 12px;
952
- margin-bottom: 24px;
953
- font-weight: 700;
954
- text-transform: uppercase;
955
- letter-spacing: 0.06em;
956
- font-size: 0.9rem;
957
- color: var(--text-muted);
958
-
959
- svg {
960
- width: 24px;
961
- height: 24px;
962
- color: var(--viking-accent);
963
- }
964
- }
965
-
966
- .visual-metrics {
967
- display: grid;
968
- grid-template-columns: 1fr;
969
- gap: var(--viking-space-2);
970
- margin-bottom: var(--viking-space-3);
971
-
972
- @media (min-width: 600px) {
973
- grid-template-columns: repeat(2, 1fr);
974
- gap: var(--viking-space-2);
975
- }
976
-
977
- @media (min-width: 900px) {
978
- grid-template-columns: repeat(3, 1fr);
979
- }
980
- }
981
-
982
- .visual-metric {
983
- background: color-mix(
984
- in srgb,
985
- var(--viking-charcoal-900) 35%,
986
- var(--color-surface)
987
- );
988
- border: 1px solid var(--border);
989
- border-radius: var(--viking-radius-lg);
990
- padding: var(--viking-card-padding-compact, var(--viking-space-3));
991
- position: relative;
992
- border-color: color-mix(in srgb, var(--viking-accent) 12%, var(--border));
993
- box-shadow: var(--shadow-sm);
994
-
995
- .metric-label {
996
- display: block;
997
- font-size: 0.7rem;
998
- text-transform: uppercase;
999
- letter-spacing: 0.06em;
1000
- color: var(--text-muted);
1001
- margin-bottom: 6px;
1002
- }
1003
-
1004
- .metric-value {
1005
- font-size: 1.35rem;
1006
- font-weight: 800;
1007
- color: var(--text-color);
1008
- }
1009
-
1010
- .metric-trend {
1011
- position: absolute;
1012
- top: 12px;
1013
- right: 12px;
1014
- font-size: 0.85rem;
1015
- font-weight: 700;
1016
-
1017
- &.trend-up {
1018
- color: var(--viking-accent-strong);
1019
- }
1020
- &.trend-down {
1021
- color: var(--viking-gold-500);
1022
- }
1023
- &.trend-stable {
1024
- color: var(--text-muted);
1025
- }
1026
- }
1027
- }
1028
-
1029
- .visual-sparkline {
1030
- height: 48px;
1031
- opacity: 0.9;
1032
-
1033
- svg {
1034
- width: 100%;
1035
- height: 100%;
1036
- }
1037
- }
1038
-
1039
- /* ── Widget showcase ── */
1040
- .widget-showcase {
1041
- padding: var(--viking-space-9) 0;
1042
- border-bottom: 1px solid var(--border);
1043
- position: relative;
1044
- }
1045
-
1046
- /* Structured double divider accent */
1047
- .widget-showcase::after {
1048
- content: "";
1049
- position: absolute;
1050
- bottom: -1px;
1051
- left: 50%;
1052
- transform: translateX(-50%);
1053
- width: 80px;
1054
- height: 1px;
1055
- background: linear-gradient(
1056
- 90deg,
1057
- transparent,
1058
- var(--viking-accent),
1059
- transparent
1060
- );
1061
- opacity: 0.25;
1062
- }
1063
-
1064
- .widget-showcase-inner {
1065
- display: grid;
1066
- grid-template-columns: 1fr;
1067
- gap: var(--viking-space-5);
1068
- align-items: center;
1069
-
1070
- @media (min-width: 900px) {
1071
- grid-template-columns: 1fr 1fr;
1072
- gap: var(--viking-space-8);
1073
- }
1074
- }
1075
-
1076
- .widget-copy {
1077
- .section-tag {
1078
- font-size: 0.85rem;
1079
- font-weight: 700;
1080
- letter-spacing: 0.15em;
1081
- color: var(--viking-accent);
1082
- text-transform: uppercase;
1083
- display: block;
1084
- margin-bottom: 16px;
1085
- }
1086
-
1087
- h2 {
1088
- font-size: clamp(1.75rem, 3vw, 2.25rem);
1089
- font-weight: 800;
1090
- margin: 0 0 16px 0;
1091
- text-transform: uppercase;
1092
- }
1093
-
1094
- p {
1095
- color: var(--text-muted);
1096
- line-height: 1.6;
1097
- margin: 0 0 24px 0;
1098
- }
1099
-
1100
- .embed-code {
1101
- background: color-mix(in srgb, var(--viking-charcoal-900) 70%, transparent);
1102
- padding: 16px;
1103
- border-radius: var(--viking-radius-lg);
1104
- border: 1px solid color-mix(in srgb, var(--viking-accent) 30%, transparent);
1105
- overflow-x: auto;
1106
-
1107
- code {
1108
- color: var(--viking-accent);
1109
- font-family: monospace;
1110
- font-size: 0.85rem;
1111
- white-space: pre-wrap;
1112
- word-break: break-all;
1113
- }
1114
- }
1115
- }
1116
-
1117
- .widget-mount-point {
1118
- min-height: 200px;
1119
- display: flex;
1120
- align-items: center;
1121
- justify-content: center;
1122
- background: var(--color-surface);
1123
- border: 1px solid var(--border);
1124
- border-radius: var(--viking-radius-xl, 16px);
1125
- padding: var(--viking-card-padding, var(--viking-space-4));
1126
- box-shadow: var(--shadow-md);
1127
- position: relative;
1128
- overflow: hidden;
1129
- border-color: color-mix(in srgb, var(--viking-border-strong) 85%, transparent);
1130
-
1131
- &::before {
1132
- content: "";
1133
- position: absolute;
1134
- inset: 0;
1135
- pointer-events: none;
1136
- background:
1137
- radial-gradient(
1138
- 140px 42px at 16px 0,
1139
- color-mix(in srgb, var(--viking-accent) 10%, transparent),
1140
- transparent
1141
- ),
1142
- linear-gradient(
1143
- 90deg,
1144
- transparent,
1145
- color-mix(in srgb, var(--viking-accent-strong) 16%, transparent),
1146
- transparent
1147
- );
1148
- opacity: 0.35;
1149
- }
1150
- }
1151
-
1152
- /* ── Pricing ── */
1153
- .pricing-showcase {
1154
- padding: var(--viking-space-9) 0;
1155
- text-align: center;
1156
- border-bottom: 1px solid var(--border);
1157
- position: relative;
1158
- }
1159
-
1160
- /* Structured double divider accent */
1161
- .pricing-showcase::after {
1162
- content: "";
1163
- position: absolute;
1164
- bottom: -1px;
1165
- left: 50%;
1166
- transform: translateX(-50%);
1167
- width: 80px;
1168
- height: 1px;
1169
- background: linear-gradient(
1170
- 90deg,
1171
- transparent,
1172
- var(--viking-accent),
1173
- transparent
1174
- );
1175
- opacity: 0.25;
1176
- }
1177
-
1178
- .pricing-header {
1179
- margin-bottom: var(--viking-page-section-gap, var(--viking-space-6));
1180
-
1181
- .section-tag {
1182
- font-size: 0.85rem;
1183
- font-weight: 700;
1184
- letter-spacing: 0.15em;
1185
- color: var(--viking-accent);
1186
- text-transform: uppercase;
1187
- display: block;
1188
- margin-bottom: 16px;
1189
- }
1190
-
1191
- h2 {
1192
- font-size: clamp(1.75rem, 3vw, 2.5rem);
1193
- font-weight: 800;
1194
- margin: 0 0 12px 0;
1195
- text-transform: uppercase;
1196
- }
1197
-
1198
- p {
1199
- color: var(--text-muted);
1200
- margin: 0;
1201
- }
1202
- }
1203
-
1204
- .pricing-cards-container {
1205
- display: flex;
1206
- gap: var(--viking-space-4);
1207
- flex-direction: column;
1208
- align-items: center;
1209
- justify-content: center;
1210
- max-width: 800px;
1211
- margin: 0 auto;
1212
-
1213
- @media (min-width: 600px) {
1214
- flex-direction: row;
1215
- flex-wrap: wrap;
1216
- }
1217
-
1218
- .pricing-card {
1219
- flex: 1 1 100%;
1220
- width: 100%;
1221
- min-width: 0;
1222
- max-width: 100%;
1223
- padding: var(--viking-space-5) var(--viking-card-padding);
1224
- border-radius: var(--viking-radius-xl);
1225
- background: var(--color-surface);
1226
- border: 1px solid var(--border);
1227
- box-shadow: var(--shadow-sm);
1228
- position: relative;
1229
- overflow: hidden;
1230
- transition:
1231
- transform 0.3s ease,
1232
- box-shadow 0.3s ease;
1233
- display: flex;
1234
- flex-direction: column;
1235
- text-align: left;
1236
-
1237
- @media (min-width: 600px) {
1238
- flex: 1;
1239
- min-width: 260px;
1240
- max-width: 360px;
1241
- width: auto;
1242
- }
1243
-
1244
- &:hover {
1245
- transform: translateY(-2px);
1246
- border-color: var(--viking-accent);
1247
- box-shadow: var(--shadow-hover);
1248
- }
1249
-
1250
- &::before {
1251
- content: "";
1252
- position: absolute;
1253
- left: 0;
1254
- right: 0;
1255
- top: 0;
1256
- height: 1px;
1257
- background: linear-gradient(
1258
- 90deg,
1259
- color-mix(in srgb, var(--viking-accent) 24%, transparent),
1260
- transparent
1261
- );
1262
- opacity: 0.45;
1263
- pointer-events: none;
1264
- }
1265
-
1266
- h3 {
1267
- font-size: 1.1rem;
1268
- color: var(--text-muted);
1269
- margin: 0;
1270
- text-transform: uppercase;
1271
- letter-spacing: 0.1em;
1272
- font-weight: var(--viking-font-weight-semibold);
1273
- }
1274
-
1275
- .price {
1276
- font-size: 3rem;
1277
- font-weight: 800;
1278
- margin: 1rem 0;
1279
- color: var(--text-color);
1280
-
1281
- span {
1282
- font-size: 1rem;
1283
- font-weight: normal;
1284
- color: var(--text-muted);
1285
- }
1286
- }
1287
-
1288
- .features-list {
1289
- list-style: none;
1290
- padding: 0;
1291
- margin-bottom: 2rem;
1292
- flex-grow: 1;
1293
-
1294
- li {
1295
- display: flex;
1296
- align-items: center;
1297
- margin-bottom: 1rem;
1298
- color: var(--text-color);
1299
- font-size: 1rem;
1300
-
1301
- svg {
1302
- width: 20px;
1303
- height: 20px;
1304
- color: var(--viking-accent);
1305
- margin-right: 0.75rem;
1306
- flex-shrink: 0;
1307
- }
1308
- }
1309
- }
1310
-
1311
- .cta-button {
1312
- margin-top: auto;
1313
- width: 100%;
1314
- }
1315
-
1316
- &.pro-tier {
1317
- border: 2px solid var(--viking-accent);
1318
- position: relative;
1319
- background: color-mix(
1320
- in srgb,
1321
- var(--viking-accent) 6%,
1322
- var(--color-surface)
1323
- );
1324
- box-shadow: inset 0 1px 0 color-mix(in srgb, var(--viking-white) 8%, transparent);
1325
-
1326
- .recommended-badge {
1327
- position: absolute;
1328
- top: -14px;
1329
- left: 50%;
1330
- transform: translateX(-50%);
1331
- background: var(--viking-accent);
1332
- color: var(--white);
1333
- padding: 6px 14px;
1334
- border-radius: 1000px;
1335
- font-size: 0.75rem;
1336
- font-weight: 800;
1337
- letter-spacing: 0.1em;
1338
- text-transform: uppercase;
1339
- }
1340
-
1341
- .pro-btn {
1342
- background: var(--viking-accent);
1343
- color: var(--white);
1344
- border: none;
1345
-
1346
- &:hover {
1347
- background: var(--viking-accent-strong);
1348
- }
1349
- }
1350
- }
1351
- }
1352
- }
1353
-
1354
- /* ── Whitepaper CTA (viking-ui) ── */
1355
- .landing-container .viking-whitepaper-cta {
1356
- margin-block: 56px;
1357
- }
1358
-
1359
- /* ── Whitepaper band (legacy) ── */
1360
- .whitepaper-band {
1361
- padding: 56px 0;
1362
-
1363
- &.no-bottom-rule {
1364
- border-bottom: none;
1365
- }
1366
- }
1367
-
1368
- .whitepaper-band-inner {
1369
- display: flex;
1370
- flex-direction: column;
1371
- gap: 24px;
1372
- align-items: flex-start;
1373
- padding: 40px;
1374
- border-radius: var(--viking-radius-xl, 16px);
1375
- background: color-mix(in srgb, var(--viking-accent) 8%, var(--color-surface));
1376
- border: 1px solid color-mix(in srgb, var(--viking-accent) 20%, transparent);
1377
-
1378
- @media (min-width: 768px) {
1379
- flex-direction: row;
1380
- align-items: center;
1381
- justify-content: space-between;
1382
- }
1383
-
1384
- .section-tag {
1385
- font-size: 0.85rem;
1386
- font-weight: 700;
1387
- letter-spacing: 0.15em;
1388
- color: var(--viking-accent);
1389
- text-transform: uppercase;
1390
- display: block;
1391
- margin-bottom: 12px;
1392
- }
1393
-
1394
- h2 {
1395
- font-size: 1.75rem;
1396
- font-weight: 800;
1397
- margin: 0 0 8px 0;
1398
- text-transform: uppercase;
1399
- }
1400
-
1401
- p {
1402
- color: var(--text-muted);
1403
- margin: 0;
1404
- max-width: 480px;
1405
- line-height: 1.55;
1406
- }
1407
-
1408
- .whitepaper-btn {
1409
- width: auto;
1410
- max-width: 100%;
1411
- flex-shrink: 0;
1412
- align-self: flex-start;
1413
-
1414
- @media (min-width: 768px) {
1415
- align-self: center;
1416
- }
1417
- }
1418
- }
1419
-
1420
- /* ── Compliance ── */
1421
- .transparency-atmospheric {
1422
- width: 100%;
1423
- margin: 72px auto 0;
1424
- padding: 64px 24px;
1425
- position: relative;
1426
- z-index: 10;
1427
- border-top: 1px solid
1428
- color-mix(in srgb, var(--viking-accent) 25%, transparent);
1429
- display: flex;
1430
- flex-direction: column;
1431
- align-items: center;
1432
- text-align: center;
1433
- gap: 48px;
1434
-
1435
- .atmospheric-header {
1436
- max-width: 640px;
1437
-
1438
- .section-tag {
1439
- font-size: 0.85rem;
1440
- font-weight: 700;
1441
- letter-spacing: 0.2em;
1442
- color: var(--viking-accent);
1443
- text-transform: uppercase;
1444
- margin-bottom: 16px;
1445
- display: block;
1446
- }
1447
-
1448
- h2 {
1449
- font-size: clamp(1.75rem, 3vw, 2.5rem);
1450
- font-weight: 200;
1451
- color: var(--text-color);
1452
- letter-spacing: 0.1em;
1453
- text-transform: uppercase;
1454
- margin: 0 0 12px 0;
1455
- }
1456
-
1457
- p {
1458
- font-size: 1.1rem;
1459
- color: var(--text-muted);
1460
- line-height: 1.6;
1461
- margin: 0;
1462
- }
1463
- }
1464
-
1465
- .purpose-list {
1466
- display: flex;
1467
- flex-wrap: wrap;
1468
- justify-content: center;
1469
- gap: 48px 64px;
1470
- list-style: none;
1471
- padding: 0;
1472
- margin: 0;
1473
-
1474
- li {
1475
- display: flex;
1476
- flex-direction: column;
1477
- align-items: center;
1478
- text-align: center;
1479
- gap: 16px;
1480
- max-width: 220px;
1481
-
1482
- svg {
1483
- width: 48px;
1484
- height: 48px;
1485
- color: var(--viking-accent);
1486
- filter: drop-shadow(
1487
- 0 0 10px color-mix(in srgb, var(--viking-accent) 40%, transparent)
1488
- );
1489
- }
1490
-
1491
- .purpose-text {
1492
- font-size: 1rem;
1493
- color: var(--text-muted);
1494
- line-height: 1.55;
1495
-
1496
- strong {
1497
- display: block;
1498
- color: var(--text-color);
1499
- font-weight: 600;
1500
- letter-spacing: 0.08em;
1501
- text-transform: uppercase;
1502
- margin-bottom: 6px;
1503
- }
1504
- }
1505
- }
1506
- }
1507
- }
1508
-
1509
- .section-tag {
1510
- font-size: 0.85rem;
1511
- font-weight: 700;
1512
- letter-spacing: 0.15em;
1513
- color: var(--viking-accent);
1514
- text-transform: uppercase;
1515
- }
1516
-
1517
- /* Inline Viking SVG icons must not clip in marketing pages */
1518
- .landing-container svg[aria-hidden="true"] {
1519
- overflow: visible;
1520
- line-height: 1;
1521
- display: inline-flex;
1522
- align-items: center;
1523
- justify-content: center;
1524
- flex-shrink: 0;
1525
- vertical-align: middle;
1526
- }