@dataengineeringformachinelearning/viking-ui 1.0.1 → 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 -37
  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 +21 -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 -5949
  127. package/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +0 -1
  128. package/types/dataengineeringformachinelearning-viking-ui.d.ts +0 -1374
  129. package/viking.manifest.json +0 -189
@@ -0,0 +1,921 @@
1
+ /**
2
+ * Swagger UI — Viking-UI theme (single-panel, flat operation list).
3
+ * Load after swagger-ui.css; tokens from the built viking-ui.css bundle.
4
+ */
5
+
6
+ body.backend-swagger {
7
+ background: var(--viking-bg, var(--bg-color));
8
+ }
9
+
10
+ .backend-swagger-shell {
11
+ padding-block: var(--viking-space-3) var(--viking-space-6);
12
+ }
13
+
14
+ /* ── VikingCard panel wrapping Swagger UI ──────────────────────────────────── */
15
+ .backend-swagger-panel {
16
+ padding: 0;
17
+ overflow: hidden;
18
+ }
19
+
20
+ .backend-swagger-hero {
21
+ border: none;
22
+ border-radius: 0;
23
+ box-shadow: none;
24
+ border-bottom: 1px solid var(--viking-border);
25
+ margin: 0;
26
+ }
27
+
28
+ .backend-swagger-toolbar {
29
+ padding: var(--viking-space-2) var(--viking-space-3);
30
+ border-bottom: 1px solid var(--viking-border);
31
+ background: color-mix(in srgb, var(--viking-surface-alt) 40%, transparent);
32
+ }
33
+
34
+ .backend-swagger-search {
35
+ margin: 0;
36
+ max-width: none;
37
+ }
38
+
39
+ .backend-swagger-search .viking-input-shell {
40
+ width: 100%;
41
+ }
42
+
43
+ .backend-swagger-panel #swagger-ui {
44
+ padding: 0 var(--viking-space-3) var(--viking-space-3);
45
+ }
46
+
47
+ .swagger-ui .opblock .opblock-summary {
48
+ flex-wrap: wrap;
49
+ gap: var(--viking-space-1, 8px);
50
+ }
51
+
52
+ /* ── Base resets ─────────────────────────────────────────────────────────── */
53
+ .swagger-ui .topbar {
54
+ display: none;
55
+ }
56
+
57
+ .swagger-ui {
58
+ font-family: var(--viking-font-family, "Inter", system-ui, sans-serif);
59
+ color: var(--viking-text, var(--text-color));
60
+ }
61
+
62
+ .swagger-ui,
63
+ .swagger-ui .wrapper,
64
+ .swagger-ui section {
65
+ background: transparent;
66
+ }
67
+
68
+ /* Hide duplicate Swagger title — page hero is authoritative */
69
+ .swagger-ui .info .title {
70
+ display: none;
71
+ }
72
+
73
+ .swagger-ui .info {
74
+ margin: 0;
75
+ padding: var(--viking-space-2, 16px) 0;
76
+ border-bottom: 1px solid var(--viking-border, var(--border));
77
+ }
78
+
79
+ .swagger-ui .info .markdown,
80
+ .swagger-ui .info .description {
81
+ margin: 0;
82
+ max-width: none;
83
+ text-align: left;
84
+ }
85
+
86
+ .swagger-ui .info .base-url,
87
+ .swagger-ui .info p,
88
+ .swagger-ui .info li,
89
+ .swagger-ui .info .markdown p {
90
+ font-size: 0.92rem;
91
+ line-height: 1.6;
92
+ color: var(--viking-text-muted, var(--text-muted));
93
+ }
94
+
95
+ .swagger-ui .info .description {
96
+ padding: var(--viking-space-2, 16px);
97
+ border-radius: var(--viking-radius, 8px);
98
+ border: 1px solid
99
+ color-mix(
100
+ in srgb,
101
+ var(--viking-accent, var(--color-primary)) 22%,
102
+ var(--border)
103
+ );
104
+ background: color-mix(
105
+ in srgb,
106
+ var(--viking-accent, var(--color-primary)) 6%,
107
+ transparent
108
+ );
109
+ }
110
+
111
+ .swagger-ui .info a {
112
+ color: var(--viking-accent, var(--color-primary));
113
+ text-decoration: none;
114
+ }
115
+
116
+ .swagger-ui .info a:hover,
117
+ .swagger-ui .info a:focus-visible {
118
+ text-decoration: underline;
119
+ text-underline-offset: 3px;
120
+ }
121
+
122
+ /* ── Toolbar: authorize + filter ─────────────────────────────────────────── */
123
+ .swagger-ui .scheme-container {
124
+ display: flex;
125
+ align-items: center;
126
+ justify-content: flex-end;
127
+ flex-wrap: wrap;
128
+ gap: var(--viking-space-2, 16px);
129
+ margin: 0;
130
+ padding: var(--viking-space-2, 16px) 0;
131
+ border: none;
132
+ border-bottom: 1px solid var(--viking-border, var(--border));
133
+ border-radius: 0;
134
+ box-shadow: none !important;
135
+ background: transparent !important;
136
+ }
137
+
138
+ .swagger-ui .scheme-container .schemes > label {
139
+ color: var(--viking-text-muted, var(--text-muted));
140
+ font-size: 0.72rem;
141
+ font-weight: 700;
142
+ letter-spacing: 0.08em;
143
+ text-transform: uppercase;
144
+ }
145
+
146
+ .swagger-ui .scheme-container select {
147
+ background: var(--viking-surface-alt, var(--viking-charcoal-700));
148
+ border: 1px solid var(--viking-border-strong, var(--border));
149
+ border-radius: var(--viking-radius-sm, 6px);
150
+ color: var(--viking-text, var(--text-color));
151
+ font-family: inherit;
152
+ font-size: var(--viking-font-size-sm, 14px);
153
+ min-height: 36px;
154
+ padding: 0 var(--viking-space-2, 16px);
155
+ }
156
+
157
+ .swagger-ui .filter-container {
158
+ margin: 0;
159
+ padding: 0;
160
+ border: none;
161
+ position: absolute;
162
+ width: 1px;
163
+ height: 1px;
164
+ padding: 0;
165
+ margin: -1px;
166
+ overflow: hidden;
167
+ clip: rect(0, 0, 0, 0);
168
+ white-space: nowrap;
169
+ border: 0;
170
+ }
171
+
172
+ .swagger-ui .filter-container input[type="text"] {
173
+ width: 100%;
174
+ max-width: 100%;
175
+ min-height: 36px;
176
+ padding: 0 var(--viking-space-2, 16px);
177
+ border: 1px solid var(--viking-border, var(--border));
178
+ border-radius: var(--viking-radius, 8px);
179
+ background: var(--viking-surface-alt, var(--viking-charcoal-800));
180
+ box-shadow: none;
181
+ color: var(--viking-text, var(--text-color));
182
+ }
183
+
184
+ /* ── Buttons ─────────────────────────────────────────────────────────────── */
185
+ .swagger-ui .btn {
186
+ background: var(--viking-surface, var(--card-bg));
187
+ border: 1px solid var(--viking-border-strong, var(--border));
188
+ border-radius: var(--viking-radius, 8px);
189
+ box-shadow: none;
190
+ color: var(--viking-text, var(--text-color));
191
+ font-family: inherit;
192
+ font-size: 0.78rem;
193
+ font-weight: 600;
194
+ letter-spacing: 0.04em;
195
+ min-height: 36px;
196
+ padding: 0 var(--viking-space-2, 16px);
197
+ text-transform: uppercase;
198
+ transition: var(--viking-transition-interactive, all 0.2s ease);
199
+ }
200
+
201
+ .swagger-ui .btn:hover {
202
+ background: var(--viking-surface-raised, var(--viking-charcoal-600));
203
+ border-color: var(--viking-accent-strong, var(--viking-teal-400));
204
+ transform: none;
205
+ }
206
+
207
+ .swagger-ui .btn:focus-visible {
208
+ outline: var(--viking-ring-width, 2px) solid
209
+ var(--viking-ring, var(--focus-ring-color));
210
+ outline-offset: var(--viking-ring-offset, 2px);
211
+ }
212
+
213
+ .swagger-ui .btn.authorize,
214
+ .swagger-ui .btn.authorize.unlocked,
215
+ .swagger-ui .btn.execute {
216
+ background: var(--viking-accent, var(--color-primary));
217
+ border-color: color-mix(
218
+ in srgb,
219
+ var(--viking-accent) 82%,
220
+ var(--viking-black)
221
+ );
222
+ color: var(--viking-accent-content, var(--viking-white-pure));
223
+ box-shadow: var(--viking-shadow-sm);
224
+ min-height: var(--viking-control-height, 40px);
225
+ border-radius: var(--viking-radius, 8px);
226
+ }
227
+
228
+ .swagger-ui .btn.authorize:hover,
229
+ .swagger-ui .btn.authorize.unlocked:hover,
230
+ .swagger-ui .btn.execute:hover {
231
+ background: var(--viking-accent-hover, var(--viking-teal-500));
232
+ border-color: color-mix(
233
+ in srgb,
234
+ var(--viking-accent-hover) 82%,
235
+ var(--viking-black)
236
+ );
237
+ color: var(--viking-accent-content, var(--viking-white-pure));
238
+ box-shadow: var(--viking-shadow-md);
239
+ }
240
+
241
+ /* ── Tag groups ──────────────────────────────────────────────────────────── */
242
+ .swagger-ui .opblock-tag-section {
243
+ margin: 0;
244
+ }
245
+
246
+ .swagger-ui .opblock-tag {
247
+ margin: var(--viking-space-3, 24px) 0 var(--viking-space-1, 8px);
248
+ padding: 0 0 var(--viking-space-1, 8px);
249
+ border-bottom: 1px solid var(--viking-border, var(--border));
250
+ font-size: 0.72rem;
251
+ font-weight: 700;
252
+ letter-spacing: 0.1em;
253
+ text-transform: uppercase;
254
+ color: var(--viking-text-muted, var(--text-muted));
255
+ }
256
+
257
+ .swagger-ui .opblock-tag small {
258
+ font-size: 0.85rem;
259
+ font-weight: 500;
260
+ letter-spacing: normal;
261
+ text-transform: none;
262
+ }
263
+
264
+ .swagger-ui .opblock-tag svg {
265
+ fill: var(--viking-text-muted, var(--text-muted));
266
+ }
267
+
268
+ /* ── Operations — flat rows, no nested cards ─────────────────────────────── */
269
+ .swagger-ui .opblock {
270
+ margin: 0;
271
+ border: none;
272
+ border-bottom: 1px solid var(--viking-border, var(--border));
273
+ border-radius: 0;
274
+ box-shadow: none;
275
+ background: transparent;
276
+ }
277
+
278
+ .swagger-ui .opblock.opblock-post,
279
+ .swagger-ui .opblock.opblock-get,
280
+ .swagger-ui .opblock.opblock-put,
281
+ .swagger-ui .opblock.opblock-patch,
282
+ .swagger-ui .opblock.opblock-delete,
283
+ .swagger-ui .opblock.opblock-options,
284
+ .swagger-ui .opblock.opblock-head {
285
+ border: none;
286
+ border-bottom: 1px solid var(--viking-border, var(--border));
287
+ background: transparent;
288
+ }
289
+
290
+ .swagger-ui .opblock .opblock-summary {
291
+ border: none;
292
+ background: transparent !important;
293
+ padding: var(--viking-space-2, 16px) 0;
294
+ }
295
+
296
+ .swagger-ui .opblock.is-open .opblock-summary {
297
+ border-bottom: 1px solid var(--viking-border-subtle, var(--border));
298
+ }
299
+
300
+ .swagger-ui .opblock .opblock-summary-method {
301
+ border-radius: var(--viking-radius-sm, 6px);
302
+ font-family: var(--viking-font-family-mono, "JetBrains Mono", monospace);
303
+ font-size: 0.68rem;
304
+ font-weight: 700;
305
+ letter-spacing: 0.06em;
306
+ min-width: 64px;
307
+ text-align: center;
308
+ }
309
+
310
+ .swagger-ui .opblock.opblock-get .opblock-summary-method {
311
+ background: color-mix(in srgb, var(--viking-accent) 16%, transparent);
312
+ color: var(--viking-accent-strong);
313
+ }
314
+
315
+ .swagger-ui .opblock.opblock-post .opblock-summary-method {
316
+ background: color-mix(in srgb, var(--viking-accent) 16%, transparent);
317
+ color: var(--viking-accent-strong);
318
+ }
319
+
320
+ .swagger-ui .opblock.opblock-put .opblock-summary-method,
321
+ .swagger-ui .opblock.opblock-patch .opblock-summary-method {
322
+ background: color-mix(in srgb, var(--viking-gold-500) 16%, transparent);
323
+ color: var(--viking-gold-500);
324
+ }
325
+
326
+ .swagger-ui .opblock.opblock-delete .opblock-summary-method {
327
+ background: color-mix(in srgb, var(--viking-crimson-600) 14%, transparent);
328
+ color: var(--viking-crimson-400);
329
+ }
330
+
331
+ .swagger-ui .opblock .opblock-summary-path,
332
+ .swagger-ui .opblock .opblock-summary-path__deprecated {
333
+ color: var(--viking-text, var(--text-color));
334
+ font-family: var(--viking-font-family-mono, "JetBrains Mono", monospace);
335
+ font-size: 0.88rem;
336
+ }
337
+
338
+ .swagger-ui .opblock .opblock-summary-description {
339
+ color: var(--viking-text-muted, var(--text-muted));
340
+ font-size: 0.88rem;
341
+ }
342
+
343
+ .swagger-ui .opblock-body,
344
+ .swagger-ui .opblock-section {
345
+ background: color-mix(
346
+ in srgb,
347
+ var(--viking-bg, var(--bg-color)) 35%,
348
+ transparent
349
+ );
350
+ }
351
+
352
+ /* Inner operation panels — beat swagger-ui.css specificity (.opblock .opblock-section-header) */
353
+ .swagger-ui .opblock .opblock-section-header {
354
+ align-items: center;
355
+ background: color-mix(
356
+ in srgb,
357
+ var(--viking-surface-alt, var(--viking-charcoal-800)) 72%,
358
+ transparent
359
+ ) !important;
360
+ border-bottom: 1px solid var(--viking-border-subtle, var(--border));
361
+ box-shadow: none !important;
362
+ min-height: auto;
363
+ padding: var(--viking-space-1-5, 12px) var(--viking-space-2, 16px);
364
+ }
365
+
366
+ .swagger-ui .opblock .opblock-section-header h4 {
367
+ color: var(--viking-text-muted, var(--text-muted));
368
+ flex: 1;
369
+ font-family: inherit;
370
+ font-size: 0.72rem;
371
+ font-weight: 700;
372
+ letter-spacing: 0.08em;
373
+ margin: 0;
374
+ text-transform: uppercase;
375
+ }
376
+
377
+ .swagger-ui .opblock .opblock-section-header > label {
378
+ align-items: center;
379
+ color: var(--viking-text-muted, var(--text-muted));
380
+ display: flex;
381
+ font-family: inherit;
382
+ font-size: 0.72rem;
383
+ font-weight: 700;
384
+ letter-spacing: 0.08em;
385
+ margin: 0 0 0 auto;
386
+ text-transform: uppercase;
387
+ }
388
+
389
+ .swagger-ui .opblock .opblock-section-header > label > span {
390
+ padding: 0 var(--viking-space-1, 8px) 0 0;
391
+ }
392
+
393
+ .swagger-ui .opblock-section-header {
394
+ background: color-mix(
395
+ in srgb,
396
+ var(--viking-surface-alt, var(--viking-charcoal-800)) 72%,
397
+ transparent
398
+ ) !important;
399
+ border-bottom: 1px solid var(--viking-border-subtle, var(--border));
400
+ box-shadow: none !important;
401
+ padding: var(--viking-space-1-5, 12px) 0;
402
+ }
403
+
404
+ .swagger-ui .opblock-section-header h4,
405
+ .swagger-ui .opblock-section-header label {
406
+ color: var(--viking-text-muted, var(--text-muted));
407
+ font-size: 0.72rem;
408
+ font-weight: 700;
409
+ letter-spacing: 0.08em;
410
+ text-transform: uppercase;
411
+ }
412
+
413
+ .swagger-ui .opblock-body {
414
+ padding: var(--viking-space-2, 16px) 0;
415
+ }
416
+
417
+ .swagger-ui .opblock-description-wrapper,
418
+ .swagger-ui .opblock-external-docs-wrapper,
419
+ .swagger-ui .opblock-title_normal {
420
+ background: transparent;
421
+ color: var(--viking-text-muted, var(--text-muted));
422
+ font-family: inherit;
423
+ font-size: 0.88rem;
424
+ margin: 0;
425
+ padding: var(--viking-space-1, 8px) 0;
426
+ }
427
+
428
+ .swagger-ui .opblock-description-wrapper h4,
429
+ .swagger-ui .opblock-external-docs-wrapper h4,
430
+ .swagger-ui .opblock-title_normal h4 {
431
+ color: var(--viking-text-muted, var(--text-muted));
432
+ font-family: inherit;
433
+ font-size: 0.72rem;
434
+ font-weight: 700;
435
+ letter-spacing: 0.08em;
436
+ text-transform: uppercase;
437
+ }
438
+
439
+ .swagger-ui .table-container {
440
+ background: transparent;
441
+ padding: var(--viking-space-1, 8px) 0;
442
+ }
443
+
444
+ .swagger-ui .parameters-col_description,
445
+ .swagger-ui .parameters-col_name {
446
+ color: var(--viking-text, var(--text-color));
447
+ }
448
+
449
+ .swagger-ui .parameters-col_description .markdown p,
450
+ .swagger-ui .parameters-col_description .renderedMarkdown p,
451
+ .swagger-ui .opblock-body .markdown p,
452
+ .swagger-ui .opblock-body .renderedMarkdown p {
453
+ color: var(--viking-text-muted, var(--text-muted));
454
+ font-size: 0.88rem;
455
+ margin: 0;
456
+ }
457
+
458
+ .swagger-ui .parameter__name {
459
+ color: var(--viking-text, var(--text-color));
460
+ font-family: var(--viking-font-family-mono, "JetBrains Mono", monospace);
461
+ font-size: 0.88rem;
462
+ font-weight: 600;
463
+ }
464
+
465
+ .swagger-ui .parameter__name.required span {
466
+ color: var(--viking-crimson-400, var(--color-error));
467
+ }
468
+
469
+ .swagger-ui .parameter__extension,
470
+ .swagger-ui .parameter__in {
471
+ color: var(--viking-text-muted, var(--text-muted));
472
+ font-family: var(--viking-font-family-mono, "JetBrains Mono", monospace);
473
+ font-size: 0.78rem;
474
+ }
475
+
476
+ .swagger-ui .tab {
477
+ display: flex;
478
+ gap: var(--viking-space-2, 16px);
479
+ margin: 0 0 var(--viking-space-1, 8px);
480
+ }
481
+
482
+ .swagger-ui .tab li {
483
+ color: var(--viking-text-muted, var(--text-muted));
484
+ font-family: inherit;
485
+ font-size: 0.78rem;
486
+ font-weight: 600;
487
+ letter-spacing: 0.04em;
488
+ min-width: 0;
489
+ padding: 0;
490
+ text-transform: uppercase;
491
+ }
492
+
493
+ .swagger-ui .tab li:first-of-type:after {
494
+ background: var(--viking-border-subtle, var(--border));
495
+ }
496
+
497
+ .swagger-ui .tab li.active {
498
+ color: var(--viking-accent-strong, var(--viking-teal-400));
499
+ font-weight: 700;
500
+ }
501
+
502
+ .swagger-ui .tab li button.tablinks {
503
+ color: inherit;
504
+ }
505
+
506
+ .swagger-ui .body-param-options label {
507
+ color: var(--viking-text-muted, var(--text-muted));
508
+ font-size: 0.78rem;
509
+ font-weight: 600;
510
+ letter-spacing: 0.04em;
511
+ padding: var(--viking-space-1, 8px) 0;
512
+ text-transform: uppercase;
513
+ }
514
+
515
+ .swagger-ui .body-param__media-type,
516
+ .swagger-ui .body-param__text {
517
+ color: var(--viking-text, var(--text-color));
518
+ }
519
+
520
+ .swagger-ui .execute-wrapper {
521
+ background: transparent;
522
+ padding: var(--viking-space-2, 16px) 0 0;
523
+ text-align: left;
524
+ }
525
+
526
+ .swagger-ui .execute-wrapper .btn {
527
+ width: 100%;
528
+ }
529
+
530
+ .swagger-ui .responses-inner h4,
531
+ .swagger-ui .responses-inner h5,
532
+ .swagger-ui .response-control-media-type__title,
533
+ .swagger-ui .response-control-examples__title {
534
+ color: var(--viking-text-muted, var(--text-muted));
535
+ font-family: inherit;
536
+ font-size: 0.72rem;
537
+ font-weight: 700;
538
+ letter-spacing: 0.08em;
539
+ text-transform: uppercase;
540
+ }
541
+
542
+ .swagger-ui .response-col_status,
543
+ .swagger-ui .response-col_links {
544
+ color: var(--viking-text, var(--text-color));
545
+ font-family: inherit;
546
+ font-size: 0.88rem;
547
+ }
548
+
549
+ .swagger-ui .response-col_status .response-undocumented {
550
+ color: var(--viking-text-muted, var(--text-muted));
551
+ }
552
+
553
+ .swagger-ui .response-control-media-type__accept-message {
554
+ color: var(--viking-success, var(--viking-green-500));
555
+ }
556
+
557
+ .swagger-ui
558
+ .response-control-media-type--accept-controller
559
+ select.content-type {
560
+ border-color: var(--viking-success, var(--viking-green-500));
561
+ }
562
+
563
+ .swagger-ui .btn.cancel {
564
+ background: transparent !important;
565
+ border-color: var(--viking-border-strong, var(--border)) !important;
566
+ color: var(--viking-text-muted, var(--text-muted)) !important;
567
+ }
568
+
569
+ .swagger-ui .btn.cancel:hover {
570
+ background: color-mix(
571
+ in srgb,
572
+ var(--viking-crimson-500, var(--color-error)) 10%,
573
+ transparent
574
+ ) !important;
575
+ border-color: var(--viking-crimson-400, var(--color-error)) !important;
576
+ color: var(--viking-crimson-400, var(--color-error)) !important;
577
+ }
578
+
579
+ .swagger-ui .opblock-body pre.microlight {
580
+ background: var(--viking-charcoal-950, #0a0a0a) !important;
581
+ border: 1px solid var(--viking-border, var(--border));
582
+ border-radius: var(--viking-radius, 8px);
583
+ color: var(--viking-text, var(--text-color)) !important;
584
+ font-family: var(
585
+ --viking-font-family-mono,
586
+ "JetBrains Mono",
587
+ monospace
588
+ ) !important;
589
+ font-size: 0.84rem !important;
590
+ padding: var(--viking-space-2, 16px) !important;
591
+ }
592
+
593
+ .swagger-ui .markdown p,
594
+ .swagger-ui .renderedMarkdown p {
595
+ color: var(--viking-text-muted, var(--text-muted));
596
+ }
597
+
598
+ .swagger-ui .markdown pre,
599
+ .swagger-ui .renderedMarkdown pre {
600
+ background: none;
601
+ color: var(--viking-text, var(--text-color));
602
+ font-weight: 400;
603
+ padding: 0;
604
+ }
605
+
606
+ .swagger-ui .copy-to-clipboard {
607
+ background: var(--viking-surface-alt, var(--viking-charcoal-700));
608
+ border: 1px solid var(--viking-border, var(--border));
609
+ }
610
+
611
+ .swagger-ui .copy-to-clipboard:hover {
612
+ background: var(--viking-surface-raised, var(--viking-charcoal-600));
613
+ }
614
+
615
+ /* ── Parameters & inputs ─────────────────────────────────────────────────── */
616
+ .swagger-ui .parameters-col_description input[type="text"],
617
+ .swagger-ui .parameters-col_description select,
618
+ .swagger-ui .opblock-body input[type="text"],
619
+ .swagger-ui .opblock-body input[type="password"],
620
+ .swagger-ui .opblock-body input[type="search"],
621
+ .swagger-ui .opblock-body input[type="email"],
622
+ .swagger-ui .opblock-body input[type="url"],
623
+ .swagger-ui .opblock-body textarea,
624
+ .swagger-ui textarea,
625
+ .swagger-ui input[type="text"],
626
+ .swagger-ui input[type="password"],
627
+ .swagger-ui input[type="search"],
628
+ .swagger-ui input[type="email"],
629
+ .swagger-ui input[type="url"],
630
+ .swagger-ui select {
631
+ background: var(--viking-surface, var(--card-bg));
632
+ border: 1px solid var(--viking-border-strong, var(--border));
633
+ border-radius: var(--viking-radius-sm, 6px);
634
+ color: var(--viking-text, var(--text-color));
635
+ font-family: var(--viking-font-family-mono, "JetBrains Mono", monospace);
636
+ font-size: 0.88rem;
637
+ min-height: 32px;
638
+ padding: var(--viking-space-1, 8px) var(--viking-space-2, 16px);
639
+ }
640
+
641
+ .swagger-ui input:focus-visible,
642
+ .swagger-ui textarea:focus-visible,
643
+ .swagger-ui select:focus-visible {
644
+ border-color: var(--viking-accent-strong, var(--viking-teal-400));
645
+ outline: var(--viking-ring-width, 2px) solid
646
+ var(--viking-ring, var(--focus-ring-color));
647
+ outline-offset: var(--viking-ring-offset, 2px);
648
+ }
649
+
650
+ .swagger-ui .parameter__name,
651
+ .swagger-ui .parameter__type,
652
+ .swagger-ui .parameter__in {
653
+ font-family: var(--viking-font-family-mono, "JetBrains Mono", monospace);
654
+ font-size: 0.88rem;
655
+ }
656
+
657
+ .swagger-ui .parameter__in {
658
+ color: var(--viking-text-muted, var(--text-muted));
659
+ }
660
+
661
+ .swagger-ui table thead tr th,
662
+ .swagger-ui table thead tr td {
663
+ border-bottom: 1px solid var(--viking-border, var(--border));
664
+ color: var(--viking-text-muted, var(--text-muted));
665
+ font-size: 0.68rem;
666
+ font-weight: 700;
667
+ letter-spacing: 0.08em;
668
+ text-transform: uppercase;
669
+ }
670
+
671
+ .swagger-ui table tbody tr td {
672
+ border-bottom: 1px solid var(--viking-border-subtle, var(--border));
673
+ font-size: 0.88rem;
674
+ padding: var(--viking-space-1-5, 12px) 0;
675
+ }
676
+
677
+ /* ── Responses & code ────────────────────────────────────────────────────── */
678
+ .swagger-ui .responses-inner {
679
+ padding: var(--viking-space-2, 16px) 0;
680
+ }
681
+
682
+ .swagger-ui .response-col_status {
683
+ font-family: var(--viking-font-family-mono, "JetBrains Mono", monospace);
684
+ font-weight: 700;
685
+ }
686
+
687
+ .swagger-ui .response-col_description__inner p,
688
+ .swagger-ui .response-col_links {
689
+ color: var(--viking-text-muted, var(--text-muted));
690
+ font-size: 0.88rem;
691
+ }
692
+
693
+ .swagger-ui .highlight-code,
694
+ .swagger-ui .microlight,
695
+ .swagger-ui .renderedMarkdown pre,
696
+ .swagger-ui pre {
697
+ background: var(--viking-charcoal-950, #0a0a0a) !important;
698
+ border: 1px solid var(--viking-border, var(--border));
699
+ border-radius: var(--viking-radius, 8px);
700
+ color: var(--viking-text, var(--text-color)) !important;
701
+ font-family: var(
702
+ --viking-font-family-mono,
703
+ "JetBrains Mono",
704
+ monospace
705
+ ) !important;
706
+ font-size: 0.84rem !important;
707
+ line-height: 1.55;
708
+ padding: var(--viking-space-2, 16px) !important;
709
+ }
710
+
711
+ .swagger-ui .markdown code,
712
+ .swagger-ui .renderedMarkdown code {
713
+ background: color-mix(
714
+ in srgb,
715
+ var(--viking-surface-alt, #1a1a1a) 70%,
716
+ transparent
717
+ );
718
+ border: 1px solid var(--viking-border-subtle, var(--border));
719
+ border-radius: 4px;
720
+ color: var(--viking-accent-strong, var(--viking-teal-400));
721
+ font-size: 0.84em;
722
+ padding: 1px 5px;
723
+ }
724
+
725
+ /* ── Schemas — flat index, no gray pill buttons ────────────────────────────── */
726
+ .swagger-ui section.models {
727
+ margin-top: var(--viking-space-3, 24px);
728
+ border: none;
729
+ border-top: 1px solid var(--viking-border, var(--border));
730
+ border-radius: 0;
731
+ overflow: visible;
732
+ }
733
+
734
+ .swagger-ui section.models h4 {
735
+ margin: 0;
736
+ padding: var(--viking-space-3, 24px) 0 var(--viking-space-1, 8px);
737
+ border: none;
738
+ background: transparent;
739
+ font-size: 0.72rem;
740
+ font-weight: 700;
741
+ letter-spacing: 0.1em;
742
+ text-transform: uppercase;
743
+ color: var(--viking-text-muted, var(--text-muted));
744
+ }
745
+
746
+ .swagger-ui section.models.is-open h4 {
747
+ border-bottom: none;
748
+ }
749
+
750
+ .swagger-ui section.models .model-container {
751
+ margin: 0;
752
+ padding: 0;
753
+ }
754
+
755
+ .swagger-ui section.models .model-box {
756
+ display: flex;
757
+ align-items: center;
758
+ flex-wrap: wrap;
759
+ gap: var(--viking-space-1, 8px);
760
+ margin: 0;
761
+ padding: var(--viking-space-2, 16px) 0;
762
+ border: none;
763
+ border-bottom: 1px solid var(--viking-border-subtle, var(--border));
764
+ border-radius: 0;
765
+ background: transparent;
766
+ }
767
+
768
+ .swagger-ui section.models .model-box:last-child {
769
+ border-bottom: none;
770
+ }
771
+
772
+ .swagger-ui section.models .model-box-control {
773
+ flex: 1 1 auto;
774
+ min-width: 0;
775
+ display: flex;
776
+ align-items: center;
777
+ gap: var(--viking-space-1, 8px);
778
+ margin: 0;
779
+ padding: 0;
780
+ border: none;
781
+ background: transparent !important;
782
+ box-shadow: none !important;
783
+ text-align: left;
784
+ }
785
+
786
+ .swagger-ui section.models .model-box .btn,
787
+ .swagger-ui section.models .model-toggle,
788
+ .swagger-ui section.models button.model-box-control {
789
+ background: transparent !important;
790
+ border: none !important;
791
+ box-shadow: none !important;
792
+ min-height: auto;
793
+ padding: 0;
794
+ text-transform: none;
795
+ letter-spacing: normal;
796
+ font-weight: 600;
797
+ color: var(--viking-text, var(--text-color));
798
+ }
799
+
800
+ .swagger-ui section.models .model-box > .btn {
801
+ margin-left: auto;
802
+ font-size: 0.75rem;
803
+ font-weight: 500;
804
+ color: var(--viking-text-muted, var(--text-muted));
805
+ }
806
+
807
+ .swagger-ui section.models .model-title,
808
+ .swagger-ui section.models .model-title__text {
809
+ color: var(--viking-text, var(--text-color));
810
+ font-family: var(--viking-font-family-mono, "JetBrains Mono", monospace);
811
+ font-size: 0.88rem;
812
+ font-weight: 600;
813
+ }
814
+
815
+ .swagger-ui section.models .model .prop-type,
816
+ .swagger-ui section.models .model .prop-format {
817
+ margin-left: auto;
818
+ color: var(--viking-accent, var(--color-primary));
819
+ font-size: 0.78rem;
820
+ }
821
+
822
+ .swagger-ui .model .property-row {
823
+ border-bottom: 1px solid var(--viking-border-subtle, var(--border));
824
+ }
825
+
826
+ /* ── Modal (Authorize) ───────────────────────────────────────────────────── */
827
+ .swagger-ui .dialog-ux .modal-ux {
828
+ background: color-mix(in srgb, #0a0a0a 72%, transparent);
829
+ }
830
+
831
+ .swagger-ui .dialog-ux .modal-ux-content {
832
+ background: var(--viking-surface, var(--card-bg));
833
+ border: 1px solid var(--viking-border-strong, var(--border));
834
+ border-radius: var(--viking-radius-lg, 12px);
835
+ box-shadow: var(--viking-shadow-lg, var(--shadow-lg));
836
+ padding: var(--viking-space-3, 24px);
837
+ }
838
+
839
+ .swagger-ui .dialog-ux .modal-ux-header {
840
+ border-bottom: 1px solid var(--viking-border, var(--border));
841
+ padding: 0 0 var(--viking-space-2, 16px);
842
+ margin-bottom: var(--viking-space-2, 16px);
843
+ }
844
+
845
+ .swagger-ui .dialog-ux .modal-ux-header h3 {
846
+ font-size: 1.1rem;
847
+ font-weight: 700;
848
+ color: var(--viking-text, var(--text-color));
849
+ }
850
+
851
+ .swagger-ui .auth-container h4,
852
+ .swagger-ui .auth-container label {
853
+ color: var(--viking-text, var(--text-color));
854
+ }
855
+
856
+ /* ── Loading / errors ────────────────────────────────────────────────────── */
857
+ .swagger-ui .loading-container .loading {
858
+ color: var(--viking-text-muted, var(--text-muted));
859
+ }
860
+
861
+ .swagger-ui .errors-wrapper {
862
+ background: color-mix(in srgb, var(--viking-crimson-500) 10%, transparent);
863
+ border: 1px solid
864
+ color-mix(in srgb, var(--viking-crimson-500) 30%, transparent);
865
+ border-radius: var(--viking-radius, 8px);
866
+ color: var(--viking-crimson-400);
867
+ margin: var(--viking-space-2, 16px) 0;
868
+ padding: var(--viking-space-2, 16px);
869
+ }
870
+
871
+ html[data-theme="light"] .swagger-ui .highlight-code,
872
+ html[data-theme="light"] .swagger-ui .microlight,
873
+ html[data-theme="light"] .swagger-ui pre,
874
+ html[data-theme="light"] .swagger-ui .opblock-body pre.microlight {
875
+ background: var(--viking-charcoal-900, #111111) !important;
876
+ }
877
+
878
+ html[data-theme="light"] .swagger-ui .opblock .opblock-section-header {
879
+ background: color-mix(
880
+ in srgb,
881
+ var(--viking-surface-alt, var(--charcoal-800)) 35%,
882
+ var(--viking-surface, var(--card-bg))
883
+ ) !important;
884
+ }
885
+
886
+ html[data-theme="light"] .swagger-ui .filter-container input[type="text"] {
887
+ background: var(--viking-surface, var(--card-bg));
888
+ color: var(--viking-text, var(--text-color));
889
+ }
890
+
891
+ html[data-theme="light"] .swagger-ui .scheme-container select,
892
+ html[data-theme="light"] .swagger-ui .opblock-body select,
893
+ html[data-theme="light"] .swagger-ui select {
894
+ background: var(--viking-surface, var(--card-bg));
895
+ color: var(--viking-text, var(--text-color));
896
+ }
897
+
898
+ @media (prefers-reduced-motion: reduce) {
899
+ .swagger-ui .btn:hover {
900
+ transform: none;
901
+ }
902
+ }
903
+
904
+ @media (min-width: 641px) {
905
+ .backend-swagger-hero {
906
+ padding: var(--viking-space-3) var(--viking-space-3) var(--viking-space-2);
907
+ }
908
+
909
+ .backend-swagger-toolbar {
910
+ padding: var(--viking-space-2) var(--viking-space-3);
911
+ }
912
+
913
+ .backend-swagger-panel #swagger-ui {
914
+ padding: 0 var(--viking-space-3) var(--viking-space-3);
915
+ }
916
+
917
+ .swagger-ui .opblock .opblock-summary {
918
+ flex-wrap: nowrap;
919
+ gap: 0;
920
+ }
921
+ }