optimized-react-component-library-xyz123 0.0.8 → 0.1.0

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.
package/dist/index.css CHANGED
@@ -590,6 +590,335 @@ textarea:focus-visible,
590
590
  .errorSummary-text {
591
591
  color: #8e0039;
592
592
  }
593
+ .files-upload {
594
+ width: 100%;
595
+ max-width: 800px;
596
+ margin: 0 auto;
597
+ font-family:
598
+ "Segoe UI",
599
+ Tahoma,
600
+ Geneva,
601
+ Verdana,
602
+ sans-serif;
603
+ }
604
+ .files-drop-zone {
605
+ border: 2px dashed #6e3282;
606
+ border-radius: 12px;
607
+ padding: 3rem 2rem;
608
+ text-align: center;
609
+ transition: all 0.3s ease;
610
+ background-color: #fafafa;
611
+ cursor: pointer;
612
+ position: relative;
613
+ overflow: hidden;
614
+ }
615
+ .files-drop-zone:hover {
616
+ border-color: #6e3282;
617
+ background-color: #f5ebf8;
618
+ transform: translateY(-2px);
619
+ box-shadow: 0 4px 12px rgba(220, 148, 253, 0.15);
620
+ }
621
+ .files-drop-zone.drag-active {
622
+ border-color: #6e3282;
623
+ background-color: #f5ebf8;
624
+ transform: scale(1.02);
625
+ box-shadow: 0 8px 25px rgba(30, 167, 253, 0.2);
626
+ }
627
+ .files-drop-zone:focus {
628
+ border: 0.2rem solid #6e3282;
629
+ }
630
+ .files-drop-zone:focus-visible {
631
+ outline-offset: 0 !important;
632
+ outline-style: solid !important;
633
+ outline-color: #fff !important;
634
+ outline-width: 2px !important;
635
+ box-shadow: 0 0 0 4px #000 !important;
636
+ }
637
+ .files-drop-content {
638
+ pointer-events: none;
639
+ }
640
+ .files-icon {
641
+ font-size: 4rem;
642
+ margin-bottom: 1rem;
643
+ opacity: 0.7;
644
+ animation: float 3s ease-in-out infinite;
645
+ }
646
+ @keyframes float {
647
+ 0%, 100% {
648
+ transform: translateY(0px);
649
+ }
650
+ 50% {
651
+ transform: translateY(-10px);
652
+ }
653
+ }
654
+ .files-drop-text {
655
+ font-size: 1.2rem;
656
+ margin-bottom: 0.5rem;
657
+ color: #333;
658
+ font-weight: 500;
659
+ }
660
+ .files-drop-info {
661
+ font-size: 0.9rem;
662
+ color: #666;
663
+ margin: 0;
664
+ }
665
+ .files-allowed-types {
666
+ font-size: 0.85rem;
667
+ color: #555;
668
+ margin: 0.75rem 0 0 0;
669
+ padding: 0.5rem;
670
+ background-color: rgba(146, 64, 252, 0.1);
671
+ border-radius: 6px;
672
+ border-left: 3px solid #ce95e0;
673
+ }
674
+ .files-allowed-types strong {
675
+ color: #6e3282;
676
+ }
677
+ .files-input-hidden {
678
+ display: none;
679
+ }
680
+ .files-summary {
681
+ margin: 1.5rem 0;
682
+ padding: 1rem;
683
+ background-color: #f8f9fa;
684
+ border-radius: 8px;
685
+ border: 1px solid #e9ecef;
686
+ }
687
+ .files-summary-stats {
688
+ display: flex;
689
+ gap: 1rem;
690
+ margin-bottom: 1rem;
691
+ flex-wrap: wrap;
692
+ }
693
+ .stat {
694
+ padding: 0.5rem 1rem;
695
+ border-radius: 20px;
696
+ background-color: #e9ecef;
697
+ font-size: 0.9rem;
698
+ display: flex;
699
+ align-items: center;
700
+ gap: 0.5rem;
701
+ }
702
+ .stat.pending {
703
+ background-color: #fff3cd;
704
+ color: #856404;
705
+ }
706
+ .stat.completed {
707
+ background-color: #d1e7dd;
708
+ color: #0a3622;
709
+ }
710
+ .stat.error {
711
+ background-color: #f8d7da;
712
+ color: #721c24;
713
+ }
714
+ .files-summary-actions {
715
+ display: flex;
716
+ gap: 0.5rem;
717
+ flex-wrap: wrap;
718
+ }
719
+ .action-button {
720
+ padding: 0.75rem 1.5rem;
721
+ border: none;
722
+ border-radius: 6px;
723
+ cursor: pointer;
724
+ font-weight: 500;
725
+ transition: all 0.2s ease;
726
+ display: flex;
727
+ align-items: center;
728
+ gap: 0.5rem;
729
+ }
730
+ .action-button.primary {
731
+ background-color: #1ea7fd;
732
+ color: white;
733
+ }
734
+ .action-button.primary:hover {
735
+ background-color: #1890ff;
736
+ transform: translateY(-1px);
737
+ }
738
+ .action-button.secondary {
739
+ background-color: #6c757d;
740
+ color: white;
741
+ }
742
+ .action-button.secondary:hover {
743
+ background-color: #5a6268;
744
+ transform: translateY(-1px);
745
+ }
746
+ .files-list {
747
+ margin-top: 1.5rem;
748
+ }
749
+ .files-list h4 {
750
+ margin-bottom: 1rem;
751
+ color: #333;
752
+ font-size: 1.1rem;
753
+ font-weight: 600;
754
+ }
755
+ .files-items {
756
+ list-style: none;
757
+ padding: 0;
758
+ margin: 0;
759
+ }
760
+ .file-item {
761
+ display: flex;
762
+ align-items: center;
763
+ gap: 1rem;
764
+ padding: 1rem;
765
+ border: 1px solid #e9ecef;
766
+ border-radius: 8px;
767
+ margin-bottom: 0.75rem;
768
+ background-color: white;
769
+ transition: all 0.2s ease;
770
+ position: relative;
771
+ }
772
+ .file-item:hover {
773
+ background-color: #f8f9fa;
774
+ border-color: #dee2e6;
775
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
776
+ }
777
+ .file-item.uploading {
778
+ background-color: #e6f7ff;
779
+ border-color: #91d5ff;
780
+ }
781
+ .file-item.completed {
782
+ background-color: #f6ffed;
783
+ border-color: #b7eb8f;
784
+ }
785
+ .file-item.error {
786
+ background-color: #fff2f0;
787
+ border-color: #ffccc7;
788
+ }
789
+ .file-icon-status {
790
+ font-size: 1.5rem;
791
+ min-width: 2rem;
792
+ text-align: center;
793
+ }
794
+ .file-info {
795
+ flex: 1;
796
+ min-width: 0;
797
+ }
798
+ .file-name {
799
+ font-weight: 500;
800
+ color: #333;
801
+ margin-bottom: 0.5rem;
802
+ word-break: break-word;
803
+ }
804
+ .file-details {
805
+ display: flex;
806
+ gap: 1rem;
807
+ font-size: 0.85rem;
808
+ color: #666;
809
+ flex-wrap: wrap;
810
+ }
811
+ .file-size {
812
+ color: #666;
813
+ }
814
+ .file-status {
815
+ color: #1ea7fd;
816
+ font-weight: 500;
817
+ }
818
+ .file-error {
819
+ color: #dc3545;
820
+ font-weight: 500;
821
+ }
822
+ .progress-bar {
823
+ width: 100%;
824
+ height: 4px;
825
+ background-color: #e9ecef;
826
+ border-radius: 2px;
827
+ margin-top: 0.5rem;
828
+ overflow: hidden;
829
+ }
830
+ .progress-fill {
831
+ height: 100%;
832
+ background-color: #1ea7fd;
833
+ transition: width 0.3s ease;
834
+ border-radius: 2px;
835
+ }
836
+ .file-actions {
837
+ display: flex;
838
+ gap: 0.5rem;
839
+ }
840
+ .action-btn {
841
+ background: none;
842
+ border: 1px solid transparent;
843
+ padding: 0.5rem;
844
+ border-radius: 6px;
845
+ cursor: pointer;
846
+ font-size: 1rem;
847
+ transition: all 0.2s ease;
848
+ min-width: 2.5rem;
849
+ height: 2.5rem;
850
+ display: flex;
851
+ align-items: center;
852
+ justify-content: center;
853
+ }
854
+ .action-btn.upload {
855
+ color: #1ea7fd;
856
+ border-color: #1ea7fd;
857
+ }
858
+ .action-btn.upload:hover {
859
+ background-color: #1ea7fd;
860
+ color: white;
861
+ }
862
+ .action-btn.retry {
863
+ color: #fd7e14;
864
+ border-color: #fd7e14;
865
+ }
866
+ .action-btn.retry:hover {
867
+ background-color: #fd7e14;
868
+ color: white;
869
+ }
870
+ .action-btn.remove {
871
+ color: #6e3282;
872
+ border-color: #6e3282;
873
+ }
874
+ .action-btn.remove:hover {
875
+ background-color: #6e3282;
876
+ color: white;
877
+ }
878
+ @media (max-width: 768px) {
879
+ .files-drop-zone {
880
+ padding: 2rem 1rem;
881
+ }
882
+ .files-icon {
883
+ font-size: 3rem;
884
+ }
885
+ .files-drop-text {
886
+ font-size: 1rem;
887
+ }
888
+ .files-summary-stats {
889
+ flex-direction: column;
890
+ gap: 0.5rem;
891
+ }
892
+ .files-summary-actions {
893
+ flex-direction: column;
894
+ }
895
+ .action-button {
896
+ justify-content: center;
897
+ }
898
+ .file-item {
899
+ flex-direction: column;
900
+ align-items: flex-start;
901
+ gap: 0.75rem;
902
+ }
903
+ .file-details {
904
+ flex-direction: column;
905
+ gap: 0.25rem;
906
+ }
907
+ .file-actions {
908
+ align-self: flex-end;
909
+ }
910
+ }
911
+ @media (max-width: 480px) {
912
+ .files-upload {
913
+ padding: 0 0.5rem;
914
+ }
915
+ .files-drop-zone {
916
+ padding: 1.5rem 1rem;
917
+ }
918
+ .file-item {
919
+ padding: 0.75rem;
920
+ }
921
+ }
593
922
 
