PluginProbe
Search Atlas SEO – OTTO AI SEO Automation for WordPress / 2.5.23
Search Atlas SEO – OTTO AI SEO Automation for WordPress v2.5.23
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 / views / metasync-redirection.php

metasync-redirection.php in Search Atlas SEO – OTTO AI SEO Automation for WordPress 2.5.23, at views/metasync-redirection.php

1,087 lines 33.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <style type="text/css">
2 <?php
3 // If this file is called directly, abort.
4 if (!defined('ABSPATH')) {
5 exit;
6 }
7 ?>
8 /* Root Variables - Dashboard Color Scheme */
9 :root {
10 --dashboard-bg: #0f1419;
11 --dashboard-card-bg: #1a1f26;
12 --dashboard-card-hover: #222831;
13 --dashboard-text-primary: #ffffff;
14 --dashboard-text-secondary: #9ca3af;
15 --dashboard-accent: #3b82f6;
16 --dashboard-accent-hover: #2563eb;
17 --dashboard-success: #10b981;
18 --dashboard-warning: #f59e0b;
19 --dashboard-error: #ef4444;
20 --dashboard-border: #374151;
21 --dashboard-gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
22 --dashboard-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -2px rgba(0, 0, 0, 0.1);
23 --dashboard-shadow-hover: 0 20px 25px -5px rgba(0, 0, 0, 0.4), 0 10px 10px -5px rgba(0, 0, 0, 0.2);
24 }
25
26 .column-cb {
27 width: 2.2em;
28 }
29
30 .wrap .wp-list-table th.check-column,
31 .wrap .wp-list-table td.check-column {
32 width: 2.2em;
33 padding: 8px 0 0 3px;
34 vertical-align: middle;
35 }
36
37 .wrap .wp-list-table th.check-column input[type="checkbox"],
38 .wrap .wp-list-table td.check-column input[type="checkbox"] {
39 margin: 0;
40 padding: 0;
41 vertical-align: middle;
42 }
43
44 .column-sources_from {
45 width: 25%;
46 }
47
48 .column-url_redirect_to {
49 width: 25%;
50 }
51
52 .column-http_code {
53 width: 10%;
54 }
55
56 .column-pattern_type {
57 width: 12%;
58 }
59
60 .column-hits_count {
61 width: 8%;
62 }
63
64 .column-status {
65 width: 10%;
66 }
67
68 .column-last_accessed_at {
69 width: 10%;
70 }
71
72 /* Page background */
73 body {
74 background: var(--dashboard-bg) !important;
75 }
76
77 .wrap {
78 background: var(--dashboard-bg) !important;
79 color: var(--dashboard-text-primary) !important;
80 }
81
82 /* Enhanced table styling with higher specificity */
83 .wrap .wp-list-table {
84 background: var(--dashboard-card-bg) !important;
85 border: 1px solid var(--dashboard-border) !important;
86 border-radius: 12px !important;
87 overflow: hidden !important;
88 box-shadow: var(--dashboard-shadow) !important;
89 }
90
91 .wrap .wp-list-table th {
92 background: var(--dashboard-card-hover) !important;
93 color: var(--dashboard-text-primary) !important;
94 border-bottom: 1px solid var(--dashboard-border) !important;
95 font-weight: 600 !important;
96 }
97
98 .wrap .wp-list-table td {
99 background: var(--dashboard-card-bg) !important;
100 border-bottom: 1px solid var(--dashboard-border) !important;
101 color: var(--dashboard-text-secondary) !important;
102 }
103
104 .wrap .wp-list-table tr:hover td {
105 background: var(--dashboard-card-hover) !important;
106 color: var(--dashboard-text-primary) !important;
107 }
108
109 .wrap .wp-list-table tr:nth-child(even) td {
110 background: var(--dashboard-card-bg) !important;
111 }
112
113 .wrap .wp-list-table tr:nth-child(odd) td {
114 background: rgba(255, 255, 255, 0.05) !important;
115 }
116
117 .wrap .wp-list-table tr:nth-child(even):hover td {
118 background: var(--dashboard-card-hover) !important;
119 color: var(--dashboard-text-primary) !important;
120 }
121
122 .wrap .wp-list-table tr:nth-child(odd):hover td {
123 background: var(--dashboard-card-hover) !important;
124 color: var(--dashboard-text-primary) !important;
125 }
126
127 /* Optimized table row backgrounds - alternating pattern for all rows */
128 .wrap .wp-list-table tbody tr:nth-child(odd) td {
129 background: var(--dashboard-card-bg) !important;
130 }
131
132 .wrap .wp-list-table tbody tr:nth-child(even) td {
133 background: rgba(255, 255, 255, 0.05) !important;
134 }
135
136 /* Ensure hover states work correctly */
137 .wrap .wp-list-table tbody tr:nth-child(odd):hover td {
138 background: var(--dashboard-card-hover) !important;
139 color: var(--dashboard-text-primary) !important;
140 }
141
142 .wrap .wp-list-table tbody tr:nth-child(even):hover td {
143 background: var(--dashboard-card-hover) !important;
144 color: var(--dashboard-text-primary) !important;
145 }
146
147 /* Button styling with higher specificity */
148 .wrap .button-primary,
149 .wrap .button-primary:visited,
150 .wrap input[type="submit"].button-primary,
151 .wrap input[type="button"].button-primary {
152 background: var(--dashboard-accent) !important;
153 border-color: var(--dashboard-accent) !important;
154 color: white !important;
155 border-radius: 8px !important;
156 font-weight: 500 !important;
157 transition: all 0.3s ease !important;
158 text-decoration: none !important;
159 }
160
161 .wrap .button-primary:hover,
162 .wrap .button-primary:focus,
163 .wrap input[type="submit"].button-primary:hover,
164 .wrap input[type="button"].button-primary:hover {
165 background: var(--dashboard-accent-hover) !important;
166 border-color: var(--dashboard-accent-hover) !important;
167 transform: translateY(-1px) !important;
168 box-shadow: var(--dashboard-shadow-hover) !important;
169 color: white !important;
170 text-decoration: none !important;
171 }
172
173 .wrap .button-secondary,
174 .wrap .button-secondary:visited,
175 .wrap input[type="submit"].button-secondary,
176 .wrap input[type="button"].button-secondary {
177 background: transparent !important;
178 border: 1px solid var(--dashboard-border) !important;
179 color: var(--dashboard-text-secondary) !important;
180 border-radius: 8px !important;
181 transition: all 0.3s ease !important;
182 text-decoration: none !important;
183 }
184
185 .wrap .button-secondary:hover,
186 .wrap .button-secondary:focus,
187 .wrap input[type="submit"].button-secondary:hover,
188 .wrap input[type="button"].button-secondary:hover {
189 background: var(--dashboard-card-hover) !important;
190 color: var(--dashboard-text-primary) !important;
191 border-color: var(--dashboard-accent) !important;
192 text-decoration: none !important;
193 }
194
195 /* Specific button targeting */
196 .wrap input[type="submit"]#doaction,
197 .wrap input[type="submit"]#post-query-submit,
198 .wrap input[type="submit"]#search-submit,
199 .wrap input[type="submit"].button {
200 background: var(--dashboard-accent) !important;
201 border-color: var(--dashboard-accent) !important;
202 color: white !important;
203 border-radius: 8px !important;
204 font-weight: 500 !important;
205 transition: all 0.3s ease !important;
206 }
207
208 .wrap input[type="submit"]#doaction:hover,
209 .wrap input[type="submit"]#post-query-submit:hover,
210 .wrap input[type="submit"]#search-submit:hover,
211 .wrap input[type="submit"].button:hover {
212 background: var(--dashboard-accent-hover) !important;
213 border-color: var(--dashboard-accent-hover) !important;
214 transform: translateY(-1px) !important;
215 box-shadow: var(--dashboard-shadow-hover) !important;
216 color: white !important;
217 }
218
219 /* Link button styling */
220 .wrap a.button,
221 .wrap a.button:visited {
222 background: var(--dashboard-accent) !important;
223 border-color: var(--dashboard-accent) !important;
224 color: white !important;
225 border-radius: 8px !important;
226 font-weight: 500 !important;
227 transition: all 0.3s ease !important;
228 text-decoration: none !important;
229 display: inline-block !important;
230 padding: 8px 16px !important;
231 }
232
233 .wrap a.button:hover,
234 .wrap a.button:focus {
235 background: var(--dashboard-accent-hover) !important;
236 border-color: var(--dashboard-accent-hover) !important;
237 transform: translateY(-1px) !important;
238 box-shadow: var(--dashboard-shadow-hover) !important;
239 color: white !important;
240 text-decoration: none !important;
241 }
242
243 /* Add Redirection Form Styling */
244 .wrap #add-redirection-form {
245 background: var(--dashboard-card-bg) !important;
246 border: 1px solid var(--dashboard-border) !important;
247 border-radius: 12px !important;
248 padding: 24px !important;
249 margin-bottom: 24px !important;
250 box-shadow: var(--dashboard-shadow) !important;
251 }
252
253 .wrap #add-redirection-form h1 {
254 color: var(--dashboard-text-primary) !important;
255 margin-bottom: 20px !important;
256 font-size: 1.5rem !important;
257 font-weight: 600 !important;
258 }
259
260 .wrap #add-redirection-form .form-table {
261 background: transparent !important;
262 border: none !important;
263 }
264
265 .wrap #add-redirection-form .form-table th {
266 background: transparent !important;
267 color: var(--dashboard-text-primary) !important;
268 font-weight: 600 !important;
269 padding: 12px 0 !important;
270 width: 150px !important;
271 }
272
273 .wrap #add-redirection-form .form-table td {
274 background: transparent !important;
275 color: var(--dashboard-text-secondary) !important;
276 padding: 15px !important;
277 }
278
279 .wrap #add-redirection-form input[type="text"],
280 .wrap #add-redirection-form input[type="url"],
281 .wrap #add-redirection-form textarea {
282 background: var(--dashboard-card-hover) !important;
283 border: 1px solid var(--dashboard-border) !important;
284 color: var(--dashboard-text-primary) !important;
285 border-radius: 8px !important;
286 padding: 8px 12px !important;
287 width: 100% !important;
288 max-width: 500px !important;
289 }
290
291 .wrap #add-redirection-form input[type="text"]:focus,
292 .wrap #add-redirection-form input[type="url"]:focus,
293 .wrap #add-redirection-form textarea:focus {
294 border-color: var(--dashboard-accent) !important;
295 box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
296 outline: none !important;
297 }
298
299 .wrap #add-redirection-form textarea {
300 min-height: 80px !important;
301 resize: vertical !important;
302 }
303
304 .wrap #add-redirection-form input[type="radio"] {
305 margin-right: 8px !important;
306 accent-color: var(--dashboard-accent) !important;
307 }
308
309 .wrap #add-redirection-form label {
310 color: var(--dashboard-text-secondary) !important;
311 margin-right: 16px !important;
312 font-weight: 500 !important;
313 }
314
315 .wrap #add-redirection-form .source-url-list {
316 background: var(--dashboard-card-hover) !important;
317 border: 1px solid var(--dashboard-border) !important;
318 border-radius: 8px !important;
319 padding: 12px !important;
320 margin: 8px 0 !important;
321 }
322
323 .wrap #add-redirection-form .source-url-list li {
324 background: transparent !important;
325 border: none !important;
326 padding: 8px 0 !important;
327 margin: 0 !important;
328 display: flex !important;
329 align-items: center !important;
330 gap: 12px !important;
331 }
332
333 .wrap #add-redirection-form .source-url-list input[type="text"] {
334 flex: 1 !important;
335 max-width: none !important;
336 margin: 0 !important;
337 }
338
339 /* Target the actual select elements */
340 .wrap #add-redirection-form select[name="search_type[]"],
341 .wrap #add-redirection-form select {
342 background: var(--dashboard-card-hover) !important;
343 border: 1px solid var(--dashboard-border) !important;
344 color: var(--dashboard-text-primary) !important;
345 border-radius: 6px !important;
346 padding: 6px 8px !important;
347 min-width: 120px !important;
348 appearance: none !important;
349 -moz-appearance: none !important;
350 -webkit-appearance: none !important;
351 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='%23ffffff' 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") !important;
352 background-repeat: no-repeat !important;
353 background-position: right 8px center !important;
354 background-size: 16px !important;
355 padding-right: 32px !important;
356 cursor: pointer !important;
357 margin-left: 8px !important;
358 }
359
360 .wrap #add-redirection-form select[name="search_type[]"]:focus,
361 .wrap #add-redirection-form select:focus {
362 border-color: var(--dashboard-accent) !important;
363 box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
364 outline: none !important;
365 }
366
367 .wrap #add-redirection-form select[name="search_type[]"] option,
368 .wrap #add-redirection-form select option {
369 background: var(--dashboard-card-hover) !important;
370 color: var(--dashboard-text-primary) !important;
371 padding: 8px !important;
372 }
373
374 /* Target the actual remove button class */
375 .wrap #add-redirection-form .source_url_delete,
376 .wrap #add-redirection-form button.source_url_delete {
377 background: var(--dashboard-error) !important;
378 border: 1px solid var(--dashboard-error) !important;
379 color: white !important;
380 border-radius: 6px !important;
381 padding: 6px 12px !important;
382 font-size: 12px !important;
383 font-weight: 500 !important;
384 transition: all 0.3s ease !important;
385 cursor: pointer !important;
386 display: inline-block !important;
387 margin-left: 8px !important;
388 }
389
390 .wrap #add-redirection-form .source_url_delete:hover,
391 .wrap #add-redirection-form button.source_url_delete:hover {
392 background: #dc2626 !important;
393 border-color: #dc2626 !important;
394 transform: translateY(-1px) !important;
395 color: white !important;
396 }
397
398 .wrap #add-redirection-form .add-source-url {
399 background: var(--dashboard-accent) !important;
400 border: 1px solid var(--dashboard-accent) !important;
401 color: white !important;
402 border-radius: 8px !important;
403 padding: 8px 16px !important;
404 font-weight: 500 !important;
405 transition: all 0.3s ease !important;
406 margin-top: 8px !important;
407 }
408
409 .wrap #add-redirection-form .add-source-url:hover {
410 background: var(--dashboard-accent-hover) !important;
411 border-color: var(--dashboard-accent-hover) !important;
412 transform: translateY(-1px) !important;
413 box-shadow: var(--dashboard-shadow-hover) !important;
414 }
415
416 .wrap #add-redirection-form .form-actions {
417 background: transparent !important;
418 border: none !important;
419 padding: 20px 0 0 0 !important;
420 margin-top: 20px !important;
421 border-top: 1px solid var(--dashboard-border) !important;
422 }
423
424 .wrap #add-redirection-form .form-actions input[type="submit"] {
425 background: var(--dashboard-accent) !important;
426 border: 1px solid var(--dashboard-accent) !important;
427 color: white !important;
428 border-radius: 8px !important;
429 padding: 10px 20px !important;
430 font-weight: 500 !important;
431 margin-right: 12px !important;
432 transition: all 0.3s ease !important;
433 }
434
435 .wrap #add-redirection-form .form-actions input[type="submit"]:hover {
436 background: var(--dashboard-accent-hover) !important;
437 border-color: var(--dashboard-accent-hover) !important;
438 transform: translateY(-1px) !important;
439 box-shadow: var(--dashboard-shadow-hover) !important;
440 }
441
442 .wrap #add-redirection-form .form-actions input[type="button"] {
443 background: transparent !important;
444 border: 1px solid var(--dashboard-border) !important;
445 color: var(--dashboard-text-secondary) !important;
446 border-radius: 8px !important;
447 padding: 10px 20px !important;
448 font-weight: 500 !important;
449 transition: all 0.3s ease !important;
450 }
451
452 .wrap #add-redirection-form .form-actions input[type="button"]:hover {
453 background: var(--dashboard-card-hover) !important;
454 color: var(--dashboard-text-primary) !important;
455 border-color: var(--dashboard-accent) !important;
456 }
457
458 /* Additional form element styling */
459 .wrap #add-redirection-form input[type="radio"]:checked {
460 accent-color: var(--dashboard-accent) !important;
461 }
462
463 .wrap #add-redirection-form input[type="radio"]:checked + label {
464 color: var(--dashboard-text-primary) !important;
465 font-weight: 600 !important;
466 }
467
468 /* Ensure all buttons in the form are properly styled */
469 .wrap #add-redirection-form button,
470 .wrap #add-redirection-form input[type="button"],
471 .wrap #add-redirection-form input[type="submit"] {
472 font-family: inherit !important;
473 font-size: 14px !important;
474 line-height: 1.4 !important;
475 vertical-align: middle !important;
476 }
477
478 /* Fix any remaining button styling issues */
479 .wrap #add-redirection-form .button,
480 .wrap #add-redirection-form .button-secondary {
481 background: transparent !important;
482 border: 1px solid var(--dashboard-border) !important;
483 color: var(--dashboard-text-secondary) !important;
484 border-radius: 8px !important;
485 padding: 8px 16px !important;
486 font-weight: 500 !important;
487 transition: all 0.3s ease !important;
488 text-decoration: none !important;
489 display: inline-block !important;
490 cursor: pointer !important;
491 }
492
493 .wrap #add-redirection-form .button:hover,
494 .wrap #add-redirection-form .button-secondary:hover {
495 background: var(--dashboard-card-hover) !important;
496 color: var(--dashboard-text-primary) !important;
497 border-color: var(--dashboard-accent) !important;
498 text-decoration: none !important;
499 }
500
501 /* Additional targeting for form elements */
502 .wrap #add-redirection-form #source_urls li {
503 display: flex !important;
504 align-items: center !important;
505 gap: 8px !important;
506 margin-bottom: 8px !important;
507 padding: 8px !important;
508 background: var(--dashboard-card-hover) !important;
509 border-radius: 8px !important;
510 border: 1px solid var(--dashboard-border) !important;
511 }
512
513 .wrap #add-redirection-form #source_urls li input[type="text"] {
514 flex: 1 !important;
515 background: var(--dashboard-card-bg) !important;
516 border: 1px solid var(--dashboard-border) !important;
517 color: var(--dashboard-text-primary) !important;
518 border-radius: 6px !important;
519 padding: 6px 8px !important;
520 }
521
522 /* Force override for any conflicting styles */
523 .wrap #add-redirection-form * {
524 box-sizing: border-box !important;
525 }
526
527 /* Page headers and content */
528 .wp-heading-inline {
529 color: var(--dashboard-text-primary) !important;
530 }
531
532 h1, h2, h3 {
533 color: var(--dashboard-text-primary) !important;
534 }
535
536 /* Tablenav styling */
537 .wrap .tablenav {
538 background: var(--dashboard-card-bg);
539 border: 1px solid var(--dashboard-border);
540 border-radius: 8px;
541 padding: 18px 24px;
542 margin-bottom: 16px;
543 box-shadow: var(--dashboard-shadow);
544 display: flex !important;
545 align-items: center !important;
546 justify-content: space-between !important;
547 flex-wrap: nowrap !important;
548 gap: 18px !important;
549 min-height: 64px !important;
550 overflow-x: auto !important;
551 overflow-y: hidden !important;
552 }
553
554 .wrap .tablenav .actions {
555 display: flex !important;
556 align-items: center !important;
557 gap: 12px !important;
558 flex-wrap: nowrap !important;
559 flex-shrink: 0 !important;
560 min-width: 0 !important;
561 }
562
563 .wrap .tablenav .alignleft {
564 display: flex !important;
565 align-items: center !important;
566 gap: 12px !important;
567 flex-wrap: nowrap !important;
568 flex-shrink: 0 !important;
569 min-width: 0 !important;
570 }
571
572 .wrap .tablenav .alignright {
573 display: flex !important;
574 align-items: center !important;
575 gap: 12px !important;
576 margin-left: auto !important;
577 flex-shrink: 0 !important;
578 min-width: 0 !important;
579 }
580
581 .wrap .tablenav select {
582 background: var(--dashboard-card-bg) !important;
583 border: 1px solid var(--dashboard-border) !important;
584 color: var(--dashboard-text-primary) !important;
585 border-radius: 6px !important;
586 padding: 10px 16px !important;
587 height: 40px !important;
588 vertical-align: middle !important;
589 text-align: left !important;
590 line-height: 1.4 !important;
591 font-size: 13px !important;
592 font-weight: 500 !important;
593 appearance: none !important;
594 -moz-appearance: none !important;
595 -webkit-appearance: none !important;
596 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='%23ffffff' 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") !important;
597 background-repeat: no-repeat !important;
598 background-position: right 12px center !important;
599 background-size: 16px !important;
600 padding-right: 40px !important;
601 cursor: pointer !important;
602 width: 140px !important;
603 flex-shrink: 0 !important;
604 white-space: nowrap !important;
605 overflow: hidden !important;
606 text-overflow: ellipsis !important;
607 }
608
609 .wrap .tablenav select:focus {
610 border-color: var(--dashboard-accent) !important;
611 box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
612 outline: none !important;
613 }
614
615 .wrap .tablenav select option {
616 background: var(--dashboard-card-bg) !important;
617 color: var(--dashboard-text-primary) !important;
618 padding: 8px !important;
619 font-size: 13px !important;
620 font-weight: 500 !important;
621 }
622
623 .wrap .tablenav input[type="search"],
624 .wrap .tablenav input[type="text"] {
625 background: var(--dashboard-card-bg) !important;
626 border: 1px solid var(--dashboard-border) !important;
627 color: var(--dashboard-text-primary) !important;
628 border-radius: 6px !important;
629 padding: 10px 16px !important;
630 height: 40px !important;
631 vertical-align: middle !important;
632 width: 250px !important;
633 flex-shrink: 0 !important;
634 white-space: nowrap !important;
635 overflow: hidden !important;
636 text-overflow: ellipsis !important;
637 }
638
639 .wrap .tablenav input[type="submit"] {
640 height: 40px !important;
641 vertical-align: middle !important;
642 line-height: 1 !important;
643 padding: 10px 20px !important;
644 flex-shrink: 0 !important;
645 white-space: nowrap !important;
646 width: auto !important;
647 min-width: 100px !important;
648 }
649
650 .wrap .tablenav .search-box {
651 margin: 0 !important;
652 display: flex !important;
653 align-items: center !important;
654 gap: 12px !important;
655 height: 40px !important;
656 padding: 0 !important;
657 border: none !important;
658 background: transparent !important;
659 flex-shrink: 0 !important;
660 white-space: nowrap !important;
661 min-width: 0 !important;
662 }
663
664 .wrap .tablenav .search-box input[type="search"] {
665 margin: 0 !important;
666 height: 32px !important;
667 vertical-align: middle !important;
668 line-height: 1 !important;
669 box-sizing: border-box !important;
670 padding: 8px 12px !important;
671 border: 1px solid var(--dashboard-border) !important;
672 background: var(--dashboard-card-bg) !important;
673 color: var(--dashboard-text-primary) !important;
674 border-radius: 6px !important;
675 font-size: 13px !important;
676 }
677
678 /* Specific search button alignment */
679 .wrap .tablenav .search-box input[type="submit"] {
680 height: 32px !important;
681 vertical-align: middle !important;
682 line-height: 1 !important;
683 padding: 8px 12px !important;
684 box-sizing: border-box !important;
685 margin: 0 !important;
686 border-radius: 6px !important;
687 font-size: 13px !important;
688 }
689
690 /* Additional targeting for WordPress default styles */
691 .wrap .tablenav p.search-box {
692 display: flex !important;
693 align-items: center !important;
694 gap: 8px !important;
695 height: 32px !important;
696 margin: 0 !important;
697 padding: 0 !important;
698 line-height: 1 !important;
699 }
700
701 .wrap .tablenav p.search-box input {
702 margin: 0 !important;
703 vertical-align: middle !important;
704 line-height: 1 !important;
705 }
706
707 /* Specific ID targeting for search elements - fixed padding */
708 .wrap .tablenav #post-search-input {
709 height: 32px !important;
710 line-height: 1 !important;
711 vertical-align: middle !important;
712 margin-left: 15px !important;
713 padding: 8px 12px !important;
714 border: 1px solid var(--dashboard-border) !important;
715 background: var(--dashboard-card-bg) !important;
716 color: var(--dashboard-text-primary) !important;
717 border-radius: 6px !important;
718 font-size: 13px !important;
719 box-sizing: border-box !important;
720 }
721
722 .wrap .tablenav #search-submit {
723 height: 32px !important;
724 line-height: 1 !important;
725 vertical-align: middle !important;
726 margin: 0 !important;
727 padding: 8px 12px !important;
728 border-radius: 6px !important;
729 font-size: 13px !important;
730 box-sizing: border-box !important;
731 display: inline-block !important;
732 }
733
734 /* Force alignment with transform if needed */
735 .wrap .tablenav .search-box {
736 transform: translateY(0) !important;
737 }
738
739 .wrap .tablenav .search-box input {
740 transform: translateY(0) !important;
741 }
742
743 /* Item count styling - fixed alignment */
744 .wrap .tablenav .displaying-num {
745 color: var(--dashboard-text-primary) !important;
746 font-size: 13px !important;
747 font-weight: 500 !important;
748 background: var(--dashboard-card-hover) !important;
749 padding: 6px 12px !important;
750 border-radius: 6px !important;
751 border: 1px solid var(--dashboard-border) !important;
752 margin: 0 !important;
753 display: inline-block !important;
754 vertical-align: middle !important;
755 line-height: 1 !important;
756 height: 32px !important;
757 box-sizing: border-box !important;
758 }
759
760 /* Alternative item count selectors - maintain inline flow */
761 .wrap .tablenav .alignright {
762 display: flex !important;
763 align-items: center !important;
764 gap: 12px !important;
765 margin-left: auto !important;
766 }
767
768 /* WordPress pagination controls - ensure right alignment */
769 .wrap .tablenav-pages {
770 display: flex !important;
771 align-items: center !important;
772 gap: 8px !important;
773 margin-left: auto !important;
774 justify-content: flex-end !important;
775 }
776
777
778 .wrap .tablenav-pages .displaying-num {
779 color: var(--dashboard-text-primary) !important;
780 font-size: 13px !important;
781 font-weight: 500 !important;
782 background: var(--dashboard-card-hover) !important;
783 padding: 6px 12px !important;
784 border-radius: 6px !important;
785 border: 1px solid var(--dashboard-border) !important;
786 margin-right: 12px !important;
787 white-space: nowrap !important;
788 }
789
790 .wrap .tablenav .alignright p,
791 .wrap .tablenav .alignright span {
792 color: var(--dashboard-text-primary) !important;
793 font-size: 13px !important;
794 font-weight: 500 !important;
795 margin: 0 !important;
796 background: var(--dashboard-card-hover) !important;
797 padding: 0 !important;
798 border-radius: 6px !important;
799 border: 1px solid var(--dashboard-border) !important;
800 display: inline-block !important;
801 vertical-align: middle !important;
802 line-height: 1 !important;
803 height: 32px !important;
804 box-sizing: border-box !important;
805 }
806
807 /* Ensure all buttons in tablenav are properly aligned */
808 .wrap .tablenav .button,
809 .wrap .tablenav input[type="submit"],
810 .wrap .tablenav input[type="button"] {
811 vertical-align: middle !important;
812 height: 32px !important;
813 line-height: 1 !important;
814 display: inline-flex !important;
815 align-items: center !important;
816 justify-content: center !important;
817 text-align: center !important;
818 font-size: 13px !important;
819 font-weight: 500 !important;
820 }
821
822 /* Specific fix for Apply button text alignment */
823 .wrap .tablenav input[type="submit"][value="Apply"] {
824 text-align: center !important;
825 vertical-align: middle !important;
826 line-height: 1 !important;
827 padding: 6px 12px !important;
828 display: inline-flex !important;
829 align-items: center !important;
830 justify-content: center !important;
831 }
832
833 /* Fix for number input fields */
834 .wrap .tablenav input[type="number"] {
835 background: var(--dashboard-card-bg) !important;
836 border: 1px solid var(--dashboard-border) !important;
837 color: var(--dashboard-text-primary) !important;
838 border-radius: 6px !important;
839 padding: 6px 12px !important;
840 height: 32px !important;
841 vertical-align: middle !important;
842 width: auto !important;
843 min-width: 80px !important;
844 }
845
846 .wrap .tablenav input[type="number"]:focus {
847 border-color: var(--dashboard-accent) !important;
848 box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
849 outline: none !important;
850 }
851
852 /* Page title action styling */
853 .page-title-action {
854 background: var(--dashboard-accent) !important;
855 border-color: var(--dashboard-accent) !important;
856 color: white !important;
857 border-radius: 8px !important;
858 font-weight: 500 !important;
859 transition: all 0.3s ease !important;
860 text-decoration: none !important;
861 padding: 8px 16px !important;
862 display: inline-flex !important;
863 align-items: center !important;
864 gap: 8px !important;
865 }
866
867 .page-title-action:hover {
868 background: var(--dashboard-accent-hover) !important;
869 border-color: var(--dashboard-accent-hover) !important;
870 transform: translateY(-1px);
871 box-shadow: var(--dashboard-shadow-hover) !important;
872 color: white !important;
873 }
874
875 /* Status indicators */
876 .status-active {
877 color: var(--dashboard-success) !important;
878 font-weight: 600;
879 }
880
881 .status-inactive {
882 color: var(--dashboard-text-secondary) !important;
883 font-weight: 600;
884 }
885
886 /* HTTP code styling */
887 .http-code-301, .http-code-302, .http-code-307 {
888 color: var(--dashboard-accent) !important;
889 font-weight: 600;
890 }
891
892 .http-code-410, .http-code-451 {
893 color: var(--dashboard-warning) !important;
894 font-weight: 600;
895 }
896
897 /* Fix for duplicate table elements */
898 .wrap .wp-list-table + .wp-list-table {
899 display: none !important;
900 }
901
902 /* Hide duplicate bulk actions */
903 .wrap .tablenav + .tablenav {
904 display: none !important;
905 }
906
907 /* Ensure only one table header is visible */
908 .wrap .wp-list-table thead:not(:first-of-type) {
909 display: none !important;
910 }
911
912 /* Force no line breaks - aggressive approach */
913 .wrap .tablenav * {
914 box-sizing: border-box !important;
915 }
916
917 .wrap .tablenav .alignleft > *,
918 .wrap .tablenav .alignright > *,
919 .wrap .tablenav .actions > * {
920 display: inline-block !important;
921 vertical-align: middle !important;
922 margin: 0 !important;
923 }
924
925 /* Specific element spacing */
926 .wrap .tablenav label {
927 margin-right: 12px !important;
928 margin-left: 4px !important;
929 padding: 8px 4px !important;
930 white-space: nowrap !important;
931 flex-shrink: 0 !important;
932 font-weight: 500 !important;
933 color: var(--dashboard-text-primary) !important;
934 display: inline-block !important;
935 vertical-align: middle !important;
936 }
937
938 /* Responsive behavior for smaller screens */
939 @media (max-width: 1400px) {
940 .wrap .tablenav {
941 overflow-x: auto !important;
942 overflow-y: hidden !important;
943 padding: 16px 20px !important;
944 }
945
946 .wrap .tablenav select {
947 width: 120px !important;
948 padding: 8px 12px !important;
949 height: 36px !important;
950 }
951
952 .wrap .tablenav input[type="search"],
953 .wrap .tablenav input[type="text"] {
954 width: 200px !important;
955 padding: 8px 12px !important;
956 height: 36px !important;
957 }
958
959 .wrap .tablenav input[type="submit"] {
960 padding: 8px 16px !important;
961 height: 36px !important;
962 }
963 }
964
965 @media (max-width: 1200px) {
966 .wrap .tablenav {
967 overflow-x: auto !important;
968 overflow-y: hidden !important;
969 padding: 14px 18px !important;
970 }
971
972 .wrap .tablenav select {
973 width: 100px !important;
974 padding: 6px 10px !important;
975 height: 32px !important;
976 }
977
978 .wrap .tablenav input[type="search"],
979 .wrap .tablenav input[type="text"] {
980 width: 180px !important;
981 padding: 6px 10px !important;
982 height: 32px !important;
983 }
984
985 .wrap .tablenav input[type="submit"] {
986 padding: 6px 12px !important;
987 height: 32px !important;
988 }
989 }
990
991 @media (max-width: 768px) {
992 .wrap .tablenav {
993 flex-direction: column !important;
994 align-items: stretch !important;
995 gap: 12px !important;
996 }
997
998 .wrap .tablenav .alignleft,
999 .wrap .tablenav .alignright {
1000 justify-content: center !important;
1001 margin: 0 !important;
1002 }
1003
1004 .wrap .tablenav select,
1005 .wrap .tablenav input[type="search"],
1006 .wrap .tablenav input[type="text"],
1007 .wrap .tablenav input[type="submit"] {
1008 width: 100% !important;
1009 max-width: none !important;
1010 min-width: auto !important;
1011 }
1012 }
1013
1014 /* Description text styling */
1015 .wrap .description,
1016 .wrap p.description {
1017 color: var(--dashboard-text-secondary, #9ca3af) !important;
1018 font-size: 13px !important;
1019 line-height: 1.5 !important;
1020 }
1021 </style>
1022
1023 <div class="wrap">
1024 <a href="<?php echo esc_url(admin_url('admin.php?page=searchatlas-redirections&action=add')); ?>" class="page-title-action">Add New Redirect</a>
1025
1026 <!-- Import from SEO Plugins Button -->
1027 <a href="<?php echo esc_url(admin_url('admin.php?page=metasync-import-external&tab=redirections')); ?>" class="page-title-action" style="background: #10b981 !important; border-color: #10b981 !important;">
1028 <span>📥</span> Import from SEO Plugins
1029 </a>
1030 <!-- Forms are NOT created automatically, so you need to wrap the table in one to use features like bulk actions -->
1031 <form id="redirection-form" method="post" action="">
1032 <?php wp_nonce_field('metasync_redirection_form', 'metasync_redirection_nonce'); ?>
1033 <?php include "metasync-add-redirection.php";
1034 $request_data = metasync_sanitize_input_array($_REQUEST); ?>
1035 <!-- For plugins, we also need to ensure that the form posts back to our current page -->
1036 <input type="hidden" name="page" value="<?php echo esc_attr($request_data['page']) ?>" />
1037
1038 <!-- Search and Filter Controls -->
1039 <div class="tablenav top">
1040
1041 <div class="alignleft actions">
1042 <label for="status-filter" class="screen-reader-text">Filter by status</label>
1043 <select name="status_filter" id="status-filter">
1044 <option value="">All Statuses</option>
1045 <option value="active" <?php selected(isset($_REQUEST['status_filter']) ? $_REQUEST['status_filter'] : '', 'active'); ?>>Active</option>
1046 <option value="inactive" <?php selected(isset($_REQUEST['status_filter']) ? $_REQUEST['status_filter'] : '', 'inactive'); ?>>Inactive</option>
1047 </select>
1048
1049 <label for="pattern-filter" class="screen-reader-text">Filter by pattern type</label>
1050 <select name="pattern_filter" id="pattern-filter">
1051 <option value="">All Patterns</option>
1052 <option value="exact" <?php selected(isset($_REQUEST['pattern_filter']) ? $_REQUEST['pattern_filter'] : '', 'exact'); ?>>Exact Match</option>
1053 <option value="start" <?php selected(isset($_REQUEST['pattern_filter']) ? $_REQUEST['pattern_filter'] : '', 'start'); ?>>Starts With</option>
1054 <option value="end" <?php selected(isset($_REQUEST['pattern_filter']) ? $_REQUEST['pattern_filter'] : '', 'end'); ?>>Ends With</option>
1055 <option value="wildcard" <?php selected(isset($_REQUEST['pattern_filter']) ? $_REQUEST['pattern_filter'] : '', 'wildcard'); ?>>Wildcard (*)</option>
1056 <option value="regex" <?php selected(isset($_REQUEST['pattern_filter']) ? $_REQUEST['pattern_filter'] : '', 'regex'); ?>>Regex Pattern</option>
1057 </select>
1058
1059 <label for="http-code-filter" class="screen-reader-text">Filter by HTTP code</label>
1060 <select name="http_code_filter" id="http-code-filter">
1061 <option value="">All Types</option>
1062 <option value="301" <?php selected(isset($_REQUEST['http_code_filter']) ? $_REQUEST['http_code_filter'] : '', '301'); ?>>301 Permanent</option>
1063 <option value="302" <?php selected(isset($_REQUEST['http_code_filter']) ? $_REQUEST['http_code_filter'] : '', '302'); ?>>302 Temporary</option>
1064 <option value="307" <?php selected(isset($_REQUEST['http_code_filter']) ? $_REQUEST['http_code_filter'] : '', '307'); ?>>307 Temporary</option>
1065 <option value="410" <?php selected(isset($_REQUEST['http_code_filter']) ? $_REQUEST['http_code_filter'] : '', '410'); ?>>410 Gone</option>
1066 <option value="451" <?php selected(isset($_REQUEST['http_code_filter']) ? $_REQUEST['http_code_filter'] : '', '451'); ?>>451 Unavailable</option>
1067 </select>
1068
1069 <input type="submit" name="filter_action" id="post-query-submit" class="button" value="Filter">
1070 </div>
1071
1072 <div class="alignright">
1073 <p class="search-box">
1074 <label class="screen-reader-text" for="post-search-input">Search Redirections:</label>
1075 <input type="search" id="post-search-input" name="s" value="<?php echo esc_attr(isset($_REQUEST['s']) ? $_REQUEST['s'] : ''); ?>" placeholder="Search redirections...">
1076 <input type="submit" id="search-submit" class="button" value="Search">
1077 </p>
1078 </div>
1079 </div>
1080
1081 <!-- Now we can render the completed list table -->
1082 <?php $MetasyncRedirection->display() ?>
1083 </form>
1084
1085 </div>
1086
1087