PluginProbe
Search Atlas SEO – OTTO AI SEO Automation for WordPress / 2.7.2
Search Atlas SEO – OTTO AI SEO Automation for WordPress v2.7.2
2.7.1 2.7.2 2.7.0 2.6.26 2.6.25 2.6.24 2.6.23 2.6.22 2.6.21 2.6.20 2.6.19 2.6.18 2.6.17 2.6.16 2.6.15 2.6.14 2.6.13 2.6.12 2.6.11 2.6.10 2.6.9 2.6.8 2.6.7 2.6.6 2.6.5 All 141 releases
metasync / admin / css / metasync-dashboard.css

metasync-dashboard.css in Search Atlas SEO – OTTO AI SEO Automation for WordPress 2.7.2, at admin/css/metasync-dashboard.css

3,550 lines 97.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Dashboard-inspired admin styling for Metasync plugin
3 * Modern dark theme matching the main dashboard design
4 */
5
6 /* Root Variables - Dashboard Color Scheme */
7 /* Dark Theme (Default) */
8 :root,
9 [data-theme="dark"] {
10 --dashboard-bg: #0f1419;
11 --dashboard-card-bg: #1a1f26;
12 --dashboard-card-hover: #222831;
13 --dashboard-input-bg: #22272e;
14 --dashboard-text-primary: #ffffff;
15 --dashboard-text: #ffffff;
16 --dashboard-text-secondary: #9ca3af;
17 --dashboard-accent: #3b82f6;
18 --dashboard-accent-hover: #2563eb;
19 --dashboard-success: #10b981;
20 --dashboard-warning: #f59e0b;
21 --dashboard-error: #ef4444;
22 --dashboard-border: #374151;
23 --dashboard-gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
24 --dashboard-gradient-accent: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
25 --dashboard-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -2px rgba(0, 0, 0, 0.1);
26 --dashboard-shadow-hover: 0 20px 25px -5px rgba(0, 0, 0, 0.4), 0 10px 10px -5px rgba(0, 0, 0, 0.2);
27 }
28
29 /* Light Theme */
30 [data-theme="light"] {
31 --dashboard-bg: #f8f9fa;
32 --dashboard-card-bg: #ffffff;
33 --dashboard-card-hover: #f1f3f5;
34 --dashboard-input-bg: #ffffff;
35 --dashboard-text-primary: #1a1f26;
36 --dashboard-text: #1a1f26;
37 --dashboard-text-secondary: #6b7280;
38 --dashboard-accent: #3b82f6;
39 --dashboard-accent-hover: #2563eb;
40 --dashboard-success: #10b981;
41 --dashboard-warning: #f59e0b;
42 --dashboard-error: #ef4444;
43 --dashboard-border: #e5e7eb;
44 --dashboard-gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
45 --dashboard-gradient-accent: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
46 --dashboard-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
47 --dashboard-shadow-hover: 0 20px 25px -5px rgba(0, 0, 0, 0.15), 0 10px 10px -5px rgba(0, 0, 0, 0.1);
48 }
49
50 /* Theme Transition */
51 :root,
52 [data-theme] {
53 transition: background-color 0.3s ease, color 0.3s ease;
54 }
55
56 /* Only apply styles within plugin pages - NO LAYOUT CHANGES */
57 .metasync-dashboard-wrap {
58 background: var(--dashboard-bg) !important;
59 color: var(--dashboard-text-primary) !important;
60 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
61 /* Apply dark background to edges without affecting layout */
62 position: relative;
63 margin: 0 -20px;
64 padding: 20px 40px; /* More lateral padding for content breathing room */
65 min-height: calc(100vh - 32px);
66 opacity: 1 !important;
67 }
68
69 /* Hide Jetpack identity crisis container within plugin pages */
70 .metasync-dashboard-wrap ~ .jp-identity-crisis-container,
71 .wrap.metasync-dashboard-wrap .jp-identity-crisis-container,
72 body.admin_page_searchatlas #jp-identity-crisis-container,
73 body.admin_page_searchatlas .jp-identity-crisis-container,
74 body[class*="admin_page_"][class*="searchatlas"] #jp-identity-crisis-container,
75 body[class*="admin_page_"][class*="searchatlas"] .jp-identity-crisis-container,
76 /* Handle custom whitelabel menu slugs - use presence of metasync-dashboard-wrap as indicator */
77 body:has(.metasync-dashboard-wrap) #jp-identity-crisis-container,
78 body:has(.metasync-dashboard-wrap) .jp-identity-crisis-container {
79 display: none !important;
80 }
81
82 /* Dark background extension - DISABLED to prevent black overlays */
83 /* .metasync-dashboard-wrap::before {
84 content: '';
85 position: absolute;
86 top: 0;
87 left: -50px;
88 right: -50px;
89 bottom: 0;
90 background: var(--dashboard-bg);
91 z-index: -1;
92 } */
93
94 /* Ensure content is above background overlay */
95 .metasync-dashboard-wrap > * {
96 position: relative;
97 z-index: 1;
98 }
99
100 /* Fix WordPress notices ONLY in plugin pages */
101 .metasync-dashboard-wrap .notice,
102 .metasync-dashboard-wrap .error,
103 .metasync-dashboard-wrap .updated {
104 background: var(--dashboard-card-bg) !important;
105 border-left: 4px solid var(--dashboard-accent) !important;
106 color: var(--dashboard-text-primary) !important;
107 border-radius: 8px !important;
108 box-shadow: var(--dashboard-shadow) !important;
109 margin: 20px 0 !important;
110 backdrop-filter: blur(10px) !important;
111 }
112
113 .metasync-dashboard-wrap .notice p,
114 .metasync-dashboard-wrap .error p,
115 .metasync-dashboard-wrap .updated p {
116 color: var(--dashboard-text-primary) !important;
117 }
118
119 .metasync-dashboard-wrap .notice a,
120 .metasync-dashboard-wrap .error a,
121 .metasync-dashboard-wrap .updated a {
122 color: var(--dashboard-accent) !important;
123 }
124
125 /* Specific error notice styling ONLY in plugin */
126 .metasync-dashboard-wrap .notice.notice-error {
127 border-left-color: var(--dashboard-error) !important;
128 background: rgba(239, 68, 68, 0.15) !important;
129 }
130
131 /* Specific warning notice styling ONLY in plugin.
132 Without this, warning notices fell through to the base .notice rule above
133 (blue border-left, plain card background) because that rule is !important
134 and the .notice-warning colours defined further down this file are not —
135 !important always wins regardless of source order, so the warning never
136 actually rendered yellow/amber. Mirrors the .notice-error override above. */
137 .metasync-dashboard-wrap .notice.notice-warning {
138 border-left-color: var(--dashboard-warning) !important;
139 background: rgba(245, 158, 11, 0.15) !important;
140 }
141
142 /* License mismatch notice specific styling ONLY in plugin */
143 .metasync-dashboard-wrap .notice:has(.dashicons-warning):before,
144 .metasync-dashboard-wrap .notice[class*="license"]:before,
145 .metasync-dashboard-wrap .notice[class*="mismatch"]:before {
146 content: "⚠️";
147 font-size: 20px;
148 margin-right: 8px;
149 display: inline-block;
150 }
151
152 /* Better button styling in notices ONLY in plugin */
153 .metasync-dashboard-wrap .notice .button,
154 .metasync-dashboard-wrap .error .button,
155 .metasync-dashboard-wrap .updated .button {
156 background: var(--dashboard-accent) !important;
157 color: var(--dashboard-text-primary) !important;
158 border: none !important;
159 border-radius: 6px !important;
160 padding: 8px 16px !important;
161 font-weight: 500 !important;
162 transition: all 0.3s ease !important;
163 }
164
165 .metasync-dashboard-wrap .notice .button:hover,
166 .metasync-dashboard-wrap .error .button:hover,
167 .metasync-dashboard-wrap .updated .button:hover {
168 background: var(--dashboard-accent-hover) !important;
169 transform: translateY(-1px) !important;
170 }
171
172 /* Theme Toggle Button */
173 .metasync-theme-toggle {
174 background: rgba(255, 255, 255, 0.1);
175 border: 1px solid rgba(255, 255, 255, 0.2);
176 border-radius: 20px;
177 padding: 6px;
178 display: flex;
179 align-items: center;
180 gap: 4px;
181 cursor: pointer;
182 transition: all 0.3s ease;
183 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
184 }
185
186 .metasync-theme-toggle:hover {
187 border-color: var(--dashboard-accent);
188 box-shadow: var(--dashboard-shadow);
189 }
190
191 .metasync-theme-option {
192 padding: 6px 12px;
193 border-radius: 16px;
194 font-size: 13px;
195 font-weight: 500;
196 color: var(--dashboard-text-secondary);
197 transition: all 0.3s ease;
198 cursor: pointer;
199 display: flex;
200 align-items: center;
201 gap: 6px;
202 border: none;
203 background: transparent;
204 }
205
206 .metasync-theme-option.active {
207 background: var(--dashboard-gradient-primary);
208 color: #ffffff;
209 box-shadow: 0 2px 8px rgba(59, 130, 246, 0.3);
210 }
211
212 .metasync-theme-option:hover:not(.active) {
213 color: var(--dashboard-text-primary);
214 background: var(--dashboard-card-hover);
215 }
216
217 .metasync-theme-icon {
218 font-size: 16px;
219 display: inline-flex;
220 align-items: center;
221 }
222
223 /* Plugin Header with Logo - Clean Layout */
224 .metasync-dashboard-wrap .metasync-header {
225 display: flex;
226 align-items: center;
227 justify-content: space-between;
228 margin-bottom: 1rem;
229 padding: 20px;
230 background: var(--dashboard-card-bg);
231 border: 1px solid var(--dashboard-border);
232 border-radius: 12px;
233 box-shadow: var(--dashboard-shadow);
234 color: var(--dashboard-text-primary);
235 }
236
237 .metasync-dashboard-wrap .metasync-header-left {
238 display: flex;
239 align-items: center;
240 flex: 1;
241 }
242
243 .metasync-dashboard-wrap .metasync-header-right {
244 display: flex;
245 align-items: center;
246 gap: 12px;
247 flex-shrink: 0;
248 }
249
250 .metasync-dashboard-wrap .metasync-logo-container {
251 flex-shrink: 0;
252 display: flex;
253 align-items: center;
254 background: linear-gradient(135deg, #1a1f26 0%, #2d3748 100%);
255 padding: 12px 20px;
256 border-radius: 12px;
257 border: 1px solid rgba(255, 255, 255, 0.1);
258 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
259 transition: all 0.3s ease;
260 }
261
262 .metasync-dashboard-wrap .metasync-logo-container:hover {
263 transform: translateY(-2px);
264 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
265 border-color: rgba(255, 255, 255, 0.2);
266 }
267
268 .metasync-dashboard-wrap .metasync-logo {
269 height: 48px;
270 width: auto;
271 max-width: 200px;
272 object-fit: contain;
273 filter: brightness(1) contrast(1);
274 transition: all 0.3s ease;
275 }
276
277 .metasync-dashboard-wrap .metasync-logo:hover {
278 filter: brightness(1.1) contrast(1.1);
279 }
280
281 /* Dual-logo theme switching */
282 /* Default: show dark logo, hide light (matches PHP default theme of 'dark') */
283 .metasync-logo-light { display: none; }
284 .metasync-logo-dark { display: block; }
285
286 [data-theme="light"] .metasync-logo-dark {
287 display: none;
288 }
289
290 [data-theme="dark"] .metasync-logo-light {
291 display: none;
292 }
293
294 .metasync-header[data-current-theme="light"] .metasync-logo-dark {
295 display: none;
296 }
297
298 .metasync-header[data-current-theme="dark"] .metasync-logo-light {
299 display: none;
300 }
301
302 /* Light theme must explicitly show the light logo: its base state is
303 display:none, and hiding the dark logo alone would leave no logo visible. */
304 [data-theme="light"] .metasync-logo-light,
305 .metasync-header[data-current-theme="light"] .metasync-logo-light {
306 display: block;
307 }
308
309 /* Default (non-whitelabel) SA logo: invert on light theme so the white asset
310 stays visible against a light background. Dark theme keeps the original. */
311 [data-theme="light"] .metasync-logo-default,
312 .metasync-header[data-current-theme="light"] .metasync-logo-default {
313 filter: invert(1);
314 }
315
316 [data-theme="light"] .metasync-logo-default:hover,
317 .metasync-header[data-current-theme="light"] .metasync-logo-default:hover {
318 filter: invert(1) brightness(1.1) contrast(1.1);
319 }
320
321 [data-theme="dark"] .metasync-logo-default,
322 .metasync-header[data-current-theme="dark"] .metasync-logo-default {
323 filter: brightness(1) contrast(1);
324 }
325
326 /* Page Title Section - Below Header */
327 .metasync-dashboard-wrap .metasync-page-title {
328 margin-bottom: 2rem;
329 padding: 0;
330 }
331
332 .metasync-dashboard-wrap .metasync-page-title h1 {
333 color: var(--dashboard-text-primary);
334 font-size: 2.5rem;
335 font-weight: 700;
336 margin: 0;
337 background: var(--dashboard-gradient-primary);
338 -webkit-background-clip: text;
339 -webkit-text-fill-color: transparent;
340 background-clip: text;
341 text-align: left;
342 line-height: 1.2;
343 }
344
345 /* Fallback for browsers that don't support background-clip */
346 @supports not (-webkit-background-clip: text) {
347 .metasync-dashboard-wrap .metasync-page-title h1 {
348 color: var(--dashboard-accent);
349 background: none;
350 }
351 }
352
353 /* Integration Status */
354 .metasync-dashboard-wrap .metasync-integration-status {
355 display: flex;
356 align-items: center;
357 gap: 8px;
358 padding: 8px 16px;
359 border-radius: 20px;
360 font-size: 12px;
361 font-weight: 600;
362 text-transform: uppercase;
363 letter-spacing: 0.5px;
364 transition: all 0.3s ease;
365 }
366
367 .metasync-dashboard-wrap .metasync-integration-status.integrated {
368 background: rgba(16, 185, 129, 0.15);
369 color: var(--dashboard-success);
370 border: 1px solid rgba(16, 185, 129, 0.3);
371 }
372
373 .metasync-dashboard-wrap .metasync-integration-status.not-integrated {
374 background: rgba(239, 68, 68, 0.15);
375 color: var(--dashboard-error);
376 border: 1px solid rgba(239, 68, 68, 0.3);
377 }
378
379 .metasync-dashboard-wrap .metasync-integration-status.warning {
380 background: rgba(255, 185, 0, 0.15);
381 color: #ffb900;
382 border: 1px solid rgba(255, 185, 0, 0.3);
383 }
384
385 .metasync-dashboard-wrap .metasync-integration-status .status-indicator {
386 width: 8px;
387 height: 8px;
388 border-radius: 50%;
389 display: block;
390 }
391
392 .metasync-dashboard-wrap .metasync-integration-status.integrated .status-indicator {
393 background: var(--dashboard-success);
394 animation: pulse-success 2s infinite;
395 }
396
397 .metasync-dashboard-wrap .metasync-integration-status.not-integrated .status-indicator {
398 background: var(--dashboard-error);
399 }
400
401 .metasync-dashboard-wrap .metasync-integration-status.warning .status-indicator {
402 background: #ffb900;
403 }
404
405 @keyframes pulse-success {
406 0%, 100% { opacity: 1; }
407 50% { opacity: 0.6; }
408 }
409
410
411
412
413
414 /* Dashboard Cards - ONLY in plugin pages */
415 .metasync-dashboard-wrap .dashboard-card {
416 background: var(--dashboard-card-bg);
417 border: 1px solid var(--dashboard-border);
418 border-radius: 16px;
419 padding: 24px;
420 margin-bottom: 24px;
421 box-shadow: var(--dashboard-shadow);
422 /* Removed transition - was too distracting in sections */
423 backdrop-filter: blur(10px);
424 }
425
426 .metasync-dashboard-wrap .dashboard-card:hover {
427 background: var(--dashboard-card-hover);
428 box-shadow: var(--dashboard-shadow-hover);
429 /* Removed translateY animation - was too distracting */
430 }
431
432 .metasync-dashboard-wrap .dashboard-card h2 {
433 color: var(--dashboard-text-primary);
434 font-size: 1.5rem;
435 font-weight: 600;
436 margin: 0 0 16px 0;
437 display: flex;
438 align-items: center;
439 gap: 12px;
440 }
441
442 .metasync-dashboard-wrap .dashboard-card h3 {
443 color: var(--dashboard-text-primary);
444 font-size: 1.25rem;
445 font-weight: 500;
446 margin: 0 0 12px 0;
447 }
448
449 /* New Navigation System */
450 .metasync-dashboard-wrap .metasync-nav-wrapper {
451 margin: 0 0 32px 0;
452 padding: 0;
453 background: transparent;
454 position: relative;
455 z-index: 100;
456 }
457
458 .metasync-dashboard-wrap .metasync-nav-tabs {
459 display: flex;
460 gap: 4px;
461 flex-wrap: wrap;
462 background: var(--dashboard-card-bg);
463 border: 1px solid var(--dashboard-border);
464 border-radius: 12px;
465 padding: 6px;
466 backdrop-filter: blur(10px);
467 }
468
469 .metasync-dashboard-wrap .metasync-nav-tab {
470 display: flex;
471 align-items: center;
472 gap: 8px;
473 padding: 10px 16px;
474 border-radius: 8px;
475 text-decoration: none;
476 color: var(--dashboard-text-secondary);
477 font-weight: 500;
478 font-size: 14px;
479 transition: all 0.3s ease;
480 position: relative;
481 overflow: hidden;
482 border: none;
483 background: transparent;
484 }
485
486 .metasync-dashboard-wrap .metasync-nav-tab:hover {
487 color: var(--dashboard-text-primary);
488 background: rgba(255, 255, 255, 0.05);
489 transform: translateY(-1px);
490 }
491
492 .metasync-dashboard-wrap .metasync-nav-tab.active {
493 background: var(--dashboard-gradient-primary);
494 color: #ffffff;
495 box-shadow: var(--dashboard-shadow);
496 transform: translateY(-1px);
497 }
498
499 .metasync-dashboard-wrap .metasync-nav-tab .tab-icon {
500 font-size: 16px;
501 opacity: 1;
502 transition: all 0.3s ease;
503 filter: brightness(1.2) contrast(1.1);
504 text-shadow: 0 0 8px rgba(255, 255, 255, 0.3);
505 }
506
507 .metasync-dashboard-wrap .metasync-nav-tab.active .tab-icon,
508 .metasync-dashboard-wrap .metasync-nav-tab:hover .tab-icon {
509 opacity: 1;
510 transform: scale(1.1);
511 filter: brightness(1.4) contrast(1.2);
512 text-shadow: 0 0 12px rgba(255, 255, 255, 0.5);
513 }
514
515 .metasync-dashboard-wrap .metasync-nav-tab .tab-text {
516 font-weight: 500;
517 white-space: nowrap;
518 }
519
520 /* New Badge for AI Agent */
521 .metasync-dashboard-wrap .metasync-new-badge {
522 display: inline-block;
523 background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
524 color: #ffffff;
525 font-size: 9px;
526 font-weight: 700;
527 text-transform: uppercase;
528 letter-spacing: 0.5px;
529 padding: 2px 6px;
530 border-radius: 4px;
531 margin-left: 6px;
532 line-height: 1;
533 box-shadow: 0 2px 4px rgba(239, 68, 68, 0.3);
534 animation: pulse-badge 2s ease-in-out infinite;
535 }
536
537 .metasync-dashboard-wrap .metasync-nav-tab.active .metasync-new-badge {
538 background: rgba(255, 255, 255, 0.25);
539 color: #ffffff;
540 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
541 }
542
543 @keyframes pulse-badge {
544 0%, 100% {
545 transform: scale(1);
546 opacity: 1;
547 }
548 50% {
549 transform: scale(1.05);
550 opacity: 0.9;
551 }
552 }
553
554 /* Old nav-tab compatibility (fallback) */
555 .metasync-dashboard-wrap .nav-tab-wrapper {
556 display: none !important;
557 }
558
559 /* Hide WordPress settings section titles to prevent duplication */
560 .metasync-dashboard-wrap .dashboard-card h2.hndle,
561 .metasync-dashboard-wrap .dashboard-card .form-table caption,
562 .metasync-dashboard-wrap .dashboard-card > h2:not(.dashboard-card h2:first-child),
563 .metasync-dashboard-wrap .form-table + h2,
564 .metasync-dashboard-wrap .form-table + h3 {
565 display: none !important;
566 }
567
568 /* Also hide any orphaned WordPress section headers */
569 .metasync-dashboard-wrap .wrap > h2:not(.nav-tab-wrapper):not(.metasync-page-title h1),
570 .metasync-dashboard-wrap .wrap > h3:not(.metasync-page-title h1) {
571 display: none !important;
572 }
573
574 /* Form Styling - ONLY in plugin pages */
575 .metasync-dashboard-wrap form {
576 display: grid;
577 gap: 24px;
578 }
579
580 .metasync-dashboard-wrap .form-table {
581 background: transparent;
582 border: none;
583 border-collapse: separate;
584 /* Vertical spacing between each settings row (tr); horizontal stays 0 so th/td join */
585 border-spacing: 0 12px;
586 width: 100%;
587 }
588
589 .metasync-dashboard-wrap .form-table th {
590 background: var(--dashboard-card-bg);
591 border: 1px solid var(--dashboard-border);
592 border-right: none;
593 border-radius: 12px 0 0 12px;
594 color: var(--dashboard-text-primary);
595 font-weight: 500;
596 padding: 16px 20px;
597 text-align: left;
598 vertical-align: top;
599 width: 30%;
600 }
601
602 .metasync-dashboard-wrap .form-table td {
603 background: var(--dashboard-card-bg);
604 border: 1px solid var(--dashboard-border);
605 border-left: none;
606 border-radius: 0 12px 12px 0;
607 padding: 16px 20px;
608 vertical-align: top;
609 }
610
611 /* Each row is a self-contained card; vertical gaps come from border-spacing above */
612 .metasync-dashboard-wrap .form-table th,
613 .metasync-dashboard-wrap .form-table td {
614 padding: 16px 12px;
615 }
616
617 /* Simple Settings Menu Navigation Styles */
618 .metasync-nav-tabs {
619 display: flex;
620 justify-content: space-between;
621 align-items: center;
622 width: 100%;
623 }
624
625 .metasync-nav-left {
626 display: flex;
627 gap: 0;
628 }
629
630 .metasync-nav-right {
631 display: flex;
632 align-items: center;
633 gap: 8px;
634 margin-left: auto;
635 }
636
637 /* Grouped Navigation Styles with Dropdowns */
638 .metasync-nav-grouped {
639 flex-wrap: nowrap;
640 gap: 4px;
641 align-items: center;
642 }
643
644 /* Dropdown Container */
645 .metasync-nav-dropdown {
646 position: relative;
647 display: inline-block;
648 z-index: 999999;
649 }
650
651 .metasync-nav-dropdown.active {
652 z-index: 999999999;
653 }
654
655 /* Dropdown Button */
656 .metasync-nav-dropdown-btn {
657 display: flex;
658 align-items: center;
659 gap: 8px;
660 padding: 10px 16px;
661 border-radius: 8px;
662 text-decoration: none;
663 color: var(--dashboard-text-secondary);
664 font-weight: 500;
665 font-size: 14px;
666 transition: all 0.3s ease;
667 border: none;
668 background: transparent;
669 cursor: pointer;
670 position: relative;
671 }
672
673 .metasync-nav-dropdown-btn:hover {
674 color: var(--dashboard-text-primary);
675 background: rgba(255, 255, 255, 0.05);
676 transform: translateY(-1px);
677 }
678
679 .metasync-nav-dropdown-btn.active {
680 background: var(--dashboard-gradient-primary);
681 color: #ffffff;
682 box-shadow: var(--dashboard-shadow);
683 }
684
685 .metasync-nav-dropdown-btn .dropdown-arrow {
686 font-size: 10px;
687 transition: transform 0.3s ease;
688 margin-left: 4px;
689 }
690
691 .metasync-nav-dropdown:hover .metasync-nav-dropdown-btn .dropdown-arrow,
692 .metasync-nav-dropdown-btn[aria-expanded="true"] .dropdown-arrow {
693 transform: rotate(180deg);
694 }
695
696 /* Dropdown Menu */
697 .metasync-nav-dropdown-menu {
698 position: absolute;
699 top: calc(100% + 8px);
700 left: 0;
701 min-width: 220px;
702 max-width: 300px;
703 max-height: 70vh;
704 overflow-y: auto;
705 background: var(--dashboard-card-bg);
706 border: 1px solid var(--dashboard-border);
707 border-radius: 12px;
708 padding: 8px;
709 box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
710 opacity: 0;
711 visibility: hidden;
712 transform: translateY(-10px);
713 transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease;
714 z-index: 999999999 !important;
715 backdrop-filter: blur(10px);
716 }
717
718 /* When using fixed positioning (via JavaScript) */
719 .metasync-nav-dropdown-menu[style*="position: fixed"] {
720 z-index: 999999999 !important;
721 }
722
723 /* Portal menu (appended to body for reliable positioning) */
724 #metasync-nav-portal-menu {
725 min-width: 220px;
726 max-width: 300px;
727 max-height: 70vh;
728 overflow-y: auto;
729 background: var(--dashboard-card-bg);
730 border: 1px solid var(--dashboard-border);
731 border-radius: 12px;
732 padding: 8px;
733 box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
734 backdrop-filter: blur(10px);
735 }
736
737 #metasync-nav-portal-menu .metasync-nav-dropdown-item {
738 display: flex;
739 align-items: center;
740 gap: 10px;
741 padding: 10px 14px;
742 border-radius: 8px;
743 text-decoration: none;
744 color: var(--dashboard-text-secondary);
745 font-weight: 500;
746 font-size: 14px;
747 transition: all 0.2s ease;
748 white-space: nowrap;
749 }
750
751 #metasync-nav-portal-menu .metasync-nav-dropdown-item:hover {
752 background: rgba(255, 255, 255, 0.08);
753 color: var(--dashboard-text-primary);
754 transform: translateX(4px);
755 }
756
757 #metasync-nav-portal-menu .metasync-nav-dropdown-item.active {
758 background: var(--dashboard-gradient-primary);
759 color: #ffffff;
760 box-shadow: var(--dashboard-shadow);
761 }
762
763 #metasync-nav-portal-menu .metasync-nav-dropdown-item .tab-icon {
764 font-size: 16px;
765 opacity: 1;
766 transition: all 0.3s ease;
767 }
768
769 #metasync-nav-portal-menu .metasync-nav-dropdown-item.active .tab-icon,
770 #metasync-nav-portal-menu .metasync-nav-dropdown-item:hover .tab-icon {
771 transform: scale(1.1);
772 }
773
774 #metasync-nav-portal-menu::-webkit-scrollbar {
775 width: 6px;
776 }
777
778 #metasync-nav-portal-menu::-webkit-scrollbar-track {
779 background: rgba(255, 255, 255, 0.05);
780 border-radius: 3px;
781 }
782
783 #metasync-nav-portal-menu::-webkit-scrollbar-thumb {
784 background: rgba(255, 255, 255, 0.2);
785 border-radius: 3px;
786 }
787
788 #metasync-nav-portal-menu::-webkit-scrollbar-thumb:hover {
789 background: rgba(255, 255, 255, 0.3);
790 }
791
792 /* Scrollbar styling for dropdown menu */
793 .metasync-nav-dropdown-menu::-webkit-scrollbar {
794 width: 6px;
795 }
796
797 .metasync-nav-dropdown-menu::-webkit-scrollbar-track {
798 background: rgba(255, 255, 255, 0.05);
799 border-radius: 3px;
800 }
801
802 .metasync-nav-dropdown-menu::-webkit-scrollbar-thumb {
803 background: rgba(255, 255, 255, 0.2);
804 border-radius: 3px;
805 }
806
807 .metasync-nav-dropdown-menu::-webkit-scrollbar-thumb:hover {
808 background: rgba(255, 255, 255, 0.3);
809 }
810
811 .metasync-nav-dropdown:hover .metasync-nav-dropdown-menu,
812 .metasync-nav-dropdown.active .metasync-nav-dropdown-menu,
813 .metasync-nav-dropdown-btn[aria-expanded="true"] + .metasync-nav-dropdown-menu {
814 opacity: 1;
815 visibility: visible;
816 transform: translateY(0);
817 }
818
819 /* Dropdown Items */
820 .metasync-nav-dropdown-item {
821 display: flex;
822 align-items: center;
823 gap: 10px;
824 padding: 10px 14px;
825 border-radius: 8px;
826 text-decoration: none;
827 color: var(--dashboard-text-secondary);
828 font-weight: 500;
829 font-size: 14px;
830 transition: all 0.2s ease;
831 white-space: nowrap;
832 }
833
834 .metasync-nav-dropdown-item:hover {
835 background: rgba(255, 255, 255, 0.08);
836 color: var(--dashboard-text-primary);
837 transform: translateX(4px);
838 }
839
840 .metasync-nav-dropdown-item.active {
841 background: var(--dashboard-gradient-primary);
842 color: #ffffff;
843 box-shadow: var(--dashboard-shadow);
844 }
845
846 .metasync-nav-dropdown-item .tab-icon {
847 font-size: 16px;
848 opacity: 1;
849 transition: all 0.3s ease;
850 }
851
852 .metasync-nav-dropdown-item.active .tab-icon,
853 .metasync-nav-dropdown-item:hover .tab-icon {
854 transform: scale(1.1);
855 }
856
857 /* Right section adjustments for grouped nav */
858 .metasync-nav-grouped .metasync-nav-right {
859 padding-left: 12px;
860 border-left: 1px solid var(--dashboard-border);
861 margin-left: auto;
862 }
863
864 /* Refactored Simple Dropdown */
865 .metasync-simple-dropdown {
866 position: relative;
867 display: inline-block;
868 z-index: 999999999 !important; /* Ensure container is above forms */
869 }
870
871 .metasync-seo-btn,
872 .metasync-settings-btn {
873 background: transparent;
874 border: 2px solid var(--dashboard-border);
875 color: var(--dashboard-text-primary);
876 padding: 12px 16px;
877 cursor: pointer;
878 display: flex;
879 align-items: center;
880 gap: 8px;
881 border-radius: 8px;
882 font-size: 14px;
883 font-weight: 500;
884 transition: all 0.2s ease;
885 min-height: 44px;
886 }
887
888 .metasync-seo-btn:hover,
889 .metasync-settings-btn:hover {
890 background: var(--dashboard-card-hover);
891 border-color: var(--dashboard-accent);
892 }
893
894 .metasync-seo-btn.active,
895 .metasync-settings-btn.active {
896 background: var(--dashboard-accent);
897 border-color: var(--dashboard-accent);
898 color: white;
899 }
900
901 .metasync-seo-btn .dropdown-arrow,
902 .metasync-settings-btn .dropdown-arrow {
903 transition: transform 0.2s ease;
904 font-size: 10px;
905 }
906
907 .metasync-seo-btn[aria-expanded="true"] .dropdown-arrow,
908 .metasync-settings-btn[aria-expanded="true"] .dropdown-arrow {
909 transform: rotate(180deg);
910 }
911
912 /* Portal dropdown menu that bypasses stacking contexts */
913 .metasync-portal-menu {
914 background: var(--dashboard-card-bg);
915 border: 2px solid var(--dashboard-border);
916 border-radius: 8px;
917 min-width: 160px;
918 box-shadow: 0 8px 25px rgba(0, 0, 0, 0.4);
919 overflow: hidden;
920 /* position and z-index set by JavaScript */
921 }
922
923 .metasync-portal-item {
924 display: block;
925 padding: 14px 18px;
926 color: var(--dashboard-text-primary);
927 text-decoration: none;
928 font-size: 14px;
929 font-weight: 500;
930 transition: all 0.2s ease;
931 border-bottom: 1px solid var(--dashboard-border);
932 }
933
934 .metasync-portal-item:last-child {
935 border-bottom: none;
936 }
937
938 .metasync-portal-item:hover {
939 background: var(--dashboard-card-hover);
940 color: var(--dashboard-accent);
941 }
942
943 .metasync-portal-item.active {
944 background: var(--dashboard-accent);
945 color: white;
946 }
947
948 /* Input Fields - ONLY in plugin pages */
949 .metasync-dashboard-wrap input[type="text"],
950 .metasync-dashboard-wrap input[type="email"],
951 .metasync-dashboard-wrap input[type="url"],
952 .metasync-dashboard-wrap input[type="password"],
953 .metasync-dashboard-wrap input[type="number"],
954 .metasync-dashboard-wrap textarea,
955 .metasync-dashboard-wrap select {
956 background: rgba(255, 255, 255, 0.05);
957 border: 1px solid var(--dashboard-border);
958 border-radius: 8px;
959 color: var(--dashboard-text-primary);
960 padding: 12px 16px;
961 font-size: 14px;
962 transition: all 0.3s ease;
963 width: 100%;
964 max-width: 400px;
965 }
966
967 .metasync-dashboard-wrap input[type="text"]:focus,
968 .metasync-dashboard-wrap input[type="email"]:focus,
969 .metasync-dashboard-wrap input[type="url"]:focus,
970 .metasync-dashboard-wrap input[type="password"]:focus,
971 .metasync-dashboard-wrap input[type="number"]:focus,
972 .metasync-dashboard-wrap textarea:focus,
973 .metasync-dashboard-wrap select:focus {
974 background: rgba(255, 255, 255, 0.1);
975 border-color: var(--dashboard-accent);
976 box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
977 outline: none;
978 }
979
980 .metasync-dashboard-wrap input[type="text"]::placeholder,
981 .metasync-dashboard-wrap input[type="email"]::placeholder,
982 .metasync-dashboard-wrap input[type="url"]::placeholder,
983 .metasync-dashboard-wrap input[type="password"]::placeholder,
984 .metasync-dashboard-wrap textarea::placeholder {
985 color: var(--dashboard-text-secondary);
986 }
987
988 /* Description Text - ONLY in plugin pages */
989 .metasync-dashboard-wrap .description,
990 .metasync-dashboard-wrap p.description {
991 color: var(--dashboard-text-secondary);
992 font-size: 13px;
993 line-height: 1.5;
994 margin-top: 8px;
995 margin-bottom: 0;
996 }
997
998 /* Checkboxes and Radio Buttons - ONLY in plugin pages */
999 .metasync-dashboard-wrap input[type="checkbox"],
1000 .metasync-dashboard-wrap input[type="radio"] {
1001 width: 18px;
1002 height: 18px;
1003 accent-color: var(--dashboard-accent);
1004 margin-right: 8px;
1005 }
1006
1007 /* Buttons - ONLY in plugin pages */
1008 .metasync-dashboard-wrap .button,
1009 .metasync-dashboard-wrap .button-primary,
1010 .metasync-dashboard-wrap .button-secondary {
1011 background: var(--dashboard-gradient-primary);
1012 border: none;
1013 border-radius: 8px;
1014 color: #ffffff;
1015 cursor: pointer;
1016 font-weight: 500;
1017 padding: 12px 24px;
1018 text-decoration: none;
1019 transition: all 0.3s ease;
1020 display: inline-flex;
1021 align-items: center;
1022 gap: 8px;
1023 font-size: 14px;
1024 }
1025
1026 .metasync-dashboard-wrap .button .dashicons,
1027 .metasync-dashboard-wrap .button-primary .dashicons,
1028 .metasync-dashboard-wrap .button-secondary .dashicons {
1029 font-size: 15px !important;
1030 width: 15px !important;
1031 height: 15px !important;
1032 line-height: 15px !important;
1033 margin: 0 !important;
1034 vertical-align: middle;
1035 }
1036
1037 .metasync-dashboard-wrap .button:hover:not(:disabled):not([disabled]),
1038 .metasync-dashboard-wrap .button-primary:hover:not(:disabled):not([disabled]) {
1039 background: var(--dashboard-gradient-accent);
1040 transform: translateY(-1px);
1041 box-shadow: var(--dashboard-shadow);
1042 }
1043
1044 /* Disabled state — needed because the base .button-primary rule keeps the
1045 full gradient even when prop('disabled', true) is set. Without this,
1046 the Sync Now button stays blue/purple while the cooldown countdown is
1047 active (QA report).
1048
1049 The .is-throttled class is the primary driver for the Sync Now cooldown
1050 visual because earlier code in the AJAX callback chain calls
1051 .prop('disabled', false) before our refresh runs, and in some browsers
1052 that ordering can leave the disabled attribute off even though we set
1053 it again afterwards. The class-based path doesn't depend on the
1054 disabled attribute reaching the DOM and survives any prop juggling. */
1055 .metasync-dashboard-wrap .button:disabled,
1056 .metasync-dashboard-wrap .button-primary:disabled,
1057 .metasync-dashboard-wrap .button-secondary:disabled,
1058 .metasync-dashboard-wrap .button[disabled],
1059 .metasync-dashboard-wrap .button-primary[disabled],
1060 .metasync-dashboard-wrap .button-secondary[disabled],
1061 .metasync-dashboard-wrap .button.is-throttled,
1062 .metasync-dashboard-wrap .button-primary.is-throttled,
1063 .metasync-dashboard-wrap .button-secondary.is-throttled {
1064 /* Replace the blue/purple gradient with a solid grey. The base rule sets
1065 `background: var(--dashboard-gradient-primary)`, so opacity + grayscale
1066 alone left the button a dimmed blue (QA: "still blue on Elementor").
1067 background/filter/pointer-events carry !important so a page-builder's
1068 admin stylesheet (Elementor ships more than Divi) can't override them. */
1069 background: #d5d7da !important;
1070 background-image: none !important;
1071 color: #6b7280 !important;
1072 opacity: 0.7 !important;
1073 cursor: not-allowed !important;
1074 transform: none !important;
1075 box-shadow: none !important;
1076 filter: grayscale(100%) !important;
1077 pointer-events: none !important;
1078 }
1079
1080 .metasync-dashboard-wrap .button-secondary {
1081 background: transparent;
1082 border: 1px solid var(--dashboard-border);
1083 color: var(--dashboard-text-secondary);
1084 }
1085
1086 .metasync-dashboard-wrap .button-secondary:hover {
1087 background: var(--dashboard-card-hover);
1088 color: var(--dashboard-text-primary);
1089 border-color: var(--dashboard-accent);
1090 }
1091
1092 /* Status Messages - ONLY in plugin pages */
1093 .metasync-dashboard-wrap .notice {
1094 background: var(--dashboard-card-bg);
1095 border: none;
1096 border-left: 4px solid var(--dashboard-accent);
1097 border-radius: 8px;
1098 color: var(--dashboard-text-primary);
1099 margin: 16px 0;
1100 padding: 16px 20px;
1101 box-shadow: var(--dashboard-shadow);
1102 }
1103
1104 .metasync-dashboard-wrap .notice-success {
1105 border-left-color: var(--dashboard-success);
1106 background: rgba(16, 185, 129, 0.1);
1107 }
1108
1109 .metasync-dashboard-wrap .notice-warning {
1110 border-left-color: var(--dashboard-warning);
1111 background: rgba(245, 158, 11, 0.1);
1112 }
1113
1114 .metasync-dashboard-wrap .notice-error {
1115 border-left-color: var(--dashboard-error);
1116 background: rgba(239, 68, 68, 0.1);
1117 }
1118
1119 /* Dashboard Stats Cards - ONLY in plugin pages */
1120 .metasync-dashboard-wrap .dashboard-stats {
1121 display: grid;
1122 grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
1123 gap: 20px;
1124 margin-bottom: 32px;
1125 }
1126
1127 .metasync-dashboard-wrap .dashboard-stat-card {
1128 background: var(--dashboard-card-bg);
1129 border: 1px solid var(--dashboard-border);
1130 border-radius: 16px;
1131 padding: 24px 20px;
1132 text-align: center;
1133 transition: all 0.3s ease;
1134 position: relative;
1135 overflow: hidden;
1136 min-height: 120px;
1137 display: flex;
1138 flex-direction: column;
1139 justify-content: center;
1140 align-items: center;
1141 }
1142
1143 /* Dashboard stat card top bar - DISABLED to prevent black subsections */
1144 /* .metasync-dashboard-wrap .dashboard-stat-card::before {
1145 content: '';
1146 position: absolute;
1147 top: 0;
1148 left: 0;
1149 right: 0;
1150 height: 4px;
1151 background: var(--dashboard-gradient-primary);
1152 } */
1153
1154 .metasync-dashboard-wrap .dashboard-stat-card:hover {
1155 /* Removed translateY animation - was too distracting */
1156 box-shadow: var(--dashboard-shadow-hover);
1157 }
1158
1159 .metasync-dashboard-wrap .dashboard-stat-value {
1160 font-size: 1.8rem;
1161 font-weight: 700;
1162 color: var(--dashboard-text-primary);
1163 margin-bottom: 8px;
1164 line-height: 1.2;
1165 word-break: break-word;
1166 hyphens: auto;
1167 max-width: 100%;
1168 overflow: hidden;
1169 text-overflow: ellipsis;
1170 white-space: nowrap;
1171 }
1172
1173 /* Special styling for emoji values - ONLY in plugin pages */
1174 .metasync-dashboard-wrap .dashboard-stat-value:not(:has(text)) {
1175 font-size: 2.5rem;
1176 white-space: normal;
1177 }
1178
1179 .metasync-dashboard-wrap .dashboard-stat-label {
1180 color: var(--dashboard-text-secondary);
1181 font-size: 12px;
1182 font-weight: 500;
1183 text-transform: uppercase;
1184 letter-spacing: 0.5px;
1185 line-height: 1.3;
1186 word-break: break-word;
1187 hyphens: auto;
1188 }
1189
1190 /* Progress Bars - ONLY in plugin pages */
1191 .metasync-dashboard-wrap .dashboard-progress {
1192 background: rgba(255, 255, 255, 0.1);
1193 border-radius: 10px;
1194 height: 8px;
1195 overflow: hidden;
1196 margin: 12px 0;
1197 }
1198
1199 .metasync-dashboard-wrap .dashboard-progress-bar {
1200 background: var(--dashboard-accent);
1201 height: 100%;
1202 border-radius: 10px;
1203 transition: width 0.3s ease;
1204 position: relative;
1205 }
1206
1207 .metasync-dashboard-wrap .dashboard-progress-bar::after {
1208 content: '';
1209 position: absolute;
1210 top: 0;
1211 left: 0;
1212 bottom: 0;
1213 right: 0;
1214 background-image: linear-gradient(
1215 -45deg,
1216 rgba(255, 255, 255, 0.2) 25%,
1217 transparent 25%,
1218 transparent 50%,
1219 rgba(255, 255, 255, 0.2) 50%,
1220 rgba(255, 255, 255, 0.2) 75%,
1221 transparent 75%,
1222 transparent
1223 );
1224 background-size: 20px 20px;
1225 /* Animation removed for static progress bars */
1226 }
1227
1228 /* Settings Sections - ONLY in plugin pages */
1229 .metasync-dashboard-wrap .settings-section {
1230 background: var(--dashboard-card-bg);
1231 border: 1px solid var(--dashboard-border);
1232 border-radius: 16px;
1233 padding: 24px;
1234 margin-bottom: 24px;
1235 position: relative;
1236 overflow: hidden;
1237 /* Removed any transitions that might cause animations */
1238 }
1239
1240 /* Settings section top bar - DISABLED to prevent black subsections */
1241 /* .metasync-dashboard-wrap .settings-section::before {
1242 content: '';
1243 position: absolute;
1244 top: 0;
1245 left: 0;
1246 right: 0;
1247 height: 3px;
1248 background: var(--dashboard-gradient-primary);
1249 } */
1250
1251 .metasync-dashboard-wrap .settings-section h2 {
1252 margin-top: 0;
1253 margin-bottom: 20px;
1254 color: var(--dashboard-text-primary);
1255 font-size: 1.5rem;
1256 font-weight: 600;
1257 }
1258
1259 /* Search Atlas Connect Container - Dashboard Style */
1260 .metasync-dashboard-wrap .metasync-sa-connect-container {
1261 background: var(--dashboard-card-bg);
1262 border: 1px solid var(--dashboard-border);
1263 border-radius: 16px;
1264 padding: 24px;
1265 margin-top: 20px;
1266 box-shadow: var(--dashboard-shadow);
1267 backdrop-filter: blur(10px);
1268 transition: all 0.3s ease;
1269 }
1270
1271 .metasync-dashboard-wrap .metasync-sa-connect-container:hover {
1272 background: var(--dashboard-card-hover);
1273 box-shadow: var(--dashboard-shadow-hover);
1274 /* Removed translateY animation - was too distracting */
1275 }
1276
1277 .metasync-dashboard-wrap .metasync-sa-connect-title {
1278 color: var(--dashboard-text-primary);
1279 font-size: 1.25rem;
1280 font-weight: 600;
1281 margin: 0 0 16px 0;
1282 display: flex;
1283 align-items: center;
1284 gap: 8px;
1285 }
1286
1287 .metasync-dashboard-wrap .metasync-sa-connect-description {
1288 color: var(--dashboard-text-secondary);
1289 margin-bottom: 20px;
1290 line-height: 1.6;
1291 font-size: 14px;
1292 }
1293
1294 /* Connect Buttons Container - Dashboard Style */
1295 .metasync-dashboard-wrap .metasync-sa-connect-buttons {
1296 display: flex;
1297 gap: 12px;
1298 flex-wrap: wrap;
1299 align-items: center;
1300 }
1301
1302 .metasync-dashboard-wrap .metasync-sa-connect-btn,
1303 .metasync-dashboard-wrap #connect-searchatlas-btn {
1304 background: var(--dashboard-gradient-primary);
1305 border: none;
1306 border-radius: 8px;
1307 color: #ffffff;
1308 padding: 12px 24px;
1309 font-weight: 500;
1310 cursor: pointer;
1311 transition: all 0.3s ease;
1312 display: inline-flex;
1313 align-items: center;
1314 gap: 8px;
1315 font-size: 14px;
1316 box-shadow: var(--dashboard-shadow);
1317 }
1318
1319 .metasync-dashboard-wrap .metasync-sa-connect-btn:hover:not(:disabled),
1320 .metasync-dashboard-wrap #connect-searchatlas-btn:hover:not(:disabled) {
1321 background: var(--dashboard-gradient-accent);
1322 transform: translateY(-2px);
1323 box-shadow: var(--dashboard-shadow-hover);
1324 }
1325
1326 .metasync-dashboard-wrap .metasync-sa-connect-btn:disabled,
1327 .metasync-dashboard-wrap #connect-searchatlas-btn:disabled {
1328 opacity: 0.7;
1329 cursor: not-allowed;
1330 transform: none;
1331 background: var(--dashboard-accent);
1332 }
1333
1334 .metasync-dashboard-wrap .metasync-sa-reset-btn,
1335 .metasync-dashboard-wrap #reset-searchatlas-auth {
1336 background: transparent;
1337 border: 1px solid var(--dashboard-border);
1338 border-radius: 8px;
1339 color: var(--dashboard-text-secondary);
1340 padding: 12px 24px;
1341 font-weight: 500;
1342 cursor: pointer;
1343 transition: all 0.3s ease;
1344 display: inline-flex;
1345 align-items: center;
1346 gap: 8px;
1347 font-size: 14px;
1348 }
1349
1350 .metasync-dashboard-wrap .metasync-sa-reset-btn:hover:not(:disabled),
1351 .metasync-dashboard-wrap #reset-searchatlas-auth:hover:not(:disabled) {
1352 background: var(--dashboard-card-hover);
1353 color: var(--dashboard-text-primary);
1354 border-color: var(--dashboard-error);
1355 /* Removed translateY animation - was too distracting */
1356 }
1357
1358 /* Connect Status Messages - Dashboard Style
1359 The box holds two block children — .metasync-sa-connect-status-content and
1360 .metasync-sa-connect-actions — so it must stack. As a row, the actions block
1361 sized to its buttons while the content block (flex: 1, so flex-basis: 0) was
1362 squeezed into whatever was left, wrapping the message one word per line. */
1363 .metasync-dashboard-wrap .metasync-sa-connect-status,
1364 .metasync-dashboard-wrap #sa-connect-status-message {
1365 margin-top: 16px;
1366 padding: 16px 20px;
1367 border-radius: 12px;
1368 display: flex;
1369 flex-direction: column;
1370 align-items: stretch;
1371 gap: 12px;
1372 font-weight: 500;
1373 /* Removed slideInNotice animation - was too distracting */
1374 backdrop-filter: blur(10px);
1375 border: 1px solid;
1376 box-shadow: var(--dashboard-shadow);
1377 }
1378
1379 .metasync-dashboard-wrap .metasync-sa-connect-status.success,
1380 .metasync-dashboard-wrap #sa-connect-status-message.success {
1381 background: rgba(16, 185, 129, 0.15);
1382 border-color: rgba(16, 185, 129, 0.3);
1383 color: var(--dashboard-success);
1384 }
1385
1386 .metasync-dashboard-wrap .metasync-sa-connect-status.error,
1387 .metasync-dashboard-wrap #sa-connect-status-message.error {
1388 background: rgba(239, 68, 68, 0.15);
1389 border-color: rgba(239, 68, 68, 0.3);
1390 color: var(--dashboard-error);
1391 }
1392
1393 .metasync-dashboard-wrap .metasync-sa-connect-status.info,
1394 .metasync-dashboard-wrap #sa-connect-status-message.info {
1395 background: rgba(59, 130, 246, 0.15);
1396 border-color: rgba(59, 130, 246, 0.3);
1397 color: var(--dashboard-accent);
1398 }
1399
1400 .metasync-dashboard-wrap .metasync-sa-connect-status.warning,
1401 .metasync-dashboard-wrap #sa-connect-status-message.warning {
1402 background: rgba(245, 158, 11, 0.15);
1403 border-color: rgba(245, 158, 11, 0.3);
1404 color: var(--dashboard-warning);
1405 }
1406
1407 /* Connect Progress Indicator - Dashboard Style */
1408 .metasync-dashboard-wrap .metasync-sa-connect-progress {
1409 margin-top: 16px;
1410 padding: 16px 20px;
1411 background: rgba(59, 130, 246, 0.1);
1412 border: 1px solid rgba(59, 130, 246, 0.2);
1413 border-radius: 12px;
1414 backdrop-filter: blur(10px);
1415 }
1416
1417 .metasync-dashboard-wrap .metasync-sa-connect-progress-header {
1418 display: flex;
1419 justify-content: space-between;
1420 align-items: center;
1421 margin-bottom: 12px;
1422 font-size: 14px;
1423 font-weight: 500;
1424 color: var(--dashboard-text-primary);
1425 }
1426
1427 .metasync-dashboard-wrap .metasync-sa-connect-progress-time {
1428 color: var(--dashboard-text-secondary);
1429 font-size: 12px;
1430 font-weight: normal;
1431 }
1432
1433 .metasync-dashboard-wrap .metasync-sa-connect-progress-bar {
1434 width: 100%;
1435 height: 8px;
1436 background: rgba(255, 255, 255, 0.1);
1437 border-radius: 4px;
1438 overflow: hidden;
1439 margin: 8px 0;
1440 }
1441
1442 .metasync-dashboard-wrap .metasync-sa-connect-progress-fill {
1443 height: 100%;
1444 background: var(--dashboard-accent);
1445 width: 0%;
1446 transition: width 0.3s ease;
1447 border-radius: 4px;
1448 position: relative;
1449 overflow: hidden;
1450 }
1451
1452 .metasync-dashboard-wrap .metasync-sa-connect-progress-fill::after {
1453 content: '';
1454 position: absolute;
1455 top: 0;
1456 left: 0;
1457 bottom: 0;
1458 right: 0;
1459 background-image: linear-gradient(
1460 -45deg,
1461 rgba(255, 255, 255, 0.2) 25%,
1462 transparent 25%,
1463 transparent 50%,
1464 rgba(255, 255, 255, 0.2) 50%,
1465 rgba(255, 255, 255, 0.2) 75%,
1466 transparent 75%,
1467 transparent
1468 );
1469 background-size: 20px 20px;
1470 /* Animation removed for static progress bars */
1471 }
1472
1473 .metasync-dashboard-wrap .metasync-sa-connect-progress-text {
1474 margin-top: 8px;
1475 color: var(--dashboard-text-secondary);
1476 font-size: 13px;
1477 font-style: italic;
1478 text-align: center;
1479 }
1480
1481 /* Connect Loading States */
1482 .metasync-dashboard-wrap .metasync-sa-connect-loading {
1483 display: inline-block;
1484 width: 16px;
1485 height: 16px;
1486 border: 2px solid rgba(255, 255, 255, 0.3);
1487 border-top: 2px solid var(--dashboard-text-primary);
1488 border-radius: 50%;
1489 animation: spin 1s linear infinite;
1490 vertical-align: middle;
1491 margin-right: 8px;
1492 position: static; /* Keep in normal document flow */
1493 }
1494
1495 /* Authentication Tips Section - Style existing PHP details element */
1496 .metasync-dashboard-wrap .metasync-sa-connect-tips,
1497 .metasync-dashboard-wrap details.metasync-sa-connect-tips {
1498 margin-top: 16px;
1499 padding: 0;
1500 border: none;
1501 background: transparent;
1502 }
1503
1504 .metasync-dashboard-wrap .metasync-sa-connect-tips-toggle,
1505 .metasync-dashboard-wrap details.metasync-sa-connect-tips summary {
1506 background: transparent;
1507 border: none;
1508 color: var(--dashboard-text-secondary) !important;
1509 cursor: pointer;
1510 display: flex;
1511 align-items: center;
1512 gap: 8px;
1513 font-size: 14px !important;
1514 padding: 8px 0;
1515 width: 100%;
1516 text-align: left;
1517 transition: color 0.3s ease;
1518 list-style: none;
1519 outline: none;
1520 }
1521
1522 .metasync-dashboard-wrap .metasync-sa-connect-tips-toggle:hover,
1523 .metasync-dashboard-wrap details.metasync-sa-connect-tips summary:hover {
1524 color: var(--dashboard-text-primary) !important;
1525 }
1526
1527 .metasync-dashboard-wrap .metasync-sa-connect-tips-content,
1528 .metasync-dashboard-wrap details.metasync-sa-connect-tips > div {
1529 margin-top: 12px;
1530 padding: 16px;
1531 background: rgba(255, 255, 255, 0.05);
1532 border-radius: 8px;
1533 border: 1px solid var(--dashboard-border);
1534 font-size: 14px;
1535 line-height: 1.6;
1536 color: var(--dashboard-text-secondary) !important;
1537 }
1538
1539 /* Remove default details styling */
1540 .metasync-dashboard-wrap details.metasync-sa-connect-tips summary::-webkit-details-marker {
1541 display: none;
1542 }
1543
1544 .metasync-dashboard-wrap details.metasync-sa-connect-tips summary::marker {
1545 display: none;
1546 content: '';
1547 }
1548
1549 /* Ensure content is hidden when details is closed */
1550 .metasync-dashboard-wrap details.metasync-sa-connect-tips:not([open]) > div {
1551 display: none;
1552 }
1553
1554 /* Dashboard button styling for header actions */
1555 .metasync-dashboard-wrap .metasync-header-actions {
1556 display: flex;
1557 align-items: center;
1558 gap: 12px;
1559 }
1560
1561 .metasync-dashboard-wrap .metasync-dashboard-btn {
1562 background: var(--dashboard-gradient-primary);
1563 color: #ffffff;
1564 text-decoration: none;
1565 padding: 8px 16px;
1566 border-radius: 8px;
1567 font-size: 13px;
1568 font-weight: 500;
1569 transition: all 0.3s ease;
1570 display: inline-flex;
1571 align-items: center;
1572 gap: 6px;
1573 border: none;
1574 }
1575
1576 .metasync-dashboard-wrap .metasync-dashboard-btn:hover {
1577 background: var(--dashboard-gradient-accent);
1578 transform: translateY(-1px);
1579 box-shadow: var(--dashboard-shadow);
1580 color: #ffffff;
1581 text-decoration: none;
1582 }
1583
1584 /* Connect Action Buttons (existing and new) */
1585 .metasync-dashboard-wrap .metasync-sa-connect-retry-btn,
1586 .metasync-dashboard-wrap .metasync-sa-connect-btn {
1587 background: var(--dashboard-accent);
1588 border: none;
1589 border-radius: 8px;
1590 color: var(--dashboard-text-primary);
1591 padding: 10px 20px;
1592 font-weight: 500;
1593 cursor: pointer;
1594 transition: all 0.3s ease;
1595 display: inline-flex;
1596 align-items: center;
1597 gap: 8px;
1598 font-size: 14px;
1599 margin: 4px 8px 4px 0;
1600 }
1601
1602 .metasync-dashboard-wrap .metasync-sa-connect-retry-btn:hover,
1603 .metasync-dashboard-wrap .metasync-sa-connect-btn:hover {
1604 background: var(--dashboard-accent-hover);
1605 transform: translateY(-1px);
1606 box-shadow: var(--dashboard-shadow);
1607 }
1608
1609 .metasync-dashboard-wrap .metasync-sa-connect-btn.primary {
1610 background: var(--dashboard-gradient-primary);
1611 color: #ffffff;
1612 }
1613
1614 .metasync-dashboard-wrap .metasync-sa-connect-btn.secondary {
1615 background: transparent;
1616 border: 1px solid var(--dashboard-border);
1617 color: var(--dashboard-text-secondary);
1618 }
1619
1620 .metasync-dashboard-wrap .metasync-sa-connect-btn.secondary:hover {
1621 background: var(--dashboard-card-hover);
1622 color: var(--dashboard-text-primary);
1623 border-color: var(--dashboard-accent);
1624 }
1625
1626 /* Connect Status Message Content */
1627 .metasync-dashboard-wrap .metasync-sa-connect-status-content {
1628 /* min-width: 0 keeps a long unbroken string (a pasted URL, a UUID) from
1629 setting the flex item's min-content width and re-inflating the box. */
1630 flex: 0 0 auto;
1631 min-width: 0;
1632 /* Spacing between content and actions is the container's gap now. */
1633 margin-bottom: 0;
1634 }
1635
1636 .metasync-dashboard-wrap .metasync-sa-connect-status-title {
1637 font-weight: 600;
1638 font-size: 15px;
1639 margin-bottom: 8px;
1640 /* Block, not flex. WordPress core's emoji script rewrites the leading
1641 emoji into <img class="emoji">; as a flex container that image became a
1642 flex item of its own and, under align-items: center, floated to the
1643 vertical middle of a wrapped title. Inline flow keeps it on the first
1644 line and wraps with the text. The title string already carries the
1645 separating space, so the old gap is not needed. */
1646 display: block;
1647 }
1648
1649 .metasync-dashboard-wrap .metasync-sa-connect-status-message {
1650 font-size: 14px;
1651 line-height: 1.5;
1652 opacity: 0.9;
1653 margin-bottom: 0;
1654 }
1655
1656 /* Existing Connect Actions Container */
1657 .metasync-dashboard-wrap .metasync-sa-connect-actions {
1658 margin-top: 0;
1659 display: flex;
1660 gap: 12px;
1661 flex-wrap: wrap;
1662 align-items: center;
1663 }
1664
1665 /* Connect Button States */
1666 .metasync-dashboard-wrap #connect-searchatlas-btn.connecting {
1667 background: linear-gradient(135deg, #f39c12 0%, #e67e22 100%);
1668 }
1669
1670 .metasync-dashboard-wrap #connect-searchatlas-btn.authenticating {
1671 background: linear-gradient(135deg, #3498db 0%, #2980b9 100%);
1672 }
1673
1674 .metasync-dashboard-wrap #connect-searchatlas-btn.success {
1675 background: linear-gradient(135deg, #27ae60 0%, #229954 100%);
1676 }
1677
1678 /* Theme Toggle Mobile Adjustments */
1679 @media (max-width: 768px) {
1680 .metasync-theme-toggle {
1681 order: -1;
1682 margin-bottom: 12px;
1683 }
1684
1685 .metasync-dashboard-wrap .metasync-header-right {
1686 flex-direction: column;
1687 align-items: stretch;
1688 gap: 8px;
1689 width: 100%;
1690 }
1691
1692 .metasync-theme-toggle {
1693 width: fit-content;
1694 align-self: center;
1695 }
1696 }
1697
1698 /* Mobile Connect Adjustments */
1699 @media (max-width: 768px) {
1700 .metasync-dashboard-wrap .metasync-sa-connect-container {
1701 padding: 20px 16px;
1702 margin-top: 16px;
1703 border-radius: 12px;
1704 }
1705
1706 .metasync-dashboard-wrap .metasync-sa-connect-buttons {
1707 flex-direction: column;
1708 align-items: stretch;
1709 gap: 8px;
1710 }
1711
1712 .metasync-dashboard-wrap .metasync-sa-connect-btn,
1713 .metasync-dashboard-wrap #connect-searchatlas-btn,
1714 .metasync-dashboard-wrap .metasync-sa-reset-btn,
1715 .metasync-dashboard-wrap #reset-searchatlas-auth {
1716 width: 100%;
1717 justify-content: center;
1718 padding: 14px 20px;
1719 font-size: 15px;
1720 }
1721
1722 .metasync-dashboard-wrap .metasync-sa-connect-progress {
1723 padding: 16px;
1724 margin-top: 12px;
1725 }
1726
1727 .metasync-dashboard-wrap .metasync-sa-connect-progress-header {
1728 flex-direction: column;
1729 align-items: flex-start;
1730 gap: 6px;
1731 font-size: 13px;
1732 }
1733
1734 .metasync-dashboard-wrap .metasync-sa-connect-status {
1735 padding: 16px;
1736 margin-top: 12px;
1737 gap: 8px;
1738 }
1739
1740 .metasync-dashboard-wrap .metasync-sa-connect-status-title {
1741 font-size: 16px;
1742 }
1743 }
1744
1745 /* NO GLOBAL LAYOUT CHANGES - removed problematic positioning */
1746
1747 /* Improve stat card text handling - ONLY in plugin pages */
1748 .metasync-dashboard-wrap .dashboard-stat-value {
1749 display: block;
1750 max-width: 100%;
1751 overflow: visible;
1752 white-space: normal;
1753 word-wrap: break-word;
1754 text-overflow: clip;
1755 }
1756
1757 /* Long text handling for theme names - ONLY in plugin pages */
1758 .metasync-dashboard-wrap .dashboard-stat-card:nth-child(3) .dashboard-stat-value {
1759 font-size: 1.2rem;
1760 line-height: 1.3;
1761 text-align: center;
1762 display: -webkit-box;
1763 -webkit-line-clamp: 2;
1764 -webkit-box-orient: vertical;
1765 overflow: hidden;
1766 text-overflow: ellipsis;
1767 max-height: 2.6em;
1768 }
1769
1770 /* Responsive Design - ONLY in plugin pages */
1771 @media (max-width: 1200px) {
1772 .metasync-dashboard-wrap .dashboard-stats {
1773 grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
1774 gap: 16px;
1775 }
1776
1777 .metasync-dashboard-wrap {
1778 padding: 20px 30px; /* Reduced lateral padding for tablets */
1779 }
1780 }
1781
1782 @media (max-width: 768px) {
1783 .metasync-dashboard-wrap {
1784 /* Proper mobile padding with lateral spacing */
1785 padding: 15px 20px;
1786 }
1787
1788 /* Mobile header adjustments */
1789 .metasync-dashboard-wrap .metasync-header {
1790 flex-direction: column;
1791 align-items: center;
1792 gap: 16px;
1793 text-align: center;
1794 padding: 16px 0;
1795 }
1796
1797 .metasync-dashboard-wrap .metasync-header-left {
1798 display: flex;
1799 align-items: center;
1800 justify-content: center;
1801 width: 100%;
1802 }
1803
1804 .metasync-dashboard-wrap .metasync-header-right {
1805 order: -1;
1806 width: 100%;
1807 display: flex;
1808 justify-content: center;
1809 }
1810
1811 .metasync-dashboard-wrap .metasync-header-actions {
1812 flex-direction: column;
1813 gap: 8px;
1814 align-items: center;
1815 width: 100%;
1816 }
1817
1818 .metasync-dashboard-wrap .metasync-dashboard-btn {
1819 padding: 10px 16px;
1820 font-size: 14px;
1821 }
1822
1823 .metasync-dashboard-wrap .metasync-logo {
1824 height: 40px;
1825 max-width: 160px;
1826 }
1827
1828 .metasync-dashboard-wrap .metasync-integration-status {
1829 font-size: 11px;
1830 padding: 6px 12px;
1831 }
1832
1833 /* Mobile page title adjustments */
1834 .metasync-dashboard-wrap .metasync-page-title {
1835 text-align: center;
1836 margin-bottom: 1.5rem;
1837 }
1838
1839 .metasync-dashboard-wrap .metasync-page-title h1 {
1840 font-size: 2rem;
1841 text-align: center;
1842 }
1843
1844 /* Mobile navigation adjustments */
1845 .metasync-dashboard-wrap .metasync-nav-tabs {
1846 flex-direction: column;
1847 gap: 2px;
1848 }
1849
1850 .metasync-dashboard-wrap .metasync-nav-tab {
1851 justify-content: center;
1852 padding: 12px 16px;
1853 }
1854
1855 /* Grouped navigation mobile adjustments */
1856 .metasync-dashboard-wrap .metasync-nav-grouped {
1857 flex-direction: column;
1858 gap: 8px;
1859 }
1860
1861 .metasync-dashboard-wrap .metasync-nav-dropdown {
1862 width: 100%;
1863 }
1864
1865 .metasync-dashboard-wrap .metasync-nav-dropdown-btn {
1866 width: 100%;
1867 justify-content: space-between;
1868 }
1869
1870 .metasync-dashboard-wrap .metasync-nav-dropdown-menu {
1871 position: static;
1872 opacity: 1;
1873 visibility: visible;
1874 transform: none;
1875 box-shadow: none;
1876 border: 1px solid var(--dashboard-border);
1877 margin-top: 8px;
1878 display: none;
1879 }
1880
1881 .metasync-dashboard-wrap .metasync-nav-dropdown.active .metasync-nav-dropdown-menu {
1882 display: block;
1883 }
1884
1885 .metasync-dashboard-wrap .metasync-nav-dropdown-item {
1886 padding: 12px 16px;
1887 }
1888
1889 .metasync-dashboard-wrap .metasync-nav-grouped .metasync-nav-right {
1890 border-left: none;
1891 border-top: 1px solid var(--dashboard-border);
1892 padding-left: 0;
1893 padding-top: 12px;
1894 margin-left: 0;
1895 justify-content: center;
1896 width: 100%;
1897 }
1898
1899 .metasync-dashboard-wrap .nav-tab-wrapper {
1900 flex-direction: column !important;
1901 gap: 8px !important;
1902 }
1903
1904 .metasync-dashboard-wrap .nav-tab {
1905 width: 100% !important;
1906 text-align: center !important;
1907 }
1908
1909 .metasync-dashboard-wrap .dashboard-stats {
1910 grid-template-columns: 1fr;
1911 gap: 16px;
1912 }
1913
1914 .metasync-dashboard-wrap .dashboard-stat-card {
1915 min-height: 100px;
1916 padding: 20px 16px;
1917 }
1918
1919 .metasync-dashboard-wrap .dashboard-stat-value {
1920 font-size: 1.6rem;
1921 }
1922
1923 .metasync-dashboard-wrap .form-table th,
1924 .metasync-dashboard-wrap .form-table td {
1925 display: block;
1926 width: 100%;
1927 border-radius: 12px;
1928 border: 1px solid var(--dashboard-border);
1929 margin-bottom: 8px;
1930 }
1931
1932 .metasync-dashboard-wrap .form-table th {
1933 margin-bottom: 4px;
1934 }
1935
1936 .metasync-dashboard-wrap .metasync-sa-connect-buttons {
1937 flex-direction: column;
1938 align-items: stretch;
1939 }
1940
1941 .metasync-dashboard-wrap .metasync-sa-connect-btn,
1942 .metasync-dashboard-wrap .metasync-sa-reset-btn,
1943 .metasync-dashboard-wrap #connect-searchatlas-btn,
1944 .metasync-dashboard-wrap #reset-searchatlas-auth {
1945 width: 100%;
1946 justify-content: center;
1947 margin: 0 !important;
1948 }
1949 }
1950
1951 /* Loading States - ONLY in plugin pages */
1952 .metasync-dashboard-wrap .dashboard-loading {
1953 position: relative;
1954 opacity: 0.6;
1955 }
1956
1957 .metasync-dashboard-wrap .dashboard-loading::after {
1958 content: '';
1959 position: absolute;
1960 top: 50%;
1961 left: 50%;
1962 width: 24px;
1963 height: 24px;
1964 border: 3px solid rgba(255, 255, 255, 0.2);
1965 border-top-color: var(--dashboard-accent);
1966 border-radius: 50%;
1967 animation: spin 1s linear infinite;
1968 transform: translate(-50%, -50%);
1969 }
1970
1971 @keyframes spin {
1972 0% { transform: rotate(0deg); }
1973 100% { transform: rotate(360deg); }
1974 }
1975
1976 /* Ensure perfect centering for all spinning elements */
1977 .metasync-dashboard-wrap .spinner,
1978 .metasync-dashboard-wrap .metasync-loading-spinner {
1979 display: block;
1980 margin: 0 auto;
1981 position: relative;
1982 }
1983
1984 /* Center spinners within buttons */
1985 .metasync-dashboard-wrap .button .metasync-sa-connect-loading,
1986 .metasync-dashboard-wrap button .metasync-sa-connect-loading {
1987 vertical-align: middle;
1988 margin-right: 6px;
1989 margin-left: 0;
1990 position: static; /* Important: keep in button text flow */
1991 display: inline-block;
1992 }
1993
1994 /* Loading states - general styling */
1995 .metasync-dashboard-wrap .dashboard-loading {
1996 position: relative;
1997 opacity: 0.6;
1998 }
1999
2000 /* Override for buttons - keep normal layout, don't use flex */
2001 .metasync-dashboard-wrap .button.dashboard-loading,
2002 .metasync-dashboard-wrap button.dashboard-loading {
2003 position: relative;
2004 opacity: 0.6;
2005 /* Remove flex - let button content flow naturally */
2006 }
2007
2008 /* Spinner for general loading overlay (not buttons) */
2009 .metasync-dashboard-wrap .dashboard-loading::after {
2010 content: '';
2011 position: absolute;
2012 top: 50%;
2013 left: 50%;
2014 width: 20px;
2015 height: 20px;
2016 border: 2px solid rgba(255, 255, 255, 0.3);
2017 border-top-color: var(--dashboard-accent);
2018 border-radius: 50%;
2019 animation: spin 1s linear infinite;
2020 transform: translate(-50%, -50%);
2021 z-index: 1;
2022 }
2023
2024 /* Don't show overlay spinner on buttons with inline spinners */
2025 .metasync-dashboard-wrap .button.dashboard-loading::after,
2026 .metasync-dashboard-wrap button.dashboard-loading::after {
2027 display: none;
2028 }
2029
2030 /* Center spinning tab icons */
2031 .metasync-dashboard-wrap .metasync-nav-tab .tab-icon {
2032 display: inline-flex;
2033 align-items: center;
2034 justify-content: center;
2035 min-width: 20px;
2036 vertical-align: middle;
2037 }
2038
2039 /* Ensure spinners stay inline in their context */
2040 .metasync-dashboard-wrap .metasync-sa-connect-loading {
2041 /* Force inline positioning - never absolute */
2042 position: static !important;
2043 display: inline-block !important;
2044 vertical-align: middle !important;
2045 transform: none !important; /* Don't translate position */
2046 }
2047
2048 /* Only center text in containers, not the spinners themselves */
2049 .metasync-dashboard-wrap .loading-container {
2050 text-align: center;
2051 }
2052
2053 /* Tooltips - ONLY in plugin pages */
2054 .metasync-dashboard-wrap .dashboard-tooltip {
2055 position: relative;
2056 cursor: help;
2057 display: inline-block;
2058 }
2059
2060 .metasync-dashboard-wrap .dashboard-tooltip:hover::after {
2061 content: attr(data-tooltip);
2062 position: absolute;
2063 bottom: 125%;
2064 left: 50%;
2065 transform: translateX(-50%);
2066 background: var(--dashboard-card-bg);
2067 color: var(--dashboard-text-primary);
2068 padding: 8px 12px;
2069 border-radius: 6px;
2070 font-size: 12px;
2071 white-space: nowrap;
2072 box-shadow: var(--dashboard-shadow);
2073 z-index: 1000;
2074 border: 1px solid var(--dashboard-border);
2075 }
2076
2077 /* Custom Scrollbar - ONLY in plugin pages */
2078 .metasync-dashboard-wrap ::-webkit-scrollbar {
2079 width: 8px;
2080 }
2081
2082 .metasync-dashboard-wrap ::-webkit-scrollbar-track {
2083 background: var(--dashboard-bg);
2084 }
2085
2086 .metasync-dashboard-wrap ::-webkit-scrollbar-thumb {
2087 background: var(--dashboard-border);
2088 border-radius: 4px;
2089 }
2090
2091 .metasync-dashboard-wrap ::-webkit-scrollbar-thumb:hover {
2092 background: var(--dashboard-accent);
2093 }
2094
2095 /* WordPress elements - ONLY in plugin pages */
2096 .metasync-dashboard-wrap select,
2097 .metasync-dashboard-wrap input[type="text"],
2098 .metasync-dashboard-wrap input[type="email"],
2099 .metasync-dashboard-wrap input[type="url"],
2100 .metasync-dashboard-wrap input[type="password"],
2101 .metasync-dashboard-wrap input[type="number"],
2102 .metasync-dashboard-wrap textarea {
2103 color: var(--dashboard-text-primary);
2104 }
2105
2106 .metasync-dashboard-wrap .form-table th {
2107 color: var(--dashboard-text-primary);
2108 }
2109
2110 .metasync-dashboard-wrap .form-table td p {
2111 color: var(--dashboard-text-secondary);
2112 }
2113
2114 /* Table Styling - ONLY in plugin pages */
2115 .metasync-dashboard-wrap .wp-list-table {
2116 background: var(--dashboard-card-bg);
2117 border: 1px solid var(--dashboard-border);
2118 border-radius: 12px;
2119 overflow: hidden;
2120 }
2121
2122 .metasync-dashboard-wrap .wp-list-table th {
2123 background: rgba(255, 255, 255, 0.05);
2124 color: var(--dashboard-text-primary);
2125 border-bottom: 1px solid var(--dashboard-border);
2126 }
2127
2128 .metasync-dashboard-wrap .wp-list-table td {
2129 background: var(--dashboard-card-bg);
2130 color: var(--dashboard-text-primary);
2131 border-bottom: 1px solid var(--dashboard-border);
2132 }
2133
2134 .metasync-dashboard-wrap .wp-list-table tbody tr:hover {
2135 background: var(--dashboard-card-hover);
2136 }
2137
2138 /* Modern Unsaved Changes Design */
2139 .metasync-dashboard-wrap .has-unsaved-changes {
2140 position: relative;
2141 border: 1px solid rgba(59, 130, 246, 0.3) !important;
2142 border-radius: 12px !important;
2143 background: linear-gradient(135deg, rgba(59, 130, 246, 0.02) 0%, rgba(59, 130, 246, 0.01) 100%) !important;
2144 box-shadow: 0 0 0 1px rgba(59, 130, 246, 0.1), 0 2px 8px rgba(59, 130, 246, 0.05) !important;
2145 transition: all 0.3s ease !important;
2146 }
2147
2148 .metasync-dashboard-wrap .has-unsaved-changes::after {
2149 content: "";
2150 position: absolute;
2151 top: 0;
2152 left: 0;
2153 right: 0;
2154 height: 3px;
2155 background: linear-gradient(90deg, #3b82f6, #8b5cf6, #3b82f6);
2156 background-size: 200% 100%;
2157 border-radius: 12px 12px 0 0;
2158 animation: gradient-shift 3s ease-in-out infinite;
2159 }
2160
2161 @keyframes gradient-shift {
2162 0%, 100% {
2163 background-position: 0% 0%;
2164 opacity: 0.6;
2165 }
2166 50% {
2167 background-position: 100% 0%;
2168 opacity: 0.8;
2169 }
2170 }
2171
2172 /* Unsaved indicator dot - subtle pulse instead of blink */
2173 .metasync-dashboard-wrap .unsaved-indicator {
2174 color: #3b82f6 !important;
2175 font-weight: 600 !important;
2176 animation: subtle-pulse 2s ease-in-out infinite;
2177 display: inline-flex;
2178 align-items: center;
2179 margin-right: 6px;
2180 }
2181
2182 @keyframes subtle-pulse {
2183 0%, 100% {
2184 opacity: 0.7;
2185 transform: scale(1);
2186 }
2187 50% {
2188 opacity: 1;
2189 transform: scale(1.05);
2190 }
2191 }
2192
2193 .metasync-dashboard-wrap .button.button-primary .unsaved-indicator {
2194 color: rgba(255, 255, 255, 0.9) !important;
2195 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
2196 }
2197
2198 /* Enhanced save button styling for unsaved changes */
2199 .metasync-dashboard-wrap .has-unsaved-changes .button.button-primary {
2200 background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%) !important;
2201 border: none !important;
2202 color: #ffffff !important;
2203 font-weight: 600 !important;
2204 box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3) !important;
2205 transform: translateY(-1px);
2206 transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
2207 position: relative;
2208 overflow: hidden;
2209 }
2210
2211 .metasync-dashboard-wrap .has-unsaved-changes .button.button-primary::before {
2212 content: "";
2213 position: absolute;
2214 top: 0;
2215 left: -100%;
2216 width: 100%;
2217 height: 100%;
2218 background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
2219 transition: left 0.6s ease;
2220 }
2221
2222 .metasync-dashboard-wrap .has-unsaved-changes .button.button-primary:hover::before {
2223 left: 100%;
2224 }
2225
2226 .metasync-dashboard-wrap .has-unsaved-changes .button.button-primary:hover {
2227 background: linear-gradient(135deg, #2563eb 0%, #7c3aed 100%) !important;
2228 transform: translateY(-2px) !important;
2229 box-shadow: 0 6px 20px rgba(59, 130, 246, 0.4) !important;
2230 }
2231
2232 .metasync-dashboard-wrap .has-unsaved-changes .button.button-primary:active {
2233 transform: translateY(0) !important;
2234 box-shadow: 0 2px 8px rgba(59, 130, 246, 0.3) !important;
2235 }
2236
2237 /* Modern Bottom Notification Bar for Unsaved Changes */
2238 .metasync-unsaved-notification {
2239 position: fixed !important;
2240 bottom: 20px !important;
2241 left: 50% !important;
2242 transform: translateX(-50%) translateY(100%) !important;
2243 max-width: 600px !important;
2244 width: calc(100% - 40px) !important;
2245 background: linear-gradient(135deg, rgba(59, 130, 246, 0.95) 0%, rgba(139, 92, 246, 0.95) 100%) !important;
2246 backdrop-filter: blur(10px) !important;
2247 color: #ffffff !important;
2248 padding: 16px 20px !important;
2249 z-index: 999999 !important;
2250 display: flex !important;
2251 align-items: center !important;
2252 justify-content: space-between !important;
2253 font-weight: 500 !important;
2254 box-shadow: 0 8px 32px rgba(59, 130, 246, 0.25),
2255 0 0 0 1px rgba(255, 255, 255, 0.1) !important;
2256 border: 1px solid rgba(255, 255, 255, 0.2) !important;
2257 border-radius: 12px !important;
2258 transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1),
2259 box-shadow 0.3s ease !important;
2260 }
2261
2262 .metasync-unsaved-notification::before {
2263 content: "" !important;
2264 position: absolute !important;
2265 inset: -1px !important;
2266 background: linear-gradient(135deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.05)) !important;
2267 border-radius: 12px !important;
2268 z-index: -1 !important;
2269 }
2270
2271 .metasync-unsaved-notification.show {
2272 transform: translateX(-50%) translateY(0) !important;
2273 }
2274
2275 .metasync-unsaved-notification:hover {
2276 box-shadow: 0 12px 40px rgba(59, 130, 246, 0.35),
2277 0 0 0 1px rgba(255, 255, 255, 0.15) !important;
2278 }
2279
2280 .metasync-unsaved-notification .notification-content {
2281 display: flex !important;
2282 align-items: center !important;
2283 gap: 12px !important;
2284 }
2285
2286 .metasync-unsaved-notification .notification-icon {
2287 width: 20px !important;
2288 height: 20px !important;
2289 border-radius: 50% !important;
2290 background: rgba(255, 255, 255, 0.2) !important;
2291 display: flex !important;
2292 align-items: center !important;
2293 justify-content: center !important;
2294 font-size: 12px !important;
2295 animation: pulse-icon 2s ease-in-out infinite !important;
2296 }
2297
2298 @keyframes pulse-icon {
2299 0%, 100% {
2300 transform: scale(1);
2301 background: rgba(255, 255, 255, 0.2);
2302 }
2303 50% {
2304 transform: scale(1.1);
2305 background: rgba(255, 255, 255, 0.3);
2306 }
2307 }
2308
2309 .metasync-unsaved-notification .notification-actions {
2310 display: flex !important;
2311 align-items: center !important;
2312 gap: 12px !important;
2313 }
2314
2315 .metasync-unsaved-notification .notification-button {
2316 background: rgba(255, 255, 255, 0.15) !important;
2317 border: 1px solid rgba(255, 255, 255, 0.2) !important;
2318 color: #ffffff !important;
2319 padding: 6px 12px !important;
2320 border-radius: 6px !important;
2321 font-size: 12px !important;
2322 font-weight: 500 !important;
2323 cursor: pointer !important;
2324 transition: all 0.2s ease !important;
2325 text-decoration: none !important;
2326 }
2327
2328 .metasync-unsaved-notification .notification-button:hover {
2329 background: rgba(255, 255, 255, 0.25) !important;
2330 transform: translateY(-1px) !important;
2331 }
2332
2333 .metasync-unsaved-notification .notification-button.primary {
2334 background: rgba(255, 255, 255, 0.9) !important;
2335 color: #3b82f6 !important;
2336 }
2337
2338 .metasync-unsaved-notification .notification-button.primary:hover {
2339 background: #ffffff !important;
2340 color: #2563eb !important;
2341 }
2342
2343 .metasync-unsaved-notification .close-notification {
2344 background: none !important;
2345 border: none !important;
2346 color: rgba(255, 255, 255, 0.7) !important;
2347 cursor: pointer !important;
2348 padding: 4px !important;
2349 border-radius: 4px !important;
2350 transition: all 0.2s ease !important;
2351 font-size: 16px !important;
2352 }
2353
2354 .metasync-unsaved-notification .close-notification:hover {
2355 color: #ffffff !important;
2356 background: rgba(255, 255, 255, 0.1) !important;
2357 }
2358
2359 /* Legacy warning banner styles - updated */
2360 .metasync-unsaved-warning {
2361 background: linear-gradient(135deg, rgba(59, 130, 246, 0.1) 0%, rgba(139, 92, 246, 0.05) 100%) !important;
2362 border-left: 4px solid #3b82f6 !important;
2363 color: var(--dashboard-text-primary) !important;
2364 padding: 16px 20px !important;
2365 margin: 20px 0 !important;
2366 border-radius: 8px !important;
2367 display: flex !important;
2368 align-items: center !important;
2369 gap: 12px !important;
2370 font-weight: 500 !important;
2371 box-shadow: 0 2px 8px rgba(59, 130, 246, 0.1) !important;
2372 transition: all 0.3s ease !important;
2373 }
2374
2375 @keyframes slideInTop {
2376 from {
2377 opacity: 0;
2378 transform: translateY(-20px);
2379 }
2380 to {
2381 opacity: 1;
2382 transform: translateY(0);
2383 }
2384 }
2385
2386 .metasync-unsaved-warning .dashicons {
2387 color: #3b82f6 !important;
2388 font-size: 20px !important;
2389 animation: gentle-rotate 4s ease-in-out infinite !important;
2390 }
2391
2392 @keyframes gentle-rotate {
2393 0%, 100% { transform: rotate(0deg); }
2394 25% { transform: rotate(5deg); }
2395 75% { transform: rotate(-5deg); }
2396 }
2397
2398 /* Save button highlight animation */
2399 @keyframes save-button-highlight {
2400 0% {
2401 box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3);
2402 transform: translateY(-1px) scale(1);
2403 }
2404 50% {
2405 box-shadow: 0 6px 20px rgba(59, 130, 246, 0.5);
2406 transform: translateY(-2px) scale(1.02);
2407 }
2408 100% {
2409 box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3);
2410 transform: translateY(-1px) scale(1);
2411 }
2412 }
2413
2414 /* Mobile responsive adjustments */
2415 @media (max-width: 768px) {
2416 .metasync-unsaved-notification {
2417 bottom: 10px !important;
2418 left: 50% !important;
2419 width: calc(100% - 20px) !important;
2420 max-width: none !important;
2421 padding: 12px 16px !important;
2422 flex-direction: column !important;
2423 gap: 10px !important;
2424 text-align: center !important;
2425 border-radius: 8px !important;
2426 }
2427
2428 .metasync-unsaved-notification .notification-content {
2429 justify-content: center !important;
2430 width: 100% !important;
2431 }
2432
2433 .metasync-unsaved-notification .notification-actions {
2434 justify-content: center !important;
2435 flex-wrap: wrap !important;
2436 gap: 8px !important;
2437 width: 100% !important;
2438 }
2439
2440 .metasync-unsaved-notification .notification-button {
2441 flex: 1 !important;
2442 min-width: 70px !important;
2443 max-width: 100px !important;
2444 }
2445
2446 .metasync-unsaved-notification .close-notification {
2447 position: absolute !important;
2448 top: 8px !important;
2449 right: 8px !important;
2450 padding: 2px 6px !important;
2451 font-size: 14px !important;
2452 }
2453 }
2454
2455 /* High contrast mode support */
2456 @media (prefers-contrast: high) {
2457 .metasync-dashboard-wrap .has-unsaved-changes {
2458 border: 2px solid #0066cc !important;
2459 background: rgba(0, 102, 204, 0.1) !important;
2460 }
2461
2462 .metasync-unsaved-notification {
2463 background: #0066cc !important;
2464 border: 1px solid #004499 !important;
2465 }
2466 }
2467
2468 /* Reduced motion support */
2469 @media (prefers-reduced-motion: reduce) {
2470 .metasync-dashboard-wrap .unsaved-indicator,
2471 .metasync-dashboard-wrap .has-unsaved-changes::after,
2472 .metasync-unsaved-notification .notification-icon {
2473 animation: none !important;
2474 }
2475
2476 .metasync-dashboard-wrap .has-unsaved-changes .button.button-primary,
2477 .metasync-unsaved-notification {
2478 transition: none !important;
2479 }
2480 }
2481
2482 /* ========================================
2483 SYNC LOG PAGE STYLES
2484 ======================================== */
2485
2486 /* Sync Log Header */
2487 .sync-log-header {
2488 display: flex;
2489 justify-content: space-between;
2490 /* Centred rather than flex-start: the title section used to be a two-line
2491 * block (24px heading + description) that read fine top-aligned, but it is
2492 * now a single line of copy sitting beside a 34px control row. Top-aligning
2493 * a one-line block against that row leaves the text visibly high. */
2494 align-items: center;
2495 margin-bottom: 30px;
2496 gap: 20px;
2497 }
2498
2499 .sync-log-title-section {
2500 flex: 1;
2501 }
2502
2503 /* The card no longer renders an <h2> — the page title and description come
2504 * from the layout header (render_layout_open), and the card carries only the
2505 * 90-day retention hint. See admin/class-metasync-admin.php. */
2506
2507 /* Sync Log Filters */
2508 .sync-log-filters {
2509 flex-shrink: 0;
2510 display: flex;
2511 align-items: center;
2512 justify-content: flex-end;
2513 gap: 10px;
2514 }
2515
2516 .sync-filters-form {
2517 display: flex !important;
2518 flex-direction: row !important;
2519 flex-wrap: nowrap;
2520 gap: 12px;
2521 align-items: center;
2522 }
2523
2524 /* Large screens - optimize filter spacing */
2525 @media (min-width: 1200px) {
2526 .sync-filters-form {
2527 gap: 16px;
2528 }
2529
2530 .sync-filter-select {
2531 min-width: 150px;
2532 }
2533 }
2534
2535 /*
2536 * Changes Log toolbar — one shared height for the Clear Log button and the two
2537 * filter selects.
2538 *
2539 * The button is styled inline in the renderer (padding:6px 14px, no height) and
2540 * rendered ~29px, while the selects picked up WordPress core's own
2541 * `select { min-height: 40px }` (wp-admin forms.css) on top of
2542 * .sync-filter-select's padding — so the button sat noticeably shorter than the
2543 * controls beside it.
2544 *
2545 * min-height is the load-bearing declaration here: core's min-height:40px beats
2546 * a plain height:34px no matter how specific the selector, because min-height
2547 * wins over height by definition. Setting both pins the row at 34px.
2548 */
2549 #metasync-clear-sync-log-btn,
2550 .sync-log-filters .sync-filter-select {
2551 height: 34px;
2552 min-height: 34px;
2553 box-sizing: border-box;
2554 }
2555
2556 /* Vertical padding is zeroed so the fixed height above is what the row sees;
2557 * .sync-filter-select's own padding:8px 12px would otherwise fight it. The base
2558 * padding-right (34px, reserving space for the chevron) is !important there and
2559 * still applies. */
2560 .sync-log-filters .sync-filter-select {
2561 padding-top: 0;
2562 padding-bottom: 0;
2563 line-height: 32px;
2564 }
2565
2566 /* The button keeps its inline padding:6px 14px, which leaves a 20px content box
2567 * inside the 34px border-box height — too short for a 32px line-height, so the
2568 * label would sit off-centre. Flex centering makes line-height irrelevant. */
2569 #metasync-clear-sync-log-btn {
2570 display: inline-flex;
2571 align-items: center;
2572 justify-content: center;
2573 line-height: 1;
2574 }
2575
2576 .sync-filter-select {
2577 background-color: var(--dashboard-card-bg);
2578 border: 1px solid var(--dashboard-border);
2579 color: var(--dashboard-text-primary);
2580 padding: 8px 12px;
2581 border-radius: 6px;
2582 font-size: 14px;
2583 width: 100%;
2584 min-width: 130px;
2585 transition: all 0.2s ease;
2586 cursor: pointer;
2587 appearance: none !important;
2588 -webkit-appearance: none !important;
2589 -moz-appearance: none !important;
2590 background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23d1d5db' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6,9 12,15 18,9'%3e%3c/polyline%3e%3c/svg%3e") !important;
2591 background-repeat: no-repeat !important;
2592 background-position: right 10px center !important;
2593 background-size: 14px !important;
2594 padding-right: 34px !important;
2595 white-space: nowrap;
2596 box-sizing: border-box;
2597 }
2598
2599 .sync-filter-select:focus {
2600 outline: none;
2601 border-color: var(--dashboard-accent);
2602 box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);
2603 background-color: var(--dashboard-card-hover);
2604 }
2605
2606 .sync-filter-select:hover {
2607 border-color: var(--dashboard-accent);
2608 background-color: var(--dashboard-card-hover);
2609 }
2610
2611 .sync-filter-select:active {
2612 background-color: var(--dashboard-card-hover);
2613 border-color: var(--dashboard-accent);
2614 }
2615
2616 .sync-filter-select option {
2617 background: var(--dashboard-card-bg);
2618 color: var(--dashboard-text-primary);
2619 padding: 8px;
2620 }
2621
2622 /* Type field dropdown arrow — Local Business Configuration */
2623 .metasync-type-select-wrap {
2624 position: relative;
2625 display: inline-block;
2626 width: 100%;
2627 max-width: 400px;
2628 }
2629
2630 .metasync-type-select-wrap select {
2631 appearance: none;
2632 -webkit-appearance: none;
2633 -moz-appearance: none;
2634 padding-right: 36px;
2635 width: 100%;
2636 cursor: pointer;
2637 }
2638
2639 .metasync-type-select-wrap::after {
2640 content: '';
2641 position: absolute;
2642 right: 12px;
2643 top: 50%;
2644 transform: translateY(-50%);
2645 width: 16px;
2646 height: 16px;
2647 background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239ca3af' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6,9 12,15 18,9'%3e%3c/polyline%3e%3c/svg%3e");
2648 background-repeat: no-repeat;
2649 background-size: contain;
2650 pointer-events: none;
2651 }
2652
2653 /* Sync Log List */
2654 .sync-log-list {
2655 background: var(--dashboard-card-bg);
2656 border-radius: 12px;
2657 overflow: hidden;
2658 border: 1px solid var(--dashboard-border);
2659 }
2660
2661 .sync-log-item {
2662 display: flex;
2663 align-items: center;
2664 padding: 20px;
2665 border-bottom: 1px solid var(--dashboard-border);
2666 transition: all 0.2s ease;
2667 }
2668
2669 .sync-log-item:last-child {
2670 border-bottom: none;
2671 }
2672
2673 .sync-log-item:hover {
2674 background: var(--dashboard-card-hover);
2675 }
2676
2677 /* Sync Log Icon */
2678 .sync-log-icon {
2679 margin-right: 16px;
2680 flex-shrink: 0;
2681 }
2682
2683 .sync-icon-circle {
2684 width: 40px;
2685 height: 40px;
2686 background: var(--dashboard-card-hover);
2687 border-radius: 50%;
2688 display: flex;
2689 align-items: center;
2690 justify-content: center;
2691 border: 1px solid var(--dashboard-border);
2692 }
2693
2694 .sync-icon {
2695 font-size: 18px;
2696 color: var(--dashboard-text-secondary);
2697 }
2698
2699 /* Sync Log Content */
2700 .sync-log-content {
2701 flex: 1;
2702 min-width: 0;
2703 }
2704
2705 .sync-log-title {
2706 font-weight: 600;
2707 color: var(--dashboard-text-primary);
2708 font-size: 16px;
2709 margin-bottom: 4px;
2710 line-height: 1.4;
2711 }
2712
2713 .sync-log-meta {
2714 color: var(--dashboard-text-secondary);
2715 font-size: 14px;
2716 line-height: 1.3;
2717 }
2718
2719 /* Sync Log Status */
2720 .sync-log-status {
2721 margin-left: 16px;
2722 flex-shrink: 0;
2723 }
2724
2725 .sync-status-badge {
2726 display: inline-flex;
2727 align-items: center;
2728 gap: 6px;
2729 padding: 6px 12px;
2730 border-radius: 20px;
2731 font-size: 13px;
2732 font-weight: 500;
2733 text-transform: capitalize;
2734 }
2735
2736 .sync-status-published {
2737 background: rgba(16, 185, 129, 0.15);
2738 color: var(--dashboard-success);
2739 border: 1px solid rgba(16, 185, 129, 0.3);
2740 }
2741
2742 .sync-status-draft {
2743 background: rgba(139, 92, 246, 0.15);
2744 color: #8b5cf6;
2745 border: 1px solid rgba(139, 92, 246, 0.3);
2746 }
2747
2748 .sync-status-icon {
2749 font-size: 12px;
2750 font-weight: bold;
2751 }
2752
2753 /* Sync Log Empty State */
2754 .sync-log-empty {
2755 text-align: center;
2756 padding: 60px 20px;
2757 color: var(--dashboard-text-secondary);
2758 background: var(--dashboard-card-bg);
2759 border-radius: 12px;
2760 border: 1px solid var(--dashboard-border);
2761 }
2762
2763 .sync-log-empty-icon {
2764 font-size: 48px;
2765 margin-bottom: 16px;
2766 opacity: 0.6;
2767 color: var(--dashboard-text-secondary);
2768 }
2769
2770 /* The empty-state heading is an <h2>: the card's own <h2> is gone, so the
2771 * layout's <h1> is the only heading above it and an <h3> here would skip a
2772 * level. Scoped through .metasync-dashboard-wrap to out-specify
2773 * ".metasync-dashboard-wrap .dashboard-card h2" (0,3,1) above, which would
2774 * otherwise impose its 1.5rem card-title sizing and flex display on what is
2775 * a centred empty-state message. Sizing matches the previous <h3>. */
2776 .metasync-dashboard-wrap .sync-log-empty h2 {
2777 color: var(--dashboard-text-primary);
2778 margin: 0 0 8px 0;
2779 font-size: 18px;
2780 font-weight: 600;
2781 display: block;
2782 }
2783
2784 .sync-log-empty p {
2785 font-size: 14px;
2786 line-height: 1.5;
2787 max-width: 400px;
2788 margin: 0 auto;
2789 color: var(--dashboard-text-secondary);
2790 }
2791
2792 /* Sync Log Pagination */
2793 .sync-log-pagination {
2794 display: flex;
2795 justify-content: space-between;
2796 align-items: center;
2797 margin-top: 30px;
2798 padding-top: 20px;
2799 border-top: 1px solid var(--dashboard-border);
2800 }
2801
2802 .sync-log-pagination-info {
2803 color: var(--dashboard-text-secondary);
2804 font-size: 14px;
2805 }
2806
2807 .sync-log-pagination-controls {
2808 display: flex;
2809 align-items: center;
2810 gap: 8px;
2811 }
2812
2813 /*
2814 * Rows-per-page selector on the Changes Log footer.
2815 *
2816 * .metasync-per-page-select is emitted by Metasync_Per_Page_Helper::render_selector()
2817 * on four screens (Redirections, 404 Monitor, Changes Log, Media Library), but
2818 * only the other three style it. On the Changes Log it fell through to the
2819 * generic ".metasync-dashboard-wrap select" rule — width:100%, max-width:400px,
2820 * padding:12px 16px — so a two-digit control rendered ~295px wide and 64px tall
2821 * next to 34px dashboard controls.
2822 *
2823 * Scoped to .sync-log-pagination-info, a Changes Log-only wrapper, rather than
2824 * to the shared class: the other three screens already size this control via
2825 * their own rules (".wrap .tablenav select" for Redirections and 404 Monitor,
2826 * "#metasync-image-library-form .tablenav select" for Media Library), and a
2827 * shared rule here would be one more thing competing with them. Keeping it
2828 * page-scoped means those screens are untouched by construction, not by
2829 * winning a specificity tie.
2830 *
2831 * min-height pairs with height for the same reason as the toolbar rule above —
2832 * core's select{min-height:40px} would otherwise inflate it back to 40px.
2833 *
2834 * Sizing only: admin/js/metasync-per-page.js drives behaviour off the element's
2835 * data-* attributes, which CSS must not disturb.
2836 */
2837 .sync-log-pagination-info .metasync-per-page-select {
2838 height: 34px;
2839 min-height: 34px;
2840 line-height: 32px;
2841 padding: 0 28px 0 10px;
2842 font-size: 13px;
2843 width: auto;
2844 border-radius: 6px;
2845 box-sizing: border-box;
2846 vertical-align: middle;
2847 cursor: pointer;
2848 appearance: none;
2849 -webkit-appearance: none;
2850 -moz-appearance: none;
2851 background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23d1d5db' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6,9 12,15 18,9'%3e%3c/polyline%3e%3c/svg%3E");
2852 background-repeat: no-repeat;
2853 background-position: right 10px center;
2854 background-size: 14px;
2855 }
2856
2857 /* Mirrors .sync-filter-select option. The rule above is the first to apply
2858 * appearance:none to this control, and dark-theme <option> popups need their
2859 * colours stated explicitly rather than inherited. */
2860 .sync-log-pagination-info .metasync-per-page-select option {
2861 background: var(--dashboard-card-bg);
2862 color: var(--dashboard-text-primary);
2863 padding: 8px;
2864 }
2865
2866 .sync-pagination-btn {
2867 display: inline-flex;
2868 align-items: center;
2869 justify-content: center;
2870 width: 36px;
2871 height: 36px;
2872 background: var(--dashboard-card-bg);
2873 border: 1px solid var(--dashboard-border);
2874 color: var(--dashboard-text-primary);
2875 text-decoration: none;
2876 border-radius: 6px;
2877 font-size: 14px;
2878 font-weight: 500;
2879 transition: all 0.2s ease;
2880 }
2881
2882 .sync-pagination-btn:hover {
2883 background: var(--dashboard-card-hover);
2884 border-color: var(--dashboard-accent);
2885 color: var(--dashboard-accent);
2886 text-decoration: none;
2887 }
2888
2889 .sync-pagination-btn.active {
2890 background: var(--dashboard-accent);
2891 border-color: var(--dashboard-accent);
2892 color: white;
2893 }
2894
2895 .sync-pagination-btn.active:hover {
2896 background: var(--dashboard-accent-hover);
2897 border-color: var(--dashboard-accent-hover);
2898 color: white;
2899 }
2900
2901 /* Responsive Design for Sync Log */
2902 @media (max-width: 768px) {
2903 .sync-log-header {
2904 flex-direction: column;
2905 align-items: stretch;
2906 gap: 15px;
2907 }
2908
2909 .sync-log-title-section {
2910 text-align: center;
2911 }
2912
2913 .sync-log-filters {
2914 align-self: center;
2915 justify-content: center;
2916 }
2917
2918 .sync-filters-form {
2919 display: flex !important;
2920 flex-direction: row !important;
2921 flex-wrap: nowrap;
2922 gap: 10px;
2923 align-items: center;
2924 justify-content: center;
2925 }
2926
2927 .sync-filter-select {
2928 min-width: 120px;
2929 font-size: 13px;
2930 }
2931
2932 .sync-log-item {
2933 flex-direction: column;
2934 align-items: flex-start;
2935 gap: 12px;
2936 }
2937
2938 .sync-log-icon {
2939 margin-right: 0;
2940 }
2941
2942 .sync-log-status {
2943 margin-left: 0;
2944 align-self: flex-end;
2945 }
2946
2947 .sync-log-pagination {
2948 flex-direction: column;
2949 gap: 15px;
2950 text-align: center;
2951 }
2952
2953 .sync-log-pagination-controls {
2954 justify-content: center;
2955 }
2956 }
2957
2958 @media (max-width: 480px) {
2959 .sync-filters-form {
2960 display: flex !important;
2961 flex-direction: row !important;
2962 flex-wrap: nowrap;
2963 gap: 8px;
2964 width: 100%;
2965 }
2966
2967 /* The vertical half of this padding is intentionally overridden by
2968 * ".sync-log-filters .sync-filter-select" (0,2,0) above, which pins the
2969 * toolbar row at 34px. Do NOT re-declare padding here under that
2970 * descendant selector: it would tie on specificity, win on source order,
2971 * and silently restore the misalignment this rule set exists to avoid. */
2972 .sync-filter-select {
2973 min-width: 110px;
2974 font-size: 13px;
2975 padding: 6px 8px;
2976 padding-right: 28px;
2977 }
2978
2979 .sync-log-item {
2980 padding: 16px;
2981 }
2982
2983 .sync-log-title {
2984 font-size: 15px;
2985 }
2986
2987 .sync-log-meta {
2988 font-size: 13px;
2989 }
2990
2991 .sync-status-badge {
2992 font-size: 12px;
2993 padding: 4px 8px;
2994 }
2995 }
2996
2997 /* ========================================
2998 SETTINGS ACCORDION STYLES
2999 ======================================== */
3000
3001 /* Accordion Container */
3002 .metasync-settings-accordion {
3003 display: flex;
3004 flex-direction: column;
3005 gap: 16px;
3006 }
3007
3008 /* Accordion Section */
3009 .metasync-accordion-section {
3010 background: var(--dashboard-card-bg);
3011 border: 1px solid var(--dashboard-border);
3012 border-radius: 12px;
3013 overflow: hidden;
3014 transition: all 0.3s ease;
3015 }
3016
3017 .metasync-accordion-section:hover {
3018 border-color: var(--dashboard-accent);
3019 box-shadow: 0 2px 8px rgba(59, 130, 246, 0.1);
3020 }
3021
3022 /* Accordion Header */
3023 .metasync-accordion-header {
3024 display: flex;
3025 justify-content: space-between;
3026 align-items: center;
3027 padding: 20px 24px;
3028 cursor: pointer;
3029 user-select: none;
3030 transition: background-color 0.2s ease;
3031 position: relative;
3032 }
3033
3034 .metasync-accordion-header:hover {
3035 background: var(--dashboard-card-hover);
3036 }
3037
3038 .metasync-accordion-header:focus {
3039 outline: 2px solid var(--dashboard-accent);
3040 outline-offset: -2px;
3041 }
3042
3043 .metasync-accordion-title {
3044 display: flex;
3045 align-items: center;
3046 gap: 16px;
3047 flex: 1;
3048 }
3049
3050 .metasync-accordion-icon {
3051 width: 36px;
3052 height: 36px;
3053 border-radius: 8px;
3054 background: var(--dashboard-gradient-primary);
3055 display: flex;
3056 align-items: center;
3057 justify-content: center;
3058 flex-shrink: 0;
3059 }
3060
3061 .metasync-accordion-icon .dashicons {
3062 font-size: 18px;
3063 width: 18px;
3064 height: 18px;
3065 color: #ffffff;
3066 }
3067
3068 .metasync-accordion-text h3 {
3069 color: var(--dashboard-text-primary);
3070 font-size: 18px;
3071 font-weight: 600;
3072 margin: 0 0 4px 0;
3073 }
3074
3075 .metasync-accordion-description {
3076 color: var(--dashboard-text-secondary);
3077 font-size: 13px;
3078 margin: 0;
3079 line-height: 1.4;
3080 }
3081
3082 /* Accordion Toggle Button */
3083 .metasync-accordion-toggle {
3084 background: transparent;
3085 border: none;
3086 color: var(--dashboard-text-secondary);
3087 cursor: pointer;
3088 padding: 8px;
3089 transition: all 0.3s ease;
3090 flex-shrink: 0;
3091 }
3092
3093 .metasync-accordion-toggle:hover {
3094 color: var(--dashboard-accent);
3095 transform: scale(1.1);
3096 }
3097
3098 .metasync-accordion-toggle .toggle-icon {
3099 display: inline-block;
3100 font-size: 16px;
3101 transition: transform 0.3s ease;
3102 }
3103
3104 /* Rotate icon when section is open */
3105 .metasync-accordion-header[aria-expanded="true"] .toggle-icon {
3106 transform: rotate(180deg);
3107 }
3108
3109 /* Accordion Content */
3110 .metasync-accordion-content {
3111 overflow: hidden;
3112 transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1),
3113 opacity 0.3s ease,
3114 padding 0.3s ease;
3115 }
3116
3117 .metasync-accordion-content[data-state="closed"] {
3118 max-height: 0;
3119 opacity: 0;
3120 padding: 0 24px;
3121 }
3122
3123 .metasync-accordion-content[data-state="open"] {
3124 max-height: 5000px; /* Large enough for any content */
3125 opacity: 1;
3126 padding: 0 24px 24px 24px;
3127 }
3128
3129 /* Form Table Inside Accordion */
3130 .metasync-accordion-content .form-table {
3131 margin-top: 0;
3132 background: transparent;
3133 border-collapse: separate;
3134 border-spacing: 0 16px;
3135 }
3136
3137 .metasync-accordion-content .form-table th,
3138 .metasync-accordion-content .form-table td {
3139 padding: 18px 20px;
3140 vertical-align: middle;
3141 background: rgba(255, 255, 255, 0.02);
3142 }
3143
3144 .metasync-accordion-content .form-table th {
3145 border-radius: 8px 0 0 8px;
3146 }
3147
3148 .metasync-accordion-content .form-table td {
3149 border-radius: 0 8px 8px 0;
3150 }
3151
3152 .metasync-accordion-content .form-table tr:hover th,
3153 .metasync-accordion-content .form-table tr:hover td {
3154 background: rgba(255, 255, 255, 0.04);
3155 }
3156
3157 .metasync-accordion-content .form-table tr:first-child th,
3158 .metasync-accordion-content .form-table tr:first-child td {
3159 padding-top: 18px;
3160 }
3161
3162 .metasync-accordion-content .form-table tr:last-child th,
3163 .metasync-accordion-content .form-table tr:last-child td {
3164 padding-bottom: 18px;
3165 }
3166
3167 /* Responsive Design */
3168 @media (max-width: 768px) {
3169 .metasync-accordion-header {
3170 padding: 16px 20px;
3171 }
3172
3173 .metasync-accordion-title {
3174 gap: 12px;
3175 }
3176
3177 .metasync-accordion-icon {
3178 font-size: 24px;
3179 }
3180
3181 .metasync-accordion-text h3 {
3182 font-size: 16px;
3183 }
3184
3185 .metasync-accordion-description {
3186 font-size: 12px;
3187 }
3188
3189 .metasync-accordion-content[data-state="open"] {
3190 padding: 0 20px 20px 20px;
3191 }
3192
3193 .metasync-accordion-content .form-table {
3194 border-spacing: 0 12px;
3195 }
3196
3197 .metasync-accordion-content .form-table th,
3198 .metasync-accordion-content .form-table td {
3199 padding: 14px 16px;
3200 }
3201
3202 .metasync-accordion-content .form-table tr:first-child th,
3203 .metasync-accordion-content .form-table tr:first-child td {
3204 padding-top: 14px;
3205 }
3206 }
3207
3208 /* ========================================
3209 TOOLTIP SYSTEM
3210 ======================================== */
3211
3212 /* Field Label Wrapper */
3213 .metasync-field-label-wrapper {
3214 display: flex;
3215 align-items: flex-start;
3216 gap: 8px;
3217 position: relative;
3218 }
3219
3220 .metasync-field-label-wrapper label {
3221 flex: 1 1 auto;
3222 min-width: 0;
3223 word-break: break-word;
3224 }
3225
3226 /* Tooltip Trigger Button */
3227 .metasync-tooltip-trigger {
3228 background: transparent;
3229 border: none;
3230 padding: 0;
3231 cursor: help;
3232 display: inline-flex;
3233 align-items: center;
3234 justify-content: center;
3235 width: 18px;
3236 height: 18px;
3237 flex-shrink: 0;
3238 transition: all 0.2s ease;
3239 position: relative;
3240 }
3241
3242 .metasync-tooltip-trigger:hover,
3243 .metasync-tooltip-trigger:focus {
3244 transform: scale(1.15);
3245 }
3246
3247 .metasync-tooltip-trigger:focus {
3248 outline: 2px solid var(--dashboard-accent);
3249 outline-offset: 2px;
3250 border-radius: 50%;
3251 }
3252
3253 /* Info Icon SVG */
3254 .metasync-info-icon {
3255 width: 18px;
3256 height: 18px;
3257 color: var(--dashboard-text-secondary);
3258 transition: color 0.2s ease;
3259 }
3260
3261 .metasync-tooltip-trigger:hover .metasync-info-icon,
3262 .metasync-tooltip-trigger:focus .metasync-info-icon {
3263 color: var(--dashboard-accent);
3264 }
3265
3266 /* Tooltip Container */
3267 .metasync-tooltip {
3268 position: absolute;
3269 z-index: 10000;
3270 background: var(--dashboard-card-bg);
3271 border: 1px solid var(--dashboard-border);
3272 border-radius: 8px;
3273 box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
3274 padding: 14px 18px;
3275 width: 450px;
3276 max-width: calc(100vw - 40px);
3277 opacity: 0;
3278 visibility: hidden;
3279 pointer-events: none;
3280 transition: opacity 0.2s ease, visibility 0.2s ease, transform 0.2s ease;
3281 transform: translateY(-8px);
3282 left: 100%;
3283 margin-left: 16px;
3284 top: 50%;
3285 transform: translateY(-50%) translateX(-8px);
3286 }
3287
3288 .metasync-tooltip.show {
3289 opacity: 1;
3290 visibility: visible;
3291 pointer-events: auto;
3292 transform: translateY(-50%) translateX(0);
3293 }
3294
3295 /* Tooltip Arrow */
3296 .metasync-tooltip-arrow {
3297 position: absolute;
3298 left: -6px;
3299 top: 50%;
3300 transform: translateY(-50%);
3301 width: 0;
3302 height: 0;
3303 border-style: solid;
3304 border-width: 6px 6px 6px 0;
3305 border-color: transparent var(--dashboard-border) transparent transparent;
3306 }
3307
3308 .metasync-tooltip-arrow::after {
3309 content: '';
3310 position: absolute;
3311 left: 2px;
3312 top: -5px;
3313 width: 0;
3314 height: 0;
3315 border-style: solid;
3316 border-width: 5px 5px 5px 0;
3317 border-color: transparent var(--dashboard-card-bg) transparent transparent;
3318 }
3319
3320 /* Tooltip Content */
3321 .metasync-tooltip-content {
3322 color: var(--dashboard-text-primary);
3323 font-size: 14px;
3324 line-height: 1.65;
3325 font-weight: 400;
3326 letter-spacing: 0.01em;
3327 }
3328
3329 /* Tooltip Positioning - Handle edge cases */
3330 .metasync-tooltip[data-position="left"] {
3331 left: auto;
3332 right: 100%;
3333 margin-left: 0;
3334 margin-right: 12px;
3335 transform: translateY(-50%) translateX(8px);
3336 }
3337
3338 .metasync-tooltip[data-position="left"].show {
3339 transform: translateY(-50%) translateX(0);
3340 }
3341
3342 .metasync-tooltip[data-position="left"] .metasync-tooltip-arrow {
3343 left: auto;
3344 right: -6px;
3345 border-width: 6px 0 6px 6px;
3346 border-color: transparent transparent transparent var(--dashboard-border);
3347 }
3348
3349 .metasync-tooltip[data-position="left"] .metasync-tooltip-arrow::after {
3350 left: -7px;
3351 border-width: 5px 0 5px 5px;
3352 border-color: transparent transparent transparent var(--dashboard-card-bg);
3353 }
3354
3355 /* Responsive Tooltip Widths */
3356 @media (max-width: 1400px) {
3357 .metasync-tooltip {
3358 width: 400px;
3359 }
3360 }
3361
3362 @media (max-width: 1200px) {
3363 .metasync-tooltip {
3364 width: 360px;
3365 }
3366 }
3367
3368 @media (max-width: 992px) {
3369 .metasync-tooltip {
3370 width: 320px;
3371 padding: 12px 16px;
3372 }
3373 }
3374
3375 /* Mobile & Tablet Tooltip Adjustments */
3376 @media (max-width: 768px) {
3377 .metasync-tooltip {
3378 width: calc(100vw - 40px);
3379 max-width: 500px;
3380 font-size: 13px;
3381 padding: 14px 16px;
3382 position: fixed;
3383 left: 50% !important;
3384 top: auto !important;
3385 bottom: 20px;
3386 transform: translateX(-50%) translateY(8px);
3387 margin: 0;
3388 }
3389
3390 .metasync-tooltip.show {
3391 transform: translateX(-50%) translateY(0);
3392 }
3393
3394 .metasync-tooltip-arrow {
3395 display: none;
3396 }
3397 }
3398
3399 /* Small Mobile Devices */
3400 @media (max-width: 480px) {
3401 .metasync-tooltip {
3402 width: calc(100vw - 30px);
3403 font-size: 12px;
3404 padding: 12px 14px;
3405 }
3406 }
3407
3408 /* Accessibility - Keyboard Navigation */
3409 .metasync-accordion-header:focus-visible {
3410 outline: 2px solid var(--dashboard-accent);
3411 outline-offset: -2px;
3412 }
3413
3414 /* Reduced Motion Support */
3415 @media (prefers-reduced-motion: reduce) {
3416 .metasync-accordion-content,
3417 .metasync-accordion-toggle .toggle-icon,
3418 .metasync-tooltip,
3419 .metasync-tooltip-trigger {
3420 transition: none;
3421 }
3422 }
3423
3424 /* ================================================
3425 Universal Gradient Button Text Color
3426 Ensures all elements with gradient backgrounds have white text
3427 ================================================ */
3428
3429 /* Light Mode - Ensure gradient backgrounds always have white text */
3430 [data-theme="light"] .metasync-dashboard-wrap *[style*="--dashboard-gradient-primary"],
3431 [data-theme="light"] .metasync-dashboard-wrap .button-primary,
3432 [data-theme="light"] .metasync-dashboard-wrap .metasync-nav-tab.active,
3433 [data-theme="light"] .metasync-dashboard-wrap .metasync-theme-option.active,
3434 [data-theme="light"] .metasync-dashboard-wrap .metasync-sa-connect-btn.primary,
3435 [data-theme="light"] .metasync-dashboard-wrap .metasync-dashboard-btn,
3436 [data-theme="light"] .metasync-dashboard-wrap .metasync-sa-connect-btn,
3437 [data-theme="light"] .metasync-dashboard-wrap #connect-searchatlas-btn {
3438 color: #ffffff !important;
3439 }
3440
3441 /* Ensure hover states maintain white text */
3442 [data-theme="light"] .metasync-dashboard-wrap .button-primary:hover,
3443 [data-theme="light"] .metasync-dashboard-wrap .metasync-dashboard-btn:hover,
3444 [data-theme="light"] .metasync-dashboard-wrap .metasync-sa-connect-btn:hover,
3445 [data-theme="light"] .metasync-dashboard-wrap #connect-searchatlas-btn:hover {
3446 color: #ffffff !important;
3447 }
3448
3449 /* ================================================
3450 Monochrome Emoji System
3451 Forces all decorative emoji to render as monochrome text glyphs
3452 so they inherit the element's CSS color property (white in dark
3453 theme, dark in light theme) rather than rendering as colorful
3454 emoji pictographs. Applies throughout all admin screens.
3455 ================================================ */
3456
3457 .metasync-dashboard-wrap h1,
3458 .metasync-dashboard-wrap h2,
3459 .metasync-dashboard-wrap h3,
3460 .metasync-dashboard-wrap h4,
3461 .metasync-dashboard-wrap h5,
3462 .metasync-dashboard-wrap h6,
3463 .metasync-dashboard-wrap label,
3464 .metasync-dashboard-wrap th,
3465 .metasync-dashboard-wrap td,
3466 .metasync-dashboard-wrap legend,
3467 .metasync-dashboard-wrap .button,
3468 .metasync-dashboard-wrap .button-primary,
3469 .metasync-dashboard-wrap .button-secondary,
3470 .metasync-dashboard-wrap .metasync-stat-label,
3471 .metasync-dashboard-wrap .metasync-stat-value,
3472 .metasync-dashboard-wrap .dashboard-card-title,
3473 .metasync-dashboard-wrap .notice,
3474 .metasync-dashboard-wrap p,
3475 .metasync-dashboard-wrap .metasync-accordion-icon,
3476 .metasync-dashboard-wrap .sync-log-empty-icon,
3477 .metasync-dashboard-wrap .sync-icon,
3478 .metasync-dashboard-wrap span[class*="icon"],
3479 .metasync-dashboard-wrap div[class*="icon"] {
3480 font-variant-emoji: text;
3481 }
3482
3483 /* Dashicons inside sitemap stat-icon boxes */
3484 .metasync-dashboard-wrap .stat-icon {
3485 display: flex;
3486 align-items: center;
3487 justify-content: center;
3488 }
3489 .metasync-dashboard-wrap .stat-icon .dashicons {
3490 font-size: 24px;
3491 width: 24px;
3492 height: 24px;
3493 color: var(--dashboard-text-secondary);
3494 }
3495
3496 /* Dismiss button on plugin notices.
3497 The dashboard script appends a .notice-dismiss to every notice inside
3498 .metasync-dashboard-wrap, but the notice itself was never given a
3499 positioning context, so WordPress core's `position: absolute` on the
3500 button resolved against whatever ancestor happened to be positioned
3501 instead of the notice box — landing the icon mid-text rather than in the
3502 notice's own top-right corner. Anchor it explicitly to the notice. */
3503 .metasync-dashboard-wrap .notice {
3504 position: relative;
3505 }
3506
3507 .metasync-dashboard-wrap .notice-dismiss {
3508 position: absolute;
3509 top: 8px;
3510 right: 8px;
3511 width: 28px;
3512 height: 28px;
3513 display: flex;
3514 align-items: center;
3515 justify-content: center;
3516 }
3517
3518 /* WordPress core colours the dismiss icon a near-black grey (#1e1e1e), which
3519 reads fine on the light theme but is effectively invisible against the dark
3520 theme's card background. Give it a theme-aware colour instead. !important
3521 because the icon's colour otherwise wins on specificity alone, the same way
3522 the base .notice rule above needs !important to beat WP core.
3523 `.metasync-dashboard-wrap[data-theme="dark"]` matches the common case: the
3524 wrap carries data-theme itself (set server-side on page load). The plain
3525 `[data-theme="dark"] .metasync-dashboard-wrap` descendant form is kept too,
3526 since the in-page theme switcher additionally stamps data-theme on <html>
3527 once the user toggles it, and either could be the one present. */
3528 .metasync-dashboard-wrap[data-theme="dark"] .notice-dismiss::before,
3529 [data-theme="dark"] .metasync-dashboard-wrap .notice-dismiss::before {
3530 color: var(--dashboard-text-secondary) !important;
3531 }
3532
3533 .metasync-dashboard-wrap[data-theme="dark"] .notice-dismiss:hover::before,
3534 .metasync-dashboard-wrap[data-theme="dark"] .notice-dismiss:focus::before,
3535 [data-theme="dark"] .metasync-dashboard-wrap .notice-dismiss:hover::before,
3536 [data-theme="dark"] .metasync-dashboard-wrap .notice-dismiss:focus::before {
3537 color: var(--dashboard-text-primary) !important;
3538 }
3539
3540 /* Remove WordPress footer space on MetaSync admin pages. */
3541 body:has(.metasync-dashboard-wrap) #wpbody-content,
3542 body:has(.metasync-otto-debug) #wpbody-content {
3543 padding-bottom: 0;
3544 }
3545
3546 body:has(.metasync-dashboard-wrap) #wpfooter,
3547 body:has(.metasync-otto-debug) #wpfooter {
3548 display: none;
3549 }
3550