PluginProbe
CartFlows – Funnel Builder & Checkout Plugin for WooCommerce / 3.3.0
CartFlows – Funnel Builder & Checkout Plugin for WooCommerce v3.3.0
3.3.0 3.2.1 3.2.0 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.1 trunk 1.0.4 1.1.0 1.1.0.1 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 All 162 releases
cartflows / modules / frequently-bought-together / assets / css / fbt-admin.css

fbt-admin.css in CartFlows – Funnel Builder & Checkout Plugin for WooCommerce 3.3.0, at modules/frequently-bought-together/assets/css/fbt-admin.css

1,079 lines 22.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Frequently Bought Together — Admin panel styling.
3 *
4 * Scoped to #cartflows_fbt_data so no rule leaks into the surrounding WC UI.
5 * Colours derived from the Force UI token file (force-ui/src/theme/default-config.js).
6 */
7
8 /* Tab icon — dashicons-cart replaces WC's default wrench fallback. */
9 #woocommerce-product-data ul.wc-tabs li.cartflows_fbt_options a::before {
10 content: "\f174";
11 font-family: Dashicons;
12 /* Isolate the PUA glyph — RTL otherwise merges it into the Latin label's LTR run. */
13 unicode-bidi: isolate;
14 }
15
16 #cartflows_fbt_data.wcf-fbt-panel {
17 padding: 0;
18 }
19
20 #cartflows_fbt_data.wcf-fbt-panel:not( .is-widget-enabled ) .wcf-fbt-body {
21 display: none;
22 }
23
24 #cartflows_fbt_data .wcf-fbt-header {
25 display: flex;
26 flex-wrap: wrap;
27 align-items: flex-start;
28 justify-content: space-between;
29 gap: 12px 24px;
30 padding: 18px 20px;
31 border-bottom: 1px solid #e5e7eb;
32 }
33
34 #cartflows_fbt_data .wcf-fbt-header-title {
35 display: flex;
36 align-items: center;
37 gap: 8px;
38 margin: 0;
39 }
40
41 #cartflows_fbt_data .wcf-fbt-header-title h3 {
42 margin: 0;
43 font-size: 15px;
44 font-weight: 600;
45 color: #111827;
46 }
47
48 #cartflows_fbt_data .wcf-fbt-header-desc {
49 flex-basis: 100%;
50 margin: 0;
51 font-size: 12.5px;
52 color: #6b7280;
53 line-height: 1.5;
54 padding: 0;
55 }
56
57 #cartflows_fbt_data .wcf-fbt-toggle-label {
58 display: inline-flex;
59 align-items: center;
60 gap: 10px;
61 font-size: 13px;
62 color: #111827;
63 cursor: pointer;
64 white-space: nowrap;
65 }
66
67 #cartflows_fbt_data .wcf-fbt-toggle-switch {
68 position: relative;
69 display: inline-block;
70 width: 36px;
71 height: 20px;
72 min-height: 0;
73 padding: 0;
74 border: none;
75 box-shadow: none;
76 border-radius: 999px;
77 transition: background 0.15s ease;
78 }
79
80 #cartflows_fbt_data .wcf-fbt-toggle-input:not( :checked ) + .wcf-fbt-toggle-switch {
81 background: #e5e7eb;
82 }
83
84 #cartflows_fbt_data .wcf-fbt-toggle-switch::after {
85 content: "";
86 position: absolute;
87 top: 2px;
88 left: 2px;
89 width: 16px;
90 height: 16px;
91 background: #fff;
92 border-radius: 50%;
93 box-shadow: 0 1px 2px rgba( 16, 24, 40, 0.05 );
94 transition: transform 0.15s ease;
95 }
96
97 #cartflows_fbt_data .wcf-fbt-toggle-input {
98 position: absolute;
99 opacity: 0;
100 pointer-events: none;
101 }
102
103 #cartflows_fbt_data .wcf-fbt-toggle-input:checked + .wcf-fbt-toggle-switch::after {
104 transform: translateX( 16px );
105 }
106
107 #cartflows_fbt_data .wcf-fbt-body {
108 padding: 18px 20px;
109 }
110
111 #cartflows_fbt_data .wcf-fbt-sub-tabs {
112 display: inline-flex;
113 background: #f3f4f6;
114 border: 1px solid #e5e7eb;
115 border-radius: 8px;
116 padding: 3px;
117 gap: 2px;
118 margin-bottom: 16px;
119 }
120
121 #cartflows_fbt_data .wcf-fbt-sub-tab {
122 display: inline-flex;
123 align-items: center;
124 gap: 6px;
125 padding: 6px 12px;
126 border-radius: 6px;
127 font-size: 13px;
128 font-weight: 500;
129 color: #4b5563;
130 background: transparent;
131 border: none;
132 cursor: pointer;
133 line-height: 1.25;
134 }
135
136 #cartflows_fbt_data .wcf-fbt-sub-tab:hover {
137 color: #111827;
138 }
139
140 #cartflows_fbt_data .wcf-fbt-sub-tab.is-active {
141 background: #fff;
142 color: #111827;
143 box-shadow: 0 1px 2px rgba( 16, 24, 40, 0.05 );
144 }
145
146 #cartflows_fbt_data .wcf-fbt-pane {
147 display: none;
148 }
149
150 #cartflows_fbt_data .wcf-fbt-pane.is-active {
151 display: block;
152 }
153
154 #cartflows_fbt_data .wcf-fbt-source-input {
155 position: absolute;
156 opacity: 0;
157 pointer-events: none;
158 }
159
160 /* Products picker — Variant A: unified table-style list. */
161 #cartflows_fbt_data .wcf-fbt-picker-shell {
162 background: #fff;
163 border: 1px solid #e5e7eb;
164 border-radius: 10px;
165 overflow: hidden;
166 box-shadow: 0 1px 2px rgba( 16, 24, 40, 0.05 );
167 }
168
169 #cartflows_fbt_data .wcf-fbt-picker-topbar {
170 display: flex;
171 align-items: center;
172 gap: 12px;
173 padding: 12px 14px;
174 background: #fafbfc;
175 border-bottom: 1px solid #e5e7eb;
176 }
177
178 /* Search chooser wrapper — flex layout only. Select2 keeps WooCommerce's default look. */
179 #cartflows_fbt_data .wcf-fbt-picker-search {
180 flex: 1;
181 min-width: 0;
182 }
183
184 /* Nudge the search input off the left edge so the placeholder isn't flush. */
185 #cartflows_fbt_data .wcf-fbt-picker-search .select2-search__field {
186 padding-left: 8px;
187 }
188
189 #cartflows_fbt_data .wcf-fbt-picker-count {
190 font-size: 12px;
191 color: #6b7280;
192 white-space: nowrap;
193 background: #f3f4f6;
194 padding: 4px 10px;
195 border-radius: 999px;
196 border: 1px solid #e5e7eb;
197 }
198
199 #cartflows_fbt_data .wcf-fbt-picker-count strong {
200 font-weight: 400;
201 }
202
203 #cartflows_fbt_data .wcf-fbt-picker-header-row {
204 display: grid;
205 grid-template-columns: 24px 44px 1fr 90px 100px 0 32px;
206 gap: 14px;
207 padding: 8px 14px;
208 font-size: 11px;
209 font-weight: 600;
210 letter-spacing: 0.04em;
211 text-transform: uppercase;
212 color: #6b7280;
213 background: #fafbfc;
214 border-bottom: 1px solid #e5e7eb;
215 }
216
217 #cartflows_fbt_data .wcf-fbt-picker-header-row .h-price {
218 text-align: right;
219 }
220
221 #cartflows_fbt_data .wcf-fbt-picker-header-row .h-stock,
222 #cartflows_fbt_data .wcf-fbt-picker-header-row .h-actions {
223 text-align: center;
224 }
225
226 #cartflows_fbt_data .wcf-fbt-picker-rows {
227 background: #fff;
228 }
229
230 #cartflows_fbt_data .wcf-fbt-picker-row {
231 display: grid;
232 grid-template-columns: 24px 44px 1fr 90px 100px 0 32px;
233 gap: 14px;
234 padding: 10px 14px;
235 align-items: center;
236 border-bottom: 1px solid #f0f0f1;
237 background: #fff;
238 }
239
240 #cartflows_fbt_data .wcf-fbt-picker-row:last-child {
241 border-bottom: none;
242 }
243
244 #cartflows_fbt_data .wcf-fbt-picker-row:hover {
245 background: #fcfcfd;
246 }
247
248 #cartflows_fbt_data .wcf-fbt-picker-row.is-sortable-placeholder {
249 border-style: dashed;
250 background: #f9fafb;
251 }
252
253 #cartflows_fbt_data .wcf-fbt-picker-drag {
254 color: #7b8087;
255 cursor: grab;
256 display: inline-flex;
257 justify-content: center;
258 }
259
260 #cartflows_fbt_data .wcf-fbt-picker-thumb {
261 width: 44px;
262 height: 44px;
263 border-radius: 6px;
264 background: #f3f4f6;
265 border: 1px solid #f3f4f6;
266 object-fit: cover;
267 flex-shrink: 0;
268 display: block;
269 }
270
271 #cartflows_fbt_data .wcf-fbt-picker-info {
272 min-width: 0;
273 }
274
275 #cartflows_fbt_data .wcf-fbt-picker-name {
276 font-size: 13.5px;
277 font-weight: 500;
278 color: #111827;
279 white-space: nowrap;
280 overflow: hidden;
281 text-overflow: ellipsis;
282 margin: 0;
283 padding: 0;
284 }
285
286 #cartflows_fbt_data .wcf-fbt-picker-price {
287 font-size: 13px;
288 color: #111827;
289 text-align: right;
290 font-variant-numeric: tabular-nums;
291 }
292
293 /* Kill only the underline on <ins> (sale price); keep <del>'s strikethrough. */
294 #cartflows_fbt_data .wcf-fbt-picker-price ins,
295 #cartflows_fbt_data .wcf-fbt-badge ins,
296 .wcf-fbt-drawer-body .wcf-fbt-badge ins {
297 text-decoration: none;
298 background: transparent;
299 }
300
301 #cartflows_fbt_data .wcf-fbt-picker-stock {
302 text-align: center;
303 }
304
305 #cartflows_fbt_data .wcf-fbt-picker-remove {
306 width: 28px;
307 height: 28px;
308 background: transparent;
309 border: none;
310 color: #6b7280;
311 cursor: pointer;
312 border-radius: 6px;
313 display: inline-flex;
314 align-items: center;
315 justify-content: center;
316 padding: 0;
317 }
318
319 #cartflows_fbt_data .wcf-fbt-picker-remove:hover {
320 background: #fef2f2;
321 color: #dc2626;
322 }
323
324 #cartflows_fbt_data .wcf-fbt-picker-empty {
325 padding: 32px 20px;
326 text-align: center;
327 color: #6b7280;
328 font-size: 13px;
329 background: #fff;
330 }
331
332 #cartflows_fbt_data .wcf-fbt-picker-empty .icon {
333 width: 44px;
334 height: 44px;
335 background: #f3f4f6;
336 border-radius: 12px;
337 display: flex;
338 align-items: center;
339 justify-content: center;
340 margin: 0 auto 10px;
341 }
342
343 #cartflows_fbt_data .wcf-fbt-picker-footer {
344 display: flex;
345 justify-content: space-between;
346 align-items: center;
347 padding: 10px 14px;
348 background: #fafbfc;
349 border-top: 1px solid #e5e7eb;
350 font-size: 12px;
351 color: #6b7280;
352 }
353
354 #cartflows_fbt_data .wcf-fbt-picker-footer strong {
355 color: #111827;
356 font-weight: 600;
357 }
358
359 #cartflows_fbt_data .wcf-fbt-badge {
360 display: inline-flex;
361 align-items: center;
362 /* Flex drops the space WC puts between a sale price's <del> and <ins>; no-op for single-child badges. */
363 gap: 4px;
364 padding: 1px 8px;
365 font-size: 11px;
366 font-weight: 500;
367 line-height: 1.6;
368 border: 1px solid transparent;
369 border-radius: 999px;
370 }
371
372 #cartflows_fbt_data .wcf-fbt-badge-brand {
373 background: #eff6ff;
374 color: #1d4ed8;
375 border-color: #bfdbfe;
376 }
377
378 #cartflows_fbt_data .wcf-fbt-badge-green {
379 background: #f0fdf4;
380 color: #15803d;
381 border-color: #bbf7d0;
382 }
383
384 #cartflows_fbt_data .wcf-fbt-badge-yellow {
385 background: #fefce8;
386 color: #a16207;
387 border-color: #fef08a;
388 }
389
390 #cartflows_fbt_data .wcf-fbt-badge-red {
391 background: #fef2f2;
392 color: #b91c1c;
393 border-color: #fecaca;
394 }
395
396 #cartflows_fbt_data .wcf-fbt-badge-gray {
397 background: #f9fafb;
398 color: #1f2937;
399 border-color: #e5e7eb;
400 }
401
402 #cartflows_fbt_data .wcf-fbt-ai-hero,
403 .wcf-fbt-drawer-body .wcf-fbt-ai-hero {
404 border: 1px solid #c3c4c7;
405 border-radius: 10px;
406 padding: 24px;
407 text-align: center;
408 }
409
410 #cartflows_fbt_data .wcf-fbt-ai-hero-icon,
411 .wcf-fbt-drawer-body .wcf-fbt-ai-hero-icon {
412 display: inline-flex;
413 align-items: center;
414 justify-content: center;
415 width: 48px;
416 height: 48px;
417 border-radius: 12px;
418 background: #fff;
419 box-shadow: 0 4px 12px rgba( 37, 99, 235, 0.15 );
420 margin-bottom: 12px;
421 font-size: 22px;
422 }
423
424 #cartflows_fbt_data .wcf-fbt-ai-hero h4,
425 .wcf-fbt-drawer-body .wcf-fbt-ai-hero h4 {
426 margin: 0 0 4px;
427 font-size: 14px;
428 font-weight: 600;
429 }
430
431 #cartflows_fbt_data .wcf-fbt-ai-hero p,
432 .wcf-fbt-drawer-body .wcf-fbt-ai-hero p {
433 margin: 0 auto 14px;
434 max-width: 420px;
435 font-size: 12.5px;
436 line-height: 1.5em;
437 }
438
439 #cartflows_fbt_data .wcf-fbt-btn {
440 display: inline-flex;
441 height: auto;
442 min-height: 0;
443 align-items: center;
444 gap: 6px;
445 padding: 8px 14px;
446 font-size: 13px;
447 font-weight: 500;
448 border-radius: 6px;
449 cursor: pointer;
450 line-height: 1.25;
451 text-decoration: none;
452 }
453
454 #cartflows_fbt_data .wcf-fbt-generate,
455 #cartflows_fbt_data .wcf-fbt-upgrade-cta,
456 .wcf-fbt-drawer-body .wcf-fbt-upgrade-cta {
457 padding: 8px 14px;
458 font-size: 13px;
459 font-weight: 500;
460 line-height: 1.25;
461 border-radius: 6px;
462 height: auto;
463 min-height: 0;
464 }
465
466 #cartflows_fbt_data .wcf-fbt-ai-reject {
467 font-size: 12px;
468 text-decoration: none;
469 align-self: center;
470 padding: 5px 10px;
471 }
472
473 #cartflows_fbt_data .wcf-fbt-btn-sm {
474 padding: 5px 10px;
475 font-size: 12px;
476 }
477
478 #cartflows_fbt_data .wcf-fbt-btn-icon {
479 padding: 5px;
480 width: 28px;
481 height: 28px;
482 justify-content: center;
483 }
484
485 #cartflows_fbt_data .wcf-fbt-ai-toolbar {
486 display: flex;
487 align-items: center;
488 justify-content: space-between;
489 gap: 8px;
490 margin-bottom: 12px;
491 font-size: 12.5px;
492 color: #6b7280;
493 }
494
495 #cartflows_fbt_data .wcf-fbt-ai-list {
496 display: flex;
497 flex-direction: column;
498 gap: 10px;
499 }
500
501 #cartflows_fbt_data .wcf-fbt-ai-item {
502 display: flex;
503 gap: 12px;
504 align-items: center;
505 padding: 12px 14px;
506 background: #fff;
507 border: 1px solid #bfdbfe;
508 border-radius: 10px;
509 }
510
511 #cartflows_fbt_data .wcf-fbt-ai-content {
512 flex: 1;
513 min-width: 0;
514 }
515
516 #cartflows_fbt_data .wcf-fbt-ai-row1 {
517 display: flex;
518 align-items: center;
519 flex-wrap: wrap;
520 gap: 8px;
521 margin-bottom: 2px;
522 }
523
524 #cartflows_fbt_data .wcf-fbt-ai-name {
525 margin: 0;
526 font-size: 13px;
527 font-weight: 600;
528 color: #111827;
529 }
530
531 /* Reason text stays in DOM but is hidden until it moves into a Tooltip on the confidence badge. */
532 #cartflows_fbt_data .wcf-fbt-ai-reason {
533 display: none;
534 }
535
536 #cartflows_fbt_data .wcf-fbt-ai-actions {
537 display: flex;
538 gap: 6px;
539 flex-shrink: 0;
540 }
541
542 #cartflows_fbt_data .wcf-fbt-skeleton-row {
543 height: 68px;
544 border-radius: 10px;
545 background: linear-gradient( 90deg, #f3f4f6, #e5e7eb, #f3f4f6 );
546 background-size: 200% 100%;
547 animation: wcf-fbt-shine 1.4s infinite;
548 }
549
550 #cartflows_fbt_data .wcf-fbt-skeleton-list {
551 display: flex;
552 flex-direction: column;
553 gap: 10px;
554 margin-top: 12px;
555 }
556
557 @keyframes wcf-fbt-shine {
558 0% {
559 background-position: 200% 0;
560 }
561 100% {
562 background-position: -200% 0;
563 }
564 }
565
566 /* Rotate the regenerate icon while its request is in flight. */
567 @keyframes wcf-fbt-spin {
568 to {
569 transform: rotate( 360deg );
570 }
571 }
572
573 .wcf-fbt-is-regenerating svg {
574 animation: wcf-fbt-spin 0.8s linear infinite;
575 transform-origin: 50% 50%;
576 }
577
578 #cartflows_fbt_data .wcf-fbt-status {
579 margin: 0 0 12px;
580 padding: 8px 12px;
581 font-size: 12px;
582 color: #4b5563;
583 background: #f9fafb;
584 border-left: 3px solid #9ca3af;
585 border-radius: 3px;
586 }
587
588 #cartflows_fbt_data .wcf-fbt-status.is-error {
589 color: #b91c1c;
590 background: #fef2f2;
591 border-left-color: #b91c1c;
592 }
593
594 /* Linked Products tab — "Auto Suggest" button next to each WC field.
595 * PHP renders both buttons together in .wcf-fbt-linked-buttons; JS lifts each
596 * one into its matching .form-field row on init. This wrapper is only visible
597 * for the ~50ms before JS runs (usually flicker-free).
598 */
599 .wcf-fbt-linked-buttons {
600 display: none;
601 }
602
603 /* Layout-only rules — colour, border, hover and focus come from WordPress core .button.button-primary so the button follows the admin colour scheme. */
604 #linked_product_data .form-field .wcf-fbt-suggest-ai {
605 display: inline-flex;
606 align-items: center;
607 gap: 6px;
608 min-height: 27px;
609 margin: 10px 0 0 12px;
610 vertical-align: middle;
611 }
612
613 /* Sparkle SVG has ~2px of empty space inside its viewBox on the left; pull it back so the visible glyph aligns with the button's 8px padding. */
614 #linked_product_data .form-field .wcf-fbt-suggest-ai svg {
615 margin-left: -2px;
616 margin-top: 2px;
617 }
618
619 /* Drawer scaffold — rendered once in the admin footer, sits above WC panels. */
620 .wcf-fbt-drawer-root {
621 position: fixed;
622 inset: 0;
623 z-index: 100000;
624 }
625
626 .wcf-fbt-drawer-backdrop {
627 position: absolute;
628 inset: 0;
629 background: rgba( 17, 24, 39, 0.35 );
630 opacity: 0;
631 transition: opacity 0.2s ease;
632 }
633
634 .wcf-fbt-drawer-root.is-open .wcf-fbt-drawer-backdrop {
635 opacity: 1;
636 }
637
638 .wcf-fbt-drawer {
639 position: absolute;
640 top: 32px;
641 right: 0;
642 bottom: 0;
643 width: 440px;
644 max-width: 100%;
645 background: #fff;
646 border-left: 1px solid #e5e7eb;
647 box-shadow: -12px 0 32px -12px rgba( 149, 160, 178, 0.32 );
648 display: flex;
649 flex-direction: column;
650 transform: translateX( 100% );
651 transition: transform 0.25s ease;
652 }
653
654 .wcf-fbt-drawer-root.is-open .wcf-fbt-drawer {
655 transform: translateX( 0 );
656 }
657
658 .wcf-fbt-drawer-header {
659 display: flex;
660 align-items: center;
661 justify-content: space-between;
662 padding: 16px 20px;
663 border-bottom: 1px solid #e5e7eb;
664 }
665
666 .wcf-fbt-drawer-title {
667 margin: 0;
668 font-size: 15px;
669 font-weight: 600;
670 color: #111827;
671 }
672
673 .wcf-fbt-drawer-meta {
674 margin: 2px 0 0;
675 font-size: 12px;
676 color: #6b7280;
677 }
678
679 .wcf-fbt-drawer-close {
680 width: 30px;
681 height: 30px;
682 display: inline-flex;
683 align-items: center;
684 justify-content: center;
685 background: transparent;
686 border: 1px solid #e5e7eb;
687 border-radius: 6px;
688 color: #4b5563;
689 cursor: pointer;
690 }
691
692 .wcf-fbt-drawer-close:hover {
693 background: #f3f4f6;
694 }
695
696 .wcf-fbt-drawer-body {
697 padding: 16px 20px;
698 overflow-y: auto;
699 flex: 1;
700 }
701
702 .wcf-fbt-drawer-footer {
703 display: flex;
704 justify-content: space-between;
705 align-items: center;
706 padding: 12px 20px;
707 border-top: 1px solid #e5e7eb;
708 background: #fff;
709 }
710
711 .wcf-fbt-drawer-root.is-empty .wcf-fbt-drawer-footer,
712 .wcf-fbt-drawer-root.is-empty .wcf-fbt-drawer-body,
713 .wcf-fbt-drawer-root.is-disconnected .wcf-fbt-drawer-footer {
714 display: none;
715 }
716
717 .wcf-fbt-drawer-empty {
718 display: none;
719 flex: 1;
720 flex-direction: column;
721 align-items: center;
722 justify-content: center;
723 text-align: center;
724 gap: 12px;
725 padding: 24px 28px;
726 }
727
728 .wcf-fbt-drawer-root.is-empty .wcf-fbt-drawer-empty {
729 display: flex;
730 }
731
732 .wcf-fbt-drawer-empty-icon {
733 width: 64px;
734 height: 64px;
735 border-radius: 999px;
736 background: linear-gradient( 135deg, #d1fae5, #a7f3d0 );
737 display: inline-flex;
738 align-items: center;
739 justify-content: center;
740 color: #059669;
741 box-shadow: 0 6px 16px -6px rgba( 16, 185, 129, 0.35 );
742 }
743
744 .wcf-fbt-drawer-empty-icon svg {
745 width: 30px;
746 height: 30px;
747 }
748
749 .wcf-fbt-drawer-empty-title {
750 margin: 8px 0 0;
751 font-size: 17px;
752 font-weight: 600;
753 color: #111827;
754 }
755
756 .wcf-fbt-drawer-empty-desc {
757 margin: 0;
758 max-width: 320px;
759 font-size: 13px;
760 line-height: 1.55;
761 color: #4b5563;
762 }
763
764 .wcf-fbt-drawer-empty-actions {
765 display: flex;
766 gap: 8px;
767 justify-content: center;
768 margin-top: 20px;
769 }
770
771 /* Reuse FBT panel result-row styles inside the drawer. */
772 .wcf-fbt-drawer-body .wcf-fbt-ai-list {
773 display: flex;
774 flex-direction: column;
775 gap: 10px;
776 }
777
778 .wcf-fbt-drawer-body .wcf-fbt-ai-item {
779 display: flex;
780 gap: 12px;
781 align-items: center;
782 padding: 12px 14px;
783 background: #fff;
784 border: 1px solid #bfdbfe;
785 border-radius: 10px;
786 }
787
788 .wcf-fbt-drawer-body .wcf-fbt-ai-content {
789 flex: 1;
790 min-width: 0;
791 }
792
793 .wcf-fbt-drawer-body .wcf-fbt-ai-row1 {
794 display: flex;
795 align-items: center;
796 flex-wrap: wrap;
797 gap: 8px;
798 margin-bottom: 2px;
799 }
800
801 .wcf-fbt-drawer-body .wcf-fbt-ai-name {
802 margin: 0;
803 font-size: 13px;
804 font-weight: 600;
805 color: #111827;
806 }
807
808 .wcf-fbt-drawer-body .wcf-fbt-ai-reason {
809 display: none;
810 }
811
812 .wcf-fbt-drawer-body .wcf-fbt-ai-actions {
813 display: flex;
814 flex-direction: column;
815 gap: 4px;
816 flex-shrink: 0;
817 }
818
819 .wcf-fbt-drawer-body .wcf-fbt-badge {
820 display: inline-flex;
821 align-items: center;
822 /* Same sale-price gap as the panel badge — the drawer renders the identical AI rows. */
823 gap: 4px;
824 padding: 1px 8px;
825 font-size: 11px;
826 font-weight: 500;
827 line-height: 1.6;
828 border: 1px solid transparent;
829 border-radius: 999px;
830 }
831
832 .wcf-fbt-drawer-body .wcf-fbt-badge-brand {
833 background: #eff6ff;
834 color: #1d4ed8;
835 border-color: #bfdbfe;
836 }
837
838 .wcf-fbt-drawer-body .wcf-fbt-badge-green {
839 background: #f0fdf4;
840 color: #15803d;
841 border-color: #bbf7d0;
842 }
843
844 .wcf-fbt-drawer-body .wcf-fbt-badge-yellow {
845 background: #fefce8;
846 color: #a16207;
847 border-color: #fef08a;
848 }
849
850 .wcf-fbt-drawer-body .wcf-fbt-badge-gray {
851 background: #f9fafb;
852 color: #1f2937;
853 border-color: #e5e7eb;
854 }
855
856 .wcf-fbt-card-thumb {
857 width: 44px;
858 height: 44px;
859 border-radius: 6px;
860 background: #f3f4f6;
861 border: 1px solid #f3f4f6;
862 object-fit: cover;
863 flex-shrink: 0;
864 display: block;
865 }
866
867 .wcf-fbt-drawer-root .wcf-fbt-btn {
868 display: inline-flex;
869 height: auto;
870 min-height: 0;
871 align-items: center;
872 gap: 6px;
873 padding: 6px 10px;
874 font-size: 13px;
875 font-weight: 500;
876 border-radius: 6px;
877 cursor: pointer;
878 line-height: 1.25;
879 text-decoration: none;
880 }
881
882 .wcf-fbt-drawer-root .wcf-fbt-ai-reject {
883 font-size: 12px;
884 text-decoration: none;
885 align-self: center;
886 padding: 5px 10px;
887 }
888
889 .wcf-fbt-drawer-root .wcf-fbt-btn-icon {
890 padding: 5px;
891 width: 26px;
892 height: 26px;
893 justify-content: center;
894 }
895
896 .wcf-fbt-drawer-body .wcf-fbt-skeleton-row {
897 height: 68px;
898 border-radius: 10px;
899 background: linear-gradient( 90deg, #f3f4f6, #e5e7eb, #f3f4f6 );
900 background-size: 200% 100%;
901 animation: wcf-fbt-shine 1.4s infinite;
902 }
903
904 .wcf-fbt-drawer-body .wcf-fbt-skeleton-list {
905 display: flex;
906 flex-direction: column;
907 gap: 10px;
908 margin-top: 12px;
909 }
910
911 .wcf-fbt-drawer-body .wcf-fbt-status {
912 margin: 0 0 12px;
913 padding: 8px 12px;
914 font-size: 12px;
915 color: #4b5563;
916 background: #f9fafb;
917 border-left: 3px solid #9ca3af;
918 border-radius: 3px;
919 }
920
921 .wcf-fbt-drawer-body .wcf-fbt-status.is-error {
922 color: #b91c1c;
923 background: #fef2f2;
924 border-left-color: #b91c1c;
925 }
926
927 /* Custom-qty column — reveal 80px slot when picker-shell has the .has-qty class. */
928
929 #cartflows_fbt_data .wcf-fbt-picker-shell.has-qty .wcf-fbt-picker-header-row,
930 #cartflows_fbt_data .wcf-fbt-picker-shell.has-qty .wcf-fbt-picker-row {
931 grid-template-columns: 24px 44px 1fr 90px 100px 80px 32px;
932 }
933
934 #cartflows_fbt_data .wcf-fbt-picker-header-row .h-qty {
935 text-align: center;
936 }
937
938 #cartflows_fbt_data .wcf-fbt-picker-qty {
939 overflow: hidden;
940 text-align: center;
941 }
942
943 #cartflows_fbt_data .wcf-fbt-picker-shell:not( .has-qty ) .wcf-fbt-picker-qty,
944 #cartflows_fbt_data .wcf-fbt-picker-shell:not( .has-qty ) .h-qty {
945 display: none;
946 }
947
948 #cartflows_fbt_data .wcf-fbt-picker-qty-input {
949 width: 64px;
950 height: 30px;
951 min-height: 0;
952 padding: 4px 6px;
953 margin: 0;
954 font-size: 12.5px;
955 line-height: 1.25;
956 text-align: center;
957 border: 1px solid #d1d5db;
958 border-radius: 4px;
959 background: #fff;
960 box-shadow: none;
961 }
962
963 /* Locked to 1 (sold individually) — greyed so it doesn't read as editable. */
964 #cartflows_fbt_data .wcf-fbt-picker-qty-input[readonly] {
965 background: #f3f4f6;
966 color: #6b7280;
967 cursor: not-allowed;
968 }
969
970 /* Settings block — divider above; rows themselves use WC's native .form-field styling. */
971 #cartflows_fbt_data .wcf-fbt-settings {
972 margin-top: 18px;
973 padding-top: 18px;
974 border-top: 1px solid #e5e7eb;
975 }
976
977 /* WC caps .form-field label width at 150px; our labels are longer, so give them
978 room and add a gap before the control so the two never touch. */
979 #cartflows_fbt_data .wcf-fbt-settings .form-field > label,
980 #cartflows_fbt_data .wcf-fbt-settings .form-field > legend {
981 width: auto;
982 min-width: 160px;
983 padding-right: 12px;
984 }
985
986 /* Reusable inline-radios helper — add .wcf-fbt-radios-inline to any .wc-radios
987 list to lay options side-by-side and vertically center each radio with its label.
988 Chain includes .wcf-fbt-settings so specificity beats WC's own
989 #woocommerce-product-data .woocommerce_options_panel .wc-radios rule. */
990 #cartflows_fbt_data .wcf-fbt-settings .wcf-fbt-radios-inline {
991 display: flex;
992 float: none;
993 gap: 12px;
994 }
995
996 #cartflows_fbt_data .wcf-fbt-settings .wcf-fbt-radios-inline li label {
997 display: flex;
998 align-items: center;
999 gap: 4px;
1000 }
1001
1002 /* Shortcode hint under the placement select — revealed only for the 'shortcode' placement. */
1003 #cartflows_fbt_data .wcf-fbt-settings .wcf-fbt-shortcode-hint {
1004 display: none;
1005 clear: both;
1006 margin-left: 22px;
1007 padding-top: 6px;
1008 color: #50575e;
1009 font-style: italic;
1010 }
1011
1012 #cartflows_fbt_data .wcf-fbt-settings .wcf-fbt-shortcode-hint.is-visible {
1013 display: block;
1014 }
1015
1016 #cartflows_fbt_data .wcf-fbt-settings .wcf-fbt-shortcode-hint code {
1017 font-style: normal;
1018 user-select: all;
1019 }
1020
1021 /* NEW tab badge appended by fbt-admin.js; scoped under .wc-tabs to beat WC's own anchor rules. */
1022 #woocommerce-product-data .wc-tabs li.cartflows_fbt_tab a .wcf-fbt-tab-badge {
1023 display: inline-block;
1024 margin-left: 5px;
1025 padding: 0 5px;
1026 font-size: 9px;
1027 font-weight: 600;
1028 line-height: 14px;
1029 text-transform: uppercase;
1030 letter-spacing: 0.03em;
1031 color: #1d4ed8;
1032 background: #eff6ff;
1033 border: 1px solid #bfdbfe;
1034 border-radius: 999px;
1035 vertical-align: middle;
1036 }
1037
1038 #cartflows_fbt_data .wcf-fbt-callout {
1039 display: flex;
1040 align-items: flex-start;
1041 justify-content: space-between;
1042 gap: 16px;
1043 padding: 14px 20px;
1044 background: #f8fafc;
1045 border-bottom: 1px solid #e5e7eb;
1046 }
1047
1048 #cartflows_fbt_data .wcf-fbt-callout-body {
1049 display: flex;
1050 align-items: flex-start;
1051 gap: 10px;
1052 }
1053
1054 #cartflows_fbt_data .wcf-fbt-callout-text strong {
1055 display: block;
1056 font-size: 13px;
1057 font-weight: 600;
1058 color: #111827;
1059 }
1060
1061 #cartflows_fbt_data .wcf-fbt-callout-text p {
1062 margin: 2px 0 0;
1063 padding: 0;
1064 font-size: 12.5px;
1065 line-height: 1.5;
1066 color: #6b7280;
1067 }
1068
1069 #cartflows_fbt_data .wcf-fbt-callout-dismiss {
1070 flex: none;
1071 color: #6b7280;
1072 text-decoration: none;
1073 font-size: 12.5px;
1074 }
1075
1076 #cartflows_fbt_data .wcf-fbt-callout-dismiss:hover {
1077 color: #111827;
1078 }
1079