PluginProbe
MxChat – AI Chatbot & Content Generation for WordPress / 3.2.8
MxChat – AI Chatbot & Content Generation for WordPress v3.2.8
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.8, at css/admin-sidebar.css

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