PluginProbe
Atomic Edge Security – Firewall, Malware Scan and Login Security / 2.2.2
Atomic Edge Security – Firewall, Malware Scan and Login Security v2.2.2
trunk 2.0.0 2.1.0 2.2.0 2.2.1 2.2.2 2.3.0 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 All 29 releases
atomic-edge-security / admin / css / admin.css

admin.css in Atomic Edge Security – Firewall, Malware Scan and Login Security 2.2.2, at admin/css/admin.css

1,595 lines 26.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * AtomicEdge Admin Styles
3 *
4 * @package AtomicEdge
5 */
6
7 /* ==========================================================================
8 Base Styles
9 ========================================================================== */
10
11 .atomicedge-wrap {
12 max-width: 1200px;
13 }
14
15 .atomicedge-wrap h1 {
16 display: flex;
17 align-items: center;
18 gap: 10px;
19 }
20
21 .atomicedge-logo {
22 height: 32px;
23 width: auto;
24 vertical-align: middle;
25 }
26
27 /* ==========================================================================
28 Welcome / Not Connected State
29 ========================================================================== */
30
31 .atomicedge-welcome {
32 background: #fff;
33 border: 1px solid #c3c4c7;
34 border-radius: 4px;
35 padding: 30px;
36 margin-top: 20px;
37 }
38
39 .atomicedge-welcome-header {
40 text-align: center;
41 margin-bottom: 30px;
42 }
43
44 .atomicedge-welcome-header h2 {
45 font-size: 24px;
46 margin-bottom: 10px;
47 }
48
49 .atomicedge-connect-box {
50 max-width: 600px;
51 margin: 0 auto 40px;
52 padding: 25px;
53 background: #f6f7f7;
54 border-radius: 4px;
55 }
56
57 .atomicedge-connect-box h3 {
58 margin-top: 0;
59 }
60
61 /* Features Grid */
62 .atomicedge-features {
63 margin-top: 40px;
64 }
65
66 .atomicedge-feature-grid {
67 display: grid;
68 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
69 gap: 20px;
70 margin-top: 20px;
71 }
72
73 .atomicedge-feature {
74 text-align: center;
75 padding: 20px;
76 background: #f6f7f7;
77 border-radius: 4px;
78 }
79
80 .atomicedge-feature .dashicons {
81 font-size: 40px;
82 width: 40px;
83 height: 40px;
84 color: #666AE5;
85 }
86
87 .atomicedge-feature h4 {
88 margin: 15px 0 10px;
89 }
90
91 .atomicedge-feature p {
92 margin: 0;
93 color: #646970;
94 }
95
96 /* ==========================================================================
97 Dashboard
98 ========================================================================== */
99
100 .atomicedge-status-bar {
101 display: flex;
102 align-items: center;
103 gap: 20px;
104 padding: 15px 20px;
105 background: #fff;
106 border: 1px solid #c3c4c7;
107 border-radius: 4px;
108 margin: 20px 0;
109 }
110
111 .atomicedge-status {
112 display: flex;
113 align-items: center;
114 gap: 8px;
115 font-weight: 600;
116 }
117
118 .atomicedge-status-connected {
119 color: #00a32a;
120 }
121
122 .atomicedge-status-connected .dashicons {
123 color: #00a32a;
124 }
125
126 .atomicedge-domain,
127 .atomicedge-plan {
128 color: #646970;
129 }
130
131 /* Dashboard Widgets */
132 .atomicedge-dashboard-widgets {
133 display: grid;
134 grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
135 gap: 20px;
136 margin: 20px 0;
137 }
138
139 .atomicedge-widget {
140 background: #fff;
141 border: 1px solid #c3c4c7;
142 border-radius: 4px;
143 padding: 20px;
144 }
145
146 .atomicedge-widget h3 {
147 margin: 0 0 15px;
148 padding-bottom: 10px;
149 border-bottom: 1px solid #f0f0f1;
150 }
151
152 .atomicedge-widget-chart {
153 min-height: 300px;
154 }
155
156 /* Quick Actions */
157 .atomicedge-quick-actions {
158 background: #fff;
159 border: 1px solid #c3c4c7;
160 border-radius: 4px;
161 padding: 20px;
162 margin: 20px 0;
163 }
164
165 .atomicedge-quick-actions h3 {
166 margin-top: 0;
167 }
168
169 .atomicedge-action-buttons {
170 display: flex;
171 flex-wrap: wrap;
172 gap: 10px;
173 }
174
175 .atomicedge-action-buttons .button {
176 display: inline-flex;
177 align-items: center;
178 gap: 5px;
179 }
180
181 /* ==========================================================================
182 Analytics
183 ========================================================================== */
184
185 .atomicedge-period-selector {
186 display: flex;
187 align-items: center;
188 gap: 10px;
189 margin: 20px 0;
190 padding: 15px;
191 background: #fff;
192 border: 1px solid #c3c4c7;
193 border-radius: 4px;
194 }
195
196 .atomicedge-stats-grid {
197 display: grid;
198 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
199 gap: 20px;
200 margin: 20px 0;
201 }
202
203 .atomicedge-stat-box {
204 display: flex;
205 align-items: center;
206 gap: 15px;
207 padding: 20px;
208 background: #fff;
209 border: 1px solid #c3c4c7;
210 border-radius: 4px;
211 }
212
213 .atomicedge-stat-icon {
214 font-size: 32px;
215 width: 32px;
216 height: 32px;
217 color: #666AE5;
218 }
219
220 .atomicedge-stat-value {
221 display: block;
222 font-size: 24px;
223 font-weight: 600;
224 line-height: 1.2;
225 }
226
227 .atomicedge-stat-label {
228 display: block;
229 color: #646970;
230 font-size: 13px;
231 }
232
233 .atomicedge-charts {
234 display: grid;
235 grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
236 gap: 20px;
237 margin: 20px 0;
238 }
239
240 .atomicedge-chart-container {
241 background: #fff;
242 border: 1px solid #c3c4c7;
243 border-radius: 4px;
244 padding: 20px;
245 }
246
247 .atomicedge-chart-container h3 {
248 margin-top: 0;
249 }
250
251 .atomicedge-chart-wrapper {
252 position: relative;
253 height: 300px;
254 }
255
256 /* ==========================================================================
257 Tables
258 ========================================================================== */
259
260 .atomicedge-table-container {
261 margin: 20px 0;
262 }
263
264 .atomicedge-loading-row td {
265 text-align: center;
266 padding: 30px !important;
267 }
268
269 .atomicedge-loading-row .spinner {
270 float: none;
271 margin: 0 10px 0 0;
272 }
273
274 /* ==========================================================================
275 Access Control
276 ========================================================================== */
277
278 .atomicedge-tabs {
279 margin-bottom: 0;
280 }
281
282 .atomicedge-tab-content {
283 display: none;
284 background: #fff;
285 border: 1px solid #c3c4c7;
286 border-top: none;
287 padding: 20px;
288 }
289
290 .atomicedge-tab-active {
291 display: block;
292 }
293
294 .atomicedge-section-header {
295 margin-bottom: 20px;
296 }
297
298 .atomicedge-section-header h2 {
299 margin-bottom: 5px;
300 }
301
302 .atomicedge-section-header p {
303 margin: 0;
304 color: #646970;
305 }
306
307 .atomicedge-ip-form {
308 margin-bottom: 20px;
309 }
310
311 .atomicedge-form-row {
312 display: flex;
313 gap: 10px;
314 flex-wrap: wrap;
315 }
316
317 .atomicedge-form-row input[type="text"] {
318 flex: 1;
319 min-width: 200px;
320 }
321
322 .atomicedge-geo-form .atomicedge-form-section {
323 margin-bottom: 20px;
324 }
325
326 .atomicedge-country-selector {
327 margin-top: 15px;
328 }
329
330 .atomicedge-country-selector select {
331 width: 100%;
332 max-width: 400px;
333 }
334
335 /* ==========================================================================
336 Scanner
337 ========================================================================== */
338
339 .atomicedge-scanner-controls {
340 display: flex;
341 justify-content: space-between;
342 align-items: center;
343 flex-wrap: wrap;
344 gap: 20px;
345 margin: 20px 0;
346 padding: 20px;
347 background: #fff;
348 border: 1px solid #c3c4c7;
349 border-radius: 4px;
350 }
351
352 .atomicedge-scanner-actions {
353 display: flex;
354 gap: 10px;
355 }
356
357 .atomicedge-scan-controls-right {
358 display: flex;
359 flex-wrap: wrap;
360 align-items: center;
361 gap: 8px;
362 }
363
364 .atomicedge-scanner-actions .button {
365 display: inline-flex;
366 align-items: center;
367 gap: 6px;
368 }
369
370 .atomicedge-scan-progress {
371 padding: 30px;
372 text-align: center;
373 background: #fff;
374 border: 1px solid #c3c4c7;
375 border-radius: 4px;
376 margin: 20px 0;
377 }
378
379 .atomicedge-progress-bar {
380 height: 20px;
381 background: #f0f0f1;
382 border-radius: 10px;
383 overflow: hidden;
384 margin-bottom: 15px;
385 }
386
387 .atomicedge-progress-fill {
388 height: 100%;
389 background: #666AE5;
390 width: 0;
391 transition: width 0.3s ease;
392 animation: progress-pulse 1.5s ease-in-out infinite;
393 }
394
395 @keyframes progress-pulse {
396 0%, 100% {
397 opacity: 1;
398 }
399 50% {
400 opacity: 0.7;
401 }
402 }
403
404 .atomicedge-results-summary {
405 background: #fff;
406 border: 1px solid #c3c4c7;
407 border-radius: 4px;
408 padding: 20px;
409 margin: 20px 0;
410 }
411
412 .atomicedge-summary-grid {
413 display: grid;
414 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
415 gap: 20px;
416 margin-top: 15px;
417 }
418
419 .atomicedge-summary-item {
420 display: flex;
421 align-items: center;
422 gap: 15px;
423 padding: 20px;
424 border-radius: 4px;
425 text-decoration: none;
426 color: inherit;
427 transition: transform 0.15s ease, box-shadow 0.15s ease;
428 cursor: pointer;
429 }
430
431 .atomicedge-summary-item:hover {
432 transform: translateY(-2px);
433 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
434 }
435
436 .atomicedge-summary-item:focus {
437 outline: 2px solid #2271b1;
438 outline-offset: 2px;
439 }
440
441 .atomicedge-summary-item .dashicons {
442 font-size: 32px;
443 width: 32px;
444 height: 32px;
445 }
446
447 .atomicedge-summary-count {
448 font-size: 28px;
449 font-weight: 600;
450 line-height: 1;
451 }
452
453 .atomicedge-summary-label {
454 display: block;
455 color: #646970;
456 }
457
458 .atomicedge-ok {
459 background: #edfaef;
460 }
461
462 .atomicedge-ok .dashicons {
463 color: #00a32a;
464 }
465
466 .atomicedge-warning {
467 background: #fcf9e8;
468 }
469
470 .atomicedge-warning .dashicons {
471 color: #dba617;
472 }
473
474 .atomicedge-critical {
475 background: #fcf0f1;
476 }
477
478 .atomicedge-critical .dashicons {
479 color: #d63638;
480 }
481
482 .atomicedge-results-section {
483 background: #fff;
484 border: 1px solid #c3c4c7;
485 border-radius: 4px;
486 padding: 20px;
487 margin: 20px 0;
488 }
489
490 .atomicedge-results-section h3 {
491 margin-top: 0;
492 }
493
494 .atomicedge-results-section table {
495 width: 100%;
496 table-layout: fixed;
497 }
498
499 .atomicedge-results-section td {
500 vertical-align: top;
501 word-break: break-word;
502 }
503
504 .atomicedge-results-section td code {
505 white-space: normal;
506 }
507
508 .atomicedge-results-count {
509 font-weight: normal;
510 color: #646970;
511 font-size: 14px;
512 }
513
514 /* Pagination */
515 .atomicedge-pagination {
516 display: flex;
517 align-items: center;
518 justify-content: space-between;
519 margin-top: 15px;
520 padding-top: 15px;
521 border-top: 1px solid #c3c4c7;
522 }
523
524 .atomicedge-pagination:empty {
525 display: none;
526 }
527
528 .atomicedge-pagination-info {
529 color: #646970;
530 font-size: 13px;
531 }
532
533 .atomicedge-pagination-buttons {
534 display: flex;
535 gap: 5px;
536 }
537
538 .atomicedge-pagination-buttons button {
539 min-width: 36px;
540 }
541
542 .atomicedge-pagination-buttons button.current {
543 background: #666AE5;
544 border-color: #5558c8;
545 color: #fff;
546 }
547
548 .atomicedge-paginated-table tbody tr.hidden-row {
549 display: none;
550 }
551
552 .atomicedge-severity {
553 display: inline-block;
554 padding: 3px 8px;
555 border-radius: 3px;
556 font-size: 12px;
557 font-weight: 600;
558 text-transform: uppercase;
559 }
560
561 .atomicedge-severity-high {
562 background: #fcf9e8;
563 color: #996800;
564 }
565
566 .atomicedge-severity-critical {
567 background: #fcf0f1;
568 color: #8a1116;
569 }
570
571 .atomicedge-all-clear {
572 text-align: center;
573 padding: 40px;
574 background: #edfaef;
575 border-radius: 4px;
576 margin: 20px 0;
577 }
578
579 .atomicedge-all-clear .dashicons {
580 font-size: 60px;
581 width: 60px;
582 height: 60px;
583 color: #00a32a;
584 }
585
586 .atomicedge-all-clear h3 {
587 margin: 15px 0 10px;
588 color: #00a32a;
589 }
590
591 .atomicedge-scanner-info-box {
592 background: #f6f7f7;
593 border: 1px solid #c3c4c7;
594 border-radius: 4px;
595 padding: 20px;
596 margin: 20px 0;
597 }
598
599 .atomicedge-scanner-info-box h3 {
600 margin-top: 0;
601 }
602
603 .atomicedge-scanner-info-box ul {
604 margin: 0;
605 padding: 0;
606 list-style: none;
607 }
608
609 .atomicedge-scanner-info-box li {
610 display: flex;
611 align-items: center;
612 gap: 8px;
613 padding: 5px 0;
614 }
615
616 .atomicedge-scanner-info-box .dashicons {
617 color: #00a32a;
618 }
619
620 /* ==========================================================================
621 Settings
622 ========================================================================== */
623
624 .atomicedge-settings-section {
625 background: #fff;
626 border: 1px solid #c3c4c7;
627 border-radius: 4px;
628 padding: 20px;
629 margin: 20px 0;
630 }
631
632 .atomicedge-settings-section h2 {
633 margin-top: 0;
634 padding-bottom: 10px;
635 border-bottom: 1px solid #f0f0f1;
636 }
637
638 .atomicedge-connection-status {
639 display: flex;
640 align-items: flex-start;
641 gap: 15px;
642 padding: 15px;
643 border-radius: 4px;
644 }
645
646 .atomicedge-connected {
647 background: #edfaef;
648 }
649
650 .atomicedge-connected .dashicons {
651 color: #00a32a;
652 font-size: 24px;
653 width: 24px;
654 height: 24px;
655 }
656
657 .atomicedge-disconnected {
658 background: #fcf9e8;
659 }
660
661 .atomicedge-disconnected .dashicons {
662 color: #dba617;
663 font-size: 24px;
664 width: 24px;
665 height: 24px;
666 }
667
668 .atomicedge-connection-info {
669 display: flex;
670 flex-direction: column;
671 gap: 5px;
672 }
673
674 .atomicedge-connection-domain,
675 .atomicedge-connection-key {
676 color: #646970;
677 font-size: 13px;
678 }
679
680 .atomicedge-info-table th {
681 width: 200px;
682 }
683
684 /* ==========================================================================
685 Common States
686 ========================================================================== */
687
688 .atomicedge-loading {
689 text-align: center;
690 padding: 30px;
691 color: #646970;
692 }
693
694 .atomicedge-loading .spinner {
695 float: none;
696 margin: 0 10px 0 0;
697 }
698
699 .atomicedge-error {
700 text-align: center;
701 padding: 30px;
702 color: #d63638;
703 }
704
705 .atomicedge-error .dashicons {
706 font-size: 40px;
707 width: 40px;
708 height: 40px;
709 display: block;
710 margin: 0 auto 10px;
711 }
712
713 .atomicedge-no-results {
714 text-align: center;
715 padding: 40px;
716 background: #f6f7f7;
717 border-radius: 4px;
718 }
719
720 .atomicedge-no-results .dashicons {
721 font-size: 50px;
722 width: 50px;
723 height: 50px;
724 color: #c3c4c7;
725 }
726
727 .atomicedge-no-results h3 {
728 margin: 15px 0 10px;
729 }
730
731 .atomicedge-no-results p {
732 color: #646970;
733 margin: 0;
734 }
735
736 /* ==========================================================================
737 Pagination
738 ========================================================================== */
739
740 .atomicedge-pagination {
741 display: flex;
742 justify-content: center;
743 align-items: center;
744 gap: 15px;
745 margin: 20px 0;
746 }
747
748 /* ==========================================================================
749 Buttons - AtomicEdge Purple Theme
750 ========================================================================== */
751
752 .atomicedge-wrap .button-primary,
753
754 .atomicedge-wrap .button-hero.button-primary {
755 background: #666AE5;
756 border-color: #5558c8;
757 color: #fff;
758 }
759
760 /* Button with icon - use flexbox for proper alignment */
761 .atomicedge-wrap .button-hero {
762 display: inline-flex;
763 align-items: center;
764 justify-content: center;
765 gap: 8px;
766 }
767
768 .atomicedge-wrap .atomicedge-secondary-button {
769 display: inline-flex;
770 align-items: center;
771 gap: 8px;
772 }
773
774 .atomicedge-wrap .atomicedge-secondary-button.button-hero {
775 min-height: 46px;
776 padding: 0 14px;
777 }
778
779 .atomicedge-wrap .button-hero .dashicons {
780 font-size: 20px;
781 width: 20px;
782 height: 20px;
783 line-height: 1;
784 }
785
786 .atomicedge-wrap .button-primary:hover,
787 .atomicedge-wrap .button-primary:focus,
788 .atomicedge-wrap .button-hero.button-primary:hover,
789 .atomicedge-wrap .button-hero.button-primary:focus {
790 background: #5558c8;
791 border-color: #4a4db0;
792 color: #fff;
793 }
794
795 .atomicedge-wrap .button-primary:active,
796 .atomicedge-wrap .button-hero.button-primary:active {
797 background: #4a4db0;
798 border-color: #3f4298;
799 }
800
801 .atomicedge-wrap .nav-tab-active,
802 .atomicedge-wrap .nav-tab-active:hover,
803 .atomicedge-wrap .nav-tab-active:focus {
804 border-bottom-color: #fff;
805 background: #fff;
806 color: #666AE5;
807 }
808
809 .atomicedge-wrap .nav-tab:hover,
810 .atomicedge-wrap .nav-tab:focus {
811 color: #666AE5;
812 }
813
814 /* ==========================================================================
815 Responsive
816 ========================================================================== */
817
818 @media screen and (max-width: 782px) {
819 .atomicedge-status-bar {
820 flex-direction: column;
821 align-items: flex-start;
822 }
823
824 .atomicedge-form-row {
825 flex-direction: column;
826 }
827
828 .atomicedge-form-row input[type="text"] {
829 width: 100%;
830 }
831
832 .atomicedge-scanner-controls {
833 flex-direction: column;
834 align-items: stretch;
835 }
836
837 .atomicedge-scanner-actions {
838 flex-direction: column;
839 }
840
841 .atomicedge-charts {
842 grid-template-columns: 1fr;
843 }
844 }
845
846 /* ==========================================================================
847 Vulnerability Scanner
848 ========================================================================== */
849
850 .atomicedge-vulnerability-scanner {
851 background: #fff;
852 border: 1px solid #c3c4c7;
853 border-radius: 4px;
854 padding: 20px;
855 margin: 30px 0 20px;
856 }
857
858 .atomicedge-vulnerability-scanner h2 {
859 margin-top: 0;
860 padding-bottom: 10px;
861 border-bottom: 1px solid #f0f0f1;
862 }
863
864 .atomicedge-notice {
865 display: flex;
866 align-items: flex-start;
867 gap: 12px;
868 padding: 15px;
869 background: #f0f6fc;
870 border-left: 4px solid #72aee6;
871 border-radius: 0 4px 4px 0;
872 }
873
874 .atomicedge-notice-info {
875 background: #f0f6fc;
876 border-left-color: #72aee6;
877 }
878
879 .atomicedge-notice .dashicons {
880 flex-shrink: 0;
881 color: #72aee6;
882 }
883
884 .atomicedge-notice p {
885 margin: 0;
886 }
887
888 .atomicedge-vuln-item {
889 padding: 15px;
890 margin: 10px 0;
891 background: #fcf9e8;
892 border-left: 4px solid #dba617;
893 border-radius: 0 4px 4px 0;
894 }
895
896 .atomicedge-vuln-item.atomicedge-severity-critical {
897 background: #fcf0f1;
898 border-left-color: #d63638;
899 }
900
901 .atomicedge-vuln-item.atomicedge-severity-high {
902 background: #fcf0f1;
903 border-left-color: #d63638;
904 }
905
906 .atomicedge-vuln-item.atomicedge-severity-medium {
907 background: #fcf9e8;
908 border-left-color: #dba617;
909 }
910
911 .atomicedge-vuln-item.atomicedge-severity-low {
912 background: #f0f6fc;
913 border-left-color: #72aee6;
914 }
915
916 .atomicedge-vuln-header {
917 display: flex;
918 align-items: center;
919 gap: 10px;
920 flex-wrap: wrap;
921 }
922
923 .atomicedge-vuln-fix {
924 margin: 8px 0 0;
925 font-size: 13px;
926 color: #50575e;
927 }
928
929 .atomicedge-vuln-refs {
930 margin: 8px 0 0;
931 font-size: 12px;
932 display: flex;
933 gap: 12px;
934 flex-wrap: wrap;
935 align-items: center;
936 }
937
938 .atomicedge-vuln-refs a {
939 text-decoration: none;
940 }
941
942 .atomicedge-vuln-link {
943 display: inline-flex;
944 align-items: center;
945 gap: 4px;
946 padding: 4px 10px;
947 background: #f0f0f1;
948 border-radius: 3px;
949 font-size: 12px;
950 color: #2271b1;
951 text-decoration: none;
952 transition: background 0.2s, color 0.2s;
953 }
954
955 .atomicedge-vuln-link:hover {
956 background: #2271b1;
957 color: #fff;
958 }
959
960 .atomicedge-vuln-link .dashicons {
961 font-size: 14px;
962 width: 14px;
963 height: 14px;
964 }
965
966 .atomicedge-cve-link {
967 background: #fef7e8;
968 color: #8a6d3b;
969 }
970
971 .atomicedge-cve-link:hover {
972 background: #8a6d3b;
973 color: #fff;
974 }
975
976 .atomicedge-vuln-plugin,
977 .atomicedge-vuln-theme {
978 margin-bottom: 25px;
979 }
980
981 .atomicedge-vuln-plugin h4,
982 .atomicedge-vuln-theme h4 {
983 display: flex;
984 align-items: center;
985 gap: 10px;
986 margin: 0 0 10px;
987 padding-bottom: 10px;
988 border-bottom: 1px solid #f0f0f1;
989 }
990
991 .atomicedge-version {
992 font-size: 12px;
993 font-weight: normal;
994 color: #646970;
995 background: #f0f0f1;
996 padding: 2px 8px;
997 border-radius: 3px;
998 }
999
1000 /* WPScan Settings */
1001 .atomicedge-wpscan-connected {
1002 display: flex;
1003 align-items: center;
1004 gap: 10px;
1005 }
1006
1007 .atomicedge-wpscan-connected .dashicons {
1008 flex-shrink: 0;
1009 }
1010
1011 #atomicedge-wpscan-status {
1012 font-size: 13px;
1013 color: #646970;
1014 }
1015
1016 #atomicedge-wpscan-token-status {
1017 margin-top: 8px;
1018 }
1019
1020 /* Environment Info Box */
1021 .atomicedge-environment-info {
1022 background: #f6f7f7;
1023 }
1024
1025 .atomicedge-environment-info ul {
1026 margin: 0;
1027 padding: 0;
1028 list-style: none;
1029 }
1030
1031 .atomicedge-environment-info li {
1032 margin: 8px 0;
1033 }
1034
1035 .atomicedge-environment-info li strong {
1036 display: inline-block;
1037 min-width: 140px;
1038 }
1039
1040 /* Attribution Notice */
1041 .atomicedge-attribution-notice {
1042 display: flex;
1043 align-items: center;
1044 gap: 12px;
1045 padding: 12px 16px;
1046 background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
1047 border: 1px solid #dee2e6;
1048 border-radius: 6px;
1049 margin-bottom: 20px;
1050 }
1051
1052 .atomicedge-attribution-logo {
1053 width: 24px;
1054 height: 24px;
1055 flex-shrink: 0;
1056 }
1057
1058 .atomicedge-attribution-text {
1059 font-size: 13px;
1060 color: #495057;
1061 line-height: 1.4;
1062 }
1063
1064 .atomicedge-attribution-text a {
1065 color: #2271b1;
1066 text-decoration: none;
1067 font-weight: 500;
1068 }
1069
1070 .atomicedge-attribution-text a:hover {
1071 text-decoration: underline;
1072 }
1073
1074 /* ==========================================================================
1075 CDN Page Styles
1076 ========================================================================== */
1077
1078 .atomicedge-cdn {
1079 margin-top: 20px;
1080 }
1081
1082 .atomicedge-cdn h2 {
1083 font-size: 1.5em;
1084 margin-bottom: 10px;
1085 }
1086
1087 .atomicedge-page-description {
1088 color: #646970;
1089 margin-bottom: 20px;
1090 }
1091
1092 /* CDN Cards */
1093 .atomicedge-card {
1094 background: #fff;
1095 border: 1px solid #c3c4c7;
1096 border-radius: 4px;
1097 padding: 20px;
1098 margin-bottom: 20px;
1099 }
1100
1101 .atomicedge-card h3 {
1102 margin-top: 0;
1103 margin-bottom: 10px;
1104 font-size: 1.2em;
1105 }
1106
1107 .atomicedge-card-description {
1108 color: #646970;
1109 margin-bottom: 15px;
1110 }
1111
1112 /* CDN Status Grid */
1113 .atomicedge-cdn-status-grid {
1114 display: grid;
1115 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
1116 gap: 15px;
1117 }
1118
1119 .atomicedge-cdn-status-item {
1120 display: flex;
1121 flex-direction: column;
1122 gap: 5px;
1123 }
1124
1125 .atomicedge-cdn-label {
1126 font-size: 12px;
1127 font-weight: 600;
1128 text-transform: uppercase;
1129 color: #646970;
1130 }
1131
1132 .atomicedge-cdn-value {
1133 font-size: 14px;
1134 }
1135
1136 .atomicedge-cdn-value code {
1137 padding: 4px 8px;
1138 background: #f0f0f1;
1139 border-radius: 3px;
1140 font-size: 13px;
1141 }
1142
1143 /* CDN Status Badge */
1144 .atomicedge-cdn-status-badge {
1145 display: inline-flex;
1146 align-items: center;
1147 gap: 8px;
1148 }
1149
1150 .atomicedge-status-indicator {
1151 width: 10px;
1152 height: 10px;
1153 border-radius: 50%;
1154 background: #ddd;
1155 }
1156
1157 .atomicedge-status-indicator.atomicedge-status-active {
1158 background: #00a32a;
1159 }
1160
1161 .atomicedge-status-indicator.atomicedge-status-inactive {
1162 background: #d63638;
1163 }
1164
1165 .atomicedge-cdn-status-badge.atomicedge-status-active .atomicedge-status-text {
1166 color: #00a32a;
1167 font-weight: 600;
1168 }
1169
1170 .atomicedge-cdn-status-badge.atomicedge-status-inactive .atomicedge-status-text {
1171 color: #d63638;
1172 }
1173
1174 /* Copy Button */
1175 .atomicedge-copy-btn {
1176 padding: 2px 6px !important;
1177 min-height: auto !important;
1178 vertical-align: middle;
1179 }
1180
1181 .atomicedge-copy-btn .dashicons {
1182 font-size: 16px;
1183 width: 16px;
1184 height: 16px;
1185 vertical-align: middle;
1186 }
1187
1188 /* CDN Purge Actions */
1189 .atomicedge-cdn-purge-actions {
1190 display: flex;
1191 align-items: center;
1192 gap: 15px;
1193 }
1194
1195 .atomicedge-cooldown-notice {
1196 display: flex;
1197 align-items: center;
1198 gap: 5px;
1199 color: #996800;
1200 font-size: 13px;
1201 }
1202
1203 .atomicedge-cooldown-notice .dashicons {
1204 font-size: 18px;
1205 width: 18px;
1206 height: 18px;
1207 }
1208
1209 .atomicedge-inline-progress {
1210 display: flex;
1211 align-items: center;
1212 gap: 8px;
1213 margin-top: 10px;
1214 color: #646970;
1215 }
1216
1217 .atomicedge-inline-progress .spinner {
1218 float: none;
1219 margin: 0;
1220 }
1221
1222 /* CDN Toggle Switches */
1223 .atomicedge-toggle {
1224 position: relative;
1225 display: inline-block;
1226 width: 44px;
1227 height: 24px;
1228 vertical-align: middle;
1229 }
1230
1231 .atomicedge-toggle input {
1232 opacity: 0;
1233 width: 0;
1234 height: 0;
1235 }
1236
1237 .atomicedge-toggle-slider {
1238 position: absolute;
1239 cursor: pointer;
1240 top: 0;
1241 left: 0;
1242 right: 0;
1243 bottom: 0;
1244 background-color: #ccc;
1245 transition: .3s;
1246 border-radius: 24px;
1247 }
1248
1249 .atomicedge-toggle-slider:before {
1250 position: absolute;
1251 content: "";
1252 height: 18px;
1253 width: 18px;
1254 left: 3px;
1255 bottom: 3px;
1256 background-color: white;
1257 transition: .3s;
1258 border-radius: 50%;
1259 }
1260
1261 .atomicedge-toggle input:checked + .atomicedge-toggle-slider {
1262 background-color: #2271b1;
1263 }
1264
1265 .atomicedge-toggle input:focus + .atomicedge-toggle-slider {
1266 box-shadow: 0 0 0 2px #2271b1;
1267 }
1268
1269 .atomicedge-toggle input:checked + .atomicedge-toggle-slider:before {
1270 transform: translateX(20px);
1271 }
1272
1273 /* CDN Settings Table */
1274 .atomicedge-settings-table th {
1275 width: 200px;
1276 vertical-align: top;
1277 padding-top: 15px;
1278 }
1279
1280 .atomicedge-settings-table td {
1281 padding-top: 10px;
1282 padding-bottom: 10px;
1283 }
1284
1285 .atomicedge-settings-table .description {
1286 margin-top: 8px;
1287 color: #646970;
1288 }
1289
1290 /* CDN Form Actions */
1291 .atomicedge-form-actions {
1292 display: flex;
1293 align-items: center;
1294 gap: 15px;
1295 margin-top: 20px;
1296 padding-top: 20px;
1297 border-top: 1px solid #dcdcde;
1298 }
1299
1300 .atomicedge-form-status {
1301 font-size: 13px;
1302 }
1303
1304 .atomicedge-form-status.atomicedge-status-success {
1305 color: #00a32a;
1306 }
1307
1308 .atomicedge-form-status.atomicedge-status-error {
1309 color: #d63638;
1310 }
1311
1312 /* Button with icon */
1313 .atomicedge-cdn button .dashicons,
1314 .atomicedge-cdn .button .dashicons {
1315 vertical-align: middle;
1316 margin-right: 4px;
1317 margin-top: -2px;
1318 }
1319
1320 /* CDN Loading State */
1321 .atomicedge-loading {
1322 display: flex;
1323 align-items: center;
1324 gap: 10px;
1325 padding: 20px;
1326 color: #646970;
1327 }
1328
1329 .atomicedge-loading .spinner {
1330 float: none;
1331 margin: 0;
1332 }
1333
1334 /* External link icon */
1335 .button .dashicons-external {
1336 margin-left: 4px;
1337 margin-right: 0;
1338 }
1339
1340 /* Development Mode Notice */
1341 .atomicedge-dev-mode-notice {
1342 background: linear-gradient(135deg, #f0e6fa 0%, #e6f0fa 100%);
1343 border: 2px dashed #9854cf;
1344 border-radius: 8px;
1345 padding: 16px 20px;
1346 margin-bottom: 20px;
1347 display: flex;
1348 align-items: flex-start;
1349 gap: 12px;
1350 }
1351
1352 .atomicedge-dev-mode-notice .dashicons {
1353 color: #9854cf;
1354 font-size: 24px;
1355 width: 24px;
1356 height: 24px;
1357 flex-shrink: 0;
1358 }
1359
1360 .atomicedge-dev-mode-notice strong {
1361 color: #6b21a8;
1362 }
1363
1364 .atomicedge-dev-mode-notice p {
1365 margin: 0 0 4px 0;
1366 }
1367
1368 .atomicedge-dev-mode-notice p:last-child {
1369 margin-bottom: 0;
1370 }
1371
1372 .atomicedge-dev-mode-notice code {
1373 background: rgba(152, 84, 207, 0.1);
1374 padding: 2px 6px;
1375 border-radius: 3px;
1376 font-size: 12px;
1377 }
1378
1379 /* ==========================================================================
1380 Adaptive Defense
1381 ========================================================================== */
1382
1383 .atomicedge-ad-stats-grid {
1384 display: grid;
1385 grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
1386 gap: 20px;
1387 margin-bottom: 25px;
1388 }
1389
1390 .atomicedge-ad-stat-box {
1391 background: #fff;
1392 border: 1px solid #dcdcde;
1393 border-radius: 4px;
1394 padding: 20px;
1395 text-align: center;
1396 }
1397
1398 .atomicedge-ad-stat-value {
1399 font-size: 32px;
1400 font-weight: 600;
1401 color: #1d2327;
1402 line-height: 1.2;
1403 }
1404
1405 .atomicedge-ad-stat-label {
1406 font-size: 13px;
1407 color: #646970;
1408 margin-top: 5px;
1409 }
1410
1411 .atomicedge-ad-badge-enabled {
1412 display: inline-block;
1413 background: #00a32a;
1414 color: #fff;
1415 padding: 3px 10px;
1416 border-radius: 3px;
1417 font-weight: 600;
1418 font-size: 13px;
1419 }
1420
1421 .atomicedge-ad-badge-disabled {
1422 display: inline-block;
1423 background: #d63638;
1424 color: #fff;
1425 padding: 3px 10px;
1426 border-radius: 3px;
1427 font-weight: 600;
1428 font-size: 13px;
1429 }
1430
1431 /* Score badges */
1432 .atomicedge-ad-score {
1433 display: inline-block;
1434 padding: 2px 8px;
1435 border-radius: 3px;
1436 font-weight: 600;
1437 font-size: 12px;
1438 min-width: 32px;
1439 text-align: center;
1440 }
1441
1442 .atomicedge-ad-score-critical {
1443 background: #d63638;
1444 color: #fff;
1445 }
1446
1447 .atomicedge-ad-score-high {
1448 background: #dba617;
1449 color: #fff;
1450 }
1451
1452 .atomicedge-ad-score-medium {
1453 background: #f0c33c;
1454 color: #1d2327;
1455 }
1456
1457 .atomicedge-ad-score-low {
1458 background: #c3c4c7;
1459 color: #1d2327;
1460 }
1461
1462 /* Settings Table */
1463 .atomicedge-ad-settings-table {
1464 width: 100%;
1465 border-collapse: collapse;
1466 }
1467
1468 .atomicedge-ad-settings-table th,
1469 .atomicedge-ad-settings-table td {
1470 padding: 10px 12px;
1471 text-align: left;
1472 border-bottom: 1px solid #f0f0f1;
1473 }
1474
1475 .atomicedge-ad-settings-table th {
1476 font-weight: 400;
1477 color: #646970;
1478 width: 200px;
1479 }
1480
1481 .atomicedge-ad-settings-table td {
1482 font-weight: 600;
1483 }
1484
1485 /* Tab panels */
1486 .atomicedge-ad-tab-panel {
1487 display: none;
1488 }
1489
1490 .atomicedge-ad-tab-panel.active {
1491 display: block;
1492 }
1493
1494 /* Filters bar */
1495 .atomicedge-ad-filters {
1496 background: #f6f7f7;
1497 padding: 12px 15px;
1498 border-radius: 4px;
1499 margin-bottom: 15px;
1500 }
1501
1502 .atomicedge-ad-filters label {
1503 font-weight: 600;
1504 margin-right: 8px;
1505 }
1506
1507 .atomicedge-ad-filters select,
1508 .atomicedge-ad-filters input[type="text"] {
1509 margin-right: 15px;
1510 }
1511
1512 /* Card style for sections */
1513 .atomicedge-ad-card {
1514 background: #fff;
1515 border: 1px solid #dcdcde;
1516 border-radius: 4px;
1517 padding: 20px;
1518 margin-bottom: 20px;
1519 }
1520
1521 .atomicedge-ad-card h3 {
1522 margin-top: 0;
1523 display: flex;
1524 align-items: center;
1525 }
1526
1527 /* Override WordPress table styling for better appearance */
1528 #atomicedge-ad-blocked-table,
1529 #atomicedge-ad-actors-table,
1530 #atomicedge-ad-detections-table {
1531 border-spacing: 0;
1532 }
1533
1534 #atomicedge-ad-blocked-table td,
1535 #atomicedge-ad-actors-table td,
1536 #atomicedge-ad-detections-table td {
1537 vertical-align: middle;
1538 }
1539
1540 /* Action buttons in tables */
1541 #atomicedge-ad-blocked-table .button-small,
1542 #atomicedge-ad-actors-table .button-small,
1543 #atomicedge-ad-detections-table .button-small {
1544 margin-right: 5px;
1545 }
1546
1547 #atomicedge-ad-blocked-table .button-small:last-child,
1548 #atomicedge-ad-actors-table .button-small:last-child,
1549 #atomicedge-ad-detections-table .button-small:last-child {
1550 margin-right: 0;
1551 }
1552
1553 #atomicedge-ad-blocked-table .dashicons,
1554 #atomicedge-ad-actors-table .dashicons,
1555 #atomicedge-ad-detections-table .dashicons {
1556 font-size: 16px;
1557 width: 16px;
1558 height: 16px;
1559 }
1560
1561 /* Block form */
1562 .atomicedge-ad-block-form {
1563 display: flex;
1564 gap: 10px;
1565 flex-wrap: wrap;
1566 align-items: flex-end;
1567 }
1568
1569 .atomicedge-ad-block-form .form-group {
1570 display: flex;
1571 flex-direction: column;
1572 }
1573
1574 .atomicedge-ad-block-form label {
1575 margin-bottom: 4px;
1576 font-weight: 600;
1577 }
1578
1579 /* Pagination styling */
1580 .atomicedge-ad-pagination .tablenav-pages {
1581 display: flex;
1582 align-items: center;
1583 gap: 10px;
1584 }
1585
1586 .atomicedge-ad-pagination .displaying-num {
1587 color: #646970;
1588 font-style: italic;
1589 }
1590
1591 .atomicedge-ad-pagination .paging-input {
1592 padding: 0 10px;
1593 }
1594
1595