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