@jaak.ai/stamps 1.0.0-dev.9 → 2.0.0-beta.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.
Files changed (162) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +470 -390
  3. package/dist/cjs/index-DGM9-FNg.js +1402 -0
  4. package/dist/cjs/index-DGM9-FNg.js.map +1 -0
  5. package/dist/cjs/index.cjs.js +3 -0
  6. package/dist/cjs/index.cjs.js.map +1 -0
  7. package/dist/cjs/jaak-stamps-webcomponent.cjs.js +27 -0
  8. package/dist/cjs/jaak-stamps-webcomponent.cjs.js.map +1 -0
  9. package/dist/cjs/jaak-stamps.cjs.entry.js +925 -0
  10. package/dist/cjs/jaak-stamps.cjs.entry.js.map +1 -0
  11. package/dist/cjs/jaak-stamps.entry.cjs.js.map +1 -0
  12. package/dist/cjs/loader.cjs.js +8 -15
  13. package/dist/cjs/loader.cjs.js.map +1 -0
  14. package/dist/collection/collection-manifest.json +3 -22
  15. package/dist/collection/components/my-component/my-component.css +530 -0
  16. package/dist/collection/components/my-component/my-component.js +1162 -0
  17. package/dist/collection/components/my-component/my-component.js.map +1 -0
  18. package/dist/collection/index.js +2 -1
  19. package/dist/collection/index.js.map +1 -0
  20. package/dist/collection/utils/utils.js +4 -0
  21. package/dist/collection/utils/utils.js.map +1 -0
  22. package/dist/components/index.d.ts +33 -0
  23. package/dist/components/index.js +1195 -0
  24. package/dist/components/index.js.map +1 -0
  25. package/dist/components/jaak-stamps.d.ts +11 -0
  26. package/dist/components/jaak-stamps.js +971 -0
  27. package/dist/components/jaak-stamps.js.map +1 -0
  28. package/dist/esm/index-DqoVMnc7.js +1393 -0
  29. package/dist/esm/index-DqoVMnc7.js.map +1 -0
  30. package/dist/esm/index.js +3 -0
  31. package/dist/esm/index.js.map +1 -0
  32. package/dist/esm/jaak-stamps-webcomponent.js +23 -0
  33. package/dist/esm/jaak-stamps-webcomponent.js.map +1 -0
  34. package/dist/esm/jaak-stamps.entry.js +923 -0
  35. package/dist/esm/jaak-stamps.entry.js.map +1 -0
  36. package/dist/esm/loader.js +9 -14
  37. package/dist/esm/loader.js.map +1 -0
  38. package/dist/jaak-stamps-webcomponent/index.esm.js +2 -0
  39. package/dist/jaak-stamps-webcomponent/index.esm.js.map +1 -0
  40. package/dist/jaak-stamps-webcomponent/jaak-stamps-webcomponent.esm.js +2 -0
  41. package/dist/jaak-stamps-webcomponent/jaak-stamps-webcomponent.esm.js.map +1 -0
  42. package/dist/jaak-stamps-webcomponent/jaak-stamps.entry.esm.js.map +1 -0
  43. package/dist/jaak-stamps-webcomponent/loader.esm.js.map +1 -0
  44. package/dist/jaak-stamps-webcomponent/p-DqoVMnc7.js +3 -0
  45. package/dist/jaak-stamps-webcomponent/p-DqoVMnc7.js.map +1 -0
  46. package/dist/jaak-stamps-webcomponent/p-dd6cc14e.entry.js +2 -0
  47. package/dist/jaak-stamps-webcomponent/p-dd6cc14e.entry.js.map +1 -0
  48. package/dist/types/components/my-component/my-component.d.ts +119 -0
  49. package/dist/types/components.d.ts +50 -1353
  50. package/dist/types/index.d.ts +10 -1
  51. package/dist/types/stencil-public-runtime.d.ts +93 -28
  52. package/dist/types/utils/utils.d.ts +1 -0
  53. package/loader/cdn.js +1 -3
  54. package/loader/index.cjs.js +1 -3
  55. package/loader/index.d.ts +5 -2
  56. package/loader/index.es2017.js +1 -3
  57. package/loader/index.js +1 -3
  58. package/package.json +22 -26
  59. package/dist/cjs/document-detector_19.cjs.entry.js +0 -8540
  60. package/dist/cjs/index-5e4e5e7d.js +0 -1685
  61. package/dist/cjs/mb-tooltip.cjs.entry.js +0 -26
  62. package/dist/cjs/stamps.cjs.js +0 -23
  63. package/dist/collection/components/document-detector/document-detector.css +0 -156
  64. package/dist/collection/components/document-detector/document-detector.js +0 -416
  65. package/dist/collection/components/shared/mb-api-process-status/mb-api-process-status.css +0 -360
  66. package/dist/collection/components/shared/mb-api-process-status/mb-api-process-status.js +0 -124
  67. package/dist/collection/components/shared/mb-button/mb-button.css +0 -95
  68. package/dist/collection/components/shared/mb-button/mb-button.js +0 -201
  69. package/dist/collection/components/shared/mb-button-classic/mb-button-classic.css +0 -100
  70. package/dist/collection/components/shared/mb-button-classic/mb-button-classic.js +0 -130
  71. package/dist/collection/components/shared/mb-camera-experience/mb-camera-experience.css +0 -740
  72. package/dist/collection/components/shared/mb-camera-experience/mb-camera-experience.js +0 -827
  73. package/dist/collection/components/shared/mb-camera-experience/mb-camera-experience.utils.js +0 -55
  74. package/dist/collection/components/shared/mb-camera-selection/mb-camera-selection.css +0 -124
  75. package/dist/collection/components/shared/mb-camera-selection/mb-camera-selection.js +0 -194
  76. package/dist/collection/components/shared/mb-camera-toolbar/mb-camera-toolbar.css +0 -80
  77. package/dist/collection/components/shared/mb-camera-toolbar/mb-camera-toolbar.js +0 -275
  78. package/dist/collection/components/shared/mb-completed/mb-completed.css +0 -17
  79. package/dist/collection/components/shared/mb-completed/mb-completed.js +0 -48
  80. package/dist/collection/components/shared/mb-component/mb-component.css +0 -321
  81. package/dist/collection/components/shared/mb-component/mb-component.js +0 -2269
  82. package/dist/collection/components/shared/mb-component/mb-component.utils.js +0 -14
  83. package/dist/collection/components/shared/mb-container/mb-container.css +0 -7
  84. package/dist/collection/components/shared/mb-container/mb-container.js +0 -23
  85. package/dist/collection/components/shared/mb-feedback/mb-feedback.css +0 -36
  86. package/dist/collection/components/shared/mb-feedback/mb-feedback.js +0 -91
  87. package/dist/collection/components/shared/mb-feedback/mb-feedback.utils.js +0 -11
  88. package/dist/collection/components/shared/mb-help/mb-help.css +0 -191
  89. package/dist/collection/components/shared/mb-help/mb-help.js +0 -409
  90. package/dist/collection/components/shared/mb-help/mb-help.model.js +0 -5
  91. package/dist/collection/components/shared/mb-image-box/mb-image-box.css +0 -78
  92. package/dist/collection/components/shared/mb-image-box/mb-image-box.js +0 -150
  93. package/dist/collection/components/shared/mb-modal/mb-modal.css +0 -106
  94. package/dist/collection/components/shared/mb-modal/mb-modal.js +0 -239
  95. package/dist/collection/components/shared/mb-overlay/mb-overlay.css +0 -46
  96. package/dist/collection/components/shared/mb-overlay/mb-overlay.js +0 -76
  97. package/dist/collection/components/shared/mb-progress-tracker/mb-progress-tracker.css +0 -24
  98. package/dist/collection/components/shared/mb-progress-tracker/mb-progress-tracker.js +0 -80
  99. package/dist/collection/components/shared/mb-screen/mb-screen.css +0 -19
  100. package/dist/collection/components/shared/mb-screen/mb-screen.js +0 -48
  101. package/dist/collection/components/shared/mb-spinner/mb-spinner.css +0 -30
  102. package/dist/collection/components/shared/mb-spinner/mb-spinner.js +0 -67
  103. package/dist/collection/components/shared/mb-tooltip/mb-tooltip.css +0 -62
  104. package/dist/collection/components/shared/mb-tooltip/mb-tooltip.js +0 -150
  105. package/dist/collection/components/shared/mb-tooltip-advanced/mb-tooltip-advanced.css +0 -91
  106. package/dist/collection/components/shared/mb-tooltip-advanced/mb-tooltip-advanced.js +0 -96
  107. package/dist/collection/utils/data-structures.js +0 -189
  108. package/dist/collection/utils/device.helpers.js +0 -37
  109. package/dist/collection/utils/error-structures.js +0 -47
  110. package/dist/collection/utils/generic.helpers.js +0 -82
  111. package/dist/collection/utils/sdk.service.js +0 -943
  112. package/dist/collection/utils/state-lifter.js +0 -3
  113. package/dist/collection/utils/status.document-detector.js +0 -15
  114. package/dist/collection/utils/translation.service.js +0 -97
  115. package/dist/esm/document-detector_19.entry.js +0 -8518
  116. package/dist/esm/index-dc740acb.js +0 -1656
  117. package/dist/esm/mb-tooltip.entry.js +0 -22
  118. package/dist/esm/polyfills/core-js.js +0 -11
  119. package/dist/esm/polyfills/css-shim.js +0 -1
  120. package/dist/esm/polyfills/dom.js +0 -79
  121. package/dist/esm/polyfills/es5-html-element.js +0 -1
  122. package/dist/esm/polyfills/index.js +0 -34
  123. package/dist/esm/polyfills/system.js +0 -6
  124. package/dist/esm/stamps.js +0 -18
  125. package/dist/stamps/index.esm.js +0 -0
  126. package/dist/stamps/p-7f07a434.js +0 -2
  127. package/dist/stamps/p-ec3f5972.entry.js +0 -1
  128. package/dist/stamps/p-f4015454.entry.js +0 -9
  129. package/dist/stamps/stamps.esm.js +0 -1
  130. package/dist/types/components/document-detector/document-detector.d.ts +0 -86
  131. package/dist/types/components/shared/mb-api-process-status/mb-api-process-status.d.ts +0 -30
  132. package/dist/types/components/shared/mb-button/mb-button.d.ts +0 -41
  133. package/dist/types/components/shared/mb-button-classic/mb-button-classic.d.ts +0 -27
  134. package/dist/types/components/shared/mb-camera-experience/mb-camera-experience.d.ts +0 -141
  135. package/dist/types/components/shared/mb-camera-experience/mb-camera-experience.utils.d.ts +0 -3
  136. package/dist/types/components/shared/mb-camera-selection/mb-camera-selection.d.ts +0 -33
  137. package/dist/types/components/shared/mb-camera-toolbar/mb-camera-toolbar.d.ts +0 -54
  138. package/dist/types/components/shared/mb-completed/mb-completed.d.ts +0 -12
  139. package/dist/types/components/shared/mb-component/mb-component.d.ts +0 -308
  140. package/dist/types/components/shared/mb-component/mb-component.utils.d.ts +0 -3
  141. package/dist/types/components/shared/mb-container/mb-container.d.ts +0 -8
  142. package/dist/types/components/shared/mb-feedback/mb-feedback.d.ts +0 -19
  143. package/dist/types/components/shared/mb-feedback/mb-feedback.utils.d.ts +0 -2
  144. package/dist/types/components/shared/mb-help/mb-help.d.ts +0 -66
  145. package/dist/types/components/shared/mb-help/mb-help.model.d.ts +0 -9
  146. package/dist/types/components/shared/mb-image-box/mb-image-box.d.ts +0 -35
  147. package/dist/types/components/shared/mb-modal/mb-modal.d.ts +0 -53
  148. package/dist/types/components/shared/mb-overlay/mb-overlay.d.ts +0 -17
  149. package/dist/types/components/shared/mb-progress-tracker/mb-progress-tracker.d.ts +0 -19
  150. package/dist/types/components/shared/mb-screen/mb-screen.d.ts +0 -12
  151. package/dist/types/components/shared/mb-spinner/mb-spinner.d.ts +0 -16
  152. package/dist/types/components/shared/mb-tooltip/mb-tooltip.d.ts +0 -10
  153. package/dist/types/components/shared/mb-tooltip-advanced/mb-tooltip-advanced.d.ts +0 -7
  154. package/dist/types/utils/data-structures.d.ts +0 -264
  155. package/dist/types/utils/device.helpers.d.ts +0 -7
  156. package/dist/types/utils/error-structures.d.ts +0 -44
  157. package/dist/types/utils/generic.helpers.d.ts +0 -21
  158. package/dist/types/utils/sdk.service.d.ts +0 -52
  159. package/dist/types/utils/state-lifter.d.ts +0 -3
  160. package/dist/types/utils/status.document-detector.d.ts +0 -14
  161. package/dist/types/utils/translation.service.d.ts +0 -77
  162. package/loader/package.json +0 -11
