@dataengineeringformachinelearning/viking-ui 4.0.6 → 4.1.1

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.
@@ -1,2322 +0,0 @@
1
- @charset "UTF-8";
2
- /*! Viking-UI Interactive Components — framework-agnostic CSS primitives.
3
- * Load after design-tokens.css for Astro, Django, or any HTML project.
4
- * Build: npm run build:viking-ui:package */
5
- @font-face {
6
- font-family: "Inter";
7
- font-style: normal;
8
- font-weight: 100 900;
9
- font-display: swap;
10
- src: url("fonts/inter/InterVariable.woff2") format("woff2 supports variations"), url("fonts/inter/InterVariable.woff2") format("woff2-variations");
11
- }
12
- @font-face {
13
- font-family: "Inter";
14
- font-style: italic;
15
- font-weight: 100 900;
16
- font-display: swap;
17
- src: url("fonts/inter/InterVariable-Italic.woff2") format("woff2 supports variations"), url("fonts/inter/InterVariable-Italic.woff2") format("woff2-variations");
18
- }
19
- :root {
20
- /* Touch targets — WCAG 2.5.5 / mobile-first minimum hit area */
21
- --viking-touch-target-min: 44px;
22
- --viking-touch-target-comfort: 44px;
23
- /* Interactive state */
24
- --viking-state-disabled-opacity: 0.48;
25
- --viking-state-hover-lift: -1px;
26
- --viking-state-active-scale: 0.985;
27
- --viking-state-press-inset: inset 0 1px 2px rgba(0, 0, 0, 0.18);
28
- --viking-shadow-hover: var(
29
- --shadow-hover,
30
- 0 8px 16px rgba(0, 0, 0, 0.14),
31
- 0 4px 8px rgba(0, 0, 0, 0.1),
32
- inset 0 1px 0 rgba(255, 255, 255, 0.06)
33
- );
34
- --viking-surface-highlight: inset 0 1px 0 rgba(255, 255, 255, 0.06);
35
- --viking-surface-recipe: var(--viking-surface) linear-gradient(180deg, rgba(255, 255, 255, 0.03) 0%, transparent 100%);
36
- --viking-transition-interactive:
37
- color var(--viking-duration) var(--viking-ease-default),
38
- background-color var(--viking-duration) var(--viking-ease-default),
39
- border-color var(--viking-duration) var(--viking-ease-default),
40
- box-shadow var(--viking-duration) var(--viking-ease-default),
41
- transform var(--viking-duration-fast) var(--viking-ease-default),
42
- opacity var(--viking-duration-fast) var(--viking-ease-default);
43
- --viking-transition-transform: transform var(--viking-duration-fast) var(--viking-ease-default);
44
- }
45
-
46
- /* Shared keyframes */
47
- @keyframes viking-fade-in {
48
- from {
49
- opacity: 0;
50
- }
51
- to {
52
- opacity: 1;
53
- }
54
- }
55
- @keyframes viking-slide-up {
56
- from {
57
- opacity: 0;
58
- transform: translateY(8px);
59
- }
60
- to {
61
- opacity: 1;
62
- transform: translateY(0);
63
- }
64
- }
65
- @keyframes viking-slide-in-right {
66
- from {
67
- opacity: 0;
68
- transform: translateX(16px);
69
- }
70
- to {
71
- opacity: 1;
72
- transform: translateX(0);
73
- }
74
- }
75
- @keyframes viking-modal-in {
76
- from {
77
- opacity: 0;
78
- transform: translateY(12px) scale(0.98);
79
- }
80
- to {
81
- opacity: 1;
82
- transform: translateY(0) scale(1);
83
- }
84
- }
85
- @keyframes viking-backdrop-in {
86
- from {
87
- opacity: 0;
88
- }
89
- to {
90
- opacity: 1;
91
- }
92
- }
93
- @keyframes viking-shimmer {
94
- from {
95
- background-position: 120% 0;
96
- }
97
- to {
98
- background-position: -80% 0;
99
- }
100
- }
101
- @keyframes viking-pulse-soft {
102
- 0%, 100% {
103
- opacity: 1;
104
- }
105
- 50% {
106
- opacity: 0.72;
107
- }
108
- }
109
- @keyframes viking-shake {
110
- 0%, 100% {
111
- transform: translateX(0);
112
- }
113
- 20%, 60% {
114
- transform: translateX(-4px);
115
- }
116
- 40%, 80% {
117
- transform: translateX(4px);
118
- }
119
- }
120
- @keyframes viking-tooltip-in {
121
- from {
122
- opacity: 0;
123
- transform: translateY(4px) scale(0.96);
124
- }
125
- to {
126
- opacity: 1;
127
- transform: translateY(0) scale(1);
128
- }
129
- }
130
- @keyframes viking-spin {
131
- to {
132
- transform: rotate(360deg);
133
- }
134
- }
135
- /* Shared focus-ring utilities — use on interactive hosts without duplicating tokens */
136
- .viking-focus-ring:focus-visible {
137
- outline: var(--viking-ring-width) solid var(--viking-ring);
138
- outline-offset: var(--viking-ring-offset);
139
- }
140
-
141
- .viking-focus-ring-inset:focus-visible {
142
- outline: var(--viking-ring-width) solid var(--viking-ring);
143
- outline-offset: calc(var(--viking-ring-offset) * -1);
144
- }
145
-
146
- /* Expand visual-only controls to touch-friendly hit areas without changing layout */
147
- .viking-touch-target {
148
- position: relative;
149
- min-width: var(--viking-touch-target-min);
150
- min-height: var(--viking-touch-target-min);
151
- }
152
-
153
- .viking-touch-target::before {
154
- content: "";
155
- position: absolute;
156
- inset: 50%;
157
- width: max(100%, var(--viking-touch-target-min));
158
- height: max(100%, var(--viking-touch-target-min));
159
- transform: translate(-50%, -50%);
160
- }
161
-
162
- @media (min-width: 768px) {
163
- :root {
164
- --viking-touch-target-comfort: 36px;
165
- }
166
- }
167
- @media (prefers-reduced-motion: reduce) {
168
- *,
169
- ::before,
170
- ::after {
171
- animation-duration: 0.01ms !important;
172
- animation-iteration-count: 1 !important;
173
- transition-duration: 0.01ms !important;
174
- }
175
- }
176
- .viking-heading {
177
- margin: 0;
178
- font-weight: var(--viking-font-weight-bold);
179
- letter-spacing: var(--viking-letter-spacing-tight);
180
- line-height: var(--viking-line-height-tight);
181
- color: var(--viking-text);
182
- }
183
-
184
- .viking-heading-xl {
185
- font-size: clamp(var(--viking-font-size-2xl), 4vw, var(--viking-font-size-4xl));
186
- }
187
-
188
- .viking-heading-lg {
189
- font-size: var(--viking-font-size-xl);
190
- }
191
-
192
- .viking-heading-sm {
193
- font-size: var(--viking-font-size-lg);
194
- }
195
-
196
- .viking-text {
197
- margin: 0;
198
- line-height: var(--viking-line-height-relaxed);
199
- color: var(--viking-text);
200
- }
201
-
202
- .viking-text-muted {
203
- margin: 0;
204
- line-height: var(--viking-line-height-relaxed);
205
- color: var(--viking-text-muted);
206
- max-width: var(--viking-content-readable-max-width, 48rem);
207
- }
208
-
209
- .viking-label {
210
- display: block;
211
- font-size: var(--viking-font-size-xs);
212
- font-weight: var(--viking-font-weight-semibold);
213
- letter-spacing: var(--viking-letter-spacing-caps);
214
- text-transform: uppercase;
215
- color: var(--viking-text-muted);
216
- }
217
-
218
- .viking-metric {
219
- display: block;
220
- font-size: var(--viking-font-size-2xl);
221
- font-weight: var(--viking-font-weight-bold);
222
- font-variant-numeric: tabular-nums;
223
- color: var(--viking-text);
224
- }
225
-
226
- .viking-badge {
227
- display: inline-flex;
228
- align-items: center;
229
- gap: var(--viking-space-half);
230
- padding: var(--viking-space-half) var(--viking-space-1);
231
- font-size: var(--viking-font-size-xs);
232
- font-weight: var(--viking-font-weight-semibold);
233
- letter-spacing: var(--viking-letter-spacing-wide);
234
- border-radius: var(--viking-radius-pill);
235
- border: 1px solid var(--viking-border);
236
- background: var(--viking-surface-alt);
237
- color: var(--viking-text);
238
- white-space: nowrap;
239
- }
240
-
241
- .viking-badge-accent {
242
- background: var(--viking-accent);
243
- border-color: color-mix(in srgb, var(--viking-accent) 80%, var(--viking-black));
244
- color: var(--viking-accent-content);
245
- }
246
-
247
- .viking-badge-success {
248
- background: color-mix(in srgb, var(--viking-success) 18%, var(--viking-surface));
249
- border-color: color-mix(in srgb, var(--viking-success) 40%, transparent);
250
- color: var(--viking-success);
251
- }
252
-
253
- .viking-badge-warning {
254
- background: color-mix(in srgb, var(--viking-warning) 18%, var(--viking-surface));
255
- border-color: color-mix(in srgb, var(--viking-warning) 40%, transparent);
256
- color: var(--viking-warning);
257
- }
258
-
259
- .viking-badge-danger {
260
- background: color-mix(in srgb, var(--viking-danger) 18%, var(--viking-surface));
261
- border-color: color-mix(in srgb, var(--viking-danger) 40%, transparent);
262
- color: var(--viking-danger);
263
- }
264
-
265
- .viking-badge-subtle {
266
- background: var(--viking-surface-alt);
267
- color: var(--viking-text-muted);
268
- font-size: var(--viking-font-size-2xs);
269
- }
270
-
271
- .viking-callout-static {
272
- padding: var(--viking-space-2);
273
- border-radius: var(--viking-radius);
274
- border: 1px solid var(--viking-border);
275
- background: var(--viking-surface-alt);
276
- }
277
-
278
- .viking-callout-static strong {
279
- display: block;
280
- margin-bottom: var(--viking-space-half);
281
- }
282
-
283
- .viking-callout-static p {
284
- margin: 0;
285
- font-size: var(--viking-font-size-sm);
286
- color: var(--viking-text-muted);
287
- }
288
-
289
- .viking-callout-info {
290
- border-color: color-mix(in srgb, var(--viking-accent) 35%, var(--viking-border));
291
- background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface));
292
- }
293
-
294
- .viking-callout-warning {
295
- border-color: color-mix(in srgb, var(--viking-warning) 35%, var(--viking-border));
296
- background: color-mix(in srgb, var(--viking-warning) 8%, var(--viking-surface));
297
- }
298
-
299
- .viking-callout-success {
300
- border-color: color-mix(in srgb, var(--viking-success) 35%, var(--viking-border));
301
- background: color-mix(in srgb, var(--viking-success) 8%, var(--viking-surface));
302
- }
303
-
304
- .viking-callout-danger {
305
- border-color: color-mix(in srgb, var(--viking-danger) 35%, var(--viking-border));
306
- background: color-mix(in srgb, var(--viking-danger) 8%, var(--viking-surface));
307
- }
308
-
309
- .viking-progress {
310
- width: 100%;
311
- height: var(--viking-space-1);
312
- border-radius: var(--viking-radius-pill);
313
- background: var(--viking-surface-alt);
314
- overflow: hidden;
315
- }
316
-
317
- .viking-progress-bar {
318
- height: 100%;
319
- background: var(--viking-accent);
320
- border-radius: inherit;
321
- transition: width var(--viking-duration) var(--viking-ease-out);
322
- }
323
-
324
- .viking-progress-indeterminate .viking-progress-bar {
325
- width: 40%;
326
- animation: viking-progress-slide 1.2s ease-in-out infinite;
327
- }
328
-
329
- @keyframes viking-progress-slide {
330
- 0% {
331
- transform: translateX(-100%);
332
- }
333
- 100% {
334
- transform: translateX(350%);
335
- }
336
- }
337
- .viking-skeleton-row {
338
- display: flex;
339
- align-items: center;
340
- gap: var(--viking-space-2);
341
- }
342
-
343
- .viking-skeleton-lines {
344
- flex: 1;
345
- display: flex;
346
- flex-direction: column;
347
- gap: var(--viking-space-1);
348
- }
349
-
350
- .viking-skeleton {
351
- background: linear-gradient(90deg, var(--viking-surface-alt) 25%, var(--viking-surface-raised) 50%, var(--viking-surface-alt) 75%);
352
- background-size: 200% 100%;
353
- animation: viking-shimmer 1.5s ease-in-out infinite;
354
- border-radius: var(--viking-radius-sm);
355
- }
356
-
357
- .viking-skeleton-circle {
358
- width: 3rem;
359
- height: 3rem;
360
- border-radius: 50%;
361
- flex-shrink: 0;
362
- }
363
-
364
- .viking-skeleton-line {
365
- height: 0.75rem;
366
- }
367
-
368
- .viking-skeleton-line-short {
369
- width: 60%;
370
- }
371
-
372
- @keyframes viking-shimmer {
373
- 0% {
374
- background-position: 200% 0;
375
- }
376
- 100% {
377
- background-position: -200% 0;
378
- }
379
- }
380
- .viking-checkbox-label {
381
- display: inline-flex;
382
- align-items: center;
383
- gap: var(--viking-space-1);
384
- cursor: pointer;
385
- font-size: var(--viking-font-size-sm);
386
- min-height: var(--viking-touch-target-min, 44px);
387
- }
388
-
389
- .viking-checkbox-label input {
390
- width: 1.125rem;
391
- height: 1.125rem;
392
- accent-color: var(--viking-accent);
393
- }
394
-
395
- .viking-select-native {
396
- width: 100%;
397
- min-height: var(--viking-control-height, 40px);
398
- padding: 0 var(--viking-space-2);
399
- border: 1px solid var(--viking-border);
400
- border-radius: var(--viking-radius);
401
- background: var(--viking-surface);
402
- color: var(--viking-text);
403
- font-family: inherit;
404
- font-size: var(--viking-font-size-sm);
405
- }
406
-
407
- .viking-select-native:focus-visible {
408
- outline: var(--viking-ring-width, 2px) solid var(--viking-ring);
409
- outline-offset: var(--viking-ring-offset, 2px);
410
- }
411
-
412
- .viking-table-wrap {
413
- overflow-x: auto;
414
- width: 100%;
415
- }
416
-
417
- .viking-table {
418
- width: 100%;
419
- border-collapse: collapse;
420
- font-size: var(--viking-font-size-sm);
421
- }
422
-
423
- .viking-table th,
424
- .viking-table td {
425
- padding: var(--viking-space-1) var(--viking-space-2);
426
- text-align: left;
427
- border-bottom: 1px solid var(--viking-border);
428
- }
429
-
430
- .viking-table th {
431
- color: var(--viking-text-muted);
432
- font-weight: var(--viking-font-weight-semibold);
433
- }
434
-
435
- .viking-tabs {
436
- display: inline-flex;
437
- gap: var(--viking-space-half);
438
- padding: var(--viking-space-half);
439
- border: 1px solid var(--viking-border);
440
- border-radius: var(--viking-radius);
441
- background: var(--viking-surface-alt);
442
- }
443
-
444
- .viking-tab {
445
- padding: var(--viking-space-1) var(--viking-space-2);
446
- border: none;
447
- border-radius: var(--viking-radius-sm);
448
- background: transparent;
449
- color: var(--viking-text-muted);
450
- font-size: var(--viking-font-size-sm);
451
- font-weight: var(--viking-font-weight-medium);
452
- cursor: pointer;
453
- min-height: var(--viking-touch-target-min, 44px);
454
- }
455
-
456
- .viking-tab-active {
457
- background: var(--viking-surface);
458
- color: var(--viking-text);
459
- box-shadow: var(--viking-shadow-xs);
460
- }
461
-
462
- .viking-tab:focus-visible {
463
- outline: var(--viking-ring-width, 2px) solid var(--viking-ring);
464
- outline-offset: var(--viking-ring-offset, 2px);
465
- }
466
-
467
- .viking-page-header-static {
468
- display: flex;
469
- flex-direction: column;
470
- gap: var(--viking-space-2);
471
- padding: var(--viking-space-4);
472
- border: 1px solid var(--viking-border);
473
- border-radius: var(--viking-radius-lg);
474
- background: var(--viking-surface-recipe, var(--viking-surface));
475
- box-shadow: var(--viking-shadow-md);
476
- }
477
-
478
- .viking-kbd-static {
479
- display: inline-block;
480
- font-family: inherit;
481
- font-size: calc(var(--viking-font-size) * 0.75);
482
- padding: 2px 6px;
483
- border-radius: calc(var(--viking-radius) / 2);
484
- border: 1px solid var(--viking-border);
485
- background: var(--viking-surface-alt);
486
- }
487
-
488
- .viking-divider {
489
- display: flex;
490
- align-items: center;
491
- gap: var(--viking-space-2);
492
- color: var(--viking-text-muted);
493
- font-size: var(--viking-font-size-xs);
494
- }
495
-
496
- .viking-divider::before,
497
- .viking-divider::after {
498
- content: "";
499
- flex: 1;
500
- height: 1px;
501
- background: var(--viking-border);
502
- }
503
-
504
- .viking-demo-row {
505
- display: flex;
506
- flex-wrap: wrap;
507
- align-items: center;
508
- gap: var(--viking-space-2);
509
- }
510
-
511
- .viking-demo-row-stack {
512
- flex-direction: column;
513
- align-items: stretch;
514
- }
515
-
516
- .viking-breadcrumbs-static {
517
- font-size: var(--viking-font-size-sm);
518
- }
519
-
520
- .viking-breadcrumbs-list {
521
- display: flex;
522
- flex-wrap: wrap;
523
- align-items: center;
524
- gap: var(--viking-space-1);
525
- margin: 0;
526
- padding: 0;
527
- list-style: none;
528
- }
529
-
530
- .viking-breadcrumbs-list li:not(:last-child)::after {
531
- content: "/";
532
- margin-left: var(--viking-space-1);
533
- color: var(--viking-text-muted);
534
- }
535
-
536
- .viking-breadcrumbs-list a {
537
- color: var(--viking-accent);
538
- text-decoration: none;
539
- }
540
-
541
- .viking-breadcrumbs-list a:hover {
542
- text-decoration: underline;
543
- }
544
-
545
- .viking-pagination-static {
546
- display: flex;
547
- flex-wrap: wrap;
548
- align-items: center;
549
- gap: var(--viking-space-2);
550
- }
551
-
552
- .viking-switch-static {
553
- display: inline-flex;
554
- align-items: center;
555
- gap: var(--viking-space-1);
556
- cursor: pointer;
557
- font-size: var(--viking-font-size-sm);
558
- min-height: var(--viking-touch-target-min, 44px);
559
- }
560
-
561
- .viking-switch-static input {
562
- width: 2.5rem;
563
- height: 1.375rem;
564
- accent-color: var(--viking-accent);
565
- }
566
-
567
- .viking-kanban-demo {
568
- display: flex;
569
- flex-wrap: wrap;
570
- gap: var(--viking-space-2);
571
- }
572
-
573
- .viking-kanban-col {
574
- flex: 1;
575
- min-width: 10rem;
576
- padding: var(--viking-space-2);
577
- display: flex;
578
- flex-direction: column;
579
- gap: var(--viking-space-1);
580
- }
581
-
582
- .viking-kanban-card {
583
- padding: var(--viking-space-1) var(--viking-space-2);
584
- border: 1px solid var(--viking-border);
585
- border-radius: var(--viking-radius-sm);
586
- background: var(--viking-surface-alt);
587
- font-size: var(--viking-font-size-sm);
588
- }
589
-
590
- .viking-uptime-demo {
591
- display: flex;
592
- flex-direction: column;
593
- gap: var(--viking-space-1);
594
- max-width: 20rem;
595
- }
596
-
597
- .viking-uptime-segments {
598
- display: flex;
599
- gap: 2px;
600
- height: var(--viking-space-2);
601
- }
602
-
603
- .viking-uptime-seg {
604
- flex: 1;
605
- border-radius: 1px;
606
- min-width: 4px;
607
- }
608
-
609
- .viking-uptime-up {
610
- background: var(--viking-success);
611
- }
612
-
613
- .viking-uptime-degraded {
614
- background: var(--viking-warning);
615
- }
616
-
617
- .viking-uptime-down {
618
- background: var(--viking-danger);
619
- }
620
-
621
- .viking-sheet-demo {
622
- max-width: 20rem;
623
- padding: var(--viking-space-2);
624
- }
625
-
626
- .viking-wizard-demo {
627
- max-width: 24rem;
628
- padding: var(--viking-space-2);
629
- display: flex;
630
- flex-direction: column;
631
- gap: var(--viking-space-2);
632
- }
633
-
634
- @media (prefers-reduced-motion: reduce) {
635
- .viking-skeleton,
636
- .viking-progress-indeterminate .viking-progress-bar {
637
- animation: none;
638
- }
639
- }
640
- .viking-hud-panel {
641
- display: flex;
642
- flex-direction: column;
643
- gap: var(--viking-space-1);
644
- padding: var(--viking-card-padding);
645
- border: 1px solid var(--viking-border-strong);
646
- border-radius: var(--viking-radius-lg);
647
- background: var(--viking-surface-recipe, var(--viking-surface));
648
- box-shadow: var(--viking-shadow-md);
649
- max-width: 20rem;
650
- }
651
-
652
- .viking-avatar-static {
653
- display: inline-flex;
654
- align-items: center;
655
- justify-content: center;
656
- width: 2.5rem;
657
- height: 2.5rem;
658
- border-radius: 50%;
659
- border: 1px solid var(--viking-border);
660
- background: var(--viking-surface-alt);
661
- font-size: var(--viking-font-size-xs);
662
- font-weight: var(--viking-font-weight-bold);
663
- color: var(--viking-text);
664
- }
665
-
666
- .viking-avatar-accent {
667
- background: var(--viking-accent-soft);
668
- border-color: var(--viking-accent);
669
- color: var(--viking-accent);
670
- }
671
-
672
- .viking-empty-state-static {
673
- display: flex;
674
- flex-direction: column;
675
- align-items: center;
676
- gap: var(--viking-space-2);
677
- padding: var(--viking-space-4);
678
- text-align: center;
679
- border: 1px dashed var(--viking-border);
680
- border-radius: var(--viking-radius-lg);
681
- max-width: 24rem;
682
- }
683
-
684
- .viking-spinner-static {
685
- display: inline-block;
686
- width: 1.25rem;
687
- height: 1.25rem;
688
- border: 2px solid var(--viking-border);
689
- border-top-color: var(--viking-accent);
690
- border-radius: 50%;
691
- animation: viking-spinner-spin 0.8s linear infinite;
692
- }
693
-
694
- @keyframes viking-spinner-spin {
695
- to {
696
- transform: rotate(360deg);
697
- }
698
- }
699
- .viking-loading-overlay-demo {
700
- display: flex;
701
- flex-direction: column;
702
- align-items: center;
703
- gap: var(--viking-space-2);
704
- padding: var(--viking-space-3);
705
- max-width: 20rem;
706
- }
707
-
708
- .viking-separator-static {
709
- border: 0;
710
- border-top: 1px solid var(--viking-border);
711
- margin: var(--viking-space-1) 0;
712
- }
713
-
714
- .viking-icon-badge-static {
715
- display: inline-flex;
716
- align-items: center;
717
- justify-content: center;
718
- width: var(--viking-icon-badge-size, var(--viking-space-6));
719
- height: var(--viking-icon-badge-size, var(--viking-space-6));
720
- padding: var(--viking-icon-badge-padding, var(--viking-space-half));
721
- box-sizing: border-box;
722
- border-radius: var(--viking-radius-lg);
723
- border: none;
724
- background: var(--viking-accent-soft);
725
- color: var(--viking-accent-strong);
726
- box-shadow: var(--viking-shadow-sm);
727
- font-size: var(--viking-font-size-sm);
728
- }
729
-
730
- .viking-textarea-static {
731
- width: 100%;
732
- min-height: 5rem;
733
- padding: var(--viking-space-2);
734
- border: 1px solid var(--viking-border);
735
- border-radius: var(--viking-radius);
736
- background: var(--viking-surface);
737
- color: var(--viking-text);
738
- font-family: inherit;
739
- font-size: var(--viking-font-size-sm);
740
- resize: vertical;
741
- }
742
-
743
- .viking-textarea-static:focus-visible {
744
- outline: var(--viking-ring-width) solid var(--viking-ring);
745
- outline-offset: var(--viking-ring-offset);
746
- }
747
-
748
- .viking-radio-static {
749
- border: none;
750
- padding: 0;
751
- margin: 0;
752
- display: flex;
753
- flex-direction: column;
754
- gap: var(--viking-space-1);
755
- }
756
-
757
- .viking-radio-static label {
758
- display: inline-flex;
759
- align-items: center;
760
- gap: var(--viking-space-1);
761
- font-size: var(--viking-font-size-sm);
762
- min-height: var(--viking-touch-target-min, 44px);
763
- }
764
-
765
- .viking-slider-static {
766
- width: 100%;
767
- accent-color: var(--viking-accent);
768
- }
769
-
770
- .viking-otp-static {
771
- display: flex;
772
- gap: var(--viking-space-1);
773
- }
774
-
775
- .viking-otp-static input {
776
- width: 2.5rem;
777
- height: 2.5rem;
778
- text-align: center;
779
- border: 1px solid var(--viking-border);
780
- border-radius: var(--viking-radius);
781
- background: var(--viking-surface);
782
- color: var(--viking-text);
783
- font-size: var(--viking-font-size-lg);
784
- }
785
-
786
- .viking-file-upload-static {
787
- display: flex;
788
- flex-direction: column;
789
- align-items: center;
790
- gap: var(--viking-space-2);
791
- text-align: center;
792
- }
793
-
794
- .viking-pillbox-static {
795
- display: flex;
796
- flex-wrap: wrap;
797
- align-items: center;
798
- gap: var(--viking-space-1);
799
- padding: var(--viking-space-1);
800
- border: 1px solid var(--viking-border);
801
- border-radius: var(--viking-radius);
802
- background: var(--viking-surface-alt);
803
- }
804
-
805
- .viking-gauge-demo,
806
- .viking-ring-gauge-demo {
807
- display: flex;
808
- flex-direction: column;
809
- align-items: center;
810
- gap: var(--viking-space-1);
811
- }
812
-
813
- .viking-chart-empty-static {
814
- text-align: center;
815
- }
816
-
817
- .viking-status-metric-row {
818
- display: flex;
819
- flex-wrap: wrap;
820
- align-items: center;
821
- gap: var(--viking-space-2);
822
- padding: var(--viking-space-2);
823
- border: 1px solid var(--viking-border);
824
- border-radius: var(--viking-radius);
825
- background: var(--viking-surface-alt);
826
- }
827
-
828
- .viking-bar-static {
829
- display: flex;
830
- flex-direction: column;
831
- gap: var(--viking-space-half);
832
- max-width: 16rem;
833
- }
834
-
835
- .viking-bar-track {
836
- width: 100%;
837
- height: var(--viking-space-1);
838
- border-radius: var(--viking-radius-pill);
839
- background: var(--viking-surface-alt);
840
- overflow: hidden;
841
- }
842
-
843
- .viking-bar-fill {
844
- height: 100%;
845
- background: var(--viking-accent);
846
- border-radius: inherit;
847
- }
848
-
849
- .viking-nav-menu-static,
850
- .viking-sidebar-nav-static {
851
- display: flex;
852
- flex-direction: column;
853
- gap: var(--viking-space-half);
854
- max-width: 14rem;
855
- }
856
-
857
- .viking-nav-item-static,
858
- .viking-sidebar-nav-item {
859
- display: block;
860
- padding: var(--viking-space-1) var(--viking-space-2);
861
- border-radius: var(--viking-radius-sm);
862
- color: var(--viking-text-muted);
863
- text-decoration: none;
864
- font-size: var(--viking-font-size-sm);
865
- }
866
-
867
- .viking-nav-item-static.is-active,
868
- .viking-sidebar-nav-item.is-active {
869
- background: var(--viking-accent-soft);
870
- color: var(--viking-accent);
871
- font-weight: var(--viking-font-weight-semibold);
872
- }
873
-
874
- .viking-menubar-static {
875
- display: inline-flex;
876
- gap: var(--viking-space-half);
877
- padding: var(--viking-space-half);
878
- border: 1px solid var(--viking-border);
879
- border-radius: var(--viking-radius);
880
- background: var(--viking-surface-alt);
881
- }
882
-
883
- .viking-command-static {
884
- display: flex;
885
- flex-direction: column;
886
- gap: var(--viking-space-1);
887
- }
888
-
889
- .viking-accordion-static {
890
- padding: var(--viking-space-2);
891
- border: 1px solid var(--viking-border);
892
- border-radius: var(--viking-radius);
893
- background: var(--viking-surface-alt);
894
- }
895
-
896
- .viking-accordion-static summary {
897
- cursor: pointer;
898
- list-style: none;
899
- }
900
-
901
- .viking-accordion-static summary::-webkit-details-marker {
902
- display: none;
903
- }
904
-
905
- .viking-timeline-static {
906
- margin: 0;
907
- padding: 0 0 0 var(--viking-space-3);
908
- border-left: 2px solid var(--viking-border);
909
- list-style: none;
910
- display: flex;
911
- flex-direction: column;
912
- gap: var(--viking-space-2);
913
- }
914
-
915
- .viking-toggle-group-static {
916
- display: inline-flex;
917
- gap: var(--viking-space-half);
918
- padding: var(--viking-space-half);
919
- border: 1px solid var(--viking-border);
920
- border-radius: var(--viking-radius);
921
- background: var(--viking-surface-alt);
922
- }
923
-
924
- .viking-fab-static {
925
- position: absolute;
926
- right: var(--viking-space-2);
927
- bottom: var(--viking-space-2);
928
- display: inline-flex;
929
- align-items: center;
930
- justify-content: center;
931
- width: 3rem;
932
- height: 3rem;
933
- border: 1px solid var(--viking-border-strong);
934
- border-radius: 50%;
935
- background: var(--viking-accent);
936
- color: var(--viking-accent-content);
937
- font-size: var(--viking-font-size-xl);
938
- cursor: pointer;
939
- box-shadow: var(--viking-shadow-md);
940
- }
941
-
942
- .viking-scroll-area-static {
943
- max-height: 8rem;
944
- overflow-y: auto;
945
- padding: var(--viking-space-2);
946
- border: 1px solid var(--viking-border);
947
- border-radius: var(--viking-radius);
948
- background: var(--viking-surface-alt);
949
- }
950
-
951
- .viking-button-group-static {
952
- display: inline-flex;
953
- flex-wrap: wrap;
954
- gap: var(--viking-space-half);
955
- }
956
-
957
- .viking-whitepaper-cta-static {
958
- display: flex;
959
- flex-direction: column;
960
- gap: var(--viking-space-2);
961
- max-width: 24rem;
962
- }
963
-
964
- .viking-search-result-static {
965
- display: flex;
966
- flex-direction: column;
967
- gap: var(--viking-space-half);
968
- padding: var(--viking-space-1) var(--viking-space-2);
969
- border-radius: var(--viking-radius);
970
- border: 1px solid transparent;
971
- text-decoration: none;
972
- color: inherit;
973
- transition: var(--viking-transition-interactive);
974
- }
975
-
976
- .viking-search-result-static:hover {
977
- background: color-mix(in srgb, var(--viking-accent) 5%, transparent);
978
- border-color: color-mix(in srgb, var(--viking-accent) 30%, transparent);
979
- }
980
-
981
- .viking-search-result-title {
982
- font-size: var(--viking-font-size-sm);
983
- font-weight: var(--viking-font-weight-semibold);
984
- color: var(--viking-text);
985
- }
986
-
987
- .viking-search-result-snippet {
988
- font-size: var(--viking-font-size-xs);
989
- color: var(--viking-text-muted);
990
- }
991
-
992
- @media (prefers-reduced-motion: reduce) {
993
- .viking-spinner-static {
994
- animation: none;
995
- }
996
- }
997
- .viking-btn,
998
- a.viking-btn,
999
- button.viking-btn {
1000
- --viking-btn-depth-shadow: var(--viking-shadow-sm);
1001
- --viking-btn-hover-shadow: var(--viking-shadow-hover);
1002
- --viking-btn-press-shadow:
1003
- inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent),
1004
- var(--viking-shadow-xs);
1005
- font-family: var(--viking-font-family);
1006
- font-size: var(--viking-font-size-ui);
1007
- font-weight: var(--viking-font-weight-semibold);
1008
- letter-spacing: var(--viking-letter-spacing-wide);
1009
- line-height: var(--viking-line-height-snug);
1010
- display: inline-flex;
1011
- align-items: center;
1012
- justify-content: center;
1013
- gap: var(--viking-space-1-5);
1014
- min-height: var(--viking-control-height);
1015
- padding: var(--viking-space-half) var(--viking-control-padding-x);
1016
- border-radius: var(--viking-radius-md);
1017
- border: 1px solid transparent;
1018
- cursor: pointer;
1019
- text-decoration: none;
1020
- transition: var(--viking-transition-interactive);
1021
- width: auto;
1022
- min-width: var(--viking-btn-min-width, 120px);
1023
- white-space: nowrap;
1024
- position: relative;
1025
- background-clip: padding-box;
1026
- isolation: isolate;
1027
- user-select: none;
1028
- -webkit-tap-highlight-color: transparent;
1029
- overflow: hidden;
1030
- box-shadow: var(--viking-btn-depth-shadow);
1031
- }
1032
- .viking-btn:focus-visible,
1033
- a.viking-btn:focus-visible,
1034
- button.viking-btn:focus-visible {
1035
- outline: var(--viking-ring-width) solid var(--viking-ring);
1036
- outline-offset: var(--viking-ring-offset);
1037
- z-index: 1;
1038
- }
1039
- .viking-btn::before,
1040
- a.viking-btn::before,
1041
- button.viking-btn::before {
1042
- content: "";
1043
- position: absolute;
1044
- inset: 1px 1px auto 1px;
1045
- height: 1px;
1046
- background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 45%, transparent), transparent);
1047
- pointer-events: none;
1048
- opacity: 0.88;
1049
- transition: var(--viking-transition-interactive);
1050
- }
1051
- .viking-btn::after,
1052
- a.viking-btn::after,
1053
- button.viking-btn::after {
1054
- content: "";
1055
- position: absolute;
1056
- inset: auto 0 0 0;
1057
- height: 1px;
1058
- background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 18%, transparent), transparent);
1059
- pointer-events: none;
1060
- opacity: 0.45;
1061
- transition: var(--viking-transition-interactive);
1062
- }
1063
- .viking-btn:disabled, .viking-btn[aria-busy=true],
1064
- a.viking-btn:disabled,
1065
- a.viking-btn[aria-busy=true],
1066
- button.viking-btn:disabled,
1067
- button.viking-btn[aria-busy=true] {
1068
- opacity: var(--viking-state-disabled-opacity);
1069
- cursor: not-allowed;
1070
- transform: none !important;
1071
- box-shadow: none !important;
1072
- }
1073
- .viking-btn[aria-busy=true]::before, .viking-btn[aria-busy=true] .viking-btn-label,
1074
- a.viking-btn[aria-busy=true]::before,
1075
- a.viking-btn[aria-busy=true] .viking-btn-label,
1076
- button.viking-btn[aria-busy=true]::before,
1077
- button.viking-btn[aria-busy=true] .viking-btn-label {
1078
- opacity: 0.78;
1079
- transform: translateY(1px);
1080
- }
1081
- .viking-btn[aria-busy=true],
1082
- a.viking-btn[aria-busy=true],
1083
- button.viking-btn[aria-busy=true] {
1084
- cursor: wait;
1085
- }
1086
- .viking-btn viking-icon,
1087
- .viking-btn .viking-icon,
1088
- .viking-btn [data-viking-icon],
1089
- a.viking-btn viking-icon,
1090
- a.viking-btn .viking-icon,
1091
- a.viking-btn [data-viking-icon],
1092
- button.viking-btn viking-icon,
1093
- button.viking-btn .viking-icon,
1094
- button.viking-btn [data-viking-icon] {
1095
- flex-shrink: 0;
1096
- display: inline-flex;
1097
- align-items: center;
1098
- justify-content: center;
1099
- width: var(--viking-icon-size-md);
1100
- height: var(--viking-icon-size-md);
1101
- line-height: 1;
1102
- pointer-events: none;
1103
- flex: 0 0 auto;
1104
- margin-block: calc(var(--viking-space-half) * -1);
1105
- }
1106
- .viking-btn .viking-btn-label,
1107
- a.viking-btn .viking-btn-label,
1108
- button.viking-btn .viking-btn-label {
1109
- display: inline-flex;
1110
- align-items: center;
1111
- gap: var(--viking-space-1);
1112
- line-height: 1.2;
1113
- min-width: 0;
1114
- justify-content: center;
1115
- text-align: center;
1116
- white-space: nowrap;
1117
- }
1118
-
1119
- .viking-btn-primary,
1120
- a.viking-btn-primary,
1121
- button.viking-btn-primary {
1122
- --viking-btn-depth-shadow: var(--viking-shadow-sm);
1123
- --viking-btn-hover-shadow: var(--viking-shadow-hover);
1124
- --viking-btn-press-shadow:
1125
- inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent),
1126
- var(--viking-shadow-xs);
1127
- font-family: var(--viking-font-family);
1128
- font-size: var(--viking-font-size-ui);
1129
- font-weight: var(--viking-font-weight-semibold);
1130
- letter-spacing: var(--viking-letter-spacing-wide);
1131
- line-height: var(--viking-line-height-snug);
1132
- display: inline-flex;
1133
- align-items: center;
1134
- justify-content: center;
1135
- gap: var(--viking-space-1-5);
1136
- min-height: var(--viking-control-height);
1137
- padding: var(--viking-space-half) var(--viking-control-padding-x);
1138
- border-radius: var(--viking-radius-md);
1139
- border: 1px solid transparent;
1140
- cursor: pointer;
1141
- text-decoration: none;
1142
- transition: var(--viking-transition-interactive);
1143
- width: auto;
1144
- min-width: var(--viking-btn-min-width, 120px);
1145
- white-space: nowrap;
1146
- position: relative;
1147
- background-clip: padding-box;
1148
- isolation: isolate;
1149
- user-select: none;
1150
- -webkit-tap-highlight-color: transparent;
1151
- overflow: hidden;
1152
- box-shadow: var(--viking-btn-depth-shadow);
1153
- }
1154
- .viking-btn-primary:focus-visible,
1155
- a.viking-btn-primary:focus-visible,
1156
- button.viking-btn-primary:focus-visible {
1157
- outline: var(--viking-ring-width) solid var(--viking-ring);
1158
- outline-offset: var(--viking-ring-offset);
1159
- z-index: 1;
1160
- }
1161
- .viking-btn-primary::before,
1162
- a.viking-btn-primary::before,
1163
- button.viking-btn-primary::before {
1164
- content: "";
1165
- position: absolute;
1166
- inset: 1px 1px auto 1px;
1167
- height: 1px;
1168
- background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 45%, transparent), transparent);
1169
- pointer-events: none;
1170
- opacity: 0.88;
1171
- transition: var(--viking-transition-interactive);
1172
- }
1173
- .viking-btn-primary::after,
1174
- a.viking-btn-primary::after,
1175
- button.viking-btn-primary::after {
1176
- content: "";
1177
- position: absolute;
1178
- inset: auto 0 0 0;
1179
- height: 1px;
1180
- background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 18%, transparent), transparent);
1181
- pointer-events: none;
1182
- opacity: 0.45;
1183
- transition: var(--viking-transition-interactive);
1184
- }
1185
- .viking-btn-primary:disabled, .viking-btn-primary[aria-busy=true],
1186
- a.viking-btn-primary:disabled,
1187
- a.viking-btn-primary[aria-busy=true],
1188
- button.viking-btn-primary:disabled,
1189
- button.viking-btn-primary[aria-busy=true] {
1190
- opacity: var(--viking-state-disabled-opacity);
1191
- cursor: not-allowed;
1192
- transform: none !important;
1193
- box-shadow: none !important;
1194
- }
1195
- .viking-btn-primary[aria-busy=true]::before, .viking-btn-primary[aria-busy=true] .viking-btn-label,
1196
- a.viking-btn-primary[aria-busy=true]::before,
1197
- a.viking-btn-primary[aria-busy=true] .viking-btn-label,
1198
- button.viking-btn-primary[aria-busy=true]::before,
1199
- button.viking-btn-primary[aria-busy=true] .viking-btn-label {
1200
- opacity: 0.78;
1201
- transform: translateY(1px);
1202
- }
1203
- .viking-btn-primary[aria-busy=true],
1204
- a.viking-btn-primary[aria-busy=true],
1205
- button.viking-btn-primary[aria-busy=true] {
1206
- cursor: wait;
1207
- }
1208
- .viking-btn-primary viking-icon,
1209
- .viking-btn-primary .viking-icon,
1210
- .viking-btn-primary [data-viking-icon],
1211
- a.viking-btn-primary viking-icon,
1212
- a.viking-btn-primary .viking-icon,
1213
- a.viking-btn-primary [data-viking-icon],
1214
- button.viking-btn-primary viking-icon,
1215
- button.viking-btn-primary .viking-icon,
1216
- button.viking-btn-primary [data-viking-icon] {
1217
- flex-shrink: 0;
1218
- display: inline-flex;
1219
- align-items: center;
1220
- justify-content: center;
1221
- width: var(--viking-icon-size-md);
1222
- height: var(--viking-icon-size-md);
1223
- line-height: 1;
1224
- pointer-events: none;
1225
- flex: 0 0 auto;
1226
- margin-block: calc(var(--viking-space-half) * -1);
1227
- }
1228
- .viking-btn-primary .viking-btn-label,
1229
- a.viking-btn-primary .viking-btn-label,
1230
- button.viking-btn-primary .viking-btn-label {
1231
- display: inline-flex;
1232
- align-items: center;
1233
- gap: var(--viking-space-1);
1234
- line-height: 1.2;
1235
- min-width: 0;
1236
- justify-content: center;
1237
- text-align: center;
1238
- white-space: nowrap;
1239
- }
1240
- .viking-btn-primary,
1241
- a.viking-btn-primary,
1242
- button.viking-btn-primary {
1243
- background: var(--viking-accent);
1244
- color: var(--viking-accent-content);
1245
- border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
1246
- box-shadow: var(--viking-btn-depth-shadow), inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 12%, transparent);
1247
- }
1248
- .viking-btn-primary:hover:not(:disabled):not([aria-busy=true]),
1249
- a.viking-btn-primary:hover:not(:disabled):not([aria-busy=true]),
1250
- button.viking-btn-primary:hover:not(:disabled):not([aria-busy=true]) {
1251
- background: var(--viking-accent-hover);
1252
- border-color: var(--viking-accent-hover);
1253
- color: var(--viking-accent-content);
1254
- box-shadow: var(--viking-btn-hover-shadow);
1255
- transform: translateY(var(--viking-state-hover-lift));
1256
- }
1257
- .viking-btn-primary:active:not(:disabled):not([aria-busy=true]),
1258
- a.viking-btn-primary:active:not(:disabled):not([aria-busy=true]),
1259
- button.viking-btn-primary:active:not(:disabled):not([aria-busy=true]) {
1260
- transform: translateY(0) scale(var(--viking-state-active-scale));
1261
- border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
1262
- box-shadow: var(--viking-btn-press-shadow);
1263
- }
1264
-
1265
- .viking-btn-secondary,
1266
- a.viking-btn-secondary,
1267
- button.viking-btn-secondary {
1268
- --viking-btn-depth-shadow: var(--viking-shadow-sm);
1269
- --viking-btn-hover-shadow: var(--viking-shadow-hover);
1270
- --viking-btn-press-shadow:
1271
- inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent),
1272
- var(--viking-shadow-xs);
1273
- font-family: var(--viking-font-family);
1274
- font-size: var(--viking-font-size-ui);
1275
- font-weight: var(--viking-font-weight-semibold);
1276
- letter-spacing: var(--viking-letter-spacing-wide);
1277
- line-height: var(--viking-line-height-snug);
1278
- display: inline-flex;
1279
- align-items: center;
1280
- justify-content: center;
1281
- gap: var(--viking-space-1-5);
1282
- min-height: var(--viking-control-height);
1283
- padding: var(--viking-space-half) var(--viking-control-padding-x);
1284
- border-radius: var(--viking-radius-md);
1285
- border: 1px solid transparent;
1286
- cursor: pointer;
1287
- text-decoration: none;
1288
- transition: var(--viking-transition-interactive);
1289
- width: auto;
1290
- min-width: var(--viking-btn-min-width, 120px);
1291
- white-space: nowrap;
1292
- position: relative;
1293
- background-clip: padding-box;
1294
- isolation: isolate;
1295
- user-select: none;
1296
- -webkit-tap-highlight-color: transparent;
1297
- overflow: hidden;
1298
- box-shadow: var(--viking-btn-depth-shadow);
1299
- }
1300
- .viking-btn-secondary:focus-visible,
1301
- a.viking-btn-secondary:focus-visible,
1302
- button.viking-btn-secondary:focus-visible {
1303
- outline: var(--viking-ring-width) solid var(--viking-ring);
1304
- outline-offset: var(--viking-ring-offset);
1305
- z-index: 1;
1306
- }
1307
- .viking-btn-secondary::before,
1308
- a.viking-btn-secondary::before,
1309
- button.viking-btn-secondary::before {
1310
- content: "";
1311
- position: absolute;
1312
- inset: 1px 1px auto 1px;
1313
- height: 1px;
1314
- background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 45%, transparent), transparent);
1315
- pointer-events: none;
1316
- opacity: 0.88;
1317
- transition: var(--viking-transition-interactive);
1318
- }
1319
- .viking-btn-secondary::after,
1320
- a.viking-btn-secondary::after,
1321
- button.viking-btn-secondary::after {
1322
- content: "";
1323
- position: absolute;
1324
- inset: auto 0 0 0;
1325
- height: 1px;
1326
- background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 18%, transparent), transparent);
1327
- pointer-events: none;
1328
- opacity: 0.45;
1329
- transition: var(--viking-transition-interactive);
1330
- }
1331
- .viking-btn-secondary:disabled, .viking-btn-secondary[aria-busy=true],
1332
- a.viking-btn-secondary:disabled,
1333
- a.viking-btn-secondary[aria-busy=true],
1334
- button.viking-btn-secondary:disabled,
1335
- button.viking-btn-secondary[aria-busy=true] {
1336
- opacity: var(--viking-state-disabled-opacity);
1337
- cursor: not-allowed;
1338
- transform: none !important;
1339
- box-shadow: none !important;
1340
- }
1341
- .viking-btn-secondary[aria-busy=true]::before, .viking-btn-secondary[aria-busy=true] .viking-btn-label,
1342
- a.viking-btn-secondary[aria-busy=true]::before,
1343
- a.viking-btn-secondary[aria-busy=true] .viking-btn-label,
1344
- button.viking-btn-secondary[aria-busy=true]::before,
1345
- button.viking-btn-secondary[aria-busy=true] .viking-btn-label {
1346
- opacity: 0.78;
1347
- transform: translateY(1px);
1348
- }
1349
- .viking-btn-secondary[aria-busy=true],
1350
- a.viking-btn-secondary[aria-busy=true],
1351
- button.viking-btn-secondary[aria-busy=true] {
1352
- cursor: wait;
1353
- }
1354
- .viking-btn-secondary viking-icon,
1355
- .viking-btn-secondary .viking-icon,
1356
- .viking-btn-secondary [data-viking-icon],
1357
- a.viking-btn-secondary viking-icon,
1358
- a.viking-btn-secondary .viking-icon,
1359
- a.viking-btn-secondary [data-viking-icon],
1360
- button.viking-btn-secondary viking-icon,
1361
- button.viking-btn-secondary .viking-icon,
1362
- button.viking-btn-secondary [data-viking-icon] {
1363
- flex-shrink: 0;
1364
- display: inline-flex;
1365
- align-items: center;
1366
- justify-content: center;
1367
- width: var(--viking-icon-size-md);
1368
- height: var(--viking-icon-size-md);
1369
- line-height: 1;
1370
- pointer-events: none;
1371
- flex: 0 0 auto;
1372
- margin-block: calc(var(--viking-space-half) * -1);
1373
- }
1374
- .viking-btn-secondary .viking-btn-label,
1375
- a.viking-btn-secondary .viking-btn-label,
1376
- button.viking-btn-secondary .viking-btn-label {
1377
- display: inline-flex;
1378
- align-items: center;
1379
- gap: var(--viking-space-1);
1380
- line-height: 1.2;
1381
- min-width: 0;
1382
- justify-content: center;
1383
- text-align: center;
1384
- white-space: nowrap;
1385
- }
1386
- .viking-btn-secondary,
1387
- a.viking-btn-secondary,
1388
- button.viking-btn-secondary {
1389
- background: var(--viking-accent-secondary);
1390
- color: var(--viking-accent-secondary-content);
1391
- border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
1392
- box-shadow: var(--viking-btn-depth-shadow), inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 10%, transparent);
1393
- }
1394
- .viking-btn-secondary:hover:not(:disabled):not([aria-busy=true]),
1395
- a.viking-btn-secondary:hover:not(:disabled):not([aria-busy=true]),
1396
- button.viking-btn-secondary:hover:not(:disabled):not([aria-busy=true]) {
1397
- background: var(--viking-accent-secondary-hover);
1398
- border-color: var(--viking-accent-secondary-hover);
1399
- color: var(--viking-accent-secondary-content);
1400
- box-shadow: var(--viking-btn-hover-shadow);
1401
- transform: translateY(var(--viking-state-hover-lift));
1402
- }
1403
- .viking-btn-secondary:active:not(:disabled):not([aria-busy=true]),
1404
- a.viking-btn-secondary:active:not(:disabled):not([aria-busy=true]),
1405
- button.viking-btn-secondary:active:not(:disabled):not([aria-busy=true]) {
1406
- transform: translateY(0) scale(var(--viking-state-active-scale));
1407
- border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
1408
- box-shadow: var(--viking-btn-press-shadow);
1409
- }
1410
-
1411
- .viking-btn-outline,
1412
- a.viking-btn-outline,
1413
- button.viking-btn-outline {
1414
- --viking-btn-depth-shadow: var(--viking-shadow-sm);
1415
- --viking-btn-hover-shadow: var(--viking-shadow-hover);
1416
- --viking-btn-press-shadow:
1417
- inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent),
1418
- var(--viking-shadow-xs);
1419
- font-family: var(--viking-font-family);
1420
- font-size: var(--viking-font-size-ui);
1421
- font-weight: var(--viking-font-weight-semibold);
1422
- letter-spacing: var(--viking-letter-spacing-wide);
1423
- line-height: var(--viking-line-height-snug);
1424
- display: inline-flex;
1425
- align-items: center;
1426
- justify-content: center;
1427
- gap: var(--viking-space-1-5);
1428
- min-height: var(--viking-control-height);
1429
- padding: var(--viking-space-half) var(--viking-control-padding-x);
1430
- border-radius: var(--viking-radius-md);
1431
- border: 1px solid transparent;
1432
- cursor: pointer;
1433
- text-decoration: none;
1434
- transition: var(--viking-transition-interactive);
1435
- width: auto;
1436
- min-width: var(--viking-btn-min-width, 120px);
1437
- white-space: nowrap;
1438
- position: relative;
1439
- background-clip: padding-box;
1440
- isolation: isolate;
1441
- user-select: none;
1442
- -webkit-tap-highlight-color: transparent;
1443
- overflow: hidden;
1444
- box-shadow: var(--viking-btn-depth-shadow);
1445
- }
1446
- .viking-btn-outline:focus-visible,
1447
- a.viking-btn-outline:focus-visible,
1448
- button.viking-btn-outline:focus-visible {
1449
- outline: var(--viking-ring-width) solid var(--viking-ring);
1450
- outline-offset: var(--viking-ring-offset);
1451
- z-index: 1;
1452
- }
1453
- .viking-btn-outline::before,
1454
- a.viking-btn-outline::before,
1455
- button.viking-btn-outline::before {
1456
- content: "";
1457
- position: absolute;
1458
- inset: 1px 1px auto 1px;
1459
- height: 1px;
1460
- background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 45%, transparent), transparent);
1461
- pointer-events: none;
1462
- opacity: 0.88;
1463
- transition: var(--viking-transition-interactive);
1464
- }
1465
- .viking-btn-outline::after,
1466
- a.viking-btn-outline::after,
1467
- button.viking-btn-outline::after {
1468
- content: "";
1469
- position: absolute;
1470
- inset: auto 0 0 0;
1471
- height: 1px;
1472
- background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 18%, transparent), transparent);
1473
- pointer-events: none;
1474
- opacity: 0.45;
1475
- transition: var(--viking-transition-interactive);
1476
- }
1477
- .viking-btn-outline:disabled, .viking-btn-outline[aria-busy=true],
1478
- a.viking-btn-outline:disabled,
1479
- a.viking-btn-outline[aria-busy=true],
1480
- button.viking-btn-outline:disabled,
1481
- button.viking-btn-outline[aria-busy=true] {
1482
- opacity: var(--viking-state-disabled-opacity);
1483
- cursor: not-allowed;
1484
- transform: none !important;
1485
- box-shadow: none !important;
1486
- }
1487
- .viking-btn-outline[aria-busy=true]::before, .viking-btn-outline[aria-busy=true] .viking-btn-label,
1488
- a.viking-btn-outline[aria-busy=true]::before,
1489
- a.viking-btn-outline[aria-busy=true] .viking-btn-label,
1490
- button.viking-btn-outline[aria-busy=true]::before,
1491
- button.viking-btn-outline[aria-busy=true] .viking-btn-label {
1492
- opacity: 0.78;
1493
- transform: translateY(1px);
1494
- }
1495
- .viking-btn-outline[aria-busy=true],
1496
- a.viking-btn-outline[aria-busy=true],
1497
- button.viking-btn-outline[aria-busy=true] {
1498
- cursor: wait;
1499
- }
1500
- .viking-btn-outline viking-icon,
1501
- .viking-btn-outline .viking-icon,
1502
- .viking-btn-outline [data-viking-icon],
1503
- a.viking-btn-outline viking-icon,
1504
- a.viking-btn-outline .viking-icon,
1505
- a.viking-btn-outline [data-viking-icon],
1506
- button.viking-btn-outline viking-icon,
1507
- button.viking-btn-outline .viking-icon,
1508
- button.viking-btn-outline [data-viking-icon] {
1509
- flex-shrink: 0;
1510
- display: inline-flex;
1511
- align-items: center;
1512
- justify-content: center;
1513
- width: var(--viking-icon-size-md);
1514
- height: var(--viking-icon-size-md);
1515
- line-height: 1;
1516
- pointer-events: none;
1517
- flex: 0 0 auto;
1518
- margin-block: calc(var(--viking-space-half) * -1);
1519
- }
1520
- .viking-btn-outline .viking-btn-label,
1521
- a.viking-btn-outline .viking-btn-label,
1522
- button.viking-btn-outline .viking-btn-label {
1523
- display: inline-flex;
1524
- align-items: center;
1525
- gap: var(--viking-space-1);
1526
- line-height: 1.2;
1527
- min-width: 0;
1528
- justify-content: center;
1529
- text-align: center;
1530
- white-space: nowrap;
1531
- }
1532
- .viking-btn-outline,
1533
- a.viking-btn-outline,
1534
- button.viking-btn-outline {
1535
- background: var(--viking-surface);
1536
- color: var(--viking-text);
1537
- border-color: var(--viking-border-strong);
1538
- box-shadow: var(--viking-btn-depth-shadow);
1539
- }
1540
- .viking-btn-outline:hover:not(:disabled):not([aria-busy=true]),
1541
- a.viking-btn-outline:hover:not(:disabled):not([aria-busy=true]),
1542
- button.viking-btn-outline:hover:not(:disabled):not([aria-busy=true]) {
1543
- background: color-mix(in srgb, var(--viking-accent) 5%, var(--viking-surface-alt));
1544
- border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border-strong));
1545
- color: var(--viking-text);
1546
- box-shadow: var(--viking-btn-hover-shadow);
1547
- transform: translateY(var(--viking-state-hover-lift));
1548
- }
1549
- .viking-btn-outline:active:not(:disabled):not([aria-busy=true]),
1550
- a.viking-btn-outline:active:not(:disabled):not([aria-busy=true]),
1551
- button.viking-btn-outline:active:not(:disabled):not([aria-busy=true]) {
1552
- transform: translateY(0) scale(var(--viking-state-active-scale));
1553
- border-color: var(--viking-border-strong);
1554
- box-shadow: var(--viking-btn-press-shadow);
1555
- }
1556
-
1557
- .viking-btn-danger,
1558
- a.viking-btn-danger,
1559
- button.viking-btn-danger {
1560
- --viking-btn-depth-shadow: var(--viking-shadow-sm);
1561
- --viking-btn-hover-shadow: var(--viking-shadow-hover);
1562
- --viking-btn-press-shadow:
1563
- inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent),
1564
- var(--viking-shadow-xs);
1565
- font-family: var(--viking-font-family);
1566
- font-size: var(--viking-font-size-ui);
1567
- font-weight: var(--viking-font-weight-semibold);
1568
- letter-spacing: var(--viking-letter-spacing-wide);
1569
- line-height: var(--viking-line-height-snug);
1570
- display: inline-flex;
1571
- align-items: center;
1572
- justify-content: center;
1573
- gap: var(--viking-space-1-5);
1574
- min-height: var(--viking-control-height);
1575
- padding: var(--viking-space-half) var(--viking-control-padding-x);
1576
- border-radius: var(--viking-radius-md);
1577
- border: 1px solid transparent;
1578
- cursor: pointer;
1579
- text-decoration: none;
1580
- transition: var(--viking-transition-interactive);
1581
- width: auto;
1582
- min-width: var(--viking-btn-min-width, 120px);
1583
- white-space: nowrap;
1584
- position: relative;
1585
- background-clip: padding-box;
1586
- isolation: isolate;
1587
- user-select: none;
1588
- -webkit-tap-highlight-color: transparent;
1589
- overflow: hidden;
1590
- box-shadow: var(--viking-btn-depth-shadow);
1591
- }
1592
- .viking-btn-danger:focus-visible,
1593
- a.viking-btn-danger:focus-visible,
1594
- button.viking-btn-danger:focus-visible {
1595
- outline: var(--viking-ring-width) solid var(--viking-ring);
1596
- outline-offset: var(--viking-ring-offset);
1597
- z-index: 1;
1598
- }
1599
- .viking-btn-danger::before,
1600
- a.viking-btn-danger::before,
1601
- button.viking-btn-danger::before {
1602
- content: "";
1603
- position: absolute;
1604
- inset: 1px 1px auto 1px;
1605
- height: 1px;
1606
- background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 45%, transparent), transparent);
1607
- pointer-events: none;
1608
- opacity: 0.88;
1609
- transition: var(--viking-transition-interactive);
1610
- }
1611
- .viking-btn-danger::after,
1612
- a.viking-btn-danger::after,
1613
- button.viking-btn-danger::after {
1614
- content: "";
1615
- position: absolute;
1616
- inset: auto 0 0 0;
1617
- height: 1px;
1618
- background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 18%, transparent), transparent);
1619
- pointer-events: none;
1620
- opacity: 0.45;
1621
- transition: var(--viking-transition-interactive);
1622
- }
1623
- .viking-btn-danger:disabled, .viking-btn-danger[aria-busy=true],
1624
- a.viking-btn-danger:disabled,
1625
- a.viking-btn-danger[aria-busy=true],
1626
- button.viking-btn-danger:disabled,
1627
- button.viking-btn-danger[aria-busy=true] {
1628
- opacity: var(--viking-state-disabled-opacity);
1629
- cursor: not-allowed;
1630
- transform: none !important;
1631
- box-shadow: none !important;
1632
- }
1633
- .viking-btn-danger[aria-busy=true]::before, .viking-btn-danger[aria-busy=true] .viking-btn-label,
1634
- a.viking-btn-danger[aria-busy=true]::before,
1635
- a.viking-btn-danger[aria-busy=true] .viking-btn-label,
1636
- button.viking-btn-danger[aria-busy=true]::before,
1637
- button.viking-btn-danger[aria-busy=true] .viking-btn-label {
1638
- opacity: 0.78;
1639
- transform: translateY(1px);
1640
- }
1641
- .viking-btn-danger[aria-busy=true],
1642
- a.viking-btn-danger[aria-busy=true],
1643
- button.viking-btn-danger[aria-busy=true] {
1644
- cursor: wait;
1645
- }
1646
- .viking-btn-danger viking-icon,
1647
- .viking-btn-danger .viking-icon,
1648
- .viking-btn-danger [data-viking-icon],
1649
- a.viking-btn-danger viking-icon,
1650
- a.viking-btn-danger .viking-icon,
1651
- a.viking-btn-danger [data-viking-icon],
1652
- button.viking-btn-danger viking-icon,
1653
- button.viking-btn-danger .viking-icon,
1654
- button.viking-btn-danger [data-viking-icon] {
1655
- flex-shrink: 0;
1656
- display: inline-flex;
1657
- align-items: center;
1658
- justify-content: center;
1659
- width: var(--viking-icon-size-md);
1660
- height: var(--viking-icon-size-md);
1661
- line-height: 1;
1662
- pointer-events: none;
1663
- flex: 0 0 auto;
1664
- margin-block: calc(var(--viking-space-half) * -1);
1665
- }
1666
- .viking-btn-danger .viking-btn-label,
1667
- a.viking-btn-danger .viking-btn-label,
1668
- button.viking-btn-danger .viking-btn-label {
1669
- display: inline-flex;
1670
- align-items: center;
1671
- gap: var(--viking-space-1);
1672
- line-height: 1.2;
1673
- min-width: 0;
1674
- justify-content: center;
1675
- text-align: center;
1676
- white-space: nowrap;
1677
- }
1678
- .viking-btn-danger,
1679
- a.viking-btn-danger,
1680
- button.viking-btn-danger {
1681
- background: var(--viking-danger);
1682
- color: var(--viking-on-danger);
1683
- border-color: color-mix(in srgb, var(--viking-danger) 85%, var(--viking-black));
1684
- box-shadow: var(--viking-btn-depth-shadow), inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 10%, transparent);
1685
- }
1686
- .viking-btn-danger:hover:not(:disabled):not([aria-busy=true]),
1687
- a.viking-btn-danger:hover:not(:disabled):not([aria-busy=true]),
1688
- button.viking-btn-danger:hover:not(:disabled):not([aria-busy=true]) {
1689
- background: color-mix(in srgb, var(--viking-danger) 88%, var(--viking-white));
1690
- border-color: color-mix(in srgb, var(--viking-danger) 92%, var(--viking-white));
1691
- color: var(--viking-on-danger);
1692
- box-shadow: var(--viking-btn-hover-shadow);
1693
- transform: translateY(var(--viking-state-hover-lift));
1694
- }
1695
- .viking-btn-danger:active:not(:disabled):not([aria-busy=true]),
1696
- a.viking-btn-danger:active:not(:disabled):not([aria-busy=true]),
1697
- button.viking-btn-danger:active:not(:disabled):not([aria-busy=true]) {
1698
- transform: translateY(0) scale(var(--viking-state-active-scale));
1699
- border-color: color-mix(in srgb, var(--viking-danger) 72%, var(--viking-black));
1700
- background: color-mix(in srgb, var(--viking-danger) 84%, var(--viking-black));
1701
- box-shadow: var(--viking-btn-press-shadow);
1702
- }
1703
-
1704
- .viking-btn-ghost,
1705
- a.viking-btn-ghost,
1706
- button.viking-btn-ghost {
1707
- --viking-btn-depth-shadow: var(--viking-shadow-sm);
1708
- --viking-btn-hover-shadow: var(--viking-shadow-hover);
1709
- --viking-btn-press-shadow:
1710
- inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent),
1711
- var(--viking-shadow-xs);
1712
- font-family: var(--viking-font-family);
1713
- font-size: var(--viking-font-size-ui);
1714
- font-weight: var(--viking-font-weight-semibold);
1715
- letter-spacing: var(--viking-letter-spacing-wide);
1716
- line-height: var(--viking-line-height-snug);
1717
- display: inline-flex;
1718
- align-items: center;
1719
- justify-content: center;
1720
- gap: var(--viking-space-1-5);
1721
- min-height: var(--viking-control-height);
1722
- padding: var(--viking-space-half) var(--viking-control-padding-x);
1723
- border-radius: var(--viking-radius-md);
1724
- border: 1px solid transparent;
1725
- cursor: pointer;
1726
- text-decoration: none;
1727
- transition: var(--viking-transition-interactive);
1728
- width: auto;
1729
- min-width: var(--viking-btn-min-width, 120px);
1730
- white-space: nowrap;
1731
- position: relative;
1732
- background-clip: padding-box;
1733
- isolation: isolate;
1734
- user-select: none;
1735
- -webkit-tap-highlight-color: transparent;
1736
- overflow: hidden;
1737
- box-shadow: var(--viking-btn-depth-shadow);
1738
- }
1739
- .viking-btn-ghost:focus-visible,
1740
- a.viking-btn-ghost:focus-visible,
1741
- button.viking-btn-ghost:focus-visible {
1742
- outline: var(--viking-ring-width) solid var(--viking-ring);
1743
- outline-offset: var(--viking-ring-offset);
1744
- z-index: 1;
1745
- }
1746
- .viking-btn-ghost::before,
1747
- a.viking-btn-ghost::before,
1748
- button.viking-btn-ghost::before {
1749
- content: "";
1750
- position: absolute;
1751
- inset: 1px 1px auto 1px;
1752
- height: 1px;
1753
- background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 45%, transparent), transparent);
1754
- pointer-events: none;
1755
- opacity: 0.88;
1756
- transition: var(--viking-transition-interactive);
1757
- }
1758
- .viking-btn-ghost::after,
1759
- a.viking-btn-ghost::after,
1760
- button.viking-btn-ghost::after {
1761
- content: "";
1762
- position: absolute;
1763
- inset: auto 0 0 0;
1764
- height: 1px;
1765
- background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 18%, transparent), transparent);
1766
- pointer-events: none;
1767
- opacity: 0.45;
1768
- transition: var(--viking-transition-interactive);
1769
- }
1770
- .viking-btn-ghost:disabled, .viking-btn-ghost[aria-busy=true],
1771
- a.viking-btn-ghost:disabled,
1772
- a.viking-btn-ghost[aria-busy=true],
1773
- button.viking-btn-ghost:disabled,
1774
- button.viking-btn-ghost[aria-busy=true] {
1775
- opacity: var(--viking-state-disabled-opacity);
1776
- cursor: not-allowed;
1777
- transform: none !important;
1778
- box-shadow: none !important;
1779
- }
1780
- .viking-btn-ghost[aria-busy=true]::before, .viking-btn-ghost[aria-busy=true] .viking-btn-label,
1781
- a.viking-btn-ghost[aria-busy=true]::before,
1782
- a.viking-btn-ghost[aria-busy=true] .viking-btn-label,
1783
- button.viking-btn-ghost[aria-busy=true]::before,
1784
- button.viking-btn-ghost[aria-busy=true] .viking-btn-label {
1785
- opacity: 0.78;
1786
- transform: translateY(1px);
1787
- }
1788
- .viking-btn-ghost[aria-busy=true],
1789
- a.viking-btn-ghost[aria-busy=true],
1790
- button.viking-btn-ghost[aria-busy=true] {
1791
- cursor: wait;
1792
- }
1793
- .viking-btn-ghost viking-icon,
1794
- .viking-btn-ghost .viking-icon,
1795
- .viking-btn-ghost [data-viking-icon],
1796
- a.viking-btn-ghost viking-icon,
1797
- a.viking-btn-ghost .viking-icon,
1798
- a.viking-btn-ghost [data-viking-icon],
1799
- button.viking-btn-ghost viking-icon,
1800
- button.viking-btn-ghost .viking-icon,
1801
- button.viking-btn-ghost [data-viking-icon] {
1802
- flex-shrink: 0;
1803
- display: inline-flex;
1804
- align-items: center;
1805
- justify-content: center;
1806
- width: var(--viking-icon-size-md);
1807
- height: var(--viking-icon-size-md);
1808
- line-height: 1;
1809
- pointer-events: none;
1810
- flex: 0 0 auto;
1811
- margin-block: calc(var(--viking-space-half) * -1);
1812
- }
1813
- .viking-btn-ghost .viking-btn-label,
1814
- a.viking-btn-ghost .viking-btn-label,
1815
- button.viking-btn-ghost .viking-btn-label {
1816
- display: inline-flex;
1817
- align-items: center;
1818
- gap: var(--viking-space-1);
1819
- line-height: 1.2;
1820
- min-width: 0;
1821
- justify-content: center;
1822
- text-align: center;
1823
- white-space: nowrap;
1824
- }
1825
- .viking-btn-ghost,
1826
- a.viking-btn-ghost,
1827
- button.viking-btn-ghost {
1828
- background: transparent;
1829
- color: var(--viking-text);
1830
- min-width: auto;
1831
- box-shadow: none;
1832
- border-color: transparent;
1833
- }
1834
- .viking-btn-ghost:hover:not(:disabled):not([aria-busy=true]),
1835
- a.viking-btn-ghost:hover:not(:disabled):not([aria-busy=true]),
1836
- button.viking-btn-ghost:hover:not(:disabled):not([aria-busy=true]) {
1837
- background: var(--viking-accent-soft);
1838
- color: var(--viking-accent-strong);
1839
- border-color: var(--viking-border-subtle);
1840
- transform: translateY(var(--viking-state-hover-lift));
1841
- }
1842
- .viking-btn-ghost:active:not(:disabled):not([aria-busy=true]),
1843
- a.viking-btn-ghost:active:not(:disabled):not([aria-busy=true]),
1844
- button.viking-btn-ghost:active:not(:disabled):not([aria-busy=true]) {
1845
- transform: translateY(0) scale(var(--viking-state-active-scale));
1846
- background: var(--viking-accent-soft);
1847
- color: var(--viking-accent-strong);
1848
- }
1849
-
1850
- .viking-btn-subtle,
1851
- a.viking-btn-subtle,
1852
- button.viking-btn-subtle {
1853
- --viking-btn-depth-shadow: var(--viking-shadow-sm);
1854
- --viking-btn-hover-shadow: var(--viking-shadow-hover);
1855
- --viking-btn-press-shadow:
1856
- inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent),
1857
- var(--viking-shadow-xs);
1858
- font-family: var(--viking-font-family);
1859
- font-size: var(--viking-font-size-ui);
1860
- font-weight: var(--viking-font-weight-semibold);
1861
- letter-spacing: var(--viking-letter-spacing-wide);
1862
- line-height: var(--viking-line-height-snug);
1863
- display: inline-flex;
1864
- align-items: center;
1865
- justify-content: center;
1866
- gap: var(--viking-space-1-5);
1867
- min-height: var(--viking-control-height);
1868
- padding: var(--viking-space-half) var(--viking-control-padding-x);
1869
- border-radius: var(--viking-radius-md);
1870
- border: 1px solid transparent;
1871
- cursor: pointer;
1872
- text-decoration: none;
1873
- transition: var(--viking-transition-interactive);
1874
- width: auto;
1875
- min-width: var(--viking-btn-min-width, 120px);
1876
- white-space: nowrap;
1877
- position: relative;
1878
- background-clip: padding-box;
1879
- isolation: isolate;
1880
- user-select: none;
1881
- -webkit-tap-highlight-color: transparent;
1882
- overflow: hidden;
1883
- box-shadow: var(--viking-btn-depth-shadow);
1884
- }
1885
- .viking-btn-subtle:focus-visible,
1886
- a.viking-btn-subtle:focus-visible,
1887
- button.viking-btn-subtle:focus-visible {
1888
- outline: var(--viking-ring-width) solid var(--viking-ring);
1889
- outline-offset: var(--viking-ring-offset);
1890
- z-index: 1;
1891
- }
1892
- .viking-btn-subtle::before,
1893
- a.viking-btn-subtle::before,
1894
- button.viking-btn-subtle::before {
1895
- content: "";
1896
- position: absolute;
1897
- inset: 1px 1px auto 1px;
1898
- height: 1px;
1899
- background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 45%, transparent), transparent);
1900
- pointer-events: none;
1901
- opacity: 0.88;
1902
- transition: var(--viking-transition-interactive);
1903
- }
1904
- .viking-btn-subtle::after,
1905
- a.viking-btn-subtle::after,
1906
- button.viking-btn-subtle::after {
1907
- content: "";
1908
- position: absolute;
1909
- inset: auto 0 0 0;
1910
- height: 1px;
1911
- background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 18%, transparent), transparent);
1912
- pointer-events: none;
1913
- opacity: 0.45;
1914
- transition: var(--viking-transition-interactive);
1915
- }
1916
- .viking-btn-subtle:disabled, .viking-btn-subtle[aria-busy=true],
1917
- a.viking-btn-subtle:disabled,
1918
- a.viking-btn-subtle[aria-busy=true],
1919
- button.viking-btn-subtle:disabled,
1920
- button.viking-btn-subtle[aria-busy=true] {
1921
- opacity: var(--viking-state-disabled-opacity);
1922
- cursor: not-allowed;
1923
- transform: none !important;
1924
- box-shadow: none !important;
1925
- }
1926
- .viking-btn-subtle[aria-busy=true]::before, .viking-btn-subtle[aria-busy=true] .viking-btn-label,
1927
- a.viking-btn-subtle[aria-busy=true]::before,
1928
- a.viking-btn-subtle[aria-busy=true] .viking-btn-label,
1929
- button.viking-btn-subtle[aria-busy=true]::before,
1930
- button.viking-btn-subtle[aria-busy=true] .viking-btn-label {
1931
- opacity: 0.78;
1932
- transform: translateY(1px);
1933
- }
1934
- .viking-btn-subtle[aria-busy=true],
1935
- a.viking-btn-subtle[aria-busy=true],
1936
- button.viking-btn-subtle[aria-busy=true] {
1937
- cursor: wait;
1938
- }
1939
- .viking-btn-subtle viking-icon,
1940
- .viking-btn-subtle .viking-icon,
1941
- .viking-btn-subtle [data-viking-icon],
1942
- a.viking-btn-subtle viking-icon,
1943
- a.viking-btn-subtle .viking-icon,
1944
- a.viking-btn-subtle [data-viking-icon],
1945
- button.viking-btn-subtle viking-icon,
1946
- button.viking-btn-subtle .viking-icon,
1947
- button.viking-btn-subtle [data-viking-icon] {
1948
- flex-shrink: 0;
1949
- display: inline-flex;
1950
- align-items: center;
1951
- justify-content: center;
1952
- width: var(--viking-icon-size-md);
1953
- height: var(--viking-icon-size-md);
1954
- line-height: 1;
1955
- pointer-events: none;
1956
- flex: 0 0 auto;
1957
- margin-block: calc(var(--viking-space-half) * -1);
1958
- }
1959
- .viking-btn-subtle .viking-btn-label,
1960
- a.viking-btn-subtle .viking-btn-label,
1961
- button.viking-btn-subtle .viking-btn-label {
1962
- display: inline-flex;
1963
- align-items: center;
1964
- gap: var(--viking-space-1);
1965
- line-height: 1.2;
1966
- min-width: 0;
1967
- justify-content: center;
1968
- text-align: center;
1969
- white-space: nowrap;
1970
- }
1971
- .viking-btn-subtle,
1972
- a.viking-btn-subtle,
1973
- button.viking-btn-subtle {
1974
- background: transparent;
1975
- color: var(--viking-text-muted);
1976
- border-color: var(--viking-border-subtle);
1977
- min-width: auto;
1978
- box-shadow: none;
1979
- }
1980
- .viking-btn-subtle:hover:not(:disabled):not([aria-busy=true]),
1981
- a.viking-btn-subtle:hover:not(:disabled):not([aria-busy=true]),
1982
- button.viking-btn-subtle:hover:not(:disabled):not([aria-busy=true]) {
1983
- color: var(--viking-text);
1984
- background: var(--viking-accent-soft);
1985
- border-color: var(--viking-border-strong);
1986
- }
1987
- .viking-btn-subtle:active:not(:disabled):not([aria-busy=true]),
1988
- a.viking-btn-subtle:active:not(:disabled):not([aria-busy=true]),
1989
- button.viking-btn-subtle:active:not(:disabled):not([aria-busy=true]) {
1990
- transform: translateY(0) scale(var(--viking-state-active-scale));
1991
- border-color: var(--viking-border);
1992
- background: color-mix(in srgb, var(--viking-accent-soft) 70%, var(--viking-surface));
1993
- box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 24%, transparent);
1994
- }
1995
-
1996
- .viking-btn.viking-outline {
1997
- background: var(--viking-surface);
1998
- color: var(--viking-text);
1999
- border-color: var(--viking-border-strong);
2000
- box-shadow: var(--viking-btn-depth-shadow);
2001
- }
2002
- .viking-btn.viking-outline:hover:not(:disabled):not([aria-busy=true]) {
2003
- background: color-mix(in srgb, var(--viking-accent) 5%, var(--viking-surface-alt));
2004
- border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border-strong));
2005
- color: var(--viking-text);
2006
- box-shadow: var(--viking-btn-hover-shadow);
2007
- transform: translateY(var(--viking-state-hover-lift));
2008
- }
2009
- .viking-btn.viking-outline:active:not(:disabled):not([aria-busy=true]) {
2010
- transform: translateY(0) scale(var(--viking-state-active-scale));
2011
- border-color: var(--viking-border-strong);
2012
- box-shadow: var(--viking-btn-press-shadow);
2013
- }
2014
-
2015
- .viking-btn.viking-primary {
2016
- background: var(--viking-accent);
2017
- color: var(--viking-accent-content);
2018
- border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
2019
- box-shadow: var(--viking-btn-depth-shadow), inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 12%, transparent);
2020
- }
2021
- .viking-btn.viking-primary:hover:not(:disabled):not([aria-busy=true]) {
2022
- background: var(--viking-accent-hover);
2023
- border-color: var(--viking-accent-hover);
2024
- color: var(--viking-accent-content);
2025
- box-shadow: var(--viking-btn-hover-shadow);
2026
- transform: translateY(var(--viking-state-hover-lift));
2027
- }
2028
- .viking-btn.viking-primary:active:not(:disabled):not([aria-busy=true]) {
2029
- transform: translateY(0) scale(var(--viking-state-active-scale));
2030
- border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
2031
- box-shadow: var(--viking-btn-press-shadow);
2032
- }
2033
-
2034
- .viking-btn.viking-secondary {
2035
- background: var(--viking-accent-secondary);
2036
- color: var(--viking-accent-secondary-content);
2037
- border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
2038
- box-shadow: var(--viking-btn-depth-shadow), inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 10%, transparent);
2039
- }
2040
- .viking-btn.viking-secondary:hover:not(:disabled):not([aria-busy=true]) {
2041
- background: var(--viking-accent-secondary-hover);
2042
- border-color: var(--viking-accent-secondary-hover);
2043
- color: var(--viking-accent-secondary-content);
2044
- box-shadow: var(--viking-btn-hover-shadow);
2045
- transform: translateY(var(--viking-state-hover-lift));
2046
- }
2047
- .viking-btn.viking-secondary:active:not(:disabled):not([aria-busy=true]) {
2048
- transform: translateY(0) scale(var(--viking-state-active-scale));
2049
- border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
2050
- box-shadow: var(--viking-btn-press-shadow);
2051
- }
2052
-
2053
- .viking-btn.viking-filled {
2054
- background: var(--viking-surface-alt);
2055
- color: var(--viking-text);
2056
- border-color: var(--viking-border);
2057
- box-shadow: var(--viking-shadow-xs);
2058
- }
2059
- .viking-btn.viking-filled:hover:not(:disabled):not([aria-busy=true]) {
2060
- border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border));
2061
- background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface-alt));
2062
- box-shadow: var(--viking-btn-depth-shadow);
2063
- transform: translateY(var(--viking-state-hover-lift));
2064
- }
2065
- .viking-btn.viking-filled:active:not(:disabled):not([aria-busy=true]) {
2066
- transform: translateY(0) scale(var(--viking-state-active-scale));
2067
- box-shadow: var(--viking-btn-press-shadow);
2068
- border-color: color-mix(in srgb, var(--viking-accent) 20%, var(--viking-border));
2069
- background: color-mix(in srgb, var(--viking-surface-alt) 84%, var(--viking-accent));
2070
- }
2071
-
2072
- .viking-btn.viking-danger {
2073
- background: var(--viking-danger);
2074
- color: var(--viking-on-danger);
2075
- border-color: color-mix(in srgb, var(--viking-danger) 85%, var(--viking-black));
2076
- box-shadow: var(--viking-btn-depth-shadow), inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 10%, transparent);
2077
- }
2078
- .viking-btn.viking-danger:hover:not(:disabled):not([aria-busy=true]) {
2079
- background: color-mix(in srgb, var(--viking-danger) 88%, var(--viking-white));
2080
- border-color: color-mix(in srgb, var(--viking-danger) 92%, var(--viking-white));
2081
- color: var(--viking-on-danger);
2082
- box-shadow: var(--viking-btn-hover-shadow);
2083
- transform: translateY(var(--viking-state-hover-lift));
2084
- }
2085
- .viking-btn.viking-danger:active:not(:disabled):not([aria-busy=true]) {
2086
- transform: translateY(0) scale(var(--viking-state-active-scale));
2087
- border-color: color-mix(in srgb, var(--viking-danger) 72%, var(--viking-black));
2088
- background: color-mix(in srgb, var(--viking-danger) 84%, var(--viking-black));
2089
- box-shadow: var(--viking-btn-press-shadow);
2090
- }
2091
-
2092
- .viking-btn.viking-ghost {
2093
- background: transparent;
2094
- color: var(--viking-text);
2095
- min-width: auto;
2096
- box-shadow: none;
2097
- border-color: transparent;
2098
- }
2099
- .viking-btn.viking-ghost:hover:not(:disabled):not([aria-busy=true]) {
2100
- background: var(--viking-accent-soft);
2101
- color: var(--viking-accent-strong);
2102
- border-color: var(--viking-border-subtle);
2103
- transform: translateY(var(--viking-state-hover-lift));
2104
- }
2105
- .viking-btn.viking-ghost:active:not(:disabled):not([aria-busy=true]) {
2106
- transform: translateY(0) scale(var(--viking-state-active-scale));
2107
- background: var(--viking-accent-soft);
2108
- color: var(--viking-accent-strong);
2109
- }
2110
-
2111
- .viking-btn.viking-subtle {
2112
- background: transparent;
2113
- color: var(--viking-text-muted);
2114
- border-color: var(--viking-border-subtle);
2115
- min-width: auto;
2116
- box-shadow: none;
2117
- }
2118
- .viking-btn.viking-subtle:hover:not(:disabled):not([aria-busy=true]) {
2119
- color: var(--viking-text);
2120
- background: var(--viking-accent-soft);
2121
- border-color: var(--viking-border-strong);
2122
- }
2123
- .viking-btn.viking-subtle:active:not(:disabled):not([aria-busy=true]) {
2124
- transform: translateY(0) scale(var(--viking-state-active-scale));
2125
- border-color: var(--viking-border);
2126
- background: color-mix(in srgb, var(--viking-accent-soft) 70%, var(--viking-surface));
2127
- box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 24%, transparent);
2128
- }
2129
-
2130
- .viking-btn.viking-compact {
2131
- min-width: 0;
2132
- }
2133
-
2134
- .viking-btn.viking-full {
2135
- width: 100%;
2136
- min-width: 0;
2137
- }
2138
-
2139
- .viking-btn-label {
2140
- display: inline-flex;
2141
- align-items: center;
2142
- line-height: inherit;
2143
- }
2144
-
2145
- .viking-btn-spinner {
2146
- flex: 0 0 auto;
2147
- width: var(--viking-icon-size-sm, 18px);
2148
- height: var(--viking-icon-size-sm, 18px);
2149
- border: 2px solid currentColor;
2150
- border-right-color: transparent;
2151
- border-radius: var(--viking-radius-pill);
2152
- animation: viking-spin 0.8s linear infinite;
2153
- }
2154
-
2155
- .viking-control {
2156
- display: flex;
2157
- align-items: center;
2158
- gap: var(--viking-space-1);
2159
- min-height: var(--viking-control-height);
2160
- padding: 0 var(--viking-space-2);
2161
- font-family: var(--viking-font-family);
2162
- font-size: var(--viking-font-size);
2163
- color: var(--viking-text);
2164
- background: var(--viking-surface-alt);
2165
- border: 1px solid var(--viking-border);
2166
- border-radius: var(--viking-radius-sm);
2167
- box-shadow: var(--viking-shadow-xs);
2168
- transition: var(--viking-transition-interactive);
2169
- width: 100%;
2170
- min-width: 0;
2171
- box-sizing: border-box;
2172
- }
2173
- .viking-control:hover:not(.viking-disabled):not(.viking-loading):not(:disabled) {
2174
- border-color: color-mix(in srgb, var(--viking-accent) 35%, var(--viking-border-strong));
2175
- box-shadow: var(--viking-shadow-sm);
2176
- }
2177
- .viking-control:focus-within:not(.viking-loading) {
2178
- outline: var(--viking-ring-width) solid var(--viking-ring);
2179
- outline-offset: var(--viking-ring-offset);
2180
- border-color: var(--viking-accent);
2181
- box-shadow: var(--viking-shadow-sm);
2182
- }
2183
-
2184
- .viking-form-row {
2185
- display: grid;
2186
- grid-template-columns: 1fr;
2187
- gap: var(--viking-space-3);
2188
- width: 100%;
2189
- max-width: var(--viking-form-max-width);
2190
- }
2191
- @media (min-width: 600px) {
2192
- .viking-form-row {
2193
- grid-template-columns: repeat(2, minmax(0, 1fr));
2194
- }
2195
- }
2196
-
2197
- @media (min-width: 768px) {
2198
- .viking-form-row--3 {
2199
- grid-template-columns: repeat(3, minmax(0, 1fr));
2200
- }
2201
- }
2202
-
2203
- .viking-form-section-actions viking-button .viking-btn,
2204
- .viking-modal-footer viking-button .viking-btn,
2205
- .viking-sheet-footer viking-button .viking-btn,
2206
- .viking-empty-state-actions viking-button .viking-btn,
2207
- .viking-chart-empty-actions viking-button .viking-btn {
2208
- min-width: 0;
2209
- }
2210
-
2211
- .viking-input,
2212
- .viking-input-shell {
2213
- display: flex;
2214
- align-items: center;
2215
- gap: var(--viking-space-1);
2216
- min-height: var(--viking-control-height);
2217
- padding: 0 var(--viking-space-2);
2218
- font-family: var(--viking-font-family);
2219
- font-size: var(--viking-font-size);
2220
- color: var(--viking-text);
2221
- background: var(--viking-surface-alt);
2222
- border: 1px solid var(--viking-border);
2223
- border-radius: var(--viking-radius-sm);
2224
- box-shadow: var(--viking-shadow-xs);
2225
- transition: var(--viking-transition-interactive);
2226
- width: 100%;
2227
- min-width: 0;
2228
- box-sizing: border-box;
2229
- }
2230
- .viking-input:hover:not(.viking-disabled):not(.viking-loading):not(:disabled),
2231
- .viking-input-shell:hover:not(.viking-disabled):not(.viking-loading):not(:disabled) {
2232
- border-color: color-mix(in srgb, var(--viking-accent) 35%, var(--viking-border-strong));
2233
- box-shadow: var(--viking-shadow-sm);
2234
- }
2235
- .viking-input:focus-within:not(.viking-loading),
2236
- .viking-input-shell:focus-within:not(.viking-loading) {
2237
- outline: var(--viking-ring-width) solid var(--viking-ring);
2238
- outline-offset: var(--viking-ring-offset);
2239
- border-color: var(--viking-accent);
2240
- box-shadow: var(--viking-shadow-sm);
2241
- }
2242
-
2243
- .viking-input input,
2244
- .viking-input-shell input,
2245
- input.viking-input-native {
2246
- flex: 1;
2247
- min-width: 0;
2248
- border: none;
2249
- outline: none !important;
2250
- background: transparent;
2251
- color: var(--viking-text);
2252
- font-family: var(--viking-font-family);
2253
- font-size: var(--viking-font-size);
2254
- padding: 0;
2255
- }
2256
- .viking-input input::placeholder,
2257
- .viking-input-shell input::placeholder,
2258
- input.viking-input-native::placeholder {
2259
- color: var(--viking-text-muted);
2260
- }
2261
- .viking-input input:disabled,
2262
- .viking-input-shell input:disabled,
2263
- input.viking-input-native:disabled {
2264
- cursor: not-allowed;
2265
- }
2266
-
2267
- .viking-input-clear {
2268
- display: inline-flex;
2269
- align-items: center;
2270
- justify-content: center;
2271
- min-width: var(--viking-touch-target-comfort);
2272
- min-height: var(--viking-touch-target-comfort);
2273
- border: none;
2274
- background: transparent;
2275
- color: var(--viking-text-muted);
2276
- cursor: pointer;
2277
- padding: var(--viking-space-half);
2278
- border-radius: var(--viking-radius-pill);
2279
- transition: var(--viking-transition-interactive);
2280
- position: relative;
2281
- flex-shrink: 0;
2282
- -webkit-tap-highlight-color: transparent;
2283
- }
2284
- .viking-input-clear:hover {
2285
- color: var(--viking-text);
2286
- background: var(--viking-accent-soft);
2287
- }
2288
- .viking-input-clear:focus-visible {
2289
- outline: var(--viking-ring-width) solid var(--viking-ring);
2290
- outline-offset: var(--viking-ring-offset);
2291
- }
2292
- .viking-input-clear:active {
2293
- transform: scale(var(--viking-state-active-scale));
2294
- }
2295
-
2296
- .viking-input-kbd {
2297
- font-family: var(--viking-font-family-mono);
2298
- font-size: var(--viking-font-size-xs);
2299
- color: var(--viking-text-muted);
2300
- background: var(--viking-surface-alt);
2301
- border: 1px solid var(--viking-border);
2302
- border-radius: var(--viking-radius-xs);
2303
- padding: 0 var(--viking-space-half);
2304
- line-height: 1.4;
2305
- }
2306
-
2307
- .viking-input-icon {
2308
- color: var(--viking-text-muted);
2309
- flex-shrink: 0;
2310
- }
2311
-
2312
- .viking-input-shell.viking-disabled,
2313
- .viking-input-shell.viking-loading,
2314
- .viking-input.viking-disabled,
2315
- .viking-input.viking-loading {
2316
- opacity: var(--viking-state-disabled-opacity);
2317
- }
2318
-
2319
- .viking-input-shell.viking-loading,
2320
- .viking-input.viking-loading {
2321
- cursor: wait;
2322
- }