PluginProbe
MLSImport: IDX Plugin & MLS Plugin for Real Estate Listings / 7.2.1
MLSImport: IDX Plugin & MLS Plugin for Real Estate Listings v7.2.1
7.2.1 7.2 7.1.2 7.1.1 7.1 7.0.4 7.0.6 7.0.7 6.3.8 6.3.7 6.3.6 6.3.5 6.3.4 6.3.3 6.3.1 trunk 5.7.3 5.7.5 5.8.1 5.8.2 5.8.3 5.8.4 5.8.6 6.0.4 6.0.5 All 36 releases
← All changes | admin/css/mlsimport-admin.css +612 -187 7.0.47.2.1 View file →
@@ -4,39 +4,61 @@
4 4 * ---------------------------------------------------------------------------
5 5 * Main admin stylesheet for the MLSImport plugin. Styles the wp-admin screens:
6 6 * the import-task metaboxes, plugin settings/tools UI, field-mapping fieldsets,
7 7 * progress bars and log viewer, the 2025 card/tab layout, custom form controls
8 - * (switches, styled checkboxes, gradient buttons), the deactivation exit-survey
8 + * (switches, styled checkboxes, pill buttons), the deactivation exit-survey
9 9 * modal, and the activity-log / import-history banners.
10 10 * Also carries a few per-theme admin tweaks (WpResidence, WpEstate, Houzez,
11 11 * Real Homes) grouped under their own section headers below.
12 12 * CSS custom properties (design tokens) live in the :root block.
13 + * Shared account notices use the same amber panel and large heading for every
14 + * login failure, with a high-contrast plans button when a subscription is needed.
13 15 */
14 16
15 17 /* Base styling */
16 -/* Design tokens: brand colours, status colours, text/border/background
17 - palette, shadows, radius and transition speed reused throughout. */
18 +/* Design tokens: "Sunny Bento" palette shared with the mlsimport.com portal —
19 + warm near-black primary, orange accent, cream/warm-grey surfaces, pastel
20 + status colours (mint/butter/soft-red), soft shadows and rounded radii. */
18 21 :root {
19 - --primary-color: #4F46E5;
20 - --primary-hover: #4338CA;
21 - --success-color: #10B981;
22 - --error-color: #EF4444;
23 - --warning-color: #F59E0B;
24 - --text-primary: #111827;
25 - --text-secondary: #4B5563;
26 - --text-light: #6B7280;
27 - --border-color: #DCDFE4;
28 - --background-light: #F9FAFB;
22 + --primary-color: #1c1917;
23 + --primary-hover: #33302b;
24 + --accent-color: #e85d3c;
25 + --accent-soft: #fde4d8;
26 + --success-color: #2faa6a;
27 + --success-soft: #b8e6cc;
28 + --success-deep: #1c5c3a;
29 + --error-color: #c02617;
30 + --error-soft: #fbe6e3;
31 + --error-hover: #9a1e12;
32 + --warning-color: #dd9211;
33 + --warning-soft: #fae39a;
34 + --warning-deep: #7a5410;
35 + --text-primary: #1c1917;
36 + --text-secondary: #6b6358;
37 + --text-light: #9a9285;
38 + --border-color: rgba(28,25,23,0.12);
39 + --background-light: #faf8f3;
40 + --background-soft: #f3efe7;
29 41 --background-white: #FFFFFF;
30 42 --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
31 43 --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
32 - --border-radius: 8px;
44 + --border-radius: 10px;
45 + --radius-card: 18px;
46 + --radius-pill: 999px;
33 47 --transition-speed: 0.2s;
34 48 }
35 49
50 +/* Cream page canvas on the plugin's own admin screens only (menu/submenu pages
51 + whose body class contains "_page_mlsimport", plus the Import Tasks CPT list).
52 + Other wp-admin screens keep the core grey background. */
53 +body.wp-admin[class*="_page_mlsimport"],
54 +body.wp-admin.post-type-mlsimport_item {
55 + background: var(--background-light);
56 +}
36 57
37 58
38 59
60 +
39 61 /*Real Homes admin adjusments*/
40 62
41 63 /* Constrain the thumbnail column image on the Real Homes property list table. */
42 64 .post-type-property .column-property-thumbnail img{
@@ -65,14 +87,14 @@
65 87 margin: 10px 0px 5px 0px;
66 88 }
67 89
68 90 .mls_mandatory_fields{
69 - color: #888;
91 + color: #6b6358;
70 92 margin-bottom: 10px;
71 93 max-width: 600px;
72 94 }
73 95 .mandatory_fields_wrapper_exp{
74 - color: #888;
96 + color: #6b6358;
75 97 max-width: 600px;
76 98 }
77 99
78 100 /* Form field label (note: overridden later by the 2025 .mlsimport-label rule). */
@@ -124,9 +146,9 @@
124 146 }
125 147
126 148
127 149 #mlsimport_mls_name_front{
128 - border-color: #ccc;
150 + border-color: rgba(28,25,23,0.18);
129 151 min-width: 450px;
130 152 padding: 5px 12px;
131 153 }
132 154
@@ -142,9 +164,9 @@
142 164 display: inline-flex;
143 165 flex-direction: column;
144 166 align-items: flex-start;
145 167 isolation: isolate;
146 - border: 1px solid #DCDFE4;
168 + border: 1px solid rgba(28,25,23,0.18);
147 169 box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
148 170 border-radius: 8px;
149 171 flex: none;
150 172 align-self: stretch;
@@ -154,11 +176,11 @@
154 176 }
155 177
156 178 /* Grey rounded panel wrapping a group of import parameters. */
157 179 .mlsimport_param_wrapper{
158 - background-color: #f5f5f5;
180 + background-color: #f3efe7;
159 181 padding:20px;
160 - border-radius: 5px;
182 + border-radius: 14px;
161 183 }
162 184
163 185 .postbox .inside .mlsimport_param_wrapper h2{
164 186 font-size: 20px!important;
@@ -190,9 +212,9 @@
190 212 }
191 213
192 214 /* Zebra-stripe alternating fieldsets in the mandatory-fields list. */
193 215 .mandatory_fields_wrapper .mlsimport-fieldset:nth-child(even){
194 - background-color: #f7f7f7;
216 + background-color: #f3efe7;
195 217 }
196 218
197 219 .mlsimport_auto_switch{
198 220 margin: 0px;
@@ -200,9 +222,9 @@
200 222 }
201 223
202 224 /* "Select all" pill button (pink); darker on hover. */
203 225 .mls_import_selec_all_class {
204 - background-color: #cc3459;
226 + background-color: var(--primary-color);
205 227 color: #fff;
206 228 display: inline-block;
207 229 padding: 5px;
208 230 margin-right: 10px;
@@ -208,13 +230,13 @@
208 230 margin-right: 10px;
209 231 margin-bottom: 5px;
210 232 cursor: pointer;
211 233 padding: 7px 14px;
212 - border-radius:5px;
234 + border-radius: var(--radius-pill);
213 235 }
214 236
215 237 .mls_import_selec_all_class:hover {
216 - background-color: #a31034;
238 + background-color: #33302b;
217 239 }
218 240
219 241 /* ===== Import progress bar + transfer controls + live log ===== */
220 242
@@ -226,11 +248,12 @@
226 248 }
227 249
228 250 /* "Stop transfer" button (red); note a later rule overrides display to none. */
229 251 #mlsimport_transfer_stop{
230 - padding: 7px;
231 - background: #af3737;
252 + padding: 7px 16px;
253 + background: #c02617;
232 254 color: #fff;
255 + border-radius: var(--radius-pill);
233 256 display: inline-block;
234 257 margin-top: 10px;
235 258 cursor: pointer;
236 259 }
@@ -238,9 +261,9 @@
238 261 /* Progress fill bar — width is animated from 0% via JS as items import. */
239 262 #mlsimport_myBar{
240 263 width: 0%;
241 264 height: 20px;
242 - background-color: green;
265 + background-color: #e85d3c;
243 266 }
244 267
245 268 #mlsimport_myProgress_wrapper{
246 269 width:800px;
@@ -250,9 +273,9 @@
250 273
251 274 /* Track background for the "monster" (full-width) progress bar. */
252 275 #mlsimport_monster_myProgress {
253 276 width: 100%;
254 - background-color: #cbc8c8;
277 + background-color: #efe7dc;
255 278 }
256 279 /* Hide the stop button by default (JS shows it while a transfer runs). */
257 280 #mlsimport_transfer_stop{
258 281 display: none;
@@ -260,9 +283,10 @@
260 283
261 284 /* Scrollable live import log panel. */
262 285 #log_container{
263 286 width: 750px;
264 - background: #f1f1f1;
287 + background: #f3efe7;
288 + border-radius: var(--border-radius);
265 289 padding: 15px;
266 290 margin-top: 15px;
267 291 max-height: 500px;
268 292 overflow-y: auto;
@@ -293,15 +317,10 @@
293 317 max-width: 800px;
294 318 margin-top: 5px;
295 319 }
296 320
297 -.mlsimport_tool_field_item_wrapper{
298 - margin-bottom: 30px;
299 -}
300 -#mlsimport-disable-history,
301 -#mlsimport-disable-logs{
302 - margin-top: 10px;
303 -}
321 +/* Tools-tab blocks are defined at the end of this file, so they win ties
322 + against the later 2025 overrides. */
304 323
305 324
306 325
307 326
@@ -327,23 +346,85 @@
327 346 box; individual variants below re-colour it. */
328 347 .mlsimport_notification,
329 348 .mlsimport_validated,
330 349 .mlsimport_warning{
331 - background: #cc3459;
350 + background: var(--error-soft);
351 + color: var(--error-color);
352 + padding: 12px 16px;
353 + margin-bottom: 10px;
354 + border-radius: var(--border-radius);
355 +}
356 +
357 +
358 +/* Account login failures share one full-width notice and typography.
359 + The two-class selector wins over each screen's ordinary warning styles. */
360 +.mlsimport_warning.mlsimport-account-notice {
361 + box-sizing: border-box;
362 + width: 100%;
363 + margin: 20px 0;
364 + padding: 24px;
365 + border: 1px solid #d97706;
366 + border-left: 6px solid #b45309;
367 + border-radius: 12px;
368 + background: #fff4d6;
369 + color: #451a03;
370 + font-size: 16px;
371 + font-weight: 400;
372 + line-height: 1.6;
373 +}
374 +
375 +.mlsimport-account-notice .mlsimport-account-notice-title {
376 + display: block;
377 + margin: 0 0 8px;
378 + color: #451a03;
379 + font-size: 22px;
380 + font-weight: 700;
381 + line-height: 1.3;
382 +}
383 +
384 +.mlsimport_warning.mlsimport-account-notice p {
385 + margin: 0;
386 + font-size: 16px;
387 + line-height: 1.6;
388 +}
389 +
390 +/* A dedicated button class keeps both admin surfaces visually consistent. */
391 +.mlsimport-account-subscription a.mlsimport-account-subscription-action {
392 + display: inline-flex;
393 + align-items: center;
394 + justify-content: center;
395 + box-sizing: border-box;
396 + min-height: 44px;
397 + margin-top: 16px;
398 + padding: 10px 22px;
399 + border: 2px solid #1c1917;
400 + border-radius: 8px;
401 + background: #1c1917;
332 402 color: #fff;
333 - padding: 10px;
334 - margin-bottom: 10px;
335 - border-radius: 2px;
403 + font-size: 15px;
404 + font-weight: 700;
405 + line-height: 1.4;
406 + text-decoration: none;
336 407 }
337 408
409 +.mlsimport-account-subscription a.mlsimport-account-subscription-action:hover {
410 + background: #44403c;
411 + border-color: #44403c;
412 + color: #fff;
413 +}
338 414
415 +.mlsimport-account-subscription a.mlsimport-account-subscription-action:focus-visible {
416 + outline: 3px solid #92400e;
417 + outline-offset: 3px;
418 +}
419 +
339 420 /* Indigo "populate" info banner. */
340 421 .mlsimport_populate_warning{
341 - background: #4f46e5;
422 + background: var(--primary-color);
342 423 color: #fff;
343 - padding: 10px;
424 + padding: 12px 16px;
344 425 margin-bottom: 10px;
345 - border-radius: 2px;
426 + border-radius: var(--border-radius);
346 427 }
347 428
348 429
349 430 /* "Validated" variant: amber-tinted background with a warning left border. */
@@ -350,9 +431,9 @@
350 431 .mlsimport_validated{
351 432 padding: 0.75rem 1rem;
352 433 margin-bottom: 1rem;
353 434 border-radius: var(--border-radius);
354 - background-color: rgba(245, 158, 11, 0.1);
435 + background-color: rgba(250, 227, 154, 0.4);
355 436 border-left: 4px solid var(--warning-color);
356 437 color: var(--text-primary);
357 438 }
358 439
@@ -357,14 +438,16 @@
357 438 }
358 439
359 440
360 441 .mlsimport_notification{
361 - background: #a5862b;
442 + background: var(--warning-soft);
443 + color: var(--warning-deep);
362 444 }
363 445
364 446
365 447 #mlsimport_item_metaboxes-sectionid .mlsimport_notification{
366 - background: #a5862b;
448 + background: var(--warning-soft);
449 + color: var(--warning-deep);
367 450 max-width: 500px;
368 451 }
369 452
370 453
@@ -370,12 +453,12 @@
370 453
371 454 /* Scrollable status/output box inside the import-task metabox. */
372 455 #mlsimport_item_status{
373 456 width: auto;
374 - background-color: #f5f5f5;
457 + background-color: #f3efe7;
375 458 overflow-y: scroll;
376 459 padding: 10px;
377 - border-radius: 5px;
460 + border-radius: var(--border-radius);
378 461 margin-bottom: 15px;
379 462 }
380 463
381 464
@@ -403,9 +486,9 @@
403 486 top: 0;
404 487 left: 0;
405 488 right: 0;
406 489 bottom: 0;
407 - background-color: #ccc;
490 + background-color: rgba(28,25,23,0.18);
408 491 -webkit-transition: .4s;
409 492 transition: .4s;
410 493 }
411 494
@@ -422,13 +505,13 @@
422 505 }
423 506
424 507 /* Checked state: blue track, and the knob slides right (translateX below). */
425 508 .mlsimport_switch input:checked + .slider {
426 - background-color: #2196F3;
509 + background-color: #e85d3c;
427 510 }
428 511
429 512 .mlsimport_switch input:focus + .slider {
430 - box-shadow: 0 0 1px #2196F3;
513 + box-shadow: 0 0 1px #e85d3c;
431 514 }
432 515
433 516 .mlsimport_switch input:checked + .slider:before {
434 517 -webkit-transform: translateX(26px);
@@ -455,26 +538,19 @@
455 538 #mlsimport-delete-prop{
456 539 margin-top: 15px;
457 540 }
458 541
459 -/* Provider-specific credential fields hidden by default; JS reveals them when
460 - the matching MLS provider (Trestle / ConnectMLS) is selected. */
461 -.fieldset_mlsimport_tresle_client_id,
462 -.fieldset_mlsimport_tresle_client_secret{
463 - display:none;
464 -}
542 +/* Provider-specific credential fieldsets are shown/hidden per selected MLS by
543 + PHP at render time (inline display:none in the credentials partials) and by
544 + mlsimport_token_on_load() on in-page MLS changes. No CSS default-hide here:
545 + a stylesheet rule would fight the server-rendered visibility. */
465 546
466 -.fieldset_mlsimport_connectmls_username,
467 -.fieldset_mlsimport_connectmls_password{
468 - display:none;
469 -}
470 547
471 548
472 549
473 -
474 550 .mlsimport_param_wrapper input[type=text]{
475 551 min-width: 450px;
476 - border-color: #ccc;
552 + border-color: rgba(28,25,23,0.18);
477 553 padding: 5px 12px;
478 554 }
479 555
480 556 #mlsimport_item_min_price,
@@ -486,10 +562,10 @@
486 562
487 563 /* Sign-up / account CTA box shown when no account is connected. */
488 564 .mlsimport_signup{
489 565 display: inline-block;
490 - background-color: #f0f0f1;
491 - border-radius: 5px;
566 + background-color: #f3efe7;
567 + border-radius: 14px;
492 568 padding: 20px;
493 569 font-size: 15px;
494 570 margin-bottom: 15px;
495 571 }
@@ -526,9 +602,9 @@
526 602 .content-nav-tab{
527 603 display:none;
528 604 padding: 30px 15px;
529 605 background: #fff;
530 - border: 1px solid #ccc;
606 + border: 1px solid rgba(28,25,23,0.18);
531 607 border-top: 0px;
532 608 }
533 609
534 610 /* Active tab panel becomes a visible flex container. */
@@ -547,10 +623,10 @@
547 623 align-items: center;
548 624 padding: 0px;
549 625
550 626 background: #FFFFFF;
551 - box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.06), 0px 5px 22px rgba(0, 0, 0, 0.04);
552 - border-radius: 10px;
627 + box-shadow: 0px 0px 0px 1px rgba(28, 25, 23, 0.05), 0px 5px 22px rgba(28, 25, 23, 0.05);
628 + border-radius: var(--radius-card);
553 629 flex: none;
554 630 order: 0;
555 631 flex-grow: 1;
556 632
@@ -575,23 +651,33 @@
575 651
576 652 .nav-tab-wrapper.mlsimport-tab-wrapper .nav-tab {
577 653
578 654 text-transform: uppercase;
579 - color: #23202c;
655 + color: var(--text-secondary);
580 656 padding: 15px 25px;
581 - background: #f1f1f1;
582 - border-top-right-radius:5px;
583 - border-top-left-radius: 5px;
657 + background: #f3efe7;
658 + border-top-right-radius: 12px;
659 + border-top-left-radius: 12px;
584 660
585 661 padding: 15px 30px;
586 662 background: #fff;
587 - border: 1px solid #ccc;
663 + border: 1px solid var(--border-color);
664 + font-weight: 500;
665 + letter-spacing: 0.04em;
666 + transition: color var(--transition-speed), background var(--transition-speed);
588 667 }
589 668
590 -/* Active tab: brand indigo background, white text. */
669 +.nav-tab-wrapper.mlsimport-tab-wrapper .nav-tab:hover {
670 + color: var(--text-primary);
671 + background: var(--background-soft);
672 +}
673 +
674 +/* Active tab: warm near-black background, white text (portal "seg" pattern). */
591 675 .nav-tab-wrapper.mlsimport-tab-wrapper .nav-tab.nav-tab-active{
592 - background-color: #635BFF;
676 + background-color: var(--primary-color);
593 677 color: #fff;
678 + border-color: var(--primary-color);
679 + font-weight: 600;
594 680 }
595 681
596 682 .content-nav-tab.mlsimport_2025_card form{
597 683 max-width: 500px;
@@ -596,13 +682,8 @@
596 682 .content-nav-tab.mlsimport_2025_card form{
597 683 max-width: 500px;
598 684 }
599 685
600 -.content-nav-tab.mlsimport_2025_card form.mlsimport-import-fields-form{
601 - max-width: 100%;
602 -}
603 -
604 -
605 686 .mlsimport_2025_card_admin_options {
606 687 display: flex;
607 688 flex-direction: row;
608 689 }
@@ -642,9 +723,9 @@
642 723 left: 0;
643 724 top: 0;
644 725 width: 30px;
645 726 height: 30px;
646 - background-color: #635bff;
727 + background-color: var(--accent-color);
647 728 color: white;
648 729 border-radius: 50%;
649 730 display: flex;
650 731 align-items: center;
@@ -666,9 +747,9 @@
666 747 flex-direction: column;
667 748 align-items: flex-start;
668 749 isolation: isolate;
669 750 background: #FFFFFF;
670 - border: 1px solid #DCDFE4;
751 + border: 1px solid rgba(28,25,23,0.18);
671 752 box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
672 753 border-radius: 8px;
673 754 flex: none;
674 755 order: 1;
@@ -693,9 +774,9 @@
693 774 display: inline-flex;
694 775 flex-direction: column;
695 776 align-items: flex-start;
696 777 isolation: isolate;
697 - border: 1px solid #DCDFE4;
778 + border: 1px solid rgba(28,25,23,0.18);
698 779 box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
699 780 border-radius: 8px;
700 781 flex: none;
701 782 align-self: stretch;
@@ -708,20 +789,20 @@
708 789 /* Default bordered look for fieldset inputs and the import "select all" boxes. */
709 790 .mlsimport-fieldset-wrapper input,
710 791 input[type=checkbox].mlsimport_select_import_admin_all,
711 792 input[type=checkbox].mlsimport_select_import_all {
712 - border: 1px solid #ccc;
793 + border: 1px solid rgba(28,25,23,0.18);
713 794 border-radius: 2px;
714 795 background-color: #fff!important;
715 796 }
716 797
717 798
718 -/* ===== Gradient action buttons =====
719 - Primary (indigo), save_data (green), secondary (dark), warning_action
720 - (amber) and error_action (red) share the same gradient + inset-shadow
721 - recipe, each with a matching :hover that deepens the shadow. */
799 +/* ===== Pill action buttons (Sunny Bento) =====
800 + Portal button standard: dark solid primary, pastel intents on top of it —
801 + save_data (mint), secondary (white + border), warning_action (butter) and
802 + error_action (solid red that darkens on hover). All are full pills. */
722 803
723 -/* Primary button: indigo gradient with layered inset highlights. */
804 +/* Primary button: solid warm near-black pill. */
724 805 .button.mlsimport_button{
725 806 font-size: 14px;
726 807 position: relative;
727 808 display: flex;
@@ -727,82 +808,122 @@
727 808 display: flex;
728 809 flex-direction: column;
729 810 justify-content: center;
730 811 align-items: center;
731 - padding: 7px 30px;
732 - background: linear-gradient(180deg, #635BFF 0%, #4E36F5 100%);
733 - border: 1px solid #15B79F;
734 - border-radius: 8px;
812 + padding: 9px 24px;
813 + line-height: 1.5;
814 + min-height: 0;
815 + background: var(--primary-color);
816 + border: 1px solid var(--primary-color);
817 + border-radius: var(--radius-pill);
735 818 color:#fff;
736 819 flex: none;
737 820 order: 1;
738 821 flex-grow: 0;
739 - box-shadow: rgba(0, 0, 0, 0.08) 0px 1px 2px 0px, rgb(78, 54, 245) 0px 0px 0px 1px inset, rgba(255, 255, 255, 0.16) 0px 2px 0px 0px inset;
822 + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
823 + transition: background var(--transition-speed), box-shadow var(--transition-speed);
740 824 }
741 825
742 826 .button.mlsimport_button:hover {
743 - background: linear-gradient(180deg, #635BFF 0%, #4E36F5 100%);
827 + background: var(--primary-hover);
744 828 color:#fff;
745 - border: 1px solid #15B79F;
746 - box-shadow: 0px 3px 14px rgba(0, 0, 0, 0.08), inset 0px 0px 0px 1px #4e36f5,inset 0px 2px 0px 0px rgba(255, 255, 255, 0.16) , inset 0px 6px 10px 0px rgba(255, 255, 255, 0.10);
829 + border: 1px solid var(--primary-hover);
830 + box-shadow: 0 10px 24px -10px rgba(0, 0, 0, 0.45);
747 831 }
748 832
749 -/* Save button: green success gradient. */
750 -.button.save_data {
751 - background: linear-gradient(180deg, var(--success-color) 0%, #0C8A61 100%);
752 - border: 1px solid var(--success-color);
753 - box-shadow: rgba(0, 0, 0, 0.08) 0px 1px 2px 0px, var(--success-color) 0px 0px 0px 1px inset, rgba(255, 255, 255, 0.16) 0px 2px 0px 0px inset;
833 +/* Save button: mint pill with deep-green text. */
834 +.button.save_data,
835 +.wp-core-ui .button.mlsimport_button.save_data {
836 + background: var(--success-soft);
837 + border: 1px solid var(--success-soft);
838 + color: var(--success-deep);
839 + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.06);
754 840 }
755 841
756 -.button.save_data:hover {
757 - background: linear-gradient(180deg, var(--success-color) 0%, #0C8A61 100%);
758 - border: 1px solid var(--success-color);
759 - box-shadow: 0px 3px 14px rgba(0, 0, 0, 0.08), inset 0px 0px 0px 1px var(--success-color), inset 0px 2px 0px 0px rgba(255, 255, 255, 0.16), inset 0px 6px 10px 0px rgba(255, 255, 255, 0.10);
842 +.button.save_data:hover,
843 +.wp-core-ui .button.mlsimport_button.save_data:hover {
844 + background: #a5dfc0;
845 + border: 1px solid #a5dfc0;
846 + color: var(--success-deep);
847 + box-shadow: 0 8px 20px -10px rgba(28, 92, 58, 0.5);
760 848 }
761 849
762 850
763 -/* Secondary button: dark slate gradient. */
764 -.button.secondary {
765 - background: linear-gradient(180deg, #32383e 0%, #25292e 100%);
766 - border: 1px solid #32383e;
767 - color: #fff;
768 - box-shadow: rgba(0, 0, 0, 0.08) 0px 1px 2px 0px, rgb(50, 56, 62) 0px 0px 0px 1px inset, rgba(255, 255, 255, 0.16) 0px 2px 0px 0px inset;
851 +/* Secondary button: white surface pill with hairline border. */
852 +.button.secondary,
853 +.wp-core-ui .button.mlsimport_button.secondary {
854 + background: var(--background-white);
855 + border: 1px solid var(--border-color);
856 + /* !important needed: wpresidence-core/css/wpresidence2025.css line 817-818
857 + forces white text + inset shadow with !important on .button.secondary. */
858 + color: var(--text-primary) !important;
859 + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05) !important;
860 + border-radius: var(--radius-pill);
769 861 }
770 -
771 - .button.secondary:hover {
772 - background: linear-gradient(180deg, #32383e 0%, #25292e 100%);
773 - border: 1px solid #32383e;
774 - color: #fff;
775 - box-shadow: 0px 3px 14px rgba(0, 0, 0, 0.08), inset 0px 0px 0px 1px #32383e, inset 0px 2px 0px 0px rgba(255, 255, 255, 0.16), inset 0px 6px 10px 0px rgba(255, 255, 255, 0.10);
862 +
863 + .button.secondary:hover,
864 + .wp-core-ui .button.mlsimport_button.secondary:hover {
865 + background: var(--background-soft);
866 + border: 1px solid var(--border-color);
867 + color: var(--text-primary) !important;
868 + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05) !important;
869 + border-radius: var(--radius-pill);
776 870 }
777 871
872 +/* Field-selector bulk bar: only "Select all" stays the dark primary; the
873 + "Select none" twin (same classes in markup) is demoted to the white
874 + secondary look via its ID so the toolbar has a single primary action. */
875 +#mlsimport-select-none-import.button.mlsimport_button {
876 + background: var(--background-white);
877 + border: 1px solid var(--border-color);
878 + color: var(--text-primary);
879 + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
880 +}
881 +#mlsimport-select-none-import.button.mlsimport_button:hover {
882 + background: var(--background-soft);
883 + border: 1px solid var(--border-color);
884 + color: var(--text-primary);
885 + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
886 +}
778 887
779 888
780 - /* Warning button: amber gradient. */
781 - .button.warning_action {
782 - background: linear-gradient(180deg, #fb9c0c 0%, #d0810a 100%);
783 - border: 1px solid #fb9c0c;
784 - box-shadow: rgba(0, 0, 0, 0.08) 0px 1px 2px 0px, #fb9c0c 0px 0px 0px 1px inset, rgba(255, 255, 255, 0.16) 0px 2px 0px 0px inset;
889 +
890 + /* Warning button: butter pill with deep-amber text. */
891 + .button.warning_action,
892 + .wp-core-ui .button.mlsimport_button.warning_action {
893 + background: var(--warning-soft);
894 + border: 1px solid var(--warning-soft);
895 + color: var(--warning-deep);
896 + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.06);
785 897 }
786 -
787 - .button.warning_action:hover {
788 - background: linear-gradient(180deg, #fb9c0c 0%, #d0810a 100%);
789 - border: 1px solid #fb9c0c;
790 - box-shadow: 0px 3px 14px rgba(0, 0, 0, 0.08), inset 0px 0px 0px 1px #fb9c0c, inset 0px 2px 0px 0px rgba(255, 255, 255, 0.16), inset 0px 6px 10px 0px rgba(255, 255, 255, 0.10);
898 +
899 + .button.warning_action:hover,
900 + .wp-core-ui .button.mlsimport_button.warning_action:hover {
901 + background: #f3d87c;
902 + border: 1px solid #f3d87c;
903 + color: var(--warning-deep);
904 + box-shadow: 0 8px 20px -10px rgba(122, 84, 16, 0.45);
791 905 }
792 906
793 907
794 - /* Error/danger button: red gradient. */
795 - .button.error_action {
796 - background: linear-gradient(180deg, #bb241a 0%, #9b1e16 100%);
797 - border: 1px solid #bb241a;
798 - box-shadow: rgba(0, 0, 0, 0.08) 0px 1px 2px 0px, #bb241a 0px 0px 0px 1px inset, rgba(255, 255, 255, 0.16) 0px 2px 0px 0px inset;
908 + /* Error/danger button: solid red pill with white text, darkening on hover -
909 + the same shape as the primary button (solid -> darker + lifted shadow), just
910 + in the danger colour. It reads as a real action at rest instead of waiting
911 + for a hover to look like one. */
912 + .button.error_action,
913 + .wp-core-ui .button.mlsimport_button.error_action {
914 + background: var(--error-color);
915 + border: 1px solid var(--error-color);
916 + color: #fff;
917 + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
799 918 }
800 -
801 - .button.error_action:hover {
802 - background: linear-gradient(180deg, #bb241a 0%, #9b1e16 100%);
803 - border: 1px solid #bb241a;
804 - box-shadow: 0px 3px 14px rgba(0, 0, 0, 0.08), inset 0px 0px 0px 1px #bb241a, inset 0px 2px 0px 0px rgba(255, 255, 255, 0.16), inset 0px 6px 10px 0px rgba(255, 255, 255, 0.10);
919 +
920 + .button.error_action:hover,
921 + .wp-core-ui .button.mlsimport_button.error_action:hover {
922 + background: var(--error-hover);
923 + border: 1px solid var(--error-hover);
924 + color: #fff;
925 + box-shadow: 0 10px 24px -10px rgba(192, 38, 23, 0.55);
805 926 }
806 927
807 928
808 929
@@ -843,9 +964,9 @@
843 964 top: 0;
844 965 left: 0;
845 966 width: 24px;
846 967 height: 24px;
847 - background-image: url("data:image/svg+xml;utf8,<svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path clip-rule='evenodd' d='M8 2C4.68629 2 2 4.68629 2 8V16C2 19.3137 4.68629 22 8 22H16C19.3137 22 22 19.3137 22 16V8C22 4.68629 19.3137 2 16 2H8ZM8 4C5.79086 4 4 5.79086 4 8V16C4 18.2091 5.79086 20 8 20H16C18.2091 20 20 18.2091 20 16V8C20 5.79086 18.2091 4 16 4H8Z' fill='%23DCDFE4' fill-rule='evenodd'></path></svg>");
968 + background-image: url("data:image/svg+xml;utf8,<svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path clip-rule='evenodd' d='M8 2C4.68629 2 2 4.68629 2 8V16C2 19.3137 4.68629 22 8 22H16C19.3137 22 22 19.3137 22 16V8C22 4.68629 19.3137 2 16 2H8ZM8 4C5.79086 4 4 5.79086 4 8V16C4 18.2091 5.79086 20 8 20H16C18.2091 20 20 18.2091 20 16V8C20 5.79086 18.2091 4 16 4H8Z' fill='%23D8D2C6' fill-rule='evenodd'></path></svg>");
848 969 background-size: 24px 24px;
849 970 background-position: center;
850 971 background-repeat: no-repeat;
851 972 margin: 0px;
@@ -853,9 +974,9 @@
853 974
854 975 /* Checked state swaps in the filled indigo box + white tick SVG. */
855 976 input[type=checkbox].mlsimport-import-checkbox:checked:before,
856 977 input[type=checkbox].mlsimport-admin-checkbox:checked:before {
857 - background-image: url("data:image/svg+xml;utf8,<svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><rect fill='%23635bff' height='20' rx='6' width='20' x='2' y='2'></rect><path d='M7.55566 11.7222L10.5186 14.7778L16.4446 8.66669' stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'></path></svg>");
978 + background-image: url("data:image/svg+xml;utf8,<svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><rect fill='%23e85d3c' height='20' rx='6' width='20' x='2' y='2'></rect><path d='M7.55566 11.7222L10.5186 14.7778L16.4446 8.66669' stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'></path></svg>");
858 979 }
859 980
860 981
861 982
@@ -869,9 +990,9 @@
869 990 transform: translate(-50%, -50%);
870 991 z-index: 9999;
871 992 background: #fff;
872 993 padding: 40px;
873 - border-radius: 10px;
994 + border-radius: var(--radius-card);
874 995 /* border: 1px solid #ddd; */
875 996 box-shadow: 0 7px 54px rgba(0, 0, 0, 0.15);
876 997 width: 500px;
877 998 min-height: 200px;
@@ -889,9 +1010,9 @@
889 1010 }
890 1011
891 1012 .mlsimport-save-progress-bar {
892 1013 height: 10px;
893 - background: #eee;
1014 + background: #f3efe7;
894 1015 margin-top: 5px;
895 1016 border-radius: 5px;
896 1017 overflow: hidden;
897 1018 }
@@ -899,9 +1020,9 @@
899 1020 /* Animated fill inside the save progress bar (width driven by JS). */
900 1021 .mlsimport-save-progress-bar .progress-fill {
901 1022 width: 0%;
902 1023 height: 100%;
903 - background: #635BFF;
1024 + background: var(--accent-color);
904 1025 border-radius: 5px;
905 1026 transition: width 0.3s;
906 1027 }
907 1028
@@ -927,9 +1048,9 @@
927 1048 }
928 1049 .mlsimport-es-card {
929 1050 position: relative;
930 1051 background: #fff;
931 - border-radius: 6px;
1052 + border-radius: var(--radius-card);
932 1053 padding: 26px 28px;
933 1054 width: 460px;
934 1055 max-width: 92vw;
935 1056 box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
@@ -939,9 +1060,9 @@
939 1060 font-size: 18px;
940 1061 }
941 1062 .mlsimport-es-intro {
942 1063 margin: 0 0 16px;
943 - color: #555;
1064 + color: #6b6358;
944 1065 }
945 1066 /* Selectable reason row in the exit survey. */
946 1067 .mlsimport-es-option {
947 1068 display: block;
@@ -946,14 +1067,14 @@
946 1067 .mlsimport-es-option {
947 1068 display: block;
948 1069 padding: 8px 10px;
949 1070 margin: 4px 0;
950 - border: 1px solid #e0e0e0;
951 - border-radius: 4px;
1071 + border: 1px solid rgba(28,25,23,0.18);
1072 + border-radius: var(--border-radius);
952 1073 cursor: pointer;
953 1074 }
954 1075 .mlsimport-es-option:hover {
955 - background: #f6f6f6;
1076 + background: #f3efe7;
956 1077 }
957 1078 .mlsimport-es-other {
958 1079 width: 100%;
959 1080 margin-top: 10px;
@@ -965,9 +1086,9 @@
965 1086 align-items: center;
966 1087 gap: 16px;
967 1088 }
968 1089 .mlsimport-es-skip {
969 - color: #777;
1090 + color: #9a9285;
970 1091 text-decoration: underline;
971 1092 }
972 1093 .mlsimport-es-hidden {
973 1094 display: none;
@@ -978,8 +1099,13 @@
978 1099 ------------------------------------------------------- */
979 1100
980 1101 .mlsimport-activity-banner {
981 1102 padding: 12px 14px;
1103 + /* Re-chrome the core .notice.notice-info wrapper to Sunny Bento: warm
1104 + hairline border, accent-orange status edge, rounded corners. */
1105 + border: 1px solid var(--border-color);
1106 + border-left: 4px solid var(--accent-color);
1107 + border-radius: var(--border-radius);
982 1108 }
983 1109
984 1110 .mlsimport-activity-banner__counts {
985 1111 display: flex;
@@ -994,9 +1120,9 @@
994 1120 align-items: center;
995 1121 gap: 7px;
996 1122 font-size: 14px;
997 1123 font-weight: 700;
998 - color: #1d2327;
1124 + color: #1c1917;
999 1125 }
1000 1126
1001 1127 .mlsimport-activity-banner__title::before {
1002 1128 content: "";
@@ -1002,15 +1128,15 @@
1002 1128 content: "";
1003 1129 width: 9px;
1004 1130 height: 9px;
1005 1131 border-radius: 50%;
1006 - background: #2271b1;
1132 + background: #1c1917;
1007 1133 }
1008 1134
1009 1135 .mlsimport-activity-banner__period {
1010 1136 font-weight: 500;
1011 1137 font-size: 11px;
1012 - color: #646970;
1138 + color: #9a9285;
1013 1139 text-transform: uppercase;
1014 1140 letter-spacing: .05em;
1015 1141 }
1016 1142
@@ -1036,11 +1162,11 @@
1036 1162 font-weight: 700;
1037 1163 }
1038 1164
1039 1165 /* Per-action tinted stat pills: added (green), edited (amber), deleted (red). */
1040 -.mlsimport-activity-stat--added { background: #ecfdf5; color: #047857; }
1041 -.mlsimport-activity-stat--edited { background: #fffbeb; color: #b45309; }
1042 -.mlsimport-activity-stat--deleted { background: #fef2f2; color: #b91c1c; }
1166 +.mlsimport-activity-stat--added { background: #b8e6cc; color: #1c5c3a; }
1167 +.mlsimport-activity-stat--edited { background: #fae39a; color: #7a5410; }
1168 +.mlsimport-activity-stat--deleted { background: #fbe6e3; color: #c02617; }
1043 1169
1044 1170 .mlsimport-activity-banner__breakdown {
1045 1171 margin: 0 0 10px;
1046 1172 padding: 0;
@@ -1045,10 +1171,10 @@
1045 1171 margin: 0 0 10px;
1046 1172 padding: 0;
1047 1173 list-style: none;
1048 1174 max-width: 900px;
1049 - border: 1px solid #e0e0e0;
1050 - border-radius: 6px;
1175 + border: 1px solid rgba(28,25,23,0.12);
1176 + border-radius: var(--border-radius);
1051 1177 overflow: hidden;
1052 1178 }
1053 1179
1054 1180 .mlsimport-activity-banner__breakdown li {
@@ -1063,9 +1189,9 @@
1063 1189 background: #fff;
1064 1190 }
1065 1191
1066 1192 .mlsimport-activity-banner__breakdown li:nth-child(even) {
1067 - background: #f6f7f7;
1193 + background: #f3efe7;
1068 1194 }
1069 1195
1070 1196 /* Per-task name cell: grows to fill, truncates with an ellipsis when long
1071 1197 (min-width:0 lets the flex item shrink below its content width). */
@@ -1072,9 +1198,9 @@
1072 1198 .mlsimport-activity-banner__task {
1073 1199 flex: 1 1 auto;
1074 1200 min-width: 0;
1075 1201 font-weight: 600;
1076 - color: #1d2327;
1202 + color: #1c1917;
1077 1203 overflow: hidden;
1078 1204 text-overflow: ellipsis;
1079 1205 white-space: nowrap;
1080 1206 }
@@ -1094,19 +1220,20 @@
1094 1220 font-weight: 600;
1095 1221 line-height: 1.6;
1096 1222 white-space: nowrap;
1097 1223 color: #ffffff;
1224 + border-radius: var(--radius-pill);
1098 1225 }
1099 1226
1100 -/* Solid per-action count chips: added/edited/deleted colours. */
1101 -.mlsimport-activity-chip--added { background: #10B981; }
1102 -.mlsimport-activity-chip--edited { background: #F59E0B; color: #1a1a1a; }
1103 -.mlsimport-activity-chip--deleted { background: #EF4444; }
1227 +/* Pastel per-action count chips: added/edited/deleted colours. */
1228 +.mlsimport-activity-chip--added { background: var(--success-soft); color: var(--success-deep); }
1229 +.mlsimport-activity-chip--edited { background: var(--warning-soft); color: var(--warning-deep); }
1230 +.mlsimport-activity-chip--deleted { background: var(--error-soft); color: var(--error-color); }
1104 1231
1105 1232 /* Muted styling for a zero-count chip. */
1106 1233 .mlsimport-activity-chip.is-zero {
1107 - background: #f0f0f1;
1108 - color: #8c8f94;
1234 + background: #f3efe7;
1235 + color: #9a9285;
1109 1236 }
1110 1237
1111 1238 .mlsimport-activity-banner__actions {
1112 1239 margin: 0;
@@ -1115,20 +1242,20 @@
1115 1242 .mlsimport-activity-banner__link {
1116 1243 display: inline-flex;
1117 1244 align-items: center;
1118 1245 gap: 5px;
1119 - padding: 5px 13px;
1120 - background: #2271b1;
1246 + padding: 5px 15px;
1247 + background: #1c1917;
1121 1248 color: #ffffff !important;
1122 1249 text-decoration: none !important;
1123 1250 font-size: 13px;
1124 1251 font-weight: 600;
1125 - border-radius: 4px;
1252 + border-radius: var(--radius-pill);
1126 1253 }
1127 1254
1128 1255 .mlsimport-activity-banner__link:hover,
1129 1256 .mlsimport-activity-banner__link:focus {
1130 - background: #135e96;
1257 + background: #33302b;
1131 1258 color: #ffffff !important;
1132 1259 }
1133 1260
1134 1261 /* -------------------------------------------------------
@@ -1143,28 +1270,32 @@
1143 1270 align-items: center;
1144 1271 gap: 8px 12px;
1145 1272 padding: 12px 14px;
1146 1273 margin: 16px 0;
1274 + /* Same Sunny Bento re-chrome as the activity banner (core .notice). */
1275 + border: 1px solid var(--border-color);
1276 + border-left: 4px solid var(--accent-color);
1277 + border-radius: var(--border-radius);
1147 1278 }
1148 1279
1149 1280 .mlsimport-history-filters label {
1150 1281 font-size: 13px;
1151 1282 font-weight: 600;
1152 - color: #1d2327;
1283 + color: #1c1917;
1153 1284 }
1154 1285
1155 1286 .mlsimport-history-filters input[type="search"],
1156 1287 .mlsimport-history-filters select {
1157 1288 height: 32px;
1158 - border-radius: 4px;
1159 - border-color: #e0e0e0;
1289 + border-radius: 8px;
1290 + border-color: rgba(28,25,23,0.12);
1160 1291 }
1161 1292
1162 1293 .mlsimport-history-filters .button {
1163 - background: #2271b1;
1164 - border-color: #2271b1;
1294 + background: #1c1917;
1295 + border-color: #1c1917;
1165 1296 color: #ffffff;
1166 - border-radius: 4px;
1297 + border-radius: var(--radius-pill);
1167 1298 height: 32px;
1168 1299 padding: 0 14px;
1169 1300 font-weight: 600;
1170 1301 }
@@ -1170,10 +1301,10 @@
1170 1301 }
1171 1302
1172 1303 .mlsimport-history-filters .button:hover,
1173 1304 .mlsimport-history-filters .button:focus {
1174 - background: #135e96;
1175 - border-color: #135e96;
1305 + background: #33302b;
1306 + border-color: #33302b;
1176 1307 color: #ffffff;
1177 1308 }
1178 1309
1179 1310 /* -------------------------------------------------------
@@ -1190,22 +1321,22 @@
1190 1321 text-transform: capitalize;
1191 1322 white-space: nowrap;
1192 1323 }
1193 1324
1194 -/* Added-action badge (green). */
1325 +/* Added-action badge (mint). */
1195 1326 .mlsimport-activity-action--added {
1196 - background-color: #10B981;
1197 - color: #ffffff;
1327 + background-color: var(--success-soft);
1328 + color: var(--success-deep);
1198 1329 }
1199 1330
1200 1331 .mlsimport-activity-action--edited {
1201 - background-color: #F59E0B;
1202 - color: #1a1a1a;
1332 + background-color: var(--warning-soft);
1333 + color: var(--warning-deep);
1203 1334 }
1204 1335
1205 1336 .mlsimport-activity-action--deleted {
1206 - background-color: #EF4444;
1207 - color: #ffffff;
1337 + background-color: var(--error-soft);
1338 + color: var(--error-color);
1208 1339 }
1209 1340
1210 1341 /* Searchable City/County multi-select — filter input above the native list. */
1211 1342 .mlsimport-2025-select.mlsimport-searchable-select,
@@ -1217,9 +1348,9 @@
1217 1348 width: 100%;
1218 1349 box-sizing: border-box;
1219 1350 margin-bottom: 6px;
1220 1351 padding: 6px 12px;
1221 - border: 1px solid #DCDFE4;
1352 + border: 1px solid rgba(28,25,23,0.18);
1222 1353 border-radius: 8px;
1223 1354 box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
1224 1355 }
1225 1356 /* Chip tray showing currently selected City/County values. */
@@ -1238,9 +1369,9 @@
1238 1369 display: inline-flex;
1239 1370 align-items: center;
1240 1371 gap: 4px;
1241 1372 padding: 2px 4px 2px 10px;
1242 - background: #909090;
1373 + background: #1c1917;
1243 1374 color: #ffffff;
1244 1375 border-radius: 12px;
1245 1376 font-size: 12px;
1246 1377 line-height: 1.8;
@@ -1262,5 +1393,299 @@
1262 1393 cursor: pointer;
1263 1394 }
1264 1395 .mlsimport-chip-remove:hover {
1265 1396 background: rgba(255, 255, 255, 0.45);
1266 -}
1397 +}
1398 +
1399 +/* ============================================================
1400 + Import Tasks list — Status column health badge (issue #200)
1401 + Pill badge showing the task's run health: green = healthy,
1402 + amber = sync overdue, red = failed/stuck, gray = neutral.
1403 + ============================================================ */
1404 +.mlsimport-task-health {
1405 + display: inline-block;
1406 + padding: 3px 12px;
1407 + border-radius: var(--radius-pill);
1408 + font-size: 12px;
1409 + font-weight: 600;
1410 + line-height: 1.6;
1411 + color: var(--text-secondary);
1412 + background: var(--background-soft);
1413 +}
1414 +.mlsimport-task-health--ok {
1415 + background: var(--success-soft);
1416 + color: var(--success-deep);
1417 +}
1418 +.mlsimport-task-health--warning {
1419 + background: var(--warning-soft);
1420 + color: var(--warning-deep);
1421 +}
1422 +.mlsimport-task-health--error {
1423 + background: var(--error-soft);
1424 + color: var(--error-color);
1425 +}
1426 +/* Explanation line under the badge (progress, error, or last sync time). */
1427 +.mlsimport-task-health__message {
1428 + margin: 6px 0 0;
1429 + font-size: 12px;
1430 + color: #9a9285;
1431 +}
1432 +
1433 +
1434 +/* ===== Tools tab (Sunny Bento) =====
1435 + admin.php?page=mlsimport_plugin_options&tab=administrative_options
1436 +
1437 + This tab predates the restyle: three of its six blocks carried hardcoded inline
1438 + styles (#eee / padding 10px / radius 5px) and the other three carried none, so
1439 + half the tab rendered as a grey card and half as bare text. Spacing lived in
1440 + per-element margins and <br> tags and drifted out of step.
1441 +
1442 + Two classes:
1443 + .mlsimport_tool_block every block - shared width and vertical rhythm
1444 + .mlsimport_tool_card adds the card surface, for ACTION tools only
1445 +
1446 + The two settings behind the single Save Changes button (logs, history) and the
1447 + Cron Jobs guidance stay plain, so a card always means "this block acts on its
1448 + own".
1449 +
1450 + Three gaps, by role - the same everywhere on the tab:
1451 + TIGHT 8px a control under its own label, a hint under its control
1452 + NORMAL 16px ordinary siblings
1453 + HEADING 20px anything directly under a heading */
1454 +.mlsimport_tool_block{
1455 + margin: 0 0 20px 0;
1456 + max-width: 800px;
1457 + box-sizing: border-box;
1458 +}
1459 +
1460 +/* Reset every child, then space them with one top margin, so a single rule owns
1461 + the rhythm and no child can drift on its own. */
1462 +.mlsimport_tool_block > *{
1463 + margin: 0;
1464 +}
1465 +.mlsimport_tool_block > * + *{
1466 + margin-top: 16px;
1467 +}
1468 +.mlsimport_tool_block > h3 + *,
1469 +.mlsimport_tool_block > h4 + *{
1470 + margin-top: 20px;
1471 +}
1472 +/* Buttons need the .wp-core-ui prefix to outrank core's `.wp-core-ui .button
1473 + { margin: 0 }` (0,2,0), which otherwise flattens the gap under a heading. */
1474 +.wp-core-ui .mlsimport_tool_block > h3 + .button,
1475 +.wp-core-ui .mlsimport_tool_block > h4 + .button,
1476 +.wp-core-ui .mlsimport_tool_block > h3 + input[type="button"],
1477 +.wp-core-ui .mlsimport_tool_block > h4 + input[type="button"]{
1478 + margin-top: 20px;
1479 +}
1480 +/* Same reason for the ordinary 16px step and the side-by-side button gap. */
1481 +.wp-core-ui .mlsimport_tool_block > * + .button,
1482 +.wp-core-ui .mlsimport_tool_block > * + input[type="button"]{
1483 + margin-top: 16px;
1484 +}
1485 +.wp-core-ui .mlsimport_tool_block input[type="button"] + input[type="button"]{
1486 + margin-top: 16px;
1487 + margin-left: 10px;
1488 +}
1489 +.mlsimport_tool_block > .mlsimport-label + select,
1490 +.mlsimport_tool_block > select + .mlsimport-exp{
1491 + margin-top: 8px;
1492 +}
1493 +
1494 +/* Card surface - action tools only. */
1495 +.mlsimport_tool_card{
1496 + background-color: var(--background-soft);
1497 + border: 1px solid var(--border-color);
1498 + border-radius: var(--border-radius);
1499 + padding: 20px;
1500 +}
1501 +
1502 +.mlsimport_tool_block h3,
1503 +.mlsimport_tool_block h4{
1504 + font-weight: 600;
1505 + color: var(--text-primary);
1506 + line-height: 1.3;
1507 +}
1508 +
1509 +.mlsimport_tool_block .mlsimport-label{
1510 + font-weight: 500;
1511 + color: var(--text-primary);
1512 +}
1513 +
1514 +.mlsimport_tool_block .mlsimport-exp{
1515 + color: var(--text-secondary);
1516 +}
1517 +
1518 +/* One width for every field on this tab. Select Terms used to be capped at
1519 + max-width:400px inline while Select Taxonomy above it inherited
1520 + width:100%/max-width:100% and ran the full width of its container. */
1521 +.mlsimport_tool_block select.mlsimport-2025-select{
1522 + width: 100%;
1523 + max-width: 100%;
1524 + box-sizing: border-box;
1525 +}
1526 +.mlsimport_tool_block select[multiple]{
1527 + min-height: 120px;
1528 +}
1529 +
1530 +/* Action buttons keep their content width and sit on one row. */
1531 +.mlsimport_tool_block input[type="button"] + input[type="button"]{
1532 + margin-left: 10px;
1533 +}
1534 +
1535 +/* Delete progress bar, on the palette instead of wp-admin blue (#0073aa).
1536 + The bar's own width stays inline: mlsimport-admin.js animates it. */
1537 +.mlsimport-delete-progress-track{
1538 + background: var(--background-white);
1539 + border: 1px solid var(--border-color);
1540 + border-radius: var(--radius-pill);
1541 + overflow: hidden;
1542 + height: 20px;
1543 + margin-bottom: 8px;
1544 +}
1545 +#mlsimport-delete-progress-bar{
1546 + background: var(--accent-color);
1547 + height: 100%;
1548 + transition: width var(--transition-speed) ease;
1549 +}
1550 +
1551 +
1552 +/* ===== Field height parity (2025 controls) =====
1553 + A dropdown must be exactly as tall as a text input beside it. wp-admin core
1554 + (load-styles.php) sets `select { line-height: 2.71429; min-height: 40px }`,
1555 + which at 14px is a 38px line box; with our 5px padding and 1px border that
1556 + rendered every .mlsimport-2025-select at 50px next to a 40px
1557 + .mlsimport-2025-input. 40px is wp-admin's own control height, so the select
1558 + is the one corrected. Multi-selects are excluded - they size to their rows. */
1559 +select.mlsimport-2025-select:not([multiple]){
1560 + height: 40px;
1561 + min-height: 40px;
1562 + padding-top: 0;
1563 + padding-bottom: 0;
1564 +}
1565 +
1566 +
1567 +/* Save Changes on the Tools tab belongs to the two dropdowns above it, so it gets
1568 + no gap of its own on top; the space goes underneath, before the next block.
1569 + wp-admin's default .submit padding (1.5em 0) put air on both sides. */
1570 +form[name="cleanup_options"] p.submit{
1571 + margin: 0 0 20px 0;
1572 + padding: 0;
1573 +}
1574 +
1575 +
1576 +/* Focus ring on the palette. wp-admin core (forms.css) focuses controls with
1577 + admin blue - `select:focus { border-color: #2271b1; box-shadow: 0 0 0 1px
1578 + #2271b1 }` - which clashes with the warm neutrals. Same visual weight as
1579 + core's (1px border + 1px ring), so the focus affordance stays as obvious as
1580 + it was; only the hue changes. */
1581 +/* The selectors below repeat the full base-rule specificity plus :focus. The
1582 + base rule is `input[type=text].mlsimport-input.mlsimport-2025-input` (0,3,1),
1583 + which outranks core's `input:focus` (0,1,1) - so until now a focused text
1584 + field kept its resting border and showed NO focus state at all, core's
1585 + included. A field being typed into has to look different from one that is
1586 + not. */
1587 +input[type=text].mlsimport-input.mlsimport-2025-input:focus,
1588 +input[type=password].mlsimport-input.mlsimport-2025-input:focus,
1589 +.mlsimport-input.mlsimport-2025-input:focus,
1590 +select.mlsimport-2025-select:focus,
1591 +/* #mlsimport_mls_name_front sets border-color from an ID (1,0,0), which outranks
1592 + the class selectors above (0,4,1). Without naming the ID here the MLS search
1593 + box keeps its resting border and shows no focus state at all. */
1594 +#mlsimport_mls_name_front:focus{
1595 + border-color: var(--primary-color);
1596 + /* An actual border, not a glow. Width stays 1px so the padding box does not
1597 + shrink on focus and the text never jiggles; the contrast jump from the
1598 + rgba(28,25,23,0.18) hairline to solid near-black carries the state on its
1599 + own. Both controls are border-box, so the 40px height is unaffected. */
1600 + box-shadow: none;
1601 + outline: none;
1602 +}
1603 +
1604 +
1605 +/* ===== One accent for every active state =====
1606 + The plugin screens were showing three different "active" colours at once: the
1607 + dark resting hairline, the accent focus ring, and wp-admin/browser blue on the
1608 + open dropdown's highlighted row. Everything that signals focus or selection
1609 + now uses --accent-color; the neutral hairline stays neutral, because a resting
1610 + border is not a state.
1611 +
1612 + Focus and selection are BLACK (--primary-color), matching hover, so a control
1613 + never shows two different "active" colours. accent-color still fills checked
1614 + checkboxes and radios - that is a checked state, not a focus state.
1615 +
1616 + The open <select> popup is NOT styled here. It used to carry
1617 +
1618 + .mlsimport-2025-select option:checked { background: linear-gradient(...);
1619 + color: #fff }
1620 +
1621 + on the belief that the gradient was the one declaration Chrome honours inside
1622 + a native popup. It is not: Chrome applies the colour and drops the gradient,
1623 + so the already-selected row rendered white-on-white and read as a blank line
1624 + in the list - e.g. "logs enabled" vanishing from the Tools dropdown. A
1625 + stylesheet cannot guarantee the pair, and half the pair is worse than none,
1626 + so the popup keeps the browser's own highlight. That is the one place on
1627 + these screens where a native blue row can still appear; it is legible, which
1628 + the override was not. */
1629 +body.wp-admin[class*="_page_mlsimport"],
1630 +body.wp-admin.post-type-mlsimport_item{
1631 + accent-color: var(--accent-color);
1632 +}
1633 +
1634 +
1635 +/* No wp-admin blue anywhere on the plugin's own screens. Core links are
1636 + #2271b1; on this warm palette they were the last blue left once the focus
1637 + ring and the dropdown highlight moved to the accent.
1638 +
1639 + Scoped to #wpbody-content on purpose: that is the plugin's content area only.
1640 + Body-level scoping would repaint the admin sidebar and the footer too, which
1641 + belong to WordPress, not to us. */
1642 +/* Body text links only. Tabs and buttons are EXCLUDED - they carry their own
1643 + colour scheme (dark tab = white label), and recolouring them turned every tab
1644 + label red. */
1645 +body.wp-admin[class*="_page_mlsimport"] #wpbody-content a:not(.nav-tab):not(.button):not(.button-primary):not(.button-secondary),
1646 +body.wp-admin.post-type-mlsimport_item #wpbody-content a:not(.nav-tab):not(.button):not(.button-primary):not(.button-secondary){
1647 + color: var(--primary-color);
1648 +}
1649 +body.wp-admin[class*="_page_mlsimport"] #wpbody-content a:not(.nav-tab):not(.button):not(.button-primary):not(.button-secondary):hover,
1650 +body.wp-admin.post-type-mlsimport_item #wpbody-content a:not(.nav-tab):not(.button):not(.button-primary):not(.button-secondary):hover{
1651 + color: var(--primary-hover);
1652 +}
1653 +
1654 +/* Keyboard/click focus ring on links, tabs and buttons. wp-admin core focuses
1655 + these with `box-shadow: 0 0 0 1px #2271b1` plus a blue outline - that is the
1656 + blue box that appears around a tab after clicking it. Same weight, accent
1657 + hue, and the label colour is left alone so a dark tab keeps its white text. */
1658 +body.wp-admin[class*="_page_mlsimport"] #wpbody-content a:focus,
1659 +body.wp-admin[class*="_page_mlsimport"] #wpbody-content .nav-tab:focus,
1660 +body.wp-admin[class*="_page_mlsimport"] #wpbody-content .button:focus,
1661 +body.wp-admin.post-type-mlsimport_item #wpbody-content a:focus,
1662 +body.wp-admin.post-type-mlsimport_item #wpbody-content .button:focus{
1663 + box-shadow: 0 0 0 2px rgba(28,25,23,0.15);
1664 + border-color: var(--primary-color);
1665 + outline: 2px solid transparent; /* stays visible in forced-colours mode */
1666 + outline-offset: 0;
1667 +}
1668 +
1669 +/* ...but not on the pastel intent pills. Each of those borders in its own
1670 + colour, so the near-black border-color above drew a stray black outline
1671 + around the mint Save Changes and the red delete the moment they were
1672 + clicked - the one thing the near-black was introduced to stop happening in
1673 + admin blue. They keep their own border and take the focus halo in their own
1674 + hue, so the affordance is as obvious as before without a foreign line. */
1675 +body.wp-admin[class*="_page_mlsimport"] #wpbody-content .button.save_data:focus,
1676 +body.wp-admin.post-type-mlsimport_item #wpbody-content .button.save_data:focus{
1677 + border-color: var(--success-soft);
1678 + box-shadow: 0 0 0 2px rgba(28, 92, 58, 0.28);
1679 +}
1680 +
1681 +body.wp-admin[class*="_page_mlsimport"] #wpbody-content .button.warning_action:focus,
1682 +body.wp-admin.post-type-mlsimport_item #wpbody-content .button.warning_action:focus{
1683 + border-color: var(--warning-soft);
1684 + box-shadow: 0 0 0 2px rgba(122, 84, 16, 0.28);
1685 +}
1686 +
1687 +body.wp-admin[class*="_page_mlsimport"] #wpbody-content .button.error_action:focus,
1688 +body.wp-admin.post-type-mlsimport_item #wpbody-content .button.error_action:focus{
1689 + border-color: var(--error-color);
1690 + box-shadow: 0 0 0 2px rgba(192, 38, 23, 0.30);
1691 +}