PluginProbe
Search Atlas SEO – OTTO AI SEO Automation for WordPress / trunk
Search Atlas SEO – OTTO AI SEO Automation for WordPress vtrunk
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 2.6.4 2.6.3 2.5.23 All 138 releases
metasync / admin / css / metasync-dashboard.css

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

3,443 lines 92.7 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 align-items: flex-start;
2491 margin-bottom: 30px;
2492 gap: 20px;
2493 }
2494
2495 .sync-log-title-section {
2496 flex: 1;
2497 }
2498
2499 .sync-log-title-section h2 {
2500 color: var(--dashboard-text-primary);
2501 margin-bottom: 8px;
2502 font-size: 24px;
2503 font-weight: 600;
2504 }
2505
2506 /* Sync Log Filters */
2507 .sync-log-filters {
2508 flex-shrink: 0;
2509 display: flex;
2510 align-items: center;
2511 justify-content: flex-end;
2512 gap: 10px;
2513 }
2514
2515 .sync-filters-form {
2516 display: flex !important;
2517 flex-direction: row !important;
2518 flex-wrap: nowrap;
2519 gap: 12px;
2520 align-items: center;
2521 }
2522
2523 /* Large screens - optimize filter spacing */
2524 @media (min-width: 1200px) {
2525 .sync-filters-form {
2526 gap: 16px;
2527 }
2528
2529 .sync-filter-select {
2530 min-width: 150px;
2531 }
2532 }
2533
2534 .sync-filter-select {
2535 background-color: var(--dashboard-card-bg);
2536 border: 1px solid var(--dashboard-border);
2537 color: var(--dashboard-text-primary);
2538 padding: 8px 12px;
2539 border-radius: 6px;
2540 font-size: 14px;
2541 width: 100%;
2542 min-width: 130px;
2543 transition: all 0.2s ease;
2544 cursor: pointer;
2545 appearance: none !important;
2546 -webkit-appearance: none !important;
2547 -moz-appearance: none !important;
2548 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;
2549 background-repeat: no-repeat !important;
2550 background-position: right 10px center !important;
2551 background-size: 14px !important;
2552 padding-right: 34px !important;
2553 white-space: nowrap;
2554 box-sizing: border-box;
2555 }
2556
2557 .sync-filter-select:focus {
2558 outline: none;
2559 border-color: var(--dashboard-accent);
2560 box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);
2561 background-color: var(--dashboard-card-hover);
2562 }
2563
2564 .sync-filter-select:hover {
2565 border-color: var(--dashboard-accent);
2566 background-color: var(--dashboard-card-hover);
2567 }
2568
2569 .sync-filter-select:active {
2570 background-color: var(--dashboard-card-hover);
2571 border-color: var(--dashboard-accent);
2572 }
2573
2574 .sync-filter-select option {
2575 background: var(--dashboard-card-bg);
2576 color: var(--dashboard-text-primary);
2577 padding: 8px;
2578 }
2579
2580 /* Type field dropdown arrow — Local Business Configuration */
2581 .metasync-type-select-wrap {
2582 position: relative;
2583 display: inline-block;
2584 width: 100%;
2585 max-width: 400px;
2586 }
2587
2588 .metasync-type-select-wrap select {
2589 appearance: none;
2590 -webkit-appearance: none;
2591 -moz-appearance: none;
2592 padding-right: 36px;
2593 width: 100%;
2594 cursor: pointer;
2595 }
2596
2597 .metasync-type-select-wrap::after {
2598 content: '';
2599 position: absolute;
2600 right: 12px;
2601 top: 50%;
2602 transform: translateY(-50%);
2603 width: 16px;
2604 height: 16px;
2605 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");
2606 background-repeat: no-repeat;
2607 background-size: contain;
2608 pointer-events: none;
2609 }
2610
2611 /* Sync Log List */
2612 .sync-log-list {
2613 background: var(--dashboard-card-bg);
2614 border-radius: 12px;
2615 overflow: hidden;
2616 border: 1px solid var(--dashboard-border);
2617 }
2618
2619 .sync-log-item {
2620 display: flex;
2621 align-items: center;
2622 padding: 20px;
2623 border-bottom: 1px solid var(--dashboard-border);
2624 transition: all 0.2s ease;
2625 }
2626
2627 .sync-log-item:last-child {
2628 border-bottom: none;
2629 }
2630
2631 .sync-log-item:hover {
2632 background: var(--dashboard-card-hover);
2633 }
2634
2635 /* Sync Log Icon */
2636 .sync-log-icon {
2637 margin-right: 16px;
2638 flex-shrink: 0;
2639 }
2640
2641 .sync-icon-circle {
2642 width: 40px;
2643 height: 40px;
2644 background: var(--dashboard-card-hover);
2645 border-radius: 50%;
2646 display: flex;
2647 align-items: center;
2648 justify-content: center;
2649 border: 1px solid var(--dashboard-border);
2650 }
2651
2652 .sync-icon {
2653 font-size: 18px;
2654 color: var(--dashboard-text-secondary);
2655 }
2656
2657 /* Sync Log Content */
2658 .sync-log-content {
2659 flex: 1;
2660 min-width: 0;
2661 }
2662
2663 .sync-log-title {
2664 font-weight: 600;
2665 color: var(--dashboard-text-primary);
2666 font-size: 16px;
2667 margin-bottom: 4px;
2668 line-height: 1.4;
2669 }
2670
2671 .sync-log-meta {
2672 color: var(--dashboard-text-secondary);
2673 font-size: 14px;
2674 line-height: 1.3;
2675 }
2676
2677 /* Sync Log Status */
2678 .sync-log-status {
2679 margin-left: 16px;
2680 flex-shrink: 0;
2681 }
2682
2683 .sync-status-badge {
2684 display: inline-flex;
2685 align-items: center;
2686 gap: 6px;
2687 padding: 6px 12px;
2688 border-radius: 20px;
2689 font-size: 13px;
2690 font-weight: 500;
2691 text-transform: capitalize;
2692 }
2693
2694 .sync-status-published {
2695 background: rgba(16, 185, 129, 0.15);
2696 color: var(--dashboard-success);
2697 border: 1px solid rgba(16, 185, 129, 0.3);
2698 }
2699
2700 .sync-status-draft {
2701 background: rgba(139, 92, 246, 0.15);
2702 color: #8b5cf6;
2703 border: 1px solid rgba(139, 92, 246, 0.3);
2704 }
2705
2706 .sync-status-icon {
2707 font-size: 12px;
2708 font-weight: bold;
2709 }
2710
2711 /* Sync Log Empty State */
2712 .sync-log-empty {
2713 text-align: center;
2714 padding: 60px 20px;
2715 color: var(--dashboard-text-secondary);
2716 background: var(--dashboard-card-bg);
2717 border-radius: 12px;
2718 border: 1px solid var(--dashboard-border);
2719 }
2720
2721 .sync-log-empty-icon {
2722 font-size: 48px;
2723 margin-bottom: 16px;
2724 opacity: 0.6;
2725 color: var(--dashboard-text-secondary);
2726 }
2727
2728 .sync-log-empty h3 {
2729 color: var(--dashboard-text-primary);
2730 margin-bottom: 8px;
2731 font-size: 18px;
2732 font-weight: 600;
2733 }
2734
2735 .sync-log-empty p {
2736 font-size: 14px;
2737 line-height: 1.5;
2738 max-width: 400px;
2739 margin: 0 auto;
2740 color: var(--dashboard-text-secondary);
2741 }
2742
2743 /* Sync Log Pagination */
2744 .sync-log-pagination {
2745 display: flex;
2746 justify-content: space-between;
2747 align-items: center;
2748 margin-top: 30px;
2749 padding-top: 20px;
2750 border-top: 1px solid var(--dashboard-border);
2751 }
2752
2753 .sync-log-pagination-info {
2754 color: var(--dashboard-text-secondary);
2755 font-size: 14px;
2756 }
2757
2758 .sync-log-pagination-controls {
2759 display: flex;
2760 align-items: center;
2761 gap: 8px;
2762 }
2763
2764 .sync-pagination-btn {
2765 display: inline-flex;
2766 align-items: center;
2767 justify-content: center;
2768 width: 36px;
2769 height: 36px;
2770 background: var(--dashboard-card-bg);
2771 border: 1px solid var(--dashboard-border);
2772 color: var(--dashboard-text-primary);
2773 text-decoration: none;
2774 border-radius: 6px;
2775 font-size: 14px;
2776 font-weight: 500;
2777 transition: all 0.2s ease;
2778 }
2779
2780 .sync-pagination-btn:hover {
2781 background: var(--dashboard-card-hover);
2782 border-color: var(--dashboard-accent);
2783 color: var(--dashboard-accent);
2784 text-decoration: none;
2785 }
2786
2787 .sync-pagination-btn.active {
2788 background: var(--dashboard-accent);
2789 border-color: var(--dashboard-accent);
2790 color: white;
2791 }
2792
2793 .sync-pagination-btn.active:hover {
2794 background: var(--dashboard-accent-hover);
2795 border-color: var(--dashboard-accent-hover);
2796 color: white;
2797 }
2798
2799 /* Responsive Design for Sync Log */
2800 @media (max-width: 768px) {
2801 .sync-log-header {
2802 flex-direction: column;
2803 align-items: stretch;
2804 gap: 15px;
2805 }
2806
2807 .sync-log-title-section {
2808 text-align: center;
2809 }
2810
2811 .sync-log-filters {
2812 align-self: center;
2813 justify-content: center;
2814 }
2815
2816 .sync-filters-form {
2817 display: flex !important;
2818 flex-direction: row !important;
2819 flex-wrap: nowrap;
2820 gap: 10px;
2821 align-items: center;
2822 justify-content: center;
2823 }
2824
2825 .sync-filter-select {
2826 min-width: 120px;
2827 font-size: 13px;
2828 }
2829
2830 .sync-log-item {
2831 flex-direction: column;
2832 align-items: flex-start;
2833 gap: 12px;
2834 }
2835
2836 .sync-log-icon {
2837 margin-right: 0;
2838 }
2839
2840 .sync-log-status {
2841 margin-left: 0;
2842 align-self: flex-end;
2843 }
2844
2845 .sync-log-pagination {
2846 flex-direction: column;
2847 gap: 15px;
2848 text-align: center;
2849 }
2850
2851 .sync-log-pagination-controls {
2852 justify-content: center;
2853 }
2854 }
2855
2856 @media (max-width: 480px) {
2857 .sync-filters-form {
2858 display: flex !important;
2859 flex-direction: row !important;
2860 flex-wrap: nowrap;
2861 gap: 8px;
2862 width: 100%;
2863 }
2864
2865 .sync-filter-select {
2866 min-width: 110px;
2867 font-size: 13px;
2868 padding: 6px 8px;
2869 padding-right: 28px;
2870 }
2871
2872 .sync-log-item {
2873 padding: 16px;
2874 }
2875
2876 .sync-log-title {
2877 font-size: 15px;
2878 }
2879
2880 .sync-log-meta {
2881 font-size: 13px;
2882 }
2883
2884 .sync-status-badge {
2885 font-size: 12px;
2886 padding: 4px 8px;
2887 }
2888 }
2889
2890 /* ========================================
2891 SETTINGS ACCORDION STYLES
2892 ======================================== */
2893
2894 /* Accordion Container */
2895 .metasync-settings-accordion {
2896 display: flex;
2897 flex-direction: column;
2898 gap: 16px;
2899 }
2900
2901 /* Accordion Section */
2902 .metasync-accordion-section {
2903 background: var(--dashboard-card-bg);
2904 border: 1px solid var(--dashboard-border);
2905 border-radius: 12px;
2906 overflow: hidden;
2907 transition: all 0.3s ease;
2908 }
2909
2910 .metasync-accordion-section:hover {
2911 border-color: var(--dashboard-accent);
2912 box-shadow: 0 2px 8px rgba(59, 130, 246, 0.1);
2913 }
2914
2915 /* Accordion Header */
2916 .metasync-accordion-header {
2917 display: flex;
2918 justify-content: space-between;
2919 align-items: center;
2920 padding: 20px 24px;
2921 cursor: pointer;
2922 user-select: none;
2923 transition: background-color 0.2s ease;
2924 position: relative;
2925 }
2926
2927 .metasync-accordion-header:hover {
2928 background: var(--dashboard-card-hover);
2929 }
2930
2931 .metasync-accordion-header:focus {
2932 outline: 2px solid var(--dashboard-accent);
2933 outline-offset: -2px;
2934 }
2935
2936 .metasync-accordion-title {
2937 display: flex;
2938 align-items: center;
2939 gap: 16px;
2940 flex: 1;
2941 }
2942
2943 .metasync-accordion-icon {
2944 width: 36px;
2945 height: 36px;
2946 border-radius: 8px;
2947 background: var(--dashboard-gradient-primary);
2948 display: flex;
2949 align-items: center;
2950 justify-content: center;
2951 flex-shrink: 0;
2952 }
2953
2954 .metasync-accordion-icon .dashicons {
2955 font-size: 18px;
2956 width: 18px;
2957 height: 18px;
2958 color: #ffffff;
2959 }
2960
2961 .metasync-accordion-text h3 {
2962 color: var(--dashboard-text-primary);
2963 font-size: 18px;
2964 font-weight: 600;
2965 margin: 0 0 4px 0;
2966 }
2967
2968 .metasync-accordion-description {
2969 color: var(--dashboard-text-secondary);
2970 font-size: 13px;
2971 margin: 0;
2972 line-height: 1.4;
2973 }
2974
2975 /* Accordion Toggle Button */
2976 .metasync-accordion-toggle {
2977 background: transparent;
2978 border: none;
2979 color: var(--dashboard-text-secondary);
2980 cursor: pointer;
2981 padding: 8px;
2982 transition: all 0.3s ease;
2983 flex-shrink: 0;
2984 }
2985
2986 .metasync-accordion-toggle:hover {
2987 color: var(--dashboard-accent);
2988 transform: scale(1.1);
2989 }
2990
2991 .metasync-accordion-toggle .toggle-icon {
2992 display: inline-block;
2993 font-size: 16px;
2994 transition: transform 0.3s ease;
2995 }
2996
2997 /* Rotate icon when section is open */
2998 .metasync-accordion-header[aria-expanded="true"] .toggle-icon {
2999 transform: rotate(180deg);
3000 }
3001
3002 /* Accordion Content */
3003 .metasync-accordion-content {
3004 overflow: hidden;
3005 transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1),
3006 opacity 0.3s ease,
3007 padding 0.3s ease;
3008 }
3009
3010 .metasync-accordion-content[data-state="closed"] {
3011 max-height: 0;
3012 opacity: 0;
3013 padding: 0 24px;
3014 }
3015
3016 .metasync-accordion-content[data-state="open"] {
3017 max-height: 5000px; /* Large enough for any content */
3018 opacity: 1;
3019 padding: 0 24px 24px 24px;
3020 }
3021
3022 /* Form Table Inside Accordion */
3023 .metasync-accordion-content .form-table {
3024 margin-top: 0;
3025 background: transparent;
3026 border-collapse: separate;
3027 border-spacing: 0 16px;
3028 }
3029
3030 .metasync-accordion-content .form-table th,
3031 .metasync-accordion-content .form-table td {
3032 padding: 18px 20px;
3033 vertical-align: middle;
3034 background: rgba(255, 255, 255, 0.02);
3035 }
3036
3037 .metasync-accordion-content .form-table th {
3038 border-radius: 8px 0 0 8px;
3039 }
3040
3041 .metasync-accordion-content .form-table td {
3042 border-radius: 0 8px 8px 0;
3043 }
3044
3045 .metasync-accordion-content .form-table tr:hover th,
3046 .metasync-accordion-content .form-table tr:hover td {
3047 background: rgba(255, 255, 255, 0.04);
3048 }
3049
3050 .metasync-accordion-content .form-table tr:first-child th,
3051 .metasync-accordion-content .form-table tr:first-child td {
3052 padding-top: 18px;
3053 }
3054
3055 .metasync-accordion-content .form-table tr:last-child th,
3056 .metasync-accordion-content .form-table tr:last-child td {
3057 padding-bottom: 18px;
3058 }
3059
3060 /* Responsive Design */
3061 @media (max-width: 768px) {
3062 .metasync-accordion-header {
3063 padding: 16px 20px;
3064 }
3065
3066 .metasync-accordion-title {
3067 gap: 12px;
3068 }
3069
3070 .metasync-accordion-icon {
3071 font-size: 24px;
3072 }
3073
3074 .metasync-accordion-text h3 {
3075 font-size: 16px;
3076 }
3077
3078 .metasync-accordion-description {
3079 font-size: 12px;
3080 }
3081
3082 .metasync-accordion-content[data-state="open"] {
3083 padding: 0 20px 20px 20px;
3084 }
3085
3086 .metasync-accordion-content .form-table {
3087 border-spacing: 0 12px;
3088 }
3089
3090 .metasync-accordion-content .form-table th,
3091 .metasync-accordion-content .form-table td {
3092 padding: 14px 16px;
3093 }
3094
3095 .metasync-accordion-content .form-table tr:first-child th,
3096 .metasync-accordion-content .form-table tr:first-child td {
3097 padding-top: 14px;
3098 }
3099 }
3100
3101 /* ========================================
3102 TOOLTIP SYSTEM
3103 ======================================== */
3104
3105 /* Field Label Wrapper */
3106 .metasync-field-label-wrapper {
3107 display: flex;
3108 align-items: flex-start;
3109 gap: 8px;
3110 position: relative;
3111 }
3112
3113 .metasync-field-label-wrapper label {
3114 flex: 1 1 auto;
3115 min-width: 0;
3116 word-break: break-word;
3117 }
3118
3119 /* Tooltip Trigger Button */
3120 .metasync-tooltip-trigger {
3121 background: transparent;
3122 border: none;
3123 padding: 0;
3124 cursor: help;
3125 display: inline-flex;
3126 align-items: center;
3127 justify-content: center;
3128 width: 18px;
3129 height: 18px;
3130 flex-shrink: 0;
3131 transition: all 0.2s ease;
3132 position: relative;
3133 }
3134
3135 .metasync-tooltip-trigger:hover,
3136 .metasync-tooltip-trigger:focus {
3137 transform: scale(1.15);
3138 }
3139
3140 .metasync-tooltip-trigger:focus {
3141 outline: 2px solid var(--dashboard-accent);
3142 outline-offset: 2px;
3143 border-radius: 50%;
3144 }
3145
3146 /* Info Icon SVG */
3147 .metasync-info-icon {
3148 width: 18px;
3149 height: 18px;
3150 color: var(--dashboard-text-secondary);
3151 transition: color 0.2s ease;
3152 }
3153
3154 .metasync-tooltip-trigger:hover .metasync-info-icon,
3155 .metasync-tooltip-trigger:focus .metasync-info-icon {
3156 color: var(--dashboard-accent);
3157 }
3158
3159 /* Tooltip Container */
3160 .metasync-tooltip {
3161 position: absolute;
3162 z-index: 10000;
3163 background: var(--dashboard-card-bg);
3164 border: 1px solid var(--dashboard-border);
3165 border-radius: 8px;
3166 box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
3167 padding: 14px 18px;
3168 width: 450px;
3169 max-width: calc(100vw - 40px);
3170 opacity: 0;
3171 visibility: hidden;
3172 pointer-events: none;
3173 transition: opacity 0.2s ease, visibility 0.2s ease, transform 0.2s ease;
3174 transform: translateY(-8px);
3175 left: 100%;
3176 margin-left: 16px;
3177 top: 50%;
3178 transform: translateY(-50%) translateX(-8px);
3179 }
3180
3181 .metasync-tooltip.show {
3182 opacity: 1;
3183 visibility: visible;
3184 pointer-events: auto;
3185 transform: translateY(-50%) translateX(0);
3186 }
3187
3188 /* Tooltip Arrow */
3189 .metasync-tooltip-arrow {
3190 position: absolute;
3191 left: -6px;
3192 top: 50%;
3193 transform: translateY(-50%);
3194 width: 0;
3195 height: 0;
3196 border-style: solid;
3197 border-width: 6px 6px 6px 0;
3198 border-color: transparent var(--dashboard-border) transparent transparent;
3199 }
3200
3201 .metasync-tooltip-arrow::after {
3202 content: '';
3203 position: absolute;
3204 left: 2px;
3205 top: -5px;
3206 width: 0;
3207 height: 0;
3208 border-style: solid;
3209 border-width: 5px 5px 5px 0;
3210 border-color: transparent var(--dashboard-card-bg) transparent transparent;
3211 }
3212
3213 /* Tooltip Content */
3214 .metasync-tooltip-content {
3215 color: var(--dashboard-text-primary);
3216 font-size: 14px;
3217 line-height: 1.65;
3218 font-weight: 400;
3219 letter-spacing: 0.01em;
3220 }
3221
3222 /* Tooltip Positioning - Handle edge cases */
3223 .metasync-tooltip[data-position="left"] {
3224 left: auto;
3225 right: 100%;
3226 margin-left: 0;
3227 margin-right: 12px;
3228 transform: translateY(-50%) translateX(8px);
3229 }
3230
3231 .metasync-tooltip[data-position="left"].show {
3232 transform: translateY(-50%) translateX(0);
3233 }
3234
3235 .metasync-tooltip[data-position="left"] .metasync-tooltip-arrow {
3236 left: auto;
3237 right: -6px;
3238 border-width: 6px 0 6px 6px;
3239 border-color: transparent transparent transparent var(--dashboard-border);
3240 }
3241
3242 .metasync-tooltip[data-position="left"] .metasync-tooltip-arrow::after {
3243 left: -7px;
3244 border-width: 5px 0 5px 5px;
3245 border-color: transparent transparent transparent var(--dashboard-card-bg);
3246 }
3247
3248 /* Responsive Tooltip Widths */
3249 @media (max-width: 1400px) {
3250 .metasync-tooltip {
3251 width: 400px;
3252 }
3253 }
3254
3255 @media (max-width: 1200px) {
3256 .metasync-tooltip {
3257 width: 360px;
3258 }
3259 }
3260
3261 @media (max-width: 992px) {
3262 .metasync-tooltip {
3263 width: 320px;
3264 padding: 12px 16px;
3265 }
3266 }
3267
3268 /* Mobile & Tablet Tooltip Adjustments */
3269 @media (max-width: 768px) {
3270 .metasync-tooltip {
3271 width: calc(100vw - 40px);
3272 max-width: 500px;
3273 font-size: 13px;
3274 padding: 14px 16px;
3275 position: fixed;
3276 left: 50% !important;
3277 top: auto !important;
3278 bottom: 20px;
3279 transform: translateX(-50%) translateY(8px);
3280 margin: 0;
3281 }
3282
3283 .metasync-tooltip.show {
3284 transform: translateX(-50%) translateY(0);
3285 }
3286
3287 .metasync-tooltip-arrow {
3288 display: none;
3289 }
3290 }
3291
3292 /* Small Mobile Devices */
3293 @media (max-width: 480px) {
3294 .metasync-tooltip {
3295 width: calc(100vw - 30px);
3296 font-size: 12px;
3297 padding: 12px 14px;
3298 }
3299 }
3300
3301 /* Accessibility - Keyboard Navigation */
3302 .metasync-accordion-header:focus-visible {
3303 outline: 2px solid var(--dashboard-accent);
3304 outline-offset: -2px;
3305 }
3306
3307 /* Reduced Motion Support */
3308 @media (prefers-reduced-motion: reduce) {
3309 .metasync-accordion-content,
3310 .metasync-accordion-toggle .toggle-icon,
3311 .metasync-tooltip,
3312 .metasync-tooltip-trigger {
3313 transition: none;
3314 }
3315 }
3316
3317 /* ================================================
3318 Universal Gradient Button Text Color
3319 Ensures all elements with gradient backgrounds have white text
3320 ================================================ */
3321
3322 /* Light Mode - Ensure gradient backgrounds always have white text */
3323 [data-theme="light"] .metasync-dashboard-wrap *[style*="--dashboard-gradient-primary"],
3324 [data-theme="light"] .metasync-dashboard-wrap .button-primary,
3325 [data-theme="light"] .metasync-dashboard-wrap .metasync-nav-tab.active,
3326 [data-theme="light"] .metasync-dashboard-wrap .metasync-theme-option.active,
3327 [data-theme="light"] .metasync-dashboard-wrap .metasync-sa-connect-btn.primary,
3328 [data-theme="light"] .metasync-dashboard-wrap .metasync-dashboard-btn,
3329 [data-theme="light"] .metasync-dashboard-wrap .metasync-sa-connect-btn,
3330 [data-theme="light"] .metasync-dashboard-wrap #connect-searchatlas-btn {
3331 color: #ffffff !important;
3332 }
3333
3334 /* Ensure hover states maintain white text */
3335 [data-theme="light"] .metasync-dashboard-wrap .button-primary:hover,
3336 [data-theme="light"] .metasync-dashboard-wrap .metasync-dashboard-btn:hover,
3337 [data-theme="light"] .metasync-dashboard-wrap .metasync-sa-connect-btn:hover,
3338 [data-theme="light"] .metasync-dashboard-wrap #connect-searchatlas-btn:hover {
3339 color: #ffffff !important;
3340 }
3341
3342 /* ================================================
3343 Monochrome Emoji System
3344 Forces all decorative emoji to render as monochrome text glyphs
3345 so they inherit the element's CSS color property (white in dark
3346 theme, dark in light theme) rather than rendering as colorful
3347 emoji pictographs. Applies throughout all admin screens.
3348 ================================================ */
3349
3350 .metasync-dashboard-wrap h1,
3351 .metasync-dashboard-wrap h2,
3352 .metasync-dashboard-wrap h3,
3353 .metasync-dashboard-wrap h4,
3354 .metasync-dashboard-wrap h5,
3355 .metasync-dashboard-wrap h6,
3356 .metasync-dashboard-wrap label,
3357 .metasync-dashboard-wrap th,
3358 .metasync-dashboard-wrap td,
3359 .metasync-dashboard-wrap legend,
3360 .metasync-dashboard-wrap .button,
3361 .metasync-dashboard-wrap .button-primary,
3362 .metasync-dashboard-wrap .button-secondary,
3363 .metasync-dashboard-wrap .metasync-stat-label,
3364 .metasync-dashboard-wrap .metasync-stat-value,
3365 .metasync-dashboard-wrap .dashboard-card-title,
3366 .metasync-dashboard-wrap .notice,
3367 .metasync-dashboard-wrap p,
3368 .metasync-dashboard-wrap .metasync-accordion-icon,
3369 .metasync-dashboard-wrap .sync-log-empty-icon,
3370 .metasync-dashboard-wrap .sync-icon,
3371 .metasync-dashboard-wrap span[class*="icon"],
3372 .metasync-dashboard-wrap div[class*="icon"] {
3373 font-variant-emoji: text;
3374 }
3375
3376 /* Dashicons inside sitemap stat-icon boxes */
3377 .metasync-dashboard-wrap .stat-icon {
3378 display: flex;
3379 align-items: center;
3380 justify-content: center;
3381 }
3382 .metasync-dashboard-wrap .stat-icon .dashicons {
3383 font-size: 24px;
3384 width: 24px;
3385 height: 24px;
3386 color: var(--dashboard-text-secondary);
3387 }
3388
3389 /* Dismiss button on plugin notices.
3390 The dashboard script appends a .notice-dismiss to every notice inside
3391 .metasync-dashboard-wrap, but the notice itself was never given a
3392 positioning context, so WordPress core's `position: absolute` on the
3393 button resolved against whatever ancestor happened to be positioned
3394 instead of the notice box — landing the icon mid-text rather than in the
3395 notice's own top-right corner. Anchor it explicitly to the notice. */
3396 .metasync-dashboard-wrap .notice {
3397 position: relative;
3398 }
3399
3400 .metasync-dashboard-wrap .notice-dismiss {
3401 position: absolute;
3402 top: 8px;
3403 right: 8px;
3404 width: 28px;
3405 height: 28px;
3406 display: flex;
3407 align-items: center;
3408 justify-content: center;
3409 }
3410
3411 /* WordPress core colours the dismiss icon a near-black grey (#1e1e1e), which
3412 reads fine on the light theme but is effectively invisible against the dark
3413 theme's card background. Give it a theme-aware colour instead. !important
3414 because the icon's colour otherwise wins on specificity alone, the same way
3415 the base .notice rule above needs !important to beat WP core.
3416 `.metasync-dashboard-wrap[data-theme="dark"]` matches the common case: the
3417 wrap carries data-theme itself (set server-side on page load). The plain
3418 `[data-theme="dark"] .metasync-dashboard-wrap` descendant form is kept too,
3419 since the in-page theme switcher additionally stamps data-theme on <html>
3420 once the user toggles it, and either could be the one present. */
3421 .metasync-dashboard-wrap[data-theme="dark"] .notice-dismiss::before,
3422 [data-theme="dark"] .metasync-dashboard-wrap .notice-dismiss::before {
3423 color: var(--dashboard-text-secondary) !important;
3424 }
3425
3426 .metasync-dashboard-wrap[data-theme="dark"] .notice-dismiss:hover::before,
3427 .metasync-dashboard-wrap[data-theme="dark"] .notice-dismiss:focus::before,
3428 [data-theme="dark"] .metasync-dashboard-wrap .notice-dismiss:hover::before,
3429 [data-theme="dark"] .metasync-dashboard-wrap .notice-dismiss:focus::before {
3430 color: var(--dashboard-text-primary) !important;
3431 }
3432
3433 /* Remove WordPress footer space on MetaSync admin pages. */
3434 body:has(.metasync-dashboard-wrap) #wpbody-content,
3435 body:has(.metasync-otto-debug) #wpbody-content {
3436 padding-bottom: 0;
3437 }
3438
3439 body:has(.metasync-dashboard-wrap) #wpfooter,
3440 body:has(.metasync-otto-debug) #wpfooter {
3441 display: none;
3442 }
3443