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 +701 -172 6.3.17.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;
@@ -245,8 +302,9 @@
245 302 #mlsimport_stop_item,
246 303 #mlsimport-start_item{
247 304 display: inline-block;
248 305 margin: 0px 10px 30px 0px;
306 + line-height: normal;
249 307 }
250 308
251 309 .mlsimport_hidden_field_button {
252 310 max-width: 450px;
@@ -259,15 +317,10 @@
259 317 max-width: 800px;
260 318 margin-top: 5px;
261 319 }
262 320
263 -.mlsimport_tool_field_item_wrapper{
264 - margin-bottom: 30px;
265 -}
266 -#mlsimport-disable-history,
267 -#mlsimport-disable-logs{
268 - margin-top: 10px;
269 -}
321 +/* Tools-tab blocks are defined at the end of this file, so they win ties
322 + against the later 2025 overrides. */
270 323
271 324
272 325
273 326
@@ -278,8 +331,10 @@
278 331
279 332
280 333
281 334 /*==WpResidence*/
335 +/* Cap uploaded property thumbnail preview size (selector name is misspelled
336 + "thumb_wrapepr" to match the markup). */
282 337 #property_uploaded_thumb_wrapepr img{
283 338 max-width: 200px;
284 339 max-height: 200px;
285 340 }
@@ -286,33 +341,99 @@
286 341
287 342 table.media .column-title .media-icon img {
288 343 width:60px;
289 344 }
345 +/* Admin message banners (notification / validated / warning). Base is a pink
346 + box; individual variants below re-colour it. */
290 347 .mlsimport_notification,
291 348 .mlsimport_validated,
292 349 .mlsimport_warning{
293 - 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;
294 402 color: #fff;
295 - padding: 10px;
296 - margin-bottom: 10px;
297 - border-radius: 2px;
403 + font-size: 15px;
404 + font-weight: 700;
405 + line-height: 1.4;
406 + text-decoration: none;
298 407 }
299 408
409 +.mlsimport-account-subscription a.mlsimport-account-subscription-action:hover {
410 + background: #44403c;
411 + border-color: #44403c;
412 + color: #fff;
413 +}
300 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. */
301 421 .mlsimport_populate_warning{
302 - background: #4f46e5;
422 + background: var(--primary-color);
303 423 color: #fff;
304 - padding: 10px;
424 + padding: 12px 16px;
305 425 margin-bottom: 10px;
306 - border-radius: 2px;
426 + border-radius: var(--border-radius);
307 427 }
308 428
309 429
430 +/* "Validated" variant: amber-tinted background with a warning left border. */
310 431 .mlsimport_validated{
311 432 padding: 0.75rem 1rem;
312 433 margin-bottom: 1rem;
313 434 border-radius: var(--border-radius);
314 - background-color: rgba(245, 158, 11, 0.1);
435 + background-color: rgba(250, 227, 154, 0.4);
315 436 border-left: 4px solid var(--warning-color);
316 437 color: var(--text-primary);
317 438 }
318 439
@@ -317,28 +438,34 @@
317 438 }
318 439
319 440
320 441 .mlsimport_notification{
321 - background: #a5862b;
442 + background: var(--warning-soft);
443 + color: var(--warning-deep);
322 444 }
323 445
324 446
325 447 #mlsimport_item_metaboxes-sectionid .mlsimport_notification{
326 - background: #a5862b;
448 + background: var(--warning-soft);
449 + color: var(--warning-deep);
327 450 max-width: 500px;
328 451 }
329 452
330 453
454 +/* Scrollable status/output box inside the import-task metabox. */
331 455 #mlsimport_item_status{
332 456 width: auto;
333 - background-color: #f5f5f5;
457 + background-color: #f3efe7;
334 458 overflow-y: scroll;
335 459 padding: 10px;
336 - border-radius: 5px;
460 + border-radius: var(--border-radius);
337 461 margin-bottom: 15px;
338 462 }
339 463
340 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. */
341 468 label.mlsimport_switch {
342 469 position: absolute;
343 470 display: inline-block;
344 471 width: 53px!important;
@@ -359,9 +486,9 @@
359 486 top: 0;
360 487 left: 0;
361 488 right: 0;
362 489 bottom: 0;
363 - background-color: #ccc;
490 + background-color: rgba(28,25,23,0.18);
364 491 -webkit-transition: .4s;
365 492 transition: .4s;
366 493 }
367 494
@@ -376,14 +503,15 @@
376 503 -webkit-transition: .4s;
377 504 transition: .4s;
378 505 }
379 506
507 +/* Checked state: blue track, and the knob slides right (translateX below). */
380 508 .mlsimport_switch input:checked + .slider {
381 - background-color: #2196F3;
509 + background-color: #e85d3c;
382 510 }
383 511
384 512 .mlsimport_switch input:focus + .slider {
385 - box-shadow: 0 0 1px #2196F3;
513 + box-shadow: 0 0 1px #e85d3c;
386 514 }
387 515
388 516 .mlsimport_switch input:checked + .slider:before {
389 517 -webkit-transform: translateX(26px);
@@ -393,8 +521,9 @@
393 521
394 522
395 523
396 524
525 +/* Rounded (pill) variant of the toggle track and knob. */
397 526 .slider.round {
398 527 border-radius: 25px;
399 528 }
400 529 .slider.round:before {
@@ -409,24 +538,19 @@
409 538 #mlsimport-delete-prop{
410 539 margin-top: 15px;
411 540 }
412 541
413 -.fieldset_mlsimport_tresle_client_id,
414 -.fieldset_mlsimport_tresle_client_secret{
415 - display:none;
416 -}
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. */
417 546
418 -.fieldset_mlsimport_connectmls_username,
419 -.fieldset_mlsimport_connectmls_password{
420 - display:none;
421 -}
422 547
423 548
424 549
425 -
426 550 .mlsimport_param_wrapper input[type=text]{
427 551 min-width: 450px;
428 - border-color: #ccc;
552 + border-color: rgba(28,25,23,0.18);
429 553 padding: 5px 12px;
430 554 }
431 555
432 556 #mlsimport_item_min_price,
@@ -435,12 +559,13 @@
435 559 max-width: 210px;
436 560 }
437 561
438 562
563 +/* Sign-up / account CTA box shown when no account is connected. */
439 564 .mlsimport_signup{
440 565 display: inline-block;
441 - background-color: #f0f0f1;
442 - border-radius: 5px;
566 + background-color: #f3efe7;
567 + border-radius: 14px;
443 568 padding: 20px;
444 569 font-size: 15px;
445 570 margin-bottom: 15px;
446 571 }
@@ -456,8 +581,9 @@
456 581 /*==WpEstate*/
457 582
458 583 /*==Houzez*/
459 584
585 +/* Houzez property list thumbnail column sizing. */
460 586 .column-thumbnail img {
461 587 max-width: 100%;
462 588 height: auto;
463 589 min-width:
@@ -468,17 +594,21 @@
468 594
469 595
470 596
471 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. */
472 600
601 +/* Tab content panel — hidden until activated. */
473 602 .content-nav-tab{
474 603 display:none;
475 604 padding: 30px 15px;
476 605 background: #fff;
477 - border: 1px solid #ccc;
606 + border: 1px solid rgba(28,25,23,0.18);
478 607 border-top: 0px;
479 608 }
480 609
610 +/* Active tab panel becomes a visible flex container. */
481 611 .content-nav-tab-active{
482 612 display: flex;
483 613 }
484 614
@@ -486,8 +616,9 @@
486 616 .content-nav-tab.mlsimport_2025_card{
487 617 width: auto;
488 618 }
489 619
620 +/* White rounded card with layered shadow (2025 card container). */
490 621 .mlsimport_2025_card{
491 622 flex-direction: column;
492 623 align-items: center;
493 624 padding: 0px;
@@ -492,10 +623,10 @@
492 623 align-items: center;
493 624 padding: 0px;
494 625
495 626 background: #FFFFFF;
496 - box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.06), 0px 5px 22px rgba(0, 0, 0, 0.04);
497 - 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);
498 629 flex: none;
499 630 order: 0;
500 631 flex-grow: 1;
501 632
@@ -509,8 +640,9 @@
509 640 padding: 30px;
510 641 }
511 642
512 643
644 +/* Tab strip container (overrides WP core nav-tab-wrapper border). */
513 645 .nav-tab-wrapper.mlsimport-tab-wrapper{
514 646 border: none;
515 647 padding: 0px 15px;
516 648 margin-top: 50px;
@@ -519,22 +651,33 @@
519 651
520 652 .nav-tab-wrapper.mlsimport-tab-wrapper .nav-tab {
521 653
522 654 text-transform: uppercase;
523 - color: #23202c;
655 + color: var(--text-secondary);
524 656 padding: 15px 25px;
525 - background: #f1f1f1;
526 - border-top-right-radius:5px;
527 - border-top-left-radius: 5px;
657 + background: #f3efe7;
658 + border-top-right-radius: 12px;
659 + border-top-left-radius: 12px;
528 660
529 661 padding: 15px 30px;
530 662 background: #fff;
531 - 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);
532 667 }
533 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). */
534 675 .nav-tab-wrapper.mlsimport-tab-wrapper .nav-tab.nav-tab-active{
535 - background-color: #635BFF;
676 + background-color: var(--primary-color);
536 677 color: #fff;
678 + border-color: var(--primary-color);
679 + font-weight: 600;
537 680 }
538 681
539 682 .content-nav-tab.mlsimport_2025_card form{
540 683 max-width: 500px;
@@ -539,13 +682,8 @@
539 682 .content-nav-tab.mlsimport_2025_card form{
540 683 max-width: 500px;
541 684 }
542 685
543 -.content-nav-tab.mlsimport_2025_card form.mlsimport-import-fields-form{
544 - max-width: 100%;
545 -}
546 -
547 -
548 686 .mlsimport_2025_card_admin_options {
549 687 display: flex;
550 688 flex-direction: row;
551 689 }
@@ -552,8 +690,11 @@
552 690
553 691 .mlsimport_2025_card_admin_options:empty{
554 692 display: none;
555 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. */
556 697 .mlsimport-steps{
557 698 font-size: 16px;
558 699 display: flex;
559 700 flex-direction: column;
@@ -574,8 +715,9 @@
574 715 margin-bottom: 20px;
575 716 line-height: 27px;
576 717 }
577 718
719 +/* Circular numbered badge rendered from the CSS counter value. */
578 720 .mlsimport-steps li::before {
579 721 content: counter(step-counter);
580 722 position: absolute;
581 723 left: 0;
@@ -581,9 +723,9 @@
581 723 left: 0;
582 724 top: 0;
583 725 width: 30px;
584 726 height: 30px;
585 - background-color: #635bff;
727 + background-color: var(--accent-color);
586 728 color: white;
587 729 border-radius: 50%;
588 730 display: flex;
589 731 align-items: center;
@@ -592,8 +734,10 @@
592 734 }
593 735
594 736
595 737 /*==2025 Inputs*/
738 +/* Shared styling for text/password/select inputs in the 2025 UI:
739 + bordered, rounded, subtle shadow, inline-flex layout. */
596 740
597 741 input[type=password].mlsimport-input.mlsimport-2025-input,
598 742 input[type=text].mlsimport-input.mlsimport-2025-input,
599 743 .mlsimport-input.mlsimport-2025-input{
@@ -603,9 +747,9 @@
603 747 flex-direction: column;
604 748 align-items: flex-start;
605 749 isolation: isolate;
606 750 background: #FFFFFF;
607 - border: 1px solid #DCDFE4;
751 + border: 1px solid rgba(28,25,23,0.18);
608 752 box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
609 753 border-radius: 8px;
610 754 flex: none;
611 755 order: 1;
@@ -612,8 +756,10 @@
612 756 align-self: stretch;
613 757 flex-grow: 0;
614 758 display: inline-flex;
615 759 }
760 +/* 2025 label override (later in the file, so it wins over the earlier
761 + .mlsimport-label float rule for these screens). */
616 762 .mlsimport-label {
617 763 display: block;
618 764 margin-bottom: 0px;
619 765 font-weight: 500;
@@ -628,9 +774,9 @@
628 774 display: inline-flex;
629 775 flex-direction: column;
630 776 align-items: flex-start;
631 777 isolation: isolate;
632 - border: 1px solid #DCDFE4;
778 + border: 1px solid rgba(28,25,23,0.18);
633 779 box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
634 780 border-radius: 8px;
635 781 flex: none;
636 782 align-self: stretch;
@@ -639,17 +785,24 @@
639 785
640 786
641 787
642 788
789 +/* Default bordered look for fieldset inputs and the import "select all" boxes. */
643 790 .mlsimport-fieldset-wrapper input,
644 791 input[type=checkbox].mlsimport_select_import_admin_all,
645 792 input[type=checkbox].mlsimport_select_import_all {
646 - border: 1px solid #ccc;
793 + border: 1px solid rgba(28,25,23,0.18);
647 794 border-radius: 2px;
648 795 background-color: #fff!important;
649 796 }
650 797
651 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. */
652 805 .button.mlsimport_button{
653 806 font-size: 14px;
654 807 position: relative;
655 808 display: flex;
@@ -655,78 +808,122 @@
655 808 display: flex;
656 809 flex-direction: column;
657 810 justify-content: center;
658 811 align-items: center;
659 - padding: 7px 30px;
660 - background: linear-gradient(180deg, #635BFF 0%, #4E36F5 100%);
661 - border: 1px solid #15B79F;
662 - 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);
663 818 color:#fff;
664 819 flex: none;
665 820 order: 1;
666 821 flex-grow: 0;
667 - 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);
668 824 }
669 825
670 826 .button.mlsimport_button:hover {
671 - background: linear-gradient(180deg, #635BFF 0%, #4E36F5 100%);
827 + background: var(--primary-hover);
672 828 color:#fff;
673 - border: 1px solid #15B79F;
674 - 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);
675 831 }
676 832
677 -.button.save_data {
678 - background: linear-gradient(180deg, var(--success-color) 0%, #0C8A61 100%);
679 - border: 1px solid var(--success-color);
680 - 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);
681 840 }
682 841
683 -.button.save_data:hover {
684 - background: linear-gradient(180deg, var(--success-color) 0%, #0C8A61 100%);
685 - border: 1px solid var(--success-color);
686 - 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);
687 848 }
688 849
689 850
690 -.button.secondary {
691 - background: linear-gradient(180deg, #32383e 0%, #25292e 100%);
692 - border: 1px solid #32383e;
693 - color: #fff;
694 - 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);
695 861 }
696 -
697 - .button.secondary:hover {
698 - background: linear-gradient(180deg, #32383e 0%, #25292e 100%);
699 - border: 1px solid #32383e;
700 - color: #fff;
701 - 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);
702 870 }
703 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 +}
704 887
705 888
706 - .button.warning_action {
707 - background: linear-gradient(180deg, #fb9c0c 0%, #d0810a 100%);
708 - border: 1px solid #fb9c0c;
709 - 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);
710 897 }
711 -
712 - .button.warning_action:hover {
713 - background: linear-gradient(180deg, #fb9c0c 0%, #d0810a 100%);
714 - border: 1px solid #fb9c0c;
715 - 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);
716 905 }
717 906
718 907
719 - .button.error_action {
720 - background: linear-gradient(180deg, #bb241a 0%, #9b1e16 100%);
721 - border: 1px solid #bb241a;
722 - 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);
723 918 }
724 -
725 - .button.error_action:hover {
726 - background: linear-gradient(180deg, #bb241a 0%, #9b1e16 100%);
727 - border: 1px solid #bb241a;
728 - 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);
729 926 }
730 927
731 928
732 929
@@ -741,8 +938,12 @@
741 938
742 939
743 940
744 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. */
745 946 input[type=checkbox].mlsimport-import-checkbox,
746 947 input[type=checkbox].mlsimport-admin-checkbox {
747 948 appearance: none;
748 949 -webkit-appearance: none;
@@ -763,9 +964,9 @@
763 964 top: 0;
764 965 left: 0;
765 966 width: 24px;
766 967 height: 24px;
767 - 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>");
768 969 background-size: 24px 24px;
769 970 background-position: center;
770 971 background-repeat: no-repeat;
771 972 margin: 0px;
@@ -770,16 +971,19 @@
770 971 background-repeat: no-repeat;
771 972 margin: 0px;
772 973 }
773 974
975 + /* Checked state swaps in the filled indigo box + white tick SVG. */
774 976 input[type=checkbox].mlsimport-import-checkbox:checked:before,
775 977 input[type=checkbox].mlsimport-admin-checkbox:checked:before {
776 - 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>");
777 979 }
778 980
779 981
780 982
781 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. */
782 986 .mlsimport-save-progress {
783 987 position: fixed;
784 988 top: 50%;
785 989 left: 50%;
@@ -786,9 +990,9 @@
786 990 transform: translate(-50%, -50%);
787 991 z-index: 9999;
788 992 background: #fff;
789 993 padding: 40px;
790 - border-radius: 10px;
994 + border-radius: var(--radius-card);
791 995 /* border: 1px solid #ddd; */
792 996 box-shadow: 0 7px 54px rgba(0, 0, 0, 0.15);
793 997 width: 500px;
794 998 min-height: 200px;
@@ -806,23 +1010,26 @@
806 1010 }
807 1011
808 1012 .mlsimport-save-progress-bar {
809 1013 height: 10px;
810 - background: #eee;
1014 + background: #f3efe7;
811 1015 margin-top: 5px;
812 1016 border-radius: 5px;
813 1017 overflow: hidden;
814 1018 }
815 1019
1020 +/* Animated fill inside the save progress bar (width driven by JS). */
816 1021 .mlsimport-save-progress-bar .progress-fill {
817 1022 width: 0%;
818 1023 height: 100%;
819 - background: #635BFF;
1024 + background: var(--accent-color);
820 1025 border-radius: 5px;
821 1026 transition: width 0.3s;
822 1027 }
823 1028
824 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. */
825 1032 #mlsimport-exit-survey-modal {
826 1033 position: fixed;
827 1034 inset: 0;
828 1035 z-index: 100000;
@@ -832,8 +1039,9 @@
832 1039 }
833 1040 #mlsimport-exit-survey-modal.mlsimport-es-hidden {
834 1041 display: none;
835 1042 }
1043 +/* Semi-transparent dim layer behind the survey card. */
836 1044 .mlsimport-es-backdrop {
837 1045 position: absolute;
838 1046 inset: 0;
839 1047 background: rgba(0, 0, 0, 0.6);
@@ -840,9 +1048,9 @@
840 1048 }
841 1049 .mlsimport-es-card {
842 1050 position: relative;
843 1051 background: #fff;
844 - border-radius: 6px;
1052 + border-radius: var(--radius-card);
845 1053 padding: 26px 28px;
846 1054 width: 460px;
847 1055 max-width: 92vw;
848 1056 box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
@@ -852,20 +1060,21 @@
852 1060 font-size: 18px;
853 1061 }
854 1062 .mlsimport-es-intro {
855 1063 margin: 0 0 16px;
856 - color: #555;
1064 + color: #6b6358;
857 1065 }
1066 +/* Selectable reason row in the exit survey. */
858 1067 .mlsimport-es-option {
859 1068 display: block;
860 1069 padding: 8px 10px;
861 1070 margin: 4px 0;
862 - border: 1px solid #e0e0e0;
863 - border-radius: 4px;
1071 + border: 1px solid rgba(28,25,23,0.18);
1072 + border-radius: var(--border-radius);
864 1073 cursor: pointer;
865 1074 }
866 1075 .mlsimport-es-option:hover {
867 - background: #f6f6f6;
1076 + background: #f3efe7;
868 1077 }
869 1078 .mlsimport-es-other {
870 1079 width: 100%;
871 1080 margin-top: 10px;
@@ -877,9 +1086,9 @@
877 1086 align-items: center;
878 1087 gap: 16px;
879 1088 }
880 1089 .mlsimport-es-skip {
881 - color: #777;
1090 + color: #9a9285;
882 1091 text-decoration: underline;
883 1092 }
884 1093 .mlsimport-es-hidden {
885 1094 display: none;
@@ -890,8 +1099,13 @@
890 1099 ------------------------------------------------------- */
891 1100
892 1101 .mlsimport-activity-banner {
893 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);
894 1108 }
895 1109
896 1110 .mlsimport-activity-banner__counts {
897 1111 display: flex;
@@ -906,9 +1120,9 @@
906 1120 align-items: center;
907 1121 gap: 7px;
908 1122 font-size: 14px;
909 1123 font-weight: 700;
910 - color: #1d2327;
1124 + color: #1c1917;
911 1125 }
912 1126
913 1127 .mlsimport-activity-banner__title::before {
914 1128 content: "";
@@ -914,15 +1128,15 @@
914 1128 content: "";
915 1129 width: 9px;
916 1130 height: 9px;
917 1131 border-radius: 50%;
918 - background: #2271b1;
1132 + background: #1c1917;
919 1133 }
920 1134
921 1135 .mlsimport-activity-banner__period {
922 1136 font-weight: 500;
923 1137 font-size: 11px;
924 - color: #646970;
1138 + color: #9a9285;
925 1139 text-transform: uppercase;
926 1140 letter-spacing: .05em;
927 1141 }
928 1142
@@ -947,25 +1161,26 @@
947 1161 font-size: 13px;
948 1162 font-weight: 700;
949 1163 }
950 1164
951 -.mlsimport-activity-stat--added { background: #ecfdf5; color: #047857; }
952 -.mlsimport-activity-stat--edited { background: #fffbeb; color: #b45309; }
953 -.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; }
954 1169
955 1170 .mlsimport-activity-banner__breakdown {
956 1171 margin: 0 0 10px;
957 1172 padding: 0;
958 1173 list-style: none;
959 - max-width: 580px;
960 - border: 1px solid #e0e0e0;
961 - border-radius: 6px;
1174 + max-width: 900px;
1175 + border: 1px solid rgba(28,25,23,0.12);
1176 + border-radius: var(--border-radius);
962 1177 overflow: hidden;
963 1178 }
964 1179
965 1180 .mlsimport-activity-banner__breakdown li {
966 1181 display: flex;
967 - flex-wrap: wrap;
1182 + flex-wrap: nowrap;
968 1183 align-items: center;
969 1184 justify-content: space-between;
970 1185 gap: 8px;
971 1186 margin: 0;
@@ -974,18 +1189,27 @@
974 1189 background: #fff;
975 1190 }
976 1191
977 1192 .mlsimport-activity-banner__breakdown li:nth-child(even) {
978 - background: #f6f7f7;
1193 + background: #f3efe7;
979 1194 }
980 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). */
981 1198 .mlsimport-activity-banner__task {
1199 + flex: 1 1 auto;
1200 + min-width: 0;
982 1201 font-weight: 600;
983 - color: #1d2327;
1202 + color: #1c1917;
1203 + overflow: hidden;
1204 + text-overflow: ellipsis;
1205 + white-space: nowrap;
984 1206 }
985 1207
986 1208 .mlsimport-activity-banner__chips {
987 1209 display: inline-flex;
1210 + flex: 0 0 auto;
1211 + flex-wrap: nowrap;
988 1212 gap: 5px;
989 1213 }
990 1214
991 1215 .mlsimport-activity-chip {
@@ -996,17 +1220,20 @@
996 1220 font-weight: 600;
997 1221 line-height: 1.6;
998 1222 white-space: nowrap;
999 1223 color: #ffffff;
1224 + border-radius: var(--radius-pill);
1000 1225 }
1001 1226
1002 -.mlsimport-activity-chip--added { background: #10B981; }
1003 -.mlsimport-activity-chip--edited { background: #F59E0B; color: #1a1a1a; }
1004 -.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); }
1005 1231
1232 +/* Muted styling for a zero-count chip. */
1006 1233 .mlsimport-activity-chip.is-zero {
1007 - background: #f0f0f1;
1008 - color: #8c8f94;
1234 + background: #f3efe7;
1235 + color: #9a9285;
1009 1236 }
1010 1237
1011 1238 .mlsimport-activity-banner__actions {
1012 1239 margin: 0;
@@ -1015,20 +1242,20 @@
1015 1242 .mlsimport-activity-banner__link {
1016 1243 display: inline-flex;
1017 1244 align-items: center;
1018 1245 gap: 5px;
1019 - padding: 5px 13px;
1020 - background: #2271b1;
1246 + padding: 5px 15px;
1247 + background: #1c1917;
1021 1248 color: #ffffff !important;
1022 1249 text-decoration: none !important;
1023 1250 font-size: 13px;
1024 1251 font-weight: 600;
1025 - border-radius: 4px;
1252 + border-radius: var(--radius-pill);
1026 1253 }
1027 1254
1028 1255 .mlsimport-activity-banner__link:hover,
1029 1256 .mlsimport-activity-banner__link:focus {
1030 - background: #135e96;
1257 + background: #33302b;
1031 1258 color: #ffffff !important;
1032 1259 }
1033 1260
1034 1261 /* -------------------------------------------------------
@@ -1043,28 +1270,32 @@
1043 1270 align-items: center;
1044 1271 gap: 8px 12px;
1045 1272 padding: 12px 14px;
1046 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);
1047 1278 }
1048 1279
1049 1280 .mlsimport-history-filters label {
1050 1281 font-size: 13px;
1051 1282 font-weight: 600;
1052 - color: #1d2327;
1283 + color: #1c1917;
1053 1284 }
1054 1285
1055 1286 .mlsimport-history-filters input[type="search"],
1056 1287 .mlsimport-history-filters select {
1057 1288 height: 32px;
1058 - border-radius: 4px;
1059 - border-color: #e0e0e0;
1289 + border-radius: 8px;
1290 + border-color: rgba(28,25,23,0.12);
1060 1291 }
1061 1292
1062 1293 .mlsimport-history-filters .button {
1063 - background: #2271b1;
1064 - border-color: #2271b1;
1294 + background: #1c1917;
1295 + border-color: #1c1917;
1065 1296 color: #ffffff;
1066 - border-radius: 4px;
1297 + border-radius: var(--radius-pill);
1067 1298 height: 32px;
1068 1299 padding: 0 14px;
1069 1300 font-weight: 600;
1070 1301 }
@@ -1070,10 +1301,10 @@
1070 1301 }
1071 1302
1072 1303 .mlsimport-history-filters .button:hover,
1073 1304 .mlsimport-history-filters .button:focus {
1074 - background: #135e96;
1075 - border-color: #135e96;
1305 + background: #33302b;
1306 + border-color: #33302b;
1076 1307 color: #ffffff;
1077 1308 }
1078 1309
1079 1310 /* -------------------------------------------------------
@@ -1090,21 +1321,22 @@
1090 1321 text-transform: capitalize;
1091 1322 white-space: nowrap;
1092 1323 }
1093 1324
1325 +/* Added-action badge (mint). */
1094 1326 .mlsimport-activity-action--added {
1095 - background-color: #10B981;
1096 - color: #ffffff;
1327 + background-color: var(--success-soft);
1328 + color: var(--success-deep);
1097 1329 }
1098 1330
1099 1331 .mlsimport-activity-action--edited {
1100 - background-color: #F59E0B;
1101 - color: #1a1a1a;
1332 + background-color: var(--warning-soft);
1333 + color: var(--warning-deep);
1102 1334 }
1103 1335
1104 1336 .mlsimport-activity-action--deleted {
1105 - background-color: #EF4444;
1106 - color: #ffffff;
1337 + background-color: var(--error-soft);
1338 + color: var(--error-color);
1107 1339 }
1108 1340
1109 1341 /* Searchable City/County multi-select — filter input above the native list. */
1110 1342 .mlsimport-2025-select.mlsimport-searchable-select,
@@ -1116,12 +1348,13 @@
1116 1348 width: 100%;
1117 1349 box-sizing: border-box;
1118 1350 margin-bottom: 6px;
1119 1351 padding: 6px 12px;
1120 - border: 1px solid #DCDFE4;
1352 + border: 1px solid rgba(28,25,23,0.18);
1121 1353 border-radius: 8px;
1122 1354 box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
1123 1355 }
1356 +/* Chip tray showing currently selected City/County values. */
1124 1357 .mlsimport-selected-chips {
1125 1358 display: flex;
1126 1359 flex-wrap: wrap;
1127 1360 gap: 6px;
@@ -1127,8 +1360,9 @@
1127 1360 gap: 6px;
1128 1361 max-width: 450px;
1129 1362 margin: 6px 0;
1130 1363 }
1364 +/* Collapse the tray when nothing is selected. */
1131 1365 .mlsimport-selected-chips:empty {
1132 1366 display: none;
1133 1367 }
1134 1368 .mlsimport-chip {
@@ -1135,14 +1369,15 @@
1135 1369 display: inline-flex;
1136 1370 align-items: center;
1137 1371 gap: 4px;
1138 1372 padding: 2px 4px 2px 10px;
1139 - background: #909090;
1373 + background: #1c1917;
1140 1374 color: #ffffff;
1141 1375 border-radius: 12px;
1142 1376 font-size: 12px;
1143 1377 line-height: 1.8;
1144 1378 }
1379 +/* Round "x" remove button inside a selected chip. */
1145 1380 .mlsimport-chip-remove {
1146 1381 display: inline-flex;
1147 1382 align-items: center;
1148 1383 justify-content: center;
@@ -1158,5 +1393,299 @@
1158 1393 cursor: pointer;
1159 1394 }
1160 1395 .mlsimport-chip-remove:hover {
1161 1396 background: rgba(255, 255, 255, 0.45);
1162 -}
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 +}