@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,142 @@
1
+ /* Backend landing & docs — Viking-UI layout helpers (THEME.md v2.1)
2
+ * Surfaces, buttons, cards, and inputs come from synced viking-ui.css +
3
+ * viking-components.css. This file only adds page-specific rhythm.
4
+ */
5
+
6
+ html,
7
+ body {
8
+ height: 100%;
9
+ margin: 0;
10
+ padding: 0;
11
+ overflow-x: hidden;
12
+ }
13
+
14
+ body {
15
+ background-color: var(--viking-bg, var(--bg-color));
16
+ color: var(--viking-text, var(--text-color));
17
+ font-family: var(--viking-font-family, "Inter", ui-sans-serif, system-ui, sans-serif);
18
+ -webkit-font-smoothing: antialiased;
19
+ -moz-osx-font-smoothing: grayscale;
20
+ }
21
+
22
+ /* ── Landing shell ─────────────────────────────────────────────────────────── */
23
+ .backend-landing-shell {
24
+ display: flex;
25
+ flex-direction: column;
26
+ gap: var(--viking-page-section-gap, var(--viking-space-7, 56px));
27
+ min-height: calc(100vh - var(--viking-navbar-height, 64px));
28
+ }
29
+
30
+ .backend-hero {
31
+ text-align: center;
32
+ align-items: center;
33
+ max-width: var(--viking-content-readable-max-width, 48rem);
34
+ margin-inline: auto;
35
+ box-shadow: var(--viking-shadow-sm);
36
+ }
37
+
38
+ .backend-status-badge {
39
+ align-self: center;
40
+ text-transform: uppercase;
41
+ letter-spacing: var(--viking-letter-spacing-caps);
42
+ }
43
+
44
+ .backend-status-dot {
45
+ width: var(--viking-space-1);
46
+ height: var(--viking-space-1);
47
+ border-radius: 50%;
48
+ background-color: var(--viking-success);
49
+ animation: backend-status-pulse 2s infinite;
50
+ }
51
+
52
+ @keyframes backend-status-pulse {
53
+ 0% {
54
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--viking-success) 70%, transparent);
55
+ }
56
+ 70% {
57
+ box-shadow: 0 0 0 var(--viking-space-1) color-mix(in srgb, var(--viking-success) 0%, transparent);
58
+ }
59
+ 100% {
60
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--viking-success) 0%, transparent);
61
+ }
62
+ }
63
+
64
+ .backend-hero-lead {
65
+ text-align: center;
66
+ margin-inline: auto;
67
+ }
68
+
69
+ .backend-hero-cta {
70
+ justify-content: center;
71
+ margin-top: var(--viking-space-1);
72
+ }
73
+
74
+ /* ── Feature cards (VikingCard WC + icon tile) ─────────────────────────────── */
75
+ .backend-feature-grid {
76
+ display: flex;
77
+ flex-direction: column;
78
+ gap: var(--viking-space-3);
79
+ width: 100%;
80
+ }
81
+
82
+ .backend-feature-cards {
83
+ display: grid;
84
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr));
85
+ gap: var(--viking-space-3);
86
+ width: 100%;
87
+ }
88
+
89
+ .backend-feature-card-body {
90
+ display: flex;
91
+ flex-direction: column;
92
+ gap: var(--viking-space-2);
93
+ }
94
+
95
+ .backend-feature-icon {
96
+ /* Extends .viking-icon-badge-static — page-specific sizing only */
97
+ width: var(--viking-space-6);
98
+ height: var(--viking-space-6);
99
+ border-radius: var(--viking-radius-lg);
100
+ box-shadow: var(--viking-shadow-sm);
101
+ border: none;
102
+ }
103
+
104
+ /* ── 404 page ──────────────────────────────────────────────────────────────── */
105
+ body.backend-404 main.main {
106
+ min-height: calc(100vh - var(--viking-navbar-height, 64px));
107
+ display: flex;
108
+ align-items: center;
109
+ justify-content: center;
110
+ }
111
+
112
+ body.backend-404 .backend-error-card {
113
+ max-width: var(--viking-form-max-width, 720px);
114
+ margin-inline: auto;
115
+ text-align: center;
116
+ }
117
+
118
+ body.backend-404 .backend-error-logo {
119
+ max-width: 100px;
120
+ width: 100%;
121
+ margin: 0 auto var(--viking-space-3);
122
+ filter: drop-shadow(0 4px 12px color-mix(in srgb, var(--viking-black) 15%, transparent));
123
+ }
124
+
125
+ body.backend-404 .backend-error-card .viking-heading-xl {
126
+ text-transform: uppercase;
127
+ }
128
+
129
+ body.backend-404 .backend-error-card .viking-text-muted {
130
+ margin-inline: auto;
131
+ }
132
+
133
+ body.backend-404 .viking-cta-row {
134
+ justify-content: center;
135
+ margin-top: var(--viking-space-3);
136
+ }
137
+
138
+ @media (prefers-reduced-motion: reduce) {
139
+ .backend-status-dot {
140
+ animation: none;
141
+ }
142
+ }
@@ -0,0 +1,73 @@
1
+ *,
2
+ *::before,
3
+ *::after {
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ html {
8
+ scroll-behavior: smooth;
9
+ }
10
+
11
+ @media (prefers-reduced-motion: reduce) {
12
+ html {
13
+ scroll-behavior: auto;
14
+ }
15
+ }
16
+
17
+ body.docs-body {
18
+ margin: 0;
19
+ min-height: 100vh;
20
+ background: var(--viking-bg);
21
+ color: var(--viking-text);
22
+ font-family: var(--viking-font-family);
23
+ font-size: var(--viking-font-size-base);
24
+ line-height: var(--viking-line-height-normal);
25
+ }
26
+
27
+ .skip-link {
28
+ position: absolute;
29
+ top: var(--viking-space-1);
30
+ left: var(--viking-space-1);
31
+ z-index: 1000;
32
+ padding: var(--viking-space-1) var(--viking-space-2);
33
+ background: var(--viking-accent);
34
+ color: var(--viking-accent-content);
35
+ border-radius: var(--viking-radius);
36
+ transform: translateY(-200%);
37
+ transition: transform var(--viking-duration-fast) var(--viking-ease-out);
38
+ }
39
+
40
+ .skip-link:focus {
41
+ transform: translateY(0);
42
+ }
43
+
44
+ .page-inner-wrapper {
45
+ width: 100%;
46
+ max-width: var(--viking-container-max-width, 1260px);
47
+ margin-inline: auto;
48
+ padding-inline: var(--viking-page-gutter, var(--viking-space-2));
49
+ }
50
+
51
+ @media (min-width: 768px) {
52
+ .page-inner-wrapper {
53
+ padding-inline: var(--viking-page-gutter-lg, var(--viking-space-3));
54
+ }
55
+ }
56
+
57
+ a {
58
+ color: var(--viking-accent);
59
+ text-decoration: none;
60
+ }
61
+
62
+ a:hover {
63
+ color: var(--viking-accent-hover);
64
+ }
65
+
66
+ code {
67
+ font-family: var(--viking-font-family-mono, ui-monospace, monospace);
68
+ font-size: 0.9em;
69
+ background: var(--viking-surface-alt);
70
+ padding: 0.1em 0.35em;
71
+ border-radius: var(--viking-radius-xs);
72
+ border: 1px solid var(--viking-border-subtle);
73
+ }
@@ -0,0 +1,412 @@
1
+ .docs-header {
2
+ position: sticky;
3
+ top: 0;
4
+ z-index: 50;
5
+ border-bottom: 1px solid var(--viking-border);
6
+ background: color-mix(in srgb, var(--viking-bg) 92%, transparent);
7
+ backdrop-filter: blur(8px);
8
+ }
9
+
10
+ .docs-header-inner {
11
+ display: flex;
12
+ align-items: center;
13
+ gap: var(--viking-space-2);
14
+ min-height: var(--viking-navbar-height, 64px);
15
+ }
16
+
17
+ .docs-brand {
18
+ display: inline-flex;
19
+ align-items: center;
20
+ gap: var(--viking-space-1);
21
+ color: var(--viking-text);
22
+ text-decoration: none;
23
+ flex-shrink: 0;
24
+ }
25
+
26
+ .docs-brand-mark {
27
+ color: var(--viking-accent);
28
+ }
29
+
30
+ .docs-brand-text {
31
+ display: flex;
32
+ flex-direction: column;
33
+ line-height: 1.2;
34
+ }
35
+
36
+ .docs-brand-name {
37
+ font-weight: var(--viking-font-weight-bold);
38
+ font-size: var(--viking-font-size-sm);
39
+ letter-spacing: var(--viking-letter-spacing-wide);
40
+ }
41
+
42
+ .docs-brand-tag {
43
+ font-size: var(--viking-font-size-2xs);
44
+ color: var(--viking-text-muted);
45
+ letter-spacing: var(--viking-letter-spacing-caps);
46
+ text-transform: uppercase;
47
+ }
48
+
49
+ .docs-nav {
50
+ display: none;
51
+ align-items: center;
52
+ gap: var(--viking-space-half);
53
+ margin-inline: auto;
54
+ }
55
+
56
+ @media (min-width: 900px) {
57
+ .docs-nav {
58
+ display: flex;
59
+ }
60
+ }
61
+
62
+ .docs-nav-link {
63
+ padding: var(--viking-space-half) var(--viking-space-1);
64
+ border-radius: var(--viking-radius);
65
+ color: var(--viking-text-muted);
66
+ font-size: var(--viking-font-size-sm);
67
+ font-weight: var(--viking-font-weight-medium);
68
+ transition: var(--viking-transition-colors);
69
+ }
70
+
71
+ .docs-nav-link:hover,
72
+ .docs-nav-link.is-active {
73
+ color: var(--viking-text);
74
+ background: var(--viking-surface-alt);
75
+ }
76
+
77
+ .docs-header-actions {
78
+ display: flex;
79
+ align-items: center;
80
+ gap: var(--viking-space-1);
81
+ margin-left: auto;
82
+ }
83
+
84
+ .docs-github-link {
85
+ display: inline-flex;
86
+ align-items: center;
87
+ gap: var(--viking-space-half);
88
+ padding: var(--viking-space-half) var(--viking-space-1);
89
+ border: 1px solid var(--viking-border);
90
+ border-radius: var(--viking-radius);
91
+ color: var(--viking-text-muted);
92
+ font-size: var(--viking-font-size-sm);
93
+ transition: var(--viking-transition-interactive);
94
+ }
95
+
96
+ .docs-github-link:hover {
97
+ color: var(--viking-text);
98
+ border-color: var(--viking-border-strong);
99
+ }
100
+
101
+ .docs-github-label {
102
+ display: none;
103
+ }
104
+
105
+ @media (min-width: 640px) {
106
+ .docs-github-label {
107
+ display: inline;
108
+ }
109
+ }
110
+
111
+ .theme-toggle-btn {
112
+ display: inline-flex;
113
+ align-items: center;
114
+ justify-content: center;
115
+ width: var(--viking-control-height, 40px);
116
+ height: var(--viking-control-height, 40px);
117
+ border: 1px solid color-mix(in srgb, var(--viking-accent) 32%, var(--viking-border-strong));
118
+ border-radius: var(--viking-radius);
119
+ background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface));
120
+ color: var(--viking-accent-strong, var(--viking-teal-400));
121
+ box-shadow: var(--viking-shadow-sm);
122
+ cursor: pointer;
123
+ transition: var(--viking-transition-interactive);
124
+ }
125
+
126
+ .theme-toggle-btn:hover {
127
+ border-color: var(--viking-accent-strong, var(--viking-teal-400));
128
+ background: color-mix(in srgb, var(--viking-accent) 14%, var(--viking-surface));
129
+ color: var(--viking-accent-strong, var(--viking-teal-400));
130
+ box-shadow: var(--viking-shadow-md);
131
+ }
132
+
133
+ .theme-toggle-btn:focus-visible {
134
+ outline: 2px solid var(--viking-ring);
135
+ outline-offset: 2px;
136
+ }
137
+
138
+ html[data-theme='dark'] .theme-icon-sun { display: block; }
139
+ html[data-theme='dark'] .theme-icon-moon { display: none; }
140
+ html[data-theme='light'] .theme-icon-sun { display: none; }
141
+ html[data-theme='light'] .theme-icon-moon { display: block; }
142
+
143
+ /* ── Horizontal sub-navigation (replaces sidebar) ── */
144
+ .showcase-subnav {
145
+ position: sticky;
146
+ top: var(--viking-navbar-height, 64px);
147
+ z-index: 45;
148
+ border-bottom: 1px solid var(--viking-border);
149
+ background: color-mix(in srgb, var(--viking-bg) 94%, transparent);
150
+ backdrop-filter: blur(8px);
151
+ --showcase-subnav-height: 52px;
152
+ min-height: var(--showcase-subnav-height);
153
+ }
154
+
155
+ .showcase-subnav-inner {
156
+ padding-block: var(--viking-space-1);
157
+ }
158
+
159
+ .showcase-subnav-scroll {
160
+ display: flex;
161
+ gap: var(--viking-space-1);
162
+ overflow-x: auto;
163
+ scrollbar-width: none;
164
+ -webkit-overflow-scrolling: touch;
165
+ }
166
+
167
+ .showcase-subnav-scroll::-webkit-scrollbar {
168
+ display: none;
169
+ }
170
+
171
+ .showcase-subnav-link {
172
+ flex-shrink: 0;
173
+ padding: var(--viking-space-1) var(--viking-space-2);
174
+ border: 1px solid transparent;
175
+ border-radius: var(--viking-radius);
176
+ color: var(--viking-text-muted);
177
+ font-size: var(--viking-font-size-sm);
178
+ font-weight: var(--viking-font-weight-medium);
179
+ text-decoration: none;
180
+ white-space: nowrap;
181
+ min-height: var(--viking-control-height, 44px);
182
+ display: inline-flex;
183
+ align-items: center;
184
+ transition: var(--viking-transition-colors);
185
+ }
186
+
187
+ .showcase-subnav-link:hover {
188
+ color: var(--viking-text);
189
+ background: var(--viking-surface-alt);
190
+ }
191
+
192
+ .showcase-subnav-link.is-active {
193
+ color: var(--viking-accent);
194
+ border-color: color-mix(in srgb, var(--viking-accent) 28%, var(--viking-border));
195
+ background: color-mix(in srgb, var(--viking-accent) 10%, var(--viking-surface));
196
+ }
197
+
198
+ .docs-layout {
199
+ display: grid;
200
+ grid-template-columns: 1fr;
201
+ min-height: calc(100vh - var(--viking-navbar-height, 64px));
202
+ }
203
+
204
+ .docs-layout-full {
205
+ grid-template-columns: 1fr;
206
+ }
207
+
208
+ .docs-main {
209
+ display: flex;
210
+ flex-direction: column;
211
+ min-width: 0;
212
+ }
213
+
214
+ .docs-content {
215
+ flex: 1;
216
+ padding: var(--viking-space-4) var(--viking-space-2);
217
+ }
218
+
219
+ @media (min-width: 768px) {
220
+ .docs-content {
221
+ padding: var(--viking-space-5) var(--viking-space-4);
222
+ }
223
+ }
224
+
225
+ .docs-footer {
226
+ border-top: 1px solid var(--viking-border);
227
+ padding: var(--viking-space-4) 0;
228
+ margin-top: var(--viking-space-5);
229
+ }
230
+
231
+ .docs-footer-grid {
232
+ display: flex;
233
+ flex-wrap: wrap;
234
+ gap: var(--viking-space-3);
235
+ justify-content: space-between;
236
+ align-items: flex-start;
237
+ }
238
+
239
+ .docs-footer-nav {
240
+ display: flex;
241
+ flex-wrap: wrap;
242
+ gap: var(--viking-space-2);
243
+ }
244
+
245
+ .docs-footer-nav a {
246
+ color: var(--viking-text-muted);
247
+ font-size: var(--viking-font-size-sm);
248
+ }
249
+
250
+ .docs-footer-copy {
251
+ margin: var(--viking-space-3) 0 0;
252
+ font-size: var(--viking-font-size-xs);
253
+ color: var(--viking-text-muted);
254
+ }
255
+
256
+ .code-block {
257
+ border: 1px solid var(--viking-border);
258
+ border-radius: var(--viking-radius-lg);
259
+ overflow: hidden;
260
+ background: var(--viking-charcoal-950, #0a0a0a);
261
+ }
262
+
263
+ .code-block-tabs {
264
+ display: flex;
265
+ flex-wrap: wrap;
266
+ align-items: center;
267
+ gap: var(--viking-space-half);
268
+ padding: var(--viking-space-1);
269
+ border-bottom: 1px solid var(--viking-border);
270
+ background: var(--viking-surface);
271
+ }
272
+
273
+ .code-block-tab {
274
+ padding: var(--viking-space-half) var(--viking-space-1);
275
+ border: none;
276
+ border-radius: var(--viking-radius-sm);
277
+ background: transparent;
278
+ color: var(--viking-text-muted);
279
+ font-size: var(--viking-font-size-xs);
280
+ font-weight: var(--viking-font-weight-medium);
281
+ cursor: pointer;
282
+ min-height: 36px;
283
+ }
284
+
285
+ .code-block-tab.is-active {
286
+ background: var(--viking-surface-alt);
287
+ color: var(--viking-text);
288
+ }
289
+
290
+ .code-block-tab:focus-visible {
291
+ outline: 2px solid var(--viking-ring);
292
+ outline-offset: 2px;
293
+ }
294
+
295
+ .code-block-copy {
296
+ display: inline-flex;
297
+ align-items: center;
298
+ gap: var(--viking-space-half);
299
+ margin-left: auto;
300
+ padding: var(--viking-space-half) var(--viking-space-1);
301
+ border: 1px solid var(--viking-border);
302
+ border-radius: var(--viking-radius-sm);
303
+ background: transparent;
304
+ color: var(--viking-text-muted);
305
+ font-size: var(--viking-font-size-xs);
306
+ cursor: pointer;
307
+ min-height: 36px;
308
+ }
309
+
310
+ .code-block-copy:hover {
311
+ color: var(--viking-text);
312
+ border-color: var(--viking-border-strong);
313
+ }
314
+
315
+ .code-block-panel {
316
+ margin: 0;
317
+ padding: var(--viking-space-2);
318
+ overflow-x: auto;
319
+ font-size: var(--viking-font-size-sm);
320
+ line-height: var(--viking-line-height-relaxed);
321
+ color: var(--viking-text);
322
+ }
323
+
324
+ .code-block-panel code {
325
+ background: transparent;
326
+ border: none;
327
+ padding: 0;
328
+ white-space: pre;
329
+ }
330
+
331
+ .code-block-panel[hidden] {
332
+ display: none;
333
+ }
334
+
335
+ /* Legacy component-card aliases — styles live in showcase.scss */
336
+
337
+ .token-inspector-search {
338
+ width: 100%;
339
+ max-width: 28rem;
340
+ margin-bottom: var(--viking-space-3);
341
+ }
342
+
343
+ .token-table {
344
+ width: 100%;
345
+ border-collapse: collapse;
346
+ font-size: var(--viking-font-size-sm);
347
+ }
348
+
349
+ .token-table th,
350
+ .token-table td {
351
+ padding: var(--viking-space-1);
352
+ text-align: left;
353
+ border-bottom: 1px solid var(--viking-border-subtle);
354
+ }
355
+
356
+ .token-swatch {
357
+ width: 2rem;
358
+ height: 2rem;
359
+ border-radius: var(--viking-radius-sm);
360
+ border: 1px solid var(--viking-border);
361
+ }
362
+
363
+ .token-copy-btn {
364
+ padding: var(--viking-space-half) var(--viking-space-1);
365
+ border: 1px solid var(--viking-border);
366
+ border-radius: var(--viking-radius-sm);
367
+ background: transparent;
368
+ color: var(--viking-text-muted);
369
+ font-size: var(--viking-font-size-xs);
370
+ cursor: pointer;
371
+ min-height: 32px;
372
+ }
373
+
374
+ .framework-grid {
375
+ display: grid;
376
+ grid-template-columns: 1fr;
377
+ gap: var(--viking-space-3);
378
+ }
379
+
380
+ @media (min-width: 768px) {
381
+ .framework-grid {
382
+ grid-template-columns: repeat(2, 1fr);
383
+ }
384
+ }
385
+
386
+ .framework-card {
387
+ padding: var(--viking-space-3);
388
+ background: var(--viking-surface-recipe, var(--viking-surface));
389
+ border: 1px solid var(--viking-border);
390
+ border-radius: var(--viking-radius-lg);
391
+ box-shadow: var(--viking-shadow-sm);
392
+ }
393
+
394
+ .contribute-steps {
395
+ display: flex;
396
+ flex-direction: column;
397
+ gap: var(--viking-space-2);
398
+ counter-reset: step;
399
+ }
400
+
401
+ .contribute-step {
402
+ padding: var(--viking-space-3);
403
+ border: 1px solid var(--viking-border);
404
+ border-radius: var(--viking-radius-lg);
405
+ background: var(--viking-surface);
406
+ }
407
+
408
+ .contribute-step h3::before {
409
+ counter-increment: step;
410
+ content: counter(step, decimal-leading-zero) ' — ';
411
+ color: var(--viking-accent);
412
+ }