PluginProbe
404 Solution / 4.2.0
404 Solution v4.2.0
4.3.5 4.3.4 4.3.3 4.3.2 4.3.1 4.3.0 4.2.0 4.1.19 4.1.18 4.1.17 4.1.16 4.1.15 4.1.13 4.1.12 4.1.11 4.1.10 4.1.9 4.1.8 4.1.7 4.1.6 4.1.5 4.1.4 4.1.3 trunk 2.30.0 All 109 releases
404-solution / includes / html / 404solutionStyles.css

404solutionStyles.css in 404 Solution 4.2.0, at includes/html/404solutionStyles.css

4,116 lines 94.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /* ============================================
2 Container & Page Layout
3 ============================================ */
4
5 .abj404-container {
6 max-width: none;
7 margin: 0;
8 background: var(--abj404-surface, #fff);
9 border-radius: 8px;
10 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
11 }
12
13 .abj404-page-header {
14 padding: 24px 32px;
15 border-bottom: 1px solid var(--abj404-border, #e0e0e0);
16 display: flex;
17 justify-content: space-between;
18 align-items: center;
19 flex-wrap: wrap;
20 gap: 16px;
21 }
22
23 .abj404-page-header h1 {
24 font-size: 24px;
25 font-weight: 600;
26 color: var(--abj404-text, #1d2327);
27 margin: 0;
28 }
29
30 .abj404-settings-content {
31 padding: 32px;
32 }
33
34 /* ============================================
35 Card System
36 ============================================ */
37
38 .abj404-card {
39 background: var(--abj404-card-bg, #f9f9f9);
40 border: 1px solid var(--abj404-border, #e5e5e5);
41 border-radius: 8px;
42 padding: 0;
43 margin-bottom: 24px;
44 transition: box-shadow 0.3s ease;
45 }
46
47 .abj404-card:hover {
48 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
49 }
50
51 .abj404-card:last-child {
52 margin-bottom: 0;
53 }
54
55 /* Cards rendered outside the main form (Engine Profiles, GSC) are direct children
56 of the settings container. Give them top margin to match the 24px gap between cards. */
57 .abj404-settings-content > .abj404-card {
58 margin-top: 24px;
59 }
60
61 /* Flow layout for stats page - cards in a flexible grid */
62 .abj404-flow-layout {
63 display: grid;
64 grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
65 gap: 20px;
66 align-items: start;
67 margin-bottom: 24px;
68 }
69
70 .abj404-flow-layout .abj404-card {
71 margin-bottom: 0;
72 }
73
74 /* For smaller cards that should stay compact */
75 .abj404-flow-layout .abj404-card-compact {
76 max-width: 400px;
77 }
78
79 .abj404-card-header {
80 display: flex;
81 justify-content: space-between;
82 align-items: center;
83 padding: 20px 24px;
84 cursor: pointer;
85 user-select: none;
86 border-bottom: 1px solid transparent;
87 transition: border-color 0.2s ease;
88 }
89
90 .abj404-card-header:hover {
91 background: var(--abj404-card-header-hover, rgba(0, 0, 0, 0.02));
92 }
93
94 .abj404-card.expanded .abj404-card-header {
95 border-bottom-color: var(--abj404-border, #e5e5e5);
96 }
97
98 .abj404-card-title {
99 font-size: 18px;
100 font-weight: 600;
101 color: var(--abj404-text, #1d2327);
102 display: flex;
103 align-items: center;
104 gap: 10px;
105 margin: 0;
106 }
107
108 .abj404-card-icon {
109 width: 22px;
110 height: 22px;
111 color: var(--abj404-accent, #2271b1);
112 flex-shrink: 0;
113 }
114
115 .abj404-collapse-icon {
116 color: var(--abj404-text-muted, #787c82);
117 transition: transform 0.3s ease;
118 flex-shrink: 0;
119 }
120
121 .abj404-card.expanded .abj404-collapse-icon {
122 transform: rotate(180deg);
123 }
124
125 .abj404-card-content {
126 padding: 24px;
127 display: none;
128 }
129
130 .abj404-card.expanded .abj404-card-content {
131 display: block;
132 }
133
134 /* ============================================
135 Info Badge
136 ============================================ */
137
138 .abj404-info-badge {
139 display: inline-block;
140 background: var(--abj404-info-bg, #e7f3ff);
141 color: var(--abj404-info-text, #0c5a99);
142 padding: 4px 10px;
143 border-radius: 12px;
144 font-size: 12px;
145 font-weight: 500;
146 margin-left: 8px;
147 }
148
149 /* ============================================
150 Warning & Danger Boxes
151 ============================================ */
152
153 .abj404-warning-box {
154 background: var(--abj404-warning-bg, #fff8e5);
155 border-left: 4px solid var(--abj404-warning-border, #f0b429);
156 padding: 12px 16px;
157 border-radius: 4px;
158 margin-top: 12px;
159 font-size: 13px;
160 color: var(--abj404-warning-text, #614200);
161 }
162
163 .abj404-danger-box {
164 background: var(--abj404-danger-bg, #fcf0f1);
165 border-left: 4px solid var(--abj404-danger-border, #d63638);
166 padding: 12px 16px;
167 border-radius: 4px;
168 margin-top: 12px;
169 font-size: 13px;
170 color: var(--abj404-danger-text, #8a2424);
171 }
172
173 .abj404-warning-box strong,
174 .abj404-danger-box strong {
175 display: inline;
176 }
177
178 /* ============================================
179 Sticky Save Bar
180 ============================================ */
181
182 .abj404-sticky-save-bar {
183 position: sticky;
184 bottom: 0;
185 background: var(--abj404-surface, #fff);
186 border-top: 1px solid var(--abj404-border, #e0e0e0);
187 padding: 16px 32px;
188 display: flex;
189 justify-content: space-between;
190 align-items: center;
191 box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.05);
192 margin: 32px -32px -32px -32px;
193 border-radius: 0 0 8px 8px;
194 z-index: 10;
195 }
196
197 .abj404-save-bar-status {
198 color: var(--abj404-text-muted, #646970);
199 font-size: 13px;
200 }
201
202 .abj404-save-bar-actions {
203 display: flex;
204 gap: 12px;
205 }
206
207 /* ============================================
208 Success Toast Notification
209 ============================================ */
210
211 .abj404-toast {
212 background: var(--abj404-success, #00a32a);
213 color: #fff;
214 padding: 12px 20px;
215 position: fixed;
216 top: 50px;
217 right: 32px;
218 border-radius: 4px;
219 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
220 z-index: 999999;
221 display: none;
222 animation: abj404-slideIn 0.3s ease;
223 }
224
225 .abj404-toast.show {
226 display: block;
227 }
228
229 .abj404-toast.error {
230 background: var(--abj404-danger-border, #d63638);
231 }
232
233 @keyframes abj404-slideIn {
234 from {
235 transform: translateX(100%);
236 opacity: 0;
237 }
238 to {
239 transform: translateX(0);
240 opacity: 1;
241 }
242 }
243
244 /* ============================================
245 Form Elements (Shared)
246 ============================================ */
247
248 .abj404-form-group {
249 margin-bottom: 24px;
250 }
251
252 .abj404-form-group:last-child {
253 margin-bottom: 0;
254 }
255
256 .abj404-form-label {
257 display: block;
258 font-weight: 600;
259 color: var(--abj404-text, #1d2327);
260 margin-bottom: 8px;
261 font-size: 14px;
262 }
263
264 .abj404-form-input,
265 .abj404-form-select {
266 width: 100%;
267 max-width: 500px;
268 padding: 10px 12px;
269 border: 1px solid var(--abj404-border, #8c8f94);
270 border-radius: 4px;
271 font-size: 14px;
272 background: var(--abj404-surface, #fff);
273 color: var(--abj404-text, #1d2327);
274 transition: border-color 0.2s, box-shadow 0.2s;
275 }
276
277 .abj404-form-input:focus,
278 .abj404-form-select:focus {
279 outline: none;
280 border-color: var(--abj404-accent, #2271b1);
281 box-shadow: 0 0 0 1px var(--abj404-accent, #2271b1);
282 }
283
284 .abj404-form-input-small {
285 max-width: 120px;
286 }
287
288 .abj404-form-help {
289 color: var(--abj404-text-muted, #646970);
290 font-size: 13px;
291 margin-top: 6px;
292 line-height: 1.5;
293 }
294
295 .abj404-checkbox-group {
296 display: flex;
297 align-items: center;
298 gap: 10px;
299 }
300
301 .abj404-checkbox-input {
302 width: 18px;
303 height: 18px;
304 cursor: pointer;
305 accent-color: var(--abj404-accent, #2271b1);
306 }
307
308 .abj404-checkbox-label {
309 font-weight: 500;
310 cursor: pointer;
311 font-size: 14px;
312 color: var(--abj404-text, #1d2327);
313 }
314
315 .abj404-inline-fields {
316 display: flex;
317 align-items: center;
318 gap: 12px;
319 flex-wrap: wrap;
320 }
321
322 .abj404-inline-fields .abj404-form-input {
323 max-width: 200px;
324 }
325
326 .abj404-field-row {
327 display: grid;
328 grid-template-columns: 1fr 1fr;
329 gap: 20px;
330 }
331
332 @media (max-width: 768px) {
333 .abj404-field-row {
334 grid-template-columns: 1fr;
335 }
336 }
337
338 /* ============================================
339 Button Styles
340 ============================================ */
341
342 .abj404-btn {
343 padding: 10px 24px;
344 border: none;
345 border-radius: 4px;
346 font-weight: 500;
347 cursor: pointer;
348 transition: all 0.2s;
349 font-size: 14px;
350 text-decoration: none;
351 display: inline-block;
352 }
353
354 .abj404-btn-primary {
355 background: var(--abj404-accent, #2271b1);
356 color: #fff;
357 }
358
359 .abj404-btn-primary:hover {
360 background: var(--abj404-accent-hover, #135e96);
361 color: #fff;
362 }
363
364 .abj404-btn-secondary {
365 background: var(--abj404-surface, #fff);
366 color: var(--abj404-accent, #2271b1);
367 border: 1px solid var(--abj404-accent, #2271b1);
368 }
369
370 .abj404-btn-secondary:hover {
371 background: var(--abj404-bg, #f6f7f7);
372 }
373
374 /* ============================================
375 Header Row with Inline Mode Toggle
376 ============================================ */
377
378 .abj404-header-row {
379 display: flex;
380 align-items: center;
381 justify-content: space-between;
382 flex-wrap: wrap;
383 gap: 12px;
384 }
385
386 .abj404-header-row h2 {
387 margin: 0;
388 flex-shrink: 0;
389 order: 1;
390 }
391
392 /* Header controls - groups mode toggle and expand button */
393 .abj404-header-controls {
394 display: flex;
395 align-items: center;
396 gap: 12px;
397 flex-wrap: wrap;
398 margin-left: auto;
399 order: 2;
400 }
401
402 /* Notices moved into header-row by WordPress JS - force to own row */
403 .abj404-header-row .notice {
404 order: 3;
405 flex-basis: 100%;
406 margin: 8px 0 0 0;
407 }
408
409 /* Review notice in plugin header areas */
410 .abj404-review-notice {
411 box-sizing: border-box;
412 position: relative;
413 width: 100%;
414 margin: 8px 0 0 0;
415 padding-right: 40px;
416 }
417
418 .abj404-review-notice p {
419 margin-right: 4px;
420 }
421
422 .abj404-review-notice-close {
423 position: absolute;
424 top: 8px;
425 right: 10px;
426 line-height: 1;
427 font-size: 18px;
428 font-weight: 700;
429 color: #6b7280;
430 text-decoration: none;
431 }
432
433 .abj404-review-notice-close:hover,
434 .abj404-review-notice-close:focus {
435 color: #111827;
436 text-decoration: none;
437 }
438
439 .abj404-header-controls #abj404-expand-collapse-all {
440 white-space: nowrap;
441 }
442
443 /* ============================================
444 Simple/Advanced Mode Toggle
445 ============================================ */
446
447 .abj404-mode-toggle {
448 background: var(--abj404-surface, #fff);
449 border: 1px solid var(--abj404-border, #c3c4c7);
450 border-radius: 8px;
451 padding: 16px 20px;
452 margin-bottom: 24px;
453 }
454
455 /* Inline (compact) mode toggle in header */
456 .abj404-mode-toggle.abj404-mode-toggle-inline {
457 background: transparent;
458 border: none;
459 border-radius: 0;
460 padding: 0;
461 margin: 0;
462 }
463
464 .abj404-mode-toggle-inline .abj404-mode-toggle-buttons {
465 background: var(--abj404-bg, #f0f0f1);
466 border-radius: 4px;
467 padding: 2px;
468 gap: 2px;
469 }
470
471 .abj404-mode-toggle-inline .abj404-mode-btn {
472 padding: 6px 12px;
473 font-size: 13px;
474 gap: 0;
475 }
476
477 .abj404-mode-toggle-inline .abj404-mode-btn-icon {
478 display: none;
479 }
480
481 .abj404-mode-toggle-buttons {
482 display: inline-flex;
483 background: var(--abj404-bg, #f0f0f1);
484 border-radius: 6px;
485 padding: 4px;
486 gap: 4px;
487 }
488
489 .abj404-mode-btn {
490 display: inline-flex;
491 align-items: center;
492 gap: 8px;
493 padding: 10px 20px;
494 border: none;
495 border-radius: 4px;
496 background: transparent;
497 color: var(--abj404-text-muted, #646970);
498 font-size: 14px;
499 font-weight: 500;
500 cursor: pointer;
501 transition: all 0.2s ease;
502 }
503
504 .abj404-mode-btn:hover {
505 background: var(--abj404-surface, #fff);
506 color: var(--abj404-text, #1d2327);
507 }
508
509 .abj404-mode-btn.active {
510 background: var(--abj404-accent, #2271b1);
511 color: #fff;
512 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
513 }
514
515 .abj404-mode-btn.active:hover {
516 background: var(--abj404-accent-hover, #135e96);
517 color: #fff;
518 }
519
520 .abj404-mode-btn.loading {
521 opacity: 0.7;
522 cursor: wait;
523 }
524
525 .abj404-mode-btn-icon {
526 display: flex;
527 align-items: center;
528 }
529
530 .abj404-mode-btn-icon svg {
531 width: 16px;
532 height: 16px;
533 }
534
535 .abj404-mode-description {
536 margin: 12px 0 0 0;
537 color: var(--abj404-text-muted, #646970);
538 font-size: 13px;
539 }
540
541 /* ============================================
542 Simple Mode Options
543 ============================================ */
544
545 .abj404-simple-options {
546 max-width: 100%;
547 }
548
549 /* Destination field styling for the search input */
550 .abj404-dest-field .add_a_redirect_label {
551 display: none;
552 }
553
554 .abj404-dest-field #redirect_to_user_field {
555 width: 100%;
556 max-width: 400px;
557 padding: 8px 12px;
558 border: 1px solid var(--abj404-border, #8c8f94);
559 border-radius: 4px;
560 font-size: 14px;
561 background: var(--abj404-surface, #fff);
562 color: var(--abj404-text, #1d2327);
563 }
564
565 .abj404-dest-field br {
566 display: none;
567 }
568
569 .abj404-dest-field #redirect_to_user_field_explanation,
570 .abj404-dest-field #redirect_to_user_field_warning {
571 display: block;
572 margin-top: 4px;
573 }
574
575 .abj404-simple-section {
576 background: var(--abj404-surface, #fff);
577 border: 1px solid var(--abj404-border, #c3c4c7);
578 border-radius: 8px;
579 padding: 24px;
580 margin-bottom: 20px;
581 }
582
583 .abj404-simple-section h3 {
584 margin: 0 0 20px 0;
585 padding: 0 0 12px 0;
586 border-bottom: 1px solid var(--abj404-border, #c3c4c7);
587 font-size: 15px;
588 font-weight: 600;
589 color: var(--abj404-text, #1d2327);
590 }
591
592 .abj404-simple-field {
593 margin-bottom: 20px;
594 }
595
596 .abj404-simple-field:last-child {
597 margin-bottom: 0;
598 }
599
600 .abj404-simple-field > label {
601 display: block;
602 margin-bottom: 6px;
603 font-weight: 500;
604 color: var(--abj404-text, #1d2327);
605 }
606
607 .abj404-simple-field > label input[type="checkbox"] {
608 margin-right: 8px;
609 }
610
611 .abj404-simple-field input[type="text"],
612 .abj404-simple-field select {
613 width: 100%;
614 max-width: 300px;
615 padding: 8px 12px;
616 border: 1px solid var(--abj404-border, #8c8f94);
617 border-radius: 4px;
618 font-size: 14px;
619 background: var(--abj404-surface, #fff);
620 color: var(--abj404-text, #1d2327);
621 }
622
623 .abj404-simple-field input[type="text"]:focus,
624 .abj404-simple-field select:focus {
625 border-color: var(--abj404-accent, #2271b1);
626 box-shadow: 0 0 0 1px var(--abj404-accent, #2271b1);
627 outline: none;
628 }
629
630 .abj404-input-with-suffix {
631 display: inline-flex;
632 align-items: center;
633 gap: 8px;
634 }
635
636 .abj404-input-with-suffix input[type="text"] {
637 width: 80px;
638 text-align: right;
639 }
640
641 .abj404-input-suffix {
642 color: var(--abj404-text-muted, #646970);
643 font-size: 14px;
644 }
645
646 .abj404-field-description {
647 margin: 6px 0 0 0;
648 color: var(--abj404-text-muted, #646970);
649 font-size: 13px;
650 }
651
652 .abj404-simple-actions {
653 margin-top: 24px;
654 padding-top: 20px;
655 border-top: 1px solid var(--abj404-border, #c3c4c7);
656 }
657
658 .abj404-simple-actions .button-large {
659 padding: 8px 24px;
660 font-size: 14px;
661 }
662
663 /* Advanced Mode Hint */
664 .abj404-mode-hint {
665 display: flex;
666 align-items: center;
667 gap: 12px;
668 padding: 16px 20px;
669 background: var(--abj404-bg, #f6f7f7);
670 border: 1px solid var(--abj404-border, #c3c4c7);
671 border-radius: 8px;
672 margin-top: 24px;
673 }
674
675 .abj404-mode-hint-icon {
676 flex-shrink: 0;
677 color: var(--abj404-accent, #2271b1);
678 }
679
680 .abj404-mode-hint-icon svg {
681 display: block;
682 }
683
684 .abj404-mode-hint-text {
685 color: var(--abj404-text-muted, #646970);
686 font-size: 14px;
687 }
688
689 .abj404-mode-hint-text a,
690 a.abj404-switch-to-advanced {
691 color: var(--abj404-accent, #2271b1);
692 text-decoration: none;
693 font-weight: 500;
694 }
695
696 .abj404-mode-hint-text a:hover,
697 a.abj404-switch-to-advanced:hover {
698 color: var(--abj404-accent-hover, #135e96);
699 text-decoration: underline;
700 }
701
702 /* ============================================
703 Original Styles Below
704 ============================================ */
705
706 .destination-does-not-exist {
707 background-color: #ff000045;
708 }
709
710 .exclude-pages-page-type {
711 font-style: italic;
712 }
713 .exclude-pages-cell {
714 vertical-align: top;
715 }
716
717 .closeable-ul {
718 box-sizing: border-box;
719 max-height: 12em;
720 overflow: auto;
721 }
722 /* Style the list (remove margins and bullets, etc) */
723 .closeable-ul {
724 list-style-type: none;
725 padding: 0;
726 margin: 0;
727 }
728
729 /* Style the list items */
730 .closeable-ul li {
731 border: 1px solid #ddd;
732 margin-top: -1px; /* Prevent double borders */
733 background-color: #f6f6f6;
734 text-decoration: none;
735 font-size: 1.2em;
736 color: black;
737 display: block;
738 position: relative;
739 }
740
741 /* Add a light grey background color on hover */
742 .closeable-ul li:hover {
743 background-color: #eee;
744 }
745
746 /* Style the close button (span) */
747 .closeable-ul .close {
748 background: #eee;
749 cursor: pointer;
750 position: absolute;
751 top: 50%;
752 right: 0%;
753 padding: 0px 16px;
754 transform: translate(0%, -50%);
755 }
756
757 .closeable-ul .close:hover {background: #bbb;}
758
759
760 .hide-when-true {
761 display: none;
762 }
763
764 /* Make the pagination links easier to click for steveraven */
765 .pagination-link {
766 border-radius: 0 3px 3px 0;
767 border-style: solid;
768 border-width: 1px;
769 box-sizing: border-box;
770 padding-bottom: 4px;
771 padding-left: 8px;
772 padding-right: 8px;
773 padding-top: 3px;
774 text-decoration-line: none;
775 }
776
777 .displaying-num {
778 padding-left: 10px;
779 }
780
781 /* This is for the redirect page search dropdown. */
782 .indent-depth-0.ui-menu-item {
783 padding-left: 10px;
784 width: -moz-available; /* WebKit-based browsers will ignore this. */
785 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
786 width: stretch;
787 }
788 .indent-depth-1.ui-menu-item {
789 padding-left: 20px;
790 width: -moz-available; /* WebKit-based browsers will ignore this. */
791 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
792 width: stretch;
793 }
794 .indent-depth-2.ui-menu-item {
795 padding-left: 30px;
796 width: -moz-available; /* WebKit-based browsers will ignore this. */
797 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
798 width: stretch;
799 }
800 .indent-depth-3.ui-menu-item {
801 padding-left: 40px;
802 width: -moz-available; /* WebKit-based browsers will ignore this. */
803 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
804 width: stretch;
805 }
806 .indent-depth-4.ui-menu-item {
807 padding-left: 50px;
808 width: -moz-available; /* WebKit-based browsers will ignore this. */
809 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
810 width: stretch;
811 }
812 .indent-depth-5.ui-menu-item {
813 padding-left: 60px;
814 width: -moz-available; /* WebKit-based browsers will ignore this. */
815 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
816 width: stretch;
817 }
818 .indent-depth-6.ui-menu-item {
819 padding-left: 70px;
820 width: -moz-available; /* WebKit-based browsers will ignore this. */
821 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
822 width: stretch;
823 }
824 .indent-depth-7.ui-menu-item {
825 padding-left: 80px;
826 width: -moz-available; /* WebKit-based browsers will ignore this. */
827 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
828 width: stretch;
829 }
830 .indent-depth-8.ui-menu-item {
831 padding-left: 90px;
832 width: -moz-available; /* WebKit-based browsers will ignore this. */
833 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
834 width: stretch;
835 }
836 .indent-depth-9.ui-menu-item {
837 padding-left: 100px;
838 width: -moz-available; /* WebKit-based browsers will ignore this. */
839 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
840 width: stretch;
841 }
842 .ui-autocomplete li {
843 font-family: Arial,Helvetica,sans-serif;
844 font-size: 1em;
845 padding: 0px 10px;
846 max-height: 400px;
847 overflow-y: auto;
848 /* prevent horizontal scrollbar */
849 overflow-x: hidden;
850 padding-left: 0px;
851 }
852 ul .ui-autocomplete-category {
853 font-weight: bold;
854 margin: .8em 0 .2em;
855 line-height: 1.5;
856
857 /** custom **/
858 display: flex;
859 color: gray;
860 font-weight: normal;
861 padding-left: 0px;
862 }
863
864 /* This hides the last empty element when the data is truncated and the final element is added only
865 so that the final category will be added. */
866 .hide-me-please {
867 display: none;
868 }
869 ul .ui-autocomplete-category.data-overflow-category {
870 color: black;
871 font-weight: bold;
872 font-style: italic;
873 }
874
875 /* -- - - - - -- - - - - - -- - - - - - - - - - - - - - -*/
876 .lefty-tooltip {
877 position: relative;
878 border-bottom: 1px dotted var(--abj404-text-muted, #646970);
879 cursor: help;
880 }
881
882 .abj404-header-tooltip.lefty-tooltip {
883 border-bottom: none;
884 display: inline-flex;
885 align-items: center;
886 justify-content: center;
887 width: 16px;
888 height: 16px;
889 margin-left: 6px;
890 border: 1px solid var(--abj404-border, #dcdcde);
891 border-radius: 999px;
892 color: var(--abj404-text-muted, #646970);
893 background: #fff;
894 vertical-align: middle;
895 }
896
897 .abj404-header-tooltip-icon {
898 font-size: 11px;
899 font-weight: 600;
900 line-height: 1;
901 }
902
903 .abj404-header-tooltip.lefty-tooltip:hover {
904 color: var(--abj404-accent, #2271b1);
905 border-color: var(--abj404-accent, #2271b1);
906 }
907
908 .abj404-header-tooltip .lefty-tooltiptext {
909 top: calc(100% + 6px);
910 }
911
912 .lefty-tooltip .lefty-tooltiptext {
913 visibility: hidden;
914 opacity: 0;
915 background-color: var(--abj404-text, #1d2327);
916 color: #fff;
917 text-align: left;
918 border-radius: 6px;
919 padding: 10px 12px;
920 font-size: 13px;
921 line-height: 1.5;
922 font-weight: normal;
923 white-space: normal;
924 word-wrap: break-word;
925 text-transform: none;
926
927 /* Position the tooltip */
928 position: absolute;
929 width: max-content;
930 max-width: 300px;
931 min-width: 150px;
932 top: calc(100% - 8px);
933 left: 0;
934 transform: none;
935 z-index: 1000;
936 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
937
938 transition: opacity 0.15s ease-in-out, visibility 0.15s ease-in-out;
939 }
940
941 /* No arrow - tooltip appears below without pointer */
942 .lefty-tooltip .lefty-tooltiptext::before {
943 display: none;
944 }
945
946 .lefty-tooltip:hover .lefty-tooltiptext {
947 visibility: visible;
948 opacity: 1;
949 }
950
951 /* Tooltips in last columns - align right to prevent overflow */
952 th:nth-last-child(-n+3) .lefty-tooltiptext {
953 left: auto;
954 right: 0;
955 }
956 /* -- - - - - -- - - - - - -- - - - - - - - - - - - - - -*/
957
958 /* Include a space after the apply button so that the Trash button isn't right next to it. */
959 #captured_404s_bulk_apply {
960 margin-right: 10px;
961 }
962
963 /* -- - - - - -- - - - - - -- - - - - - - - - - - - - - -*/
964 .ui-autocomplete {
965 max-height: 400px;
966 overflow-y: auto;
967 /* prevent horizontal scrollbar */
968 overflow-x: hidden;
969 }
970
971 /* ============================================
972 Options Page Accordion
973 ============================================ */
974
975 /* Accordion controls (Expand All button and Save Settings) */
976 .abj404-accordion-controls {
977 display: flex;
978 align-items: center;
979 justify-content: space-between;
980 gap: 12px;
981 margin: 0 0 20px 0;
982 padding: 12px 0;
983 }
984
985 /* Make accordion controls sticky on larger screens */
986 @media (min-width: 783px) {
987 .abj404-accordion-controls {
988 position: sticky;
989 top: 75px;
990 z-index: 100;
991 background: #f0f0f1;
992 padding: 12px 16px;
993 margin: 0 -16px 20px -16px;
994 box-shadow: 0 2px 4px rgba(0,0,0,0.05);
995 }
996
997 /* Dark theme background for sticky controls */
998 html[data-theme="neon"] .abj404-accordion-controls,
999 html[data-theme="obsidian"] .abj404-accordion-controls {
1000 background: var(--abj-bg-primary);
1001 }
1002 }
1003
1004 /* Accordion section container */
1005 .abj404-accordion-section {
1006 margin-bottom: 16px;
1007 }
1008
1009 /* Accordion header (clickable) */
1010 .abj404-accordion-header {
1011 display: flex;
1012 align-items: center;
1013 justify-content: space-between;
1014 margin: 0;
1015 padding: 14px 16px;
1016 background: var(--abj404-surface, #fff);
1017 border: 1px solid var(--abj404-border, #ccd0d4);
1018 border-radius: 4px;
1019 cursor: pointer;
1020 transition: all 0.2s ease;
1021 user-select: none;
1022 }
1023
1024 .abj404-accordion-header:hover {
1025 background: var(--abj404-surface-hover, #f6f7f7);
1026 border-color: var(--abj404-primary, #2271b1);
1027 }
1028
1029 .abj404-accordion-header:focus-visible {
1030 outline: 2px solid var(--abj404-primary, #2271b1);
1031 outline-offset: 2px;
1032 }
1033
1034 /* Accordion header text */
1035 .abj404-accordion-header > span:first-child {
1036 font-size: 14px;
1037 font-weight: 600;
1038 color: var(--abj404-text, #2c3338);
1039 }
1040
1041 /* Accordion toggle arrow */
1042 .abj404-accordion-toggle {
1043 font-size: 12px;
1044 color: var(--abj404-text-muted, #646970);
1045 transition: transform 0.3s ease;
1046 display: inline-block;
1047 }
1048
1049 /* Rotate arrow when expanded */
1050 .abj404-accordion-header[aria-expanded="true"] .abj404-accordion-toggle {
1051 transform: rotate(180deg);
1052 }
1053
1054 /* Accordion content */
1055 .abj404-accordion-content {
1056 margin-top: -1px; /* Overlap border with header */
1057 }
1058
1059 .abj404-accordion-content .postbox {
1060 border-top-left-radius: 0;
1061 border-top-right-radius: 0;
1062 }
1063
1064 /* Mobile adjustments */
1065 @media (max-width: 782px) {
1066 .abj404-accordion-header {
1067 padding: 12px 14px;
1068 }
1069
1070 .abj404-accordion-controls {
1071 flex-wrap: wrap;
1072 }
1073
1074 .abj404-accordion-controls input[type="submit"] {
1075 width: 100%;
1076 }
1077 }
1078
1079 /* ============================================
1080 Save Loading Overlay
1081 ============================================ */
1082
1083 /* Overlay backdrop */
1084 .abj404-save-overlay {
1085 position: fixed;
1086 top: 0;
1087 left: 0;
1088 width: 100%;
1089 height: 100%;
1090 background: rgba(0, 0, 0, 0.5);
1091 z-index: 999999;
1092 display: flex;
1093 align-items: center;
1094 justify-content: center;
1095 }
1096
1097 /* Overlay content box */
1098 .abj404-save-overlay-content {
1099 background: var(--abj404-surface, #fff);
1100 padding: 32px 48px;
1101 border-radius: 8px;
1102 box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
1103 text-align: center;
1104 max-width: 400px;
1105 }
1106
1107 /* WordPress-style spinner */
1108 .abj404-spinner {
1109 width: 40px;
1110 height: 40px;
1111 margin: 0 auto 16px;
1112 border: 4px solid var(--abj404-border, #ddd);
1113 border-top-color: var(--abj404-accent, #2271b1);
1114 border-radius: 50%;
1115 animation: abj404-spin 0.8s linear infinite;
1116 }
1117
1118 @keyframes abj404-spin {
1119 to { transform: rotate(360deg); }
1120 }
1121
1122 /* Save message text */
1123 .abj404-save-message {
1124 margin: 0;
1125 font-size: 16px;
1126 color: var(--abj404-text, #2c3338);
1127 font-weight: 500;
1128 }
1129
1130 /* Error state */
1131 .abj404-save-overlay.error .abj404-spinner {
1132 display: none;
1133 }
1134
1135 .abj404-save-overlay.error .abj404-save-overlay-content {
1136 border-left: 4px solid #d63638;
1137 }
1138
1139 .abj404-save-overlay.error .abj404-save-message {
1140 color: #d63638;
1141 }
1142
1143 /* ============================================
1144 Navigation Tabs (Modern Design)
1145 ============================================ */
1146
1147 /* Add spacing for fixed tabs so they don't cover page header */
1148 .wrap {
1149 padding-top: 50px; /* Space for fixed tab navigation */
1150 }
1151
1152 /* Tab navigation container */
1153 .abj404-tab-navigation {
1154 position: fixed;
1155 top: var(--admin-bar-height, 32px);
1156 left: 160px; /* WordPress admin menu width */
1157 right: 0;
1158 z-index: 101;
1159 background: #fff;
1160 border-bottom: 1px solid #e0e0e0;
1161 padding: 0 20px;
1162 margin: 0;
1163 display: flex;
1164 gap: 4px;
1165 transition: transform 0.3s ease-in-out;
1166 will-change: transform;
1167 }
1168
1169 /* Hide tabs when scrolling down */
1170 .abj404-tab-navigation.tabs-hidden {
1171 transform: translateY(-100%);
1172 }
1173
1174 /* Individual tab styling */
1175 .abj404-tab {
1176 display: inline-flex;
1177 align-items: center;
1178 gap: 6px;
1179 padding: 14px 18px;
1180 border: none;
1181 background: transparent;
1182 color: #646970;
1183 font-weight: 500;
1184 font-size: 14px;
1185 cursor: pointer;
1186 border-bottom: 3px solid transparent;
1187 text-decoration: none;
1188 transition: all 0.2s ease;
1189 white-space: nowrap;
1190 }
1191
1192 .abj404-tab .dashicons {
1193 font-size: 18px;
1194 width: 18px;
1195 height: 18px;
1196 line-height: 1;
1197 }
1198
1199 .abj404-tab:hover {
1200 color: #2271b1;
1201 background: #f6f7f7;
1202 text-decoration: none;
1203 }
1204
1205 .abj404-tab:focus {
1206 outline: none;
1207 box-shadow: none;
1208 }
1209
1210 .abj404-tab.active {
1211 color: #2271b1;
1212 border-bottom-color: #2271b1;
1213 background: #f6f7f7;
1214 }
1215
1216 .abj404-tab.active .dashicons {
1217 color: #2271b1;
1218 }
1219
1220 /* Plugin branding in tab bar */
1221 .abj404-tab-branding {
1222 margin-left: auto;
1223 padding: 14px 18px;
1224 font-size: 14px;
1225 font-weight: 600;
1226 color: #1d2327;
1227 white-space: nowrap;
1228 display: flex;
1229 align-items: center;
1230 }
1231
1232 /* Mobile admin bar and folded menu */
1233 @media screen and (max-width: 960px) {
1234 .abj404-tab-navigation {
1235 left: 36px; /* Folded menu width */
1236 padding: 0 12px;
1237 }
1238
1239 .abj404-tab {
1240 padding: 12px 14px;
1241 }
1242 }
1243
1244 @media screen and (max-width: 782px) {
1245 .abj404-tab-navigation {
1246 left: 0;
1247 overflow-x: auto;
1248 -webkit-overflow-scrolling: touch;
1249 }
1250
1251 .abj404-tab {
1252 padding: 12px 12px;
1253 font-size: 13px;
1254 }
1255
1256 .abj404-tab .dashicons {
1257 font-size: 16px;
1258 width: 16px;
1259 height: 16px;
1260 }
1261 }
1262
1263 /* Very small screens - hide tab text and branding, show only icons */
1264 @media screen and (max-width: 500px) {
1265 .abj404-tab-text,
1266 .abj404-tab-branding {
1267 display: none;
1268 }
1269
1270 .abj404-tab {
1271 padding: 12px 14px;
1272 }
1273
1274 .abj404-tab .dashicons {
1275 font-size: 20px;
1276 width: 20px;
1277 height: 20px;
1278 }
1279 }
1280
1281 /* Dark theme support */
1282 html[data-theme="neon"] .abj404-tab-navigation,
1283 html[data-theme="obsidian"] .abj404-tab-navigation {
1284 background: var(--abj-bg-primary, #1e1e1e);
1285 border-bottom-color: var(--abj404-border, #3c3c3c);
1286 }
1287
1288 html[data-theme="neon"] .abj404-tab,
1289 html[data-theme="obsidian"] .abj404-tab {
1290 color: var(--abj404-text-muted, #a0a0a0);
1291 }
1292
1293 html[data-theme="neon"] .abj404-tab:hover,
1294 html[data-theme="obsidian"] .abj404-tab:hover {
1295 background: var(--abj404-surface, #2d2d2d);
1296 color: var(--abj404-primary, #3b82f6);
1297 }
1298
1299 html[data-theme="neon"] .abj404-tab.active,
1300 html[data-theme="obsidian"] .abj404-tab.active {
1301 background: var(--abj404-surface, #2d2d2d);
1302 color: var(--abj404-primary, #3b82f6);
1303 border-bottom-color: var(--abj404-primary, #3b82f6);
1304 }
1305
1306 html[data-theme="neon"] .abj404-tab-branding,
1307 html[data-theme="obsidian"] .abj404-tab-branding {
1308 color: var(--abj404-text, #e0e0e0);
1309 }
1310
1311 /* ============================================
1312 Table Page Layout (Redirects, Captured, Logs)
1313 ============================================ */
1314
1315 .abj404-table-page {
1316 background: var(--abj404-surface, #fff);
1317 border-radius: 8px;
1318 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
1319 overflow-x: clip; /* Prevent tooltips from causing horizontal scroll, doesn't break sticky */
1320 }
1321
1322 .abj404-table-header {
1323 padding: 5px 32px 15px;
1324 border-bottom: 1px solid var(--abj404-border, #e0e0e0);
1325 display: flex;
1326 justify-content: space-between;
1327 align-items: center;
1328 flex-wrap: wrap;
1329 gap: 16px;
1330 }
1331
1332 .abj404-table-header h1 {
1333 font-size: 24px;
1334 font-weight: 600;
1335 color: var(--abj404-text, #1d2327);
1336 margin: 0;
1337 }
1338
1339 /* ============================================
1340 Content Tabs (All, Manual, Automatic, Trash)
1341 ============================================ */
1342
1343 .abj404-content-tabs {
1344 background: var(--abj404-bg, #f9f9f9);
1345 border-bottom: 1px solid var(--abj404-border, #e0e0e0);
1346 padding: 0 32px;
1347 display: flex;
1348 gap: 4px;
1349 flex-wrap: wrap;
1350 position: sticky;
1351 top: 32px;
1352 z-index: 12;
1353 }
1354
1355 @media screen and (max-width: 782px) {
1356 .abj404-content-tabs {
1357 top: 46px;
1358 }
1359 }
1360
1361 .abj404-content-tab {
1362 padding: 12px 16px;
1363 border: none;
1364 background: transparent;
1365 color: var(--abj404-text-muted, #646970);
1366 font-weight: 500;
1367 font-size: 14px;
1368 cursor: pointer;
1369 border-bottom: 2px solid transparent;
1370 transition: all 0.2s;
1371 text-decoration: none;
1372 white-space: nowrap;
1373 display: inline-flex;
1374 align-items: center;
1375 gap: 8px;
1376 }
1377
1378 .abj404-content-tab:hover {
1379 color: var(--abj404-accent, #2271b1);
1380 background: var(--abj404-bg, #f0f0f1);
1381 text-decoration: none;
1382 }
1383
1384 .abj404-content-tab.active {
1385 color: var(--abj404-accent, #2271b1);
1386 border-bottom-color: var(--abj404-accent, #2271b1);
1387 background: var(--abj404-surface, #fff);
1388 }
1389
1390 .abj404-content-tab .abj404-tab-count {
1391 display: inline-block;
1392 background: var(--abj404-text-muted, #646970);
1393 color: #fff;
1394 padding: 2px 8px;
1395 border-radius: 10px;
1396 font-size: 12px;
1397 font-weight: 500;
1398 }
1399
1400 .abj404-content-tab.active .abj404-tab-count {
1401 background: var(--abj404-accent, #2271b1);
1402 }
1403
1404 /* ============================================
1405 Filter Bar
1406 ============================================ */
1407
1408 .abj404-filter-bar {
1409 padding: 20px 32px;
1410 background: var(--abj404-bg, #f9f9f9);
1411 border-bottom: 1px solid var(--abj404-border, #e0e0e0);
1412 display: flex;
1413 gap: 12px;
1414 align-items: center;
1415 flex-wrap: wrap;
1416 }
1417
1418 .abj404-search-box {
1419 flex: 1;
1420 min-width: 250px;
1421 max-width: 400px;
1422 position: relative;
1423 }
1424
1425 .abj404-search-box input {
1426 width: 100%;
1427 padding: 10px 12px;
1428 border: 1px solid var(--abj404-border, #8c8f94);
1429 border-radius: 4px;
1430 font-size: 14px;
1431 line-height: normal;
1432 background: var(--abj404-surface, #fff);
1433 color: var(--abj404-text, #1d2327);
1434 }
1435
1436 .abj404-search-box input:focus {
1437 outline: none;
1438 border-color: var(--abj404-accent, #2271b1);
1439 box-shadow: 0 0 0 1px var(--abj404-accent, #2271b1);
1440 }
1441
1442 .abj404-filter-select {
1443 padding: 10px 12px;
1444 border: 1px solid var(--abj404-border, #8c8f94);
1445 border-radius: 4px;
1446 font-size: 14px;
1447 line-height: normal;
1448 background: var(--abj404-surface, #fff);
1449 color: var(--abj404-text, #1d2327);
1450 cursor: pointer;
1451 min-width: 120px;
1452 }
1453
1454 .abj404-filter-select:focus {
1455 outline: none;
1456 border-color: var(--abj404-accent, #2271b1);
1457 box-shadow: 0 0 0 1px var(--abj404-accent, #2271b1);
1458 }
1459
1460 .abj404-rows-per-page {
1461 display: flex;
1462 align-items: center;
1463 gap: 8px;
1464 font-size: 14px;
1465 color: var(--abj404-text-muted, #646970);
1466 margin-left: auto;
1467 }
1468
1469 .abj404-rows-per-page select {
1470 padding: 8px 12px;
1471 border: 1px solid var(--abj404-border, #8c8f94);
1472 border-radius: 4px;
1473 font-size: 14px;
1474 line-height: normal;
1475 background: var(--abj404-surface, #fff);
1476 cursor: pointer;
1477 }
1478
1479 /* ============================================
1480 Bulk Actions Bar
1481 ============================================ */
1482
1483 .abj404-bulk-actions {
1484 padding: 16px 32px;
1485 background: var(--abj404-info-bg, #e7f3ff);
1486 border-bottom: 1px solid #c3e1ff;
1487 display: none;
1488 align-items: center;
1489 gap: 16px;
1490 flex-wrap: wrap;
1491 position: sticky;
1492 top: 77px; /* 32px admin bar + ~45px tabs */
1493 z-index: 11;
1494 }
1495
1496 @media screen and (max-width: 782px) {
1497 .abj404-bulk-actions {
1498 top: 91px; /* 46px admin bar + ~45px tabs */
1499 }
1500 }
1501
1502 .abj404-bulk-actions.active {
1503 display: flex;
1504 }
1505
1506 .abj404-selection-info {
1507 font-weight: 500;
1508 color: var(--abj404-info-text, #0c5a99);
1509 }
1510
1511 .abj404-selection-info strong {
1512 font-weight: 700;
1513 }
1514
1515 .abj404-bulk-actions .abj404-btn {
1516 padding: 8px 16px;
1517 font-size: 13px;
1518 }
1519
1520 .abj404-clear-selection {
1521 margin-left: auto;
1522 }
1523
1524 /* ============================================
1525 Modern Table Styling
1526 ============================================ */
1527
1528 .abj404-table-container {
1529 margin: 0;
1530 padding: 0 16px;
1531 }
1532
1533 .abj404-table {
1534 width: 100%;
1535 border-collapse: collapse;
1536 table-layout: auto;
1537 }
1538
1539 /* Column widths */
1540 .abj404-table th:first-child,
1541 .abj404-table td:first-child {
1542 width: 40px;
1543 min-width: 40px;
1544 }
1545
1546
1547 .abj404-table thead {
1548 background: var(--abj404-bg, #f6f7f7);
1549 border-bottom: 2px solid var(--abj404-border, #e0e0e0);
1550 }
1551
1552 .abj404-table th {
1553 text-align: left;
1554 padding: 12px 8px;
1555 font-weight: 600;
1556 font-size: 13px;
1557 color: var(--abj404-text, #1d2327);
1558 white-space: normal;
1559 position: sticky;
1560 top: 77px; /* 32px admin bar + ~45px tabs */
1561 z-index: 10;
1562 background: var(--abj404-bg, #f6f7f7);
1563 }
1564
1565 @media screen and (max-width: 782px) {
1566 .abj404-table th {
1567 top: 91px; /* 46px admin bar + ~45px tabs */
1568 }
1569 }
1570
1571 /* When bulk actions visible, push table header down */
1572 /* Matches both .abj404-table-container (Page Redirects) and form (Captured 404s) */
1573 .abj404-bulk-actions.active ~ .abj404-table-container .abj404-table th,
1574 .abj404-bulk-actions.active ~ form .abj404-table th {
1575 top: 130px; /* 77px + ~53px bulk actions bar */
1576 }
1577
1578 @media screen and (max-width: 782px) {
1579 .abj404-bulk-actions.active ~ .abj404-table-container .abj404-table th,
1580 .abj404-bulk-actions.active ~ form .abj404-table th {
1581 top: 144px;
1582 }
1583 }
1584
1585 .abj404-table th.sortable {
1586 cursor: pointer;
1587 user-select: none;
1588 }
1589
1590 .abj404-table th.sortable:hover {
1591 color: var(--abj404-accent, #2271b1);
1592 }
1593
1594 .abj404-table th.sorted {
1595 color: var(--abj404-accent, #2271b1);
1596 }
1597
1598 .abj404-table th .sorting-indicator,
1599 .abj404-table th .sort-indicator {
1600 display: inline-block;
1601 margin-left: 4px;
1602 opacity: 0.5;
1603 min-width: 0.8em;
1604 text-align: center;
1605 }
1606
1607 .abj404-table th .sorting-indicator::before,
1608 .abj404-table th .sort-indicator::before {
1609 content: "";
1610 font-size: 12px;
1611 line-height: 1;
1612 }
1613
1614 .abj404-table th.sorted .sorting-indicator,
1615 .abj404-table th.sorted .sort-indicator {
1616 opacity: 1;
1617 }
1618
1619 .abj404-table th.sorted.asc .sorting-indicator::before,
1620 .abj404-table th.sorted.asc .sort-indicator::before {
1621 content: "";
1622 }
1623
1624 .abj404-table th.sorted.desc .sorting-indicator::before,
1625 .abj404-table th.sorted.desc .sort-indicator::before {
1626 content: "";
1627 }
1628
1629 .abj404-table th input[type="checkbox"] {
1630 cursor: pointer;
1631 width: 18px;
1632 height: 18px;
1633 }
1634
1635 .abj404-table tbody tr {
1636 border-bottom: 1px solid var(--abj404-border, #e0e0e0);
1637 transition: background-color 0.15s;
1638 }
1639
1640 .abj404-table tbody tr:hover {
1641 background: var(--abj404-bg, #f9f9f9);
1642 }
1643
1644 .abj404-table tbody tr:nth-child(even) {
1645 background: #fafafa;
1646 }
1647
1648 .abj404-table tbody tr:nth-child(even):hover {
1649 background: #f5f5f5;
1650 }
1651
1652 .abj404-table tbody tr.destination-does-not-exist,
1653 .abj404-table tbody tr.destination-does-not-exist:nth-child(even) {
1654 background: #ffe7e7;
1655 }
1656
1657 .abj404-table tbody tr.destination-does-not-exist:hover,
1658 .abj404-table tbody tr.destination-does-not-exist:nth-child(even):hover {
1659 background: #ffd8d8;
1660 }
1661
1662 .abj404-table tbody tr.destination-does-not-exist .abj404-dest-warning {
1663 color: #a02222;
1664 font-weight: 600;
1665 }
1666
1667 .abj404-table td {
1668 padding: 12px 8px;
1669 font-size: 13px;
1670 vertical-align: middle;
1671 overflow: visible;
1672 }
1673
1674 .abj404-table td input[type="checkbox"] {
1675 cursor: pointer;
1676 width: 18px;
1677 height: 18px;
1678 }
1679
1680 /* URL Cell */
1681 .abj404-url-cell {
1682 font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
1683 color: var(--abj404-accent, #2271b1);
1684 word-break: break-word;
1685 position: relative;
1686 }
1687
1688 .abj404-url-cell::after {
1689 content: '';
1690 position: absolute;
1691 left: 0;
1692 top: 100%;
1693 width: 100%;
1694 height: 28px;
1695 display: none;
1696 }
1697
1698 .abj404-url-cell:hover::after,
1699 .abj404-url-cell:focus-within::after {
1700 display: block;
1701 }
1702
1703 .abj404-url-cell a {
1704 color: inherit;
1705 text-decoration: none;
1706 }
1707
1708 .abj404-url-cell a:hover {
1709 text-decoration: underline;
1710 }
1711
1712 /* Hits Cell */
1713 .abj404-hits-cell {
1714 text-align: right;
1715 font-weight: 600;
1716 color: var(--abj404-text, #1d2327);
1717 }
1718
1719 /* Date Cell */
1720 .abj404-date-cell {
1721 color: var(--abj404-text-muted, #646970);
1722 font-size: 12px;
1723 white-space: nowrap;
1724 }
1725
1726 /* Destination Cell */
1727 .abj404-dest-cell {
1728 word-break: break-word;
1729 }
1730
1731 .abj404-dest-cell a {
1732 display: block;
1733 }
1734
1735 /* ============================================
1736 Status & Type Badges
1737 ============================================ */
1738
1739 .abj404-badge {
1740 display: inline-block;
1741 padding: 3px 8px;
1742 border-radius: 10px;
1743 font-size: 11px;
1744 font-weight: 500;
1745 white-space: nowrap;
1746 }
1747
1748 .abj404-badge-auto {
1749 background: var(--abj404-info-bg, #e7f3ff);
1750 color: var(--abj404-info-text, #0c5a99);
1751 }
1752
1753 .abj404-badge-manual {
1754 background: var(--abj404-bg, #f0f0f1);
1755 color: var(--abj404-text-muted, #50575e);
1756 }
1757
1758 .abj404-badge-regex {
1759 background: #f3e8ff;
1760 color: #6b21a8;
1761 }
1762
1763 .abj404-badge-301 {
1764 background: #e7f5e9;
1765 color: #1e7e34;
1766 }
1767
1768 .abj404-badge-302 {
1769 background: #fff8e5;
1770 color: #614200;
1771 }
1772
1773 .abj404-badge-307 {
1774 background: #e0f2fe;
1775 color: #0369a1;
1776 }
1777
1778 .abj404-badge-308 {
1779 background: #dbeafe;
1780 color: #1d4ed8;
1781 }
1782
1783 .abj404-badge-410 {
1784 background: #fee2e2;
1785 color: #991b1b;
1786 }
1787
1788 .abj404-badge-451 {
1789 background: #fee2e2;
1790 color: #991b1b;
1791 }
1792
1793 .abj404-badge-meta {
1794 background: #ccfbf1;
1795 color: #0f766e;
1796 }
1797
1798 .abj404-badge-captured {
1799 background: #fef3c7;
1800 color: #92400e;
1801 }
1802
1803 .abj404-badge-ignored {
1804 background: #f3f4f6;
1805 color: #6b7280;
1806 }
1807
1808 .abj404-badge-later {
1809 background: #dbeafe;
1810 color: #1e40af;
1811 }
1812
1813 .abj404-badge-trash {
1814 background: var(--abj404-danger-bg, #fcf0f1);
1815 color: var(--abj404-danger-text, #8a2424);
1816 }
1817
1818 .abj404-badge-404 {
1819 background: #fef2f2;
1820 color: #dc2626;
1821 }
1822
1823 .abj404-badge-redirect {
1824 background: #ecfdf5;
1825 color: #059669;
1826 }
1827
1828 .abj404-type-badge {
1829 background: var(--abj404-bg, #f0f0f1);
1830 color: var(--abj404-text-muted, #50575e);
1831 padding: 2px 6px;
1832 border-radius: 4px;
1833 font-size: 10px;
1834 font-weight: 500;
1835 }
1836
1837 .abj404-never-used {
1838 color: var(--abj404-danger-text, #d63638);
1839 font-style: italic;
1840 font-size: 13px;
1841 }
1842
1843 /* ============================================
1844 Row Actions (WordPress-style under URL)
1845 ============================================ */
1846
1847 .abj404-row-actions {
1848 display: none;
1849 position: absolute;
1850 left: 0;
1851 top: calc(100% - 18px);
1852 margin-top: 0;
1853 padding: 4px 6px;
1854 border-radius: 4px;
1855 border: 1px solid var(--abj404-border, #dcdcde);
1856 background: var(--abj404-card-bg, #ffffff);
1857 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
1858 font-size: 12px;
1859 color: var(--abj404-text-muted, #646970);
1860 white-space: nowrap;
1861 z-index: 2;
1862 pointer-events: auto;
1863 }
1864
1865 .abj404-table tbody tr:hover .abj404-row-actions,
1866 .abj404-url-cell:hover .abj404-row-actions,
1867 .abj404-url-cell:focus-within .abj404-row-actions,
1868 .abj404-row-actions:hover,
1869 .abj404-row-actions:focus-within {
1870 display: block;
1871 }
1872
1873 .abj404-table tbody tr:focus-within .abj404-row-actions {
1874 display: block;
1875 }
1876
1877 .abj404-table tbody tr {
1878 position: relative;
1879 z-index: 0;
1880 }
1881
1882 .abj404-table tbody tr:hover,
1883 .abj404-table tbody tr:focus-within {
1884 z-index: 1;
1885 }
1886
1887 /* Always show actions on touch devices */
1888 @media (hover: none) {
1889 .abj404-row-actions {
1890 display: block;
1891 position: static;
1892 margin-top: 4px;
1893 padding: 0;
1894 border: 0;
1895 background: transparent;
1896 box-shadow: none;
1897 }
1898 }
1899
1900 .abj404-row-actions a {
1901 color: var(--abj404-accent, #2271b1);
1902 text-decoration: none;
1903 }
1904
1905 .abj404-row-actions a:hover {
1906 color: var(--abj404-accent-hover, #135e96);
1907 text-decoration: underline;
1908 }
1909
1910 .abj404-row-actions a.danger,
1911 .abj404-row-actions a.abj404-action-trash {
1912 color: var(--abj404-danger-text, #d63638);
1913 }
1914
1915 .abj404-row-actions a.danger:hover,
1916 .abj404-row-actions a.abj404-action-trash:hover {
1917 color: #a00;
1918 }
1919
1920 /* Action links with icons */
1921 .abj404-action-link {
1922 display: inline-flex;
1923 align-items: center;
1924 gap: 3px;
1925 }
1926
1927 .abj404-action-link svg {
1928 width: 12px;
1929 height: 12px;
1930 flex-shrink: 0;
1931 }
1932
1933 /* Legacy button style - for backwards compatibility */
1934 .abj404-action-btn {
1935 color: var(--abj404-accent, #2271b1);
1936 text-decoration: none;
1937 display: inline-flex;
1938 align-items: center;
1939 }
1940
1941 .abj404-action-btn svg {
1942 width: 14px;
1943 height: 14px;
1944 }
1945
1946
1947 /* ============================================
1948 Modern Pagination
1949 ============================================ */
1950
1951 .abj404-pagination {
1952 padding: 20px 32px;
1953 border-top: 1px solid var(--abj404-border, #e0e0e0);
1954 display: flex;
1955 justify-content: space-between;
1956 align-items: center;
1957 flex-wrap: wrap;
1958 gap: 16px;
1959 }
1960
1961 .abj404-pagination-bottom {
1962 border-top: 0;
1963 }
1964
1965 .abj404-pagination-info {
1966 color: var(--abj404-text-muted, #646970);
1967 font-size: 14px;
1968 }
1969
1970 /*
1971 * Inline progress badge shown by the page-redirects AJAX pipeline while a
1972 * cold-cache build is running (case-a). The same `.abj404-refresh-status`
1973 * span sits in both the filter row and the bottom pagination strip and is
1974 * populated by view_updater_build_advance.js / view_updater_table_warmup.js
1975 * via jQuery.text(). When empty it stays out of the layout so the existing
1976 * case-b toast (which collapses to a 28px spinner after 2s) remains the
1977 * dominant signal once the table is already visible.
1978 */
1979 .abj404-refresh-status {
1980 display: inline-flex;
1981 align-items: center;
1982 gap: 6px;
1983 padding: 4px 10px;
1984 background: var(--abj404-info-bg, #e7f3ff);
1985 color: var(--abj404-info-text, #0c5a99);
1986 border: 1px solid var(--abj404-info-border, #b6dcff);
1987 border-radius: 12px;
1988 font-size: 13px;
1989 font-weight: 500;
1990 line-height: 1.4;
1991 vertical-align: middle;
1992 max-width: 100%;
1993 overflow: hidden;
1994 text-overflow: ellipsis;
1995 white-space: nowrap;
1996 }
1997
1998 .abj404-refresh-status:empty {
1999 display: none;
2000 }
2001
2002 .abj404-refresh-status::before {
2003 content: "";
2004 width: 12px;
2005 height: 12px;
2006 flex: 0 0 auto;
2007 border: 2px solid var(--abj404-info-border, #b6dcff);
2008 border-top-color: var(--abj404-info-text, #0c5a99);
2009 border-radius: 50%;
2010 animation: abj404-spin 0.8s linear infinite;
2011 }
2012
2013 .abj404-pagination-controls {
2014 display: flex;
2015 gap: 8px;
2016 align-items: center;
2017 }
2018
2019 .abj404-page-btn {
2020 padding: 8px 12px;
2021 border: 1px solid var(--abj404-border, #c3c4c7);
2022 background: var(--abj404-surface, #fff);
2023 border-radius: 4px;
2024 cursor: pointer;
2025 font-size: 14px;
2026 color: var(--abj404-accent, #2271b1);
2027 transition: all 0.15s;
2028 min-width: 36px;
2029 text-align: center;
2030 text-decoration: none;
2031 display: inline-block;
2032 }
2033
2034 .abj404-page-btn:hover {
2035 background: var(--abj404-bg, #f6f7f7);
2036 border-color: var(--abj404-accent, #2271b1);
2037 text-decoration: none;
2038 }
2039
2040 .abj404-page-btn.active {
2041 background: var(--abj404-accent, #2271b1);
2042 color: #fff;
2043 border-color: var(--abj404-accent, #2271b1);
2044 }
2045
2046 .abj404-page-btn:disabled,
2047 .abj404-page-btn.disabled {
2048 opacity: 0.5;
2049 cursor: not-allowed;
2050 pointer-events: none;
2051 }
2052
2053 .abj404-page-ellipsis {
2054 padding: 8px 4px;
2055 color: var(--abj404-text-muted, #646970);
2056 }
2057
2058 .abj404-pagination-text {
2059 padding: 8px 12px;
2060 color: var(--abj404-text-muted, #646970);
2061 font-size: 14px;
2062 white-space: nowrap;
2063 }
2064
2065 /* ============================================
2066 Table Loading Overlay
2067 ============================================ */
2068
2069 .abj404-table-wrapper {
2070 position: relative;
2071 }
2072
2073 .abj404-loading-overlay {
2074 position: absolute;
2075 top: 0;
2076 left: 0;
2077 right: 0;
2078 bottom: 0;
2079 background: rgba(255, 255, 255, 0.8);
2080 z-index: 10;
2081 border-radius: 8px;
2082 animation: abj404-fade-in 0.2s ease-out;
2083 overflow: hidden;
2084 }
2085
2086 @keyframes abj404-fade-in {
2087 from { opacity: 0; }
2088 to { opacity: 1; }
2089 }
2090
2091 .abj404-spinner-container {
2092 position: sticky;
2093 top: 50vh;
2094 display: flex;
2095 justify-content: center;
2096 transform: translateY(-50%);
2097 pointer-events: none;
2098 }
2099
2100 .abj404-spinner {
2101 width: 40px;
2102 height: 40px;
2103 border: 3px solid var(--abj404-border, #e0e0e0);
2104 border-top-color: var(--abj404-accent, #2271b1);
2105 border-radius: 50%;
2106 animation: abj404-spin 0.8s linear infinite;
2107 }
2108
2109 @keyframes abj404-spin {
2110 to { transform: rotate(360deg); }
2111 }
2112
2113 /* ============================================
2114 Regex Explanation Toggle
2115 ============================================ */
2116
2117 .abj404-regex-toggle {
2118 font-size: 12px;
2119 color: var(--abj404-accent, #2271b1);
2120 text-decoration: none;
2121 cursor: pointer;
2122 }
2123
2124 .abj404-regex-toggle:hover {
2125 text-decoration: underline;
2126 }
2127
2128 .abj404-regex-info {
2129 margin-top: 12px;
2130 padding: 12px 16px;
2131 background: var(--abj404-bg, #f6f7f7);
2132 border-left: 3px solid var(--abj404-accent, #2271b1);
2133 border-radius: 0 4px 4px 0;
2134 font-size: 13px;
2135 line-height: 1.5;
2136 }
2137
2138 .abj404-regex-info code {
2139 background: #fff;
2140 padding: 2px 6px;
2141 border-radius: 3px;
2142 font-family: monospace;
2143 }
2144
2145 .abj404-regex-info p {
2146 margin: 0 0 8px 0;
2147 }
2148
2149 .abj404-regex-info p:last-child {
2150 margin-bottom: 0;
2151 }
2152
2153 /* ============================================
2154 Modal Styles
2155 ============================================ */
2156
2157 .abj404-modal {
2158 display: none;
2159 position: fixed;
2160 top: 0;
2161 left: 0;
2162 width: 100%;
2163 height: 100%;
2164 background: rgba(0, 0, 0, 0.5);
2165 z-index: 100000;
2166 align-items: center;
2167 justify-content: center;
2168 }
2169
2170 .abj404-modal.active {
2171 display: flex;
2172 }
2173
2174 .abj404-modal-content {
2175 background: var(--abj404-surface, #fff);
2176 border-radius: 8px;
2177 width: 90%;
2178 max-width: 600px;
2179 max-height: 90vh;
2180 overflow-y: auto;
2181 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
2182 animation: abj404-modal-slideUp 0.3s ease;
2183 }
2184
2185 @keyframes abj404-modal-slideUp {
2186 from {
2187 transform: translateY(50px);
2188 opacity: 0;
2189 }
2190 to {
2191 transform: translateY(0);
2192 opacity: 1;
2193 }
2194 }
2195
2196 .abj404-modal-header {
2197 padding: 20px 24px;
2198 border-bottom: 1px solid var(--abj404-border, #e0e0e0);
2199 display: flex;
2200 justify-content: space-between;
2201 align-items: center;
2202 }
2203
2204 .abj404-modal-header h2 {
2205 font-size: 20px;
2206 font-weight: 600;
2207 margin: 0;
2208 color: var(--abj404-text, #1d2327);
2209 }
2210
2211 .abj404-modal-close {
2212 background: none;
2213 border: none;
2214 font-size: 24px;
2215 color: var(--abj404-text-muted, #646970);
2216 cursor: pointer;
2217 padding: 0;
2218 width: 32px;
2219 height: 32px;
2220 display: flex;
2221 align-items: center;
2222 justify-content: center;
2223 border-radius: 4px;
2224 transition: background 0.15s;
2225 }
2226
2227 .abj404-modal-close:hover {
2228 background: var(--abj404-bg, #f0f0f1);
2229 }
2230
2231 .abj404-modal-body {
2232 padding: 24px;
2233 }
2234
2235 .abj404-modal-footer {
2236 padding: 16px 24px;
2237 border-top: 1px solid var(--abj404-border, #e0e0e0);
2238 display: flex;
2239 justify-content: flex-end;
2240 gap: 12px;
2241 }
2242
2243 /* Modal redirect-to field structure */
2244 .abj404-modal .abj404-redirect-to-field {
2245 margin-bottom: 0;
2246 }
2247
2248 .abj404-modal .abj404-input-row {
2249 display: block;
2250 }
2251
2252 /* Modal autocomplete field styling */
2253 .abj404-modal #redirect_to_user_field {
2254 width: 100% !important;
2255 padding: 8px 12px;
2256 border: 1px solid var(--abj404-border, #c3c4c7);
2257 border-radius: 4px;
2258 font-size: 14px;
2259 background: var(--abj404-surface, #fff);
2260 box-sizing: border-box;
2261 }
2262
2263 .abj404-modal #redirect_to_user_field:focus {
2264 border-color: var(--abj404-primary, #2271b1);
2265 outline: none;
2266 box-shadow: 0 0 0 1px var(--abj404-primary, #2271b1);
2267 }
2268
2269 /* Loading spinner for modal autocomplete */
2270 .abj404-modal #redirect_to_user_field.ui-autocomplete-loading {
2271 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='6' stroke='%23c3c4c7' stroke-width='2' fill='none'/%3E%3Cpath d='M8 2 A6 6 0 0 1 14 8' stroke='%232271b1' stroke-width='2' fill='none' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 8 8' to='360 8 8' dur='0.8s' repeatCount='indefinite'/%3E%3C/path%3E%3C/svg%3E");
2272 background-color: var(--abj404-surface, #fff);
2273 background-repeat: no-repeat;
2274 background-position: right 10px center;
2275 background-size: 16px 16px;
2276 padding-right: 36px;
2277 }
2278
2279 /* Hide legacy tooltip in modal - label already present */
2280 .abj404-modal .lefty-tooltip {
2281 display: none;
2282 }
2283
2284 /* Style explanation text in modal */
2285 .abj404-modal #redirect_to_user_field_explanation {
2286 display: block;
2287 margin-top: 8px;
2288 font-size: 13px;
2289 color: var(--abj404-text-muted, #646970);
2290 font-style: italic;
2291 }
2292
2293 .abj404-modal #redirect_to_user_field_warning {
2294 display: block;
2295 margin-top: 4px;
2296 font-size: 13px;
2297 font-style: italic;
2298 font-weight: bold;
2299 color: var(--abj404-danger-text, #d63638);
2300 }
2301
2302 /* Hide template label since we have our own */
2303 .abj404-modal .add_a_redirect_label {
2304 display: none;
2305 }
2306
2307 /* Modal: button-grid and form inputs fill modal width */
2308 .abj404-modal .abj404-form-input,
2309 .abj404-modal .abj404-form-select {
2310 max-width: 100%;
2311 }
2312
2313 /* Modal: advanced options section needs a bit more room */
2314 .abj404-modal .abj404-advanced-options {
2315 margin: 0 0 16px 0;
2316 }
2317
2318 /* Autocomplete input wrapper */
2319 .abj404-input-with-spinner {
2320 display: inline;
2321 }
2322
2323 /* Hide the separate spinner element - we use background-image instead */
2324 .abj404-loading-spinner {
2325 display: none !important;
2326 }
2327
2328 /* Show loading spinner inside input as background-image when loading */
2329 #redirect_to_user_field.ui-autocomplete-loading {
2330 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='6' stroke='%23c3c4c7' stroke-width='2' fill='none'/%3E%3Cpath d='M8 2 A6 6 0 0 1 14 8' stroke='%232271b1' stroke-width='2' fill='none' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 8 8' to='360 8 8' dur='0.8s' repeatCount='indefinite'/%3E%3C/path%3E%3C/svg%3E");
2331 background-repeat: no-repeat;
2332 background-position: right 8px center;
2333 background-size: 16px 16px;
2334 padding-right: 32px !important;
2335 }
2336
2337 /* ============================================
2338 Edit Redirect Page
2339 ============================================ */
2340
2341 .abj404-edit-page {
2342 margin: 20px 20px 20px 0;
2343 }
2344
2345 .abj404-edit-container {
2346 background: var(--abj404-surface, #fff);
2347 border: 1px solid var(--abj404-border, #c3c4c7);
2348 border-radius: 8px;
2349 padding: 24px 32px;
2350 max-width: 520px;
2351 }
2352
2353 .abj404-edit-container h2 {
2354 font-size: 20px;
2355 font-weight: 600;
2356 color: var(--abj404-text, #1d2327);
2357 margin: 0 0 24px 0;
2358 padding-bottom: 16px;
2359 border-bottom: 1px solid var(--abj404-border, #e0e0e0);
2360 }
2361
2362 /* Edit page header row: title + back link */
2363 .abj404-edit-page-header {
2364 display: flex;
2365 align-items: center;
2366 justify-content: space-between;
2367 margin-bottom: 24px;
2368 padding-bottom: 16px;
2369 border-bottom: 1px solid var(--abj404-border, #e0e0e0);
2370 }
2371
2372 .abj404-edit-page-header h2 {
2373 font-size: 20px;
2374 font-weight: 600;
2375 color: var(--abj404-text, #1d2327);
2376 margin: 0;
2377 border: none;
2378 padding: 0;
2379 }
2380
2381 .abj404-back-link {
2382 font-size: 13px;
2383 color: var(--abj404-accent, #2271b1);
2384 text-decoration: none;
2385 display: flex;
2386 align-items: center;
2387 gap: 4px;
2388 white-space: nowrap;
2389 }
2390
2391 .abj404-back-link:hover {
2392 text-decoration: underline;
2393 color: var(--abj404-accent-hover, #135e96);
2394 }
2395
2396 /* Redirect type button grid */
2397 .abj404-redirect-type-grid {
2398 display: grid;
2399 grid-template-columns: repeat(3, 1fr);
2400 gap: 8px;
2401 margin-bottom: 8px;
2402 }
2403
2404 .abj404-redirect-type-btn {
2405 display: flex;
2406 flex-direction: column;
2407 align-items: center;
2408 justify-content: center;
2409 padding: 10px 8px;
2410 border: 1px solid var(--abj404-border, #c3c4c7);
2411 border-radius: 4px;
2412 background: var(--abj404-surface, #fff);
2413 cursor: pointer;
2414 transition: border-color 0.15s, background 0.15s;
2415 text-align: center;
2416 color: var(--abj404-text, #1d2327);
2417 line-height: 1.3;
2418 font-family: inherit;
2419 }
2420
2421 .abj404-redirect-type-btn strong {
2422 font-size: 15px;
2423 font-weight: 700;
2424 display: block;
2425 }
2426
2427 .abj404-redirect-type-btn span {
2428 font-size: 11px;
2429 color: var(--abj404-text-muted, #646970);
2430 display: block;
2431 }
2432
2433 .abj404-redirect-type-btn:hover {
2434 border-color: var(--abj404-accent, #2271b1);
2435 background: #f0f5fb;
2436 }
2437
2438 .abj404-redirect-type-btn--active {
2439 border-color: var(--abj404-accent, #2271b1);
2440 background: var(--abj404-accent, #2271b1);
2441 color: #fff;
2442 }
2443
2444 .abj404-redirect-type-btn--active strong {
2445 color: #fff;
2446 }
2447
2448 .abj404-redirect-type-btn--active span {
2449 color: rgba(255, 255, 255, 0.8);
2450 }
2451
2452 .abj404-redirect-type-btn--active:hover {
2453 background: var(--abj404-accent-hover, #135e96);
2454 border-color: var(--abj404-accent-hover, #135e96);
2455 }
2456
2457 /* Meta Refresh button spans full width */
2458 .abj404-redirect-type-btn--full {
2459 grid-column: 1 / -1;
2460 }
2461
2462 /* URL list for bulk editing */
2463 .abj404-url-list {
2464 background: var(--abj404-bg, #f6f7f7);
2465 border: 1px solid var(--abj404-border, #dcdcde);
2466 border-radius: 4px;
2467 padding: 12px 16px;
2468 max-height: 200px;
2469 overflow-y: auto;
2470 }
2471
2472 .abj404-url-list ul {
2473 margin: 0;
2474 padding: 0;
2475 list-style: none;
2476 }
2477
2478 .abj404-url-list li {
2479 padding: 4px 0;
2480 font-size: 13px;
2481 color: var(--abj404-text, #1d2327);
2482 border-bottom: 1px solid var(--abj404-border, #e0e0e0);
2483 }
2484
2485 .abj404-url-list li:last-child {
2486 border-bottom: none;
2487 }
2488
2489 .abj404-url-list code {
2490 background: transparent;
2491 padding: 0;
2492 font-size: 13px;
2493 }
2494
2495 /* Button group for form actions */
2496 .abj404-button-group {
2497 display: flex;
2498 gap: 12px;
2499 margin-top: 24px;
2500 padding-top: 20px;
2501 border-top: 1px solid var(--abj404-border, #e0e0e0);
2502 }
2503
2504 /* Edit page: inputs fill the narrower card */
2505 .abj404-edit-container .abj404-form-input,
2506 .abj404-edit-container .abj404-form-select {
2507 max-width: 100%;
2508 }
2509
2510 /* Redirect-to field wrapper structure */
2511 .abj404-edit-container .abj404-redirect-to-field {
2512 margin-bottom: 20px;
2513 }
2514
2515 .abj404-edit-container .abj404-input-row {
2516 display: flex;
2517 align-items: center;
2518 gap: 8px;
2519 }
2520
2521 /* Style the template label to match form labels */
2522 .abj404-edit-container .add_a_redirect_label {
2523 display: block;
2524 font-weight: 600;
2525 color: var(--abj404-text, #1d2327);
2526 margin-bottom: 8px;
2527 font-size: 14px;
2528 }
2529
2530 /* Style the autocomplete field on edit page */
2531 .abj404-edit-container #redirect_to_user_field {
2532 width: 100%;
2533 max-width: 100%;
2534 padding: 10px 12px;
2535 border: 1px solid var(--abj404-border, #8c8f94);
2536 border-radius: 4px;
2537 font-size: 14px;
2538 background: var(--abj404-surface, #fff);
2539 box-sizing: border-box;
2540 }
2541
2542 .abj404-edit-container #redirect_to_user_field:focus {
2543 border-color: var(--abj404-accent, #2271b1);
2544 outline: none;
2545 box-shadow: 0 0 0 1px var(--abj404-accent, #2271b1);
2546 }
2547
2548 /* Loading spinner for edit page autocomplete */
2549 .abj404-edit-container #redirect_to_user_field.ui-autocomplete-loading {
2550 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='6' stroke='%23c3c4c7' stroke-width='2' fill='none'/%3E%3Cpath d='M8 2 A6 6 0 0 1 14 8' stroke='%232271b1' stroke-width='2' fill='none' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 8 8' to='360 8 8' dur='0.8s' repeatCount='indefinite'/%3E%3C/path%3E%3C/svg%3E");
2551 background-color: var(--abj404-surface, #fff);
2552 background-repeat: no-repeat;
2553 background-position: right 10px center;
2554 background-size: 16px 16px;
2555 padding-right: 36px;
2556 }
2557
2558 /* Style the explanation text */
2559 .abj404-edit-container #redirect_to_user_field_explanation {
2560 display: block;
2561 margin-top: 8px;
2562 font-size: 13px;
2563 color: var(--abj404-text-muted, #646970);
2564 font-style: italic;
2565 }
2566
2567 /* Style the warning text */
2568 .abj404-edit-container #redirect_to_user_field_warning {
2569 display: block;
2570 margin-top: 4px;
2571 font-size: 13px;
2572 font-style: italic;
2573 font-weight: bold;
2574 color: var(--abj404-danger-text, #d63638);
2575 }
2576
2577 /* Style the tooltip inline with the input */
2578 .abj404-edit-container .lefty-tooltip {
2579 display: inline-flex;
2580 align-items: center;
2581 justify-content: center;
2582 font-size: 13px;
2583 color: var(--abj404-text-muted, #646970);
2584 cursor: help;
2585 }
2586
2587 /* ============================================
2588 Empty State
2589 ============================================ */
2590
2591 .abj404-empty-state {
2592 text-align: center;
2593 padding: 60px 20px;
2594 color: var(--abj404-text-muted, #646970);
2595 }
2596
2597 .abj404-empty-state-icon {
2598 font-size: 48px;
2599 margin-bottom: 16px;
2600 opacity: 0.5;
2601 }
2602
2603 .abj404-empty-state h3 {
2604 font-size: 18px;
2605 font-weight: 600;
2606 color: var(--abj404-text, #1d2327);
2607 margin: 0 0 8px 0;
2608 }
2609
2610 .abj404-empty-state p {
2611 margin: 0;
2612 font-size: 14px;
2613 }
2614
2615 /* ============================================
2616 Destination with Warning
2617 ============================================ */
2618
2619 .abj404-dest-warning {
2620 color: var(--abj404-danger-text, #d63638);
2621 font-weight: 600;
2622 }
2623
2624 .abj404-dest-tooltip {
2625 position: relative;
2626 display: inline-block;
2627 }
2628
2629 .abj404-dest-tooltip .abj404-tooltip-text {
2630 visibility: hidden;
2631 background-color: #1d2327;
2632 color: #fff;
2633 text-align: center;
2634 border-radius: 4px;
2635 padding: 8px 12px;
2636 position: absolute;
2637 z-index: 1000;
2638 bottom: 125%;
2639 left: 50%;
2640 transform: translateX(-50%);
2641 white-space: nowrap;
2642 font-size: 12px;
2643 font-weight: normal;
2644 opacity: 0;
2645 transition: opacity 0.2s;
2646 }
2647
2648 .abj404-dest-tooltip .abj404-tooltip-text::after {
2649 content: "";
2650 position: absolute;
2651 top: 100%;
2652 left: 50%;
2653 margin-left: -5px;
2654 border-width: 5px;
2655 border-style: solid;
2656 border-color: #1d2327 transparent transparent transparent;
2657 }
2658
2659 .abj404-dest-tooltip:hover .abj404-tooltip-text {
2660 visibility: visible;
2661 opacity: 1;
2662 }
2663
2664 /* Keep top-row destination tooltips readable: show below the row instead of under sticky headers. */
2665 .abj404-table tbody tr:nth-child(-n+2) .abj404-dest-tooltip .abj404-tooltip-text {
2666 top: 125%;
2667 bottom: auto;
2668 }
2669
2670 .abj404-table tbody tr:nth-child(-n+2) .abj404-dest-tooltip .abj404-tooltip-text::after {
2671 top: auto;
2672 bottom: 100%;
2673 border-color: transparent transparent #1d2327 transparent;
2674 }
2675
2676 /* ============================================
2677 URL with Regex Warning
2678 ============================================ */
2679
2680 .url-looks-like-regex {
2681 background-color: #fff3cd;
2682 }
2683
2684 .abj404-url-warning {
2685 color: var(--abj404-warning-text, #856404);
2686 font-weight: 600;
2687 }
2688
2689 .abj404-url-tooltip {
2690 position: relative;
2691 display: inline-block;
2692 }
2693
2694 .abj404-url-tooltip .abj404-tooltip-text {
2695 visibility: hidden;
2696 background-color: #1d2327;
2697 color: #fff;
2698 text-align: left;
2699 border-radius: 4px;
2700 padding: 10px 14px;
2701 position: absolute;
2702 z-index: 1000;
2703 bottom: 100%;
2704 left: 0;
2705 margin-bottom: 8px;
2706 font-size: 13px;
2707 font-weight: normal;
2708 opacity: 0;
2709 transition: opacity 0.2s;
2710 width: 320px;
2711 line-height: 1.5;
2712 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
2713 }
2714
2715 .abj404-url-tooltip .abj404-tooltip-text::after {
2716 content: "";
2717 position: absolute;
2718 top: 100%;
2719 left: 20px;
2720 border-width: 6px;
2721 border-style: solid;
2722 border-color: #1d2327 transparent transparent transparent;
2723 }
2724
2725 .abj404-url-tooltip:hover .abj404-tooltip-text {
2726 visibility: visible;
2727 opacity: 1;
2728 }
2729
2730 /* ============================================
2731 Mobile Responsiveness for Tables
2732 ============================================ */
2733
2734 @media screen and (max-width: 782px) {
2735 .abj404-table-header,
2736 .abj404-filter-bar,
2737 .abj404-bulk-actions,
2738 .abj404-table-container,
2739 .abj404-pagination {
2740 padding-left: 16px;
2741 padding-right: 16px;
2742 }
2743
2744 .abj404-content-tabs {
2745 padding-left: 16px;
2746 padding-right: 16px;
2747 }
2748
2749 .abj404-table-header {
2750 flex-direction: column;
2751 align-items: flex-start;
2752 }
2753
2754 .abj404-filter-bar {
2755 flex-direction: column;
2756 align-items: stretch;
2757 }
2758
2759 .abj404-search-box {
2760 min-width: auto;
2761 max-width: none;
2762 }
2763
2764 .abj404-rows-per-page {
2765 margin-left: 0;
2766 justify-content: flex-start;
2767 }
2768
2769 .abj404-pagination {
2770 flex-direction: column;
2771 align-items: center;
2772 text-align: center;
2773 }
2774
2775 .abj404-table th,
2776 .abj404-table td {
2777 padding: 12px 8px;
2778 }
2779
2780 /* Hide less important columns on mobile */
2781 .abj404-table .hide-on-mobile {
2782 display: none;
2783 }
2784
2785 .abj404-row-actions {
2786 opacity: 1;
2787 flex-wrap: wrap;
2788 }
2789 }
2790
2791 /* Tablets - hide Created column (Last Used is more useful) */
2792 @media screen and (max-width: 960px) {
2793 .abj404-table .hide-on-tablet {
2794 display: none;
2795 }
2796
2797 /* Smaller badges on tablet */
2798 .abj404-badge,
2799 .abj404-type-badge {
2800 padding: 2px 6px;
2801 font-size: 10px;
2802 }
2803 }
2804
2805 /* Small tablets / large phones */
2806 @media screen and (max-width: 600px) {
2807 .abj404-table th,
2808 .abj404-table td {
2809 padding: 10px 6px;
2810 font-size: 12px;
2811 }
2812
2813 .abj404-url-cell {
2814 font-size: 11px;
2815 }
2816
2817 .abj404-date-cell {
2818 font-size: 11px;
2819 }
2820
2821 /* Stack bulk actions */
2822 .abj404-bulk-actions {
2823 flex-direction: column;
2824 gap: 8px;
2825 }
2826
2827 .abj404-bulk-actions select,
2828 .abj404-bulk-actions .button {
2829 width: 100%;
2830 }
2831 }
2832
2833 /* ============================================
2834 Dark Theme Support for Table Pages
2835 ============================================ */
2836
2837 html[data-theme="neon"] .abj404-table-page,
2838 html[data-theme="obsidian"] .abj404-table-page {
2839 background: var(--abj404-surface, #1e1e1e);
2840 }
2841
2842 html[data-theme="neon"] .abj404-table tbody tr:nth-child(even),
2843 html[data-theme="obsidian"] .abj404-table tbody tr:nth-child(even) {
2844 background: rgba(255, 255, 255, 0.02);
2845 }
2846
2847 html[data-theme="neon"] .abj404-table tbody tr:hover,
2848 html[data-theme="obsidian"] .abj404-table tbody tr:hover {
2849 background: rgba(255, 255, 255, 0.05);
2850 }
2851
2852 html[data-theme="neon"] .abj404-content-tabs,
2853 html[data-theme="obsidian"] .abj404-content-tabs,
2854 html[data-theme="neon"] .abj404-filter-bar,
2855 html[data-theme="obsidian"] .abj404-filter-bar {
2856 background: var(--abj404-bg, #252525);
2857 }
2858
2859 /* ============================================
2860 Logs Page Specific Styles
2861 ============================================ */
2862
2863 .abj404-logs-table {
2864 table-layout: fixed;
2865 }
2866
2867 /* Fixed column widths for the logs table (6 columns: toggle, URL, IP, Referrer, Action, Date) */
2868 .abj404-logs-table thead th:nth-child(1) { width: 32px; } /* Trace toggle */
2869 .abj404-logs-table thead th:nth-child(2) { width: 28%; } /* URL */
2870 .abj404-logs-table thead th:nth-child(3) { width: 10%; } /* IP Address */
2871 .abj404-logs-table thead th:nth-child(4) { width: 22%; } /* Referrer */
2872 .abj404-logs-table thead th:nth-child(5) { width: 22%; } /* Action */
2873 .abj404-logs-table thead th:nth-child(6) { width: auto; } /* Date (takes remaining) */
2874
2875 /* Override the generic first-child 40px checkbox width for the narrow trace toggle */
2876 .abj404-logs-table th:first-child,
2877 .abj404-logs-table td:first-child {
2878 width: 32px;
2879 min-width: 32px;
2880 max-width: 32px;
2881 }
2882
2883 /* Prevent URL/Referrer/Action text from overflowing into adjacent columns */
2884 .abj404-logs-table td {
2885 overflow: hidden;
2886 text-overflow: ellipsis;
2887 }
2888
2889 .abj404-logs-table .abj404-url-cell {
2890 overflow: hidden;
2891 text-overflow: ellipsis;
2892 white-space: nowrap;
2893 }
2894
2895 .abj404-logs-table .abj404-url-cell:hover {
2896 white-space: normal;
2897 word-break: break-all;
2898 }
2899
2900 /* Logs table URL cells use same word-break as regular tables */
2901
2902 .abj404-logs-search-form {
2903 display: flex;
2904 align-items: center;
2905 gap: 8px;
2906 margin: 0;
2907 flex: 1;
2908 min-width: 0;
2909 }
2910
2911 .abj404-logs-search-form input[type="text"],
2912 .abj404-logs-search-form input.ui-autocomplete-input {
2913 flex: 1;
2914 min-width: 120px;
2915 line-height: normal;
2916 }
2917
2918 .abj404-logs-search-form label {
2919 font-weight: 500;
2920 color: var(--abj404-text, #1d2327);
2921 white-space: nowrap;
2922 }
2923
2924 .abj404-ip-cell {
2925 font-family: monospace;
2926 font-size: 12px;
2927 color: var(--abj404-text-muted, #646970);
2928 }
2929
2930 .abj404-url-detail {
2931 color: var(--abj404-text-muted, #646970);
2932 font-size: 12px;
2933 }
2934
2935 .abj404-action-url {
2936 max-width: 200px;
2937 display: inline-block;
2938 overflow: hidden;
2939 text-overflow: ellipsis;
2940 white-space: nowrap;
2941 vertical-align: bottom;
2942 }
2943
2944 .abj404-text-muted {
2945 color: var(--abj404-text-muted, #646970);
2946 }
2947
2948 .abj404-engine-label {
2949 font-size: 11px;
2950 color: var(--abj404-text-muted, #646970);
2951 font-style: italic;
2952 }
2953
2954 /* Pipeline trace detail row */
2955 .abj404-trace-th {
2956 width: 28px;
2957 padding: 4px 2px;
2958 }
2959
2960 .abj404-trace-toggle-cell {
2961 width: 28px;
2962 padding: 4px 2px;
2963 text-align: center;
2964 }
2965
2966 .abj404-trace-toggle {
2967 background: none;
2968 border: 1px solid var(--abj404-border, #c3c4c7);
2969 border-radius: 3px;
2970 cursor: pointer;
2971 font-size: 10px;
2972 padding: 1px 4px;
2973 color: var(--abj404-text-muted, #646970);
2974 line-height: 1;
2975 }
2976
2977 .abj404-trace-toggle:disabled {
2978 opacity: 0.3;
2979 cursor: default;
2980 }
2981
2982 .abj404-trace-toggle:not(:disabled):hover {
2983 background: var(--abj404-bg-hover, #f0f0f1);
2984 }
2985
2986 .abj404-trace-detail td.abj404-trace-detail-cell {
2987 background: var(--abj404-bg-subtle, #f6f7f7);
2988 padding: 10px 16px;
2989 border-top: none;
2990 }
2991
2992 .abj404-trace-steps {
2993 margin: 0;
2994 padding-left: 0;
2995 list-style: none;
2996 font-size: 13px;
2997 color: var(--abj404-text, #1d2327);
2998 line-height: 1.5;
2999 }
3000
3001 .abj404-trace-steps li {
3002 display: flex;
3003 align-items: baseline;
3004 gap: 8px;
3005 margin-bottom: 4px;
3006 padding: 3px 0;
3007 border-bottom: 1px solid var(--abj404-bg-hover, #f0f0f1);
3008 }
3009
3010 .abj404-trace-steps li:last-child {
3011 border-bottom: none;
3012 }
3013
3014 .abj404-trace-step-name {
3015 flex: 0 0 auto;
3016 min-width: 180px;
3017 font-weight: 600;
3018 color: var(--abj404-text, #1d2327);
3019 }
3020
3021 .abj404-trace-outcome {
3022 flex: 0 0 auto;
3023 display: inline-block;
3024 padding: 1px 8px;
3025 border-radius: 3px;
3026 font-size: 12px;
3027 font-weight: 500;
3028 }
3029
3030 .abj404-trace-outcome-pass {
3031 background: #d4edda;
3032 color: #155724;
3033 }
3034
3035 .abj404-trace-outcome-fail {
3036 background: #f8d7da;
3037 color: #721c24;
3038 }
3039
3040 .abj404-trace-outcome-neutral {
3041 background: var(--abj404-bg-hover, #f0f0f1);
3042 color: var(--abj404-text-muted, #646970);
3043 }
3044
3045 .abj404-trace-outcome-result {
3046 background: #cce5ff;
3047 color: #004085;
3048 }
3049
3050 .abj404-trace-detail-text {
3051 flex: 1 1 auto;
3052 color: var(--abj404-text-muted, #646970);
3053 font-size: 12px;
3054 }
3055
3056 .abj404-suggestion-type {
3057 display: inline-block;
3058 font-size: 12px;
3059 color: #646970;
3060 margin-left: 6px;
3061 }
3062
3063 .abj404-score-badge {
3064 display: inline-block;
3065 font-size: 11px;
3066 font-weight: 600;
3067 border-radius: 3px;
3068 padding: 1px 5px;
3069 }
3070
3071 .abj404-score-high {
3072 color: #1a5c2a;
3073 background: #d4edda;
3074 }
3075
3076 .abj404-score-medium {
3077 color: #7a4e00;
3078 background: #fff3cd;
3079 }
3080
3081 .abj404-score-low {
3082 color: #721c24;
3083 background: #f8d7da;
3084 }
3085
3086 .abj404-score-manual {
3087 color: #646970;
3088 font-size: 14px;
3089 }
3090
3091 .abj404-confidence-cell {
3092 text-align: center;
3093 white-space: nowrap;
3094 }
3095
3096 .abj404-username-label {
3097 font-size: 11px;
3098 color: var(--abj404-accent, #2271b1);
3099 }
3100
3101 /* Empty trash button - use higher specificity to override WordPress .button */
3102 .button.abj404-empty-trash-btn,
3103 a.abj404-empty-trash-btn {
3104 margin-left: auto;
3105 background: var(--abj404-danger-bg, #fcf0f1) !important;
3106 color: var(--abj404-danger-text, #d63638) !important;
3107 border-color: var(--abj404-danger-text, #d63638) !important;
3108 }
3109
3110 .button.abj404-empty-trash-btn:hover,
3111 a.abj404-empty-trash-btn:hover {
3112 background: var(--abj404-danger-text, #d63638) !important;
3113 color: #fff !important;
3114 border-color: var(--abj404-danger-text, #d63638) !important;
3115 }
3116
3117 /* ============================================
3118 Options Page Content Styling
3119 ============================================ */
3120
3121 /* Form field rows - each paragraph is a form field group */
3122 .abj404-accordion-content p {
3123 display: flex;
3124 flex-wrap: wrap;
3125 align-items: flex-start;
3126 gap: 8px;
3127 padding: 16px 20px;
3128 margin: 0;
3129 border-bottom: 1px solid var(--abj404-border-light, #f0f0f1);
3130 background: var(--abj404-surface, #fff);
3131 }
3132
3133 .abj404-accordion-content p:last-child {
3134 border-bottom: none;
3135 }
3136
3137 /* Alternate row coloring for better readability */
3138 .abj404-accordion-content p:nth-child(even) {
3139 background: var(--abj404-surface-alt, #f9f9f9);
3140 }
3141
3142 /* Labels in form fields */
3143 .abj404-accordion-content p > label:first-child,
3144 .abj404-accordion-content p > label[for] {
3145 flex: 0 0 280px;
3146 font-weight: 600;
3147 color: var(--abj404-text, #2c3338);
3148 padding-top: 4px;
3149 }
3150
3151 /* Inputs and selects */
3152 .abj404-accordion-content input[type="text"],
3153 .abj404-accordion-content input[type="number"],
3154 .abj404-accordion-content select {
3155 padding: 6px 10px;
3156 border: 1px solid var(--abj404-border, #8c8f94);
3157 border-radius: 4px;
3158 background: var(--abj404-input-bg, #fff);
3159 color: var(--abj404-text, #2c3338);
3160 font-size: 14px;
3161 transition: border-color 0.2s ease, box-shadow 0.2s ease;
3162 }
3163
3164 .abj404-accordion-content input[type="text"]:focus,
3165 .abj404-accordion-content input[type="number"]:focus,
3166 .abj404-accordion-content select:focus {
3167 border-color: var(--abj404-primary, #2271b1);
3168 box-shadow: 0 0 0 1px var(--abj404-primary, #2271b1);
3169 outline: none;
3170 }
3171
3172 /* Checkboxes - align better */
3173 .abj404-accordion-content input[type="checkbox"] {
3174 margin-top: 5px;
3175 width: 18px;
3176 height: 18px;
3177 cursor: pointer;
3178 }
3179
3180 /* Help text styling - target BR followed by text */
3181 .abj404-accordion-content p br {
3182 display: none;
3183 }
3184
3185 /* Style inline help text that follows inputs */
3186 .abj404-accordion-content p > br + text,
3187 .abj404-accordion-content p::after {
3188 flex-basis: 100%;
3189 font-size: 13px;
3190 color: var(--abj404-text-muted, #646970);
3191 line-height: 1.5;
3192 padding-left: 288px;
3193 margin-top: 4px;
3194 }
3195
3196 /* Tables in options - modernize the old border=1 tables */
3197 .abj404-accordion-content table {
3198 width: 100%;
3199 border-collapse: separate;
3200 border-spacing: 0;
3201 border: 1px solid var(--abj404-border, #c3c4c7);
3202 border-radius: 4px;
3203 overflow: hidden;
3204 margin: 0;
3205 }
3206
3207 .abj404-accordion-content table tr {
3208 background: var(--abj404-surface, #fff);
3209 }
3210
3211 .abj404-accordion-content table tr:nth-child(even) {
3212 background: var(--abj404-surface-alt, #f9f9f9);
3213 }
3214
3215 .abj404-accordion-content table td {
3216 padding: 16px 20px;
3217 vertical-align: top;
3218 border-bottom: 1px solid var(--abj404-border-light, #e0e0e0);
3219 border-right: 1px solid var(--abj404-border-light, #e0e0e0);
3220 }
3221
3222 .abj404-accordion-content table tr:last-child td {
3223 border-bottom: none;
3224 }
3225
3226 .abj404-accordion-content table td:last-child {
3227 border-right: none;
3228 }
3229
3230 /* First column (labels) in table */
3231 .abj404-accordion-content table td:first-child {
3232 width: 45%;
3233 font-weight: 500;
3234 color: var(--abj404-text, #2c3338);
3235 background: var(--abj404-surface-alt, #f6f7f7);
3236 }
3237
3238 /* Second column (inputs) in table */
3239 .abj404-accordion-content table td:last-child {
3240 width: 55%;
3241 }
3242
3243 /* Textareas in tables */
3244 .abj404-accordion-content textarea {
3245 width: 100%;
3246 min-height: 120px;
3247 padding: 12px;
3248 border: 1px solid var(--abj404-border, #8c8f94);
3249 border-radius: 4px;
3250 background: var(--abj404-input-bg, #fff);
3251 color: var(--abj404-text, #2c3338);
3252 font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
3253 font-size: 13px;
3254 line-height: 1.5;
3255 resize: vertical;
3256 transition: border-color 0.2s ease, box-shadow 0.2s ease;
3257 }
3258
3259 .abj404-accordion-content textarea:focus {
3260 border-color: var(--abj404-primary, #2271b1);
3261 box-shadow: 0 0 0 1px var(--abj404-primary, #2271b1);
3262 outline: none;
3263 }
3264
3265 /* Lists in options (bullet points) */
3266 .abj404-accordion-content ul {
3267 margin: 8px 0;
3268 padding-left: 20px;
3269 list-style-type: disc;
3270 }
3271
3272 .abj404-accordion-content ul li {
3273 margin-bottom: 4px;
3274 color: var(--abj404-text-muted, #50575e);
3275 font-size: 13px;
3276 line-height: 1.5;
3277 }
3278
3279 .abj404-accordion-content ul li.closeLI {
3280 margin-bottom: 2px;
3281 }
3282
3283 /* Warning text (red warnings) */
3284 .abj404-accordion-content div[style*="color: red"],
3285 .abj404-accordion-content div[style*="color:red"] {
3286 background: var(--abj404-danger-bg, #fcf0f1) !important;
3287 color: var(--abj404-danger-text, #d63638) !important;
3288 padding: 12px 16px !important;
3289 border-radius: 4px !important;
3290 border-left: 4px solid var(--abj404-danger-text, #d63638) !important;
3291 margin: 12px 0 !important;
3292 font-weight: 500 !important;
3293 }
3294
3295 /* Note text */
3296 .abj404-accordion-content td br + text,
3297 .abj404-accordion-content p br + text {
3298 font-size: 13px;
3299 color: var(--abj404-text-muted, #646970);
3300 }
3301
3302 /* Info/help section at top of sections */
3303 .abj404-accordion-content > p:first-child {
3304 background: var(--abj404-surface-alt, #f6f7f7);
3305 border-left: 4px solid var(--abj404-primary, #2271b1);
3306 }
3307
3308 /* Horizontal rule/separator styling */
3309 .abj404-accordion-content hr {
3310 border: none;
3311 border-top: 1px solid var(--abj404-border-light, #e0e0e0);
3312 margin: 16px 0;
3313 }
3314
3315 /* DB version info and similar technical info */
3316 .abj404-accordion-content p:has(> label:empty),
3317 .abj404-accordion-content p:first-of-type:not(:has(label[for])) {
3318 font-size: 13px;
3319 color: var(--abj404-text-muted, #646970);
3320 background: var(--abj404-surface-alt, #f6f7f7);
3321 padding: 12px 20px;
3322 border-radius: 4px;
3323 margin-bottom: 16px;
3324 }
3325
3326 /* Mobile responsive adjustments */
3327 @media screen and (max-width: 782px) {
3328 .abj404-accordion-content p {
3329 flex-direction: column;
3330 padding: 12px 16px;
3331 }
3332
3333 .abj404-accordion-content p > label:first-child,
3334 .abj404-accordion-content p > label[for] {
3335 flex: none;
3336 width: 100%;
3337 margin-bottom: 8px;
3338 }
3339
3340 .abj404-accordion-content table td {
3341 display: block;
3342 width: 100% !important;
3343 padding: 12px 16px;
3344 }
3345
3346 .abj404-accordion-content table td:first-child {
3347 border-bottom: none;
3348 padding-bottom: 8px;
3349 }
3350
3351 .abj404-accordion-content textarea {
3352 min-height: 100px;
3353 }
3354 }
3355
3356 /* Dark theme adjustments for options */
3357 html[data-theme="neon"] .abj404-accordion-content p:nth-child(even),
3358 html[data-theme="obsidian"] .abj404-accordion-content p:nth-child(even) {
3359 background: rgba(255, 255, 255, 0.02);
3360 }
3361
3362 html[data-theme="neon"] .abj404-accordion-content table td:first-child,
3363 html[data-theme="obsidian"] .abj404-accordion-content table td:first-child {
3364 background: rgba(255, 255, 255, 0.03);
3365 }
3366
3367 html[data-theme="neon"] .abj404-accordion-content table tr:nth-child(even),
3368 html[data-theme="obsidian"] .abj404-accordion-content table tr:nth-child(even) {
3369 background: rgba(255, 255, 255, 0.02);
3370 }
3371
3372 html[data-theme="neon"] .abj404-accordion-content textarea,
3373 html[data-theme="obsidian"] .abj404-accordion-content textarea,
3374 html[data-theme="neon"] .abj404-accordion-content input[type="text"],
3375 html[data-theme="obsidian"] .abj404-accordion-content input[type="text"],
3376 html[data-theme="neon"] .abj404-accordion-content select,
3377 html[data-theme="obsidian"] .abj404-accordion-content select {
3378 background: var(--abj404-input-bg, rgba(0, 0, 0, 0.2));
3379 border-color: var(--abj404-border, #3d4f5f);
3380 }
3381
3382 /* Autocomplete dropdown field (redirect to) styling */
3383 /* Redirect field wrapper in accordion */
3384 .abj404-accordion-content .abj404-redirect-to-field {
3385 padding: 0 20px;
3386 }
3387
3388 .abj404-accordion-content .abj404-input-row {
3389 display: flex;
3390 align-items: center;
3391 gap: 8px;
3392 margin-bottom: 8px;
3393 }
3394
3395 .abj404-accordion-content label.add_a_redirect_label,
3396 .abj404-accordion-content label.add_exclude_page_field_label {
3397 display: block;
3398 font-weight: 600;
3399 color: var(--abj404-text, #2c3338);
3400 margin-bottom: 8px;
3401 padding: 16px 20px 0;
3402 }
3403
3404 .abj404-accordion-content #redirect_to_user_field,
3405 .abj404-accordion-content input#add_exclude_page_field {
3406 padding: 8px 12px;
3407 border: 1px solid var(--abj404-border, #8c8f94);
3408 border-radius: 4px;
3409 font-size: 14px;
3410 width: 50% !important;
3411 max-width: 400px;
3412 }
3413
3414 .abj404-accordion-content #redirect_to_user_field:focus,
3415 .abj404-accordion-content input#add_exclude_page_field:focus {
3416 border-color: var(--abj404-primary, #2271b1);
3417 box-shadow: 0 0 0 1px var(--abj404-primary, #2271b1);
3418 outline: none;
3419 }
3420
3421 /* Loading spinner for accordion autocomplete */
3422 .abj404-accordion-content #redirect_to_user_field.ui-autocomplete-loading {
3423 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='6' stroke='%23c3c4c7' stroke-width='2' fill='none'/%3E%3Cpath d='M8 2 A6 6 0 0 1 14 8' stroke='%232271b1' stroke-width='2' fill='none' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 8 8' to='360 8 8' dur='0.8s' repeatCount='indefinite'/%3E%3C/path%3E%3C/svg%3E");
3424 background-color: var(--abj404-surface, #fff);
3425 background-repeat: no-repeat;
3426 background-position: right 10px center;
3427 background-size: 16px 16px;
3428 padding-right: 36px;
3429 }
3430
3431 /* Tooltip styling for autocomplete field */
3432 .abj404-accordion-content .lefty-tooltip {
3433 display: inline-flex;
3434 align-items: center;
3435 justify-content: center;
3436 width: 20px;
3437 height: 20px;
3438 background: var(--abj404-surface-alt, #f0f0f1);
3439 border: 1px solid var(--abj404-border, #c3c4c7);
3440 border-radius: 50%;
3441 font-size: 12px;
3442 font-weight: 600;
3443 color: var(--abj404-text-muted, #646970);
3444 cursor: help;
3445 vertical-align: middle;
3446 }
3447
3448 /* Explanation text below autocomplete */
3449 .abj404-accordion-content #redirect_to_user_field_explanation {
3450 display: block;
3451 font-size: 13px;
3452 color: var(--abj404-text-muted, #646970);
3453 margin-bottom: 16px;
3454 font-style: italic;
3455 }
3456
3457 /* Warning text styling */
3458 .abj404-accordion-content #redirect_to_user_field_warning {
3459 display: block;
3460 font-size: 13px;
3461 font-style: italic;
3462 font-weight: bold;
3463 color: var(--abj404-danger-text, #d63638);
3464 margin-bottom: 8px;
3465 }
3466
3467 /* Section title styling for text without labels */
3468 .abj404-accordion-content > label[for] > br:first-of-type {
3469 display: block;
3470 margin-bottom: 8px;
3471 }
3472
3473 /* Make table label cells have better typography */
3474 .abj404-accordion-content table td:first-child label {
3475 font-weight: 600;
3476 font-size: 14px;
3477 color: var(--abj404-text, #2c3338);
3478 display: block;
3479 margin-bottom: 8px;
3480 }
3481
3482 /* Style the explanation paragraph in 404 Page Suggestions */
3483 .abj404-accordion-content > p:first-child:not(:has(label)) {
3484 background: var(--abj404-info-bg, #f0f6fc);
3485 border-left: 4px solid var(--abj404-primary, #2271b1);
3486 padding: 16px 20px;
3487 margin: 0 0 16px;
3488 line-height: 1.6;
3489 font-size: 14px;
3490 color: var(--abj404-text, #2c3338);
3491 }
3492
3493 /* Add bottom border to first row intro text */
3494 .abj404-accordion-content > p:first-child {
3495 border-bottom: 1px solid var(--abj404-border-light, #e0e0e0);
3496 }
3497
3498 /* Make inline styles in table cells less prominent */
3499 .abj404-accordion-content table td div[style*="display: inline"] {
3500 color: var(--abj404-text-muted, #646970);
3501 }
3502
3503 /* Note text below textareas in table cells */
3504 .abj404-accordion-content table td:last-child > br + text,
3505 .abj404-accordion-content table td:last-child > textarea + br + text {
3506 display: block;
3507 margin-top: 8px;
3508 font-size: 13px;
3509 color: var(--abj404-text-muted, #646970);
3510 }
3511
3512 /* Closeable list items for exclude pages */
3513 .abj404-accordion-content .closeable-ul {
3514 list-style: none;
3515 padding: 0;
3516 margin: 0;
3517 }
3518
3519 .abj404-accordion-content .closeable-ul li {
3520 display: inline-flex;
3521 align-items: center;
3522 gap: 4px;
3523 background: var(--abj404-surface-alt, #f0f0f1);
3524 padding: 4px 8px;
3525 border-radius: 4px;
3526 margin: 4px;
3527 font-size: 13px;
3528 }
3529
3530 /* Better styling for button groups */
3531 .abj404-accordion-content button,
3532 .abj404-accordion-content input[type="button"] {
3533 padding: 6px 12px;
3534 border: 1px solid var(--abj404-border, #c3c4c7);
3535 border-radius: 4px;
3536 background: var(--abj404-surface, #fff);
3537 color: var(--abj404-text, #2c3338);
3538 font-size: 13px;
3539 cursor: pointer;
3540 transition: all 0.2s ease;
3541 }
3542
3543 .abj404-accordion-content button:hover,
3544 .abj404-accordion-content input[type="button"]:hover {
3545 background: var(--abj404-surface-hover, #f0f0f1);
3546 border-color: var(--abj404-primary, #2271b1);
3547 }
3548
3549 /* Delete Debug File button - danger styling */
3550 .abj404-accordion-content input#deleteDebugFile,
3551 #deleteDebugFile {
3552 background: #fcf0f1 !important;
3553 border: 1px solid #d63638 !important;
3554 color: #d63638 !important;
3555 font-weight: 500 !important;
3556 padding: 8px 16px !important;
3557 border-radius: 4px !important;
3558 cursor: pointer !important;
3559 }
3560
3561 .abj404-accordion-content input#deleteDebugFile:hover,
3562 #deleteDebugFile:hover {
3563 background: #d63638 !important;
3564 color: #fff !important;
3565 border-color: #d63638 !important;
3566 }
3567
3568 /* Links inside card content - style as action links */
3569 .abj404-card-content p a,
3570 .abj404-card-content td a {
3571 color: var(--abj404-primary, #2271b1) !important;
3572 text-decoration: none !important;
3573 font-weight: 500 !important;
3574 padding: 6px 12px !important;
3575 border: 1px solid var(--abj404-primary, #2271b1) !important;
3576 border-radius: 4px !important;
3577 background: var(--abj404-info-bg, #f0f6fc) !important;
3578 transition: all 0.2s ease !important;
3579 display: inline-block !important;
3580 margin-right: 8px !important;
3581 }
3582
3583 .abj404-card-content p a:hover,
3584 .abj404-card-content td a:hover {
3585 background: var(--abj404-primary, #2271b1) !important;
3586 color: #fff !important;
3587 }
3588
3589 /* ============================================
3590 Accessibility: Link-styled Buttons
3591 ============================================ */
3592
3593 .abj404-link-button {
3594 background: none;
3595 border: none;
3596 padding: 0;
3597 font: inherit;
3598 color: var(--abj404-accent, #2271b1);
3599 text-decoration: none;
3600 cursor: pointer;
3601 }
3602
3603 .abj404-link-button:hover {
3604 text-decoration: underline;
3605 color: var(--abj404-accent-hover, #135e96);
3606 }
3607
3608 .abj404-link-button:focus {
3609 outline: 2px solid var(--abj404-accent, #2271b1);
3610 outline-offset: 2px;
3611 border-radius: 2px;
3612 }
3613
3614 /* ============================================
3615 Accessibility: Focus Indicators
3616 ============================================ */
3617
3618 /* Visible focus indicators for all interactive elements */
3619 a:focus-visible,
3620 button:focus-visible,
3621 input:focus-visible,
3622 select:focus-visible,
3623 textarea:focus-visible,
3624 [tabindex]:focus-visible,
3625 .abj404-tab:focus-visible,
3626 .abj404-content-tab:focus-visible,
3627 .abj404-page-btn:focus-visible,
3628 .abj404-btn:focus-visible,
3629 .abj404-action-link:focus-visible {
3630 outline: 2px solid var(--abj404-accent, #2271b1);
3631 outline-offset: 2px;
3632 }
3633
3634 /* Remove focus outline removal for tabs - they should have visible focus */
3635 .abj404-tab:focus {
3636 outline: 2px solid var(--abj404-accent, #2271b1);
3637 outline-offset: -2px;
3638 box-shadow: none;
3639 }
3640
3641 /* Ensure checkboxes have visible focus */
3642 input[type="checkbox"]:focus-visible {
3643 outline: 2px solid var(--abj404-accent, #2271b1);
3644 outline-offset: 2px;
3645 }
3646
3647 /* Table header links focus */
3648 .abj404-table th a:focus-visible {
3649 outline: 2px solid var(--abj404-accent, #2271b1);
3650 outline-offset: 2px;
3651 border-radius: 2px;
3652 }
3653
3654 /* Modal close button focus */
3655 .abj404-modal-close:focus-visible {
3656 outline: 2px solid var(--abj404-accent, #2271b1);
3657 outline-offset: 2px;
3658 }
3659
3660 /* ============================================
3661 Accessibility: Screen Reader Utilities
3662 ============================================ */
3663
3664 /* Visually hidden but accessible to screen readers */
3665 .screen-reader-text,
3666 .abj404-sr-only {
3667 position: absolute;
3668 width: 1px;
3669 height: 1px;
3670 padding: 0;
3671 margin: -1px;
3672 overflow: hidden;
3673 clip: rect(0, 0, 0, 0);
3674 white-space: nowrap;
3675 border: 0;
3676 }
3677
3678 /* Skip link styles - visible when focused */
3679 .abj404-skip-link {
3680 position: absolute;
3681 top: -40px;
3682 left: 0;
3683 background: var(--abj404-accent, #2271b1);
3684 color: #fff;
3685 padding: 8px 16px;
3686 z-index: 100001;
3687 text-decoration: none;
3688 font-weight: 500;
3689 }
3690
3691 .abj404-skip-link:focus {
3692 top: 0;
3693 }
3694
3695 /* Live region for announcements */
3696 .abj404-live-region {
3697 position: absolute;
3698 width: 1px;
3699 height: 1px;
3700 padding: 0;
3701 margin: -1px;
3702 overflow: hidden;
3703 clip: rect(0, 0, 0, 0);
3704 white-space: nowrap;
3705 border: 0;
3706 }
3707
3708 /* ============================================
3709 Accessibility: Reduced Motion
3710 ============================================ */
3711
3712 @media (prefers-reduced-motion: reduce) {
3713 *,
3714 *::before,
3715 *::after {
3716 animation-duration: 0.01ms !important;
3717 animation-iteration-count: 1 !important;
3718 transition-duration: 0.01ms !important;
3719 scroll-behavior: auto !important;
3720 }
3721
3722 /* Disable specific animations */
3723 .abj404-toast,
3724 .abj404-modal-content,
3725 .abj404-spinner,
3726 .abj404-collapse-icon,
3727 .abj404-accordion-toggle {
3728 animation: none !important;
3729 transition: none !important;
3730 }
3731
3732 /* jQuery slideUp/slideDown alternatives - instant show/hide */
3733 .abj404-accordion-content {
3734 transition: none !important;
3735 }
3736 }
3737
3738 /* ============================================
3739 Accessibility: High Contrast Mode Support
3740 ============================================ */
3741
3742 @media (forced-colors: active) {
3743 .abj404-badge,
3744 .abj404-type-badge {
3745 border: 1px solid currentColor;
3746 }
3747
3748 .abj404-btn,
3749 .abj404-page-btn {
3750 border: 2px solid currentColor;
3751 }
3752
3753 .abj404-table th,
3754 .abj404-table td {
3755 border: 1px solid currentColor;
3756 }
3757 }
3758
3759 /* ============================================
3760 Tools Diagnostics
3761 ============================================ */
3762
3763 .abj404-diagnostics-summary table td {
3764 vertical-align: middle;
3765 }
3766
3767 .abj404-status-pill {
3768 display: inline-block;
3769 padding: 2px 8px;
3770 border-radius: 999px;
3771 font-size: 12px;
3772 font-weight: 600;
3773 line-height: 1.6;
3774 }
3775
3776 .abj404-pill-success {
3777 background: #d1e7dd;
3778 color: #0f5132;
3779 }
3780
3781 .abj404-pill-warning {
3782 background: #fff3cd;
3783 color: #664d03;
3784 }
3785
3786 .abj404-pill-info {
3787 background: #cff4fc;
3788 color: #055160;
3789 }
3790
3791 /* ── Advanced Options collapsible (Edit Redirect page) ─────────────────── */
3792
3793 .abj404-advanced-options {
3794 margin: 16px 0;
3795 border: 1px solid #c3c4c7;
3796 border-radius: 4px;
3797 background: #f6f7f7;
3798 }
3799
3800 .abj404-advanced-options__summary {
3801 padding: 10px 16px;
3802 font-weight: 600;
3803 font-size: 13px;
3804 cursor: pointer;
3805 user-select: none;
3806 list-style: none;
3807 display: flex;
3808 align-items: center;
3809 gap: 6px;
3810 }
3811
3812 .abj404-advanced-options__summary::-webkit-details-marker {
3813 display: none;
3814 }
3815
3816 .abj404-advanced-options__summary::before {
3817 content: '';
3818 font-size: 10px;
3819 transition: transform 0.15s ease;
3820 display: inline-block;
3821 }
3822
3823 .abj404-advanced-options[open] > .abj404-advanced-options__summary::before {
3824 transform: rotate(90deg);
3825 }
3826
3827 .abj404-advanced-options__body {
3828 padding: 20px 28px 24px;
3829 border-top: 1px solid #c3c4c7;
3830 }
3831
3832 /* ── GSC Guided Setup UI ──────────────────────────────────────────────── */
3833
3834 /* Wizard steps list */
3835 .abj404-wizard-steps {
3836 margin: 12px 0 16px 0;
3837 padding-left: 20px;
3838 }
3839 .abj404-wizard-steps li {
3840 margin-bottom: 10px;
3841 line-height: 1.5;
3842 }
3843
3844 /* Copy-URI widget */
3845 .abj404-copy-uri-wrap {
3846 display: flex;
3847 align-items: center;
3848 gap: 8px;
3849 margin-top: 6px;
3850 }
3851 .abj404-copy-uri-wrap code {
3852 flex: 1;
3853 padding: 5px 8px;
3854 background: #f0f0f1;
3855 border: 1px solid #c3c4c7;
3856 border-radius: 3px;
3857 font-size: 12px;
3858 word-break: break-all;
3859 }
3860 .abj404-copy-btn {
3861 padding: 4px 10px;
3862 font-size: 12px;
3863 cursor: pointer;
3864 white-space: nowrap;
3865 }
3866 .abj404-copy-btn--done {
3867 color: #46b450;
3868 border-color: #46b450;
3869 }
3870
3871 /* Status pills */
3872 .abj404-gsc-status {
3873 display: inline-flex;
3874 align-items: center;
3875 gap: 6px;
3876 padding: 4px 12px;
3877 border-radius: 20px;
3878 font-weight: 600;
3879 font-size: 13px;
3880 margin-bottom: 12px;
3881 }
3882 .abj404-gsc-status--green {
3883 background: #edfaef;
3884 color: #1a6830;
3885 border: 1px solid #46b450;
3886 }
3887 .abj404-gsc-status--amber {
3888 background: #fef9e7;
3889 color: #7a5c00;
3890 border: 1px solid #dba617;
3891 }
3892
3893 /* Error box */
3894 .abj404-gsc-error-box {
3895 background: #fef2f2;
3896 border: 1px solid #fca5a5;
3897 border-radius: 4px;
3898 padding: 12px 16px;
3899 margin-bottom: 16px;
3900 color: #991b1b;
3901 }
3902 .abj404-gsc-error-box p {
3903 margin: 0 0 8px;
3904 }
3905 .abj404-gsc-error-box p:last-child {
3906 margin-bottom: 0;
3907 }
3908
3909 /* ============================================
3910 Behavior Tiles (404 Destination)
3911 ============================================ */
3912
3913 .abj404-behavior-tiles {
3914 margin: 0;
3915 }
3916
3917 .abj404-tiles-grid {
3918 display: grid;
3919 grid-template-columns: 1fr 1fr;
3920 gap: 12px;
3921 }
3922
3923 @media (max-width: 600px) {
3924 .abj404-tiles-grid {
3925 grid-template-columns: 1fr;
3926 }
3927 }
3928
3929 .abj404-tile {
3930 position: relative;
3931 border: 2px solid var(--abj404-border, #dcdcde);
3932 border-radius: 8px;
3933 padding: 20px 16px 16px;
3934 cursor: pointer;
3935 transition: border-color 0.15s, background-color 0.15s, box-shadow 0.15s;
3936 background: var(--abj404-surface, #fff);
3937 text-align: center;
3938 }
3939
3940 .abj404-tile:hover {
3941 border-color: var(--abj404-primary, #2271b1);
3942 box-shadow: 0 0 0 1px var(--abj404-primary, #2271b1);
3943 }
3944
3945 .abj404-tile:focus {
3946 outline: 2px solid var(--abj404-primary, #2271b1);
3947 outline-offset: 2px;
3948 }
3949
3950 .abj404-tile.selected {
3951 border-color: var(--abj404-primary, #2271b1);
3952 background: color-mix(in srgb, var(--abj404-primary, #2271b1) 6%, var(--abj404-surface, #fff));
3953 box-shadow: 0 0 0 1px var(--abj404-primary, #2271b1);
3954 }
3955
3956 .abj404-tile-badge {
3957 display: none;
3958 position: absolute;
3959 top: -10px;
3960 right: 12px;
3961 font-size: 11px;
3962 font-weight: 600;
3963 text-transform: uppercase;
3964 letter-spacing: 0.5px;
3965 padding: 2px 8px;
3966 border-radius: 4px;
3967 background: var(--abj404-primary, #2271b1);
3968 color: #fff;
3969 }
3970
3971 .abj404-tile[data-behavior="suggest"] .abj404-tile-badge {
3972 display: block;
3973 }
3974
3975 .abj404-tile-icon {
3976 margin-bottom: 8px;
3977 color: var(--abj404-text-secondary, #646970);
3978 }
3979
3980 .abj404-tile.selected .abj404-tile-icon {
3981 color: var(--abj404-primary, #2271b1);
3982 }
3983
3984 .abj404-tile-title {
3985 font-size: 14px;
3986 font-weight: 600;
3987 margin: 0 0 4px;
3988 color: var(--abj404-text, #1d2327);
3989 }
3990
3991 .abj404-tile-desc {
3992 font-size: 12px;
3993 line-height: 1.4;
3994 margin: 0;
3995 color: var(--abj404-text-secondary, #646970);
3996 }
3997
3998 .abj404-custom-page-picker {
3999 margin-top: 12px;
4000 padding: 12px 16px;
4001 background: var(--abj404-bg-subtle, #f6f7f7);
4002 border-radius: 6px;
4003 border: 1px solid var(--abj404-border, #dcdcde);
4004 }
4005
4006 /* Health status bar on Redirects landing page */
4007 .abj404-health-bar {
4008 display: flex;
4009 align-items: center;
4010 gap: 8px;
4011 padding: 10px 16px;
4012 margin-bottom: 12px;
4013 background: var(--abj404-bg-subtle, #f6f7f7);
4014 border: 1px solid var(--abj404-border, #dcdcde);
4015 border-radius: 6px;
4016 font-size: 13px;
4017 color: var(--abj404-text, #1d2327);
4018 }
4019
4020 .abj404-health-bar a {
4021 margin-left: 4px;
4022 }
4023
4024 .abj404-health-dot {
4025 display: inline-block;
4026 width: 10px;
4027 height: 10px;
4028 border-radius: 50%;
4029 flex-shrink: 0;
4030 }
4031
4032 .abj404-health-green {
4033 background: #00a32a;
4034 }
4035
4036 .abj404-health-yellow {
4037 background: #dba617;
4038 }
4039
4040 /* Used while the logs_hits rollup is being rebuilt: we don't know whether
4041 captured URLs need attention yet, so render an intentional muted dot
4042 instead of an uncolored (visually broken) circle. WordPress admin gray. */
4043 .abj404-health-gray {
4044 background: #8c8f94;
4045 }
4046
4047 /* Header text wrapper — heading + guidance on same line */
4048 .abj404-table-header-text {
4049 display: flex;
4050 align-items: baseline;
4051 gap: 24px;
4052 }
4053
4054 /* Guidance text next to page headings (Simple mode) */
4055 .abj404-guidance-subtitle {
4056 font-size: 13px;
4057 color: var(--abj404-text, #50575e);
4058 font-weight: 400;
4059 line-height: 1.5;
4060 margin: 0;
4061 padding: 6px 12px;
4062 background: var(--abj404-bg-subtle, #f0f6fc);
4063 border-left: 3px solid #2271b1;
4064 border-radius: 2px;
4065 }
4066
4067 /* Suggested destination block on edit page */
4068 .abj404-hidden {
4069 display: none !important;
4070 }
4071
4072 .abj404-suggestion-block {
4073 padding: 16px;
4074 margin-bottom: 16px;
4075 background: #f0f6fc;
4076 border: 1px solid #c3c4c7;
4077 border-radius: 6px;
4078 }
4079
4080 .abj404-suggestion-label {
4081 font-size: 12px;
4082 font-weight: 600;
4083 text-transform: uppercase;
4084 letter-spacing: 0.5px;
4085 color: #646970;
4086 margin-bottom: 8px;
4087 }
4088
4089 .abj404-suggestion-content {
4090 display: flex;
4091 align-items: center;
4092 gap: 10px;
4093 margin-bottom: 12px;
4094 font-size: 15px;
4095 }
4096
4097 .abj404-suggestion-actions {
4098 display: flex;
4099 gap: 8px;
4100 }
4101
4102 body.abj404-dark-mode .abj404-guidance-subtitle {
4103 color: #b0b0b0;
4104 background: var(--abj404-bg-subtle, #1a2332);
4105 border-left-color: #5aa2ff;
4106 }
4107
4108 body.abj404-dark-mode .abj404-suggestion-block {
4109 background: #1a2332;
4110 border-color: #3d3d3d;
4111 }
4112
4113 body.abj404-dark-mode .abj404-suggestion-label {
4114 color: #a0a0a0;
4115 }
4116