PluginProbe
MxChat – AI Chatbot & Content Generation for WordPress / 3.2.12
MxChat – AI Chatbot & Content Generation for WordPress v3.2.12
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 / admin-sidebar.css

admin-sidebar.css in MxChat – AI Chatbot & Content Generation for WordPress 3.2.12, at css/admin-sidebar.css

2,906 lines 70.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /* ==========================================================================
2 MxChat Admin Sidebar Navigation - v2.0
3 Clean, modern CSS for the redesigned settings page
4 ========================================================================== */
5
6 /* ==========================================================================
7 CSS Variables
8 ========================================================================== */
9 :root {
10 /* Brand Colors */
11 --mxch-primary: #7873f5;
12 --mxch-primary-hover: #6863e5;
13 --mxch-primary-light: rgba(120, 115, 245, 0.1);
14 --mxch-primary-lighter: rgba(120, 115, 245, 0.05);
15
16 /* Sidebar */
17 --mxch-sidebar-width: 260px;
18 --mxch-sidebar-bg: #212121;
19 --mxch-sidebar-text: #a0a0b0;
20 --mxch-sidebar-text-hover: #ffffff;
21 --mxch-sidebar-active-bg: rgba(120, 115, 245, 0.15);
22 --mxch-sidebar-border: rgba(255, 255, 255, 0.08);
23
24 /* Content Area */
25 --mxch-content-bg: #f0f2f5;
26 --mxch-card-bg: #ffffff;
27 --mxch-card-border: #e2e4e9;
28 --mxch-card-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
29 --mxch-card-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.1);
30
31 /* Text */
32 --mxch-text-primary: #1a1a2e;
33 --mxch-text-secondary: #64748b;
34 --mxch-text-muted: #94a3b8;
35
36 /* Form Elements */
37 --mxch-input-border: #d1d5db;
38 --mxch-input-focus: #7873f5;
39 --mxch-input-bg: #ffffff;
40
41 /* Status Colors */
42 --mxch-success: #10b981;
43 --mxch-warning: #f59e0b;
44 --mxch-error: #ef4444;
45 --mxch-info: #3b82f6;
46
47 /* Spacing */
48 --mxch-spacing-xs: 4px;
49 --mxch-spacing-sm: 8px;
50 --mxch-spacing-md: 16px;
51 --mxch-spacing-lg: 24px;
52 --mxch-spacing-xl: 32px;
53
54 /* Border Radius */
55 --mxch-radius-sm: 4px;
56 --mxch-radius-md: 8px;
57 --mxch-radius-lg: 12px;
58
59 /* Transitions */
60 --mxch-transition-fast: 0.15s ease;
61 --mxch-transition: 0.25s ease;
62 }
63
64 /* ==========================================================================
65 Main Layout Container
66 ========================================================================== */
67 .mxch-admin-wrapper {
68 display: flex;
69 height: calc(100vh - 32px);
70 margin-left: -20px;
71 background: var(--mxch-content-bg);
72 overflow: hidden;
73 position: fixed;
74 top: 32px;
75 left: 160px; /* WordPress admin menu width */
76 right: 0;
77 bottom: 0;
78 }
79
80 /* Account for collapsed admin menu */
81 .folded .mxch-admin-wrapper {
82 left: 36px;
83 }
84
85 /* Account for admin bar on mobile */
86 @media screen and (max-width: 782px) {
87 .mxch-admin-wrapper {
88 top: 46px;
89 height: calc(100vh - 46px);
90 left: 0;
91 margin-left: 0;
92 }
93 }
94
95 /* ==========================================================================
96 RTL locales (Arabic, Hebrew, Persian, Urdu, …)
97 On an RTL locale WordPress moves its admin menu to the RIGHT and sets the
98 `rtl` class + `direction: rtl` on <body>. The base wrapper is pinned
99 `left: 160px; right: 0` for a LEFT-side admin menu, so under RTL its right
100 edge slides under the (now right-side) WP menu and a dead 160px gap opens on
101 the left — the nav ends up hidden/overlapped. Mirror the fixed offsets and
102 the negative content margin. The internal sidebar/content flex row reverses
103 automatically under the inherited `direction: rtl`, so the sidebar lands on
104 the wrapper's right edge (just inside the WP menu) as expected for RTL — no
105 per-child repositioning needed.
106 ========================================================================== */
107 body.rtl .mxch-admin-wrapper {
108 left: 0;
109 right: 160px; /* WordPress admin menu width (now on the right) */
110 margin-left: 0;
111 margin-right: -20px;
112 }
113
114 /* Collapsed/folded admin menu (narrower) on RTL */
115 body.rtl.folded .mxch-admin-wrapper {
116 left: 0;
117 right: 36px;
118 }
119
120 /* On mobile the WP admin menu collapses to the top bar, so the wrapper is
121 full-width in both directions — clear the RTL right offset too. */
122 @media screen and (max-width: 782px) {
123 body.rtl .mxch-admin-wrapper {
124 left: 0;
125 right: 0;
126 margin-right: 0;
127 }
128 }
129
130 /* Active nav-item accent sits on the sidebar's inner edge; flip it for RTL. */
131 body.rtl .mxch-nav-link.active {
132 border-right: none;
133 border-left: 3px solid var(--mxch-primary);
134 }
135
136 /* ==========================================================================
137 Sidebar Navigation
138 ========================================================================== */
139 .mxch-sidebar {
140 width: var(--mxch-sidebar-width);
141 min-width: var(--mxch-sidebar-width);
142 background: var(--mxch-sidebar-bg);
143 display: flex;
144 flex-direction: column;
145 height: 100%;
146 overflow-y: auto;
147 overflow-x: hidden;
148 z-index: 100;
149 flex-shrink: 0;
150 position: relative;
151 }
152
153 /* Custom Scrollbar for Sidebar */
154 .mxch-sidebar::-webkit-scrollbar {
155 width: 6px;
156 }
157
158 .mxch-sidebar::-webkit-scrollbar-track {
159 background: transparent;
160 }
161
162 .mxch-sidebar::-webkit-scrollbar-thumb {
163 background: rgba(255, 255, 255, 0.15);
164 border-radius: 3px;
165 }
166
167 .mxch-sidebar::-webkit-scrollbar-thumb:hover {
168 background: rgba(255, 255, 255, 0.25);
169 }
170
171 /* Firefox scrollbar */
172 .mxch-sidebar {
173 scrollbar-width: thin;
174 scrollbar-color: rgba(255, 255, 255, 0.15) transparent;
175 }
176
177 .mxch-sidebar::before {
178 content: '';
179 position: absolute;
180 top: 0;
181 left: 0;
182 width: 100%;
183 height: 100%;
184 background: radial-gradient(circle at center, rgba(250, 115, 230, 0.08) 0%, rgba(120, 115, 245, 0.08) 50%, rgba(58, 201, 209, 0.08) 100%);
185 z-index: 0;
186 pointer-events: none;
187 }
188
189 /* Sidebar Header / Logo */
190 .mxch-sidebar-header {
191 padding: var(--mxch-spacing-lg);
192 border-bottom: 4px solid transparent;
193 border-image: linear-gradient(135deg, #fa73e6, #7873f5, #3ac9d1);
194 border-image-slice: 1;
195 position: relative;
196 z-index: 1;
197 }
198
199 .mxch-sidebar-logo {
200 display: flex;
201 align-items: center;
202 gap: var(--mxch-spacing-sm);
203 text-decoration: none;
204 }
205
206 .mxch-sidebar-logo-icon {
207 width: 32px;
208 height: 32px;
209 flex-shrink: 0;
210 }
211
212 .mxch-sidebar-logo-icon img {
213 width: 100%;
214 height: 100%;
215 object-fit: contain;
216 }
217
218 .mxch-sidebar-logo-text {
219 font-size: 20px;
220 font-weight: 700;
221 color: #ffffff;
222 letter-spacing: -0.5px;
223 }
224
225 .mxch-sidebar-version {
226 font-size: 11px;
227 color: var(--mxch-sidebar-text);
228 margin-left: auto;
229 padding: 2px 8px;
230 background: rgba(255, 255, 255, 0.05);
231 border-radius: 10px;
232 }
233
234 /* Sidebar Navigation */
235 .mxch-sidebar-nav {
236 flex: 1;
237 padding: var(--mxch-spacing-md) 0;
238 overflow-y: auto;
239 position: relative;
240 z-index: 1;
241 }
242
243 .mxch-nav-section {
244 margin-bottom: var(--mxch-spacing-xs);
245 }
246
247 .mxch-nav-section-title {
248 font-size: 11px;
249 font-weight: 600;
250 text-transform: uppercase;
251 letter-spacing: 0.5px;
252 color: var(--mxch-sidebar-text);
253 padding: var(--mxch-spacing-md) var(--mxch-spacing-lg) var(--mxch-spacing-sm);
254 opacity: 0.7;
255 }
256
257 /* Nav Items */
258 .mxch-nav-item {
259 position: relative;
260 }
261
262 .mxch-nav-link {
263 display: flex;
264 align-items: center;
265 gap: var(--mxch-spacing-sm);
266 padding: 10px var(--mxch-spacing-lg);
267 color: var(--mxch-sidebar-text);
268 text-decoration: none;
269 font-size: 14px;
270 font-weight: 500;
271 transition: all var(--mxch-transition-fast);
272 cursor: pointer;
273 border: none;
274 background: none;
275 width: 100%;
276 text-align: left;
277 }
278
279 .mxch-nav-link:hover {
280 color: var(--mxch-sidebar-text-hover);
281 background: rgba(255, 255, 255, 0.05);
282 }
283
284 .mxch-nav-link.active {
285 color: var(--mxch-sidebar-text-hover);
286 background: var(--mxch-sidebar-active-bg);
287 border-right: 3px solid var(--mxch-primary);
288 }
289
290 .mxch-nav-link-icon {
291 width: 20px;
292 height: 20px;
293 display: flex;
294 align-items: center;
295 justify-content: center;
296 opacity: 0.8;
297 }
298
299 .mxch-nav-link-icon svg {
300 width: 18px;
301 height: 18px;
302 stroke-width: 1.5;
303 }
304
305 .mxch-nav-link.active .mxch-nav-link-icon {
306 opacity: 1;
307 color: var(--mxch-primary);
308 }
309
310 .mxch-nav-link-text {
311 flex: 1;
312 }
313
314 .mxch-nav-link-badge {
315 font-size: 10px;
316 padding: 2px 6px;
317 border-radius: 10px;
318 background: var(--mxch-primary);
319 color: white;
320 font-weight: 600;
321 }
322
323 .mxch-nav-link-badge.mxch-active-badge {
324 font-size: 9px;
325 padding: 2px 6px;
326 border-radius: 4px;
327 background: var(--mxch-success, #10b981);
328 color: white;
329 font-weight: 600;
330 text-transform: uppercase;
331 letter-spacing: 0.3px;
332 }
333
334 .mxch-nav-link-arrow {
335 width: 16px;
336 height: 16px;
337 transition: transform var(--mxch-transition-fast);
338 opacity: 0.5;
339 }
340
341 .mxch-nav-item.expanded .mxch-nav-link-arrow {
342 transform: rotate(90deg);
343 }
344
345 /* Sub Navigation */
346 .mxch-nav-sub {
347 display: none;
348 background: rgba(0, 0, 0, 0.15);
349 }
350
351 .mxch-nav-item.expanded .mxch-nav-sub {
352 display: block;
353 }
354
355 .mxch-nav-sub-link {
356 display: flex;
357 align-items: center;
358 gap: var(--mxch-spacing-sm);
359 padding: 8px var(--mxch-spacing-lg) 8px 52px;
360 color: var(--mxch-sidebar-text);
361 text-decoration: none;
362 font-size: 13px;
363 transition: all var(--mxch-transition-fast);
364 cursor: pointer;
365 border: none;
366 background: none;
367 width: 100%;
368 text-align: left;
369 }
370
371 .mxch-nav-sub-link:hover {
372 color: var(--mxch-sidebar-text-hover);
373 background: rgba(255, 255, 255, 0.03);
374 }
375
376 .mxch-nav-sub-link.active {
377 color: var(--mxch-primary);
378 background: rgba(120, 115, 245, 0.1);
379 }
380
381 .mxch-nav-sub-link::before {
382 content: '';
383 width: 6px;
384 height: 6px;
385 border-radius: 50%;
386 background: currentColor;
387 opacity: 0.4;
388 }
389
390 .mxch-nav-sub-link.active::before {
391 opacity: 1;
392 background: var(--mxch-primary);
393 }
394
395 /* Sidebar Footer - Pro Upgrade CTA */
396 .mxch-sidebar-footer {
397 padding: var(--mxch-spacing-md) var(--mxch-spacing-lg);
398 position: relative;
399 z-index: 1;
400 }
401
402 .mxch-sidebar-upgrade {
403 display: flex;
404 align-items: center;
405 justify-content: center;
406 gap: 10px;
407 padding: 12px 16px;
408 background: transparent;
409 border: 1px solid rgba(120, 115, 245, 0.4);
410 border-radius: var(--mxch-radius-md);
411 color: var(--mxch-sidebar-text);
412 text-decoration: none;
413 font-size: 13px;
414 font-weight: 500;
415 transition: all 0.3s ease;
416 position: relative;
417 overflow: hidden;
418 }
419
420 .mxch-sidebar-upgrade::before {
421 content: '';
422 position: absolute;
423 inset: -1px;
424 border-radius: inherit;
425 padding: 1px;
426 background: linear-gradient(135deg, #7873f5 0%, #a78bfa 50%, #f472b6 100%);
427 -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
428 mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
429 -webkit-mask-composite: xor;
430 mask-composite: exclude;
431 opacity: 0;
432 transition: opacity 0.3s ease;
433 }
434
435 .mxch-sidebar-upgrade:hover::before {
436 opacity: 1;
437 }
438
439 .mxch-sidebar-upgrade:hover {
440 color: white;
441 background: linear-gradient(135deg, rgba(120, 115, 245, 0.15) 0%, rgba(167, 139, 250, 0.15) 50%, rgba(244, 114, 182, 0.1) 100%);
442 border-color: transparent;
443 box-shadow: 0 0 20px rgba(120, 115, 245, 0.3), 0 0 40px rgba(167, 139, 250, 0.15);
444 }
445
446 .mxch-sidebar-upgrade svg {
447 width: 16px;
448 height: 16px;
449 opacity: 0.7;
450 transition: opacity 0.3s ease;
451 }
452
453 .mxch-sidebar-upgrade:hover svg {
454 opacity: 1;
455 }
456
457 .mxch-sidebar-upgrade-text {
458 display: flex;
459 flex-direction: column;
460 align-items: flex-start;
461 line-height: 1.2;
462 }
463
464 .mxch-sidebar-upgrade-label {
465 font-size: 10px;
466 text-transform: uppercase;
467 letter-spacing: 0.5px;
468 opacity: 0.6;
469 }
470
471 .mxch-sidebar-upgrade-title {
472 font-weight: 600;
473 }
474
475 /* ==========================================================================
476 Main Content Area
477 ========================================================================== */
478 .mxch-content {
479 flex: 1;
480 padding: var(--mxch-spacing-xl);
481 overflow-y: auto;
482 overflow-x: hidden;
483 min-height: 0; /* Important for flex child scrolling */
484 }
485
486 .mxch-content::after {
487 content: '';
488 display: block;
489 height: 120px; /* Extra space at bottom for scrolling */
490 }
491
492 /* Content Header */
493 .mxch-content-header {
494 margin-bottom: var(--mxch-spacing-xl);
495 }
496
497 .mxch-content-title {
498 font-size: 24px;
499 font-weight: 700;
500 color: var(--mxch-text-primary);
501 margin: 0 0 var(--mxch-spacing-xs) 0;
502 }
503
504 .mxch-content-subtitle {
505 font-size: 14px;
506 color: var(--mxch-text-secondary);
507 margin: 0;
508 }
509
510 /* Pro Banner - Clean, Professional Design */
511 .mxch-pro-banner {
512 display: flex;
513 align-items: center;
514 justify-content: space-between;
515 gap: var(--mxch-spacing-lg);
516 padding: 16px 24px;
517 background: var(--mxch-card-bg);
518 border: 1px solid var(--mxch-card-border);
519 border-radius: var(--mxch-radius-lg);
520 margin-bottom: var(--mxch-spacing-xl);
521 position: relative;
522 overflow: hidden;
523 }
524
525 /* Subtle gradient accent on left edge */
526 .mxch-pro-banner::before {
527 content: '';
528 position: absolute;
529 left: 0;
530 top: 0;
531 bottom: 0;
532 width: 3px;
533 background: linear-gradient(180deg, #7873f5 0%, #a78bfa 50%, #f472b6 100%);
534 }
535
536 .mxch-pro-banner-content {
537 flex: 1;
538 min-width: 0;
539 }
540
541 .mxch-pro-banner-title {
542 font-size: 14px;
543 font-weight: 600;
544 color: var(--mxch-text-primary);
545 margin: 0 0 4px 0;
546 display: flex;
547 align-items: center;
548 gap: 8px;
549 }
550
551 .mxch-pro-banner-title::before {
552 content: '';
553 font-size: 12px;
554 }
555
556 .mxch-pro-banner-text {
557 font-size: 13px;
558 color: var(--mxch-text-secondary);
559 margin: 0;
560 line-height: 1.5;
561 }
562
563 .mxch-pro-banner-btn {
564 display: inline-flex;
565 align-items: center;
566 gap: 6px;
567 padding: 10px 20px;
568 background: transparent;
569 color: var(--mxch-primary);
570 border: 1px solid var(--mxch-primary);
571 border-radius: var(--mxch-radius-md);
572 text-decoration: none;
573 font-weight: 600;
574 font-size: 13px;
575 transition: all 0.25s ease;
576 white-space: nowrap;
577 position: relative;
578 overflow: hidden;
579 }
580
581 .mxch-pro-banner-btn::before {
582 content: '';
583 position: absolute;
584 inset: 0;
585 background: linear-gradient(135deg, #7873f5 0%, #a78bfa 50%, #f472b6 100%);
586 opacity: 0;
587 transition: opacity 0.25s ease;
588 }
589
590 .mxch-pro-banner-btn span {
591 position: relative;
592 z-index: 1;
593 }
594
595 .mxch-pro-banner-btn:hover {
596 color: white;
597 border-color: transparent;
598 box-shadow: 0 4px 15px rgba(120, 115, 245, 0.35);
599 transform: translateY(-1px);
600 }
601
602 .mxch-pro-banner-btn:hover::before {
603 opacity: 1;
604 }
605
606 /* Dismissible banner close button */
607 .mxch-pro-banner-close {
608 position: absolute;
609 top: 8px;
610 right: 8px;
611 width: 24px;
612 height: 24px;
613 display: flex;
614 align-items: center;
615 justify-content: center;
616 background: transparent;
617 border: none;
618 color: var(--mxch-text-muted);
619 cursor: pointer;
620 border-radius: 4px;
621 transition: all 0.2s ease;
622 opacity: 0;
623 }
624
625 .mxch-pro-banner:hover .mxch-pro-banner-close {
626 opacity: 1;
627 }
628
629 .mxch-pro-banner-close:hover {
630 background: rgba(0, 0, 0, 0.05);
631 color: var(--mxch-text-primary);
632 }
633
634 /* ==========================================================================
635 Settings Cards
636 ========================================================================== */
637 .mxch-card {
638 background: var(--mxch-card-bg);
639 border: 1px solid var(--mxch-card-border);
640 border-radius: var(--mxch-radius-lg);
641 box-shadow: var(--mxch-card-shadow);
642 margin-bottom: var(--mxch-spacing-lg);
643 overflow: hidden;
644 }
645
646 .mxch-card-header {
647 display: flex;
648 align-items: center;
649 justify-content: space-between;
650 padding: var(--mxch-spacing-md) var(--mxch-spacing-lg);
651 border-bottom: 1px solid var(--mxch-card-border);
652 background: var(--mxch-primary-lighter);
653 }
654
655 .mxch-card-title {
656 font-size: 15px;
657 font-weight: 600;
658 color: var(--mxch-text-primary);
659 margin: 0;
660 display: flex;
661 align-items: center;
662 gap: var(--mxch-spacing-sm);
663 }
664
665 .mxch-card-title-icon {
666 width: 20px;
667 height: 20px;
668 color: var(--mxch-primary);
669 }
670
671 .mxch-card-body {
672 padding: var(--mxch-spacing-lg);
673 }
674
675 .mxch-card-footer {
676 padding: var(--mxch-spacing-md) var(--mxch-spacing-lg);
677 border-top: 1px solid var(--mxch-card-border);
678 background: #fafbfc;
679 }
680
681 /* ==========================================================================
682 Form Fields
683 ========================================================================== */
684 .mxch-field {
685 margin-bottom: var(--mxch-spacing-lg);
686 }
687
688 .mxch-field:last-child {
689 margin-bottom: 0;
690 }
691
692 .mxch-field-row {
693 display: flex;
694 align-items: flex-start;
695 gap: var(--mxch-spacing-lg);
696 }
697
698 .mxch-field-label {
699 display: flex;
700 align-items: center;
701 gap: var(--mxch-spacing-sm);
702 font-size: 14px;
703 font-weight: 600;
704 color: var(--mxch-text-primary);
705 margin-bottom: var(--mxch-spacing-sm);
706 }
707
708 .mxch-field-label-required {
709 color: var(--mxch-error);
710 }
711
712 .mxch-field-description {
713 font-size: 13px;
714 color: var(--mxch-text-secondary);
715 margin-top: var(--mxch-spacing-xs);
716 line-height: 1.5;
717 }
718
719 .mxch-field-hint {
720 font-size: 12px;
721 color: var(--mxch-text-muted);
722 margin-top: var(--mxch-spacing-xs);
723 }
724
725 /* Input Fields */
726 .mxch-input {
727 width: 100%;
728 padding: 10px 14px;
729 font-size: 14px;
730 border: 1px solid var(--mxch-input-border);
731 border-radius: var(--mxch-radius-md);
732 background: var(--mxch-input-bg);
733 color: var(--mxch-text-primary);
734 transition: all var(--mxch-transition-fast);
735 }
736
737 .mxch-input:focus {
738 outline: none;
739 border-color: var(--mxch-input-focus);
740 box-shadow: 0 0 0 3px var(--mxch-primary-light);
741 }
742
743 .mxch-input::placeholder {
744 color: var(--mxch-text-muted);
745 }
746
747 .mxch-input-sm {
748 padding: 6px 10px;
749 font-size: 13px;
750 }
751
752 .mxch-input-lg {
753 padding: 12px 16px;
754 font-size: 15px;
755 }
756
757 /* Textarea */
758 .mxch-textarea {
759 width: 100%;
760 padding: 10px 14px;
761 font-size: 14px;
762 border: 1px solid var(--mxch-input-border);
763 border-radius: var(--mxch-radius-md);
764 background: var(--mxch-input-bg);
765 color: var(--mxch-text-primary);
766 transition: all var(--mxch-transition-fast);
767 resize: vertical;
768 min-height: 100px;
769 font-family: inherit;
770 }
771
772 .mxch-textarea:focus {
773 outline: none;
774 border-color: var(--mxch-input-focus);
775 box-shadow: 0 0 0 3px var(--mxch-primary-light);
776 }
777
778 /* Select */
779 .mxch-select {
780 width: 100%;
781 padding: 10px 36px 10px 14px;
782 font-size: 14px;
783 border: 1px solid var(--mxch-input-border);
784 border-radius: var(--mxch-radius-md);
785 background: var(--mxch-input-bg) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E") no-repeat right 12px center;
786 color: var(--mxch-text-primary);
787 cursor: pointer;
788 appearance: none;
789 transition: all var(--mxch-transition-fast);
790 }
791
792 .mxch-select:focus {
793 outline: none;
794 border-color: var(--mxch-input-focus);
795 box-shadow: 0 0 0 3px var(--mxch-primary-light);
796 }
797
798 /* Toggle Switch */
799 .mxch-toggle {
800 position: relative;
801 display: inline-flex;
802 align-items: center;
803 gap: var(--mxch-spacing-sm);
804 cursor: pointer;
805 }
806
807 .mxch-toggle-input {
808 position: absolute;
809 opacity: 0;
810 width: 0;
811 height: 0;
812 }
813
814 .mxch-toggle-switch {
815 position: relative;
816 width: 44px;
817 height: 24px;
818 background: #cbd5e1;
819 border-radius: 12px;
820 transition: all var(--mxch-transition-fast);
821 }
822
823 .mxch-toggle-switch::before {
824 content: '';
825 position: absolute;
826 top: 2px;
827 left: 2px;
828 width: 20px;
829 height: 20px;
830 background: white;
831 border-radius: 50%;
832 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
833 transition: all var(--mxch-transition-fast);
834 }
835
836 .mxch-toggle-input:checked + .mxch-toggle-switch {
837 background: var(--mxch-primary);
838 }
839
840 .mxch-toggle-input:checked + .mxch-toggle-switch::before {
841 transform: translateX(20px);
842 }
843
844 .mxch-toggle-input:focus + .mxch-toggle-switch {
845 box-shadow: 0 0 0 3px var(--mxch-primary-light);
846 }
847
848 .mxch-toggle-label {
849 font-size: 14px;
850 color: var(--mxch-text-primary);
851 }
852
853 /* API Key Input */
854 .mxch-api-key-wrapper {
855 display: flex;
856 gap: var(--mxch-spacing-sm);
857 }
858
859 .mxch-api-key-wrapper .mxch-input {
860 flex: 1;
861 font-family: monospace;
862 }
863
864 .mxch-api-key-toggle {
865 padding: 10px 14px;
866 background: #f1f5f9;
867 border: 1px solid var(--mxch-input-border);
868 border-radius: var(--mxch-radius-md);
869 color: var(--mxch-text-secondary);
870 cursor: pointer;
871 font-size: 13px;
872 transition: all var(--mxch-transition-fast);
873 }
874
875 .mxch-api-key-toggle:hover {
876 background: #e2e8f0;
877 color: var(--mxch-text-primary);
878 }
879
880 .mxch-api-key-status {
881 display: flex;
882 align-items: center;
883 gap: var(--mxch-spacing-xs);
884 font-size: 12px;
885 margin-top: var(--mxch-spacing-xs);
886 }
887
888 .mxch-api-key-status.detected {
889 color: var(--mxch-success);
890 }
891
892 .mxch-api-key-status.missing {
893 color: var(--mxch-text-muted);
894 }
895
896 /* ==========================================================================
897 WordPress Form Table Styling (for do_settings_fields output)
898 ========================================================================== */
899 .mxch-card-body .form-table {
900 margin: 0;
901 border-collapse: collapse;
902 width: 100%;
903 }
904
905 .mxch-card-body .form-table th,
906 .mxch-card-body .form-table td {
907 padding: 0;
908 vertical-align: top;
909 border: none;
910 }
911
912 .mxch-card-body .form-table tr {
913 display: flex;
914 flex-direction: column;
915 margin-bottom: var(--mxch-spacing-lg);
916 }
917
918 .mxch-card-body .form-table tr:last-child {
919 margin-bottom: 0;
920 }
921
922 .mxch-card-body .form-table th {
923 display: block;
924 width: 100%;
925 font-size: 14px;
926 font-weight: 600;
927 color: var(--mxch-text-primary);
928 padding-bottom: var(--mxch-spacing-sm);
929 text-align: left;
930 }
931
932 .mxch-card-body .form-table th label {
933 font-weight: 600;
934 }
935
936 .mxch-card-body .form-table td {
937 display: block;
938 width: 100%;
939 }
940
941 /* Style WordPress default inputs inside form-table */
942 .mxch-card-body .form-table input[type="text"],
943 .mxch-card-body .form-table input[type="password"],
944 .mxch-card-body .form-table input[type="email"],
945 .mxch-card-body .form-table input[type="url"],
946 .mxch-card-body .form-table input[type="number"] {
947 width: 100%;
948 max-width: 100%;
949 padding: 10px 14px;
950 font-size: 14px;
951 border: 1px solid var(--mxch-input-border);
952 border-radius: var(--mxch-radius-md);
953 background: var(--mxch-input-bg);
954 color: var(--mxch-text-primary);
955 transition: all var(--mxch-transition-fast);
956 box-sizing: border-box;
957 }
958
959 .mxch-card-body .form-table input[type="text"]:focus,
960 .mxch-card-body .form-table input[type="password"]:focus,
961 .mxch-card-body .form-table input[type="email"]:focus,
962 .mxch-card-body .form-table input[type="url"]:focus,
963 .mxch-card-body .form-table input[type="number"]:focus {
964 outline: none;
965 border-color: var(--mxch-input-focus);
966 box-shadow: 0 0 0 3px var(--mxch-primary-light);
967 }
968
969 .mxch-card-body .form-table .regular-text {
970 width: 100%;
971 max-width: 100%;
972 }
973
974 .mxch-card-body .form-table select {
975 width: 100%;
976 max-width: 100%;
977 padding: 10px 36px 10px 14px;
978 font-size: 14px;
979 border: 1px solid var(--mxch-input-border);
980 border-radius: var(--mxch-radius-md);
981 background: var(--mxch-input-bg) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E") no-repeat right 12px center;
982 color: var(--mxch-text-primary);
983 cursor: pointer;
984 appearance: none;
985 -webkit-appearance: none;
986 transition: all var(--mxch-transition-fast);
987 }
988
989 .mxch-card-body .form-table select:focus {
990 outline: none;
991 border-color: var(--mxch-input-focus);
992 box-shadow: 0 0 0 3px var(--mxch-primary-light);
993 }
994
995 .mxch-card-body .form-table textarea {
996 width: 100%;
997 max-width: 100%;
998 padding: 10px 14px;
999 font-size: 14px;
1000 border: 1px solid var(--mxch-input-border);
1001 border-radius: var(--mxch-radius-md);
1002 background: var(--mxch-input-bg);
1003 color: var(--mxch-text-primary);
1004 transition: all var(--mxch-transition-fast);
1005 resize: vertical;
1006 min-height: 100px;
1007 font-family: inherit;
1008 box-sizing: border-box;
1009 }
1010
1011 .mxch-card-body .form-table textarea:focus {
1012 outline: none;
1013 border-color: var(--mxch-input-focus);
1014 box-shadow: 0 0 0 3px var(--mxch-primary-light);
1015 }
1016
1017 /* Style descriptions in form-table */
1018 .mxch-card-body .form-table p.description,
1019 .mxch-card-body .form-table .description {
1020 font-size: 13px;
1021 color: var(--mxch-text-secondary);
1022 margin-top: var(--mxch-spacing-xs);
1023 line-height: 1.5;
1024 }
1025
1026 /* API Key wrappers inside form-table */
1027 .mxch-card-body .form-table .api-key-wrapper {
1028 display: grid;
1029 grid-template-columns: 1fr auto;
1030 grid-template-rows: auto auto;
1031 gap: var(--mxch-spacing-sm);
1032 align-items: center;
1033 }
1034
1035 .mxch-card-body .form-table .api-key-wrapper input {
1036 grid-column: 1;
1037 grid-row: 1;
1038 font-family: monospace;
1039 width: 100%;
1040 }
1041
1042 .mxch-admin-wrapper .mxch-card-body .form-table .api-key-wrapper button,
1043 .mxch-admin-wrapper .mxch-card-body .api-key-wrapper button,
1044 .mxch-admin-wrapper .mxch-section .api-key-wrapper button {
1045 grid-column: 2;
1046 grid-row: 1;
1047 padding: 10px 16px;
1048 background: #f1f5f9;
1049 border: 1px solid var(--mxch-input-border);
1050 border-radius: var(--mxch-radius-md);
1051 color: var(--mxch-text-secondary);
1052 cursor: pointer;
1053 font-size: 13px;
1054 font-weight: 500;
1055 transition: all var(--mxch-transition-fast);
1056 white-space: nowrap;
1057 min-width: 70px;
1058 text-align: center;
1059 height: auto;
1060 line-height: 1.4;
1061 }
1062
1063 .mxch-admin-wrapper .mxch-card-body .form-table .api-key-wrapper button:hover,
1064 .mxch-admin-wrapper .mxch-card-body .api-key-wrapper button:hover,
1065 .mxch-admin-wrapper .mxch-section .api-key-wrapper button:hover {
1066 background: var(--mxch-primary);
1067 border-color: var(--mxch-primary);
1068 color: white;
1069 }
1070
1071 /* Description inside api-key-wrapper needs to be on its own line */
1072 .mxch-card-body .form-table .api-key-wrapper p.description,
1073 .mxch-card-body .form-table .api-key-wrapper .description {
1074 grid-column: 1 / -1;
1075 grid-row: 2;
1076 margin: 0;
1077 }
1078
1079 /* Checkbox styling */
1080 .mxch-card-body .form-table input[type="checkbox"] {
1081 width: 18px;
1082 height: 18px;
1083 margin: 0;
1084 cursor: pointer;
1085 accent-color: var(--mxch-primary);
1086 }
1087
1088 /* Toggle switches (if using class-based toggles) */
1089 .mxch-card-body .form-table .mxchat-toggle-wrapper {
1090 display: flex;
1091 align-items: center;
1092 gap: var(--mxch-spacing-sm);
1093 }
1094
1095 /* Button styling inside form-table */
1096 .mxch-card-body .form-table .button {
1097 padding: 8px 16px;
1098 font-size: 13px;
1099 border-radius: var(--mxch-radius-md);
1100 transition: all var(--mxch-transition-fast);
1101 }
1102
1103 .mxch-card-body .form-table .button-primary {
1104 background: var(--mxch-primary);
1105 border-color: var(--mxch-primary);
1106 color: white;
1107 }
1108
1109 .mxch-card-body .form-table .button-primary:hover {
1110 background: var(--mxch-primary-hover);
1111 border-color: var(--mxch-primary-hover);
1112 }
1113
1114 /* ==========================================================================
1115 Rate Limits - Collapsible Accordion
1116 ========================================================================== */
1117 .mxch-rate-limits {
1118 border: 1px solid var(--mxch-card-border);
1119 border-radius: var(--mxch-radius-lg);
1120 overflow: hidden;
1121 }
1122
1123 .mxch-rate-limit-item {
1124 border-bottom: 1px solid var(--mxch-card-border);
1125 }
1126
1127 .mxch-rate-limit-item:last-child {
1128 border-bottom: none;
1129 }
1130
1131 .mxch-rate-limit-header {
1132 display: flex;
1133 align-items: center;
1134 justify-content: space-between;
1135 padding: var(--mxch-spacing-md) var(--mxch-spacing-lg);
1136 background: #fafbfc;
1137 cursor: pointer;
1138 transition: all var(--mxch-transition-fast);
1139 }
1140
1141 .mxch-rate-limit-header:hover {
1142 background: #f1f5f9;
1143 }
1144
1145 .mxch-rate-limit-role {
1146 font-weight: 600;
1147 color: var(--mxch-text-primary);
1148 font-size: 14px;
1149 }
1150
1151 .mxch-rate-limit-summary {
1152 display: flex;
1153 align-items: center;
1154 gap: var(--mxch-spacing-md);
1155 }
1156
1157 .mxch-rate-limit-badge {
1158 padding: 4px 10px;
1159 background: var(--mxch-primary-light);
1160 color: var(--mxch-primary);
1161 border-radius: 20px;
1162 font-size: 12px;
1163 font-weight: 600;
1164 }
1165
1166 .mxch-rate-limit-arrow {
1167 width: 20px;
1168 height: 20px;
1169 color: var(--mxch-text-muted);
1170 transition: transform var(--mxch-transition-fast);
1171 }
1172
1173 .mxch-rate-limit-item.expanded .mxch-rate-limit-arrow {
1174 transform: rotate(180deg);
1175 }
1176
1177 .mxch-rate-limit-body {
1178 display: none;
1179 padding: var(--mxch-spacing-lg);
1180 background: white;
1181 border-top: 1px solid var(--mxch-card-border);
1182 }
1183
1184 .mxch-rate-limit-item.expanded .mxch-rate-limit-body {
1185 display: block;
1186 }
1187
1188 .mxch-rate-limit-controls {
1189 display: flex;
1190 gap: var(--mxch-spacing-lg);
1191 margin-bottom: var(--mxch-spacing-md);
1192 }
1193
1194 .mxch-rate-limit-controls .mxch-field {
1195 flex: 1;
1196 margin-bottom: 0;
1197 }
1198
1199 /* Global cap "Current usage" readout (plan-mxchat-20260603-e9b3f9) */
1200 .mxch-rate-limit-usage {
1201 margin-top: var(--mxch-spacing-md);
1202 padding-top: var(--mxch-spacing-md);
1203 border-top: 1px solid var(--mxch-card-border);
1204 }
1205
1206 .mxch-rate-limit-usage-head {
1207 display: flex;
1208 align-items: center;
1209 justify-content: space-between;
1210 gap: var(--mxch-spacing-md);
1211 margin-bottom: var(--mxch-spacing-xs);
1212 }
1213
1214 /* ==========================================================================
1215 Buttons
1216 ========================================================================== */
1217 .mxch-btn {
1218 display: inline-flex;
1219 align-items: center;
1220 justify-content: center;
1221 gap: var(--mxch-spacing-sm);
1222 padding: 10px 18px;
1223 font-size: 14px;
1224 font-weight: 600;
1225 border-radius: var(--mxch-radius-md);
1226 cursor: pointer;
1227 transition: all var(--mxch-transition-fast);
1228 text-decoration: none;
1229 border: none;
1230 }
1231
1232 .mxch-btn-primary {
1233 background: var(--mxch-primary);
1234 color: white;
1235 }
1236
1237 .mxch-btn-primary:hover {
1238 background: var(--mxch-primary-hover);
1239 color: white;
1240 transform: translateY(-1px);
1241 box-shadow: 0 4px 12px rgba(120, 115, 245, 0.3);
1242 }
1243
1244 .mxch-btn-secondary {
1245 background: white;
1246 color: var(--mxch-text-primary);
1247 border: 1px solid var(--mxch-input-border);
1248 }
1249
1250 .mxch-btn-secondary:hover {
1251 background: #f8fafc;
1252 border-color: #c7c7c7;
1253 }
1254
1255 .mxch-btn-ghost {
1256 background: transparent;
1257 color: var(--mxch-text-secondary);
1258 }
1259
1260 .mxch-btn-ghost:hover {
1261 background: #f1f5f9;
1262 color: var(--mxch-text-primary);
1263 }
1264
1265 .mxch-btn-sm {
1266 padding: 6px 12px;
1267 font-size: 13px;
1268 }
1269
1270 .mxch-btn-lg {
1271 padding: 12px 24px;
1272 font-size: 15px;
1273 }
1274
1275 .mxch-btn-icon {
1276 width: 18px;
1277 height: 18px;
1278 }
1279
1280 /* ==========================================================================
1281 Content Sections (hidden by default, shown when active)
1282 ========================================================================== */
1283 .mxch-section {
1284 display: none;
1285 }
1286
1287 .mxch-section.active {
1288 display: block;
1289 animation: mxcFadeIn 0.2s ease;
1290 }
1291
1292 @keyframes mxcFadeIn {
1293 from {
1294 opacity: 0;
1295 transform: translateY(8px);
1296 }
1297 to {
1298 opacity: 1;
1299 transform: translateY(0);
1300 }
1301 }
1302
1303 /* ==========================================================================
1304 Info Notices
1305 ========================================================================== */
1306 .mxch-notice {
1307 display: flex;
1308 align-items: flex-start;
1309 gap: var(--mxch-spacing-sm);
1310 padding: var(--mxch-spacing-md);
1311 border-radius: var(--mxch-radius-md);
1312 font-size: 13px;
1313 line-height: 1.5;
1314 }
1315
1316 .mxch-notice-icon {
1317 width: 18px;
1318 height: 18px;
1319 flex-shrink: 0;
1320 margin-top: 1px;
1321 }
1322
1323 .mxch-notice-info {
1324 background: #eff6ff;
1325 color: #1e40af;
1326 border: 1px solid #bfdbfe;
1327 }
1328
1329 .mxch-notice-warning {
1330 background: #fffbeb;
1331 color: #92400e;
1332 border: 1px solid #fde68a;
1333 }
1334
1335 .mxch-notice-success {
1336 background: #ecfdf5;
1337 color: #065f46;
1338 border: 1px solid #a7f3d0;
1339 }
1340
1341 .mxch-notice-error {
1342 background: #fef2f2;
1343 color: #991b1b;
1344 border: 1px solid #fecaca;
1345 }
1346
1347 /* ==========================================================================
1348 Disclosure (collapsible <details>)
1349 Generic Advanced/opt-in surface — used for static-bearer fallback on
1350 mxchat-mcp's Connected Apps tab, and any add-on that needs the same
1351 "advanced/show more" pattern. Originally lived in plugins/mxchat-mcp/css/
1352 admin-mcp.css; elevated here so every add-on inherits via the standard
1353 admin-sidebar.css enqueue.
1354 ========================================================================== */
1355 .mxch-disclosure {
1356 margin-top: 16px;
1357 border: 1px solid var(--mxch-card-border, #e2e4e9);
1358 border-radius: var(--mxch-radius-md, 6px);
1359 background: #fbfcfd;
1360 }
1361 .mxch-disclosure[open] {
1362 background: #fff;
1363 }
1364 .mxch-disclosure-summary {
1365 display: flex;
1366 align-items: center;
1367 gap: 10px;
1368 padding: 10px 14px;
1369 cursor: pointer;
1370 list-style: none;
1371 user-select: none;
1372 color: var(--mxch-text-secondary, #57606a);
1373 font-size: 13px;
1374 font-weight: 600;
1375 }
1376 .mxch-disclosure-summary::-webkit-details-marker { display: none; }
1377 .mxch-disclosure-summary::before {
1378 content: "";
1379 display: inline-block;
1380 width: 8px;
1381 height: 8px;
1382 border-right: 2px solid currentColor;
1383 border-bottom: 2px solid currentColor;
1384 transform: rotate(-45deg);
1385 transition: transform 0.18s ease;
1386 margin-right: 2px;
1387 }
1388 .mxch-disclosure[open] > .mxch-disclosure-summary::before {
1389 transform: rotate(45deg);
1390 }
1391 .mxch-disclosure-summary svg {
1392 flex-shrink: 0;
1393 opacity: 0.7;
1394 }
1395 .mxch-disclosure-summary-text {
1396 color: var(--mxch-text-primary, #1d2327);
1397 font-weight: 600;
1398 }
1399 .mxch-disclosure-summary-hint {
1400 color: var(--mxch-text-secondary, #57606a);
1401 font-weight: 400;
1402 font-size: 12px;
1403 }
1404 .mxch-disclosure-summary:hover .mxch-disclosure-summary-text {
1405 color: var(--mxch-primary, #7873f5);
1406 }
1407 .mxch-disclosure-summary:focus-visible {
1408 outline: 2px solid var(--mxch-primary, #7873f5);
1409 outline-offset: 2px;
1410 border-radius: var(--mxch-radius-md, 6px);
1411 }
1412 .mxch-disclosure-body {
1413 padding: 8px 14px 14px 14px;
1414 border-top: 1px solid var(--mxch-card-border, #e2e4e9);
1415 }
1416 @media (max-width: 600px) {
1417 .mxch-disclosure-summary {
1418 flex-wrap: wrap;
1419 }
1420 .mxch-disclosure-summary-hint {
1421 flex-basis: 100%;
1422 margin-left: 18px;
1423 }
1424 }
1425
1426 /* ==========================================================================
1427 Quick Questions List
1428 ========================================================================== */
1429 .mxch-quick-questions {
1430 display: flex;
1431 flex-direction: column;
1432 gap: var(--mxch-spacing-sm);
1433 }
1434
1435 .mxch-quick-question-item {
1436 display: flex;
1437 align-items: center;
1438 gap: var(--mxch-spacing-sm);
1439 padding: var(--mxch-spacing-sm);
1440 background: #f8fafc;
1441 border: 1px solid var(--mxch-card-border);
1442 border-radius: var(--mxch-radius-md);
1443 }
1444
1445 .mxch-quick-question-item .mxch-input {
1446 flex: 1;
1447 background: white;
1448 }
1449
1450 .mxch-quick-question-remove {
1451 padding: 6px;
1452 background: none;
1453 border: none;
1454 color: var(--mxch-text-muted);
1455 cursor: pointer;
1456 border-radius: var(--mxch-radius-sm);
1457 transition: all var(--mxch-transition-fast);
1458 }
1459
1460 .mxch-quick-question-remove:hover {
1461 background: #fee2e2;
1462 color: var(--mxch-error);
1463 }
1464
1465 .mxch-quick-question-add {
1466 display: flex;
1467 align-items: center;
1468 justify-content: center;
1469 gap: var(--mxch-spacing-xs);
1470 padding: var(--mxch-spacing-sm);
1471 border: 2px dashed var(--mxch-card-border);
1472 border-radius: var(--mxch-radius-md);
1473 color: var(--mxch-text-muted);
1474 background: none;
1475 cursor: pointer;
1476 font-size: 13px;
1477 transition: all var(--mxch-transition-fast);
1478 }
1479
1480 .mxch-quick-question-add:hover {
1481 border-color: var(--mxch-primary);
1482 color: var(--mxch-primary);
1483 background: var(--mxch-primary-lighter);
1484 }
1485
1486 /* ==========================================================================
1487 Tutorials Grid (for YouTube Tutorials section)
1488 ========================================================================== */
1489 .mxch-tutorials-grid {
1490 display: grid;
1491 grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
1492 gap: var(--mxch-spacing-lg);
1493 }
1494
1495 .mxch-tutorial-card {
1496 background: white;
1497 border: 1px solid var(--mxch-card-border);
1498 border-radius: var(--mxch-radius-lg);
1499 overflow: hidden;
1500 transition: all var(--mxch-transition);
1501 }
1502
1503 .mxch-tutorial-card:hover {
1504 box-shadow: var(--mxch-card-shadow-hover);
1505 transform: translateY(-2px);
1506 }
1507
1508 .mxch-tutorial-content {
1509 padding: var(--mxch-spacing-md);
1510 }
1511
1512 .mxch-tutorial-title {
1513 font-size: 15px;
1514 font-weight: 600;
1515 color: var(--mxch-text-primary);
1516 margin: 0 0 var(--mxch-spacing-sm) 0;
1517 }
1518
1519 .mxch-tutorial-description {
1520 font-size: 13px;
1521 color: var(--mxch-text-secondary);
1522 margin: 0 0 var(--mxch-spacing-md) 0;
1523 line-height: 1.5;
1524 }
1525
1526 .mxch-tutorial-link {
1527 display: inline-flex;
1528 align-items: center;
1529 gap: var(--mxch-spacing-xs);
1530 color: var(--mxch-primary);
1531 font-size: 13px;
1532 font-weight: 600;
1533 text-decoration: none;
1534 }
1535
1536 .mxch-tutorial-link:hover {
1537 text-decoration: underline;
1538 }
1539
1540 /* ==========================================================================
1541 Autosave Indicator
1542 ========================================================================== */
1543 .mxch-autosave-indicator {
1544 display: flex;
1545 align-items: center;
1546 gap: var(--mxch-spacing-xs);
1547 font-size: 12px;
1548 color: var(--mxch-text-muted);
1549 padding: var(--mxch-spacing-xs) var(--mxch-spacing-sm);
1550 background: #f1f5f9;
1551 border-radius: 20px;
1552 }
1553
1554 .mxch-autosave-indicator.saving {
1555 color: var(--mxch-warning);
1556 }
1557
1558 .mxch-autosave-indicator.saved {
1559 color: var(--mxch-success);
1560 }
1561
1562 .mxch-autosave-dot {
1563 width: 6px;
1564 height: 6px;
1565 border-radius: 50%;
1566 background: currentColor;
1567 }
1568
1569 /* ==========================================================================
1570 Mobile Header (Hidden on Desktop)
1571 ========================================================================== */
1572 .mxch-mobile-header {
1573 display: none;
1574 }
1575
1576 /* ==========================================================================
1577 Mobile Menu Overlay
1578 ========================================================================== */
1579 .mxch-mobile-overlay {
1580 display: none;
1581 }
1582
1583 /* ==========================================================================
1584 Mobile Menu Modal
1585 ========================================================================== */
1586 .mxch-mobile-menu {
1587 display: none;
1588 }
1589
1590 /* ==========================================================================
1591 Responsive Design
1592 ========================================================================== */
1593 @media screen and (max-width: 1200px) {
1594 .mxch-sidebar {
1595 width: 220px;
1596 min-width: 220px;
1597 }
1598
1599 .mxch-content {
1600 padding: var(--mxch-spacing-lg);
1601 }
1602 }
1603
1604 @media screen and (max-width: 960px) {
1605 /* Hide desktop sidebar on mobile */
1606 .mxch-sidebar {
1607 display: none;
1608 }
1609
1610 /* Show mobile header */
1611 .mxch-mobile-header {
1612 display: flex;
1613 align-items: center;
1614 justify-content: space-between;
1615 padding: 12px 16px;
1616 background: var(--mxch-sidebar-bg);
1617 position: sticky;
1618 top: 0;
1619 z-index: 100;
1620 flex-shrink: 0;
1621 border-bottom: 4px solid transparent;
1622 border-image: linear-gradient(135deg, #fa73e6, #7873f5, #3ac9d1);
1623 border-image-slice: 1;
1624 }
1625
1626 .mxch-mobile-header::before {
1627 content: '';
1628 position: absolute;
1629 top: 0;
1630 left: 0;
1631 width: 100%;
1632 height: 100%;
1633 background: radial-gradient(circle at center, rgba(250, 115, 230, 0.08) 0%, rgba(120, 115, 245, 0.08) 50%, rgba(58, 201, 209, 0.08) 100%);
1634 z-index: -1;
1635 }
1636
1637 .mxch-mobile-logo {
1638 display: flex;
1639 align-items: center;
1640 gap: 8px;
1641 text-decoration: none;
1642 }
1643
1644 .mxch-mobile-logo-icon {
1645 width: 28px;
1646 height: 28px;
1647 flex-shrink: 0;
1648 }
1649
1650 .mxch-mobile-logo-icon img {
1651 width: 100%;
1652 height: 100%;
1653 object-fit: contain;
1654 }
1655
1656 .mxch-mobile-logo-text {
1657 font-size: 18px;
1658 font-weight: 700;
1659 color: #ffffff;
1660 letter-spacing: -0.5px;
1661 }
1662
1663 .mxch-mobile-menu-btn {
1664 display: flex;
1665 align-items: center;
1666 justify-content: center;
1667 width: 40px;
1668 height: 40px;
1669 background: rgba(255, 255, 255, 0.1);
1670 border: none;
1671 border-radius: 8px;
1672 color: #ffffff;
1673 cursor: pointer;
1674 transition: background 0.15s ease;
1675 }
1676
1677 .mxch-mobile-menu-btn:hover {
1678 background: rgba(255, 255, 255, 0.15);
1679 }
1680
1681 /* Mobile Overlay */
1682 .mxch-mobile-overlay {
1683 display: block;
1684 position: fixed;
1685 top: 46px; /* Account for WordPress admin bar on mobile (46px on smaller screens) */
1686 left: 0;
1687 right: 0;
1688 bottom: 0;
1689 background: rgba(0, 0, 0, 0.5);
1690 z-index: 998;
1691 opacity: 0;
1692 visibility: hidden;
1693 transition: opacity 0.3s ease, visibility 0.3s ease;
1694 }
1695
1696 .mxch-mobile-overlay.open {
1697 opacity: 1;
1698 visibility: visible;
1699 }
1700
1701 /* Mobile Menu Modal */
1702 .mxch-mobile-menu {
1703 display: flex;
1704 flex-direction: column;
1705 position: fixed;
1706 top: 46px; /* Account for WordPress admin bar on mobile (46px on smaller screens) */
1707 right: 0;
1708 bottom: 0;
1709 width: 300px;
1710 max-width: 85vw;
1711 background: var(--mxch-sidebar-bg);
1712 z-index: 999;
1713 transform: translateX(100%);
1714 transition: transform 0.3s ease;
1715 overflow: hidden;
1716 overflow-x: hidden;
1717 box-sizing: border-box;
1718 }
1719
1720 .mxch-mobile-menu::before {
1721 content: '';
1722 position: absolute;
1723 top: 0;
1724 left: 0;
1725 width: 100%;
1726 height: 100%;
1727 background: radial-gradient(circle at center, rgba(250, 115, 230, 0.08) 0%, rgba(120, 115, 245, 0.08) 50%, rgba(58, 201, 209, 0.08) 100%);
1728 z-index: 0;
1729 pointer-events: none;
1730 }
1731
1732 .mxch-mobile-menu.open {
1733 transform: translateX(0);
1734 }
1735
1736 .mxch-mobile-menu-header {
1737 display: flex;
1738 align-items: center;
1739 justify-content: space-between;
1740 padding: 16px 20px;
1741 border-bottom: 4px solid transparent;
1742 border-image: linear-gradient(135deg, #fa73e6, #7873f5, #3ac9d1);
1743 border-image-slice: 1;
1744 position: relative;
1745 z-index: 1;
1746 }
1747
1748 .mxch-mobile-menu-title {
1749 font-size: 16px;
1750 font-weight: 600;
1751 color: #ffffff;
1752 }
1753
1754 .mxch-mobile-menu-close {
1755 display: flex;
1756 align-items: center;
1757 justify-content: center;
1758 width: 36px;
1759 height: 36px;
1760 background: rgba(255, 255, 255, 0.1);
1761 border: none;
1762 border-radius: 8px;
1763 color: #ffffff;
1764 cursor: pointer;
1765 transition: background 0.15s ease;
1766 }
1767
1768 .mxch-mobile-menu-close:hover {
1769 background: rgba(255, 255, 255, 0.15);
1770 }
1771
1772 .mxch-mobile-menu-nav {
1773 flex: 1;
1774 overflow-y: auto;
1775 padding: 16px 0;
1776 position: relative;
1777 z-index: 1;
1778 }
1779
1780 .mxch-mobile-nav-section {
1781 margin-bottom: 8px;
1782 }
1783
1784 .mxch-mobile-nav-section-title {
1785 font-size: 11px;
1786 font-weight: 600;
1787 text-transform: uppercase;
1788 letter-spacing: 0.5px;
1789 color: var(--mxch-sidebar-text);
1790 padding: 12px 20px 8px;
1791 opacity: 0.7;
1792 }
1793
1794 .mxch-mobile-nav-link {
1795 display: flex;
1796 align-items: center;
1797 gap: 10px;
1798 width: 100%;
1799 padding: 12px 20px;
1800 background: none;
1801 border: none;
1802 color: var(--mxch-sidebar-text);
1803 font-size: 14px;
1804 font-weight: 500;
1805 text-align: left;
1806 cursor: pointer;
1807 transition: all 0.15s ease;
1808 }
1809
1810 .mxch-mobile-nav-link:hover {
1811 background: rgba(255, 255, 255, 0.05);
1812 color: #ffffff;
1813 }
1814
1815 .mxch-mobile-nav-link.active {
1816 background: var(--mxch-sidebar-active-bg);
1817 color: #ffffff;
1818 }
1819
1820 .mxch-mobile-nav-link.expanded {
1821 background: rgba(255, 255, 255, 0.05);
1822 color: #ffffff;
1823 }
1824
1825 .mxch-mobile-nav-link span {
1826 flex: 1;
1827 }
1828
1829 /* Prevent addon status dot from expanding - override flex: 1 from above */
1830 .mxch-mobile-nav-link .mxch-addon-status-dot {
1831 flex: 0 0 8px;
1832 width: 8px;
1833 height: 8px;
1834 }
1835
1836 .mxch-mobile-nav-arrow {
1837 opacity: 0.5;
1838 transition: transform 0.2s ease;
1839 }
1840
1841 .mxch-mobile-nav-link.expanded .mxch-mobile-nav-arrow {
1842 transform: rotate(90deg);
1843 opacity: 1;
1844 }
1845
1846 /* Mobile Sub Navigation */
1847 .mxch-mobile-nav-sub {
1848 display: none;
1849 background: rgba(0, 0, 0, 0.2);
1850 }
1851
1852 .mxch-mobile-nav-sub.expanded {
1853 display: block;
1854 }
1855
1856 .mxch-mobile-nav-sub-link {
1857 display: flex;
1858 align-items: center;
1859 gap: 8px;
1860 width: 100%;
1861 padding: 10px 20px 10px 52px;
1862 background: none;
1863 border: none;
1864 color: var(--mxch-sidebar-text);
1865 font-size: 13px;
1866 text-align: left;
1867 cursor: pointer;
1868 transition: all 0.15s ease;
1869 }
1870
1871 .mxch-mobile-nav-sub-link::before {
1872 content: '';
1873 width: 6px;
1874 height: 6px;
1875 border-radius: 50%;
1876 background: currentColor;
1877 opacity: 0.4;
1878 }
1879
1880 .mxch-mobile-nav-sub-link:hover {
1881 background: rgba(255, 255, 255, 0.03);
1882 color: #ffffff;
1883 }
1884
1885 .mxch-mobile-nav-sub-link.active {
1886 color: var(--mxch-primary);
1887 background: rgba(120, 115, 245, 0.1);
1888 }
1889
1890 .mxch-mobile-nav-sub-link.active::before {
1891 opacity: 1;
1892 background: var(--mxch-primary);
1893 }
1894
1895 /* Mobile Menu Footer */
1896 .mxch-mobile-menu-footer {
1897 padding: 16px 20px;
1898 border-top: 1px solid rgba(255, 255, 255, 0.1);
1899 position: relative;
1900 z-index: 1;
1901 box-sizing: border-box;
1902 max-width: 100%;
1903 overflow: hidden;
1904 }
1905
1906 .mxch-mobile-upgrade-btn {
1907 display: flex;
1908 align-items: center;
1909 justify-content: center;
1910 gap: 8px;
1911 width: 100%;
1912 padding: 12px 16px;
1913 background: linear-gradient(135deg, var(--mxch-primary), #a78bfa);
1914 border-radius: 8px;
1915 color: white;
1916 text-decoration: none;
1917 font-size: 14px;
1918 font-weight: 600;
1919 transition: all 0.15s ease;
1920 box-sizing: border-box;
1921 max-width: 100%;
1922 }
1923
1924 .mxch-mobile-upgrade-btn:hover {
1925 transform: translateY(-1px);
1926 box-shadow: 0 4px 12px rgba(120, 115, 245, 0.4);
1927 color: white;
1928 }
1929
1930 /* Adjust main layout for mobile */
1931 .mxch-admin-wrapper {
1932 flex-direction: column;
1933 position: fixed;
1934 left: 0;
1935 right: 0;
1936 overflow: auto;
1937 }
1938
1939 .mxch-content {
1940 height: auto;
1941 overflow: visible;
1942 padding: var(--mxch-spacing-lg);
1943 width: 100%;
1944 box-sizing: border-box;
1945 }
1946
1947 /* Center content sections on mobile */
1948 .mxch-content-section {
1949 max-width: 100%;
1950 margin-left: auto;
1951 margin-right: auto;
1952 }
1953
1954 .mxch-rate-limit-controls {
1955 flex-direction: column;
1956 }
1957
1958 /* Card headers stack on mobile */
1959 .mxch-card-header {
1960 flex-direction: column;
1961 align-items: stretch;
1962 gap: 12px;
1963 }
1964
1965 /* Content header adjustments */
1966 .mxch-content-header {
1967 margin-bottom: var(--mxch-spacing-md);
1968 }
1969
1970 .mxch-content-title {
1971 font-size: 20px;
1972 }
1973 }
1974
1975 @media screen and (max-width: 600px) {
1976 .mxch-content {
1977 padding: var(--mxch-spacing-md);
1978 }
1979
1980 .mxch-card-body {
1981 padding: var(--mxch-spacing-md);
1982 }
1983
1984 .mxch-card {
1985 margin-left: 0;
1986 margin-right: 0;
1987 }
1988
1989 .mxch-pro-banner {
1990 flex-direction: column;
1991 text-align: center;
1992 padding: 16px;
1993 margin-left: 0;
1994 margin-right: 0;
1995 max-width: 100%;
1996 box-sizing: border-box;
1997 }
1998
1999 .mxch-pro-banner-content {
2000 max-width: 100%;
2001 }
2002
2003 .mxch-pro-banner-title {
2004 justify-content: center;
2005 font-size: 13px;
2006 }
2007
2008 .mxch-pro-banner-text {
2009 font-size: 12px;
2010 }
2011
2012 .mxch-pro-banner-btn {
2013 width: auto;
2014 max-width: 100%;
2015 padding: 10px 16px;
2016 font-size: 12px;
2017 justify-content: center;
2018 box-sizing: border-box;
2019 }
2020
2021 .mxch-field-row {
2022 flex-direction: column;
2023 }
2024
2025 .mxch-api-key-wrapper {
2026 flex-direction: column;
2027 }
2028
2029 .mxch-mobile-menu {
2030 width: 100%;
2031 max-width: 100%;
2032 }
2033 }
2034
2035 /* ==========================================================================
2036 WordPress Admin Overrides
2037 ========================================================================== */
2038 .mxch-admin-wrapper .form-table {
2039 margin: 0;
2040 }
2041
2042 .mxch-admin-wrapper .form-table th {
2043 padding: 0;
2044 width: auto;
2045 }
2046
2047 .mxch-admin-wrapper .form-table td {
2048 padding: 0;
2049 }
2050
2051 .mxch-admin-wrapper .form-table tr {
2052 display: block;
2053 margin-bottom: var(--mxch-spacing-lg);
2054 }
2055
2056 .mxch-admin-wrapper .form-table tr:last-child {
2057 margin-bottom: 0;
2058 }
2059
2060 /* ==========================================================================
2061 Autosave Feedback Indicators
2062 ========================================================================== */
2063 .mxch-admin-wrapper .feedback-container {
2064 display: inline-flex;
2065 align-items: center;
2066 margin-left: 10px;
2067 position: relative;
2068 z-index: 10;
2069 vertical-align: middle;
2070 }
2071
2072 .mxch-admin-wrapper .saving-spinner {
2073 width: 16px;
2074 height: 16px;
2075 border: 2px solid #e2e8f0;
2076 border-top-color: var(--mxch-primary);
2077 border-radius: 50%;
2078 animation: mxcSpin 0.6s linear infinite;
2079 }
2080
2081 .mxch-admin-wrapper .success-icon {
2082 display: none;
2083 color: var(--mxch-success);
2084 font-size: 16px;
2085 font-weight: bold;
2086 margin-left: 5px;
2087 }
2088
2089 @keyframes mxcSpin {
2090 to {
2091 transform: rotate(360deg);
2092 }
2093 }
2094
2095 /* Ensure feedback container appears inline with toggles */
2096 .mxch-admin-wrapper .toggle-switch + .feedback-container,
2097 .mxch-admin-wrapper .mxchat-toggle-switch + .feedback-container,
2098 .mxch-admin-wrapper label.toggle-switch ~ .feedback-container {
2099 display: inline-flex;
2100 vertical-align: middle;
2101 }
2102
2103 /* Position feedback near inputs - use inline for form-table context */
2104 .mxch-admin-wrapper .form-table input + .feedback-container,
2105 .mxch-admin-wrapper .form-table select + .feedback-container,
2106 .mxch-admin-wrapper .form-table textarea + .feedback-container {
2107 position: relative;
2108 display: inline-flex;
2109 vertical-align: middle;
2110 margin-left: 10px;
2111 right: auto;
2112 top: auto;
2113 transform: none;
2114 }
2115
2116 /* Position feedback near inputs - absolute for card layouts with field-control */
2117 .mxch-admin-wrapper .mxch-field-control input + .feedback-container,
2118 .mxch-admin-wrapper .mxch-field-control select + .feedback-container,
2119 .mxch-admin-wrapper .mxch-field-control textarea + .feedback-container {
2120 position: absolute;
2121 right: -30px;
2122 top: 50%;
2123 transform: translateY(-50%);
2124 }
2125
2126 /* Make input containers relative for absolute positioning */
2127 .mxch-admin-wrapper .mxch-field-control {
2128 position: relative;
2129 }
2130
2131 /* Feedback inside slider container */
2132 .mxch-admin-wrapper .slider-container + .feedback-container {
2133 margin-left: 15px;
2134 }
2135
2136 /* ==========================================================================
2137 Real-time Entry Updates
2138 ========================================================================== */
2139
2140 /* New entry highlight animation */
2141 .mxchat-new-entry {
2142 background-color: rgba(120, 115, 245, 0.15);
2143 animation: mxchatNewEntryFade 2s ease-out forwards;
2144 }
2145
2146 @keyframes mxchatNewEntryFade {
2147 0% {
2148 background-color: rgba(120, 115, 245, 0.25);
2149 }
2150 100% {
2151 background-color: transparent;
2152 }
2153 }
2154
2155 /* Count update flash */
2156 #mxchat-entry-count.mxchat-count-updated,
2157 #mxchat-sidebar-count.mxchat-count-updated {
2158 animation: mxchatCountPulse 0.5s ease-out;
2159 }
2160
2161 @keyframes mxchatCountPulse {
2162 0% {
2163 color: var(--mxch-primary);
2164 transform: scale(1.2);
2165 }
2166 100% {
2167 color: var(--mxch-text-secondary);
2168 transform: scale(1);
2169 }
2170 }
2171
2172 /* Sidebar badge specific pulse - keep white text on purple background */
2173 #mxchat-sidebar-count.mxchat-count-updated {
2174 animation: mxchatSidebarCountPulse 0.5s ease-out;
2175 }
2176
2177 @keyframes mxchatSidebarCountPulse {
2178 0% {
2179 transform: scale(1.3);
2180 background: var(--mxch-success);
2181 }
2182 100% {
2183 transform: scale(1);
2184 background: var(--mxch-primary);
2185 }
2186 }
2187
2188 /* ==========================================================================
2189 Pro Upgrade v2 - Cleaner, More Professional Design
2190 ========================================================================== */
2191
2192 /* Sidebar Upgrade Button - v2 (Concise) */
2193 .mxch-sidebar-upgrade-v2 {
2194 display: flex;
2195 align-items: center;
2196 justify-content: center;
2197 gap: 8px;
2198 padding: 10px 16px;
2199 background: rgba(120, 115, 245, 0.1);
2200 border: 1px solid rgba(120, 115, 245, 0.25);
2201 border-radius: var(--mxch-radius-md);
2202 color: #c4c1ff;
2203 text-decoration: none;
2204 font-size: 13px;
2205 font-weight: 500;
2206 transition: all 0.2s ease;
2207 position: relative;
2208 }
2209
2210 .mxch-sidebar-upgrade-v2:hover {
2211 background: rgba(120, 115, 245, 0.2);
2212 border-color: rgba(120, 115, 245, 0.5);
2213 color: #ffffff;
2214 text-decoration: none;
2215 }
2216
2217 .mxch-sidebar-upgrade-v2:focus {
2218 outline: none;
2219 box-shadow: 0 0 0 2px rgba(120, 115, 245, 0.4);
2220 }
2221
2222 .mxch-sidebar-upgrade-v2 svg {
2223 width: 14px;
2224 height: 14px;
2225 opacity: 0.8;
2226 flex-shrink: 0;
2227 }
2228
2229 .mxch-sidebar-upgrade-v2:hover svg {
2230 opacity: 1;
2231 }
2232
2233 /* Pro Banner - v2 (Clean & Minimal) */
2234 .mxch-pro-banner-v2 {
2235 display: flex;
2236 align-items: center;
2237 justify-content: space-between;
2238 gap: 20px;
2239 padding: 14px 20px;
2240 background: linear-gradient(135deg, rgba(120, 115, 245, 0.08) 0%, rgba(167, 139, 250, 0.06) 100%);
2241 border: 1px solid rgba(120, 115, 245, 0.15);
2242 border-radius: var(--mxch-radius-md);
2243 margin-bottom: var(--mxch-spacing-lg);
2244 }
2245
2246 .mxch-pro-banner-v2-content {
2247 display: flex;
2248 align-items: center;
2249 gap: 12px;
2250 flex: 1;
2251 min-width: 0;
2252 }
2253
2254 .mxch-pro-banner-v2-icon {
2255 width: 32px;
2256 height: 32px;
2257 display: flex;
2258 align-items: center;
2259 justify-content: center;
2260 background: linear-gradient(135deg, var(--mxch-primary) 0%, #a78bfa 100%);
2261 border-radius: 8px;
2262 flex-shrink: 0;
2263 }
2264
2265 .mxch-pro-banner-v2-icon svg {
2266 width: 16px;
2267 height: 16px;
2268 color: white;
2269 }
2270
2271 .mxch-pro-banner-v2-text {
2272 flex: 1;
2273 min-width: 0;
2274 }
2275
2276 .mxch-pro-banner-v2-title {
2277 font-size: 14px;
2278 font-weight: 600;
2279 color: var(--mxch-text-primary);
2280 margin: 0 0 2px 0;
2281 }
2282
2283 .mxch-pro-banner-v2-desc {
2284 font-size: 12px;
2285 color: var(--mxch-text-secondary);
2286 margin: 0;
2287 line-height: 1.4;
2288 }
2289
2290 .mxch-pro-banner-v2-btn {
2291 display: inline-flex;
2292 align-items: center;
2293 gap: 6px;
2294 padding: 8px 16px;
2295 background: var(--mxch-primary);
2296 color: white;
2297 font-size: 13px;
2298 font-weight: 500;
2299 border-radius: 6px;
2300 text-decoration: none;
2301 transition: all 0.2s ease;
2302 white-space: nowrap;
2303 flex-shrink: 0;
2304 }
2305
2306 .mxch-pro-banner-v2-btn:hover {
2307 background: var(--mxch-primary-hover);
2308 color: white;
2309 text-decoration: none;
2310 transform: translateY(-1px);
2311 box-shadow: 0 4px 12px rgba(120, 115, 245, 0.3);
2312 }
2313
2314 .mxch-pro-banner-v2-btn:focus {
2315 outline: none;
2316 box-shadow: 0 0 0 3px rgba(120, 115, 245, 0.3);
2317 }
2318
2319 .mxch-pro-banner-v2-btn svg {
2320 width: 14px;
2321 height: 14px;
2322 }
2323
2324 /* Mobile responsive for v2 banner */
2325 @media screen and (max-width: 600px) {
2326 .mxch-pro-banner-v2 {
2327 flex-direction: column;
2328 text-align: center;
2329 padding: 16px;
2330 gap: 12px;
2331 }
2332
2333 .mxch-pro-banner-v2-content {
2334 flex-direction: column;
2335 }
2336
2337 .mxch-pro-banner-v2-btn {
2338 width: 100%;
2339 justify-content: center;
2340 }
2341 }
2342
2343 /* ==========================================================================
2344 API Key Fields - Prevent Browser Autofill
2345 ========================================================================== */
2346
2347 /* Mask API key fields like password fields but avoid browser password autofill */
2348 .mxchat-api-key-field {
2349 -webkit-text-security: disc;
2350 text-security: disc;
2351 font-family: monospace;
2352 }
2353
2354 /* Show actual text when focused or when show button toggled */
2355 .mxchat-api-key-field.mxchat-show-key {
2356 -webkit-text-security: none;
2357 text-security: none;
2358 }
2359
2360 /* ==========================================================================
2361 Debug & Optimization Tools
2362 ========================================================================== */
2363
2364 /* Debug Log Viewer */
2365 .mxchat-debug-log-viewer {
2366 max-height: 400px;
2367 overflow-y: auto;
2368 background: #f8fafc;
2369 border: 1px solid var(--mxch-card-border, #e2e4e9);
2370 border-radius: 8px;
2371 padding: 0;
2372 }
2373
2374 .mxchat-debug-log-empty {
2375 display: flex;
2376 flex-direction: column;
2377 align-items: center;
2378 justify-content: center;
2379 padding: 48px 24px;
2380 text-align: center;
2381 color: #64748b;
2382 }
2383
2384 .mxchat-debug-log-empty p {
2385 margin: 16px 0 0;
2386 font-size: 14px;
2387 }
2388
2389 .mxchat-debug-log-entries {
2390 padding: 12px;
2391 }
2392
2393 .mxchat-debug-log-entry {
2394 background: #ffffff;
2395 border: 1px solid #e2e8f0;
2396 border-radius: 8px;
2397 padding: 12px;
2398 margin-bottom: 8px;
2399 font-size: 13px;
2400 }
2401
2402 .mxchat-debug-log-entry:last-child {
2403 margin-bottom: 0;
2404 }
2405
2406 .mxchat-log-header {
2407 display: flex;
2408 justify-content: space-between;
2409 align-items: center;
2410 margin-bottom: 8px;
2411 }
2412
2413 .mxchat-log-type {
2414 display: inline-block;
2415 padding: 2px 8px;
2416 border-radius: 4px;
2417 font-size: 10px;
2418 font-weight: 600;
2419 text-transform: uppercase;
2420 letter-spacing: 0.5px;
2421 background: #e2e8f0;
2422 color: #475569;
2423 }
2424
2425 .mxchat-log-type-settings_save .mxchat-log-type {
2426 background: #dbeafe;
2427 color: #1e40af;
2428 }
2429
2430 .mxchat-log-type-debug_mode .mxchat-log-type {
2431 background: #fef3c7;
2432 color: #92400e;
2433 }
2434
2435 .mxchat-log-type-api_error .mxchat-log-type {
2436 background: #fee2e2;
2437 color: #991b1b;
2438 }
2439
2440 .mxchat-log-type-reset .mxchat-log-type {
2441 background: #fce7f3;
2442 color: #9d174d;
2443 }
2444
2445 .mxchat-log-type-settings_export .mxchat-log-type {
2446 background: #d1fae5;
2447 color: #065f46;
2448 }
2449
2450 .mxchat-log-time {
2451 font-size: 11px;
2452 color: #94a3b8;
2453 }
2454
2455 .mxchat-log-message {
2456 color: #334155;
2457 line-height: 1.5;
2458 }
2459
2460 .mxchat-log-data {
2461 margin-top: 8px;
2462 padding: 8px;
2463 background: #f1f5f9;
2464 border-radius: 4px;
2465 font-family: monospace;
2466 font-size: 11px;
2467 color: #64748b;
2468 white-space: pre-wrap;
2469 word-break: break-all;
2470 }
2471
2472 /* Settings Tools Grid */
2473 .mxch-tools-grid {
2474 display: grid;
2475 grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
2476 gap: 24px;
2477 }
2478
2479 .mxch-tool-item {
2480 display: flex;
2481 gap: 16px;
2482 padding: 20px;
2483 background: #f8fafc;
2484 border: 1px solid #e2e8f0;
2485 border-radius: 12px;
2486 transition: all 0.2s ease;
2487 }
2488
2489 .mxch-tool-item:hover {
2490 border-color: var(--mxch-primary, #7873f5);
2491 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
2492 }
2493
2494 .mxch-tool-item-danger {
2495 border-color: #fecaca;
2496 background: #fef2f2;
2497 }
2498
2499 .mxch-tool-item-danger:hover {
2500 border-color: #ef4444;
2501 }
2502
2503 .mxch-tool-icon {
2504 flex-shrink: 0;
2505 width: 48px;
2506 height: 48px;
2507 display: flex;
2508 align-items: center;
2509 justify-content: center;
2510 background: #ffffff;
2511 border-radius: 10px;
2512 color: var(--mxch-primary, #7873f5);
2513 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
2514 }
2515
2516 .mxch-tool-item-danger .mxch-tool-icon {
2517 color: #ef4444;
2518 }
2519
2520 .mxch-tool-content h4 {
2521 margin: 0 0 6px;
2522 font-size: 15px;
2523 font-weight: 600;
2524 color: #1e293b;
2525 }
2526
2527 .mxch-tool-content p {
2528 margin: 0 0 12px;
2529 font-size: 13px;
2530 color: #64748b;
2531 line-height: 1.5;
2532 }
2533
2534 /* Danger Button */
2535 .mxch-btn-danger {
2536 background: #ef4444 !important;
2537 color: #ffffff !important;
2538 border-color: #ef4444 !important;
2539 }
2540
2541 .mxch-btn-danger:hover {
2542 background: #dc2626 !important;
2543 border-color: #dc2626 !important;
2544 }
2545
2546 /* Badge Styles */
2547 .mxch-badge {
2548 display: inline-flex;
2549 align-items: center;
2550 padding: 4px 10px;
2551 font-size: 12px;
2552 font-weight: 500;
2553 border-radius: 20px;
2554 background: #e2e8f0;
2555 color: #475569;
2556 }
2557
2558 .mxch-badge-warning {
2559 background: #fef3c7;
2560 color: #92400e;
2561 }
2562
2563 .mxch-badge-success {
2564 background: #d1fae5;
2565 color: #065f46;
2566 }
2567
2568 .mxch-badge-error {
2569 background: #fee2e2;
2570 color: #991b1b;
2571 }
2572
2573 /* Modal Styles */
2574 .mxch-modal {
2575 position: fixed;
2576 top: 0;
2577 left: 0;
2578 right: 0;
2579 bottom: 0;
2580 z-index: 100000;
2581 display: flex;
2582 align-items: center;
2583 justify-content: center;
2584 }
2585
2586 .mxch-modal-backdrop {
2587 position: absolute;
2588 top: 0;
2589 left: 0;
2590 right: 0;
2591 bottom: 0;
2592 background: rgba(0, 0, 0, 0.5);
2593 }
2594
2595 .mxch-modal-content {
2596 position: relative;
2597 width: 100%;
2598 max-width: 480px;
2599 background: #ffffff;
2600 border-radius: 16px;
2601 box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
2602 margin: 20px;
2603 }
2604
2605 .mxch-modal-header {
2606 display: flex;
2607 justify-content: space-between;
2608 align-items: center;
2609 padding: 20px 24px;
2610 border-bottom: 1px solid #e2e8f0;
2611 }
2612
2613 .mxch-modal-header h3 {
2614 margin: 0;
2615 font-size: 18px;
2616 font-weight: 600;
2617 color: #1e293b;
2618 }
2619
2620 .mxch-modal-close {
2621 width: 32px;
2622 height: 32px;
2623 display: flex;
2624 align-items: center;
2625 justify-content: center;
2626 background: none;
2627 border: none;
2628 font-size: 24px;
2629 color: #64748b;
2630 cursor: pointer;
2631 border-radius: 8px;
2632 transition: all 0.2s ease;
2633 }
2634
2635 .mxch-modal-close:hover {
2636 background: #f1f5f9;
2637 color: #1e293b;
2638 }
2639
2640 .mxch-modal-body {
2641 padding: 24px;
2642 }
2643
2644 .mxch-modal-footer {
2645 display: flex;
2646 justify-content: flex-end;
2647 gap: 12px;
2648 padding: 16px 24px;
2649 border-top: 1px solid #e2e8f0;
2650 background: #f8fafc;
2651 border-radius: 0 0 16px 16px;
2652 }
2653
2654 /* Input in modal */
2655 .mxch-input {
2656 width: 100%;
2657 padding: 10px 14px;
2658 font-size: 14px;
2659 border: 1px solid #d1d5db;
2660 border-radius: 8px;
2661 transition: all 0.2s ease;
2662 }
2663
2664 .mxch-input:focus {
2665 outline: none;
2666 border-color: var(--mxch-primary, #7873f5);
2667 box-shadow: 0 0 0 3px rgba(120, 115, 245, 0.1);
2668 }
2669
2670 /* Responsive adjustments for tools */
2671 @media screen and (max-width: 768px) {
2672 .mxch-tools-grid {
2673 grid-template-columns: 1fr;
2674 }
2675
2676 .mxch-tool-item {
2677 flex-direction: column;
2678 text-align: center;
2679 }
2680
2681 .mxch-tool-icon {
2682 margin: 0 auto;
2683 }
2684
2685 .mxchat-debug-log-viewer {
2686 max-height: 300px;
2687 }
2688
2689 .mxch-modal-content {
2690 margin: 10px;
2691 }
2692 }
2693
2694 /* ============================================================
2695 Dashboard page (Setup Assistant + dashboard cards)
2696 Added with plan-mxchat-20260526-704e25.
2697 ============================================================ */
2698
2699 .mxch-setup-card .mxch-card-body {
2700 padding-top: var(--mxch-spacing-md);
2701 }
2702
2703 .mxch-progress-bar {
2704 height: 6px;
2705 background: var(--mxch-card-border, #e5e7eb);
2706 border-radius: 999px;
2707 overflow: hidden;
2708 margin: var(--mxch-spacing-sm) 0 var(--mxch-spacing-xs);
2709 }
2710
2711 .mxch-progress-bar-fill {
2712 height: 100%;
2713 background: linear-gradient(90deg, var(--mxch-primary) 0%, #9b96ff 100%);
2714 border-radius: 999px;
2715 transition: width 400ms cubic-bezier(0.22, 1, 0.36, 1);
2716 }
2717
2718 .mxch-progress-label {
2719 font-size: 12px;
2720 color: var(--mxch-text-secondary);
2721 margin: 0 0 var(--mxch-spacing-md);
2722 font-weight: 500;
2723 }
2724
2725 .mxch-step-list {
2726 list-style: none;
2727 margin: 0;
2728 padding: 0;
2729 display: flex;
2730 flex-direction: column;
2731 gap: var(--mxch-spacing-sm);
2732 }
2733
2734 .mxch-step {
2735 display: grid;
2736 grid-template-columns: 32px 1fr auto;
2737 align-items: center;
2738 gap: var(--mxch-spacing-md);
2739 padding: var(--mxch-spacing-md);
2740 background: var(--mxch-content-bg, #f7f8fa);
2741 border: 1px solid transparent;
2742 border-radius: var(--mxch-radius-md);
2743 transition: background 160ms ease, border-color 160ms ease;
2744 }
2745
2746 .mxch-step.mxch-step-in-progress {
2747 background: var(--mxch-primary-lighter, rgba(120, 115, 245, 0.05));
2748 border-color: var(--mxch-primary-light, rgba(120, 115, 245, 0.1));
2749 }
2750
2751 .mxch-step.mxch-step-done {
2752 background: rgba(16, 185, 129, 0.06);
2753 }
2754
2755 .mxch-step-indicator {
2756 width: 28px;
2757 height: 28px;
2758 border-radius: 50%;
2759 display: flex;
2760 align-items: center;
2761 justify-content: center;
2762 font-size: 13px;
2763 font-weight: 600;
2764 background: #fff;
2765 color: var(--mxch-text-secondary, #64748b);
2766 border: 1.5px solid var(--mxch-card-border, #e5e7eb);
2767 flex-shrink: 0;
2768 }
2769
2770 .mxch-step-in-progress .mxch-step-indicator {
2771 color: var(--mxch-primary);
2772 border-color: var(--mxch-primary);
2773 background: #fff;
2774 box-shadow: 0 0 0 4px var(--mxch-primary-lighter, rgba(120, 115, 245, 0.06));
2775 }
2776
2777 .mxch-step-done .mxch-step-indicator {
2778 background: var(--mxch-success, #10b981);
2779 border-color: var(--mxch-success, #10b981);
2780 color: #fff;
2781 }
2782
2783 .mxch-step-number {
2784 line-height: 1;
2785 }
2786
2787 .mxch-step-body {
2788 min-width: 0;
2789 }
2790
2791 .mxch-step-title {
2792 font-size: 14px;
2793 font-weight: 600;
2794 color: var(--mxch-text-primary, #1a1a2e);
2795 margin-bottom: 2px;
2796 }
2797
2798 .mxch-step-done .mxch-step-title {
2799 color: var(--mxch-text-secondary, #64748b);
2800 }
2801
2802 .mxch-step-description {
2803 font-size: 12.5px;
2804 color: var(--mxch-text-secondary, #64748b);
2805 line-height: 1.45;
2806 }
2807
2808 .mxch-step-action {
2809 align-self: center;
2810 }
2811
2812 .mxch-setup-dismiss-row {
2813 margin-top: var(--mxch-spacing-md);
2814 text-align: right;
2815 }
2816
2817 .mxch-setup-dismiss,
2818 .mxch-setup-resume {
2819 font-size: 12.5px;
2820 color: var(--mxch-text-secondary, #64748b);
2821 text-decoration: none;
2822 border-bottom: 1px dotted currentColor;
2823 }
2824
2825 .mxch-setup-dismiss:hover,
2826 .mxch-setup-resume:hover {
2827 color: var(--mxch-primary);
2828 }
2829
2830 .mxch-resume-setup-row {
2831 margin: 0 0 var(--mxch-spacing-md);
2832 text-align: right;
2833 }
2834
2835 .mxch-dashboard-grid {
2836 display: grid;
2837 grid-template-columns: repeat(3, minmax(0, 1fr));
2838 gap: var(--mxch-spacing-md);
2839 margin-top: var(--mxch-spacing-lg);
2840 }
2841
2842 .mxch-dashboard-card .mxch-card-body {
2843 display: flex;
2844 flex-direction: column;
2845 gap: var(--mxch-spacing-sm);
2846 }
2847
2848 .mxch-dashboard-big-number {
2849 font-size: 36px;
2850 font-weight: 700;
2851 color: var(--mxch-text-primary, #1a1a2e);
2852 line-height: 1.1;
2853 letter-spacing: -0.02em;
2854 }
2855
2856 .mxch-dashboard-provider-name {
2857 font-size: 16px;
2858 font-weight: 600;
2859 color: var(--mxch-text-primary, #1a1a2e);
2860 word-break: break-word;
2861 }
2862
2863 .mxch-dashboard-card-meta {
2864 font-size: 13px;
2865 color: var(--mxch-text-secondary, #64748b);
2866 margin: 0;
2867 }
2868
2869 @media (max-width: 1024px) {
2870 .mxch-dashboard-grid {
2871 grid-template-columns: 1fr 1fr;
2872 }
2873 }
2874
2875 @media (max-width: 782px) {
2876 .mxch-step {
2877 grid-template-columns: 32px 1fr;
2878 grid-template-rows: auto auto;
2879 gap: var(--mxch-spacing-sm) var(--mxch-spacing-md);
2880 }
2881 .mxch-step-action {
2882 grid-column: 1 / -1;
2883 text-align: right;
2884 }
2885 .mxch-dashboard-grid {
2886 grid-template-columns: 1fr;
2887 }
2888 }
2889
2890 /* ------------------------------------------------------------------
2891 * Test Streaming Compatibility button (AI Models page)
2892 * Branded .mxch-btn replacing the legacy WP button + dashicon wrench.
2893 * ------------------------------------------------------------------ */
2894 .mxch-streaming-test-row {
2895 margin-top: var(--mxch-spacing-md, 16px);
2896 }
2897 .mxch-streaming-test-row .mxch-streaming-test-icon {
2898 vertical-align: middle;
2899 margin-right: 8px;
2900 }
2901 .mxch-streaming-test-result {
2902 margin-top: var(--mxch-spacing-sm, 12px);
2903 font-weight: 600;
2904 color: var(--mxch-text-primary, #1a1a2e);
2905 }
2906