@visns-studio/visns-components 5.11.3 → 5.11.5
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/README.md +915 -11
- package/package.json +1 -1
- package/src/components/crm/AssociationManager.jsx +151 -33
- package/src/components/crm/BusinessCardOcr.jsx +190 -6
- package/src/components/crm/Field.jsx +27 -0
- package/src/components/crm/Navigation.jsx +65 -5
- package/src/components/crm/generic/GenericReport.jsx +1457 -434
- package/src/components/crm/generic/styles/GenericReport.module.scss +598 -24
- package/src/components/crm/styles/BusinessCardOcr.module.scss +362 -94
- package/src/components/crm/styles/Navigation.module.scss +95 -23
|
@@ -126,6 +126,9 @@
|
|
|
126
126
|
border: 1px solid rgba(var(--paragraph-color-rgb, 0, 0, 0), 0.1);
|
|
127
127
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
128
128
|
margin-bottom: 1rem;
|
|
129
|
+
display: flex;
|
|
130
|
+
flex-direction: column;
|
|
131
|
+
gap: 0.5rem;
|
|
129
132
|
|
|
130
133
|
p {
|
|
131
134
|
margin: 0;
|
|
@@ -135,62 +138,91 @@
|
|
|
135
138
|
}
|
|
136
139
|
}
|
|
137
140
|
|
|
141
|
+
.autoCaptureToggle {
|
|
142
|
+
background: rgba(var(--paragraph-color-rgb, 0, 0, 0), 0.05);
|
|
143
|
+
color: var(--paragraph-color, #333);
|
|
144
|
+
border: 1px solid rgba(var(--paragraph-color-rgb, 0, 0, 0), 0.2);
|
|
145
|
+
border-radius: var(--br, 6px);
|
|
146
|
+
padding: 0.375rem 0.75rem;
|
|
147
|
+
font-size: 0.8rem;
|
|
148
|
+
font-weight: 600;
|
|
149
|
+
cursor: pointer;
|
|
150
|
+
transition: all 0.2s ease;
|
|
151
|
+
display: inline-flex;
|
|
152
|
+
align-items: center;
|
|
153
|
+
gap: 0.25rem;
|
|
154
|
+
|
|
155
|
+
&:hover {
|
|
156
|
+
background: rgba(var(--paragraph-color-rgb, 0, 0, 0), 0.1);
|
|
157
|
+
border-color: var(--primary-color, #007bff);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
&.active {
|
|
161
|
+
background: var(--primary-color, #007bff);
|
|
162
|
+
color: white;
|
|
163
|
+
border-color: var(--primary-color, #007bff);
|
|
164
|
+
|
|
165
|
+
&:hover {
|
|
166
|
+
background: var(--primary-hover, #0056b3);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
138
171
|
.cameraControls {
|
|
139
172
|
display: flex;
|
|
140
173
|
flex-direction: column;
|
|
141
|
-
gap:
|
|
142
|
-
padding:
|
|
174
|
+
gap: 1.5rem;
|
|
175
|
+
padding: 1.5rem;
|
|
143
176
|
}
|
|
144
177
|
|
|
145
178
|
.captureButton {
|
|
146
179
|
background: var(--primary-color, #007bff);
|
|
147
180
|
color: white;
|
|
148
181
|
border: none;
|
|
149
|
-
border-radius:
|
|
150
|
-
|
|
151
|
-
|
|
182
|
+
border-radius: 12px;
|
|
183
|
+
padding: 1rem 1.5rem;
|
|
184
|
+
min-width: 120px;
|
|
185
|
+
height: 56px;
|
|
152
186
|
display: flex;
|
|
153
|
-
flex-direction: column;
|
|
154
187
|
align-items: center;
|
|
155
188
|
justify-content: center;
|
|
156
|
-
gap: 0.
|
|
157
|
-
font-size: 0.
|
|
189
|
+
gap: 0.5rem;
|
|
190
|
+
font-size: 0.9rem;
|
|
158
191
|
font-weight: 600;
|
|
159
192
|
cursor: pointer;
|
|
160
193
|
transition: all 0.2s ease;
|
|
161
|
-
box-shadow: 0 4px 12px rgba(var(--primary-color-rgb, 0, 123, 255), 0.
|
|
194
|
+
box-shadow: 0 4px 12px rgba(var(--primary-color-rgb, 0, 123, 255), 0.25);
|
|
195
|
+
position: relative;
|
|
162
196
|
|
|
163
197
|
&:hover:not(:disabled) {
|
|
164
198
|
background: var(--primary-hover, #0056b3);
|
|
165
|
-
transform:
|
|
166
|
-
box-shadow: 0 6px
|
|
199
|
+
transform: translateY(-2px);
|
|
200
|
+
box-shadow: 0 6px 20px rgba(var(--primary-color-rgb, 0, 123, 255), 0.35);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
&:active {
|
|
204
|
+
transform: translateY(0);
|
|
205
|
+
transition: transform 0.1s ease;
|
|
167
206
|
}
|
|
168
207
|
|
|
169
208
|
&:disabled {
|
|
170
209
|
opacity: 0.6;
|
|
171
210
|
cursor: not-allowed;
|
|
211
|
+
transform: none;
|
|
212
|
+
box-shadow: 0 2px 8px rgba(var(--primary-color-rgb, 0, 123, 255), 0.15);
|
|
172
213
|
}
|
|
173
214
|
|
|
174
215
|
&.focusing {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
&:hover {
|
|
187
|
-
background: var(--primary-color-dark, #0056b3);
|
|
188
|
-
transform: translateY(-1px);
|
|
189
|
-
box-shadow: 0 2px 8px rgba(var(--primary-color-rgb, 0, 123, 255), 0.25);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
&:active {
|
|
193
|
-
transform: translateY(0);
|
|
216
|
+
background: var(--primary-hover, #0056b3);
|
|
217
|
+
|
|
218
|
+
&::after {
|
|
219
|
+
content: '';
|
|
220
|
+
position: absolute;
|
|
221
|
+
inset: -2px;
|
|
222
|
+
border: 2px solid var(--primary-color, #007bff);
|
|
223
|
+
border-radius: 14px;
|
|
224
|
+
animation: focusPulse 1.5s ease-in-out infinite;
|
|
225
|
+
}
|
|
194
226
|
}
|
|
195
227
|
}
|
|
196
228
|
|
|
@@ -570,23 +602,35 @@
|
|
|
570
602
|
}
|
|
571
603
|
|
|
572
604
|
.secondaryButton {
|
|
573
|
-
background:
|
|
605
|
+
background: rgba(255, 255, 255, 0.95);
|
|
574
606
|
color: var(--paragraph-color, #333);
|
|
575
|
-
border: 1px solid rgba(var(--paragraph-color-rgb, 0, 0, 0), 0.
|
|
576
|
-
border-radius:
|
|
577
|
-
padding: 0.
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
cursor: pointer;
|
|
607
|
+
border: 1px solid rgba(var(--paragraph-color-rgb, 0, 0, 0), 0.15);
|
|
608
|
+
border-radius: 12px;
|
|
609
|
+
padding: 0.75rem 1rem;
|
|
610
|
+
min-width: 100px;
|
|
611
|
+
height: 56px;
|
|
581
612
|
display: flex;
|
|
582
613
|
align-items: center;
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
614
|
+
justify-content: center;
|
|
615
|
+
gap: 0.5rem;
|
|
616
|
+
font-size: 0.85rem;
|
|
617
|
+
font-weight: 600;
|
|
618
|
+
cursor: pointer;
|
|
619
|
+
transition: all 0.2s ease;
|
|
620
|
+
backdrop-filter: blur(12px);
|
|
621
|
+
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
|
|
622
|
+
|
|
586
623
|
&:hover {
|
|
587
|
-
background:
|
|
624
|
+
background: rgba(255, 255, 255, 1);
|
|
588
625
|
border-color: var(--primary-color, #007bff);
|
|
589
|
-
|
|
626
|
+
color: var(--primary-color, #007bff);
|
|
627
|
+
transform: translateY(-2px);
|
|
628
|
+
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
&:active {
|
|
632
|
+
transform: translateY(0);
|
|
633
|
+
transition: transform 0.1s ease;
|
|
590
634
|
}
|
|
591
635
|
}
|
|
592
636
|
|
|
@@ -605,16 +649,68 @@
|
|
|
605
649
|
.cameraControls {
|
|
606
650
|
flex-direction: column;
|
|
607
651
|
width: 100%;
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
652
|
+
gap: 1.5rem;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
.controlsTop {
|
|
656
|
+
padding: 0 0.5rem;
|
|
613
657
|
}
|
|
614
658
|
|
|
615
659
|
.captureButton {
|
|
616
|
-
|
|
617
|
-
|
|
660
|
+
min-width: 100px;
|
|
661
|
+
height: 48px;
|
|
662
|
+
font-size: 0.8rem;
|
|
663
|
+
padding: 0.75rem 1rem;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
.controlButton {
|
|
667
|
+
min-width: 44px;
|
|
668
|
+
height: 44px;
|
|
669
|
+
padding: 0.625rem;
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
.secondaryButton {
|
|
673
|
+
min-width: 90px;
|
|
674
|
+
height: 48px;
|
|
675
|
+
font-size: 0.8rem;
|
|
676
|
+
padding: 0.75rem 0.875rem;
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
.controlsBottom {
|
|
680
|
+
gap: 0.75rem;
|
|
681
|
+
padding: 0.75rem;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
.countdownDisplay {
|
|
685
|
+
padding: 1rem;
|
|
686
|
+
|
|
687
|
+
.countdownNumber {
|
|
688
|
+
font-size: 2rem;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
.countdownText {
|
|
692
|
+
font-size: 0.7rem;
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
.focusStatus {
|
|
697
|
+
min-width: 160px;
|
|
698
|
+
padding: 0.5rem 0.75rem;
|
|
699
|
+
bottom: -35px;
|
|
700
|
+
|
|
701
|
+
.focusText {
|
|
702
|
+
font-size: 0.65rem;
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
.autoCaptureToggle {
|
|
707
|
+
font-size: 0.75rem;
|
|
708
|
+
padding: 0.375rem 0.75rem;
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
.cameraControls {
|
|
712
|
+
gap: 1rem;
|
|
713
|
+
padding: 1rem;
|
|
618
714
|
}
|
|
619
715
|
|
|
620
716
|
.previewControls,
|
|
@@ -938,68 +1034,76 @@
|
|
|
938
1034
|
// Enhanced Camera UI Styles
|
|
939
1035
|
.focusFrame {
|
|
940
1036
|
position: relative;
|
|
941
|
-
width:
|
|
942
|
-
max-width:
|
|
1037
|
+
width: 85%;
|
|
1038
|
+
max-width: 400px;
|
|
943
1039
|
aspect-ratio: 1.6; // Business card ratio
|
|
944
|
-
border: 2px solid rgba(255, 255, 255, 0.
|
|
945
|
-
border-radius:
|
|
1040
|
+
border: 2px solid rgba(255, 255, 255, 0.4);
|
|
1041
|
+
border-radius: 16px;
|
|
946
1042
|
background: rgba(0, 0, 0, 0.05);
|
|
947
1043
|
display: flex;
|
|
948
1044
|
align-items: center;
|
|
949
1045
|
justify-content: center;
|
|
1046
|
+
transition: all 0.3s ease;
|
|
950
1047
|
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
1048
|
+
&.focused {
|
|
1049
|
+
border-color: #22c55e;
|
|
1050
|
+
background: rgba(34, 197, 94, 0.1);
|
|
1051
|
+
box-shadow: 0 0 0 4px rgba(34, 197, 94, 0.2);
|
|
1052
|
+
|
|
1053
|
+
.focusCorner {
|
|
1054
|
+
border-color: #22c55e;
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
&.countingDown {
|
|
1059
|
+
border-color: #f59e0b;
|
|
1060
|
+
background: rgba(245, 158, 11, 0.1);
|
|
1061
|
+
box-shadow: 0 0 0 4px rgba(245, 158, 11, 0.2);
|
|
1062
|
+
|
|
1063
|
+
.focusCorner {
|
|
1064
|
+
border-color: #f59e0b;
|
|
1065
|
+
}
|
|
962
1066
|
}
|
|
963
1067
|
}
|
|
964
1068
|
|
|
965
1069
|
.focusCorner {
|
|
966
1070
|
position: absolute;
|
|
967
|
-
width:
|
|
968
|
-
height:
|
|
969
|
-
border:
|
|
1071
|
+
width: 24px;
|
|
1072
|
+
height: 24px;
|
|
1073
|
+
border: 2px solid rgba(255, 255, 255, 0.6);
|
|
970
1074
|
background: transparent;
|
|
971
|
-
|
|
1075
|
+
transition: all 0.3s ease;
|
|
972
1076
|
|
|
973
1077
|
&.topLeft {
|
|
974
|
-
top: -
|
|
975
|
-
left: -
|
|
1078
|
+
top: -12px;
|
|
1079
|
+
left: -12px;
|
|
976
1080
|
border-right: none;
|
|
977
1081
|
border-bottom: none;
|
|
978
|
-
border-radius:
|
|
1082
|
+
border-radius: 8px 0 0 0;
|
|
979
1083
|
}
|
|
980
1084
|
|
|
981
1085
|
&.topRight {
|
|
982
|
-
top: -
|
|
983
|
-
right: -
|
|
1086
|
+
top: -12px;
|
|
1087
|
+
right: -12px;
|
|
984
1088
|
border-left: none;
|
|
985
1089
|
border-bottom: none;
|
|
986
|
-
border-radius: 0
|
|
1090
|
+
border-radius: 0 8px 0 0;
|
|
987
1091
|
}
|
|
988
1092
|
|
|
989
1093
|
&.bottomLeft {
|
|
990
|
-
bottom: -
|
|
991
|
-
left: -
|
|
1094
|
+
bottom: -12px;
|
|
1095
|
+
left: -12px;
|
|
992
1096
|
border-right: none;
|
|
993
1097
|
border-top: none;
|
|
994
|
-
border-radius: 0 0 0
|
|
1098
|
+
border-radius: 0 0 0 8px;
|
|
995
1099
|
}
|
|
996
1100
|
|
|
997
1101
|
&.bottomRight {
|
|
998
|
-
bottom: -
|
|
999
|
-
right: -
|
|
1102
|
+
bottom: -12px;
|
|
1103
|
+
right: -12px;
|
|
1000
1104
|
border-left: none;
|
|
1001
1105
|
border-top: none;
|
|
1002
|
-
border-radius: 0 0
|
|
1106
|
+
border-radius: 0 0 8px 0;
|
|
1003
1107
|
}
|
|
1004
1108
|
}
|
|
1005
1109
|
|
|
@@ -1046,57 +1150,221 @@
|
|
|
1046
1150
|
|
|
1047
1151
|
.controlsTop {
|
|
1048
1152
|
display: flex;
|
|
1049
|
-
justify-content:
|
|
1153
|
+
justify-content: center;
|
|
1050
1154
|
align-items: center;
|
|
1051
|
-
|
|
1155
|
+
gap: 1rem;
|
|
1156
|
+
padding: 0;
|
|
1052
1157
|
}
|
|
1053
1158
|
|
|
1054
1159
|
.controlsBottom {
|
|
1055
1160
|
display: flex;
|
|
1056
|
-
justify-content:
|
|
1161
|
+
justify-content: center;
|
|
1057
1162
|
align-items: center;
|
|
1058
1163
|
gap: 1rem;
|
|
1164
|
+
padding: 1rem;
|
|
1165
|
+
background: rgba(255, 255, 255, 0.05);
|
|
1166
|
+
border-radius: 16px;
|
|
1167
|
+
backdrop-filter: blur(10px);
|
|
1168
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
1059
1169
|
}
|
|
1060
1170
|
|
|
1061
1171
|
.controlButton {
|
|
1062
|
-
background: rgba(
|
|
1063
|
-
color:
|
|
1064
|
-
border:
|
|
1065
|
-
border-radius:
|
|
1066
|
-
|
|
1172
|
+
background: rgba(255, 255, 255, 0.9);
|
|
1173
|
+
color: var(--paragraph-color, #333);
|
|
1174
|
+
border: 1px solid rgba(var(--paragraph-color-rgb, 0, 0, 0), 0.15);
|
|
1175
|
+
border-radius: 8px;
|
|
1176
|
+
padding: 0.75rem;
|
|
1177
|
+
min-width: 48px;
|
|
1067
1178
|
height: 48px;
|
|
1068
1179
|
display: flex;
|
|
1069
1180
|
align-items: center;
|
|
1070
1181
|
justify-content: center;
|
|
1071
1182
|
cursor: pointer;
|
|
1072
1183
|
transition: all 0.2s ease;
|
|
1073
|
-
backdrop-filter: blur(
|
|
1184
|
+
backdrop-filter: blur(12px);
|
|
1185
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
1074
1186
|
|
|
1075
1187
|
&:hover {
|
|
1076
|
-
background: rgba(
|
|
1077
|
-
|
|
1188
|
+
background: rgba(255, 255, 255, 1);
|
|
1189
|
+
border-color: var(--primary-color, #007bff);
|
|
1190
|
+
color: var(--primary-color, #007bff);
|
|
1191
|
+
transform: translateY(-1px);
|
|
1192
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
&:active {
|
|
1196
|
+
transform: translateY(0);
|
|
1197
|
+
transition: transform 0.1s ease;
|
|
1078
1198
|
}
|
|
1079
1199
|
|
|
1080
1200
|
&.active {
|
|
1081
1201
|
background: var(--primary-color, #007bff);
|
|
1202
|
+
border-color: var(--primary-color, #007bff);
|
|
1082
1203
|
color: white;
|
|
1204
|
+
box-shadow: 0 3px 10px rgba(var(--primary-color-rgb, 0, 123, 255), 0.3);
|
|
1083
1205
|
|
|
1084
1206
|
&:hover {
|
|
1085
1207
|
background: var(--primary-hover, #0056b3);
|
|
1208
|
+
border-color: var(--primary-hover, #0056b3);
|
|
1209
|
+
color: white;
|
|
1210
|
+
box-shadow: 0 4px 14px rgba(var(--primary-color-rgb, 0, 123, 255), 0.4);
|
|
1086
1211
|
}
|
|
1087
1212
|
}
|
|
1088
1213
|
}
|
|
1089
1214
|
|
|
1090
|
-
|
|
1091
|
-
width: 48px; // Same as controlButton for balance
|
|
1092
|
-
}
|
|
1215
|
+
// Remove placeholder - not needed with centered layout
|
|
1093
1216
|
|
|
1094
1217
|
@keyframes pulse {
|
|
1095
1218
|
0%, 100% { opacity: 0; transform: scale(1); }
|
|
1096
1219
|
50% { opacity: 0.3; transform: scale(1.02); }
|
|
1097
1220
|
}
|
|
1098
1221
|
|
|
1222
|
+
@keyframes focusPulse {
|
|
1223
|
+
0%, 100% {
|
|
1224
|
+
transform: scale(1);
|
|
1225
|
+
box-shadow: 0 4px 20px rgba(var(--primary-color-rgb, 0, 123, 255), 0.4);
|
|
1226
|
+
}
|
|
1227
|
+
50% {
|
|
1228
|
+
transform: scale(1.02);
|
|
1229
|
+
box-shadow: 0 6px 25px rgba(var(--primary-color-rgb, 0, 123, 255), 0.6);
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
@keyframes ringPulse {
|
|
1234
|
+
0%, 100% {
|
|
1235
|
+
opacity: 0.3;
|
|
1236
|
+
transform: scale(1);
|
|
1237
|
+
}
|
|
1238
|
+
50% {
|
|
1239
|
+
opacity: 0.8;
|
|
1240
|
+
transform: scale(1.1);
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1099
1244
|
@keyframes spin {
|
|
1100
1245
|
from { transform: rotate(0deg); }
|
|
1101
1246
|
to { transform: rotate(360deg); }
|
|
1102
1247
|
}
|
|
1248
|
+
|
|
1249
|
+
@keyframes focusedPulse {
|
|
1250
|
+
0%, 100% {
|
|
1251
|
+
opacity: 0.8;
|
|
1252
|
+
transform: scale(1);
|
|
1253
|
+
}
|
|
1254
|
+
50% {
|
|
1255
|
+
opacity: 1;
|
|
1256
|
+
transform: scale(1.02);
|
|
1257
|
+
}
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
@keyframes countdownPulse {
|
|
1261
|
+
0%, 100% {
|
|
1262
|
+
transform: scale(1);
|
|
1263
|
+
box-shadow: 0 0 0 0 rgba(255, 152, 0, 0.7);
|
|
1264
|
+
}
|
|
1265
|
+
50% {
|
|
1266
|
+
transform: scale(1.02);
|
|
1267
|
+
box-shadow: 0 0 0 10px rgba(255, 152, 0, 0);
|
|
1268
|
+
}
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
// Countdown Display
|
|
1272
|
+
.countdownDisplay {
|
|
1273
|
+
position: absolute;
|
|
1274
|
+
top: 50%;
|
|
1275
|
+
left: 50%;
|
|
1276
|
+
transform: translate(-50%, -50%);
|
|
1277
|
+
background: rgba(0, 0, 0, 0.9);
|
|
1278
|
+
color: white;
|
|
1279
|
+
border-radius: 16px;
|
|
1280
|
+
padding: 1.5rem;
|
|
1281
|
+
display: flex;
|
|
1282
|
+
flex-direction: column;
|
|
1283
|
+
align-items: center;
|
|
1284
|
+
justify-content: center;
|
|
1285
|
+
backdrop-filter: blur(10px);
|
|
1286
|
+
border: 2px solid #f59e0b;
|
|
1287
|
+
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
|
|
1288
|
+
z-index: 10;
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
.countdownNumber {
|
|
1292
|
+
font-size: 2.5rem;
|
|
1293
|
+
font-weight: 700;
|
|
1294
|
+
line-height: 1;
|
|
1295
|
+
margin-bottom: 0.5rem;
|
|
1296
|
+
}
|
|
1297
|
+
|
|
1298
|
+
.countdownText {
|
|
1299
|
+
font-size: 0.75rem;
|
|
1300
|
+
font-weight: 500;
|
|
1301
|
+
text-transform: uppercase;
|
|
1302
|
+
letter-spacing: 0.5px;
|
|
1303
|
+
opacity: 0.8;
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
@keyframes countdownScale {
|
|
1307
|
+
0%, 100% { transform: translate(-50%, -50%) scale(1); }
|
|
1308
|
+
50% { transform: translate(-50%, -50%) scale(1.05); }
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
// Focus Status
|
|
1312
|
+
.focusStatus {
|
|
1313
|
+
position: absolute;
|
|
1314
|
+
bottom: -40px;
|
|
1315
|
+
left: 50%;
|
|
1316
|
+
transform: translateX(-50%);
|
|
1317
|
+
display: flex;
|
|
1318
|
+
flex-direction: column;
|
|
1319
|
+
align-items: center;
|
|
1320
|
+
gap: 0.5rem;
|
|
1321
|
+
background: rgba(0, 0, 0, 0.9);
|
|
1322
|
+
color: white;
|
|
1323
|
+
padding: 0.75rem 1rem;
|
|
1324
|
+
border-radius: 12px;
|
|
1325
|
+
backdrop-filter: blur(10px);
|
|
1326
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
|
|
1327
|
+
min-width: 180px;
|
|
1328
|
+
text-align: center;
|
|
1329
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
1330
|
+
}
|
|
1331
|
+
|
|
1332
|
+
.focusBar {
|
|
1333
|
+
width: 100%;
|
|
1334
|
+
height: 4px;
|
|
1335
|
+
background: rgba(255, 255, 255, 0.2);
|
|
1336
|
+
border-radius: 2px;
|
|
1337
|
+
overflow: hidden;
|
|
1338
|
+
|
|
1339
|
+
&.good {
|
|
1340
|
+
background: rgba(34, 197, 94, 0.3);
|
|
1341
|
+
}
|
|
1342
|
+
|
|
1343
|
+
&.poor {
|
|
1344
|
+
background: rgba(239, 68, 68, 0.3);
|
|
1345
|
+
}
|
|
1346
|
+
}
|
|
1347
|
+
|
|
1348
|
+
.focusBarFill {
|
|
1349
|
+
height: 100%;
|
|
1350
|
+
background: #22c55e;
|
|
1351
|
+
border-radius: 2px;
|
|
1352
|
+
transition: width 0.3s ease;
|
|
1353
|
+
|
|
1354
|
+
.focusBar.poor & {
|
|
1355
|
+
background: #ef4444;
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
.focusText {
|
|
1360
|
+
font-size: 0.7rem;
|
|
1361
|
+
font-weight: 500;
|
|
1362
|
+
|
|
1363
|
+
.focusBar.good ~ & {
|
|
1364
|
+
color: #22c55e;
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
.focusBar.poor ~ & {
|
|
1368
|
+
color: #f59e0b;
|
|
1369
|
+
}
|
|
1370
|
+
}
|