@@ -0,0 +1,530 @@
1
+ :host {
2
+ display: block;
3
+ width: 100%;
4
+ height: 100%;
5
+ font-family: system-ui, -apple-system, sans-serif;
6
+ color: #1a1a1a;
7
+ }
8
+
9
+ .detector-container {
10
+ display: flex;
11
+ flex-direction: column;
12
+ align-items: center;
13
+ width: 100%;
14
+ height: 100%;
15
+ }
16
+
17
+ h1 {
18
+ font-size: 24px;
19
+ font-weight: 500;
20
+ color: #333;
21
+ margin: 0 0 24px 0;
22
+ }
23
+
24
+ .video-container {
25
+ position: relative;
26
+ width: 100%;
27
+ height: 100%;
28
+ background: #333;
29
+ border: 1px solid #e0e0e0;
30
+ border-radius: 8px;
31
+ overflow: hidden;
32
+ }
33
+
34
+ video, canvas {
35
+ position: absolute;
36
+ width: 100%;
37
+ height: 100%;
38
+ border-radius: 8px;
39
+ }
40
+
41
+ video.mirror, canvas.mirror {
42
+ transform: rotateY(180deg);
43
+ }
44
+
45
+ canvas {
46
+ z-index: 1;
47
+ }
48
+
49
+ video {
50
+ z-index: 0;
51
+ }
52
+
53
+
54
+ .status {
55
+ margin-top: 16px;
56
+ font-size: 12px;
57
+ color: #666;
58
+ }
59
+
60
+ /* Overlay mask for ID card guidance */
61
+ .overlay-mask {
62
+ position: absolute;
63
+ top: 0;
64
+ left: 0;
65
+ width: 100%;
66
+ height: 100%;
67
+ z-index: 10;
68
+ display: block;
69
+ pointer-events: none;
70
+ }
71
+
72
+ .card-outline {
73
+ position: absolute;
74
+ top: var(--mask-center-y, 50%);
75
+ left: var(--mask-center-x, 50%);
76
+ transform: translate(-50%, -50%);
77
+ width: var(--mask-width, 88%);
78
+ height: var(--mask-height, 55%);
79
+ border: none;
80
+ border-radius: 4px;
81
+ background: transparent;
82
+ box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.7);
83
+ opacity: 0.8;
84
+ }
85
+
86
+ .card-outline.perfect-match {
87
+ box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.7);
88
+ }
89
+
90
+ /* Lados individuales de la máscara */
91
+ .side {
92
+ position: absolute;
93
+ background: #999;
94
+ transition: background-color 0.3s ease;
95
+ }
96
+
97
+ .side.aligned {
98
+ background: #28a745;
99
+ }
100
+
101
+ .side-top {
102
+ top: 0;
103
+ left: 0;
104
+ width: 100%;
105
+ height: 3px;
106
+ }
107
+
108
+ .side-right {
109
+ top: 0;
110
+ right: 0;
111
+ width: 3px;
112
+ height: 100%;
113
+ }
114
+
115
+ .side-bottom {
116
+ bottom: 0;
117
+ left: 0;
118
+ width: 100%;
119
+ height: 3px;
120
+ }
121
+
122
+ .side-left {
123
+ top: 0;
124
+ left: 0;
125
+ width: 3px;
126
+ height: 100%;
127
+ }
128
+
129
+ .corner {
130
+ position: absolute;
131
+ width: 20px;
132
+ height: 20px;
133
+ border: 2px solid #999;
134
+ z-index: 12;
135
+ }
136
+
137
+ .corner-tl {
138
+ top: -10px;
139
+ left: -10px;
140
+ border-right: none;
141
+ border-bottom: none;
142
+ }
143
+
144
+ .corner-tr {
145
+ top: -10px;
146
+ right: -10px;
147
+ border-left: none;
148
+ border-bottom: none;
149
+ }
150
+
151
+ .corner-bl {
152
+ bottom: -10px;
153
+ left: -10px;
154
+ border-right: none;
155
+ border-top: none;
156
+ }
157
+
158
+ .corner-br {
159
+ bottom: -10px;
160
+ right: -10px;
161
+ border-left: none;
162
+ border-top: none;
163
+ }
164
+
165
+ .corner.perfect-match {
166
+ border-color: #28a745;
167
+ }
168
+
169
+ .guide-text {
170
+ position: absolute;
171
+ top: 50%;
172
+ left: 50%;
173
+ transform: translate(-50%, -50%);
174
+ color: #fff;
175
+ font-size: 14px;
176
+ font-weight: 600;
177
+ text-align: center;
178
+ white-space: normal;
179
+ background: rgba(128, 128, 128, 0.8);
180
+ padding: 12px 20px;
181
+ border-radius: 20px;
182
+ max-width: 300px;
183
+ z-index: 20;
184
+ }
185
+
186
+
187
+ /* Animación de captura */
188
+ .capture-animation {
189
+ position: absolute;
190
+ top: 0;
191
+ left: 0;
192
+ width: 100%;
193
+ height: 100%;
194
+ background: #fff;
195
+ opacity: 0;
196
+ z-index: 30;
197
+ pointer-events: none;
198
+ animation: captureFlash 0.6s ease-out;
199
+ }
200
+
201
+ @keyframes captureFlash {
202
+ 0% {
203
+ opacity: 0;
204
+ }
205
+ 15% {
206
+ opacity: 0.8;
207
+ }
208
+ 30% {
209
+ opacity: 0;
210
+ }
211
+ 45% {
212
+ opacity: 0.4;
213
+ }
214
+ 60% {
215
+ opacity: 0;
216
+ }
217
+ 100% {
218
+ opacity: 0;
219
+ }
220
+ }
221
+
222
+ /* Animación del marco durante captura */
223
+ .card-outline.capturing {
224
+ animation: pulseGreen 0.6s ease-out;
225
+ }
226
+
227
+ @keyframes pulseGreen {
228
+ 0% {
229
+ border-color: #28a745;
230
+ box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.7), 0 0 0 4px rgba(40, 167, 69, 0);
231
+ }
232
+ 50% {
233
+ border-color: #28a745;
234
+ box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.7), 0 0 0 8px rgba(40, 167, 69, 0.6);
235
+ }
236
+ 100% {
237
+ border-color: #28a745;
238
+ box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.7), 0 0 0 4px rgba(40, 167, 69, 0);
239
+ }
240
+ }
241
+
242
+ /* Animación de voltear identificación */
243
+ .flip-animation {
244
+ position: absolute;
245
+ top: 50%;
246
+ left: 50%;
247
+ transform: translate(-50%, -50%);
248
+ z-index: 35;
249
+ pointer-events: none;
250
+ opacity: 0;
251
+ animation: showFlipInstruction 3s ease-in-out;
252
+ display: flex;
253
+ flex-direction: column;
254
+ align-items: center;
255
+ justify-content: center;
256
+ }
257
+
258
+ .id-card-icon {
259
+ width: 80px;
260
+ height: 50px;
261
+ background: linear-gradient(135deg, #6c757d 0%, #495057 100%);
262
+ border-radius: 8px;
263
+ position: relative;
264
+ animation: flipCard 2s ease-in-out infinite;
265
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
266
+ }
267
+
268
+ .id-card-icon::before {
269
+ content: '';
270
+ position: absolute;
271
+ top: 8px;
272
+ left: 8px;
273
+ width: 16px;
274
+ height: 12px;
275
+ background: rgba(255, 255, 255, 0.9);
276
+ border-radius: 2px;
277
+ }
278
+
279
+ .id-card-icon::after {
280
+ content: '';
281
+ position: absolute;
282
+ top: 25px;
283
+ left: 8px;
284
+ width: 64px;
285
+ height: 3px;
286
+ background: rgba(255, 255, 255, 0.7);
287
+ border-radius: 1px;
288
+ box-shadow: 0 6px 0 rgba(255, 255, 255, 0.7), 0 12px 0 rgba(255, 255, 255, 0.7);
289
+ }
290
+
291
+ .flip-text {
292
+ margin-top: 12px;
293
+ color: #fff;
294
+ font-size: 14px;
295
+ font-weight: 600;
296
+ text-align: center;
297
+ background: rgba(128, 128, 128, 0.8);
298
+ padding: 12px 20px;
299
+ border-radius: 20px;
300
+ max-width: 300px;
301
+ }
302
+
303
+ @keyframes showFlipInstruction {
304
+ 0% {
305
+ opacity: 0;
306
+ transform: translate(-50%, -50%) scale(0.8);
307
+ }
308
+ 15% {
309
+ opacity: 1;
310
+ transform: translate(-50%, -50%) scale(1);
311
+ }
312
+ 85% {
313
+ opacity: 1;
314
+ transform: translate(-50%, -50%) scale(1);
315
+ }
316
+ 100% {
317
+ opacity: 0;
318
+ transform: translate(-50%, -50%) scale(0.8);
319
+ }
320
+ }
321
+
322
+ @keyframes flipCard {
323
+ 0% {
324
+ transform: rotateY(0deg);
325
+ }
326
+ 50% {
327
+ transform: rotateY(180deg);
328
+ }
329
+ 100% {
330
+ transform: rotateY(360deg);
331
+ }
332
+ }
333
+
334
+ /* Animación de éxito */
335
+ .success-animation {
336
+ position: absolute;
337
+ top: 50%;
338
+ left: 50%;
339
+ transform: translate(-50%, -50%);
340
+ z-index: 35;
341
+ pointer-events: none;
342
+ opacity: 0;
343
+ animation: showSuccessMessage 3s ease-in-out;
344
+ display: flex;
345
+ flex-direction: column;
346
+ align-items: center;
347
+ justify-content: center;
348
+ }
349
+
350
+ .check-icon {
351
+ width: 80px;
352
+ height: 80px;
353
+ background: linear-gradient(135deg, #6c757d 0%, #495057 100%);
354
+ border-radius: 50%;
355
+ position: relative;
356
+ animation: bounceSuccess 0.6s ease-out;
357
+ box-shadow: 0 4px 16px rgba(108, 117, 125, 0.4);
358
+ display: flex;
359
+ align-items: center;
360
+ justify-content: center;
361
+ }
362
+
363
+ .check-icon::before {
364
+ content: '';
365
+ position: absolute;
366
+ width: 20px;
367
+ height: 35px;
368
+ border: 4px solid #fff;
369
+ border-top: none;
370
+ border-left: none;
371
+ transform: rotate(45deg);
372
+ animation: drawCheck 0.4s ease-out 0.2s both;
373
+ }
374
+
375
+ .success-text {
376
+ margin-top: 16px;
377
+ color: #fff;
378
+ font-size: 14px;
379
+ font-weight: 600;
380
+ text-align: center;
381
+ background: rgba(128, 128, 128, 0.8);
382
+ padding: 12px 20px;
383
+ border-radius: 20px;
384
+ max-width: 300px;
385
+ animation: fadeInUp 0.5s ease-out 0.4s both;
386
+ }
387
+
388
+ @keyframes showSuccessMessage {
389
+ 0% {
390
+ opacity: 0;
391
+ transform: translate(-50%, -50%) scale(0.5);
392
+ }
393
+ 15% {
394
+ opacity: 1;
395
+ transform: translate(-50%, -50%) scale(1);
396
+ }
397
+ 85% {
398
+ opacity: 1;
399
+ transform: translate(-50%, -50%) scale(1);
400
+ }
401
+ 100% {
402
+ opacity: 0;
403
+ transform: translate(-50%, -50%) scale(0.9);
404
+ }
405
+ }
406
+
407
+ @keyframes bounceSuccess {
408
+ 0% {
409
+ transform: scale(0);
410
+ }
411
+ 50% {
412
+ transform: scale(1.1);
413
+ }
414
+ 100% {
415
+ transform: scale(1);
416
+ }
417
+ }
418
+
419
+ @keyframes drawCheck {
420
+ 0% {
421
+ width: 0;
422
+ height: 0;
423
+ }
424
+ 50% {
425
+ width: 20px;
426
+ height: 0;
427
+ }
428
+ 100% {
429
+ width: 20px;
430
+ height: 35px;
431
+ }
432
+ }
433
+
434
+ @keyframes fadeInUp {
435
+ 0% {
436
+ opacity: 0;
437
+ transform: translateY(20px);
438
+ }
439
+ 100% {
440
+ opacity: 1;
441
+ transform: translateY(0);
442
+ }
443
+ }
444
+
445
+ /* Bot\u00f3n para saltar reverso */
446
+ .skip-button {
447
+ position: absolute;
448
+ bottom: 20px;
449
+ left: 50%;
450
+ transform: translateX(-50%);
451
+ z-index: 25;
452
+ pointer-events: auto;
453
+ background: #fff;
454
+ color: #333;
455
+ border: none;
456
+ border-radius: 25px;
457
+ padding: 12px 24px;
458
+ font-size: 14px;
459
+ font-weight: 600;
460
+ cursor: pointer;
461
+ transition: all 0.3s ease;
462
+ }
463
+
464
+ .skip-button:hover {
465
+ background: #f8f9fa;
466
+ }
467
+
468
+ .skip-button:active {
469
+ background: #e9ecef;
470
+ transform: translateX(-50%) translateY(0);
471
+ }
472
+
473
+ /* Marca de agua */
474
+ .watermark {
475
+ position: absolute;
476
+ bottom: 12px;
477
+ right: 12px;
478
+ z-index: 15;
479
+ pointer-events: none;
480
+ opacity: 0.7;
481
+ }
482
+
483
+ .watermark img {
484
+ height: 24px;
485
+ width: auto;
486
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.3));
487
+ }
488
+
489
+ /* Animación de carga */
490
+ .loading-overlay {
491
+ position: absolute;
492
+ top: 0;
493
+ left: 0;
494
+ width: 100%;
495
+ height: 100%;
496
+ background: rgba(0, 0, 0, 0.8);
497
+ display: flex;
498
+ flex-direction: column;
499
+ align-items: center;
500
+ justify-content: center;
501
+ z-index: 30;
502
+ border-radius: 20px;
503
+ }
504
+
505
+ .loading-spinner {
506
+ width: 60px;
507
+ height: 60px;
508
+ border: 4px solid rgba(255, 255, 255, 0.2);
509
+ border-top: 4px solid #007bff;
510
+ border-radius: 50%;
511
+ animation: spin 1s linear infinite;
512
+ margin-bottom: 20px;
513
+ }
514
+
515
+ .loading-text {
516
+ color: white;
517
+ font-size: 16px;
518
+ font-weight: 500;
519
+ text-align: center;
520
+ opacity: 0.9;
521
+ }
522
+
523
+ @keyframes spin {
524
+ 0% {
525
+ transform: rotate(0deg);
526
+ }
527
+ 100% {
528
+ transform: rotate(360deg);
529
+ }
530
+ }