PluginProbe ʕ •ᴥ•ʔ
Download Manager / 3.3.64
Download Manager v3.3.64
3.3.66 3.3.65 3.3.64 3.3.63 3.3.62 3.3.61 3.3.60 3.3.59 3.3.58 3.3.57 3.3.56 trunk 2.1.3 2.3.0 2.5.96 2.5.97 2.6.2 2.6.96 2.8.3 2.9.99 3.0.4 3.1.05 3.1.07 3.1.08 3.1.11 3.1.12 3.1.14 3.1.17 3.1.18 3.1.22 3.1.23 3.1.24 3.1.25 3.1.26 3.1.27 3.1.28 3.2.04 3.2.13 3.2.14 3.2.16 3.2.18 3.2.19 3.2.21 3.2.22 3.2.23 3.2.24 3.2.25 3.2.27 3.2.28 3.2.29 3.2.30 3.2.31 3.2.32 3.2.33 3.2.34 3.2.35 3.2.37 3.2.38 3.2.39 3.2.40 3.2.41 3.2.42 3.2.43 3.2.44 3.2.45 3.2.46 3.2.47 3.2.48 3.2.49 3.2.50 3.2.51 3.2.52 3.2.53 3.2.54 3.2.55 3.2.56 3.2.57 3.2.58 3.2.59 3.2.60 3.2.61 3.2.63 3.2.64 3.2.65 3.2.66 3.2.67 3.2.68 3.2.69 3.2.70 3.2.71 3.2.72 3.2.73 3.2.74 3.2.75 3.2.76 3.2.77 3.2.78 3.2.79 3.2.80 3.2.81 3.2.82 3.2.83 3.2.84 3.2.85 3.2.86 3.2.87 3.2.88 3.2.89 3.2.90 3.2.91 3.2.92 3.2.93 3.2.94 3.2.95 3.2.96 3.2.97 3.2.98 3.2.99 3.3.00 3.3.01 3.3.02 3.3.03 3.3.04 3.3.05 3.3.06 3.3.07 3.3.08 3.3.09 3.3.10 3.3.11 3.3.12 3.3.13 3.3.14 3.3.15 3.3.16 3.3.17 3.3.18 3.3.19 3.3.20 3.3.21 3.3.22 3.3.23 3.3.24 3.3.25 3.3.26 3.3.27 3.3.28 3.3.29 3.3.30 3.3.31 3.3.32 3.3.33 3.3.34 3.3.35 3.3.36 3.3.37 3.3.38 3.3.39 3.3.40 3.3.41 3.3.42 3.3.43 3.3.44 3.3.45 3.3.46 3.3.47 3.3.48 3.3.49 3.3.50 3.3.51 3.3.52 3.3.53 3.3.54 3.3.55
download-manager / assets / modal / wpdm-modal.css
download-manager / assets / modal Last commit date
README.md 5 months ago wpdm-modal.css 3 months ago wpdm-modal.js 3 months ago wpdm-modal.min.css 3 months ago wpdm-modal.min.js 3 months ago
wpdm-modal.css
877 lines
1 /**
2 * WPDM Modal Dialog System
3 * Enterprise-Grade Modal Dialogs for WordPress Download Manager
4 * Version: 1.0.0
5 */
6
7 /* ==========================================================================
8 Dialog Wrapper
9 ========================================================================== */
10
11 .wpdm-dialog-wrapper {
12 position: fixed;
13 inset: 0;
14 z-index: 10000;
15 display: flex;
16 align-items: center;
17 justify-content: center;
18 padding: 1rem;
19 opacity: 0;
20 visibility: hidden;
21 transition: opacity 0.2s ease, visibility 0.2s ease;
22 }
23
24 .wpdm-dialog-wrapper.wpdm-dialog-visible {
25 opacity: 1;
26 visibility: visible;
27 }
28
29 /* ==========================================================================
30 Backdrop
31 ========================================================================== */
32
33 .wpdm-dialog-backdrop {
34 position: absolute;
35 inset: 0;
36 background: rgba(15, 23, 42, 0.6);
37 backdrop-filter: blur(4px);
38 -webkit-backdrop-filter: blur(4px);
39 }
40
41 /* ==========================================================================
42 Dialog Container
43 ========================================================================== */
44
45 .wpdm-dialog {
46 position: relative;
47 width: 100%;
48 max-width: 420px;
49 background: #ffffff;
50 border-radius: 16px;
51 box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25), 0 0 0 1px rgba(0, 0, 0, 0.05);
52 transform: scale(0.95) translateY(-10px);
53 transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1),
54 box-shadow 0.3s ease;
55 overflow: hidden;
56 }
57
58 .wpdm-dialog-wrapper.wpdm-dialog-visible .wpdm-dialog {
59 transform: scale(1) translateY(0);
60 }
61
62 /* Dialog Sizes */
63 .wpdm-dialog--sm { max-width: 320px; }
64 .wpdm-dialog--md { max-width: 420px; }
65 .wpdm-dialog--lg { max-width: 560px; }
66 .wpdm-dialog--xl { max-width: 720px; }
67
68 /* ==========================================================================
69 Dialog Header
70 ========================================================================== */
71
72 .wpdm-dialog__header {
73 display: flex;
74 align-items: center;
75 gap: 1rem;
76 padding: 1.25rem 1.5rem;
77 background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%);
78 border-bottom: 1px solid #e2e8f0;
79 border-radius: 16px 16px 0 0;
80 }
81
82 .wpdm-dialog__icon {
83 flex-shrink: 0;
84 display: flex;
85 align-items: center;
86 justify-content: center;
87 width: 44px;
88 height: 44px;
89 border-radius: 12px;
90 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06), 0 0 0 1px rgba(0, 0, 0, 0.04);
91 }
92
93 .wpdm-dialog__icon svg {
94 width: 22px;
95 height: 22px;
96 }
97
98 /* Icon Variants */
99 .wpdm-dialog__icon--info {
100 background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);
101 color: #2563eb;
102 box-shadow: 0 2px 8px rgba(37, 99, 235, 0.15), 0 0 0 1px rgba(37, 99, 235, 0.1);
103 }
104
105 .wpdm-dialog__icon--success {
106 background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%);
107 color: #059669;
108 box-shadow: 0 2px 8px rgba(5, 150, 105, 0.15), 0 0 0 1px rgba(5, 150, 105, 0.1);
109 }
110
111 .wpdm-dialog__icon--warning {
112 background: linear-gradient(135deg, #fffbeb 0%, #fef3c7 100%);
113 color: #d97706;
114 box-shadow: 0 2px 8px rgba(217, 119, 6, 0.15), 0 0 0 1px rgba(217, 119, 6, 0.1);
115 }
116
117 .wpdm-dialog__icon--danger {
118 background: linear-gradient(135deg, #fef2f2 0%, #fee2e2 100%);
119 color: #dc2626;
120 box-shadow: 0 2px 8px rgba(220, 38, 38, 0.15), 0 0 0 1px rgba(220, 38, 38, 0.1);
121 }
122
123 .wpdm-dialog__icon--question {
124 background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 100%);
125 color: #7c3aed;
126 box-shadow: 0 2px 8px rgba(124, 58, 237, 0.15), 0 0 0 1px rgba(124, 58, 237, 0.1);
127 }
128
129 /* Header Content */
130 .wpdm-dialog__header-content {
131 flex: 1;
132 min-width: 0;
133 padding-right: 1.5rem;
134 }
135
136 .wpdm-dialog__title {
137 margin: 0 !important;
138 font-size: 1.0625rem !important;
139 font-weight: 600;
140 color: #0f172a;
141 line-height: 1.4;
142 letter-spacing: -0.01em;
143 }
144
145 .wpdm-dialog__subtitle {
146 margin: 0.25rem 0 0 !important;
147 font-size: 0.8125rem;
148 color: #64748b;
149 line-height: 1.4;
150 }
151
152 /* ==========================================================================
153 Close Button
154 ========================================================================== */
155
156 .wpdm-dialog__close {
157 position: absolute;
158 top: 1rem;
159 right: 1rem;
160 display: flex;
161 align-items: center;
162 justify-content: center;
163 width: 30px;
164 height: 30px;
165 padding: 0;
166 background: #f1f5f9;
167 border: 1px solid #e2e8f0;
168 border-radius: 8px;
169 color: #64748b;
170 cursor: pointer;
171 transition: all 0.15s ease;
172 }
173
174 .wpdm-dialog__close:hover {
175 background: #e2e8f0;
176 border-color: #cbd5e1;
177 color: #334155;
178 transform: scale(1.05);
179 }
180
181 .wpdm-dialog__close:active {
182 transform: scale(0.95);
183 }
184
185 .wpdm-dialog__close svg {
186 width: 16px;
187 height: 16px;
188 stroke-width: 2.5;
189 }
190
191 /* ==========================================================================
192 Dialog Body
193 ========================================================================== */
194
195 .wpdm-dialog__body {
196 padding: 1rem 1.5rem 1.5rem;
197 transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
198 }
199
200 /* Content fade-in animation when loaded */
201 .wpdm-dialog__body--loaded {
202 animation: wpdm-dialog-content-appear 0.35s cubic-bezier(0.4, 0, 0.2, 1) forwards;
203 }
204
205 @keyframes wpdm-dialog-content-appear {
206 0% {
207 opacity: 0;
208 transform: translateY(8px);
209 }
210 100% {
211 opacity: 1;
212 transform: translateY(0);
213 }
214 }
215
216 .wpdm-dialog__message {
217 margin: 0;
218 font-size: 0.9375rem;
219 color: #475569;
220 line-height: 1.6;
221 }
222
223 /* ==========================================================================
224 Dialog Input (for prompt)
225 ========================================================================== */
226
227 .wpdm-dialog__input-wrapper {
228 margin-top: 1rem;
229 }
230
231 .wpdm-dialog__input {
232 width: 100%;
233 padding: 0.75rem 1rem;
234 font-size: 0.9375rem;
235 color: #0f172a;
236 background: #f8fafc;
237 border: 2px solid #e2e8f0;
238 border-radius: 10px;
239 outline: none;
240 transition: all 0.15s ease;
241 box-sizing: border-box;
242 }
243
244 .wpdm-dialog__input:focus {
245 background: #ffffff;
246 border-color: var(--color-primary, #3b82f6);
247 box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.1);
248 }
249
250 .wpdm-dialog__input::placeholder {
251 color: #94a3b8;
252 }
253
254 /* ==========================================================================
255 Dialog Footer
256 ========================================================================== */
257
258 .wpdm-dialog__footer {
259 display: flex;
260 justify-content: flex-end;
261 gap: 0.75rem;
262 padding: 1rem 1.5rem !important;
263 background: #f8fafc;
264 border-top: 1px solid #f1f5f9;
265 }
266
267 /* Compact Footer (for alert) */
268 .wpdm-dialog__footer--compact {
269 padding: 0 1.5rem 1.5rem;
270 background: transparent;
271 border-top: none;
272 }
273
274 /* ==========================================================================
275 Dialog Buttons
276 ========================================================================== */
277
278 .wpdm-dialog__btn {
279 display: inline-flex;
280 align-items: center;
281 justify-content: center;
282 gap: 0.5rem;
283 min-width: 100px;
284 padding: 0.625rem 1.25rem;
285 font-size: 0.875rem;
286 font-weight: 500;
287 line-height: 1.5;
288 text-decoration: none;
289 border: none;
290 border-radius: 10px;
291 cursor: pointer;
292 transition: all 0.15s ease;
293 }
294
295 .wpdm-dialog__btn:focus {
296 outline: none;
297 }
298
299 /* Secondary Button */
300 .wpdm-dialog__btn--secondary {
301 color: #475569;
302 background: #ffffff;
303 border: 1px solid #e2e8f0;
304 }
305
306 .wpdm-dialog__btn--secondary:hover {
307 background: #f1f5f9;
308 border-color: #cbd5e1;
309 }
310
311 .wpdm-dialog__btn--secondary:focus {
312 box-shadow: 0 0 0 3px rgba(148, 163, 184, 0.2);
313 }
314
315 /* Primary Button */
316 .wpdm-dialog__btn--primary {
317 color: #ffffff;
318 background: linear-gradient(135deg, var(--color-primary, #3b82f6) 0%, #2563eb 100%);
319 box-shadow: 0 1px 3px rgba(37, 99, 235, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.1);
320 }
321
322 .wpdm-dialog__btn--primary:hover {
323 background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%);
324 transform: translateY(-1px);
325 box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
326 }
327
328 .wpdm-dialog__btn--primary:focus {
329 box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.3);
330 }
331
332 .wpdm-dialog__btn--primary:active {
333 transform: translateY(0);
334 }
335
336 /* Success Button */
337 .wpdm-dialog__btn--success {
338 color: #ffffff;
339 background: linear-gradient(135deg, #10b981 0%, #059669 100%);
340 box-shadow: 0 1px 3px rgba(5, 150, 105, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.1);
341 }
342
343 .wpdm-dialog__btn--success:hover {
344 background: linear-gradient(135deg, #059669 0%, #047857 100%);
345 transform: translateY(-1px);
346 box-shadow: 0 4px 12px rgba(5, 150, 105, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
347 }
348
349 /* Danger Button */
350 .wpdm-dialog__btn--danger {
351 color: #ffffff;
352 background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
353 box-shadow: 0 1px 3px rgba(220, 38, 38, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.1);
354 }
355
356 .wpdm-dialog__btn--danger:hover {
357 background: linear-gradient(135deg, #dc2626 0%, #b91c1c 100%);
358 transform: translateY(-1px);
359 box-shadow: 0 4px 12px rgba(220, 38, 38, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
360 }
361
362 /* Loading State */
363 .wpdm-dialog__btn--loading {
364 pointer-events: none;
365 opacity: 0.7;
366 }
367
368 .wpdm-dialog__btn--loading::before {
369 content: "";
370 width: 16px;
371 height: 16px;
372 border: 2px solid transparent;
373 border-top-color: currentColor;
374 border-radius: 50%;
375 animation: wpdm-dialog-spin 0.6s linear infinite;
376 }
377
378 @keyframes wpdm-dialog-spin {
379 to { transform: rotate(360deg); }
380 }
381
382 /* ==========================================================================
383 Dark Mode Styles
384 ========================================================================== */
385
386 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog,
387 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog {
388 background: #1e293b;
389 box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 255, 255, 0.05);
390 }
391
392 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__header,
393 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__header {
394 background: linear-gradient(180deg, #1e293b 0%, #0f172a 100%);
395 border-bottom-color: #334155;
396 }
397
398 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__title,
399 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__title {
400 color: #f1f5f9;
401 }
402
403 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__subtitle,
404 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__message,
405 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__subtitle,
406 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__message {
407 color: #94a3b8;
408 }
409
410 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__close,
411 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__close {
412 background: #334155;
413 border-color: #475569;
414 color: #94a3b8;
415 }
416
417 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__close:hover,
418 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__close:hover {
419 background: #475569;
420 border-color: #64748b;
421 color: #e2e8f0;
422 }
423
424 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__input,
425 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__input {
426 background: #0f172a;
427 border-color: #334155;
428 color: #f1f5f9;
429 }
430
431 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__input:focus,
432 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__input:focus {
433 background: #0f172a;
434 border-color: #3b82f6;
435 }
436
437 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__input::placeholder,
438 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__input::placeholder {
439 color: #64748b;
440 }
441
442 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__footer,
443 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__footer {
444 background: #0f172a;
445 border-top-color: #334155;
446 }
447
448 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__btn--secondary,
449 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__btn--secondary {
450 background: #334155;
451 border-color: #475569;
452 color: #e2e8f0;
453 }
454
455 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__btn--secondary:hover,
456 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__btn--secondary:hover {
457 background: #475569;
458 border-color: #64748b;
459 }
460
461 /* Dark mode icon variants */
462 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__icon--info,
463 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__icon--info {
464 background: rgba(59, 130, 246, 0.2);
465 color: #60a5fa;
466 box-shadow: 0 2px 8px rgba(59, 130, 246, 0.2), 0 0 0 1px rgba(59, 130, 246, 0.15);
467 }
468
469 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__icon--success,
470 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__icon--success {
471 background: rgba(16, 185, 129, 0.2);
472 color: #34d399;
473 box-shadow: 0 2px 8px rgba(16, 185, 129, 0.2), 0 0 0 1px rgba(16, 185, 129, 0.15);
474 }
475
476 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__icon--warning,
477 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__icon--warning {
478 background: rgba(245, 158, 11, 0.2);
479 color: #fbbf24;
480 box-shadow: 0 2px 8px rgba(245, 158, 11, 0.2), 0 0 0 1px rgba(245, 158, 11, 0.15);
481 }
482
483 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__icon--danger,
484 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__icon--danger {
485 background: rgba(239, 68, 68, 0.2);
486 color: #f87171;
487 box-shadow: 0 2px 8px rgba(239, 68, 68, 0.2), 0 0 0 1px rgba(239, 68, 68, 0.15);
488 }
489
490 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__icon--question,
491 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__icon--question {
492 background: rgba(139, 92, 246, 0.2);
493 color: #a78bfa;
494 box-shadow: 0 2px 8px rgba(139, 92, 246, 0.2), 0 0 0 1px rgba(139, 92, 246, 0.15);
495 }
496
497 /* System preference dark mode */
498 @media (prefers-color-scheme: dark) {
499 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog {
500 background: #1e293b;
501 box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 255, 255, 0.05);
502 }
503
504 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__header {
505 background: linear-gradient(180deg, #1e293b 0%, #0f172a 100%);
506 border-bottom-color: #334155;
507 }
508
509 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__title {
510 color: #f1f5f9;
511 }
512
513 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__subtitle,
514 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__message {
515 color: #94a3b8;
516 }
517
518 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__close {
519 background: #334155;
520 border-color: #475569;
521 color: #94a3b8;
522 }
523
524 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__close:hover {
525 background: #475569;
526 border-color: #64748b;
527 color: #e2e8f0;
528 }
529
530 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__input {
531 background: #0f172a;
532 border-color: #334155;
533 color: #f1f5f9;
534 }
535
536 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__input:focus {
537 background: #0f172a;
538 border-color: #3b82f6;
539 }
540
541 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__input::placeholder {
542 color: #64748b;
543 }
544
545 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__footer {
546 background: #0f172a;
547 border-top-color: #334155;
548 }
549
550 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__btn--secondary {
551 background: #334155;
552 border-color: #475569;
553 color: #e2e8f0;
554 }
555
556 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__btn--secondary:hover {
557 background: #475569;
558 border-color: #64748b;
559 }
560
561 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__icon--info {
562 background: rgba(59, 130, 246, 0.2);
563 color: #60a5fa;
564 box-shadow: 0 2px 8px rgba(59, 130, 246, 0.2), 0 0 0 1px rgba(59, 130, 246, 0.15);
565 }
566
567 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__icon--success {
568 background: rgba(16, 185, 129, 0.2);
569 color: #34d399;
570 box-shadow: 0 2px 8px rgba(16, 185, 129, 0.2), 0 0 0 1px rgba(16, 185, 129, 0.15);
571 }
572
573 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__icon--warning {
574 background: rgba(245, 158, 11, 0.2);
575 color: #fbbf24;
576 box-shadow: 0 2px 8px rgba(245, 158, 11, 0.2), 0 0 0 1px rgba(245, 158, 11, 0.15);
577 }
578
579 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__icon--danger {
580 background: rgba(239, 68, 68, 0.2);
581 color: #f87171;
582 box-shadow: 0 2px 8px rgba(239, 68, 68, 0.2), 0 0 0 1px rgba(239, 68, 68, 0.15);
583 }
584
585 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__icon--question {
586 background: rgba(139, 92, 246, 0.2);
587 color: #a78bfa;
588 box-shadow: 0 2px 8px rgba(139, 92, 246, 0.2), 0 0 0 1px rgba(139, 92, 246, 0.15);
589 }
590 }
591
592 /* ==========================================================================
593 AJAX Loading State
594 ========================================================================== */
595
596 .wpdm-dialog__body--ajax {
597 min-height: 160px;
598 display: flex;
599 align-items: center;
600 justify-content: center;
601 background: linear-gradient(180deg, #f8fafc 0%, #ffffff 100%);
602 }
603
604 .wpdm-dialog__loading {
605 display: flex;
606 flex-direction: column;
607 align-items: center;
608 gap: 1.25rem;
609 padding: 2rem;
610 }
611
612 /* Modern dots spinner */
613 .wpdm-dialog__spinner {
614 display: flex;
615 align-items: center;
616 justify-content: center;
617 gap: 6px;
618 height: 40px;
619 }
620
621 .wpdm-dialog__spinner::before,
622 .wpdm-dialog__spinner::after,
623 .wpdm-dialog__spinner span {
624 content: '';
625 width: 10px;
626 height: 10px;
627 background: var(--color-primary, #3b82f6);
628 border-radius: 50%;
629 animation: wpdm-dialog-bounce 1.4s ease-in-out infinite both;
630 }
631
632 .wpdm-dialog__spinner::before {
633 animation-delay: -0.32s;
634 }
635
636 .wpdm-dialog__spinner span {
637 animation-delay: -0.16s;
638 }
639
640 @keyframes wpdm-dialog-bounce {
641 0%, 80%, 100% {
642 transform: scale(0.6);
643 opacity: 0.4;
644 }
645 40% {
646 transform: scale(1);
647 opacity: 1;
648 }
649 }
650
651 /* Loading text with shimmer effect */
652 .wpdm-dialog__loading-text {
653 margin: 0;
654 font-size: 0.875rem;
655 font-weight: 500;
656 color: #64748b;
657 position: relative;
658 overflow: hidden;
659 }
660
661 .wpdm-dialog__loading-text::after {
662 content: '';
663 position: absolute;
664 top: 0;
665 left: -100%;
666 width: 100%;
667 height: 100%;
668 background: linear-gradient(90deg, transparent, rgba(255,255,255,0.6), transparent);
669 animation: wpdm-dialog-shimmer 2s infinite;
670 }
671
672 @keyframes wpdm-dialog-shimmer {
673 0% { left: -100%; }
674 100% { left: 100%; }
675 }
676
677 /* Skeleton placeholder for content loading */
678 .wpdm-dialog__skeleton {
679 width: 100%;
680 padding: 1.5rem;
681 }
682
683 .wpdm-dialog__skeleton-line {
684 height: 12px;
685 background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 50%, #e2e8f0 75%);
686 background-size: 200% 100%;
687 border-radius: 6px;
688 margin-bottom: 0.75rem;
689 animation: wpdm-dialog-skeleton 1.5s ease-in-out infinite;
690 }
691
692 .wpdm-dialog__skeleton-line:last-child {
693 margin-bottom: 0;
694 width: 60%;
695 }
696
697 .wpdm-dialog__skeleton-line--short {
698 width: 40%;
699 }
700
701 .wpdm-dialog__skeleton-line--medium {
702 width: 75%;
703 }
704
705 @keyframes wpdm-dialog-skeleton {
706 0% { background-position: 200% 0; }
707 100% { background-position: -200% 0; }
708 }
709
710 /* ==========================================================================
711 AJAX Error State
712 ========================================================================== */
713
714 .wpdm-dialog__error {
715 display: flex;
716 flex-direction: column;
717 align-items: center;
718 gap: 1rem;
719 padding: 1.5rem;
720 text-align: center;
721 }
722
723 .wpdm-dialog__error-icon {
724 display: flex;
725 align-items: center;
726 justify-content: center;
727 width: 56px;
728 height: 56px;
729 background: linear-gradient(135deg, #fef2f2 0%, #fee2e2 100%);
730 border-radius: 50%;
731 color: #dc2626;
732 }
733
734 .wpdm-dialog__error-icon svg {
735 width: 28px;
736 height: 28px;
737 }
738
739 .wpdm-dialog__error-message {
740 margin: 0;
741 font-size: 0.9375rem;
742 color: #64748b;
743 line-height: 1.5;
744 }
745
746 .wpdm-dialog__retry {
747 margin-top: 0.5rem;
748 }
749
750 /* ==========================================================================
751 Hidden Footer
752 ========================================================================== */
753
754 .wpdm-dialog__footer--hidden {
755 display: none !important;
756 }
757
758 /* Footer appear animation */
759 .wpdm-dialog__footer:not(.wpdm-dialog__footer--hidden) {
760 animation: wpdm-dialog-footer-appear 0.25s cubic-bezier(0.4, 0, 0.2, 1) forwards;
761 }
762
763 @keyframes wpdm-dialog-footer-appear {
764 0% {
765 opacity: 0;
766 transform: translateY(8px);
767 }
768 100% {
769 opacity: 1;
770 transform: translateY(0);
771 }
772 }
773
774 /* ==========================================================================
775 Dark Mode - AJAX States
776 ========================================================================== */
777
778 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__body--ajax,
779 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__body--ajax {
780 background: linear-gradient(180deg, #0f172a 0%, #1e293b 100%);
781 }
782
783 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__spinner::before,
784 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__spinner::after,
785 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__spinner span,
786 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__spinner::before,
787 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__spinner::after,
788 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__spinner span {
789 background: #60a5fa;
790 }
791
792 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__loading-text,
793 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__loading-text {
794 color: #94a3b8;
795 }
796
797 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__loading-text::after,
798 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__loading-text::after {
799 background: linear-gradient(90deg, transparent, rgba(255,255,255,0.1), transparent);
800 }
801
802 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__skeleton-line,
803 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__skeleton-line {
804 background: linear-gradient(90deg, #334155 25%, #475569 50%, #334155 75%);
805 background-size: 200% 100%;
806 }
807
808 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__error-icon,
809 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__error-icon {
810 background: rgba(239, 68, 68, 0.15);
811 color: #f87171;
812 }
813
814 .wpdm-dialog-wrapper.dark-mode .wpdm-dialog__error-message,
815 .wpdm-dialog-wrapper.wpdm-dialog--dark .wpdm-dialog__error-message {
816 color: #94a3b8;
817 }
818
819 @media (prefers-color-scheme: dark) {
820 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__body--ajax {
821 background: linear-gradient(180deg, #0f172a 0%, #1e293b 100%);
822 }
823
824 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__spinner::before,
825 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__spinner::after,
826 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__spinner span {
827 background: #60a5fa;
828 }
829
830 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__loading-text {
831 color: #94a3b8;
832 }
833
834 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__loading-text::after {
835 background: linear-gradient(90deg, transparent, rgba(255,255,255,0.1), transparent);
836 }
837
838 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__skeleton-line {
839 background: linear-gradient(90deg, #334155 25%, #475569 50%, #334155 75%);
840 background-size: 200% 100%;
841 }
842
843 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__error-icon {
844 background: rgba(239, 68, 68, 0.15);
845 color: #f87171;
846 }
847
848 .wpdm-dialog-wrapper:not(.light-mode) .wpdm-dialog__error-message {
849 color: #94a3b8;
850 }
851 }
852
853 /* ==========================================================================
854 Mobile Responsive
855 ========================================================================== */
856
857 @media (max-width: 480px) {
858 .wpdm-dialog-wrapper {
859 padding: 0.5rem;
860 align-items: flex-end;
861 }
862
863 .wpdm-dialog {
864 max-width: 100% !important;
865 border-radius: 16px 16px 0 0;
866 margin-bottom: 0;
867 }
868
869 .wpdm-dialog__footer {
870 flex-direction: column;
871 }
872
873 .wpdm-dialog__btn {
874 width: 100%;
875 }
876 }
877