PluginProbe
MxChat – AI Chatbot & Content Generation for WordPress / 3.2.25
MxChat – AI Chatbot & Content Generation for WordPress v3.2.25
3.2.25 3.2.24 3.2.23 3.2.22 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 All 156 releases
mxchat-basic / css / chat-style.css

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

2,259 lines 55.3 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 /* This stylesheet loads on every page where the widget shows, so generic class names must
788 stay inside MxChat's own containers: a bare .invisible hit the site's own elements (and
789 Bootstrap / Tailwind give that class the opposite meaning, visibility hidden with the layout
790 kept). :where() keeps the specificity of the bare class. */
791 :where(.floating-chatbot, .mxchat-chatbot-wrapper) .invisible {
792 display: none;
793 opacity: 0;
794 pointer-events: none;
795 }
796
797 .mxchat-chatbot{
798 background: #fff;
799 overflow: hidden;
800 position: relative;
801 display: flex;
802 flex-direction: column;
803 flex-grow: 1;
804 min-height: 0; /* Allow flex shrinking */
805 box-sizing: border-box;
806 }
807
808 .chat-container {
809 display: flex;
810 flex-direction: column;
811 flex-grow: 1;
812 min-height: 0; /* Critical for flex overflow scrolling */
813 height: 100%;
814 }
815
816 .chat-box {
817 flex-grow: 1;
818 overflow-y: auto;
819 padding: 10px;
820 margin-bottom: 0;
821 font-size: 1rem;
822 min-height: 0; /* Critical for flex overflow scrolling */
823 }
824
825 .chat-box::-webkit-scrollbar {
826 width: 5px;
827 }
828
829 .chat-box::-webkit-scrollbar-thumb {
830 background-color: #212121;
831 border-radius: 20px;
832 }
833
834 .bot-message,
835 .user-message {
836 margin-bottom: 15px;
837 padding: 10px;
838 display: inline-block;
839 max-width: 85%;
840 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
841 font-size: 14px;
842 line-height: 24px;
843 }
844
845 .user-message {
846 background: #fff;
847 color: #212121;
848 text-align: left;
849 float: right;
850 clear: both;
851 border-radius: 18px 0 18px 18px;
852 word-wrap: break-word;
853 border: 1px solid rgba(226, 232, 255, 0.2);
854 }
855
856 .user-message p {
857 margin: 0;
858 }
859
860 .mxchat-chatbot .chat-container .chat-box .bot-message {
861 float: left;
862 clear: both;
863 border: 1px solid rgba(226, 232, 255, 0.2);
864 border-radius: 0 18px 18px;
865 background: #212121;
866 color: #fff;
867 overflow-x: hidden;
868 }
869
870 .mxchat-chatbot .chat-container .chat-box .agent-message {
871 text-align: left;
872 float: left;
873 clear: both;
874 border: 1px solid rgba(226, 232, 255, 0.2);
875 border-radius: 0 18px 18px;
876 background: #212121;
877 color: #fff;
878 overflow-x: hidden;
879 margin-bottom: 15px;
880 padding: 10px;
881 display: inline-block;
882 max-width: 85%;
883 font-size: 14px;
884 line-height: 24px;
885 box-shadow: -2px 2px rgba(250, 115, 230, 0.6), -4px 4px rgba(120, 115, 245, 0.6);
886 }
887
888 .bot-message p {
889 margin: 0 0 1em 0;
890 }
891
892 .bot-message p:last-child {
893 margin-bottom: 0;
894 }
895
896 .bot-message {
897 white-space: pre-line;
898 }
899
900 .bot-message a {
901 color: #ffffff;
902 text-decoration: underline !important;
903 }
904
905 .bot-message a:hover {
906 color: #e0e0e0;
907 text-decoration: underline;
908 }
909
910 .bot-message a:visited {
911 color: #ffffff;
912 }
913
914 .system-message {
915 padding: 8px 12px;
916 margin: 8px 0;
917 background-color: rgba(120, 115, 245, 0.1);
918 border-radius: 8px;
919 color: #555;
920 font-style: italic;
921 font-size: 14px;
922 text-align: center;
923 }
924
925 .mxchat-chatbot-wrapper {
926 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
927 border-radius: 10px;
928 display: flex;
929 flex-direction: column;
930 height: 100%;
931 width: 100%;
932 min-height: 0; /* Allow flex shrinking */
933 overflow: hidden;
934 }
935
936 /* ========================================
937 INPUT & CONTROLS
938 ======================================== */
939 .mxchat-chatbot .chat-container .input-container {
940 position: relative;
941 display: flex;
942 align-items: center;
943 padding-right: 40px;
944 border: 1px solid #ccc;
945 border-radius: 10px;
946 margin: 0 10px 10px;
947 }
948
949 .mxchat-chatbot .chat-container .input-container .chat-input {
950 flex-grow: 1;
951 color: #212121;
952 line-height: 24px;
953 background: transparent;
954 margin-bottom: 0;
955 width: 100%;
956 min-height: 20px;
957 max-height: 65px;
958 resize: none;
959 overflow-y: auto;
960 font-size: 16px;
961 border: none;
962 border-radius: 5px;
963 box-sizing: border-box;
964 padding: 0.4em 0.5em;
965 outline: none;
966 border-radius: 10px;
967 }
968
969 .chat-input::-webkit-scrollbar {
970 width: 8px;
971 }
972
973 .chat-input::-webkit-scrollbar-track {
974 background: #f1f1f1;
975 border-radius: 4px;
976 }
977
978 .chat-input::-webkit-scrollbar-thumb {
979 background: linear-gradient(135deg, #fa73e6, #7873f5, #3ac9d1);
980 border-radius: 4px;
981 }
982
983 .chat-input::-webkit-scrollbar-thumb:hover {
984 background: linear-gradient(135deg, #d164ce, #6568d8, #2daeb8);
985 }
986
987 .chat-input {
988 scrollbar-width: thin;
989 scrollbar-color: linear-gradient(135deg, #fa73e6, #7873f5, #3ac9d1) #f1f1f1;
990 }
991
992 /* Chat input character counter + soft limit feedback (plan 7091a2).
993 Language-neutral: numbers + color only. Hidden until ~80% of the cap, then
994 fades in and ramps neutral -> amber -> red. The input border mirrors the same
995 cue, and an over-limit keystroke/paste triggers a brief shake so the hard
996 maxlength cap (plan a3fae2) is never a silent "input jumps back". */
997 .mxchat-chatbot .chat-container .input-container .mxchat-char-counter {
998 position: absolute;
999 bottom: 3px;
1000 right: 44px; /* clear the absolutely-positioned send button */
1001 font-size: 11px;
1002 line-height: 1;
1003 font-variant-numeric: tabular-nums;
1004 color: #9aa0a6;
1005 background: rgba(255, 255, 255, 0.85);
1006 padding: 1px 5px;
1007 border-radius: 8px;
1008 pointer-events: none;
1009 opacity: 0;
1010 visibility: hidden;
1011 transition: opacity 0.18s ease, color 0.18s ease;
1012 z-index: 2;
1013 }
1014 .mxchat-chatbot .chat-container .input-container .mxchat-char-counter.is-visible {
1015 opacity: 1;
1016 visibility: visible;
1017 }
1018 .mxchat-chatbot .chat-container .input-container .mxchat-char-counter.is-warn {
1019 color: #d98300; /* amber: approaching the cap */
1020 }
1021 .mxchat-chatbot .chat-container .input-container .mxchat-char-counter.is-full {
1022 color: #d93025; /* red: at the cap */
1023 font-weight: 600;
1024 }
1025 /* RTL widgets: counter on the opposite side. */
1026 .mxchat-chatbot[dir="rtl"] .chat-container .input-container .mxchat-char-counter,
1027 [dir="rtl"] .mxchat-chatbot .chat-container .input-container .mxchat-char-counter {
1028 right: auto;
1029 left: 44px;
1030 }
1031 /* Input border affordance mirrors the counter color. */
1032 .mxchat-chatbot .chat-container .input-container.mxchat-input-near-limit {
1033 border-color: #f0b048;
1034 }
1035 .mxchat-chatbot .chat-container .input-container.mxchat-input-at-limit {
1036 border-color: #e5675c;
1037 }
1038 /* Soft "you hit the edge" bump when an over-limit keystroke/paste is rejected. */
1039 .mxchat-chatbot .chat-container .input-container.mxchat-input-bump {
1040 animation: mxchat-input-bump 0.2s ease;
1041 }
1042 @keyframes mxchat-input-bump {
1043 0% { transform: translateX(0); }
1044 25% { transform: translateX(-3px); }
1045 50% { transform: translateX(3px); }
1046 75% { transform: translateX(-2px); }
1047 100% { transform: translateX(0); }
1048 }
1049 /* Respect reduced-motion: drop the shake; the red border/counter still signals the cap. */
1050 @media (prefers-reduced-motion: reduce) {
1051 .mxchat-chatbot .chat-container .input-container.mxchat-input-bump {
1052 animation: none;
1053 }
1054 }
1055
1056 .mxchat-chatbot .chat-container .input-container .send-button {
1057 position: absolute;
1058 right: 10px;
1059 top: 50%;
1060 transform: translateY(-50%);
1061 border: none;
1062 border-radius: 50%;
1063 width: 30px;
1064 height: 30px;
1065 display: flex;
1066 align-items: center;
1067 justify-content: center;
1068 background: transparent !important;
1069 padding: 5px;
1070 margin: 0;
1071 transition: background-color 0.3s;
1072 color: #fff;
1073 font-size: 1rem;
1074 cursor: pointer;
1075 font-weight: 700;
1076 }
1077
1078 .send-button svg {
1079 width: 25px;
1080 height: 25px;
1081 pointer-events: none;
1082 }
1083
1084 .send-button:hover {
1085 opacity: 0.8;
1086 }
1087
1088 /* Stop state while a response is streaming: the send button becomes a Stop
1089 control in place — same chrome and position, swapped glyph. Themeable hook;
1090 the glyph's size/color are mirrored from the send icon at runtime. */
1091 .mxchat-chatbot .chat-container .input-container .send-button.mxchat-stop-mode {
1092 cursor: pointer;
1093 }
1094
1095 .mxchat-chatbot .spinner {
1096 animation: rotate 2s linear infinite;
1097 width: 20px;
1098 height: 20px;
1099 }
1100
1101 .mxchat-chatbot .spinner circle {
1102 stroke: #212121;
1103 stroke-linecap: round;
1104 animation: dash 1.5s ease-in-out infinite;
1105 }
1106
1107 @keyframes rotate {
1108 100% {
1109 transform: rotate(360deg);
1110 }
1111 }
1112
1113 @keyframes dash {
1114 0% {
1115 stroke-dasharray: 1, 150;
1116 stroke-dashoffset: 0;
1117 }
1118 50% {
1119 stroke-dasharray: 90, 150;
1120 stroke-dashoffset: -35;
1121 }
1122 100% {
1123 stroke-dasharray: 90, 150;
1124 stroke-dashoffset: -124;
1125 }
1126 }
1127
1128 /* ========================================
1129 FLOATING CHATBOT & CONTROLS
1130 ======================================== */
1131 .chatbot-title-container {
1132 display: flex;
1133 align-items: center;
1134 justify-content: space-between;
1135 gap: 10px;
1136 flex: 1 1 auto;
1137 min-width: 0;
1138 }
1139
1140 .chatbot-title-group {
1141 display: flex;
1142 align-items: center;
1143 gap: 8px;
1144 }
1145
1146 .chat-mode-indicator {
1147 font-size: 12px;
1148 line-height: 1;
1149 margin-right: 0;
1150 padding: 4px 9px;
1151 border-radius: 999px;
1152 background: rgba(255, 255, 255, 0.18);
1153 color: #ffffff;
1154 display: inline-flex;
1155 align-items: center;
1156 height: 22px;
1157 white-space: nowrap;
1158 flex: 0 0 auto;
1159 }
1160
1161 .floating-chatbot {
1162 position: fixed;
1163 bottom: 25px;
1164 right: 25px;
1165 width: 375px;
1166 /* Use viewport-aware height with fallbacks */
1167 height: min(625px, calc(100vh - 50px)); /* 50px = 25px top + 25px bottom margin */
1168 height: min(625px, calc(100dvh - 50px)); /* Dynamic viewport height for mobile browsers */
1169 max-height: calc(100vh - 50px);
1170 max-height: calc(100dvh - 50px); /* Fallback for browsers supporting dvh */
1171 box-shadow: 0 0 10px rgba(0, 0, 0, 0.25);
1172 border-radius: 20px;
1173 overflow: hidden;
1174 display: flex;
1175 flex-direction: column;
1176 z-index: 100000;
1177 transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;
1178 transform: translateY(20%);
1179 opacity: 0;
1180 pointer-events: none;
1181 }
1182
1183 .floating-chatbot.visible {
1184 transform: translateY(0);
1185 opacity: 1;
1186 pointer-events: auto;
1187 }
1188
1189 /* ========================================
1190 EMBEDDED CHATBOT (Shortcode)
1191 ======================================== */
1192 /* Embedded chatbots are NOT inside .floating-chatbot wrapper */
1193 /* Apply fixed height like floating widget so quick questions overlay properly */
1194 .mxchat-chatbot-wrapper:not(.floating-chatbot .mxchat-chatbot-wrapper) {
1195 height: 500px;
1196 max-height: 500px;
1197 }
1198
1199 /* Hide the minimize/exit button for embedded chatbots - it doesn't make sense */
1200 .mxchat-chatbot-wrapper:not(.floating-chatbot .mxchat-chatbot-wrapper) .exit-chat {
1201 display: none !important;
1202 }
1203
1204 .floating-chatbot-button.hidden,
1205 .exit-chat span {
1206 display: none !important;
1207 }
1208
1209 .chatbot-top-bar button.exit-chat:hover {
1210 background: rgba(255, 255, 255, 0.12);
1211 }
1212 /* The floating window is the only element MxChat toggles .visible on (core, the Trigger
1213 and Multi-Bot add-ons and MxChat Anywhere all use .floating-chatbot). Unscoped, this turned
1214 any site element with class "visible" into a flex container. */
1215 :where(.floating-chatbot).visible {
1216 display: flex;
1217 }
1218
1219 .floating-chatbot-button {
1220 transition: opacity 1s ease-in-out;
1221 font-size: 1.25rem;
1222 position: fixed;
1223 bottom: 30px;
1224 right: 25px;
1225 background-color: #212121;
1226 color: #fff;
1227 width: 60px;
1228 height: 60px;
1229 border-radius: 50%;
1230 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2) !important;
1231 justify-content: center;
1232 align-items: center;
1233 cursor: pointer;
1234 transition: 0.3s;
1235 z-index: 100000;
1236 display: flex;
1237 }
1238
1239 .floating-chatbot-button:focus-visible {
1240 outline: 3px solid #7873f5;
1241 outline-offset: 3px;
1242 }
1243
1244 .floating-chatbot-button img {
1245 max-width: 100%;
1246 max-height: 100%;
1247 width: auto;
1248 height: auto;
1249 }
1250
1251 .chatbot-top-bar {
1252 background: #212121;
1253 }
1254
1255 .mxchat-chatbot-wrapper .chatbot-top-bar button.exit-chat {
1256 background: transparent;
1257 /* v3.2.15 (plan-52fd4c): explicit guards against host-theme button rules.
1258 Margin deliberately untouched — .exit-chat relies on margin-left:auto. */
1259 background-image: none;
1260 border: none;
1261 opacity: 0.8;
1262 padding: 0;
1263 width: 32px;
1264 height: 32px;
1265 min-width: 32px;
1266 min-height: 32px;
1267 max-width: none;
1268 flex: 0 0 auto;
1269 border-radius: 6px;
1270 font-family: inherit;
1271 text-transform: none;
1272 text-shadow: none;
1273 appearance: none;
1274 -webkit-appearance: none;
1275 transition: opacity 0.15s ease, background 0.15s ease;
1276 }
1277
1278 .mxchat-chatbot-wrapper .chatbot-top-bar {
1279 cursor: pointer;
1280 color: #fff;
1281 padding: 8px 12px;
1282 min-height: 48px;
1283 gap: 8px;
1284 border-top-left-radius: 10px;
1285 border-top-right-radius: 10px;
1286 display: flex;
1287 justify-content: space-between;
1288 align-items: center;
1289 }
1290
1291 .mxchat-chatbot-wrapper .chatbot-top-bar .chatbot-title {
1292 font-size: 15px;
1293 line-height: 1.2;
1294 padding: 0;
1295 margin: 0;
1296 font-family: 'Plus Jakarta Sans', sans-serif;
1297 font-weight: 600;
1298 }
1299
1300 .exit-chat {
1301 border: none;
1302 background: transparent;
1303 cursor: pointer;
1304 display: inline-flex;
1305 align-items: center;
1306 justify-content: center;
1307 padding: 0;
1308 margin-left: auto;
1309 opacity: 0.8;
1310 width: 32px;
1311 height: 32px;
1312 min-width: 32px;
1313 flex: 0 0 auto;
1314 }
1315
1316 .exit-chat svg {
1317 width: 18px;
1318 height: 18px;
1319 fill: none;
1320 stroke: currentColor;
1321 }
1322
1323 .mxchat-chatbot-wrapper .chatbot-footer {
1324 text-align: center;
1325 padding-bottom: 10px;
1326 font-size: 0.85em;
1327 }
1328
1329 .mxchat-chatbot-wrapper .chatbot-footer .privacy-notice {
1330 font-size: 12px;
1331 margin: 0;
1332 color: #71717a;
1333 }
1334
1335 .mxchat-chatbot-wrapper .chatbot-footer .privacy-notice a {
1336 color: #0073aa;
1337 text-decoration: underline;
1338 font-size: 12px;
1339 }
1340
1341 .mxchat-chatbot-wrapper .chatbot-footer .powered-by {
1342 text-decoration: none;
1343 color: inherit;
1344 font-weight: 700;
1345 }
1346
1347 .mxchat-chatbot-wrapper .chatbot-footer .powered-by span {
1348 text-decoration: underline;
1349 }
1350
1351 /* ========================================
1352 INIT LOADER (shown while chat initializes)
1353 ======================================== */
1354 .mxchat-init-loader {
1355 display: flex;
1356 align-items: center;
1357 justify-content: center;
1358 flex-grow: 1;
1359 min-height: 0;
1360 animation: fadeIn 0.3s ease-in-out;
1361 }
1362
1363 .mxchat-init-loader-dots {
1364 display: flex;
1365 gap: 8px;
1366 }
1367
1368 .mxchat-init-loader-dots .dot {
1369 width: 8px;
1370 height: 8px;
1371 border-radius: 50%;
1372 background-color: #888;
1373 animation: mxchat-dot-bounce 1.4s ease-in-out infinite both;
1374 }
1375
1376 .mxchat-init-loader-dots .dot:nth-child(1) {
1377 animation-delay: -0.32s;
1378 }
1379
1380 .mxchat-init-loader-dots .dot:nth-child(2) {
1381 animation-delay: -0.16s;
1382 }
1383
1384 /* ========================================
1385 THINKING DOTS ANIMATION
1386 ======================================== */
1387 .chat-box .bot-message.temporary-message .thinking-dots-container {
1388 display: flex;
1389 justify-content: center;
1390 align-items: center;
1391 overflow: hidden;
1392 height: 20px;
1393 position: relative;
1394 z-index: 1;
1395 flex-shrink: 0;
1396 }
1397
1398 .chat-box .bot-message.temporary-message .thinking-dots {
1399 display: flex;
1400 justify-content: center;
1401 align-items: center;
1402 height: 90%;
1403 gap: 5px;
1404 flex-shrink: 0;
1405 }
1406
1407 .chat-box .bot-message.temporary-message .thinking-dots .dot {
1408 height: 6px;
1409 width: 6px;
1410 margin: 0 3px;
1411 background-color: #fff;
1412 border-radius: 50%;
1413 display: inline-block;
1414 animation: mxchat-dot-bounce 1.4s ease-in-out infinite both;
1415 vertical-align: middle;
1416 }
1417
1418 .chat-box .bot-message.temporary-message .thinking-dots .dot:first-child {
1419 animation-delay: -0.32s;
1420 }
1421
1422 .chat-box .bot-message.temporary-message .thinking-dots .dot:nth-child(2) {
1423 animation-delay: -0.16s;
1424 }
1425
1426 @keyframes mxchat-dot-bounce {
1427 0%, 100%, 80% {
1428 transform: scale(1);
1429 }
1430 40% {
1431 transform: scale(1.5);
1432 }
1433 }
1434
1435 /* ========================================
1436 PRE-CHAT MESSAGE
1437 ======================================== */
1438 .pre-chat-message {
1439 position: fixed;
1440 bottom: 85px;
1441 right: 30px;
1442 background-color: #fff;
1443 color: #212121;
1444 padding: 10px;
1445 box-shadow: 0px 0px 10px rgba(150, 150, 150, 0.3);
1446 border-radius: 5px;
1447 z-index: 1000;
1448 cursor: pointer;
1449 max-width: 325px;
1450 font-size: 14px;
1451 display: none;
1452 margin-bottom: 10px;
1453 }
1454
1455 .pre-chat-message .close-pre-chat-message {
1456 position: absolute;
1457 top: -6px;
1458 right: -6px;
1459 background-color: #ccc;
1460 border: none;
1461 color: #212121;
1462 font-size: 14px;
1463 cursor: pointer;
1464 border-radius: 50%;
1465 width: 20px;
1466 min-width: 20px;
1467 min-height: 20px;
1468 height: 20px;
1469 display: flex;
1470 align-items: center;
1471 justify-content: center;
1472 padding: 0;
1473 line-height: 1;
1474 }
1475
1476 /* ========================================
1477 VIEWPORT HEIGHT CONSTRAINTS
1478 Handles bookmarks bar, browser zoom, and smaller screens
1479 ======================================== */
1480 @media screen and (max-height: 700px) {
1481 .floating-chatbot {
1482 bottom: 15px;
1483 height: calc(100vh - 30px);
1484 height: calc(100dvh - 30px);
1485 max-height: calc(100vh - 30px);
1486 max-height: calc(100dvh - 30px);
1487 }
1488
1489 .floating-chatbot-button {
1490 bottom: 20px;
1491 }
1492
1493 .pre-chat-message {
1494 bottom: 75px;
1495 }
1496 }
1497
1498 @media screen and (max-height: 550px) {
1499 .floating-chatbot {
1500 bottom: 10px;
1501 height: calc(100vh - 20px);
1502 height: calc(100dvh - 20px);
1503 max-height: calc(100vh - 20px);
1504 max-height: calc(100dvh - 20px);
1505 }
1506
1507 /* Reduce padding in tight spaces */
1508 .mxchat-popular-questions {
1509 padding: 0 8px 5px;
1510 margin-bottom: 8px;
1511 }
1512
1513 .mxchat-popular-question {
1514 padding: 8px 12px;
1515 font-size: 13px;
1516 line-height: 20px;
1517 }
1518
1519 .mxchat-chatbot .chat-container .input-container {
1520 margin: 0 8px 8px;
1521 }
1522
1523 .mxchat-chatbot-wrapper .chatbot-footer {
1524 padding-bottom: 5px;
1525 }
1526 }
1527
1528 /* ========================================
1529 MOBILE RESPONSIVE
1530 ======================================== */
1531 @media screen and (max-width: 782px) {
1532 .mxchat-search-results {
1533 gap: 15px !important;
1534 }
1535
1536 .mxchat-search-intro {
1537 font-size: 15px !important;
1538 }
1539
1540 .mxchat-search-title {
1541 font-size: 15px !important;
1542 }
1543
1544 .mxchat-search-description {
1545 font-size: 13px !important;
1546 }
1547 }
1548
1549 @media (max-width: 550px) {
1550 .questions-toggle-btn,
1551 .questions-collapse-btn {
1552 width: 28px;
1553 height: 28px;
1554 }
1555
1556 .questions-toggle-btn svg,
1557 .questions-collapse-btn svg {
1558 width: 22px;
1559 height: 22px;
1560 }
1561
1562 .pre-chat-message {
1563 bottom: 70px;
1564 right: 15px;
1565 }
1566
1567 .chat-input {
1568 width: calc(100% - 70px);
1569 }
1570
1571 .bot-message,
1572 .user-message {
1573 padding: 10px;
1574 max-width: 95%;
1575 }
1576
1577 .floating-chatbot-button {
1578 bottom: 15px;
1579 right: 10px;
1580 }
1581
1582 .floating-chatbot {
1583 width: calc(100vw - 16px);
1584 /* Use multiple fallbacks for maximum browser compatibility */
1585 height: calc(100vh - 16px); /* Fallback */
1586 height: calc(var(--vh, 1vh) * 100 - 16px); /* JS-set custom property fallback */
1587 height: calc(100dvh - 16px); /* Modern dynamic viewport height */
1588 max-height: calc(100vh - 16px);
1589 max-height: calc(100dvh - 16px);
1590 margin: 0;
1591 padding: 0;
1592 position: fixed;
1593 bottom: 8px;
1594 top: auto;
1595 left: 8px;
1596 right: 8px;
1597 border-radius: 16px;
1598 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
1599 }
1600
1601 .floating-chatbot .mxchat-chatbot-wrapper {
1602 border-radius: 16px;
1603 overflow: hidden;
1604 }
1605
1606 .mxchat-chatbot-wrapper .chatbot-top-bar {
1607 border-top-left-radius: 16px;
1608 border-top-right-radius: 16px;
1609 }
1610 }
1611
1612
1613
1614 /* Code blocks inside the chat only (a bare pre turned every code sample on the site black with
1615 white text). :where() keeps the specificity of the bare element selector, so .mxchat-code-block
1616 still wins where it sets a property and the look inside the chat is unchanged. */
1617 :where(.mxchat-chatbot-wrapper) pre {
1618 background-color: #000;
1619 border: 1px solid #ddd;
1620 border-radius: 20px;
1621 border-left: 3px solid #9e7aff;
1622 color: #fff;
1623 page-break-inside: avoid;
1624 font-family: monospace;
1625 font-size: 15px;
1626 line-height: 1.6;
1627 margin-bottom: 1.6em;
1628 max-width: 100%;
1629 overflow: auto;
1630 padding: 1em 1.5em;
1631 display: block;
1632 word-wrap: break-word;
1633 }
1634
1635 .mxchat-product-card {
1636 display: flex;
1637 flex-direction: column;
1638 align-items: center;
1639 margin: 10px 0;
1640 padding: 10px;
1641 border-radius: 5px;
1642 background-color: inherit;
1643 }
1644
1645 .mxchat-product-card img.mxchat-product-image {
1646 max-width: 100%;
1647 height: auto;
1648 margin-bottom: 5px;
1649 border-radius: 4px;
1650 }
1651
1652 .mxchat-product-card h3.mxchat-product-name {
1653 font-size: 16px;
1654 font-weight: bold;
1655 margin: 5px 0;
1656 text-align: center;
1657 color: inherit;
1658 }
1659
1660 .mxchat-product-card .mxchat-product-price {
1661 color: inherit;
1662 font-weight: bold;
1663 margin-bottom: 5px;
1664 }
1665
1666 .mxchat-product-card .mxchat-product-description {
1667 font-size: 14px;
1668 text-align: center;
1669 margin-bottom: 10px;
1670 color: inherit;
1671 }
1672
1673 .mxchat-product-card .mxchat-add-to-cart-button {
1674 background-color: #212121;
1675 color: #fff;
1676 padding: 8px 12px;
1677 border: none;
1678 cursor: pointer;
1679 border-radius: 12px;
1680 transition: background-color 0.3s ease;
1681 }
1682
1683 .mxchat-product-card .mxchat-add-to-cart-button:hover {
1684 background-color: #212121;
1685 }
1686
1687 .mxchat-image-gallery {
1688 display: flex;
1689 flex-wrap: wrap;
1690 gap: 10px;
1691 justify-content: center;
1692 }
1693
1694 .mxchat-image-item {
1695 text-align: center;
1696 overflow: hidden;
1697 word-wrap: break-word;
1698 }
1699
1700 .mxchat-image-title {
1701 display: block;
1702 font-size: 14px;
1703 color: inherit;
1704 white-space: nowrap;
1705 overflow: hidden;
1706 text-overflow: ellipsis;
1707 max-width: 100%;
1708 }
1709
1710 .mxchat-image-link {
1711 text-decoration: none;
1712 }
1713
1714 .mxchat-image-thumbnail {
1715 max-width: 100%;
1716 height: auto;
1717 border-radius: 5px;
1718 transition: transform 0.3s;
1719 }
1720
1721 .mxchat-image-thumbnail:hover {
1722 transform: scale(1.05);
1723 }
1724
1725 .mxchat-generated-image {
1726 max-width: 100%;
1727 height: auto;
1728 border-radius: 0 0 8px 8px;
1729 }
1730
1731 /* Consent-safe YouTube embed (click-to-load facade → nocookie iframe).
1732 Caption colors INHERIT from the message bubble (same idiom as
1733 .mxchat-product-card) so the embed reads correctly on any widget theme —
1734 bot bubbles commonly force their own text color. */
1735 .mxchat-youtube-embed {
1736 max-width: 340px;
1737 margin-top: 8px;
1738 }
1739
1740 .mxchat-youtube-facade {
1741 position: relative;
1742 display: block;
1743 width: 100%;
1744 padding: 0;
1745 margin: 0;
1746 border: none;
1747 background: #000;
1748 cursor: pointer;
1749 aspect-ratio: 16 / 9;
1750 border-radius: 10px;
1751 overflow: hidden;
1752 box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
1753 }
1754
1755 .mxchat-youtube-thumb {
1756 width: 100%;
1757 height: 100%;
1758 object-fit: cover;
1759 display: block;
1760 opacity: 0.92;
1761 transition: opacity 0.2s;
1762 }
1763
1764 .mxchat-youtube-facade:hover .mxchat-youtube-thumb {
1765 opacity: 1;
1766 }
1767
1768 .mxchat-youtube-play {
1769 position: absolute;
1770 top: 50%;
1771 left: 50%;
1772 transform: translate(-50%, -50%);
1773 display: flex;
1774 align-items: center;
1775 justify-content: center;
1776 width: 52px;
1777 height: 52px;
1778 border-radius: 50%;
1779 background: rgba(0, 0, 0, 0.72);
1780 color: #fff;
1781 transition: transform 0.2s, background 0.2s;
1782 }
1783
1784 .mxchat-youtube-play svg {
1785 margin-left: 3px;
1786 }
1787
1788 .mxchat-youtube-facade:hover .mxchat-youtube-play {
1789 transform: translate(-50%, -50%) scale(1.08);
1790 background: rgba(0, 0, 0, 0.85);
1791 }
1792
1793 .mxchat-youtube-iframe {
1794 width: 100%;
1795 aspect-ratio: 16 / 9;
1796 border: none;
1797 display: block;
1798 border-radius: 10px;
1799 box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
1800 }
1801
1802 .mxchat-youtube-caption {
1803 display: flex;
1804 align-items: baseline;
1805 justify-content: space-between;
1806 gap: 10px;
1807 padding: 8px 2px 0;
1808 background: transparent;
1809 color: inherit;
1810 }
1811
1812 .mxchat-youtube-title {
1813 font-size: 13px;
1814 font-weight: 600;
1815 color: inherit;
1816 overflow: hidden;
1817 white-space: nowrap;
1818 text-overflow: ellipsis;
1819 }
1820
1821 .mxchat-youtube-link {
1822 font-size: 12px;
1823 white-space: nowrap;
1824 color: inherit;
1825 opacity: 0.85;
1826 text-decoration: underline;
1827 }
1828
1829 #widget_icon, #widget_icon_2, #widget_icon_3, #widget_icon_5, #widget_icon_4, #widget_icon_6, #widget_icon_7 {
1830 padding: 10px;
1831 }
1832
1833 #widget_icon_10 {
1834 fill: #fff;
1835 }
1836
1837
1838 /* This selector with more context - showing the collapse button in certain states */
1839 .mxchat-popular-questions .mxchat-popular-questions-container .questions-collapse-btn {
1840 background: none;
1841 border: none;
1842 padding: 0;
1843 margin: 0px;
1844 cursor: pointer;
1845 transition: all 0.2s ease;
1846 color: #212121;
1847 display: none; /* Hidden by default */
1848 align-items: center;
1849 justify-content: center;
1850 width: 32px;
1851 height: 32px;
1852 box-shadow: none;
1853 outline: none;
1854 align-self: center; /* THIS IS MISSING */
1855 order: -1; /* THIS IS MISSING */
1856 }
1857
1858 /* ALL hover states - these are MISSING from your new CSS */
1859 .mxchat-popular-questions .mxchat-popular-questions-container .questions-collapse-btn:hover {
1860 background: none;
1861 border: none;
1862 box-shadow: none;
1863 }
1864
1865 .mxchat-popular-questions .mxchat-popular-questions-container .questions-collapse-btn:focus {
1866 outline: none;
1867 background: none;
1868 border: none;
1869 box-shadow: none;
1870 }
1871
1872 .mxchat-popular-questions .mxchat-popular-questions-container .questions-collapse-btn:active {
1873 background: none;
1874 border: none;
1875 box-shadow: none;
1876 }
1877
1878 /* SVG styles - these are MISSING */
1879 .mxchat-popular-questions .mxchat-popular-questions-container .questions-collapse-btn svg {
1880 fill: none;
1881 stroke: #212121;
1882 transition: transform 0.2s ease;
1883 width: 25px;
1884 height: 25px;
1885 }
1886
1887 .mxchat-popular-questions .mxchat-popular-questions-container .questions-collapse-btn:hover svg {
1888 opacity: 0.7;
1889 }
1890
1891 /* THE CRITICAL DISPLAY RULE - this shows when it's been collapsed before */
1892 .mxchat-popular-questions.has-been-collapsed .mxchat-popular-questions-container .questions-collapse-btn {
1893 display: flex;
1894 }
1895
1896 /* Hide when actually collapsed */
1897 .mxchat-popular-questions.collapsed .mxchat-popular-questions-container .questions-collapse-btn {
1898 display: none;
1899 }
1900
1901 /* ============================================================
1902 Header overflow menu — 3-dot kebab + dropdown (v3.2.9 / v3.2.10)
1903 Lives in .chatbot-top-bar to the LEFT of .exit-chat. Visual treatment
1904 mirrors .exit-chat: transparent, white-on-dark, 0.8 opacity, 5px pad.
1905
1906 v3.2.10: explicit `order` rules pin the visual order
1907 title (0) | kebab (1) | down-arrow (2)
1908 so the down-arrow is always the rightmost icon regardless of source
1909 order or which sibling has margin-left:auto.
1910 ============================================================ */
1911 .mxchat-chatbot-wrapper .chatbot-top-bar > .chatbot-title-container { order: 0; }
1912 .mxchat-chatbot-wrapper .chatbot-top-bar > .mxchat-header-menu-wrap { order: 1; }
1913 .mxchat-chatbot-wrapper .chatbot-top-bar > .exit-chat { order: 2; }
1914
1915 .mxchat-header-menu-wrap {
1916 position: relative;
1917 display: inline-flex;
1918 align-items: center;
1919 margin-left: auto; /* push kebab + arrow group to the right edge */
1920 }
1921 .mxchat-chatbot-wrapper .chatbot-top-bar .mxchat-header-menu-wrap ~ .exit-chat,
1922 .mxchat-chatbot-wrapper .chatbot-top-bar .mxchat-header-menu-wrap + .exit-chat {
1923 margin-left: 4px; /* even, snug gap between kebab and close */
1924 }
1925 .mxchat-chatbot-wrapper .chatbot-top-bar > .exit-chat:focus {
1926 background: rgba(255, 255, 255, 0.12);
1927 opacity: 1;
1928 outline: none;
1929 }
1930 /* v3.2.15 (plan-52fd4c): kebab rules scoped under the wrapper + explicit
1931 guards on every property a theme's button/link rules commonly set
1932 (font-family, margin, appearance, text-transform, background-image),
1933 after a customer site's theme visibly mangled the dropdown. */
1934 .mxchat-chatbot-wrapper .mxchat-header-btn {
1935 border: none;
1936 background: transparent;
1937 background-image: none;
1938 cursor: pointer;
1939 display: inline-flex;
1940 align-items: center;
1941 justify-content: center;
1942 padding: 0;
1943 margin: 0;
1944 opacity: 0.8;
1945 color: #fff;
1946 font-family: inherit;
1947 text-transform: none;
1948 text-shadow: none;
1949 appearance: none;
1950 -webkit-appearance: none;
1951 transition: opacity 0.15s ease, background 0.15s ease;
1952 border-radius: 6px;
1953 line-height: 0;
1954 width: 32px;
1955 height: 32px;
1956 min-width: 32px;
1957 min-height: 32px;
1958 max-width: none;
1959 flex: 0 0 auto;
1960 }
1961 .mxchat-chatbot-wrapper .mxchat-header-btn:hover,
1962 .mxchat-chatbot-wrapper .mxchat-header-btn:focus {
1963 opacity: 1;
1964 background: rgba(255, 255, 255, 0.12);
1965 outline: none;
1966 }
1967 .mxchat-chatbot-wrapper .mxchat-header-btn[aria-expanded="true"] {
1968 opacity: 1;
1969 background: rgba(255, 255, 255, 0.12);
1970 }
1971 .mxchat-chatbot-wrapper .mxchat-menu-trigger svg {
1972 width: 18px;
1973 height: 18px;
1974 }
1975
1976 .mxchat-chatbot-wrapper .mxchat-header-menu {
1977 position: absolute;
1978 top: calc(100% + 6px);
1979 right: 0;
1980 min-width: 220px;
1981 margin: 0;
1982 background: var(--mxchat-menu-bg, #ffffff);
1983 color: var(--mxchat-menu-fg, #1a1a1a);
1984 border: 1px solid rgba(127, 127, 127, 0.20);
1985 border-radius: 10px;
1986 box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18), 0 2px 6px rgba(0, 0, 0, 0.10);
1987 padding: 4px;
1988 font-family: inherit;
1989 z-index: 99;
1990 opacity: 0;
1991 transform: translateY(-4px);
1992 pointer-events: none;
1993 transition: opacity 0.12s ease, transform 0.12s ease;
1994 }
1995 .mxchat-chatbot-wrapper .mxchat-header-menu.is-open {
1996 opacity: 1;
1997 transform: translateY(0);
1998 pointer-events: auto;
1999 }
2000 .mxchat-chatbot-wrapper .mxchat-header-menu[hidden] {
2001 display: none;
2002 }
2003 .mxchat-chatbot-wrapper .mxchat-menu-item {
2004 display: flex;
2005 align-items: center;
2006 gap: 10px;
2007 width: 100%;
2008 padding: 8px 12px;
2009 margin: 0;
2010 min-height: 40px;
2011 border: none;
2012 background: transparent;
2013 background-image: none;
2014 color: inherit;
2015 font-family: inherit;
2016 font-size: 14px;
2017 line-height: 1.3;
2018 letter-spacing: normal;
2019 text-align: left;
2020 text-transform: none;
2021 text-shadow: none;
2022 white-space: nowrap;
2023 appearance: none;
2024 -webkit-appearance: none;
2025 cursor: pointer;
2026 border-radius: 6px;
2027 transition: background 0.12s ease;
2028 text-decoration: none;
2029 box-sizing: border-box;
2030 }
2031 .mxchat-chatbot-wrapper .mxchat-menu-item:hover,
2032 .mxchat-chatbot-wrapper .mxchat-menu-item:focus {
2033 background: rgba(127, 127, 127, 0.18);
2034 outline: none;
2035 }
2036 .mxchat-menu-item-icon {
2037 display: inline-flex;
2038 align-items: center;
2039 justify-content: center;
2040 width: 16px;
2041 height: 16px;
2042 color: inherit;
2043 opacity: 0.85;
2044 flex-shrink: 0;
2045 }
2046 .mxchat-menu-item-icon svg {
2047 width: 16px;
2048 height: 16px;
2049 display: block;
2050 }
2051 .mxchat-menu-item-label {
2052 flex: 1;
2053 color: inherit;
2054 }
2055
2056 /* RTL — flip the dropdown anchor edge */
2057 [dir="rtl"] .mxchat-header-menu,
2058 .mxchat-chatbot-wrapper[dir="rtl"] .mxchat-header-menu {
2059 right: auto;
2060 left: 0;
2061 }
2062
2063 /* ============================================================================
2064 Satisfaction rating (v3.2.6 — polished per plan-141a12)
2065 Theme-adaptive via currentColor + inherit. Clean slate — old rules removed.
2066 ========================================================================= */
2067 .mxchat-chatbot .chat-container .chat-box .mxchat-rating-prompt,
2068 .mxchat-chatbot .chat-container .chat-box .mxchat-rating-feedback,
2069 .mxchat-chatbot .chat-container .chat-box .mxchat-rating-saved {
2070 clear: both;
2071 float: left;
2072 max-width: 92%;
2073 box-sizing: border-box;
2074 }
2075
2076 /* Theme-adaptive wrapper — .bot-message carries the user's custom bg/color via
2077 inline style; the inner rating component supplies its own padding + layout. */
2078 .mxchat-rating-bot-bubble {
2079 padding: 0;
2080 overflow: visible;
2081 }
2082
2083 .mxchat-rating-prompt {
2084 display: flex;
2085 flex-direction: column;
2086 align-items: stretch;
2087 gap: 10px;
2088 padding: 10px 14px;
2089 margin: 10px 0;
2090 font-size: 14px;
2091 color: inherit;
2092 }
2093
2094 .mxchat-rating-question {
2095 color: inherit;
2096 opacity: 0.85;
2097 font-weight: 500;
2098 }
2099
2100 .mxchat-rating-actions {
2101 display: flex;
2102 align-items: center;
2103 gap: 8px;
2104 }
2105
2106 .mxchat-rating-buttons {
2107 display: inline-flex;
2108 gap: 6px;
2109 }
2110
2111 .mxchat-rating-btn {
2112 display: inline-flex;
2113 align-items: center;
2114 justify-content: center;
2115 width: 32px;
2116 height: 32px;
2117 border-radius: 8px;
2118 background: transparent;
2119 border: none;
2120 color: inherit;
2121 opacity: 0.6;
2122 cursor: pointer;
2123 transition: opacity 0.18s ease, transform 0.18s ease, background-color 0.18s ease, color 0.18s ease;
2124 padding: 0;
2125 }
2126
2127 .mxchat-rating-btn:hover {
2128 opacity: 1;
2129 transform: scale(1.12);
2130 background: rgba(255, 255, 255, 0.08);
2131 }
2132
2133 .mxchat-rating-btn:focus-visible {
2134 opacity: 1;
2135 outline: 2px solid currentColor;
2136 outline-offset: 2px;
2137 }
2138
2139 .mxchat-rating-btn svg {
2140 pointer-events: none;
2141 }
2142
2143 .mxchat-rating-dismiss {
2144 width: 24px;
2145 height: 24px;
2146 border-radius: 6px;
2147 background: transparent;
2148 border: none;
2149 color: inherit;
2150 opacity: 0.45;
2151 cursor: pointer;
2152 font-size: 18px;
2153 line-height: 1;
2154 transition: opacity 0.18s ease, background-color 0.18s ease;
2155 }
2156
2157 .mxchat-rating-dismiss:hover {
2158 opacity: 0.9;
2159 background: rgba(255, 255, 255, 0.08);
2160 }
2161
2162 /* Feedback panel that replaces the prompt after a rating is clicked */
2163 .mxchat-rating-feedback {
2164 padding: 12px 14px;
2165 margin: 10px 0;
2166 display: flex;
2167 flex-direction: column;
2168 gap: 10px;
2169 color: inherit;
2170 animation: mxchat-rating-fade-in 0.22s ease;
2171 }
2172
2173 .mxchat-rating-feedback-label {
2174 font-size: 13px;
2175 opacity: 0.85;
2176 font-weight: 500;
2177 }
2178
2179 .mxchat-rating-feedback-input {
2180 width: 100%;
2181 box-sizing: border-box;
2182 padding: 8px 10px;
2183 border: 1px solid rgba(255, 255, 255, 0.25);
2184 border-radius: 8px;
2185 font-size: 14px;
2186 font-family: inherit;
2187 resize: vertical;
2188 background: rgba(255, 255, 255, 0.08);
2189 color: inherit;
2190 }
2191
2192 .mxchat-rating-feedback-input:focus {
2193 outline: none;
2194 border-color: rgba(255, 255, 255, 0.45);
2195 background: rgba(255, 255, 255, 0.15);
2196 }
2197
2198 .mxchat-rating-feedback-actions {
2199 display: flex;
2200 justify-content: flex-end;
2201 gap: 8px;
2202 }
2203
2204 .mxchat-rating-skip,
2205 .mxchat-rating-submit {
2206 padding: 6px 14px;
2207 border-radius: 8px;
2208 font-size: 13px;
2209 font-weight: 500;
2210 cursor: pointer;
2211 border: none;
2212 transition: opacity 0.18s ease, transform 0.18s ease, background-color 0.18s ease;
2213 }
2214
2215 .mxchat-rating-skip {
2216 background: transparent;
2217 color: inherit;
2218 opacity: 0.6;
2219 }
2220
2221 .mxchat-rating-skip:hover {
2222 opacity: 1;
2223 background: rgba(255, 255, 255, 0.08);
2224 }
2225
2226 .mxchat-rating-submit {
2227 /* Filled "primary" pill: fill = the bot font color, label = the bubble bg.
2228 syncRatingBubbleColors() in chat-script.js paints the real bot colors
2229 straight onto this button (inline) from the bubble's COMPUTED style, so
2230 it adapts to both the inline color pickers AND the mxchat-theme AI
2231 customizer. These var()/literal values are the no-JS safety net — the
2232 literal fallbacks (#212121 fill / #ffffff label) stay legible on their
2233 own (no white-on-white). Longhand background-color (not the `background`
2234 shorthand) because Chromium resolves inherited custom properties
2235 unreliably inside the shorthand. Do NOT use currentColor here — setting
2236 `color` would re-poison the background to the same value. */
2237 background-color: var(--mxchat-bot-fg, #212121);
2238 color: var(--mxchat-bot-bg, #ffffff);
2239 }
2240
2241 .mxchat-rating-submit:hover {
2242 transform: translateY(-1px);
2243 opacity: 0.9;
2244 }
2245
2246 .mxchat-rating-saved {
2247 padding: 10px 14px;
2248 margin: 10px 0;
2249 font-size: 13px;
2250 font-weight: 500;
2251 text-align: center;
2252 color: inherit;
2253 animation: mxchat-rating-fade-in 0.22s ease;
2254 }
2255
2256 @keyframes mxchat-rating-fade-in {
2257 from { opacity: 0; transform: translateY(4px); }
2258 to { opacity: 1; transform: translateY(0); }
2259 }