594
923
  /* src/NewInputComponentStandard/RadioMultipleStandard/RadioMultipleStandard.css */
595
924
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "optimized-react-component-library-xyz123",
3
- "version": "0.0.8",
3
+ "version": "0.1.0",
4
4
  "description": "A modern React component library using TypeScript.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -9,12 +9,12 @@
9
9
  "import": "./dist/index.mjs",
10
10
  "require": "./dist/index.js"
11
11
  },
12
- "./global.css": "./src/global.css"
12
+ "./css": "./src/css/*.css"
13
13
  },
14
14
  "types": "dist/index.d.ts",
15
15
  "files": [
16
16
  "dist",
17
- "src/global.css"
17
+ "./src/css/*.css"
18
18
  ],
19
19
  "scripts": {
20
20
  "build": "tsup src/index.tsx --dts --format esm,cjs --out-dir dist",
@@ -0,0 +1,188 @@
1
+ @media (prefers-color-scheme: dark) {
2
+ /* ---------- GENERAL ---------- */
3
+
4
+ body {
5
+ background-color: #414141;
6
+ color: #ffffff;
7
+ }
8
+
9
+ section,
10
+ .pts-form-step-header {
11
+ background-color: #141414;
12
+ }
13
+
14
+ #main-content a {
15
+ color: #b07cbf;
16
+ }
17
+
18
+ .pts-root-about {
19
+ color: #808080;
20
+ }
21
+
22
+ .pts-root-question input[type='text']:focus,
23
+ .pts-root-question input[type='email']:focus,
24
+ .pts-root-question input[type='tel']:focus {
25
+ border: 0.2rem solid #b07cbf;
26
+ }
27
+
28
+ .errorDot {
29
+ background-color: #d75055;
30
+ }
31
+
32
+ .errorText,
33
+ .pts-root-mandatoryAsterisk {
34
+ color: #d75055;
35
+ }
36
+
37
+ .pts-root-question-input-error-border,
38
+ .pts-root-question-input-error-border,
39
+ .pts-root-question-input-error-border {
40
+ border: 0.15rem solid #d75055 !important;
41
+ }
42
+
43
+ button:focus-visible,
44
+ a:focus-visible,
45
+ input:focus-visible,
46
+ textarea:focus-visible,
47
+ .filePickLabel:focus-visible {
48
+ outline-color: #fff !important;
49
+ box-shadow: 0 0 0 4px #000 !important;
50
+ }
51
+
52
+ .using-mouse input:focus-visible,
53
+ .using-mouse button:focus-visible,
54
+ .using-mouse textarea:focus-visible,
55
+ .using-mouse a:focus-visible,
56
+ .using-mouse .filePickLabel:focus-visible {
57
+ box-shadow: 0 0 0 0px #000 !important;
58
+ }
59
+
60
+ .pts-root-question input[type='text'],
61
+ .pts-root-question input[type='email'],
62
+ .pts-root-question input[type='tel'] {
63
+ border: 1px solid #808080;
64
+ }
65
+
66
+ /* ---------- SERVICE HEADLINE AND BODY ---------- */
67
+
68
+ .pts-moreinfo-list a {
69
+ color: #b07cbf;
70
+ }
71
+
72
+ .pts-moreinfo-list svg {
73
+ background-color: #b07cbf;
74
+ }
75
+
76
+ .pts-moreinfo-list svg path {
77
+ fill: #141414;
78
+ }
79
+
80
+ /* ---------- STEPPER ---------- */
81
+
82
+ .pts-stepperDot {
83
+ background-color: #ffffff;
84
+ color: #141414;
85
+ }
86
+
87
+ .pts-stepperDotActive {
88
+ background-color: #f4bf56;
89
+ }
90
+
91
+ .pts-stepper-step:not(:last-child)::after {
92
+ background-color: #ffffff;
93
+ }
94
+
95
+ .pts-stepperDotDone,
96
+ .pts-stepperDotDone svg path {
97
+ background-color: #b07cbf;
98
+ stroke: #141414;
99
+ }
100
+
101
+ /* ---------- STEPPER BUTTON ---------- */
102
+
103
+ .pts-forwardButton {
104
+ background-color: #ffffff;
105
+ border-color: #ffffff;
106
+ color: #6e3282;
107
+ }
108
+
109
+ .pts-backButton {
110
+ background-color: #ffffff;
111
+ border-color: #ffffff;
112
+ color: #6e3282;
113
+ }
114
+
115
+ .pts-backButton:focus,
116
+ .pts-backButton:hover,
117
+ .pts-forwardButton:focus,
118
+ .pts-forwardButton:hover,
119
+ .btn-upload:focus,
120
+ .btn-upload:hover {
121
+ background-color: #141414;
122
+ border-color: #141414;
123
+ color: #b07cbf;
124
+ }
125
+
126
+ /* ---------- RADIO MULTIPLE ---------- */
127
+
128
+ .pts-radioMultiple-container input[type='radio'] {
129
+ border-color: #808080;
130
+ }
131
+
132
+ .pts-radioMultiple-container input[type='radio']:checked::before {
133
+ background-color: #b07cbf;
134
+ }
135
+
136
+ /* ---------- MULTIPLE CHECKBOXES ---------- */
137
+
138
+ .pts-multipleCheckboxes-container input[type='checkbox'] {
139
+ background-color: #141414;
140
+ border-color: #808080;
141
+ }
142
+
143
+ .pts-multipleCheckboxes-container input[type='checkbox']:checked {
144
+ background-color: #b07cbf;
145
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e") !important;
146
+ }
147
+
148
+ /* ---------- TEXTAREA ---------- */
149
+
150
+ .pts-textArea-container textarea {
151
+ border-color: #808080;
152
+ }
153
+
154
+ .pts-textArea-container textarea:focus {
155
+ border-color: #b07cbf;
156
+ }
157
+
158
+ /* ---------- EDIT PREVIEW LINK ---------- */
159
+
160
+ .pts-editPreviewLink-container button {
161
+ color: #b07cbf;
162
+ }
163
+
164
+ .pts-editPreviewLink-container svg path {
165
+ stroke: #b07cbf;
166
+ }
167
+
168
+ /* ---------- GRANSKA ---------- */
169
+
170
+ .no-answer-preview-page {
171
+ color: #808080;
172
+ }
173
+
174
+ /* ---------- ERROR SUMMARY ---------- */
175
+
176
+ .pts-errorSummary-container {
177
+ border: 0.1rem solid #d75055;
178
+ border-left: 4rem solid #d75055;
179
+ }
180
+
181
+ .pts-errorSummary-container .errorDot {
182
+ color: #d75055;
183
+ }
184
+
185
+ .errorSummary-text {
186
+ color: #d75055 !important;
187
+ }
188
+ }
@@ -0,0 +1,183 @@
1
+ @media (max-width: 1085px) {
2
+ .pts-footer-container {
3
+ height: auto;
4
+ flex-direction: column;
5
+ text-align: left;
6
+ padding: 1.6rem;
7
+ }
8
+
9
+ .pts-footer-logo {
10
+ position: static;
11
+ padding-left: 0;
12
+ margin-bottom: 1.6rem;
13
+ align-self: flex-start;
14
+ }
15
+
16
+ .pts-footer-linkList {
17
+ width: 100%;
18
+ }
19
+
20
+ .pts-footer-linkList ul {
21
+ flex-direction: column;
22
+ gap: 1.6rem;
23
+ padding-top: 0;
24
+ }
25
+
26
+ .pts-footer-linkList a span {
27
+ padding: 0;
28
+ }
29
+
30
+ .pts-footer-container .pts-footer-linkList ul li:not(:last-child)::after {
31
+ display: none;
32
+ }
33
+ }
34
+
35
+ @media (max-width: 750px) {
36
+ #main-content {
37
+ padding-top: 1.6rem;
38
+ padding-bottom: 0;
39
+ }
40
+
41
+ section,
42
+ .pts-form-step-header {
43
+ margin-left: 0;
44
+ margin-right: 0;
45
+ border-radius: 0;
46
+ padding-bottom: 0;
47
+ }
48
+
49
+ /* --- ??? --- */
50
+ .pts-root-categoryDescription,
51
+ .pts-root-stepDescription {
52
+ margin-bottom: 1.6rem;
53
+ }
54
+
55
+ .pts-header-container {
56
+ justify-content: center;
57
+ }
58
+
59
+ .pts-skipLink-container {
60
+ left: 1.8rem;
61
+ }
62
+
63
+ /* ---------- STEPPER ---------- */
64
+
65
+ .pts-stepper-step {
66
+ margin: 0;
67
+ position: relative;
68
+ flex: none;
69
+ }
70
+
71
+ .pts-stepper-step:not(:last-child)::after {
72
+ left: calc(50% + 3rem);
73
+ width: calc(33.33vw - 10rem);
74
+ right: auto;
75
+ }
76
+
77
+ .pts-shortNameInStepper {
78
+ display: none;
79
+ }
80
+
81
+ .pts-stepper-container {
82
+ justify-content: space-between;
83
+ height: 4.2rem;
84
+ }
85
+
86
+ .pts-errorSummary-container {
87
+ margin-bottom: 1.6rem;
88
+ }
89
+
90
+ .pts-stepperButtons-container {
91
+ margin-right: 1.6rem;
92
+ }
93
+
94
+ .pts-radioMultiple-container,
95
+ .pts-multipleCheckboxes-container {
96
+ padding-bottom: 1.6rem;
97
+ }
98
+
99
+ .pts-textArea-container textarea {
100
+ width: 100%;
101
+ box-sizing: border-box;
102
+ }
103
+
104
+ .pts-footer-container {
105
+ height: auto;
106
+ flex-direction: column;
107
+ text-align: left;
108
+ padding: 1.6rem;
109
+ }
110
+
111
+ .pts-footer-logo {
112
+ position: static;
113
+ padding-left: 0;
114
+ margin-bottom: 1.6rem;
115
+ align-self: flex-start;
116
+ }
117
+
118
+ .pts-footer-linkList {
119
+ width: 100%;
120
+ }
121
+
122
+ .pts-footer-linkList ul {
123
+ flex-direction: column;
124
+ gap: 1.6rem;
125
+ padding-top: 0;
126
+ }
127
+
128
+ .pts-footer-linkList a span {
129
+ padding: 0;
130
+ }
131
+
132
+ .pts-footer-container .pts-footer-linkList ul li:not(:last-child)::after {
133
+ display: none;
134
+ }
135
+
136
+ .pts-question-preview {
137
+ flex-direction: column;
138
+ margin-bottom: 1.6rem;
139
+ padding-bottom: 0.8rem;
140
+ }
141
+
142
+ .pts-question-preview h4 {
143
+ margin-bottom: 1.6rem;
144
+ }
145
+
146
+ .pts-root-answer {
147
+ width: 100%;
148
+ margin-bottom: 0;
149
+ }
150
+
151
+ .stepInfoText,
152
+ .desciptionswithheadline {
153
+ margin-bottom: 3.6rem;
154
+ }
155
+
156
+ .pts-root-answer ul {
157
+ padding-left: 1.6rem;
158
+ }
159
+
160
+ .pts-serviceHeadlineAndBody-container {
161
+ margin: 0;
162
+ }
163
+
164
+ .pts-principleOfPublicity-container p {
165
+ margin-top: 0;
166
+ }
167
+
168
+ .pts-serviceHeadlineAndBody-container .pts-moreinfo-list a {
169
+ margin-top: 1.6rem;
170
+ }
171
+
172
+ .pts-footer-container {
173
+ margin-top: 1.6rem;
174
+ }
175
+ }
176
+
177
+ @media (max-width: 480px) {
178
+ .pts-stepper-step:not(:last-child)::after {
179
+ left: calc(50% + 2rem) !important;
180
+ width: calc(33.33vw - 7.7rem) !important;
181
+ right: auto !important;
182
+ }
183
+ }
@@ -1,6 +1,3 @@
1
- /* Globala stilar för alla komponenter */
2
- @import url('https://assets.soracom.io/fonts/aeonik/Aeonik.css');
3
-
4
1
  /* ---------- GENERAL ---------- */
