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 +691 -170 6.3.77.2.1 View file →
@@ -1,29 +1,67 @@
1 1
2 +/*
3 + * mlsimport-admin.css
4 + * ---------------------------------------------------------------------------
5 + * Main admin stylesheet for the MLSImport plugin. Styles the wp-admin screens:
6 + * the import-task metaboxes, plugin settings/tools UI, field-mapping fieldsets,
7 + * progress bars and log viewer, the 2025 card/tab layout, custom form controls
8 + * (switches, styled checkboxes, pill buttons), the deactivation exit-survey
9 + * modal, and the activity-log / import-history banners.
10 + * Also carries a few per-theme admin tweaks (WpResidence, WpEstate, Houzez,
11 + * Real Homes) grouped under their own section headers below.
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.
15 + */
16 +
2 17 /* Base styling */
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. */
3 21 :root {
4 - --primary-color: #4F46E5;
5 - --primary-hover: #4338CA;
6 - --success-color: #10B981;
7 - --error-color: #EF4444;
8 - --warning-color: #F59E0B;
9 - --text-primary: #111827;
10 - --text-secondary: #4B5563;
11 - --text-light: #6B7280;
12 - --border-color: #DCDFE4;
13 - --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;
14 41 --background-white: #FFFFFF;
15 42 --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
16 43 --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
17 - --border-radius: 8px;
44 + --border-radius: 10px;
45 + --radius-card: 18px;
46 + --radius-pill: 999px;
18 47 --transition-speed: 0.2s;
19 48 }
20 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 +}
21 57
22 58
23 59
60 +
24 61 /*Real Homes admin adjusments*/
25 62
63 +/* Constrain the thumbnail column image on the Real Homes property list table. */
26 64 .post-type-property .column-property-thumbnail img{
27 65 width: 130px;
28 66 height: auto;
29 67 }
@@ -37,8 +75,9 @@
37 75
38 76
39 77
40 78
79 +/* Field-mapping row title. */
41 80 .mlsfield_import_title {
42 81 margin: 0px 0px 10px 0px;
43 82 font-size: 15px;
44 83 }
@@ -48,17 +87,18 @@
48 87 margin: 10px 0px 5px 0px;
49 88 }
50 89
51 90 .mls_mandatory_fields{
52 - color: #888;
91 + color: #6b6358;
53 92 margin-bottom: 10px;
54 93 max-width: 600px;
55 94 }
56 95 .mandatory_fields_wrapper_exp{
57 - color: #888;
96 + color: #6b6358;
58 97 max-width: 600px;
59 98 }
60 99
100 +/* Form field label (note: overridden later by the 2025 .mlsimport-label rule). */
61 101 .mlsimport-label{
62 102 font-weight: 600;
63 103 display: inline-block;
64 104 float: left;
@@ -66,8 +106,9 @@
66 106 line-height: 1.6em;
67 107 font-size: 14px;
68 108 }
69 109
110 +/* Helper / explanation text under fields. */
70 111 .mls_explanations{
71 112 line-height: 1.6em;
72 113 }
73 114
@@ -105,9 +146,9 @@
105 146 }
106 147
107 148
108 149 #mlsimport_mls_name_front{
109 - border-color: #ccc;
150 + border-color: rgba(28,25,23,0.18);
110 151 min-width: 450px;
111 152 padding: 5px 12px;
112 153 }
113 154
@@ -113,8 +154,9 @@
113 154
114 155
115 156
116 157
158 +/* Styled dropdown used in field mapping/settings: bordered, rounded, subtle shadow. */
117 159 .wp-admin select.mlsimport-select{
118 160 max-width: 450px;
119 161 padding: 5px 12px;
120 162 width: 100%;
@@ -122,9 +164,9 @@
122 164 display: inline-flex;
123 165 flex-direction: column;
124 166 align-items: flex-start;
125 167 isolation: isolate;
126 - border: 1px solid #DCDFE4;
168 + border: 1px solid rgba(28,25,23,0.18);
127 169 box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
128 170 border-radius: 8px;
129 171 flex: none;
130 172 align-self: stretch;
@@ -132,12 +174,13 @@
132 174 .wp-admin select.mlsimport-select option{
133 175 padding: 3px 0px;
134 176 }
135 177
178 +/* Grey rounded panel wrapping a group of import parameters. */
136 179 .mlsimport_param_wrapper{
137 - background-color: #f5f5f5;
180 + background-color: #f3efe7;
138 181 padding:20px;
139 - border-radius: 5px;
182 + border-radius: 14px;
140 183 }
141 184
142 185 .postbox .inside .mlsimport_param_wrapper h2{
143 186 font-size: 20px!important;
@@ -146,8 +189,10 @@
146 189 padding-bottom: 19px!important;
147 190 }
148 191
149 192
193 +/* Field-mapping layout: each item is a vertical column; wrapper lays items in a
194 + horizontal flex row with spacing. */
150 195 .mlsimport-fieldset-item{
151 196 display: flex;
152 197 flex-direction: column;
153 198 }
@@ -165,10 +210,11 @@
165 210 padding: 10px 20px;
166 211 margin: 0px;
167 212 }
168 213
214 +/* Zebra-stripe alternating fieldsets in the mandatory-fields list. */
169 215 .mandatory_fields_wrapper .mlsimport-fieldset:nth-child(even){
170 - background-color: #f7f7f7;
216 + background-color: #f3efe7;
171 217 }
172 218
173 219 .mlsimport_auto_switch{
174 220 margin: 0px;
@@ -174,10 +220,11 @@
174 220 margin: 0px;
175 221 padding: 10px;
176 222 }
177 223
224 +/* "Select all" pill button (pink); darker on hover. */
178 225 .mls_import_selec_all_class {
179 - background-color: #cc3459;
226 + background-color: var(--primary-color);
180 227 color: #fff;
181 228 display: inline-block;
182 229 padding: 5px;
183 230 margin-right: 10px;
@@ -183,15 +230,18 @@
183 230 margin-right: 10px;
184 231 margin-bottom: 5px;
185 232 cursor: pointer;
186 233 padding: 7px 14px;
187 - border-radius:5px;
234 + border-radius: var(--radius-pill);
188 235 }
189 236
190 237 .mls_import_selec_all_class:hover {
191 - background-color: #a31034;
238 + background-color: #33302b;
192 239 }
193 240
241 +/* ===== Import progress bar + transfer controls + live log ===== */
242 +
243 +/* Outer progress wrapper (this selector is declared again below). */
194 244 #mlsimport_myProgress_wrapper{
195 245 width:800px;
196 246 margin-top: 10px;
197 247 /* display:none;*/
@@ -196,21 +246,24 @@
196 246 margin-top: 10px;
197 247 /* display:none;*/
198 248 }
199 249
250 +/* "Stop transfer" button (red); note a later rule overrides display to none. */
200 251 #mlsimport_transfer_stop{
201 - padding: 7px;
202 - background: #af3737;
252 + padding: 7px 16px;
253 + background: #c02617;
203 254 color: #fff;
255 + border-radius: var(--radius-pill);
204 256 display: inline-block;
205 257 margin-top: 10px;
206 258 cursor: pointer;
207 259 }
208 260
261 +/* Progress fill bar — width is animated from 0% via JS as items import. */
209 262 #mlsimport_myBar{
210 263 width: 0%;
211 264 height: 20px;
212 - background-color: green;
265 + background-color: #e85d3c;
213 266 }
214 267
215 268 #mlsimport_myProgress_wrapper{
216 269 width:800px;
@@ -217,19 +270,23 @@
217 270 margin-top: 10px;
218 271 /* display:none;*/
219 272 }
220 273
274 +/* Track background for the "monster" (full-width) progress bar. */
221 275 #mlsimport_monster_myProgress {
222 276 width: 100%;
223 - background-color: #cbc8c8;
277 + background-color: #efe7dc;
224 278 }
279 +/* Hide the stop button by default (JS shows it while a transfer runs). */
225 280 #mlsimport_transfer_stop{
226 281 display: none;
227 282 }
228 283
284 +/* Scrollable live import log panel. */
229 285 #log_container{
230 286 width: 750px;
231 - background: #f1f1f1;
287 + background: #f3efe7;
288 + border-radius: var(--border-radius);
232 289 padding: 15px;
233 290 margin-top: 15px;
234 291 max-height: 500px;
235 292 overflow-y: auto;
@@ -260,15 +317,10 @@
260 317 max-width: 800px;
261 318 margin-top: 5px;
262 319 }
263 320
264 -.mlsimport_tool_field_item_wrapper{
265 - margin-bottom: 30px;
266 -}
267 -#mlsimport-disable-history,
268 -#mlsimport-disable-logs{
269 - margin-top: 10px;
270 -}
321 +/* Tools-tab blocks are defined at the end of this file, so they win ties
322 + against the later 2025 overrides. */
271 323
272 324
273 325
274 326
@@ -279,8 +331,10 @@
279 331
280 332
281 333
282 334 /*==WpResidence*/
335 +/* Cap uploaded property thumbnail preview size (selector name is misspelled
336 + "thumb_wrapepr" to match the markup). */
283 337 #property_uploaded_thumb_wrapepr img{
284 338 max-width: 200px;
285 339 max-height: 200px;
286 340 }
@@ -287,33 +341,99 @@
287 341
288 342 table.media .column-title .media-icon img {
289 343 width:60px;
290 344 }
345 +/* Admin message banners (notification / validated / warning). Base is a pink
346 + box; individual variants below re-colour it. */
291 347 .mlsimport_notification,
292 348 .mlsimport_validated,
293 349 .mlsimport_warning{
294 - 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;
295 402 color: #fff;
296 - padding: 10px;
297 - margin-bottom: 10px;
298 - border-radius: 2px;
403 + font-size: 15px;
404 + font-weight: 700;
405 + line-height: 1.4;
406 + text-decoration: none;
299 407 }
300 408
409 +.mlsimport-account-subscription a.mlsimport-account-subscription-action:hover {
410 + background: #44403c;
411 + border-color: #44403c;
412 + color: #fff;
413 +}
301 414
415 +.mlsimport-account-subscription a.mlsimport-account-subscription-action:focus-visible {
416 + outline: 3px solid #92400e;
417 + outline-offset: 3px;
418 +}
419 +
420 +/* Indigo "populate" info banner. */
302 421 .mlsimport_populate_warning{
303 - background: #4f46e5;
422 + background: var(--primary-color);
304 423 color: #fff;
305 - padding: 10px;
424 + padding: 12px 16px;
306 425 margin-bottom: 10px;
307 - border-radius: 2px;
426 + border-radius: var(--border-radius);
308 427 }
309 428
310 429
430 +/* "Validated" variant: amber-tinted background with a warning left border. */
311 431 .mlsimport_validated{
312 432 padding: 0.75rem 1rem;
313 433 margin-bottom: 1rem;
314 434 border-radius: var(--border-radius);
315 - background-color: rgba(245, 158, 11, 0.1);
435 + background-color: rgba(250, 227, 154, 0.4);
316 436 border-left: 4px solid var(--warning-color);
317 437 color: var(--text-primary);
318 438 }
319 439
@@ -318,28 +438,34 @@
318 438 }
319 439
320 440
321 441 .mlsimport_notification{
322 - background: #a5862b;
442 + background: var(--warning-soft);
443 + color: var(--warning-deep);
323 444 }
324 445
325 446
326 447 #mlsimport_item_metaboxes-sectionid .mlsimport_notification{
327 - background: #a5862b;
448 + background: var(--warning-soft);
449 + color: var(--warning-deep);
328 450 max-width: 500px;
329 451 }
330 452
331 453
454 +/* Scrollable status/output box inside the import-task metabox. */
332 455 #mlsimport_item_status{
333 456 width: auto;
334 - background-color: #f5f5f5;
457 + background-color: #f3efe7;
335 458 overflow-y: scroll;
336 459 padding: 10px;
337 - border-radius: 5px;
460 + border-radius: var(--border-radius);
338 461 margin-bottom: 15px;
339 462 }
340 463
341 464
465 +/* ===== iOS-style on/off toggle switch =====
466 + Absolutely positioned track; the real checkbox is hidden and a .slider
467 + pseudo-element renders the knob, translated on :checked. */
342 468 label.mlsimport_switch {
343 469 position: absolute;
344 470 display: inline-block;
345 471 width: 53px!important;
@@ -360,9 +486,9 @@
360 486 top: 0;
361 487 left: 0;
362 488 right: 0;
363 489 bottom: 0;
364 - background-color: #ccc;
490 + background-color: rgba(28,25,23,0.18);
365 491 -webkit-transition: .4s;
366 492 transition: .4s;
367 493 }
368 494
@@ -377,14 +503,15 @@
377 503 -webkit-transition: .4s;
378 504 transition: .4s;
379 505 }
380 506
507 +/* Checked state: blue track, and the knob slides right (translateX below). */
381 508 .mlsimport_switch input:checked + .slider {
382 - background-color: #2196F3;
509 + background-color: #e85d3c;
383 510 }
384 511
385 512 .mlsimport_switch input:focus + .slider {
386 - box-shadow: 0 0 1px #2196F3;
513 + box-shadow: 0 0 1px #e85d3c;
387 514 }
388 515
389 516 .mlsimport_switch input:checked + .slider:before {
390 517 -webkit-transform: translateX(26px);
@@ -394,8 +521,9 @@
394 521
395 522
396 523
397 524
525 +/* Rounded (pill) variant of the toggle track and knob. */
398 526 .slider.round {
399 527 border-radius: 25px;
400 528 }
401 529 .slider.round:before {
@@ -410,24 +538,19 @@
410 538 #mlsimport-delete-prop{
411 539 margin-top: 15px;
412 540 }
413 541
414 -.fieldset_mlsimport_tresle_client_id,
415 -.fieldset_mlsimport_tresle_client_secret{
416 - display:none;
417 -}
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. */
418 546
419 -.fieldset_mlsimport_connectmls_username,
420 -.fieldset_mlsimport_connectmls_password{
421 - display:none;
422 -}
423 547
424 548
425 549
426 -
427 550 .mlsimport_param_wrapper input[type=text]{
428 551 min-width: 450px;
429 - border-color: #ccc;
552 + border-color: rgba(28,25,23,0.18);
430 553 padding: 5px 12px;
431 554 }
432 555
433 556 #mlsimport_item_min_price,
@@ -436,12 +559,13 @@
436 559 max-width: 210px;
437 560 }
438 561
439 562
563 +/* Sign-up / account CTA box shown when no account is connected. */
440 564 .mlsimport_signup{
441 565 display: inline-block;
442 - background-color: #f0f0f1;
443 - border-radius: 5px;
566 + background-color: #f3efe7;
567 + border-radius: 14px;
444 568 padding: 20px;
445 569 font-size: 15px;
446 570 margin-bottom: 15px;
447 571 }
@@ -457,8 +581,9 @@
457 581 /*==WpEstate*/
458 582
459 583 /*==Houzez*/
460 584
585 +/* Houzez property list thumbnail column sizing. */
461 586 .column-thumbnail img {
462 587 max-width: 100%;
463 588 height: auto;
464 589 min-width:
@@ -469,17 +594,21 @@
469 594
470 595
471 596
472 597 /*==2025*/
598 +/* 2025 redesign: tabbed card UI. Tab panels are hidden by default and shown
599 + when the active class is applied by the tab JS. */
473 600
601 +/* Tab content panel — hidden until activated. */
474 602 .content-nav-tab{
475 603 display:none;
476 604 padding: 30px 15px;
477 605 background: #fff;
478 - border: 1px solid #ccc;
606 + border: 1px solid rgba(28,25,23,0.18);
479 607 border-top: 0px;
480 608 }
481 609
610 +/* Active tab panel becomes a visible flex container. */
482 611 .content-nav-tab-active{
483 612 display: flex;
484 613 }
485 614
@@ -487,8 +616,9 @@
487 616 .content-nav-tab.mlsimport_2025_card{
488 617 width: auto;
489 618 }
490 619
620 +/* White rounded card with layered shadow (2025 card container). */
491 621 .mlsimport_2025_card{
492 622 flex-direction: column;
493 623 align-items: center;
494 624 padding: 0px;
@@ -493,10 +623,10 @@
493 623 align-items: center;
494 624 padding: 0px;
495 625
496 626 background: #FFFFFF;
497 - box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.06), 0px 5px 22px rgba(0, 0, 0, 0.04);
498 - 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);
499 629 flex: none;
500 630 order: 0;
501 631 flex-grow: 1;
502 632
@@ -510,8 +640,9 @@
510 640 padding: 30px;
511 641 }
512 642
513 643
644 +/* Tab strip container (overrides WP core nav-tab-wrapper border). */
514 645 .nav-tab-wrapper.mlsimport-tab-wrapper{
515 646 border: none;
516 647 padding: 0px 15px;
517 648 margin-top: 50px;
@@ -520,22 +651,33 @@
520 651
521 652 .nav-tab-wrapper.mlsimport-tab-wrapper .nav-tab {
522 653
523 654 text-transform: uppercase;
524 - color: #23202c;
655 + color: var(--text-secondary);
525 656 padding: 15px 25px;
526 - background: #f1f1f1;
527 - border-top-right-radius:5px;
528 - border-top-left-radius: 5px;
657 + background: #f3efe7;
658 + border-top-right-radius: 12px;
659 + border-top-left-radius: 12px;
529 660
530 661 padding: 15px 30px;
531 662 background: #fff;
532 - 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);
533 667 }
534 668
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). */
535 675 .nav-tab-wrapper.mlsimport-tab-wrapper .nav-tab.nav-tab-active{
536 - background-color: #635BFF;
676 + background-color: var(--primary-color);
537 677 color: #fff;
678 + border-color: var(--primary-color);
679 + font-weight: 600;
538 680 }
539 681
540 682 .content-nav-tab.mlsimport_2025_card form{
541 683 max-width: 500px;
@@ -540,13 +682,8 @@
540 682 .content-nav-tab.mlsimport_2025_card form{
541 683 max-width: 500px;
542 684 }
543 685
544 -.content-nav-tab.mlsimport_2025_card form.mlsimport-import-fields-form{
545 - max-width: 100%;
546 -}
547 -
548 -
549 686 .mlsimport_2025_card_admin_options {
550 687 display: flex;
551 688 flex-direction: row;
552 689 }
@@ -553,8 +690,11 @@
553 690
554 691 .mlsimport_2025_card_admin_options:empty{
555 692 display: none;
556 693 }
694 +/* ===== Numbered "steps" list =====
695 + Uses a CSS counter to render circular numbered badges before each <li>
696 + (see ::before rule) instead of native list markers. */
557 697 .mlsimport-steps{
558 698 font-size: 16px;
559 699 display: flex;
560 700 flex-direction: column;
@@ -575,8 +715,9 @@
575 715 margin-bottom: 20px;
576 716 line-height: 27px;
577 717 }
578 718
719 +/* Circular numbered badge rendered from the CSS counter value. */
579 720 .mlsimport-steps li::before {
580 721 content: counter(step-counter);
581 722 position: absolute;
582 723 left: 0;
@@ -582,9 +723,9 @@
582 723 left: 0;
583 724 top: 0;
584 725 width: 30px;
585 726 height: 30px;
586 - background-color: #635bff;
727 + background-color: var(--accent-color);
587 728 color: white;
588 729 border-radius: 50%;
589 730 display: flex;
590 731 align-items: center;
@@ -593,8 +734,10 @@
593 734 }
594 735
595 736
596 737 /*==2025 Inputs*/
738 +/* Shared styling for text/password/select inputs in the 2025 UI:
739 + bordered, rounded, subtle shadow, inline-flex layout. */
597 740
598 741 input[type=password].mlsimport-input.mlsimport-2025-input,
599 742 input[type=text].mlsimport-input.mlsimport-2025-input,
600 743 .mlsimport-input.mlsimport-2025-input{
@@ -604,9 +747,9 @@
604 747 flex-direction: column;
605 748 align-items: flex-start;
606 749 isolation: isolate;
607 750 background: #FFFFFF;
608 - border: 1px solid #DCDFE4;
751 + border: 1px solid rgba(28,25,23,0.18);
609 752 box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
610 753 border-radius: 8px;
611 754 flex: none;
612 755 order: 1;
@@ -613,8 +756,10 @@
613 756 align-self: stretch;
614 757 flex-grow: 0;
615 758 display: inline-flex;
616 759 }
760 +/* 2025 label override (later in the file, so it wins over the earlier
761 + .mlsimport-label float rule for these screens). */
617 762 .mlsimport-label {
618 763 display: block;
619 764 margin-bottom: 0px;
620 765 font-weight: 500;
@@ -629,9 +774,9 @@
629 774 display: inline-flex;
630 775 flex-direction: column;
631 776 align-items: flex-start;
632 777 isolation: isolate;
633 - border: 1px solid #DCDFE4;
778 + border: 1px solid rgba(28,25,23,0.18);
634 779 box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
635 780 border-radius: 8px;
636 781 flex: none;
637 782 align-self: stretch;
@@ -640,17 +785,24 @@
640 785
641 786
642 787
643 788
789 +/* Default bordered look for fieldset inputs and the import "select all" boxes. */
644 790 .mlsimport-fieldset-wrapper input,
645 791 input[type=checkbox].mlsimport_select_import_admin_all,
646 792 input[type=checkbox].mlsimport_select_import_all {
647 - border: 1px solid #ccc;
793 + border: 1px solid rgba(28,25,23,0.18);
648 794 border-radius: 2px;
649 795 background-color: #fff!important;
650 796 }
651 797
652 798
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. */
803 +
804 +/* Primary button: solid warm near-black pill. */
653 805 .button.mlsimport_button{
654 806 font-size: 14px;
655 807 position: relative;
656 808 display: flex;
@@ -656,78 +808,122 @@
656 808 display: flex;
657 809 flex-direction: column;
658 810 justify-content: center;
659 811 align-items: center;
660 - padding: 7px 30px;
661 - background: linear-gradient(180deg, #635BFF 0%, #4E36F5 100%);
662 - border: 1px solid #15B79F;
663 - 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);
664 818 color:#fff;
665 819 flex: none;
666 820 order: 1;
667 821 flex-grow: 0;
668 - 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);
669 824 }
670 825
671 826 .button.mlsimport_button:hover {
672 - background: linear-gradient(180deg, #635BFF 0%, #4E36F5 100%);
827 + background: var(--primary-hover);
673 828 color:#fff;
674 - border: 1px solid #15B79F;
675 - 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);
676 831 }
677 832
678 -.button.save_data {
679 - background: linear-gradient(180deg, var(--success-color) 0%, #0C8A61 100%);
680 - border: 1px solid var(--success-color);
681 - 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);
682 840 }
683 841
684 -.button.save_data:hover {
685 - background: linear-gradient(180deg, var(--success-color) 0%, #0C8A61 100%);
686 - border: 1px solid var(--success-color);
687 - 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);
688 848 }
689 849
690 850
691 -.button.secondary {
692 - background: linear-gradient(180deg, #32383e 0%, #25292e 100%);
693 - border: 1px solid #32383e;
694 - color: #fff;
695 - 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);
696 861 }
697 -
698 - .button.secondary:hover {
699 - background: linear-gradient(180deg, #32383e 0%, #25292e 100%);
700 - border: 1px solid #32383e;
701 - color: #fff;
702 - 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);
703 870 }
704 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 +}
705 887
706 888
707 - .button.warning_action {
708 - background: linear-gradient(180deg, #fb9c0c 0%, #d0810a 100%);
709 - border: 1px solid #fb9c0c;
710 - 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);
711 897 }
712 -
713 - .button.warning_action:hover {
714 - background: linear-gradient(180deg, #fb9c0c 0%, #d0810a 100%);
715 - border: 1px solid #fb9c0c;
716 - 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);
717 905 }
718 906
719 907
720 - .button.error_action {
721 - background: linear-gradient(180deg, #bb241a 0%, #9b1e16 100%);
722 - border: 1px solid #bb241a;
723 - 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);
724 918 }
725 -
726 - .button.error_action:hover {
727 - background: linear-gradient(180deg, #bb241a 0%, #9b1e16 100%);
728 - border: 1px solid #bb241a;
729 - 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);
730 926 }
731 927
732 928
733 929
@@ -742,8 +938,12 @@
742 938
743 939
744 940
745 941
942 + /* ===== Custom SVG checkboxes =====
943 + Native appearance is removed; a :before pseudo-element paints an inline
944 + SVG (unchecked = grey outline, checked = filled indigo box with a tick),
945 + both embedded as data: URIs below. */
746 946 input[type=checkbox].mlsimport-import-checkbox,
747 947 input[type=checkbox].mlsimport-admin-checkbox {
748 948 appearance: none;
749 949 -webkit-appearance: none;
@@ -764,9 +964,9 @@
764 964 top: 0;
765 965 left: 0;
766 966 width: 24px;
767 967 height: 24px;
768 - 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>");
769 969 background-size: 24px 24px;
770 970 background-position: center;
771 971 background-repeat: no-repeat;
772 972 margin: 0px;
@@ -771,16 +971,19 @@
771 971 background-repeat: no-repeat;
772 972 margin: 0px;
773 973 }
774 974
975 + /* Checked state swaps in the filled indigo box + white tick SVG. */
775 976 input[type=checkbox].mlsimport-import-checkbox:checked:before,
776 977 input[type=checkbox].mlsimport-admin-checkbox:checked:before {
777 - 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>");
778 979 }
779 980
780 981
781 982
782 983 /* Initial save progress overlay */
984 +/* Fixed, viewport-centered modal card (translate(-50%,-50%) trick); high
985 + z-index keeps it above the admin UI while the initial save runs. */
783 986 .mlsimport-save-progress {
784 987 position: fixed;
785 988 top: 50%;
786 989 left: 50%;
@@ -787,9 +990,9 @@
787 990 transform: translate(-50%, -50%);
788 991 z-index: 9999;
789 992 background: #fff;
790 993 padding: 40px;
791 - border-radius: 10px;
994 + border-radius: var(--radius-card);
792 995 /* border: 1px solid #ddd; */
793 996 box-shadow: 0 7px 54px rgba(0, 0, 0, 0.15);
794 997 width: 500px;
795 998 min-height: 200px;
@@ -807,23 +1010,26 @@
807 1010 }
808 1011
809 1012 .mlsimport-save-progress-bar {
810 1013 height: 10px;
811 - background: #eee;
1014 + background: #f3efe7;
812 1015 margin-top: 5px;
813 1016 border-radius: 5px;
814 1017 overflow: hidden;
815 1018 }
816 1019
1020 +/* Animated fill inside the save progress bar (width driven by JS). */
817 1021 .mlsimport-save-progress-bar .progress-fill {
818 1022 width: 0%;
819 1023 height: 100%;
820 - background: #635BFF;
1024 + background: var(--accent-color);
821 1025 border-radius: 5px;
822 1026 transition: width 0.3s;
823 1027 }
824 1028
825 1029 /* Deactivation exit survey modal */
1030 +/* Full-screen overlay (inset:0) centering the survey card; very high z-index
1031 + sits above the plugins-list deactivate flow. .mlsimport-es-hidden toggles it. */
826 1032 #mlsimport-exit-survey-modal {
827 1033 position: fixed;
828 1034 inset: 0;
829 1035 z-index: 100000;
@@ -833,8 +1039,9 @@
833 1039 }
834 1040 #mlsimport-exit-survey-modal.mlsimport-es-hidden {
835 1041 display: none;
836 1042 }
1043 +/* Semi-transparent dim layer behind the survey card. */
837 1044 .mlsimport-es-backdrop {
838 1045 position: absolute;
839 1046 inset: 0;
840 1047 background: rgba(0, 0, 0, 0.6);
@@ -841,9 +1048,9 @@
841 1048 }
842 1049 .mlsimport-es-card {
843 1050 position: relative;
844 1051 background: #fff;
845 - border-radius: 6px;
1052 + border-radius: var(--radius-card);
846 1053 padding: 26px 28px;
847 1054 width: 460px;
848 1055 max-width: 92vw;
849 1056 box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
@@ -853,20 +1060,21 @@
853 1060 font-size: 18px;
854 1061 }
855 1062 .mlsimport-es-intro {
856 1063 margin: 0 0 16px;
857 - color: #555;
1064 + color: #6b6358;
858 1065 }
1066 +/* Selectable reason row in the exit survey. */
859 1067 .mlsimport-es-option {
860 1068 display: block;
861 1069 padding: 8px 10px;
862 1070 margin: 4px 0;
863 - border: 1px solid #e0e0e0;
864 - border-radius: 4px;
1071 + border: 1px solid rgba(28,25,23,0.18);
1072 + border-radius: var(--border-radius);
865 1073 cursor: pointer;
866 1074 }
867 1075 .mlsimport-es-option:hover {
868 - background: #f6f6f6;
1076 + background: #f3efe7;
869 1077 }
870 1078 .mlsimport-es-other {
871 1079 width: 100%;
872 1080 margin-top: 10px;
@@ -878,9 +1086,9 @@
878 1086 align-items: center;
879 1087 gap: 16px;
880 1088 }
881 1089 .mlsimport-es-skip {
882 - color: #777;
1090 + color: #9a9285;
883 1091 text-decoration: underline;
884 1092 }
885 1093 .mlsimport-es-hidden {
886 1094 display: none;
@@ -891,8 +1099,13 @@
891 1099 ------------------------------------------------------- */
892 1100
893 1101 .mlsimport-activity-banner {
894 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);
895 1108 }
896 1109
897 1110 .mlsimport-activity-banner__counts {
898 1111 display: flex;
@@ -907,9 +1120,9 @@
907 1120 align-items: center;
908 1121 gap: 7px;
909 1122 font-size: 14px;
910 1123 font-weight: 700;
911 - color: #1d2327;
1124 + color: #1c1917;
912 1125 }
913 1126
914 1127 .mlsimport-activity-banner__title::before {
915 1128 content: "";
@@ -915,15 +1128,15 @@
915 1128 content: "";
916 1129 width: 9px;
917 1130 height: 9px;
918 1131 border-radius: 50%;
919 - background: #2271b1;
1132 + background: #1c1917;
920 1133 }
921 1134
922 1135 .mlsimport-activity-banner__period {
923 1136 font-weight: 500;
924 1137 font-size: 11px;
925 - color: #646970;
1138 + color: #9a9285;
926 1139 text-transform: uppercase;
927 1140 letter-spacing: .05em;
928 1141 }
929 1142
@@ -948,11 +1161,12 @@
948 1161 font-size: 13px;
949 1162 font-weight: 700;
950 1163 }
951 1164
952 -.mlsimport-activity-stat--added { background: #ecfdf5; color: #047857; }
953 -.mlsimport-activity-stat--edited { background: #fffbeb; color: #b45309; }
954 -.mlsimport-activity-stat--deleted { background: #fef2f2; color: #b91c1c; }
1165 +/* Per-action tinted stat pills: added (green), edited (amber), deleted (red). */
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; }
955 1169
956 1170 .mlsimport-activity-banner__breakdown {
957 1171 margin: 0 0 10px;
958 1172 padding: 0;
@@ -957,10 +1171,10 @@
957 1171 margin: 0 0 10px;
958 1172 padding: 0;
959 1173 list-style: none;
960 1174 max-width: 900px;
961 - border: 1px solid #e0e0e0;
962 - border-radius: 6px;
1175 + border: 1px solid rgba(28,25,23,0.12);
1176 + border-radius: var(--border-radius);
963 1177 overflow: hidden;
964 1178 }
965 1179
966 1180 .mlsimport-activity-banner__breakdown li {
@@ -975,16 +1189,18 @@
975 1189 background: #fff;
976 1190 }
977 1191
978 1192 .mlsimport-activity-banner__breakdown li:nth-child(even) {
979 - background: #f6f7f7;
1193 + background: #f3efe7;
980 1194 }
981 1195
1196 +/* Per-task name cell: grows to fill, truncates with an ellipsis when long
1197 + (min-width:0 lets the flex item shrink below its content width). */
982 1198 .mlsimport-activity-banner__task {
983 1199 flex: 1 1 auto;
984 1200 min-width: 0;
985 1201 font-weight: 600;
986 - color: #1d2327;
1202 + color: #1c1917;
987 1203 overflow: hidden;
988 1204 text-overflow: ellipsis;
989 1205 white-space: nowrap;
990 1206 }
@@ -1004,17 +1220,20 @@
1004 1220 font-weight: 600;
1005 1221 line-height: 1.6;
1006 1222 white-space: nowrap;
1007 1223 color: #ffffff;
1224 + border-radius: var(--radius-pill);
1008 1225 }
1009 1226
1010 -.mlsimport-activity-chip--added { background: #10B981; }
1011 -.mlsimport-activity-chip--edited { background: #F59E0B; color: #1a1a1a; }
1012 -.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); }
1013 1231
1232 +/* Muted styling for a zero-count chip. */
1014 1233 .mlsimport-activity-chip.is-zero {
1015 - background: #f0f0f1;
1016 - color: #8c8f94;
1234 + background: #f3efe7;
1235 + color: #9a9285;
1017 1236 }
1018 1237
1019 1238 .mlsimport-activity-banner__actions {
1020 1239 margin: 0;
@@ -1023,20 +1242,20 @@
1023 1242 .mlsimport-activity-banner__link {
1024 1243 display: inline-flex;
1025 1244 align-items: center;
1026 1245 gap: 5px;
1027 - padding: 5px 13px;
1028 - background: #2271b1;
1246 + padding: 5px 15px;
1247 + background: #1c1917;
1029 1248 color: #ffffff !important;
1030 1249 text-decoration: none !important;
1031 1250 font-size: 13px;
1032 1251 font-weight: 600;
1033 - border-radius: 4px;
1252 + border-radius: var(--radius-pill);
1034 1253 }
1035 1254
1036 1255 .mlsimport-activity-banner__link:hover,
1037 1256 .mlsimport-activity-banner__link:focus {
1038 - background: #135e96;
1257 + background: #33302b;
1039 1258 color: #ffffff !important;
1040 1259 }
1041 1260
1042 1261 /* -------------------------------------------------------
@@ -1051,28 +1270,32 @@
1051 1270 align-items: center;
1052 1271 gap: 8px 12px;
1053 1272 padding: 12px 14px;
1054 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);
1055 1278 }
1056 1279
1057 1280 .mlsimport-history-filters label {
1058 1281 font-size: 13px;
1059 1282 font-weight: 600;
1060 - color: #1d2327;
1283 + color: #1c1917;
1061 1284 }
1062 1285
1063 1286 .mlsimport-history-filters input[type="search"],
1064 1287 .mlsimport-history-filters select {
1065 1288 height: 32px;
1066 - border-radius: 4px;
1067 - border-color: #e0e0e0;
1289 + border-radius: 8px;
1290 + border-color: rgba(28,25,23,0.12);
1068 1291 }
1069 1292
1070 1293 .mlsimport-history-filters .button {
1071 - background: #2271b1;
1072 - border-color: #2271b1;
1294 + background: #1c1917;
1295 + border-color: #1c1917;
1073 1296 color: #ffffff;
1074 - border-radius: 4px;
1297 + border-radius: var(--radius-pill);
1075 1298 height: 32px;
1076 1299 padding: 0 14px;
1077 1300 font-weight: 600;
1078 1301 }
@@ -1078,10 +1301,10 @@
1078 1301 }
1079 1302
1080 1303 .mlsimport-history-filters .button:hover,
1081 1304 .mlsimport-history-filters .button:focus {
1082 - background: #135e96;
1083 - border-color: #135e96;
1305 + background: #33302b;
1306 + border-color: #33302b;
1084 1307 color: #ffffff;
1085 1308 }
1086 1309
1087 1310 /* -------------------------------------------------------
@@ -1098,21 +1321,22 @@
1098 1321 text-transform: capitalize;
1099 1322 white-space: nowrap;
1100 1323 }
1101 1324
1325 +/* Added-action badge (mint). */
1102 1326 .mlsimport-activity-action--added {
1103 - background-color: #10B981;
1104 - color: #ffffff;
1327 + background-color: var(--success-soft);
1328 + color: var(--success-deep);
1105 1329 }
1106 1330
1107 1331 .mlsimport-activity-action--edited {
1108 - background-color: #F59E0B;
1109 - color: #1a1a1a;
1332 + background-color: var(--warning-soft);
1333 + color: var(--warning-deep);
1110 1334 }
1111 1335
1112 1336 .mlsimport-activity-action--deleted {
1113 - background-color: #EF4444;
1114 - color: #ffffff;
1337 + background-color: var(--error-soft);
1338 + color: var(--error-color);
1115 1339 }
1116 1340
1117 1341 /* Searchable City/County multi-select — filter input above the native list. */
1118 1342 .mlsimport-2025-select.mlsimport-searchable-select,
@@ -1124,12 +1348,13 @@
1124 1348 width: 100%;
1125 1349 box-sizing: border-box;
1126 1350 margin-bottom: 6px;
1127 1351 padding: 6px 12px;
1128 - border: 1px solid #DCDFE4;
1352 + border: 1px solid rgba(28,25,23,0.18);
1129 1353 border-radius: 8px;
1130 1354 box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
1131 1355 }
1356 +/* Chip tray showing currently selected City/County values. */
1132 1357 .mlsimport-selected-chips {
1133 1358 display: flex;
1134 1359 flex-wrap: wrap;
1135 1360 gap: 6px;
@@ -1135,8 +1360,9 @@
1135 1360 gap: 6px;
1136 1361 max-width: 450px;
1137 1362 margin: 6px 0;
1138 1363 }
1364 +/* Collapse the tray when nothing is selected. */
1139 1365 .mlsimport-selected-chips:empty {
1140 1366 display: none;
1141 1367 }
1142 1368 .mlsimport-chip {
@@ -1143,14 +1369,15 @@
1143 1369 display: inline-flex;
1144 1370 align-items: center;
1145 1371 gap: 4px;
1146 1372 padding: 2px 4px 2px 10px;
1147 - background: #909090;
1373 + background: #1c1917;
1148 1374 color: #ffffff;
1149 1375 border-radius: 12px;
1150 1376 font-size: 12px;
1151 1377 line-height: 1.8;
1152 1378 }
1379 +/* Round "x" remove button inside a selected chip. */
1153 1380 .mlsimport-chip-remove {
1154 1381 display: inline-flex;
1155 1382 align-items: center;
1156 1383 justify-content: center;
@@ -1166,5 +1393,299 @@
1166 1393 cursor: pointer;
1167 1394 }
1168 1395 .mlsimport-chip-remove:hover {
1169 1396 background: rgba(255, 255, 255, 0.45);
1170 -}
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 +}