PluginProbe
MxChat – AI Chatbot & Content Generation for WordPress / trunk
MxChat – AI Chatbot & Content Generation for WordPress vtrunk
3.2.21 3.2.20 3.2.19 3.2.18 3.2.17 3.2.16 3.2.15 3.2.14 3.2.12 3.2.13 3.2.11 3.2.10 3.2.9 3.2.8 3.2.7 3.2.6 3.2.5 3.2.4 3.2.3 3.2.2 3.2.1 2.0.3 2.0.4 2.0.5 2.0.6 All 152 releases
mxchat-basic / css / chat-style.css

chat-style.css in MxChat – AI Chatbot & Content Generation for WordPress trunk, at css/chat-style.css

2,266 lines 54.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /* ============================================================
2 DEFENSIVE BASELINE (v3.2.15, plan-52fd4c)
3 The widget renders in the host page DOM with no isolation layer,
4 so host-theme CSS bleeds into it. This block is a scoped floor:
5 (1) border-box everywhere inside the widget (themes that set
6 *{box-sizing:content-box} otherwise break every fixed-size element);
7 (2) a specificity-0 reset via :where() of exactly the properties
8 themes commonly weaponize on form/button elements. :where() keeps
9 specificity at zero, so every later widget rule AND any customer
10 custom CSS still wins unchanged — the reset only fills gaps where
11 we currently set nothing. Scoped: nothing here can leak onto the
12 host page. Deliberately NOT Shadow DOM / @layer / !important.
13 ============================================================ */
14 .mxchat-chatbot-wrapper,
15 .mxchat-chatbot-wrapper *,
16 .mxchat-chatbot-wrapper *::before,
17 .mxchat-chatbot-wrapper *::after,
18 .floating-chatbot,
19 .floating-chatbot *,
20 .floating-chatbot *::before,
21 .floating-chatbot *::after {
22 box-sizing: border-box;
23 }
24
25 .mxchat-chatbot-wrapper :where(button, input, select, textarea) {
26 font-family: inherit;
27 font-size: inherit;
28 line-height: inherit;
29 margin: 0;
30 text-transform: none;
31 letter-spacing: normal;
32 min-height: 0;
33 max-width: none;
34 background-image: none;
35 text-shadow: none;
36 float: none;
37 }
38 .mxchat-chatbot-wrapper :where(button) {
39 width: auto;
40 }
41
42 /* ========================================
43 NOTIFICATION SYSTEM
44 ======================================== */
45 .chat-notification-badge {
46 animation: notification-pulse 2s infinite;
47 box-shadow: 0 0 0 rgba(255, 68, 68, 0.4);
48 transition: all 0.3s ease;
49 }
50
51 @keyframes notification-pulse {
52 0% {
53 transform: scale(1);
54 box-shadow: 0 0 0 0 rgba(255, 68, 68, 0.4);
55 }
56 70% {
57 transform: scale(1.1);
58 box-shadow: 0 0 0 10px rgba(255, 68, 68, 0);
59 }
60 100% {
61 transform: scale(1);
62 box-shadow: 0 0 0 0 rgba(255, 68, 68, 0);
63 }
64 }
65
66 /* ========================================
67 EMAIL COLLECTION SYSTEM
68 ======================================== */
69 .email-blocker {
70 display: flex;
71 flex-direction: column;
72 align-items: center;
73 /* No justify-content: center here — on an overflowing flex container it
74 pushes content past BOTH edges, making the top unreachable by scroll.
75 The auto margins on the first/last children below center the content
76 when there is room and collapse to flex-start when there is not. */
77 border-radius: 12px;
78 padding: 30px 20px;
79 max-width: 100%;
80 max-height: 100%;
81 overflow-y: auto;
82 scrollbar-width: thin;
83 margin: auto;
84 text-align: center;
85 animation: fadeIn 0.5s ease-in-out;
86 }
87
88 .email-blocker::-webkit-scrollbar {
89 width: 5px;
90 }
91
92 .email-blocker::-webkit-scrollbar-thumb {
93 background-color: #212121;
94 border-radius: 20px;
95 }
96
97 .email-blocker-header {
98 margin-top: auto;
99 margin-bottom: 20px;
100 }
101
102 .email-blocker .email-collection-form {
103 margin-bottom: auto;
104 }
105
106 .email-blocker-logo {
107 max-width: 80px;
108 margin-bottom: 10px;
109 }
110
111 .email-blocker h2 {
112 font-size: 24px;
113 font-weight: bold;
114 color: #333333;
115 margin-bottom: 10px;
116 }
117
118 .email-blocker p {
119 font-size: 16px;
120 color: #555555;
121 margin-bottom: 20px;
122 }
123
124 .email-blocker input[type="email"],
125 .email-blocker .mxchat-name-input {
126 width: 100%;
127 padding: 12px;
128 margin-bottom: 15px;
129 border: 1px solid #ddd;
130 border-radius: 8px;
131 font-size: 16px;
132 color: #333333;
133 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
134 transition: border-color 0.3s, box-shadow 0.3s;
135 }
136
137 .email-blocker input[type="email"]:focus,
138 .email-blocker .mxchat-name-input:focus {
139 border-color: #0073aa;
140 box-shadow: 0 0 8px rgba(0, 115, 170, 0.3);
141 outline: none;
142 }
143
144 /* Consent checkbox row (b062c4). Left-aligned inside the centered form so a
145 multi-line label reads naturally; sized to stay compact on 320-390px. */
146 .email-blocker .mxchat-consent-row {
147 display: flex;
148 align-items: flex-start;
149 gap: 8px;
150 width: 100%;
151 margin-bottom: 15px;
152 text-align: left;
153 }
154
155 .email-blocker .mxchat-consent-checkbox {
156 flex-shrink: 0;
157 width: 16px;
158 height: 16px;
159 margin: 2px 0 0;
160 accent-color: #0073aa;
161 cursor: pointer;
162 }
163
164 .email-blocker .mxchat-consent-label {
165 font-size: 13px;
166 line-height: 1.45;
167 color: #555555;
168 cursor: pointer;
169 }
170
171 .email-blocker .mxchat-consent-label a {
172 color: #0073aa;
173 text-decoration: underline;
174 }
175
176 .email-blocker button {
177 background-color: #0073aa;
178 color: #ffffff;
179 padding: 12px 20px;
180 border: none;
181 border-radius: 8px;
182 font-size: 16px;
183 font-weight: bold;
184 cursor: pointer;
185 width: 100%;
186 transition: background-color 0.3s, transform 0.2s;
187 }
188
189 .email-blocker button:hover {
190 background-color: #005177;
191 transform: translateY(-2px);
192 }
193
194 .email-blocker-footer {
195 margin-top: 20px;
196 font-size: 12px;
197 color: #888888;
198 }
199
200 .sr-only {
201 position: absolute;
202 width: 1px;
203 height: 1px;
204 padding: 0;
205 margin: -1px;
206 overflow: hidden;
207 clip: rect(0, 0, 0, 0);
208 white-space: nowrap;
209 border: 0;
210 }
211
212 @keyframes fadeIn {
213 from {
214 opacity: 0;
215 transform: translateY(-10px);
216 }
217 to {
218 opacity: 1;
219 transform: translateY(0);
220 }
221 }
222
223 .mxchat-chatbot-wrapper {
224 display: none;
225 }
226
227 /* ========================================
228 SEARCH RESULTS SYSTEM
229 ======================================== */
230 .chatbot-title-icon {
231 width: 24px;
232 height: 24px;
233 object-fit: contain;
234 }
235
236 .wp-admin .mxchat-search-results,
237 .wp-content .mxchat-search-results,
238 .site-content .mxchat-search-results,
239 .mxchat-search-results {
240 display: flex;
241 flex-direction: column;
242 gap: 20px;
243 margin: 15px 0;
244 font-size: 14px !important;
245 }
246
247 .mxchat-search-intro {
248 font-size: 16px !important;
249 margin: 0 0 15px 0 !important;
250 line-height: 1.4 !important;
251 font-weight: normal !important;
252 }
253
254 .mxchat-search-item {
255 padding: 15px !important;
256 border-radius: 8px !important;
257 background: #ffffff !important;
258 border: 1px solid rgba(0, 0, 0, 0.1) !important;
259 }
260
261 .mxchat-search-header {
262 display: flex !important;
263 align-items: center !important;
264 gap: 8px !important;
265 margin-bottom: 8px !important;
266 }
267
268 .mxchat-site-icon {
269 width: 16px !important;
270 height: 16px !important;
271 flex-shrink: 0 !important;
272 }
273
274 .mxchat-site-url {
275 font-size: 13px !important;
276 color: #555 !important;
277 line-height: 1 !important;
278 }
279
280 .mxchat-search-content {
281 display: flex !important;
282 flex-direction: column !important;
283 gap: 10px !important;
284 }
285
286 .mxchat-search-title {
287 font-size: 16px !important;
288 line-height: 1.4 !important;
289 margin: 0 !important;
290 padding: 0 !important;
291 font-weight: 600 !important;
292 }
293
294 .mxchat-search-title a {
295 text-decoration: none !important;
296 color: #000 !important;
297 }
298
299 .mxchat-search-title a:hover {
300 text-decoration: underline !important;
301 }
302
303 .mxchat-search-thumbnail {
304 max-width: 200px !important;
305 margin: 10px 0 !important;
306 }
307
308 .mxchat-search-thumbnail img {
309 max-width: 100% !important;
310 height: auto !important;
311 border-radius: 4px !important;
312 }
313
314 .mxchat-search-description {
315 font-size: 14px !important;
316 line-height: 1.6 !important;
317 color: #333 !important;
318 margin: 0 !important;
319 padding: 0 !important;
320 }
321
322 /* ========================================
323 ENHANCED HEADINGS & TEXT STYLING
324 ======================================== */
325 .bot-message .chat-heading {
326 color: inherit;
327 margin: 16px 0 12px 0 !important;
328 font-weight: bold !important;
329 line-height: 1.3 !important;
330 }
331
332 .bot-message h1.chat-heading,
333 .chat-heading-1 {
334 font-size: 1.5em !important;
335 border-bottom: 2px solid rgba(255, 255, 255, 0.3) !important;
336 padding-bottom: 8px !important;
337 }
338
339 .bot-message h2.chat-heading,
340 .chat-heading-2 {
341 font-size: 1.25em !important;
342 border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important;
343 padding-bottom: 6px !important;
344 }
345
346 .bot-message h3.chat-heading,
347 .chat-heading-3 {
348 font-size: 1.125em !important;
349 }
350
351 .bot-message h4.chat-heading,
352 .chat-heading-4 {
353 font-size: 1em !important;
354 }
355
356 .bot-message h5.chat-heading,
357 .chat-heading-5 {
358 font-size: 0.875em !important;
359 text-transform: uppercase !important;
360 letter-spacing: 0.5px !important;
361 }
362
363 .bot-message h6.chat-heading,
364 .chat-heading-6 {
365 font-size: 0.75em !important;
366 text-transform: uppercase !important;
367 letter-spacing: 0.5px !important;
368 }
369
370 .bot-message strong {
371 font-weight: bold !important;
372 }
373
374 .bot-message em {
375 font-style: italic !important;
376 }
377
378 .bot-message del {
379 text-decoration: line-through !important;
380 opacity: 0.7;
381 }
382
383 /* ========================================
384 CODE BLOCKS & INLINE CODE
385 ======================================== */
386 .mxchat-table-wrapper {
387 overflow-x: auto;
388 margin: 12px 0;
389 -webkit-overflow-scrolling: touch;
390 }
391
392 .mxchat-table {
393 width: 100%;
394 border-collapse: collapse;
395 font-size: 0.9em;
396 line-height: 1.4;
397 }
398
399 .mxchat-table th,
400 .mxchat-table td {
401 padding: 8px 12px;
402 border: 1px solid rgba(128, 128, 128, 0.3);
403 word-break: break-word;
404 }
405
406 .mxchat-table thead th {
407 font-weight: 600;
408 background: rgba(128, 128, 128, 0.15);
409 }
410
411 .mxchat-table tbody tr:nth-child(even) {
412 background: rgba(128, 128, 128, 0.05);
413 }
414
415 .mxchat-code-block-container {
416 margin: 16px 0;
417 border-radius: 8px;
418 background: rgba(255, 255, 255, 0.1);
419 border: 1px solid rgba(255, 255, 255, 0.2);
420 overflow: hidden;
421 font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Courier New', monospace;
422 }
423
424 .mxchat-code-header {
425 display: flex;
426 justify-content: space-between;
427 align-items: center;
428 background: rgba(255, 255, 255, 0.15);
429 padding: 8px 12px;
430 border-bottom: 1px solid rgba(255, 255, 255, 0.2);
431 font-size: 11px;
432 min-height: 36px;
433 }
434
435 .mxchat-code-language {
436 color: rgba(255, 255, 255, 0.8);
437 font-weight: 600;
438 text-transform: uppercase;
439 letter-spacing: 0.5px;
440 font-size: 10px;
441 }
442
443 .mxchat-copy-button {
444 background: rgba(255, 255, 255, 0.2);
445 color: white;
446 border: 1px solid rgba(255, 255, 255, 0.3);
447 padding: 4px 8px;
448 border-radius: 4px;
449 font-size: 10px;
450 cursor: pointer;
451 transition: all 0.2s ease;
452 min-height: 24px;
453 line-height: 1;
454 }
455
456 .mxchat-copy-button:hover {
457 background: rgba(255, 255, 255, 0.3);
458 border-color: rgba(255, 255, 255, 0.4);
459 }
460
461 .mxchat-copy-button:active {
462 background: rgba(255, 255, 255, 0.4);
463 }
464
465 .mxchat-code-block {
466 margin: 0;
467 padding: 16px;
468 background: rgba(0, 0, 0, 0.3);
469 overflow-x: auto;
470 font-size: 13px;
471 line-height: 1.4;
472 white-space: pre;
473 border: none;
474 }
475
476 .mxchat-code-block code {
477 font-family: inherit;
478 font-size: inherit;
479 background: none !important;
480 padding: 0 !important;
481 border: none !important;
482 color: rgba(255, 255, 255, 0.95) !important;
483 display: block;
484 }
485
486 .mxchat-inline-code {
487 background: rgba(255, 255, 255, 0.2) !important;
488 padding: 2px 6px !important;
489 border-radius: 3px !important;
490 font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Courier New', monospace !important;
491 font-size: 0.85em !important;
492 color: #81c784 !important;
493 border: 1px solid rgba(255, 255, 255, 0.3) !important;
494 }
495
496 /* ========================================
497 TOOLBAR SYSTEM
498 ======================================== */
499 .active-pdf-container,
500 .active-word-container {
501 display: inline-flex;
502 align-items: center;
503 max-width: 200px;
504 margin: 0;
505 padding: 0;
506 line-height: 13px;
507 }
508
509 .active-pdf-name,
510 .active-word-name {
511 font-size: 11px;
512 white-space: nowrap;
513 overflow: hidden;
514 text-overflow: ellipsis;
515 }
516
517 .remove-pdf-btn,
518 .remove-word-btn,
519 .toolbar-perplexity {
520 background: none;
521 border: none;
522 padding: 2px;
523 margin-left: 4px;
524 cursor: pointer;
525 transition: opacity 0.2s;
526 line-height: 13px;
527 }
528
529 .remove-pdf-btn:hover,
530 .remove-word-btn:hover,
531 .toolbar-perplexity:hover {
532 opacity: 1;
533 background: none;
534 }
535
536 .mxchat-chatbot .chat-toolbar {
537 display: flex;
538 gap: 10px;
539 padding: 8px;
540 background: none;
541 align-items: end;
542 }
543
544 .mxchat-chatbot .toolbar-btn {
545 background: none;
546 border: none;
547 padding: 0;
548 cursor: pointer;
549 width: 16px;
550 height: 16px;
551 align-items: center;
552 justify-content: center;
553 opacity: 0.6;
554 transition: opacity 0.2s;
555 margin: 0;
556 min-width: 0;
557 box-shadow: none;
558 }
559
560 .mxchat-chatbot .toolbar-btn svg {
561 width: 100%;
562 height: 100%;
563 }
564
565 .mxchat-chatbot .toolbar-btn:hover {
566 opacity: 1;
567 background: none;
568 border: none;
569 box-shadow: none;
570 }
571
572 .mxchat-chatbot .toolbar-btn:disabled {
573 opacity: 0.3;
574 cursor: not-allowed;
575 background: none;
576 border: none;
577 }
578
579 .toolbar-btn.active {
580 background-color: rgba(120, 115, 245, 0.2);
581 box-shadow: 0 0 0 2px rgba(120, 115, 245, 0.4);
582 }
583
584 .active-perplexity-container {
585 display: flex;
586 align-items: center;
587 margin-left: 8px;
588 font-size: 12px;
589 }
590
591 .perplexity-search-btn {
592 display: none;
593 }
594
595 .perplexity-search-btn.active {
596 opacity: 1;
597 }
598
599 /* ========================================
600 POPULAR QUESTIONS SYSTEM
601 ======================================== */
602 .mxchat-popular-questions {
603 padding: 0 10px 10px;
604 transition: all 0.3s ease;
605 margin-bottom: 12px;
606 position: relative;
607 }
608
609 .mxchat-popular-questions-title {
610 font-size: 14px;
611 line-height: 24px;
612 font-weight: bold;
613 color: #212121;
614 margin-bottom: 10px;
615 }
616
617 .mxchat-popular-questions-container {
618 position: relative;
619 display: flex;
620 flex-direction: column;
621 max-height: 200px;
622 overflow-y: auto;
623 padding: 0 10px 10px;
624 scrollbar-width: thin;
625 scrollbar-color: #212121 #f1f1f1;
626 transition: all 0.3s ease;
627 gap: 8px;
628 }
629
630 .mxchat-popular-questions.collapsed {
631 padding: 0;
632 margin: 0;
633 }
634
635 .mxchat-popular-questions.collapsed .mxchat-popular-questions-container {
636 flex-direction: row;
637 justify-content: center;
638 align-items: center;
639 padding: 0;
640 max-height: 40px;
641 overflow: visible;
642 }
643
644 .mxchat-popular-questions.collapsed .mxchat-popular-question {
645 display: none;
646 }
647
648 .mxchat-popular-questions.collapsed .questions-collapse-btn {
649 display: none;
650 }
651
652 .mxchat-popular-questions .mxchat-popular-questions-container .questions-toggle-btn {
653 background: none;
654 border: none;
655 padding: 0;
656 margin: 0;
657 cursor: pointer;
658 transition: all 0.2s ease;
659 color: #212121;
660 display: none; /* Hidden by default when open */
661 align-items: center;
662 justify-content: center;
663 width: 32px;
664 height: 32px;
665 box-shadow: none;
666 outline: none;
667 }
668
669 .mxchat-popular-questions .mxchat-popular-questions-container .questions-collapse-btn {
670 background: none;
671 border: none;
672 padding: 0;
673 margin: 0px; /* Center and add bottom margin */
674 cursor: pointer;
675 transition: all 0.2s ease;
676 color: #212121;
677 display: none; /* Hidden by default */
678 align-items: center;
679 justify-content: center;
680 width: 32px;
681 height: 32px;
682 box-shadow: none;
683 outline: none;
684 align-self: center; /* Center in flex container */
685 order: -1; /* Make sure it appears first */
686 flex-shrink: 0; /* same flex auto-minimum caveat as .mxchat-popular-question */
687 }
688
689 .questions-toggle-btn:hover,
690 .questions-collapse-btn:hover,
691 .questions-toggle-btn:focus,
692 .questions-collapse-btn:focus,
693 .questions-toggle-btn:active,
694 .questions-collapse-btn:active {
695 background: none;
696 border: none;
697 box-shadow: none;
698 outline: none;
699 }
700
701 .questions-toggle-btn svg,
702 .questions-collapse-btn svg {
703 transition: transform 0.2s ease;
704 fill: none;
705 stroke: #212121;
706 width: 25px;
707 height: 25px;
708 }
709
710 .questions-toggle-btn:hover svg,
711 .questions-collapse-btn:hover svg {
712 opacity: 0.7;
713 }
714
715 .mxchat-popular-questions.collapsed .questions-toggle-btn {
716 display: flex;
717 }
718
719 .mxchat-popular-questions.has-been-collapsed .questions-collapse-btn {
720 display: flex;
721 align-self: center;
722 order: -1;
723 }
724
725 .mxchat-popular-question {
726 padding: 12px 20px;
727 background-color: #f5f5f5;
728 border: 1px solid #bbb;
729 border-radius: 8px;
730 color: #212121;
731 font-size: 14px;
732 line-height: 24px;
733 cursor: pointer;
734 text-align: initial;
735 transition: all 0.3s ease;
736 margin-bottom: 0;
737 box-shadow: none;
738 /* The defensive baseline's min-height:0 on :where(button) removes the
739 flex automatic minimum size, so without this the column-flex scroll
740 container compresses all questions to fit 200px and the scrollbox
741 never appears (plan d51560). */
742 flex-shrink: 0;
743 }
744
745 .mxchat-popular-question:hover {
746 background-color: #eaeaea;
747 border-color: #999;
748 box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
749 transform: translateY(-1px);
750 }
751
752 .mxchat-popular-question:focus {
753 outline: none;
754 background-color: #e0e0e0;
755 border-color: #777;
756 box-shadow: 0 0 0 3px rgba(100, 149, 237, 0.5);
757 }
758
759 .mxchat-popular-question:active {
760 background-color: #d8d8d8;
761 border-color: #666;
762 box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);
763 transform: translateY(0);
764 }
765
766 .mxchat-popular-questions-container::-webkit-scrollbar {
767 width: 8px;
768 }
769
770 .mxchat-popular-questions-container::-webkit-scrollbar-track {
771 background: #f1f1f1;
772 border-radius: 4px;
773 }
774
775 .mxchat-popular-questions-container::-webkit-scrollbar-thumb {
776 background: linear-gradient(135deg, #fa73e6, #7873f5, #3ac9d1);
777 border-radius: 4px;
778 }
779
780 .mxchat-popular-questions-container::-webkit-scrollbar-thumb:hover {
781 background: linear-gradient(135deg, #d164ce, #6568d8, #2daeb8);
782 }
783
784 /* ========================================
785 CORE CHATBOT UI
786 ======================================== */
787 .invisible {
788 display: none;
789 opacity: 0;
790 pointer-events: none;
791 }
792
793 .mxchat-chatbot{
794 background: #fff;
795 overflow: hidden;
796 position: relative;
797 display: flex;
798 flex-direction: column;
799 flex-grow: 1;
800 min-height: 0; /* Allow flex shrinking */
801 box-sizing: border-box;
802 }
803
804 .chat-container {
805 display: flex;
806 flex-direction: column;
807 flex-grow: 1;
808 min-height: 0; /* Critical for flex overflow scrolling */
809 height: 100%;
810 }
811
812 .chat-box {
813 flex-grow: 1;
814 overflow-y: auto;
815 padding: 10px;
816 margin-bottom: 0;
817 font-size: 1rem;
818 min-height: 0; /* Critical for flex overflow scrolling */
819 }
820
821 .chat-box::-webkit-scrollbar {
822 width: 5px;
823 }
824
825 .chat-box::-webkit-scrollbar-thumb {
826 background-color: #212121;
827 border-radius: 20px;
828 }
829
830 .bot-message,
831 .user-message {
832 margin-bottom: 15px;
833 padding: 10px;
834 display: inline-block;
835 max-width: 85%;
836 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
837 font-size: 14px;
838 line-height: 24px;
839 }
840
841 .user-message {
842 background: #fff;
843 color: #212121;
844 text-align: left;
845 float: right;
846 clear: both;
847 border-radius: 18px 0 18px 18px;
848 word-wrap: break-word;
849 border: 1px solid rgba(226, 232, 255, 0.2);
850 }
851
852 .user-message p {
853 margin: 0;
854 }
855
856 .mxchat-chatbot .chat-container .chat-box .bot-message {
857 float: left;
858 clear: both;
859 border: 1px solid rgba(226, 232, 255, 0.2);
860 border-radius: 0 18px 18px;
861 background: #212121;
862 color: #fff;
863 overflow-x: hidden;
864 }
865
866 .mxchat-chatbot .chat-container .chat-box .agent-message {
867 text-align: left;
868 float: left;
869 clear: both;
870 border: 1px solid rgba(226, 232, 255, 0.2);
871 border-radius: 0 18px 18px;
872 background: #212121;
873 color: #fff;
874 overflow-x: hidden;
875 margin-bottom: 15px;
876 padding: 10px;
877 display: inline-block;
878 max-width: 85%;
879 font-size: 14px;
880 line-height: 24px;
881 box-shadow: -2px 2px rgba(250, 115, 230, 0.6), -4px 4px rgba(120, 115, 245, 0.6);
882 }
883
884 .bot-message p {
885 margin: 0 0 1em 0;
886 }
887
888 .bot-message p:last-child {
889 margin-bottom: 0;
890 }
891
892 .bot-message {
893 white-space: pre-line;
894 }
895
896 .bot-message a {
897 color: #ffffff;
898 text-decoration: underline !important;
899 }
900
901 .bot-message a:hover {
902 color: #e0e0e0;
903 text-decoration: underline;
904 }
905
906 .bot-message a:visited {
907 color: #ffffff;
908 }
909
910 .system-message {
911 padding: 8px 12px;
912 margin: 8px 0;
913 background-color: rgba(120, 115, 245, 0.1);
914 border-radius: 8px;
915 color: #555;
916 font-style: italic;
917 font-size: 14px;
918 text-align: center;
919 }
920
921 .mxchat-chatbot-wrapper {
922 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
923 border-radius: 10px;
924 display: flex;
925 flex-direction: column;
926 height: 100%;
927 width: 100%;
928 min-height: 0; /* Allow flex shrinking */
929 overflow: hidden;
930 }
931
932 /* ========================================
933 INPUT & CONTROLS
934 ======================================== */
935 .mxchat-chatbot .chat-container .input-container {
936 position: relative;
937 display: flex;
938 align-items: center;
939 padding-right: 40px;
940 border: 1px solid #ccc;
941 border-radius: 10px;
942 margin: 0 10px 10px;
943 }
944
945 .mxchat-chatbot .chat-container .input-container .chat-input {
946 flex-grow: 1;
947 color: #212121;
948 line-height: 24px;
949 background: transparent;
950 margin-bottom: 0;
951 width: 100%;
952 min-height: 20px;
953 max-height: 65px;
954 resize: none;
955 overflow-y: auto;
956 font-size: 16px;
957 border: none;
958 border-radius: 5px;
959 box-sizing: border-box;
960 padding: 0.4em 0.5em;
961 outline: none;
962 border-radius: 10px;
963 }
964
965 .chat-input::-webkit-scrollbar {
966 width: 8px;
967 }
968
969 .chat-input::-webkit-scrollbar-track {
970 background: #f1f1f1;
971 border-radius: 4px;
972 }
973
974 .chat-input::-webkit-scrollbar-thumb {
975 background: linear-gradient(135deg, #fa73e6, #7873f5, #3ac9d1);
976 border-radius: 4px;
977 }
978
979 .chat-input::-webkit-scrollbar-thumb:hover {
980 background: linear-gradient(135deg, #d164ce, #6568d8, #2daeb8);
981 }
982
983 .chat-input {
984 scrollbar-width: thin;
985 scrollbar-color: linear-gradient(135deg, #fa73e6, #7873f5, #3ac9d1) #f1f1f1;
986 }
987
988 /* Chat input character counter + soft limit feedback (plan 7091a2).
989 Language-neutral: numbers + color only. Hidden until ~80% of the cap, then
990 fades in and ramps neutral -> amber -> red. The input border mirrors the same
991 cue, and an over-limit keystroke/paste triggers a brief shake so the hard
992 maxlength cap (plan a3fae2) is never a silent "input jumps back". */
993 .mxchat-chatbot .chat-container .input-container .mxchat-char-counter {
994 position: absolute;
995 bottom: 3px;
996 right: 44px; /* clear the absolutely-positioned send button */
997 font-size: 11px;
998 line-height: 1;
999 font-variant-numeric: tabular-nums;
1000 color: #9aa0a6;
1001 background: rgba(255, 255, 255, 0.85);
1002 padding: 1px 5px;
1003 border-radius: 8px;
1004 pointer-events: none;
1005 opacity: 0;
1006 visibility: hidden;
1007 transition: opacity 0.18s ease, color 0.18s ease;
1008 z-index: 2;
1009 }
1010 .mxchat-chatbot .chat-container .input-container .mxchat-char-counter.is-visible {
1011 opacity: 1;
1012 visibility: visible;
1013 }
1014 .mxchat-chatbot .chat-container .input-container .mxchat-char-counter.is-warn {
1015 color: #d98300; /* amber: approaching the cap */
1016 }
1017 .mxchat-chatbot .chat-container .input-container .mxchat-char-counter.is-full {
1018 color: #d93025; /* red: at the cap */
1019 font-weight: 600;
1020 }
1021 /* RTL widgets: counter on the opposite side. */
1022 .mxchat-chatbot[dir="rtl"] .chat-container .input-container .mxchat-char-counter,
1023 [dir="rtl"] .mxchat-chatbot .chat-container .input-container .mxchat-char-counter {
1024 right: auto;
1025 left: 44px;
1026 }
1027 /* Input border affordance mirrors the counter color. */
1028 .mxchat-chatbot .chat-container .input-container.mxchat-input-near-limit {
1029 border-color: #f0b048;
1030 }
1031 .mxchat-chatbot .chat-container .input-container.mxchat-input-at-limit {
1032 border-color: #e5675c;
1033 }
1034 /* Soft "you hit the edge" bump when an over-limit keystroke/paste is rejected. */
1035 .mxchat-chatbot .chat-container .input-container.mxchat-input-bump {
1036 animation: mxchat-input-bump 0.2s ease;
1037 }
1038 @keyframes mxchat-input-bump {
1039 0% { transform: translateX(0); }
1040 25% { transform: translateX(-3px); }
1041 50% { transform: translateX(3px); }
1042 75% { transform: translateX(-2px); }
1043 100% { transform: translateX(0); }
1044 }
1045 /* Respect reduced-motion: drop the shake; the red border/counter still signals the cap. */
1046 @media (prefers-reduced-motion: reduce) {
1047 .mxchat-chatbot .chat-container .input-container.mxchat-input-bump {
1048 animation: none;
1049 }
1050 }
1051
1052 .mxchat-chatbot .chat-container .input-container .send-button {
1053 position: absolute;
1054 right: 10px;
1055 top: 50%;
1056 transform: translateY(-50%);
1057 border: none;
1058 border-radius: 50%;
1059 width: 30px;
1060 height: 30px;
1061 display: flex;
1062 align-items: center;
1063 justify-content: center;
1064 background: transparent !important;
1065 padding: 5px;
1066 margin: 0;
1067 transition: background-color 0.3s;
1068 color: #fff;
1069 font-size: 1rem;
1070 cursor: pointer;
1071 font-weight: 700;
1072 }
1073
1074 .send-button svg {
1075 width: 25px;
1076 height: 25px;
1077 pointer-events: none;
1078 }
1079
1080 .send-button:hover {
1081 opacity: 0.8;
1082 }
1083
1084 /* Stop state while a response is streaming: the send button becomes a Stop
1085 control in place — same chrome and position, swapped glyph. Themeable hook;
1086 the glyph's size/color are mirrored from the send icon at runtime. */
1087 .mxchat-chatbot .chat-container .input-container .send-button.mxchat-stop-mode {
1088 cursor: pointer;
1089 }
1090
1091 .mxchat-chatbot .spinner {
1092 animation: rotate 2s linear infinite;
1093 width: 20px;
1094 height: 20px;
1095 }
1096
1097 .mxchat-chatbot .spinner circle {
1098 stroke: #212121;
1099 stroke-linecap: round;
1100 animation: dash 1.5s ease-in-out infinite;
1101 }
1102
1103 @keyframes rotate {
1104 100% {
1105 transform: rotate(360deg);
1106 }
1107 }
1108
1109 @keyframes dash {
1110 0% {
1111 stroke-dasharray: 1, 150;
1112 stroke-dashoffset: 0;
1113 }
1114 50% {
1115 stroke-dasharray: 90, 150;
1116 stroke-dashoffset: -35;
1117 }
1118 100% {
1119 stroke-dasharray: 90, 150;
1120 stroke-dashoffset: -124;
1121 }
1122 }
1123
1124 /* ========================================
1125 FLOATING CHATBOT & CONTROLS
1126 ======================================== */
1127 .chatbot-title-container {
1128 display: flex;
1129 align-items: center;
1130 justify-content: space-between;
1131 gap: 10px;
1132 flex: 1 1 auto;
1133 min-width: 0;
1134 }
1135
1136 .chatbot-title-group {
1137 display: flex;
1138 align-items: center;
1139 gap: 8px;
1140 }
1141
1142 .chat-mode-indicator {
1143 font-size: 12px;
1144 line-height: 1;
1145 margin-right: 0;
1146 padding: 4px 9px;
1147 border-radius: 999px;
1148 background: rgba(255, 255, 255, 0.18);
1149 color: #ffffff;
1150 display: inline-flex;
1151 align-items: center;
1152 height: 22px;
1153 white-space: nowrap;
1154 flex: 0 0 auto;
1155 }
1156
1157 .floating-chatbot {
1158 position: fixed;
1159 bottom: 25px;
1160 right: 25px;
1161 width: 375px;
1162 /* Use viewport-aware height with fallbacks */
1163 height: min(625px, calc(100vh - 50px)); /* 50px = 25px top + 25px bottom margin */
1164 height: min(625px, calc(100dvh - 50px)); /* Dynamic viewport height for mobile browsers */
1165 max-height: calc(100vh - 50px);
1166 max-height: calc(100dvh - 50px); /* Fallback for browsers supporting dvh */
1167 box-shadow: 0 0 10px rgba(0, 0, 0, 0.25);
1168 border-radius: 20px;
1169 overflow: hidden;
1170 display: flex;
1171 flex-direction: column;
1172 z-index: 100000;
1173 transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;
1174 transform: translateY(20%);
1175 opacity: 0;
1176 pointer-events: none;
1177 }
1178
1179 .floating-chatbot.visible {
1180 transform: translateY(0);
1181 opacity: 1;
1182 pointer-events: auto;
1183 }
1184
1185 /* ========================================
1186 EMBEDDED CHATBOT (Shortcode)
1187 ======================================== */
1188 /* Embedded chatbots are NOT inside .floating-chatbot wrapper */
1189 /* Apply fixed height like floating widget so quick questions overlay properly */
1190 .mxchat-chatbot-wrapper:not(.floating-chatbot .mxchat-chatbot-wrapper) {
1191 height: 500px;
1192 max-height: 500px;
1193 }
1194
1195 /* Hide the minimize/exit button for embedded chatbots - it doesn't make sense */
1196 .mxchat-chatbot-wrapper:not(.floating-chatbot .mxchat-chatbot-wrapper) .exit-chat {
1197 display: none !important;
1198 }
1199
1200 .floating-chatbot-button.hidden,
1201 .exit-chat span {
1202 display: none !important;
1203 }
1204
1205 .chatbot-top-bar button.exit-chat:hover {
1206 background: rgba(255, 255, 255, 0.12);
1207 }
1208 .visible {
1209 display: flex;
1210 }
1211
1212 .floating-chatbot-button {
1213 transition: opacity 1s ease-in-out;
1214 font-size: 1.25rem;
1215 position: fixed;
1216 bottom: 30px;
1217 right: 25px;
1218 background-color: #212121;
1219 color: #fff;
1220 width: 60px;
1221 height: 60px;
1222 border-radius: 50%;
1223 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2) !important;
1224 justify-content: center;
1225 align-items: center;
1226 cursor: pointer;
1227 transition: 0.3s;
1228 z-index: 100000;
1229 display: flex;
1230 }
1231
1232 .floating-chatbot-button:focus-visible {
1233 outline: 3px solid #7873f5;
1234 outline-offset: 3px;
1235 }
1236
1237 .floating-chatbot-button img {
1238 max-width: 100%;
1239 max-height: 100%;
1240 width: auto;
1241 height: auto;
1242 }
1243
1244 .chatbot-top-bar {
1245 background: #212121;
1246 }
1247
1248 .mxchat-chatbot-wrapper .chatbot-top-bar button.exit-chat {
1249 background: transparent;
1250 /* v3.2.15 (plan-52fd4c): explicit guards against host-theme button rules.
1251 Margin deliberately untouched — .exit-chat relies on margin-left:auto. */
1252 background-image: none;
1253 border: none;
1254 opacity: 0.8;
1255 padding: 0;
1256 width: 32px;
1257 height: 32px;
1258 min-width: 32px;
1259 min-height: 32px;
1260 max-width: none;
1261 flex: 0 0 auto;
1262 border-radius: 6px;
1263 font-family: inherit;
1264 text-transform: none;
1265 text-shadow: none;
1266 appearance: none;
1267 -webkit-appearance: none;
1268 transition: opacity 0.15s ease, background 0.15s ease;
1269 }
1270
1271 .mxchat-chatbot-wrapper .chatbot-top-bar {
1272 cursor: pointer;
1273 color: #fff;
1274 padding: 8px 12px;
1275 min-height: 48px;
1276 gap: 8px;
1277 border-top-left-radius: 10px;
1278 border-top-right-radius: 10px;
1279 display: flex;
1280 justify-content: space-between;
1281 align-items: center;
1282 }
1283
1284 .mxchat-chatbot-wrapper .chatbot-top-bar .chatbot-title {
1285 font-size: 15px;
1286 line-height: 1.2;
1287 padding: 0;
1288 margin: 0;
1289 font-family: 'Plus Jakarta Sans', sans-serif;
1290 font-weight: 600;
1291 }
1292
1293 .exit-chat {
1294 border: none;
1295 background: transparent;
1296 cursor: pointer;
1297 display: inline-flex;
1298 align-items: center;
1299 justify-content: center;
1300 padding: 0;
1301 margin-left: auto;
1302 opacity: 0.8;
1303 width: 32px;
1304 height: 32px;
1305 min-width: 32px;
1306 flex: 0 0 auto;
1307 }
1308
1309 .exit-chat svg {
1310 width: 18px;
1311 height: 18px;
1312 fill: none;
1313 stroke: currentColor;
1314 }
1315
1316 .mxchat-chatbot-wrapper .chatbot-footer {
1317 text-align: center;
1318 padding-bottom: 10px;
1319 font-size: 0.85em;
1320 }
1321
1322 .mxchat-chatbot-wrapper .chatbot-footer .privacy-notice {
1323 font-size: 12px;
1324 margin: 0;
1325 color: #71717a;
1326 }
1327
1328 .mxchat-chatbot-wrapper .chatbot-footer .privacy-notice a {
1329 color: #0073aa;
1330 text-decoration: underline;
1331 font-size: 12px;
1332 }
1333
1334 .mxchat-chatbot-wrapper .chatbot-footer .powered-by {
1335 text-decoration: none;
1336 color: inherit;
1337 font-weight: 700;
1338 }
1339
1340 .mxchat-chatbot-wrapper .chatbot-footer .powered-by span {
1341 text-decoration: underline;
1342 }
1343
1344 /* ========================================
1345 INIT LOADER (shown while chat initializes)
1346 ======================================== */
1347 .mxchat-init-loader {
1348 display: flex;
1349 align-items: center;
1350 justify-content: center;
1351 flex-grow: 1;
1352 min-height: 0;
1353 animation: fadeIn 0.3s ease-in-out;
1354 }
1355
1356 .mxchat-init-loader-dots {
1357 display: flex;
1358 gap: 8px;
1359 }
1360
1361 .mxchat-init-loader-dots .dot {
1362 width: 8px;
1363 height: 8px;
1364 border-radius: 50%;
1365 background-color: #888;
1366 animation: mxchat-dot-bounce 1.4s ease-in-out infinite both;
1367 }
1368
1369 .mxchat-init-loader-dots .dot:nth-child(1) {
1370 animation-delay: -0.32s;
1371 }
1372
1373 .mxchat-init-loader-dots .dot:nth-child(2) {
1374 animation-delay: -0.16s;
1375 }
1376
1377 /* ========================================
1378 THINKING DOTS ANIMATION
1379 ======================================== */
1380 .chat-box .bot-message.temporary-message .thinking-dots-container {
1381 display: flex;
1382 justify-content: center;
1383 align-items: center;
1384 overflow: hidden;
1385 height: 20px;
1386 position: relative;
1387 z-index: 1;
1388 flex-shrink: 0;
1389 }
1390
1391 .chat-box .bot-message.temporary-message .thinking-dots {
1392 display: flex;
1393 justify-content: center;
1394 align-items: center;
1395 height: 90%;
1396 gap: 5px;
1397 flex-shrink: 0;
1398 }
1399
1400 .chat-box .bot-message.temporary-message .thinking-dots .dot {
1401 height: 6px;
1402 width: 6px;
1403 margin: 0 3px;
1404 background-color: #fff;
1405 border-radius: 50%;
1406 display: inline-block;
1407 animation: mxchat-dot-bounce 1.4s ease-in-out infinite both;
1408 vertical-align: middle;
1409 }
1410
1411 .chat-box .bot-message.temporary-message .thinking-dots .dot:first-child {
1412 animation-delay: -0.32s;
1413 }
1414
1415 .chat-box .bot-message.temporary-message .thinking-dots .dot:nth-child(2) {
1416 animation-delay: -0.16s;
1417 }
1418
1419 @keyframes mxchat-dot-bounce {
1420 0%, 100%, 80% {
1421 transform: scale(1);
1422 }
1423 40% {
1424 transform: scale(1.5);
1425 }
1426 }
1427
1428 /* ========================================
1429 PRE-CHAT MESSAGE
1430 ======================================== */
1431 .pre-chat-message {
1432 position: fixed;
1433 bottom: 85px;
1434 right: 30px;
1435 background-color: #fff;
1436 color: #212121;
1437 padding: 10px;
1438 box-shadow: 0px 0px 10px rgba(150, 150, 150, 0.3);
1439 border-radius: 5px;
1440 z-index: 1000;
1441 cursor: pointer;
1442 max-width: 325px;
1443 font-size: 14px;
1444 display: none;
1445 margin-bottom: 10px;
1446 }
1447
1448 .pre-chat-message .close-pre-chat-message {
1449 position: absolute;
1450 top: -6px;
1451 right: -6px;
1452 background-color: #ccc;
1453 border: none;
1454 color: #212121;
1455 font-size: 14px;
1456 cursor: pointer;
1457 border-radius: 50%;
1458 width: 20px;
1459 min-width: 20px;
1460 min-height: 20px;
1461 height: 20px;
1462 display: flex;
1463 align-items: center;
1464 justify-content: center;
1465 padding: 0;
1466 line-height: 1;
1467 }
1468
1469 /* ========================================
1470 VIEWPORT HEIGHT CONSTRAINTS
1471 Handles bookmarks bar, browser zoom, and smaller screens
1472 ======================================== */
1473 @media screen and (max-height: 700px) {
1474 .floating-chatbot {
1475 bottom: 15px;
1476 height: calc(100vh - 30px);
1477 height: calc(100dvh - 30px);
1478 max-height: calc(100vh - 30px);
1479 max-height: calc(100dvh - 30px);
1480 }
1481
1482 .floating-chatbot-button {
1483 bottom: 20px;
1484 }
1485
1486 .pre-chat-message {
1487 bottom: 75px;
1488 }
1489 }
1490
1491 @media screen and (max-height: 550px) {
1492 .floating-chatbot {
1493 bottom: 10px;
1494 height: calc(100vh - 20px);
1495 height: calc(100dvh - 20px);
1496 max-height: calc(100vh - 20px);
1497 max-height: calc(100dvh - 20px);
1498 }
1499
1500 /* Reduce padding in tight spaces */
1501 .mxchat-popular-questions {
1502 padding: 0 8px 5px;
1503 margin-bottom: 8px;
1504 }
1505
1506 .mxchat-popular-question {
1507 padding: 8px 12px;
1508 font-size: 13px;
1509 line-height: 20px;
1510 }
1511
1512 .mxchat-chatbot .chat-container .input-container {
1513 margin: 0 8px 8px;
1514 }
1515
1516 .mxchat-chatbot-wrapper .chatbot-footer {
1517 padding-bottom: 5px;
1518 }
1519 }
1520
1521 /* ========================================
1522 MOBILE RESPONSIVE
1523 ======================================== */
1524 @media screen and (max-width: 782px) {
1525 .mxchat-search-results {
1526 gap: 15px !important;
1527 }
1528
1529 .mxchat-search-intro {
1530 font-size: 15px !important;
1531 }
1532
1533 .mxchat-search-title {
1534 font-size: 15px !important;
1535 }
1536
1537 .mxchat-search-description {
1538 font-size: 13px !important;
1539 }
1540 }
1541
1542 @media (max-width: 550px) {
1543 .questions-toggle-btn,
1544 .questions-collapse-btn {
1545 width: 28px;
1546 height: 28px;
1547 }
1548
1549 .questions-toggle-btn svg,
1550 .questions-collapse-btn svg {
1551 width: 22px;
1552 height: 22px;
1553 }
1554
1555 .pre-chat-message {
1556 bottom: 70px;
1557 right: 15px;
1558 }
1559
1560 .chat-input {
1561 width: calc(100% - 70px);
1562 }
1563
1564 .bot-message,
1565 .user-message {
1566 padding: 10px;
1567 max-width: 95%;
1568 }
1569
1570 .floating-chatbot-button {
1571 bottom: 15px;
1572 right: 10px;
1573 }
1574
1575 .floating-chatbot {
1576 width: calc(100vw - 16px);
1577 /* Use multiple fallbacks for maximum browser compatibility */
1578 height: calc(100vh - 16px); /* Fallback */
1579 height: calc(var(--vh, 1vh) * 100 - 16px); /* JS-set custom property fallback */
1580 height: calc(100dvh - 16px); /* Modern dynamic viewport height */
1581 max-height: calc(100vh - 16px);
1582 max-height: calc(100dvh - 16px);
1583 margin: 0;
1584 padding: 0;
1585 position: fixed;
1586 bottom: 8px;
1587 top: auto;
1588 left: 8px;
1589 right: 8px;
1590 border-radius: 16px;
1591 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
1592 }
1593
1594 .floating-chatbot .mxchat-chatbot-wrapper {
1595 border-radius: 16px;
1596 overflow: hidden;
1597 }
1598
1599 .mxchat-chatbot-wrapper .chatbot-top-bar {
1600 border-top-left-radius: 16px;
1601 border-top-right-radius: 16px;
1602 }
1603 }
1604
1605
1606
1607 pre {
1608 background-color: #000;
1609 border: 1px solid #ddd;
1610 border-radius: 20px;
1611 border-left: 3px solid #9e7aff;
1612 color: #fff;
1613 page-break-inside: avoid;
1614 font-family: monospace;
1615 font-size: 15px;
1616 line-height: 1.6;
1617 margin-bottom: 1.6em;
1618 max-width: 100%;
1619 overflow: auto;
1620 padding: 1em 1.5em;
1621 display: block;
1622 word-wrap: break-word;
1623 }
1624
1625 .copy-btn {
1626 padding: 10px 20px;
1627 border: none;
1628 border-radius: 4px;
1629 background-color: #9e7aff;
1630 transition: background-color 0.3s;
1631 color: #fff;
1632 font-size: 1rem;
1633 cursor: pointer;
1634 font-weight: 700;
1635 margin-bottom: 10px;
1636 }
1637
1638 .copy-btn:hover {
1639 opacity: 0.8;
1640 }
1641
1642 .mxchat-product-card {
1643 display: flex;
1644 flex-direction: column;
1645 align-items: center;
1646 margin: 10px 0;
1647 padding: 10px;
1648 border-radius: 5px;
1649 background-color: inherit;
1650 }
1651
1652 .mxchat-product-card img.mxchat-product-image {
1653 max-width: 100%;
1654 height: auto;
1655 margin-bottom: 5px;
1656 border-radius: 4px;
1657 }
1658
1659 .mxchat-product-card h3.mxchat-product-name {
1660 font-size: 16px;
1661 font-weight: bold;
1662 margin: 5px 0;
1663 text-align: center;
1664 color: inherit;
1665 }
1666
1667 .mxchat-product-card .mxchat-product-price {
1668 color: inherit;
1669 font-weight: bold;
1670 margin-bottom: 5px;
1671 }
1672
1673 .mxchat-product-card .mxchat-product-description {
1674 font-size: 14px;
1675 text-align: center;
1676 margin-bottom: 10px;
1677 color: inherit;
1678 }
1679
1680 .mxchat-product-card .mxchat-add-to-cart-button {
1681 background-color: #212121;
1682 color: #fff;
1683 padding: 8px 12px;
1684 border: none;
1685 cursor: pointer;
1686 border-radius: 12px;
1687 transition: background-color 0.3s ease;
1688 }
1689
1690 .mxchat-product-card .mxchat-add-to-cart-button:hover {
1691 background-color: #212121;
1692 }
1693
1694 .mxchat-image-gallery {
1695 display: flex;
1696 flex-wrap: wrap;
1697 gap: 10px;
1698 justify-content: center;
1699 }
1700
1701 .mxchat-image-item {
1702 text-align: center;
1703 overflow: hidden;
1704 word-wrap: break-word;
1705 }
1706
1707 .mxchat-image-title {
1708 display: block;
1709 font-size: 14px;
1710 color: inherit;
1711 white-space: nowrap;
1712 overflow: hidden;
1713 text-overflow: ellipsis;
1714 max-width: 100%;
1715 }
1716
1717 .mxchat-image-link {
1718 text-decoration: none;
1719 }
1720
1721 .mxchat-image-thumbnail {
1722 max-width: 100%;
1723 height: auto;
1724 border-radius: 5px;
1725 transition: transform 0.3s;
1726 }
1727
1728 .mxchat-image-thumbnail:hover {
1729 transform: scale(1.05);
1730 }
1731
1732 .mxchat-generated-image {
1733 max-width: 100%;
1734 height: auto;
1735 border-radius: 0 0 8px 8px;
1736 }
1737
1738 /* Consent-safe YouTube embed (click-to-load facade → nocookie iframe).
1739 Caption colors INHERIT from the message bubble (same idiom as
1740 .mxchat-product-card) so the embed reads correctly on any widget theme —
1741 bot bubbles commonly force their own text color. */
1742 .mxchat-youtube-embed {
1743 max-width: 340px;
1744 margin-top: 8px;
1745 }
1746
1747 .mxchat-youtube-facade {
1748 position: relative;
1749 display: block;
1750 width: 100%;
1751 padding: 0;
1752 margin: 0;
1753 border: none;
1754 background: #000;
1755 cursor: pointer;
1756 aspect-ratio: 16 / 9;
1757 border-radius: 10px;
1758 overflow: hidden;
1759 box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
1760 }
1761
1762 .mxchat-youtube-thumb {
1763 width: 100%;
1764 height: 100%;
1765 object-fit: cover;
1766 display: block;
1767 opacity: 0.92;
1768 transition: opacity 0.2s;
1769 }
1770
1771 .mxchat-youtube-facade:hover .mxchat-youtube-thumb {
1772 opacity: 1;
1773 }
1774
1775 .mxchat-youtube-play {
1776 position: absolute;
1777 top: 50%;
1778 left: 50%;
1779 transform: translate(-50%, -50%);
1780 display: flex;
1781 align-items: center;
1782 justify-content: center;
1783 width: 52px;
1784 height: 52px;
1785 border-radius: 50%;
1786 background: rgba(0, 0, 0, 0.72);
1787 color: #fff;
1788 transition: transform 0.2s, background 0.2s;
1789 }
1790
1791 .mxchat-youtube-play svg {
1792 margin-left: 3px;
1793 }
1794
1795 .mxchat-youtube-facade:hover .mxchat-youtube-play {
1796 transform: translate(-50%, -50%) scale(1.08);
1797 background: rgba(0, 0, 0, 0.85);
1798 }
1799
1800 .mxchat-youtube-iframe {
1801 width: 100%;
1802 aspect-ratio: 16 / 9;
1803 border: none;
1804 display: block;
1805 border-radius: 10px;
1806 box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
1807 }
1808
1809 .mxchat-youtube-caption {
1810 display: flex;
1811 align-items: baseline;
1812 justify-content: space-between;
1813 gap: 10px;
1814 padding: 8px 2px 0;
1815 background: transparent;
1816 color: inherit;
1817 }
1818
1819 .mxchat-youtube-title {
1820 font-size: 13px;
1821 font-weight: 600;
1822 color: inherit;
1823 overflow: hidden;
1824 white-space: nowrap;
1825 text-overflow: ellipsis;
1826 }
1827
1828 .mxchat-youtube-link {
1829 font-size: 12px;
1830 white-space: nowrap;
1831 color: inherit;
1832 opacity: 0.85;
1833 text-decoration: underline;
1834 }
1835
1836 #widget_icon, #widget_icon_2, #widget_icon_3, #widget_icon_5, #widget_icon_4, #widget_icon_6, #widget_icon_7 {
1837 padding: 10px;
1838 }
1839
1840 #widget_icon_10 {
1841 fill: #fff;
1842 }
1843
1844
1845 /* This selector with more context - showing the collapse button in certain states */
1846 .mxchat-popular-questions .mxchat-popular-questions-container .questions-collapse-btn {
1847 background: none;
1848 border: none;
1849 padding: 0;
1850 margin: 0px;
1851 cursor: pointer;
1852 transition: all 0.2s ease;
1853 color: #212121;
1854 display: none; /* Hidden by default */
1855 align-items: center;
1856 justify-content: center;
1857 width: 32px;
1858 height: 32px;
1859 box-shadow: none;
1860 outline: none;
1861 align-self: center; /* THIS IS MISSING */
1862 order: -1; /* THIS IS MISSING */
1863 }
1864
1865 /* ALL hover states - these are MISSING from your new CSS */
1866 .mxchat-popular-questions .mxchat-popular-questions-container .questions-collapse-btn:hover {
1867 background: none;
1868 border: none;
1869 box-shadow: none;
1870 }
1871
1872 .mxchat-popular-questions .mxchat-popular-questions-container .questions-collapse-btn:focus {
1873 outline: none;
1874 background: none;
1875 border: none;
1876 box-shadow: none;
1877 }
1878
1879 .mxchat-popular-questions .mxchat-popular-questions-container .questions-collapse-btn:active {
1880 background: none;
1881 border: none;
1882 box-shadow: none;
1883 }
1884
1885 /* SVG styles - these are MISSING */
1886 .mxchat-popular-questions .mxchat-popular-questions-container .questions-collapse-btn svg {
1887 fill: none;
1888 stroke: #212121;
1889 transition: transform 0.2s ease;
1890 width: 25px;
1891 height: 25px;
1892 }
1893
1894 .mxchat-popular-questions .mxchat-popular-questions-container .questions-collapse-btn:hover svg {
1895 opacity: 0.7;
1896 }
1897
1898 /* THE CRITICAL DISPLAY RULE - this shows when it's been collapsed before */
1899 .mxchat-popular-questions.has-been-collapsed .mxchat-popular-questions-container .questions-collapse-btn {
1900 display: flex;
1901 }
1902
1903 /* Hide when actually collapsed */
1904 .mxchat-popular-questions.collapsed .mxchat-popular-questions-container .questions-collapse-btn {
1905 display: none;
1906 }
1907
1908 /* ============================================================
1909 Header overflow menu — 3-dot kebab + dropdown (v3.2.9 / v3.2.10)
1910 Lives in .chatbot-top-bar to the LEFT of .exit-chat. Visual treatment
1911 mirrors .exit-chat: transparent, white-on-dark, 0.8 opacity, 5px pad.
1912
1913 v3.2.10: explicit `order` rules pin the visual order
1914 title (0) | kebab (1) | down-arrow (2)
1915 so the down-arrow is always the rightmost icon regardless of source
1916 order or which sibling has margin-left:auto.
1917 ============================================================ */
1918 .mxchat-chatbot-wrapper .chatbot-top-bar > .chatbot-title-container { order: 0; }
1919 .mxchat-chatbot-wrapper .chatbot-top-bar > .mxchat-header-menu-wrap { order: 1; }
1920 .mxchat-chatbot-wrapper .chatbot-top-bar > .exit-chat { order: 2; }
1921
1922 .mxchat-header-menu-wrap {
1923 position: relative;
1924 display: inline-flex;
1925 align-items: center;
1926 margin-left: auto; /* push kebab + arrow group to the right edge */
1927 }
1928 .mxchat-chatbot-wrapper .chatbot-top-bar .mxchat-header-menu-wrap ~ .exit-chat,
1929 .mxchat-chatbot-wrapper .chatbot-top-bar .mxchat-header-menu-wrap + .exit-chat {
1930 margin-left: 4px; /* even, snug gap between kebab and close */
1931 }
1932 .mxchat-chatbot-wrapper .chatbot-top-bar > .exit-chat:focus {
1933 background: rgba(255, 255, 255, 0.12);
1934 opacity: 1;
1935 outline: none;
1936 }
1937 /* v3.2.15 (plan-52fd4c): kebab rules scoped under the wrapper + explicit
1938 guards on every property a theme's button/link rules commonly set
1939 (font-family, margin, appearance, text-transform, background-image),
1940 after a customer site's theme visibly mangled the dropdown. */
1941 .mxchat-chatbot-wrapper .mxchat-header-btn {
1942 border: none;
1943 background: transparent;
1944 background-image: none;
1945 cursor: pointer;
1946 display: inline-flex;
1947 align-items: center;
1948 justify-content: center;
1949 padding: 0;
1950 margin: 0;
1951 opacity: 0.8;
1952 color: #fff;
1953 font-family: inherit;
1954 text-transform: none;
1955 text-shadow: none;
1956 appearance: none;
1957 -webkit-appearance: none;
1958 transition: opacity 0.15s ease, background 0.15s ease;
1959 border-radius: 6px;
1960 line-height: 0;
1961 width: 32px;
1962 height: 32px;
1963 min-width: 32px;
1964 min-height: 32px;
1965 max-width: none;
1966 flex: 0 0 auto;
1967 }
1968 .mxchat-chatbot-wrapper .mxchat-header-btn:hover,
1969 .mxchat-chatbot-wrapper .mxchat-header-btn:focus {
1970 opacity: 1;
1971 background: rgba(255, 255, 255, 0.12);
1972 outline: none;
1973 }
1974 .mxchat-chatbot-wrapper .mxchat-header-btn[aria-expanded="true"] {
1975 opacity: 1;
1976 background: rgba(255, 255, 255, 0.12);
1977 }
1978 .mxchat-chatbot-wrapper .mxchat-menu-trigger svg {
1979 width: 18px;
1980 height: 18px;
1981 }
1982
1983 .mxchat-chatbot-wrapper .mxchat-header-menu {
1984 position: absolute;
1985 top: calc(100% + 6px);
1986 right: 0;
1987 min-width: 220px;
1988 margin: 0;
1989 background: var(--mxchat-menu-bg, #ffffff);
1990 color: var(--mxchat-menu-fg, #1a1a1a);
1991 border: 1px solid rgba(127, 127, 127, 0.20);
1992 border-radius: 10px;
1993 box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18), 0 2px 6px rgba(0, 0, 0, 0.10);
1994 padding: 4px;
1995 font-family: inherit;
1996 z-index: 99;
1997 opacity: 0;
1998 transform: translateY(-4px);
1999 pointer-events: none;
2000 transition: opacity 0.12s ease, transform 0.12s ease;
2001 }
2002 .mxchat-chatbot-wrapper .mxchat-header-menu.is-open {
2003 opacity: 1;
2004 transform: translateY(0);
2005 pointer-events: auto;
2006 }
2007 .mxchat-chatbot-wrapper .mxchat-header-menu[hidden] {
2008 display: none;
2009 }
2010 .mxchat-chatbot-wrapper .mxchat-menu-item {
2011 display: flex;
2012 align-items: center;
2013 gap: 10px;
2014 width: 100%;
2015 padding: 8px 12px;
2016 margin: 0;
2017 min-height: 40px;
2018 border: none;
2019 background: transparent;
2020 background-image: none;
2021 color: inherit;
2022 font-family: inherit;
2023 font-size: 14px;
2024 line-height: 1.3;
2025 letter-spacing: normal;
2026 text-align: left;
2027 text-transform: none;
2028 text-shadow: none;
2029 white-space: nowrap;
2030 appearance: none;
2031 -webkit-appearance: none;
2032 cursor: pointer;
2033 border-radius: 6px;
2034 transition: background 0.12s ease;
2035 text-decoration: none;
2036 box-sizing: border-box;
2037 }
2038 .mxchat-chatbot-wrapper .mxchat-menu-item:hover,
2039 .mxchat-chatbot-wrapper .mxchat-menu-item:focus {
2040 background: rgba(127, 127, 127, 0.18);
2041 outline: none;
2042 }
2043 .mxchat-menu-item-icon {
2044 display: inline-flex;
2045 align-items: center;
2046 justify-content: center;
2047 width: 16px;
2048 height: 16px;
2049 color: inherit;
2050 opacity: 0.85;
2051 flex-shrink: 0;
2052 }
2053 .mxchat-menu-item-icon svg {
2054 width: 16px;
2055 height: 16px;
2056 display: block;
2057 }
2058 .mxchat-menu-item-label {
2059 flex: 1;
2060 color: inherit;
2061 }
2062
2063 /* RTL — flip the dropdown anchor edge */
2064 [dir="rtl"] .mxchat-header-menu,
2065 .mxchat-chatbot-wrapper[dir="rtl"] .mxchat-header-menu {
2066 right: auto;
2067 left: 0;
2068 }
2069
2070 /* ============================================================================
2071 Satisfaction rating (v3.2.6 — polished per plan-141a12)
2072 Theme-adaptive via currentColor + inherit. Clean slate — old rules removed.
2073 ========================================================================= */
2074 .mxchat-chatbot .chat-container .chat-box .mxchat-rating-prompt,
2075 .mxchat-chatbot .chat-container .chat-box .mxchat-rating-feedback,
2076 .mxchat-chatbot .chat-container .chat-box .mxchat-rating-saved {
2077 clear: both;
2078 float: left;
2079 max-width: 92%;
2080 box-sizing: border-box;
2081 }
2082
2083 /* Theme-adaptive wrapper — .bot-message carries the user's custom bg/color via
2084 inline style; the inner rating component supplies its own padding + layout. */
2085 .mxchat-rating-bot-bubble {
2086 padding: 0;
2087 overflow: visible;
2088 }
2089
2090 .mxchat-rating-prompt {
2091 display: flex;
2092 flex-direction: column;
2093 align-items: stretch;
2094 gap: 10px;
2095 padding: 10px 14px;
2096 margin: 10px 0;
2097 font-size: 14px;
2098 color: inherit;
2099 }
2100
2101 .mxchat-rating-question {
2102 color: inherit;
2103 opacity: 0.85;
2104 font-weight: 500;
2105 }
2106
2107 .mxchat-rating-actions {
2108 display: flex;
2109 align-items: center;
2110 gap: 8px;
2111 }
2112
2113 .mxchat-rating-buttons {
2114 display: inline-flex;
2115 gap: 6px;
2116 }
2117
2118 .mxchat-rating-btn {
2119 display: inline-flex;
2120 align-items: center;
2121 justify-content: center;
2122 width: 32px;
2123 height: 32px;
2124 border-radius: 8px;
2125 background: transparent;
2126 border: none;
2127 color: inherit;
2128 opacity: 0.6;
2129 cursor: pointer;
2130 transition: opacity 0.18s ease, transform 0.18s ease, background-color 0.18s ease, color 0.18s ease;
2131 padding: 0;
2132 }
2133
2134 .mxchat-rating-btn:hover {
2135 opacity: 1;
2136 transform: scale(1.12);
2137 background: rgba(255, 255, 255, 0.08);
2138 }
2139
2140 .mxchat-rating-btn:focus-visible {
2141 opacity: 1;
2142 outline: 2px solid currentColor;
2143 outline-offset: 2px;
2144 }
2145
2146 .mxchat-rating-btn svg {
2147 pointer-events: none;
2148 }
2149
2150 .mxchat-rating-dismiss {
2151 width: 24px;
2152 height: 24px;
2153 border-radius: 6px;
2154 background: transparent;
2155 border: none;
2156 color: inherit;
2157 opacity: 0.45;
2158 cursor: pointer;
2159 font-size: 18px;
2160 line-height: 1;
2161 transition: opacity 0.18s ease, background-color 0.18s ease;
2162 }
2163
2164 .mxchat-rating-dismiss:hover {
2165 opacity: 0.9;
2166 background: rgba(255, 255, 255, 0.08);
2167 }
2168
2169 /* Feedback panel that replaces the prompt after a rating is clicked */
2170 .mxchat-rating-feedback {
2171 padding: 12px 14px;
2172 margin: 10px 0;
2173 display: flex;
2174 flex-direction: column;
2175 gap: 10px;
2176 color: inherit;
2177 animation: mxchat-rating-fade-in 0.22s ease;
2178 }
2179
2180 .mxchat-rating-feedback-label {
2181 font-size: 13px;
2182 opacity: 0.85;
2183 font-weight: 500;
2184 }
2185
2186 .mxchat-rating-feedback-input {
2187 width: 100%;
2188 box-sizing: border-box;
2189 padding: 8px 10px;
2190 border: 1px solid rgba(255, 255, 255, 0.25);
2191 border-radius: 8px;
2192 font-size: 14px;
2193 font-family: inherit;
2194 resize: vertical;
2195 background: rgba(255, 255, 255, 0.08);
2196 color: inherit;
2197 }
2198
2199 .mxchat-rating-feedback-input:focus {
2200 outline: none;
2201 border-color: rgba(255, 255, 255, 0.45);
2202 background: rgba(255, 255, 255, 0.15);
2203 }
2204
2205 .mxchat-rating-feedback-actions {
2206 display: flex;
2207 justify-content: flex-end;
2208 gap: 8px;
2209 }
2210
2211 .mxchat-rating-skip,
2212 .mxchat-rating-submit {
2213 padding: 6px 14px;
2214 border-radius: 8px;
2215 font-size: 13px;
2216 font-weight: 500;
2217 cursor: pointer;
2218 border: none;
2219 transition: opacity 0.18s ease, transform 0.18s ease, background-color 0.18s ease;
2220 }
2221
2222 .mxchat-rating-skip {
2223 background: transparent;
2224 color: inherit;
2225 opacity: 0.6;
2226 }
2227
2228 .mxchat-rating-skip:hover {
2229 opacity: 1;
2230 background: rgba(255, 255, 255, 0.08);
2231 }
2232
2233 .mxchat-rating-submit {
2234 /* Filled "primary" pill: fill = the bot font color, label = the bubble bg.
2235 syncRatingBubbleColors() in chat-script.js paints the real bot colors
2236 straight onto this button (inline) from the bubble's COMPUTED style, so
2237 it adapts to both the inline color pickers AND the mxchat-theme AI
2238 customizer. These var()/literal values are the no-JS safety net — the
2239 literal fallbacks (#212121 fill / #ffffff label) stay legible on their
2240 own (no white-on-white). Longhand background-color (not the `background`
2241 shorthand) because Chromium resolves inherited custom properties
2242 unreliably inside the shorthand. Do NOT use currentColor here — setting
2243 `color` would re-poison the background to the same value. */
2244 background-color: var(--mxchat-bot-fg, #212121);
2245 color: var(--mxchat-bot-bg, #ffffff);
2246 }
2247
2248 .mxchat-rating-submit:hover {
2249 transform: translateY(-1px);
2250 opacity: 0.9;
2251 }
2252
2253 .mxchat-rating-saved {
2254 padding: 10px 14px;
2255 margin: 10px 0;
2256 font-size: 13px;
2257 font-weight: 500;
2258 text-align: center;
2259 color: inherit;
2260 animation: mxchat-rating-fade-in 0.22s ease;
2261 }
2262
2263 @keyframes mxchat-rating-fade-in {
2264 from { opacity: 0; transform: translateY(4px); }
2265 to { opacity: 1; transform: translateY(0); }
2266 }