5
2
 
6
3
  html {
@@ -48,7 +45,7 @@ h2 {
48
45
  }
49
46
 
50
47
  h3 {
51
- font-size: 2rem;
48
+ font-size: 1.6rem;
52
49
  }
53
50
 
54
51
  h4 {
@@ -252,6 +249,7 @@ textarea:focus-visible,
252
249
  .pts-stepper-container {
253
250
  display: flex;
254
251
  width: 100%;
252
+ margin-top: 2rem;
255
253
  }
256
254
 
257
255
  .pts-stepper-step {
@@ -566,8 +564,8 @@ textarea:focus-visible,
566
564
  margin-top: 0;
567
565
  }
568
566
 
569
- .pts-question-preview h4,
570
- .addFilesPreviewContainer h4 {
567
+ .pts-question-preview h3,
568
+ .addFilesPreviewContainer h3 {
571
569
  margin-bottom: 8px;
572
570
  width: 33%;
573
571
  padding-right: 3.6rem;
@@ -718,4 +716,409 @@ textarea:focus-visible,
718
716
 
719
717
  .errorSummary-text {
720
718
  color: #8e0039;
721
- }
719
+ }
720
+
721
+ /* ---------- FILE UPLOAD ---------- */
722
+ .files-upload {
723
+ width: 100%;
724
+ max-width: 800px;
725
+ margin: 0 auto;
726
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
727
+ }
728
+
729
+ /* Drop Zone */
730
+ .files-drop-zone {
731
+ border: 2px dashed #6e3282;
732
+ border-radius: 12px;
733
+ padding: 3rem 2rem;
734
+ text-align: center;
735
+ transition: all 0.3s ease;
736
+ background-color: #fafafa;
737
+ cursor: pointer;
738
+ position: relative;
739
+ overflow: hidden;
740
+ }
741
+
742
+ .files-drop-zone:hover {
743
+ border-color: #6e3282;
744
+ background-color: #f5ebf8;
745
+ transform: translateY(-2px);
746
+ box-shadow: 0 4px 12px rgba(220, 148, 253, 0.15);
747
+ }
748
+
749
+ .files-drop-zone.drag-active {
750
+ border-color: #6e3282;
751
+ background-color: #f5ebf8;
752
+ transform: scale(1.02);
753
+ box-shadow: 0 8px 25px rgba(30, 167, 253, 0.2);
754
+ }
755
+
756
+ .files-drop-zone:focus {
757
+ /* border-color: #6e3282;
758
+ background-color: #f5ebf8;
759
+ transform: translateY(-2px);
760
+ box-shadow: 0 4px 12px rgba(220, 148, 253, 0.15);
761
+ transform: translateY(-3px);
762
+
763
+ animation: focusPulse 1s ease-in-out infinite;
764
+ box-shadow: inset 0 0 0 4px #6e3282;
765
+
766
+ border: none; */
767
+ border: 0.2rem solid #6e3282;
768
+ }
769
+
770
+ .files-drop-zone:focus-visible {
771
+ outline-offset: 0 !important;
772
+ outline-style: solid !important;
773
+ outline-color: #fff !important;
774
+ outline-width: 2px !important;
775
+ box-shadow: 0 0 0 4px #000 !important;
776
+ }
777
+
778
+ .files-drop-content {
779
+ pointer-events: none;
780
+ }
781
+
782
+ .files-icon {
783
+ font-size: 4rem;
784
+ margin-bottom: 1rem;
785
+ opacity: 0.7;
786
+ animation: float 3s ease-in-out infinite;
787
+ }
788
+
789
+ @keyframes float {
790
+ 0%,
791
+ 100% {
792
+ transform: translateY(0px);
793
+ }
794
+ 50% {
795
+ transform: translateY(-10px);
796
+ }
797
+ }
798
+
799
+ .files-drop-text {
800
+ font-size: 1.2rem;
801
+ margin-bottom: 0.5rem;
802
+ color: #333;
803
+ font-weight: 500;
804
+ }
805
+
806
+ .files-drop-info {
807
+ font-size: 0.9rem;
808
+ color: #666;
809
+ margin: 0;
810
+ }
811
+
812
+ .files-allowed-types {
813
+ font-size: 0.85rem;
814
+ color: #555;
815
+ margin: 0.75rem 0 0 0;
816
+ padding: 0.5rem;
817
+ background-color: rgba(146, 64, 252, 0.1);
818
+ border-radius: 6px;
819
+ border-left: 3px solid #ce95e0;
820
+ }
821
+
822
+ .files-allowed-types strong {
823
+ color: #6e3282;
824
+ }
825
+
826
+ .files-input-hidden {
827
+ display: none;
828
+ }
829
+
830
+ /* Summary */
831
+ .files-summary {
832
+ margin: 1.5rem 0;
833
+ padding: 1rem;
834
+ background-color: #f8f9fa;
835
+ border-radius: 8px;
836
+ border: 1px solid #e9ecef;
837
+ }
838
+
839
+ .files-summary-stats {
840
+ display: flex;
841
+ gap: 1rem;
842
+ margin-bottom: 1rem;
843
+ flex-wrap: wrap;
844
+ }
845
+
846
+ .stat {
847
+ padding: 0.5rem 1rem;
848
+ border-radius: 20px;
849
+ background-color: #e9ecef;
850
+ font-size: 0.9rem;
851
+ display: flex;
852
+ align-items: center;
853
+ gap: 0.5rem;
854
+ }
855
+
856
+ .stat.pending {
857
+ background-color: #fff3cd;
858
+ color: #856404;
859
+ }
860
+
861
+ .stat.completed {
862
+ background-color: #d1e7dd;
863
+ color: #0a3622;
864
+ }
865
+
866
+ .stat.error {
867
+ background-color: #f8d7da;
868
+ color: #721c24;
869
+ }
870
+
871
+ .files-summary-actions {
872
+ display: flex;
873
+ gap: 0.5rem;
874
+ flex-wrap: wrap;
875
+ }
876
+
877
+ .action-button {
878
+ padding: 0.75rem 1.5rem;
879
+ border: none;
880
+ border-radius: 6px;
881
+ cursor: pointer;
882
+ font-weight: 500;
883
+ transition: all 0.2s ease;
884
+ display: flex;
885
+ align-items: center;
886
+ gap: 0.5rem;
887
+ }
888
+
889
+ .action-button.primary {
890
+ background-color: #1ea7fd;
891
+ color: white;
892
+ }
893
+
894
+ .action-button.primary:hover {
895
+ background-color: #1890ff;
896
+ transform: translateY(-1px);
897
+ }
898
+
899
+ .action-button.secondary {
900
+ background-color: #6c757d;
901
+ color: white;
902
+ }
903
+
904
+ .action-button.secondary:hover {
905
+ background-color: #5a6268;
906
+ transform: translateY(-1px);
907
+ }
908
+
909
+ /* Files List */
910
+ .files-list {
911
+ margin-top: 1.5rem;
912
+ }
913
+
914
+ .files-list h4 {
915
+ margin-bottom: 1rem;
916
+ color: #333;
917
+ font-size: 1.1rem;
918
+ font-weight: 600;
919
+ }
920
+
921
+ .files-items {
922
+ list-style: none;
923
+ padding: 0;
924
+ margin: 0;
925
+ }
926
+
927
+ .file-item {
928
+ display: flex;
929
+ align-items: center;
930
+ gap: 1rem;
931
+ padding: 1rem;
932
+ border: 1px solid #e9ecef;
933
+ border-radius: 8px;
934
+ margin-bottom: 0.75rem;
935
+ background-color: white;
936
+ transition: all 0.2s ease;
937
+ position: relative;
938
+ }
939
+
940
+ .file-item:hover {
941
+ background-color: #f8f9fa;
942
+ border-color: #dee2e6;
943
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
944
+ }
945
+
946
+ .file-item.uploading {
947
+ background-color: #e6f7ff;
948
+ border-color: #91d5ff;
949
+ }
950
+
951
+ .file-item.completed {
952
+ background-color: #f6ffed;
953
+ border-color: #b7eb8f;
954
+ }
955
+
956
+ .file-item.error {
957
+ background-color: #fff2f0;
958
+ border-color: #ffccc7;
959
+ }
960
+
961
+ .file-icon-status {
962
+ font-size: 1.5rem;
963
+ min-width: 2rem;
964
+ text-align: center;
965
+ }
966
+
967
+ .file-info {
968
+ flex: 1;
969
+ min-width: 0;
970
+ }
971
+
972
+ .file-name {
973
+ font-weight: 500;
974
+ color: #333;
975
+ margin-bottom: 0.5rem;
976
+ word-break: break-word;
977
+ }
978
+
979
+ .file-details {
980
+ display: flex;
981
+ gap: 1rem;
982
+ font-size: 0.85rem;
983
+ color: #666;
984
+ flex-wrap: wrap;
985
+ }
986
+
987
+ .file-size {
988
+ color: #666;
989
+ }
990
+
991
+ .file-status {
992
+ color: #1ea7fd;
993
+ font-weight: 500;
994
+ }
995
+
996
+ .file-error {
997
+ color: #dc3545;
998
+ font-weight: 500;
999
+ }
1000
+
1001
+ .progress-bar {
1002
+ width: 100%;
1003
+ height: 4px;
1004
+ background-color: #e9ecef;
1005
+ border-radius: 2px;
1006
+ margin-top: 0.5rem;
1007
+ overflow: hidden;
1008
+ }
1009
+
1010
+ .progress-fill {
1011
+ height: 100%;
1012
+ background-color: #1ea7fd;
1013
+ transition: width 0.3s ease;
1014
+ border-radius: 2px;
1015
+ }
1016
+
1017
+ .file-actions {
1018
+ display: flex;
1019
+ gap: 0.5rem;
1020
+ }
1021
+
1022
+ .action-btn {
1023
+ background: none;
1024
+ border: 1px solid transparent;
1025
+ padding: 0.5rem;
1026
+ border-radius: 6px;
1027
+ cursor: pointer;
1028
+ font-size: 1rem;
1029
+ transition: all 0.2s ease;
1030
+ min-width: 2.5rem;
1031
+ height: 2.5rem;
1032
+ display: flex;
1033
+ align-items: center;
1034
+ justify-content: center;
1035
+ }
1036
+
1037
+ .action-btn.upload {
1038
+ color: #1ea7fd;
1039
+ border-color: #1ea7fd;
1040
+ }
1041
+
1042
+ .action-btn.upload:hover {
1043
+ background-color: #1ea7fd;
1044
+ color: white;
1045
+ }
1046
+
1047
+ .action-btn.retry {
1048
+ color: #fd7e14;
1049
+ border-color: #fd7e14;
1050
+ }
1051
+
1052
+ .action-btn.retry:hover {
1053
+ background-color: #fd7e14;
1054
+ color: white;
1055
+ }
1056
+
1057
+ .action-btn.remove {
1058
+ color: #6e3282;
1059
+ border-color: #6e3282;
1060
+ }
1061
+
1062
+ .action-btn.remove:hover {
1063
+ background-color: #6e3282;
1064
+ color: white;
1065
+ }
1066
+
1067
+ /* Responsive Design */
1068
+ @media (max-width: 768px) {
1069
+ .files-drop-zone {
1070
+ padding: 2rem 1rem;
1071
+ }
1072
+
1073
+ .files-icon {
1074
+ font-size: 3rem;
1075
+ }
1076
+
1077
+ .files-drop-text {
1078
+ font-size: 1rem;
1079
+ }
1080
+
1081
+ .files-summary-stats {
1082
+ flex-direction: column;
1083
+ gap: 0.5rem;
1084
+ }
1085
+
1086
+ .files-summary-actions {
1087
+ flex-direction: column;
1088
+ }
1089
+
1090
+ .action-button {
1091
+ justify-content: center;
1092
+ }
1093
+
1094
+ .file-item {
1095
+ flex-direction: column;
1096
+ align-items: flex-start;
1097
+ gap: 0.75rem;
1098
+ }
1099
+
1100
+ .file-details {
1101
+ flex-direction: column;
1102
+ gap: 0.25rem;
1103
+ }
1104
+
1105
+ .file-actions {
1106
+ align-self: flex-end;
1107
+ }
1108
+ }
1109
+
1110
+ @media (max-width: 480px) {
1111
+ .files-upload {
1112
+ padding: 0 0.5rem;
1113
+ }
1114
+
1115
+ .files-drop-zone {
1116
+ padding: 1.5rem 1rem;
1117
+ }
1118
+
1119
+ .file-item {
1120
+ padding: 0.75rem;
1121
+ }
1122
+ }
1123
+
1124
+ /* ---------- END FILE UPLOAD ---------- */