@igorvaryvoda/sirv-upload-widget 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,806 @@
1
+ /**
2
+ * Sirv Upload Widget - Default Styles
3
+ *
4
+ * Customize using CSS variables:
5
+ *
6
+ * :root {
7
+ * --sirv-primary: #0066cc;
8
+ * --sirv-primary-hover: #0052a3;
9
+ * --sirv-bg: #ffffff;
10
+ * --sirv-text: #1a1a1a;
11
+ * // ... etc
12
+ * }
13
+ */
14
+
15
+ /* =============================================================================
16
+ CSS Variables (Theme)
17
+ ============================================================================= */
18
+
19
+ .sirv-uploader {
20
+ /* Colors */
21
+ --sirv-primary: #0066cc;
22
+ --sirv-primary-hover: #0052a3;
23
+ --sirv-primary-light: #e6f0fa;
24
+ --sirv-success: #22c55e;
25
+ --sirv-success-light: #dcfce7;
26
+ --sirv-error: #ef4444;
27
+ --sirv-error-light: #fee2e2;
28
+ --sirv-warning: #f59e0b;
29
+
30
+ /* Neutrals */
31
+ --sirv-bg: #ffffff;
32
+ --sirv-bg-subtle: #f8fafc;
33
+ --sirv-bg-muted: #f1f5f9;
34
+ --sirv-border: #e2e8f0;
35
+ --sirv-border-strong: #cbd5e1;
36
+ --sirv-text: #1e293b;
37
+ --sirv-text-muted: #64748b;
38
+ --sirv-text-subtle: #94a3b8;
39
+
40
+ /* Sizing */
41
+ --sirv-radius: 8px;
42
+ --sirv-radius-sm: 4px;
43
+ --sirv-radius-lg: 12px;
44
+ --sirv-spacing: 16px;
45
+ --sirv-spacing-sm: 8px;
46
+ --sirv-spacing-xs: 4px;
47
+
48
+ /* Typography */
49
+ --sirv-font: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
50
+ --sirv-font-size: 14px;
51
+ --sirv-font-size-sm: 12px;
52
+ --sirv-font-size-lg: 16px;
53
+
54
+ /* Transitions */
55
+ --sirv-transition: 150ms ease;
56
+
57
+ /* Shadows */
58
+ --sirv-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
59
+ --sirv-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
60
+ }
61
+
62
+ /* =============================================================================
63
+ Base Container
64
+ ============================================================================= */
65
+
66
+ .sirv-uploader {
67
+ font-family: var(--sirv-font);
68
+ font-size: var(--sirv-font-size);
69
+ color: var(--sirv-text);
70
+ background: var(--sirv-bg);
71
+ border-radius: var(--sirv-radius-lg);
72
+ border: 1px solid var(--sirv-border);
73
+ overflow: hidden;
74
+ }
75
+
76
+ /* =============================================================================
77
+ Tabs
78
+ ============================================================================= */
79
+
80
+ .sirv-tabs {
81
+ display: flex;
82
+ border-bottom: 1px solid var(--sirv-border);
83
+ background: var(--sirv-bg-subtle);
84
+ }
85
+
86
+ .sirv-tabs__tab {
87
+ flex: 1;
88
+ padding: var(--sirv-spacing-sm) var(--sirv-spacing);
89
+ background: none;
90
+ border: none;
91
+ border-bottom: 2px solid transparent;
92
+ color: var(--sirv-text-muted);
93
+ font-size: var(--sirv-font-size);
94
+ font-weight: 500;
95
+ cursor: pointer;
96
+ transition: all var(--sirv-transition);
97
+ }
98
+
99
+ .sirv-tabs__tab:hover {
100
+ color: var(--sirv-text);
101
+ background: var(--sirv-bg-muted);
102
+ }
103
+
104
+ .sirv-tabs__tab--active {
105
+ color: var(--sirv-primary);
106
+ border-bottom-color: var(--sirv-primary);
107
+ background: var(--sirv-bg);
108
+ }
109
+
110
+ /* =============================================================================
111
+ DropZone
112
+ ============================================================================= */
113
+
114
+ .sirv-dropzone {
115
+ display: flex;
116
+ flex-direction: column;
117
+ align-items: center;
118
+ justify-content: center;
119
+ min-height: 200px;
120
+ padding: var(--sirv-spacing) calc(var(--sirv-spacing) * 2);
121
+ border: 2px dashed var(--sirv-border-strong);
122
+ border-radius: var(--sirv-radius);
123
+ background: var(--sirv-bg-subtle);
124
+ cursor: pointer;
125
+ transition: all var(--sirv-transition);
126
+ margin: var(--sirv-spacing);
127
+ }
128
+
129
+ .sirv-dropzone:hover,
130
+ .sirv-dropzone:focus-visible {
131
+ border-color: var(--sirv-primary);
132
+ background: var(--sirv-primary-light);
133
+ }
134
+
135
+ .sirv-dropzone--drag-over {
136
+ border-color: var(--sirv-primary);
137
+ background: var(--sirv-primary-light);
138
+ transform: scale(1.01);
139
+ }
140
+
141
+ .sirv-dropzone--disabled {
142
+ opacity: 0.6;
143
+ cursor: not-allowed;
144
+ }
145
+
146
+ .sirv-dropzone--compact {
147
+ min-height: 120px;
148
+ padding: var(--sirv-spacing);
149
+ }
150
+
151
+ .sirv-dropzone__input {
152
+ position: absolute;
153
+ width: 1px;
154
+ height: 1px;
155
+ padding: 0;
156
+ margin: -1px;
157
+ overflow: hidden;
158
+ clip: rect(0, 0, 0, 0);
159
+ border: 0;
160
+ }
161
+
162
+ .sirv-dropzone__content {
163
+ display: flex;
164
+ flex-direction: column;
165
+ align-items: center;
166
+ gap: var(--sirv-spacing-sm);
167
+ text-align: center;
168
+ }
169
+
170
+ .sirv-dropzone__icon {
171
+ width: 48px;
172
+ height: 48px;
173
+ color: var(--sirv-text-muted);
174
+ }
175
+
176
+ .sirv-dropzone__text {
177
+ margin: 0;
178
+ font-size: var(--sirv-font-size-lg);
179
+ font-weight: 500;
180
+ color: var(--sirv-text);
181
+ }
182
+
183
+ .sirv-dropzone__hint {
184
+ margin: 0;
185
+ font-size: var(--sirv-font-size-sm);
186
+ color: var(--sirv-text-muted);
187
+ }
188
+
189
+ .sirv-dropzone__spinner {
190
+ width: 32px;
191
+ height: 32px;
192
+ border: 3px solid var(--sirv-border);
193
+ border-top-color: var(--sirv-primary);
194
+ border-radius: 50%;
195
+ animation: sirv-spin 0.8s linear infinite;
196
+ }
197
+
198
+ @keyframes sirv-spin {
199
+ to { transform: rotate(360deg); }
200
+ }
201
+
202
+ /* =============================================================================
203
+ FileList
204
+ ============================================================================= */
205
+
206
+ .sirv-filelist {
207
+ display: flex;
208
+ flex-direction: column;
209
+ gap: var(--sirv-spacing-xs);
210
+ padding: 0 var(--sirv-spacing) var(--sirv-spacing);
211
+ max-height: 300px;
212
+ overflow-y: auto;
213
+ }
214
+
215
+ .sirv-filelist__item {
216
+ display: flex;
217
+ align-items: center;
218
+ gap: var(--sirv-spacing-sm);
219
+ padding: var(--sirv-spacing-sm);
220
+ background: var(--sirv-bg-subtle);
221
+ border-radius: var(--sirv-radius-sm);
222
+ position: relative;
223
+ }
224
+
225
+ .sirv-filelist__item--success {
226
+ background: var(--sirv-success-light);
227
+ }
228
+
229
+ .sirv-filelist__item--error {
230
+ background: var(--sirv-error-light);
231
+ }
232
+
233
+ .sirv-filelist__thumbnail {
234
+ width: 40px;
235
+ height: 40px;
236
+ border-radius: var(--sirv-radius-sm);
237
+ overflow: hidden;
238
+ flex-shrink: 0;
239
+ background: var(--sirv-bg-muted);
240
+ }
241
+
242
+ .sirv-filelist__thumbnail img {
243
+ width: 100%;
244
+ height: 100%;
245
+ object-fit: cover;
246
+ }
247
+
248
+ .sirv-filelist__info {
249
+ flex: 1;
250
+ min-width: 0;
251
+ }
252
+
253
+ .sirv-filelist__name {
254
+ font-weight: 500;
255
+ white-space: nowrap;
256
+ overflow: hidden;
257
+ text-overflow: ellipsis;
258
+ }
259
+
260
+ .sirv-filelist__meta {
261
+ display: flex;
262
+ gap: var(--sirv-spacing-sm);
263
+ font-size: var(--sirv-font-size-sm);
264
+ color: var(--sirv-text-muted);
265
+ }
266
+
267
+ .sirv-filelist__error {
268
+ font-size: var(--sirv-font-size-sm);
269
+ color: var(--sirv-error);
270
+ margin-top: var(--sirv-spacing-xs);
271
+ }
272
+
273
+ .sirv-filelist__status--success {
274
+ color: var(--sirv-success);
275
+ }
276
+
277
+ .sirv-filelist__status--error {
278
+ color: var(--sirv-error);
279
+ }
280
+
281
+ .sirv-filelist__progress {
282
+ position: absolute;
283
+ bottom: 0;
284
+ left: 0;
285
+ right: 0;
286
+ height: 3px;
287
+ background: var(--sirv-border);
288
+ border-radius: 0 0 var(--sirv-radius-sm) var(--sirv-radius-sm);
289
+ overflow: hidden;
290
+ }
291
+
292
+ .sirv-filelist__progress-bar {
293
+ height: 100%;
294
+ background: var(--sirv-primary);
295
+ transition: width var(--sirv-transition);
296
+ }
297
+
298
+ .sirv-filelist__actions {
299
+ display: flex;
300
+ gap: var(--sirv-spacing-xs);
301
+ flex-shrink: 0;
302
+ }
303
+
304
+ .sirv-filelist__action {
305
+ display: flex;
306
+ align-items: center;
307
+ justify-content: center;
308
+ width: 28px;
309
+ height: 28px;
310
+ padding: 0;
311
+ background: none;
312
+ border: none;
313
+ border-radius: var(--sirv-radius-sm);
314
+ color: var(--sirv-text-muted);
315
+ cursor: pointer;
316
+ transition: all var(--sirv-transition);
317
+ }
318
+
319
+ .sirv-filelist__action:hover {
320
+ background: var(--sirv-bg-muted);
321
+ color: var(--sirv-text);
322
+ }
323
+
324
+ .sirv-filelist__action svg {
325
+ width: 16px;
326
+ height: 16px;
327
+ }
328
+
329
+ .sirv-filelist__action--remove:hover {
330
+ color: var(--sirv-error);
331
+ }
332
+
333
+ .sirv-filelist__check {
334
+ display: flex;
335
+ align-items: center;
336
+ justify-content: center;
337
+ width: 28px;
338
+ height: 28px;
339
+ color: var(--sirv-success);
340
+ }
341
+
342
+ .sirv-filelist__check svg {
343
+ width: 18px;
344
+ height: 18px;
345
+ }
346
+
347
+ /* Summary */
348
+ .sirv-filelist-summary {
349
+ display: flex;
350
+ gap: var(--sirv-spacing);
351
+ padding: var(--sirv-spacing-sm) var(--sirv-spacing);
352
+ font-size: var(--sirv-font-size-sm);
353
+ color: var(--sirv-text-muted);
354
+ border-top: 1px solid var(--sirv-border);
355
+ }
356
+
357
+ .sirv-filelist-summary__success {
358
+ color: var(--sirv-success);
359
+ }
360
+
361
+ .sirv-filelist-summary__error {
362
+ color: var(--sirv-error);
363
+ }
364
+
365
+ /* =============================================================================
366
+ FilePicker Modal
367
+ ============================================================================= */
368
+
369
+ .sirv-filepicker-overlay {
370
+ position: fixed;
371
+ inset: 0;
372
+ background: rgba(0, 0, 0, 0.5);
373
+ display: flex;
374
+ align-items: center;
375
+ justify-content: center;
376
+ z-index: 9999;
377
+ padding: var(--sirv-spacing);
378
+ }
379
+
380
+ .sirv-filepicker {
381
+ width: 100%;
382
+ max-width: 800px;
383
+ max-height: 90vh;
384
+ background: var(--sirv-bg);
385
+ border-radius: var(--sirv-radius-lg);
386
+ box-shadow: var(--sirv-shadow-lg);
387
+ display: flex;
388
+ flex-direction: column;
389
+ overflow: hidden;
390
+ }
391
+
392
+ .sirv-filepicker__header {
393
+ display: flex;
394
+ align-items: center;
395
+ justify-content: space-between;
396
+ padding: var(--sirv-spacing);
397
+ border-bottom: 1px solid var(--sirv-border);
398
+ }
399
+
400
+ .sirv-filepicker__title {
401
+ margin: 0;
402
+ font-size: var(--sirv-font-size-lg);
403
+ font-weight: 600;
404
+ }
405
+
406
+ .sirv-filepicker__close {
407
+ display: flex;
408
+ align-items: center;
409
+ justify-content: center;
410
+ width: 32px;
411
+ height: 32px;
412
+ padding: 0;
413
+ background: none;
414
+ border: none;
415
+ border-radius: var(--sirv-radius-sm);
416
+ color: var(--sirv-text-muted);
417
+ cursor: pointer;
418
+ transition: all var(--sirv-transition);
419
+ }
420
+
421
+ .sirv-filepicker__close:hover {
422
+ background: var(--sirv-bg-muted);
423
+ color: var(--sirv-text);
424
+ }
425
+
426
+ .sirv-filepicker__close svg {
427
+ width: 20px;
428
+ height: 20px;
429
+ }
430
+
431
+ .sirv-filepicker__toolbar {
432
+ display: flex;
433
+ align-items: center;
434
+ gap: var(--sirv-spacing);
435
+ padding: var(--sirv-spacing-sm) var(--sirv-spacing);
436
+ background: var(--sirv-bg-subtle);
437
+ border-bottom: 1px solid var(--sirv-border);
438
+ }
439
+
440
+ .sirv-filepicker__breadcrumbs {
441
+ display: flex;
442
+ align-items: center;
443
+ gap: var(--sirv-spacing-xs);
444
+ flex: 1;
445
+ min-width: 0;
446
+ overflow-x: auto;
447
+ }
448
+
449
+ .sirv-filepicker__breadcrumb {
450
+ display: flex;
451
+ align-items: center;
452
+ padding: var(--sirv-spacing-xs) var(--sirv-spacing-sm);
453
+ background: none;
454
+ border: none;
455
+ border-radius: var(--sirv-radius-sm);
456
+ color: var(--sirv-text-muted);
457
+ font-size: var(--sirv-font-size-sm);
458
+ cursor: pointer;
459
+ white-space: nowrap;
460
+ transition: all var(--sirv-transition);
461
+ }
462
+
463
+ .sirv-filepicker__breadcrumb:hover {
464
+ background: var(--sirv-bg-muted);
465
+ color: var(--sirv-text);
466
+ }
467
+
468
+ .sirv-filepicker__breadcrumb svg {
469
+ width: 16px;
470
+ height: 16px;
471
+ }
472
+
473
+ .sirv-filepicker__breadcrumb-separator {
474
+ color: var(--sirv-text-subtle);
475
+ }
476
+
477
+ .sirv-filepicker__search-input {
478
+ width: 200px;
479
+ padding: var(--sirv-spacing-xs) var(--sirv-spacing-sm);
480
+ background: var(--sirv-bg);
481
+ border: 1px solid var(--sirv-border);
482
+ border-radius: var(--sirv-radius-sm);
483
+ font-size: var(--sirv-font-size-sm);
484
+ color: var(--sirv-text);
485
+ }
486
+
487
+ .sirv-filepicker__search-input:focus {
488
+ outline: none;
489
+ border-color: var(--sirv-primary);
490
+ }
491
+
492
+ .sirv-filepicker__content {
493
+ flex: 1;
494
+ overflow-y: auto;
495
+ padding: var(--sirv-spacing);
496
+ min-height: 300px;
497
+ }
498
+
499
+ .sirv-filepicker__loading,
500
+ .sirv-filepicker__empty,
501
+ .sirv-filepicker__error {
502
+ display: flex;
503
+ flex-direction: column;
504
+ align-items: center;
505
+ justify-content: center;
506
+ height: 200px;
507
+ color: var(--sirv-text-muted);
508
+ gap: var(--sirv-spacing-sm);
509
+ }
510
+
511
+ .sirv-filepicker__spinner {
512
+ width: 32px;
513
+ height: 32px;
514
+ border: 3px solid var(--sirv-border);
515
+ border-top-color: var(--sirv-primary);
516
+ border-radius: 50%;
517
+ animation: sirv-spin 0.8s linear infinite;
518
+ }
519
+
520
+ .sirv-filepicker__grid {
521
+ display: grid;
522
+ grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
523
+ gap: var(--sirv-spacing-sm);
524
+ }
525
+
526
+ .sirv-filepicker__item {
527
+ display: flex;
528
+ flex-direction: column;
529
+ align-items: center;
530
+ gap: var(--sirv-spacing-xs);
531
+ padding: var(--sirv-spacing-sm);
532
+ background: var(--sirv-bg-subtle);
533
+ border: 2px solid transparent;
534
+ border-radius: var(--sirv-radius);
535
+ cursor: pointer;
536
+ transition: all var(--sirv-transition);
537
+ position: relative;
538
+ }
539
+
540
+ .sirv-filepicker__item:hover {
541
+ background: var(--sirv-bg-muted);
542
+ }
543
+
544
+ .sirv-filepicker__item--selected {
545
+ border-color: var(--sirv-primary);
546
+ background: var(--sirv-primary-light);
547
+ }
548
+
549
+ .sirv-filepicker__item-icon {
550
+ width: 48px;
551
+ height: 48px;
552
+ display: flex;
553
+ align-items: center;
554
+ justify-content: center;
555
+ color: var(--sirv-text-muted);
556
+ }
557
+
558
+ .sirv-filepicker__item-icon svg {
559
+ width: 32px;
560
+ height: 32px;
561
+ }
562
+
563
+ .sirv-filepicker__item--folder .sirv-filepicker__item-icon {
564
+ color: var(--sirv-warning);
565
+ }
566
+
567
+ .sirv-filepicker__item-thumbnail {
568
+ width: 80px;
569
+ height: 60px;
570
+ border-radius: var(--sirv-radius-sm);
571
+ overflow: hidden;
572
+ background: var(--sirv-bg-muted);
573
+ }
574
+
575
+ .sirv-filepicker__item-thumbnail img {
576
+ width: 100%;
577
+ height: 100%;
578
+ object-fit: cover;
579
+ }
580
+
581
+ .sirv-filepicker__item-name {
582
+ font-size: var(--sirv-font-size-sm);
583
+ text-align: center;
584
+ word-break: break-word;
585
+ max-width: 100%;
586
+ overflow: hidden;
587
+ text-overflow: ellipsis;
588
+ display: -webkit-box;
589
+ -webkit-line-clamp: 2;
590
+ -webkit-box-orient: vertical;
591
+ }
592
+
593
+ .sirv-filepicker__item-size {
594
+ font-size: 10px;
595
+ color: var(--sirv-text-subtle);
596
+ }
597
+
598
+ .sirv-filepicker__item-check {
599
+ position: absolute;
600
+ top: var(--sirv-spacing-xs);
601
+ right: var(--sirv-spacing-xs);
602
+ width: 20px;
603
+ height: 20px;
604
+ background: var(--sirv-primary);
605
+ border-radius: 50%;
606
+ display: flex;
607
+ align-items: center;
608
+ justify-content: center;
609
+ color: white;
610
+ }
611
+
612
+ .sirv-filepicker__item-check svg {
613
+ width: 12px;
614
+ height: 12px;
615
+ }
616
+
617
+ .sirv-filepicker__footer {
618
+ display: flex;
619
+ align-items: center;
620
+ justify-content: space-between;
621
+ padding: var(--sirv-spacing);
622
+ border-top: 1px solid var(--sirv-border);
623
+ background: var(--sirv-bg-subtle);
624
+ }
625
+
626
+ .sirv-filepicker__selection-count {
627
+ font-size: var(--sirv-font-size-sm);
628
+ color: var(--sirv-text-muted);
629
+ }
630
+
631
+ .sirv-filepicker__actions {
632
+ display: flex;
633
+ gap: var(--sirv-spacing-sm);
634
+ }
635
+
636
+ .sirv-filepicker__btn {
637
+ padding: var(--sirv-spacing-sm) var(--sirv-spacing);
638
+ background: var(--sirv-bg);
639
+ border: 1px solid var(--sirv-border);
640
+ border-radius: var(--sirv-radius-sm);
641
+ font-size: var(--sirv-font-size);
642
+ font-weight: 500;
643
+ color: var(--sirv-text);
644
+ cursor: pointer;
645
+ transition: all var(--sirv-transition);
646
+ }
647
+
648
+ .sirv-filepicker__btn:hover {
649
+ background: var(--sirv-bg-muted);
650
+ }
651
+
652
+ .sirv-filepicker__btn--primary {
653
+ background: var(--sirv-primary);
654
+ border-color: var(--sirv-primary);
655
+ color: white;
656
+ }
657
+
658
+ .sirv-filepicker__btn--primary:hover {
659
+ background: var(--sirv-primary-hover);
660
+ }
661
+
662
+ .sirv-filepicker__btn:disabled {
663
+ opacity: 0.5;
664
+ cursor: not-allowed;
665
+ }
666
+
667
+ /* =============================================================================
668
+ Toolbar / Actions
669
+ ============================================================================= */
670
+
671
+ .sirv-uploader__toolbar {
672
+ display: flex;
673
+ align-items: center;
674
+ justify-content: space-between;
675
+ padding: var(--sirv-spacing-sm) var(--sirv-spacing);
676
+ border-top: 1px solid var(--sirv-border);
677
+ background: var(--sirv-bg-subtle);
678
+ }
679
+
680
+ .sirv-uploader__toolbar-left,
681
+ .sirv-uploader__toolbar-right {
682
+ display: flex;
683
+ gap: var(--sirv-spacing-sm);
684
+ }
685
+
686
+ .sirv-btn {
687
+ display: inline-flex;
688
+ align-items: center;
689
+ gap: var(--sirv-spacing-xs);
690
+ padding: var(--sirv-spacing-sm) var(--sirv-spacing);
691
+ background: var(--sirv-bg);
692
+ border: 1px solid var(--sirv-border);
693
+ border-radius: var(--sirv-radius-sm);
694
+ font-size: var(--sirv-font-size);
695
+ font-weight: 500;
696
+ color: var(--sirv-text);
697
+ cursor: pointer;
698
+ transition: all var(--sirv-transition);
699
+ }
700
+
701
+ .sirv-btn:hover {
702
+ background: var(--sirv-bg-muted);
703
+ }
704
+
705
+ .sirv-btn--primary {
706
+ background: var(--sirv-primary);
707
+ border-color: var(--sirv-primary);
708
+ color: white;
709
+ }
710
+
711
+ .sirv-btn--primary:hover {
712
+ background: var(--sirv-primary-hover);
713
+ }
714
+
715
+ .sirv-btn:disabled {
716
+ opacity: 0.5;
717
+ cursor: not-allowed;
718
+ }
719
+
720
+ .sirv-btn svg {
721
+ width: 16px;
722
+ height: 16px;
723
+ }
724
+
725
+ /* =============================================================================
726
+ Spreadsheet Import
727
+ ============================================================================= */
728
+
729
+ .sirv-spreadsheet {
730
+ padding: var(--sirv-spacing);
731
+ }
732
+
733
+ .sirv-spreadsheet__drop {
734
+ display: flex;
735
+ flex-direction: column;
736
+ align-items: center;
737
+ justify-content: center;
738
+ min-height: 150px;
739
+ padding: var(--sirv-spacing);
740
+ border: 2px dashed var(--sirv-border-strong);
741
+ border-radius: var(--sirv-radius);
742
+ background: var(--sirv-bg-subtle);
743
+ cursor: pointer;
744
+ transition: all var(--sirv-transition);
745
+ }
746
+
747
+ .sirv-spreadsheet__drop:hover {
748
+ border-color: var(--sirv-primary);
749
+ background: var(--sirv-primary-light);
750
+ }
751
+
752
+ .sirv-spreadsheet__icon {
753
+ width: 40px;
754
+ height: 40px;
755
+ color: var(--sirv-text-muted);
756
+ margin-bottom: var(--sirv-spacing-sm);
757
+ }
758
+
759
+ .sirv-spreadsheet__text {
760
+ font-size: var(--sirv-font-size);
761
+ color: var(--sirv-text);
762
+ margin: 0;
763
+ }
764
+
765
+ .sirv-spreadsheet__hint {
766
+ font-size: var(--sirv-font-size-sm);
767
+ color: var(--sirv-text-muted);
768
+ margin: var(--sirv-spacing-xs) 0 0;
769
+ }
770
+
771
+ .sirv-spreadsheet__preview {
772
+ margin-top: var(--sirv-spacing);
773
+ }
774
+
775
+ .sirv-spreadsheet__table {
776
+ width: 100%;
777
+ border-collapse: collapse;
778
+ font-size: var(--sirv-font-size-sm);
779
+ }
780
+
781
+ .sirv-spreadsheet__table th,
782
+ .sirv-spreadsheet__table td {
783
+ padding: var(--sirv-spacing-xs) var(--sirv-spacing-sm);
784
+ border: 1px solid var(--sirv-border);
785
+ text-align: left;
786
+ }
787
+
788
+ .sirv-spreadsheet__table th {
789
+ background: var(--sirv-bg-subtle);
790
+ font-weight: 600;
791
+ }
792
+
793
+ .sirv-spreadsheet__stats {
794
+ display: flex;
795
+ gap: var(--sirv-spacing);
796
+ margin-top: var(--sirv-spacing);
797
+ font-size: var(--sirv-font-size-sm);
798
+ }
799
+
800
+ .sirv-spreadsheet__stat--valid {
801
+ color: var(--sirv-success);
802
+ }
803
+
804
+ .sirv-spreadsheet__stat--invalid {
805
+ color: var(--sirv-error);
806
+ }