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 +1328 -158 5.8.37.2.1 View file →
@@ -1,92 +1,83 @@
1 -/*Real Homes admin adjusments*/
2 1
3 -.post-type-property .column-property-thumbnail img{
4 - width: 130px;
5 - height: auto;
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 +
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. */
21 +:root {
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;
41 + --background-white: #FFFFFF;
42 + --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
43 + --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
44 + --border-radius: 10px;
45 + --radius-card: 18px;
46 + --radius-pill: 999px;
47 + --transition-speed: 0.2s;
6 48 }
7 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 +}
8 57
9 58
10 -/*Plugin CSS*/
11 59
12 -.mlsimport-tab-wrapper{
13 60
14 -}
61 +/*Real Homes admin adjusments*/
15 62
16 -.mlsimport-tab-wrapper .nav-tab {
17 - font-size: .8125rem;
18 - line-height: 1.46154;
19 - font-weight: bold;
20 - letter-spacing: -0.08px;
21 - text-transform: uppercase;
22 - color: #23202c;
23 - padding: 15px 25px;
24 - background: #f1f1f1;
63 +/* Constrain the thumbnail column image on the Real Homes property list table. */
64 +.post-type-property .column-property-thumbnail img{
65 + width: 130px;
66 + height: auto;
25 67 }
26 68
27 -.mlsimport-tab-wrapper .nav-tab.nav-tab-active{
28 - background-color: #fff;
29 - border-top: 2px solid #ff4270;
30 -}
31 69
32 -.content-nav-tab{
33 - display:none;
34 - padding: 30px 15px;
35 - background: #fff;
36 - border: 1px solid #ccc;
37 - border-top: 0px;
38 -}
39 70
40 -.mlsimport-fieldset-wrapper input,
41 -input[type=checkbox].mlsimport_select_import_admin_all,
42 -input[type=checkbox].mlsimport_select_import_all {
43 - border: 1px solid #ccc;
44 - border-radius: 2px;
45 - background-color: #fff!important;
46 -}
71 +/*Plugin CSS*/
47 72
48 73
49 -.mlsimport_button{
50 - position: relative;
51 - /* display: inline-block; */
52 - width: auto;
53 - padding: 8px 24px!important;
54 - text-align: center;
55 74
56 - box-shadow: 0 4px 6px rgba(50,50,93,0.11), 0 1px 3px rgba(0,0,0,0.08);
57 - text-transform: uppercase;
58 - text-decoration: none!important;
59 - letter-spacing: -0.08px;
60 - font-weight: bold;
61 - border-radius: 3px;
62 - color: #fff !important;
63 - white-space: nowrap;
64 - -webkit-backface-visibility: hidden;
65 - backface-visibility: hidden;
66 - transition: all 200ms ease-out;
67 - -webkit-transition: all 200ms ease-out;
68 - font-size: .8125rem;
69 - line-height: 1.53846;
70 - border: none!important;
71 - cursor:pointer;
72 - margin-bottom: 30px;
73 -}
74 -.button.mlsimport_button:focus,
75 -.button.mlsimport_button{
76 - background: #ff4270;
77 -}
78 -.button.mlsimport_button:active,
79 -.button.mlsimport_button:hover{
80 - background-color:#cc3459;
81 -}
82 75
83 76
84 77
85 -.content-nav-tab-active{
86 - display:block;
87 -}
88 78
79 +/* Field-mapping row title. */
89 80 .mlsfield_import_title {
90 81 margin: 0px 0px 10px 0px;
91 82 font-size: 15px;
92 83 }
@@ -96,17 +87,18 @@
96 87 margin: 10px 0px 5px 0px;
97 88 }
98 89
99 90 .mls_mandatory_fields{
100 - color: #888;
91 + color: #6b6358;
101 92 margin-bottom: 10px;
102 93 max-width: 600px;
103 94 }
104 95 .mandatory_fields_wrapper_exp{
105 - color: #888;
96 + color: #6b6358;
106 97 max-width: 600px;
107 98 }
108 99
100 +/* Form field label (note: overridden later by the 2025 .mlsimport-label rule). */
109 101 .mlsimport-label{
110 102 font-weight: 600;
111 103 display: inline-block;
112 104 float: left;
@@ -114,8 +106,9 @@
114 106 line-height: 1.6em;
115 107 font-size: 14px;
116 108 }
117 109
110 +/* Helper / explanation text under fields. */
118 111 .mls_explanations{
119 112 line-height: 1.6em;
120 113 }
121 114
@@ -144,14 +137,9 @@
144 137 }
145 138
146 139
147 140 .mlsimport_hidden_field_button{
148 - cursor: pointer;
149 - background-color: #068018;
150 - padding: 5px 10px;
151 - color: #fff;
152 - width: auto;
153 - border-radius: 3px;
141 +
154 142 }
155 143
156 144 .mlsimport-input-wrapper{
157 145 clear: both;
@@ -156,42 +144,43 @@
156 144 .mlsimport-input-wrapper{
157 145 clear: both;
158 146 }
159 147
160 -input[type=password].mlsimport-input,
161 -input[type=text].mlsimport-input,
162 -.mlsimport-input{
163 - min-width: 450px;
164 - border-color: #ccc;
165 - padding: 5px 12px;
166 -}
167 148
168 149 #mlsimport_mls_name_front{
169 - border-color: #ccc;
150 + border-color: rgba(28,25,23,0.18);
170 151 min-width: 450px;
171 152 padding: 5px 12px;
172 153 }
173 154
174 155
175 -.mlsimport-fieldset select{
176 - border-color: #ccc;
177 - min-width: 450px;
178 - padding: 5px 12px;
179 -}
180 156
157 +
158 +/* Styled dropdown used in field mapping/settings: bordered, rounded, subtle shadow. */
181 159 .wp-admin select.mlsimport-select{
182 - min-width: 450px;
183 - border-color: #ccc;
184 - padding: 5px 12px 5px 12px;
160 + max-width: 450px;
161 + padding: 5px 12px;
162 + width: 100%;
163 + box-sizing: border-box;
164 + display: inline-flex;
165 + flex-direction: column;
166 + align-items: flex-start;
167 + isolation: isolate;
168 + border: 1px solid rgba(28,25,23,0.18);
169 + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
170 + border-radius: 8px;
171 + flex: none;
172 + align-self: stretch;
185 173 }
186 174 .wp-admin select.mlsimport-select option{
187 175 padding: 3px 0px;
188 176 }
189 177
178 +/* Grey rounded panel wrapping a group of import parameters. */
190 179 .mlsimport_param_wrapper{
191 - background-color: #f5f5f5;
180 + background-color: #f3efe7;
192 181 padding:20px;
193 - border-radius: 5px;
182 + border-radius: 14px;
194 183 }
195 184
196 185 .postbox .inside .mlsimport_param_wrapper h2{
197 186 font-size: 20px!important;
@@ -200,8 +189,10 @@
200 189 padding-bottom: 19px!important;
201 190 }
202 191
203 192
193 +/* Field-mapping layout: each item is a vertical column; wrapper lays items in a
194 + horizontal flex row with spacing. */
204 195 .mlsimport-fieldset-item{
205 196 display: flex;
206 197 flex-direction: column;
207 198 }
@@ -219,10 +210,11 @@
219 210 padding: 10px 20px;
220 211 margin: 0px;
221 212 }
222 213
214 +/* Zebra-stripe alternating fieldsets in the mandatory-fields list. */
223 215 .mandatory_fields_wrapper .mlsimport-fieldset:nth-child(even){
224 - background-color: #f7f7f7;
216 + background-color: #f3efe7;
225 217 }
226 218
227 219 .mlsimport_auto_switch{
228 220 margin: 0px;
@@ -228,10 +220,11 @@
228 220 margin: 0px;
229 221 padding: 10px;
230 222 }
231 223
224 +/* "Select all" pill button (pink); darker on hover. */
232 225 .mls_import_selec_all_class {
233 - background-color: #cc3459;
226 + background-color: var(--primary-color);
234 227 color: #fff;
235 228 display: inline-block;
236 229 padding: 5px;
237 230 margin-right: 10px;
@@ -237,15 +230,18 @@
237 230 margin-right: 10px;
238 231 margin-bottom: 5px;
239 232 cursor: pointer;
240 233 padding: 7px 14px;
241 - border-radius:5px;
234 + border-radius: var(--radius-pill);
242 235 }
243 236
244 237 .mls_import_selec_all_class:hover {
245 - background-color: #a31034;
238 + background-color: #33302b;
246 239 }
247 240
241 +/* ===== Import progress bar + transfer controls + live log ===== */
242 +
243 +/* Outer progress wrapper (this selector is declared again below). */
248 244 #mlsimport_myProgress_wrapper{
249 245 width:800px;
250 246 margin-top: 10px;
251 247 /* display:none;*/
@@ -250,21 +246,24 @@
250 246 margin-top: 10px;
251 247 /* display:none;*/
252 248 }
253 249
250 +/* "Stop transfer" button (red); note a later rule overrides display to none. */
254 251 #mlsimport_transfer_stop{
255 - padding: 7px;
256 - background: #af3737;
252 + padding: 7px 16px;
253 + background: #c02617;
257 254 color: #fff;
255 + border-radius: var(--radius-pill);
258 256 display: inline-block;
259 257 margin-top: 10px;
260 258 cursor: pointer;
261 259 }
262 260
261 +/* Progress fill bar — width is animated from 0% via JS as items import. */
263 262 #mlsimport_myBar{
264 263 width: 0%;
265 264 height: 20px;
266 - background-color: green;
265 + background-color: #e85d3c;
267 266 }
268 267
269 268 #mlsimport_myProgress_wrapper{
270 269 width:800px;
@@ -271,19 +270,23 @@
271 270 margin-top: 10px;
272 271 /* display:none;*/
273 272 }
274 273
274 +/* Track background for the "monster" (full-width) progress bar. */
275 275 #mlsimport_monster_myProgress {
276 276 width: 100%;
277 - background-color: #cbc8c8;
277 + background-color: #efe7dc;
278 278 }
279 +/* Hide the stop button by default (JS shows it while a transfer runs). */
279 280 #mlsimport_transfer_stop{
280 281 display: none;
281 282 }
282 283
284 +/* Scrollable live import log panel. */
283 285 #log_container{
284 286 width: 750px;
285 - background: #f1f1f1;
287 + background: #f3efe7;
288 + border-radius: var(--border-radius);
286 289 padding: 15px;
287 290 margin-top: 15px;
288 291 max-height: 500px;
289 292 overflow-y: auto;
@@ -295,44 +298,29 @@
295 298 max-width: 775px;
296 299 margin-bottom: 10px;
297 300 }
298 301
299 -
300 -#mlsimport-start_item,
301 -#mlsimport-start{
302 - background: #068018!important;
302 +#mlsimport_stop_item,
303 +#mlsimport-start_item{
304 + display: inline-block;
305 + margin: 0px 10px 30px 0px;
306 + line-height: normal;
303 307 }
304 308
305 -#mlsimport-start_item:hover,
306 -#mlsimport-start:hover{
307 - background: #056614!important;
309 +.mlsimport_hidden_field_button {
310 + max-width: 450px;
308 311 }
309 -
310 -
311 -#mlsimport-clear-cache{
312 - background: #3d7028!important;
313 - margin: 15px 0px;
314 - display: block;
312 +.mlsimport_param_wrapper input{
313 + max-width: 450px;
315 314 }
316 315
317 -#mlsimport_stop_item,
318 -#mlsimport_stop{
319 - margin-bottom: 30px;
320 - margin-left: 15px;
321 -}
322 -
323 316 .cron_job_explainin{
324 317 max-width: 800px;
325 318 margin-top: 5px;
326 319 }
327 320
328 -.mlsimport_tool_field_item_wrapper{
329 - margin-bottom: 30px;
330 -}
331 -#mlsimport-disable-history,
332 -#mlsimport-disable-logs{
333 - margin-top: 10px;
334 -}
321 +/* Tools-tab blocks are defined at the end of this file, so they win ties
322 + against the later 2025 overrides. */
335 323
336 324
337 325
338 326
@@ -343,61 +331,141 @@
343 331
344 332
345 333
346 334 /*==WpResidence*/
335 +/* Cap uploaded property thumbnail preview size (selector name is misspelled
336 + "thumb_wrapepr" to match the markup). */
347 337 #property_uploaded_thumb_wrapepr img{
348 338 max-width: 200px;
339 + max-height: 200px;
349 340 }
350 341
351 342 table.media .column-title .media-icon img {
352 343 width:60px;
353 344 }
345 +/* Admin message banners (notification / validated / warning). Base is a pink
346 + box; individual variants below re-colour it. */
354 347 .mlsimport_notification,
355 348 .mlsimport_validated,
356 349 .mlsimport_warning{
357 - 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;
358 402 color: #fff;
359 - padding: 10px;
360 - margin-bottom: 10px;
361 - max-width: 300px;
362 - border-radius: 2px;
363 - max-width: 430px;
403 + font-size: 15px;
404 + font-weight: 700;
405 + line-height: 1.4;
406 + text-decoration: none;
407 +}
364 408
409 +.mlsimport-account-subscription a.mlsimport-account-subscription-action:hover {
410 + background: #44403c;
411 + border-color: #44403c;
412 + color: #fff;
365 413 }
366 414
367 -.mlsimport_warning a{
368 - color:#fff;
415 +.mlsimport-account-subscription a.mlsimport-account-subscription-action:focus-visible {
416 + outline: 3px solid #92400e;
417 + outline-offset: 3px;
369 418 }
370 419
420 +/* Indigo "populate" info banner. */
371 421 .mlsimport_populate_warning{
372 - background: #ff4270;
422 + background: var(--primary-color);
373 423 color: #fff;
374 - padding: 10px;
424 + padding: 12px 16px;
375 425 margin-bottom: 10px;
376 - border-radius: 2px;
426 + border-radius: var(--border-radius);
377 427 }
378 428
379 429
430 +/* "Validated" variant: amber-tinted background with a warning left border. */
380 431 .mlsimport_validated{
381 - background: #068018;
382 - max-width: 750px;
432 + padding: 0.75rem 1rem;
433 + margin-bottom: 1rem;
434 + border-radius: var(--border-radius);
435 + background-color: rgba(250, 227, 154, 0.4);
436 + border-left: 4px solid var(--warning-color);
437 + color: var(--text-primary);
383 438 }
384 439
440 +
385 441 .mlsimport_notification{
386 - background: #a5862b;
442 + background: var(--warning-soft);
443 + color: var(--warning-deep);
387 444 }
388 445
389 446
447 +#mlsimport_item_metaboxes-sectionid .mlsimport_notification{
448 + background: var(--warning-soft);
449 + color: var(--warning-deep);
450 + max-width: 500px;
451 +}
452 +
453 +
454 +/* Scrollable status/output box inside the import-task metabox. */
390 455 #mlsimport_item_status{
391 456 width: auto;
392 - background-color: #f5f5f5;
457 + background-color: #f3efe7;
393 458 overflow-y: scroll;
394 459 padding: 10px;
395 - border-radius: 5px;
396 - margin-bottom: 30px;
460 + border-radius: var(--border-radius);
461 + margin-bottom: 15px;
397 462 }
398 463
399 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. */
400 468 label.mlsimport_switch {
401 469 position: absolute;
402 470 display: inline-block;
403 471 width: 53px!important;
@@ -418,9 +486,9 @@
418 486 top: 0;
419 487 left: 0;
420 488 right: 0;
421 489 bottom: 0;
422 - background-color: #ccc;
490 + background-color: rgba(28,25,23,0.18);
423 491 -webkit-transition: .4s;
424 492 transition: .4s;
425 493 }
426 494
@@ -435,14 +503,15 @@
435 503 -webkit-transition: .4s;
436 504 transition: .4s;
437 505 }
438 506
507 +/* Checked state: blue track, and the knob slides right (translateX below). */
439 508 .mlsimport_switch input:checked + .slider {
440 - background-color: #2196F3;
509 + background-color: #e85d3c;
441 510 }
442 511
443 512 .mlsimport_switch input:focus + .slider {
444 - box-shadow: 0 0 1px #2196F3;
513 + box-shadow: 0 0 1px #e85d3c;
445 514 }
446 515
447 516 .mlsimport_switch input:checked + .slider:before {
448 517 -webkit-transform: translateX(26px);
@@ -452,8 +521,9 @@
452 521
453 522
454 523
455 524
525 +/* Rounded (pill) variant of the toggle track and knob. */
456 526 .slider.round {
457 527 border-radius: 25px;
458 528 }
459 529 .slider.round:before {
@@ -468,12 +538,12 @@
468 538 #mlsimport-delete-prop{
469 539 margin-top: 15px;
470 540 }
471 541
472 -.fieldset_mlsimport_tresle_client_id,
473 -.fieldset_mlsimport_tresle_client_secret{
474 - display:none;
475 -}
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. */
476 546
477 547
478 548
479 549
@@ -478,9 +548,9 @@
478 548
479 549
480 550 .mlsimport_param_wrapper input[type=text]{
481 551 min-width: 450px;
482 - border-color: #ccc;
552 + border-color: rgba(28,25,23,0.18);
483 553 padding: 5px 12px;
484 554 }
485 555
486 556 #mlsimport_item_min_price,
@@ -489,12 +559,13 @@
489 559 max-width: 210px;
490 560 }
491 561
492 562
563 +/* Sign-up / account CTA box shown when no account is connected. */
493 564 .mlsimport_signup{
494 565 display: inline-block;
495 - background-color: #f0f0f1;
496 - border-radius: 5px;
566 + background-color: #f3efe7;
567 + border-radius: 14px;
497 568 padding: 20px;
498 569 font-size: 15px;
499 570 margin-bottom: 15px;
500 571 }
@@ -510,8 +581,9 @@
510 581 /*==WpEstate*/
511 582
512 583 /*==Houzez*/
513 584
585 +/* Houzez property list thumbnail column sizing. */
514 586 .column-thumbnail img {
515 587 max-width: 100%;
516 588 height: auto;
517 589 min-width:
@@ -517,5 +589,1103 @@
517 589 min-width:
518 590 102px ;
519 591 }
520 592
521 -/*==RealHomes*/
593 +/*==RealHomes*/
594 +
595 +
596 +
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. */
600 +
601 +/* Tab content panel — hidden until activated. */
602 +.content-nav-tab{
603 + display:none;
604 + padding: 30px 15px;
605 + background: #fff;
606 + border: 1px solid rgba(28,25,23,0.18);
607 + border-top: 0px;
608 +}
609 +
610 +/* Active tab panel becomes a visible flex container. */
611 +.content-nav-tab-active{
612 + display: flex;
613 +}
614 +
615 +
616 +.content-nav-tab.mlsimport_2025_card{
617 + width: auto;
618 +}
619 +
620 +/* White rounded card with layered shadow (2025 card container). */
621 +.mlsimport_2025_card{
622 + flex-direction: column;
623 + align-items: center;
624 + padding: 0px;
625 +
626 + background: #FFFFFF;
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);
629 + flex: none;
630 + order: 0;
631 + flex-grow: 1;
632 +
633 +}
634 +
635 +.mlsimport_2025_card_left_oriented{
636 + flex-direction: column;
637 + align-content: flex-start;
638 + align-items: flex-start;
639 + justify-content: flex-start;
640 + padding: 30px;
641 +}
642 +
643 +
644 +/* Tab strip container (overrides WP core nav-tab-wrapper border). */
645 +.nav-tab-wrapper.mlsimport-tab-wrapper{
646 + border: none;
647 + padding: 0px 15px;
648 + margin-top: 50px;
649 +}
650 +
651 +
652 +.nav-tab-wrapper.mlsimport-tab-wrapper .nav-tab {
653 +
654 + text-transform: uppercase;
655 + color: var(--text-secondary);
656 + padding: 15px 25px;
657 + background: #f3efe7;
658 + border-top-right-radius: 12px;
659 + border-top-left-radius: 12px;
660 +
661 + padding: 15px 30px;
662 + background: #fff;
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);
667 +}
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). */
675 +.nav-tab-wrapper.mlsimport-tab-wrapper .nav-tab.nav-tab-active{
676 + background-color: var(--primary-color);
677 + color: #fff;
678 + border-color: var(--primary-color);
679 + font-weight: 600;
680 +}
681 +
682 +.content-nav-tab.mlsimport_2025_card form{
683 + max-width: 500px;
684 +}
685 +
686 +.mlsimport_2025_card_admin_options {
687 + display: flex;
688 + flex-direction: row;
689 +}
690 +
691 +.mlsimport_2025_card_admin_options:empty{
692 + display: none;
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. */
697 +.mlsimport-steps{
698 + font-size: 16px;
699 + display: flex;
700 + flex-direction: column;
701 + gap: 10px;
702 + margin-left: 74px;
703 +}
704 +
705 +.mlsimport-steps ol {
706 + list-style: none;
707 + counter-reset: step-counter;
708 + padding: 0;
709 +}
710 +
711 +.mlsimport-steps li {
712 +counter-increment: step-counter;
713 + position: relative;
714 + padding-left: 44px;
715 + margin-bottom: 20px;
716 + line-height: 27px;
717 +}
718 +
719 +/* Circular numbered badge rendered from the CSS counter value. */
720 +.mlsimport-steps li::before {
721 + content: counter(step-counter);
722 + position: absolute;
723 + left: 0;
724 + top: 0;
725 + width: 30px;
726 + height: 30px;
727 + background-color: var(--accent-color);
728 + color: white;
729 + border-radius: 50%;
730 + display: flex;
731 + align-items: center;
732 + justify-content: center;
733 + font-weight: 500;
734 +}
735 +
736 +
737 +/*==2025 Inputs*/
738 +/* Shared styling for text/password/select inputs in the 2025 UI:
739 + bordered, rounded, subtle shadow, inline-flex layout. */
740 +
741 +input[type=password].mlsimport-input.mlsimport-2025-input,
742 +input[type=text].mlsimport-input.mlsimport-2025-input,
743 +.mlsimport-input.mlsimport-2025-input{
744 + padding: 5px 12px;
745 + box-sizing: border-box;
746 + display: flex;
747 + flex-direction: column;
748 + align-items: flex-start;
749 + isolation: isolate;
750 + background: #FFFFFF;
751 + border: 1px solid rgba(28,25,23,0.18);
752 + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
753 + border-radius: 8px;
754 + flex: none;
755 + order: 1;
756 + align-self: stretch;
757 + flex-grow: 0;
758 + display: inline-flex;
759 +}
760 +/* 2025 label override (later in the file, so it wins over the earlier
761 + .mlsimport-label float rule for these screens). */
762 +.mlsimport-label {
763 + display: block;
764 + margin-bottom: 0px;
765 + font-weight: 500;
766 + color: var(--text-primary);
767 +}
768 +
769 +select.mlsimport-2025-select{
770 + padding: 5px 24px 5px 12px;
771 + width: 100%;
772 + max-width: 100%;
773 + box-sizing: border-box;
774 + display: inline-flex;
775 + flex-direction: column;
776 + align-items: flex-start;
777 + isolation: isolate;
778 + border: 1px solid rgba(28,25,23,0.18);
779 + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
780 + border-radius: 8px;
781 + flex: none;
782 + align-self: stretch;
783 + flex-grow: 0;
784 +}
785 +
786 +
787 +
788 +
789 +/* Default bordered look for fieldset inputs and the import "select all" boxes. */
790 +.mlsimport-fieldset-wrapper input,
791 +input[type=checkbox].mlsimport_select_import_admin_all,
792 +input[type=checkbox].mlsimport_select_import_all {
793 + border: 1px solid rgba(28,25,23,0.18);
794 + border-radius: 2px;
795 + background-color: #fff!important;
796 +}
797 +
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. */
805 +.button.mlsimport_button{
806 + font-size: 14px;
807 + position: relative;
808 + display: flex;
809 + flex-direction: column;
810 + justify-content: center;
811 + align-items: center;
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);
818 + color:#fff;
819 + flex: none;
820 + order: 1;
821 + flex-grow: 0;
822 + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
823 + transition: background var(--transition-speed), box-shadow var(--transition-speed);
824 +}
825 +
826 +.button.mlsimport_button:hover {
827 + background: var(--primary-hover);
828 + color:#fff;
829 + border: 1px solid var(--primary-hover);
830 + box-shadow: 0 10px 24px -10px rgba(0, 0, 0, 0.45);
831 +}
832 +
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);
840 +}
841 +
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);
848 +}
849 +
850 +
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);
861 + }
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);
870 + }
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 +}
887 +
888 +
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);
897 + }
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);
905 + }
906 +
907 +
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);
918 + }
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);
926 + }
927 +
928 +
929 +
930 +
931 +
932 +
933 +#mlsimport_item_how_many{
934 + max-width: 450px;
935 +}
936 +
937 +
938 +
939 +
940 +
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. */
946 + input[type=checkbox].mlsimport-import-checkbox,
947 + input[type=checkbox].mlsimport-admin-checkbox {
948 + appearance: none;
949 + -webkit-appearance: none;
950 + background: transparent;
951 + border: none;
952 + box-shadow: none;
953 + width: 24px;
954 + height: 24px;
955 + position: relative;
956 + display: inline-block;
957 + vertical-align: middle;
958 + }
959 +
960 + input[type=checkbox].mlsimport-import-checkbox:before,
961 + input[type=checkbox].mlsimport-admin-checkbox:before {
962 + content: "";
963 + position: absolute;
964 + top: 0;
965 + left: 0;
966 + width: 24px;
967 + height: 24px;
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>");
969 + background-size: 24px 24px;
970 + background-position: center;
971 + background-repeat: no-repeat;
972 + margin: 0px;
973 + }
974 +
975 + /* Checked state swaps in the filled indigo box + white tick SVG. */
976 + input[type=checkbox].mlsimport-import-checkbox:checked:before,
977 + input[type=checkbox].mlsimport-admin-checkbox:checked:before {
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>");
979 + }
980 +
981 +
982 +
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. */
986 +.mlsimport-save-progress {
987 + position: fixed;
988 + top: 50%;
989 + left: 50%;
990 + transform: translate(-50%, -50%);
991 + z-index: 9999;
992 + background: #fff;
993 + padding: 40px;
994 + border-radius: var(--radius-card);
995 + /* border: 1px solid #ddd; */
996 + box-shadow: 0 7px 54px rgba(0, 0, 0, 0.15);
997 + width: 500px;
998 + min-height: 200px;
999 + text-align: center;
1000 + font-size: 17px;
1001 + display: flex;
1002 + align-content: center;
1003 + justify-content: center;
1004 + align-items: center;
1005 + line-height: 1.8em;
1006 +}
1007 +
1008 +.mlsimport-save-progress-text {
1009 + margin-bottom: 10px;
1010 +}
1011 +
1012 +.mlsimport-save-progress-bar {
1013 + height: 10px;
1014 + background: #f3efe7;
1015 + margin-top: 5px;
1016 + border-radius: 5px;
1017 + overflow: hidden;
1018 +}
1019 +
1020 +/* Animated fill inside the save progress bar (width driven by JS). */
1021 +.mlsimport-save-progress-bar .progress-fill {
1022 + width: 0%;
1023 + height: 100%;
1024 + background: var(--accent-color);
1025 + border-radius: 5px;
1026 + transition: width 0.3s;
1027 +}
1028 +
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. */
1032 +#mlsimport-exit-survey-modal {
1033 + position: fixed;
1034 + inset: 0;
1035 + z-index: 100000;
1036 + display: flex;
1037 + align-items: center;
1038 + justify-content: center;
1039 +}
1040 +#mlsimport-exit-survey-modal.mlsimport-es-hidden {
1041 + display: none;
1042 +}
1043 +/* Semi-transparent dim layer behind the survey card. */
1044 +.mlsimport-es-backdrop {
1045 + position: absolute;
1046 + inset: 0;
1047 + background: rgba(0, 0, 0, 0.6);
1048 +}
1049 +.mlsimport-es-card {
1050 + position: relative;
1051 + background: #fff;
1052 + border-radius: var(--radius-card);
1053 + padding: 26px 28px;
1054 + width: 460px;
1055 + max-width: 92vw;
1056 + box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
1057 +}
1058 +.mlsimport-es-title {
1059 + margin: 0 0 6px;
1060 + font-size: 18px;
1061 +}
1062 +.mlsimport-es-intro {
1063 + margin: 0 0 16px;
1064 + color: #6b6358;
1065 +}
1066 +/* Selectable reason row in the exit survey. */
1067 +.mlsimport-es-option {
1068 + display: block;
1069 + padding: 8px 10px;
1070 + margin: 4px 0;
1071 + border: 1px solid rgba(28,25,23,0.18);
1072 + border-radius: var(--border-radius);
1073 + cursor: pointer;
1074 +}
1075 +.mlsimport-es-option:hover {
1076 + background: #f3efe7;
1077 +}
1078 +.mlsimport-es-other {
1079 + width: 100%;
1080 + margin-top: 10px;
1081 + box-sizing: border-box;
1082 +}
1083 +.mlsimport-es-actions {
1084 + margin-top: 18px;
1085 + display: flex;
1086 + align-items: center;
1087 + gap: 16px;
1088 +}
1089 +.mlsimport-es-skip {
1090 + color: #9a9285;
1091 + text-decoration: underline;
1092 +}
1093 +.mlsimport-es-hidden {
1094 + display: none;
1095 +}
1096 +
1097 +/* -------------------------------------------------------
1098 + Activity log — sync-status banner (Task 02 / Build 2)
1099 + ------------------------------------------------------- */
1100 +
1101 +.mlsimport-activity-banner {
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);
1108 +}
1109 +
1110 +.mlsimport-activity-banner__counts {
1111 + display: flex;
1112 + flex-wrap: wrap;
1113 + align-items: center;
1114 + gap: 8px 14px;
1115 + margin: 0 0 10px;
1116 +}
1117 +
1118 +.mlsimport-activity-banner__title {
1119 + display: inline-flex;
1120 + align-items: center;
1121 + gap: 7px;
1122 + font-size: 14px;
1123 + font-weight: 700;
1124 + color: #1c1917;
1125 +}
1126 +
1127 +.mlsimport-activity-banner__title::before {
1128 + content: "";
1129 + width: 9px;
1130 + height: 9px;
1131 + border-radius: 50%;
1132 + background: #1c1917;
1133 +}
1134 +
1135 +.mlsimport-activity-banner__period {
1136 + font-weight: 500;
1137 + font-size: 11px;
1138 + color: #9a9285;
1139 + text-transform: uppercase;
1140 + letter-spacing: .05em;
1141 +}
1142 +
1143 +.mlsimport-activity-banner__totals {
1144 + display: inline-flex;
1145 + flex-wrap: wrap;
1146 + gap: 6px;
1147 +}
1148 +
1149 +.mlsimport-activity-stat {
1150 + display: inline-flex;
1151 + align-items: baseline;
1152 + gap: 4px;
1153 + padding: 3px 11px;
1154 + border-radius: 999px;
1155 + font-size: 12px;
1156 + font-weight: 500;
1157 + line-height: 1.5;
1158 +}
1159 +
1160 +.mlsimport-activity-stat strong {
1161 + font-size: 13px;
1162 + font-weight: 700;
1163 +}
1164 +
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; }
1169 +
1170 +.mlsimport-activity-banner__breakdown {
1171 + margin: 0 0 10px;
1172 + padding: 0;
1173 + list-style: none;
1174 + max-width: 900px;
1175 + border: 1px solid rgba(28,25,23,0.12);
1176 + border-radius: var(--border-radius);
1177 + overflow: hidden;
1178 +}
1179 +
1180 +.mlsimport-activity-banner__breakdown li {
1181 + display: flex;
1182 + flex-wrap: nowrap;
1183 + align-items: center;
1184 + justify-content: space-between;
1185 + gap: 8px;
1186 + margin: 0;
1187 + padding: 7px 12px;
1188 + font-size: 13px;
1189 + background: #fff;
1190 +}
1191 +
1192 +.mlsimport-activity-banner__breakdown li:nth-child(even) {
1193 + background: #f3efe7;
1194 +}
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). */
1198 +.mlsimport-activity-banner__task {
1199 + flex: 1 1 auto;
1200 + min-width: 0;
1201 + font-weight: 600;
1202 + color: #1c1917;
1203 + overflow: hidden;
1204 + text-overflow: ellipsis;
1205 + white-space: nowrap;
1206 +}
1207 +
1208 +.mlsimport-activity-banner__chips {
1209 + display: inline-flex;
1210 + flex: 0 0 auto;
1211 + flex-wrap: nowrap;
1212 + gap: 5px;
1213 +}
1214 +
1215 +.mlsimport-activity-chip {
1216 + display: inline-block;
1217 + padding: 2px 8px;
1218 + border-radius: 4px;
1219 + font-size: 11px;
1220 + font-weight: 600;
1221 + line-height: 1.6;
1222 + white-space: nowrap;
1223 + color: #ffffff;
1224 + border-radius: var(--radius-pill);
1225 +}
1226 +
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); }
1231 +
1232 +/* Muted styling for a zero-count chip. */
1233 +.mlsimport-activity-chip.is-zero {
1234 + background: #f3efe7;
1235 + color: #9a9285;
1236 +}
1237 +
1238 +.mlsimport-activity-banner__actions {
1239 + margin: 0;
1240 +}
1241 +
1242 +.mlsimport-activity-banner__link {
1243 + display: inline-flex;
1244 + align-items: center;
1245 + gap: 5px;
1246 + padding: 5px 15px;
1247 + background: #1c1917;
1248 + color: #ffffff !important;
1249 + text-decoration: none !important;
1250 + font-size: 13px;
1251 + font-weight: 600;
1252 + border-radius: var(--radius-pill);
1253 +}
1254 +
1255 +.mlsimport-activity-banner__link:hover,
1256 +.mlsimport-activity-banner__link:focus {
1257 + background: #33302b;
1258 + color: #ffffff !important;
1259 +}
1260 +
1261 +/* -------------------------------------------------------
1262 + Import History — filter form (styled like the activity banner)
1263 + Uses core .notice .notice-info for the card chrome (white box,
1264 + blue left border); the rules below handle layout + controls.
1265 + ------------------------------------------------------- */
1266 +
1267 +.mlsimport-history-filters {
1268 + display: flex;
1269 + flex-wrap: wrap;
1270 + align-items: center;
1271 + gap: 8px 12px;
1272 + padding: 12px 14px;
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);
1278 +}
1279 +
1280 +.mlsimport-history-filters label {
1281 + font-size: 13px;
1282 + font-weight: 600;
1283 + color: #1c1917;
1284 +}
1285 +
1286 +.mlsimport-history-filters input[type="search"],
1287 +.mlsimport-history-filters select {
1288 + height: 32px;
1289 + border-radius: 8px;
1290 + border-color: rgba(28,25,23,0.12);
1291 +}
1292 +
1293 +.mlsimport-history-filters .button {
1294 + background: #1c1917;
1295 + border-color: #1c1917;
1296 + color: #ffffff;
1297 + border-radius: var(--radius-pill);
1298 + height: 32px;
1299 + padding: 0 14px;
1300 + font-weight: 600;
1301 +}
1302 +
1303 +.mlsimport-history-filters .button:hover,
1304 +.mlsimport-history-filters .button:focus {
1305 + background: #33302b;
1306 + border-color: #33302b;
1307 + color: #ffffff;
1308 +}
1309 +
1310 +/* -------------------------------------------------------
1311 + Activity log — action column badges (Task 02 / Build 2)
1312 + ------------------------------------------------------- */
1313 +
1314 +.mlsimport-activity-action {
1315 + display: inline-block;
1316 + padding: 2px 8px;
1317 + border-radius: 12px;
1318 + font-size: 11px;
1319 + font-weight: 600;
1320 + line-height: 1.6;
1321 + text-transform: capitalize;
1322 + white-space: nowrap;
1323 +}
1324 +
1325 +/* Added-action badge (mint). */
1326 +.mlsimport-activity-action--added {
1327 + background-color: var(--success-soft);
1328 + color: var(--success-deep);
1329 +}
1330 +
1331 +.mlsimport-activity-action--edited {
1332 + background-color: var(--warning-soft);
1333 + color: var(--warning-deep);
1334 +}
1335 +
1336 +.mlsimport-activity-action--deleted {
1337 + background-color: var(--error-soft);
1338 + color: var(--error-color);
1339 +}
1340 +
1341 +/* Searchable City/County multi-select — filter input above the native list. */
1342 +.mlsimport-2025-select.mlsimport-searchable-select,
1343 +.mlsimport-select-search {
1344 + max-width: 450px;
1345 +}
1346 +.mlsimport-select-search {
1347 + display: block;
1348 + width: 100%;
1349 + box-sizing: border-box;
1350 + margin-bottom: 6px;
1351 + padding: 6px 12px;
1352 + border: 1px solid rgba(28,25,23,0.18);
1353 + border-radius: 8px;
1354 + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08);
1355 +}
1356 +/* Chip tray showing currently selected City/County values. */
1357 +.mlsimport-selected-chips {
1358 + display: flex;
1359 + flex-wrap: wrap;
1360 + gap: 6px;
1361 + max-width: 450px;
1362 + margin: 6px 0;
1363 +}
1364 +/* Collapse the tray when nothing is selected. */
1365 +.mlsimport-selected-chips:empty {
1366 + display: none;
1367 +}
1368 +.mlsimport-chip {
1369 + display: inline-flex;
1370 + align-items: center;
1371 + gap: 4px;
1372 + padding: 2px 4px 2px 10px;
1373 + background: #1c1917;
1374 + color: #ffffff;
1375 + border-radius: 12px;
1376 + font-size: 12px;
1377 + line-height: 1.8;
1378 +}
1379 +/* Round "x" remove button inside a selected chip. */
1380 +.mlsimport-chip-remove {
1381 + display: inline-flex;
1382 + align-items: center;
1383 + justify-content: center;
1384 + width: 16px;
1385 + height: 16px;
1386 + padding: 0;
1387 + border: 0;
1388 + border-radius: 50%;
1389 + background: rgba(255, 255, 255, 0.25);
1390 + color: #ffffff;
1391 + font-size: 14px;
1392 + line-height: 1;
1393 + cursor: pointer;
1394 +}
1395 +.mlsimport-chip-remove:hover {
1396 + background: rgba(255, 255, 255, 0.45);
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 +}