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

2,850 lines 67.9 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 /* ==========================================================================
1159 Buttons
1160 ========================================================================== */
1161 .mxch-btn {
1162 display: inline-flex;
1163 align-items: center;
1164 justify-content: center;
1165 gap: var(--mxch-spacing-sm);
1166 padding: 10px 18px;
1167 font-size: 14px;
1168 font-weight: 600;
1169 border-radius: var(--mxch-radius-md);
1170 cursor: pointer;
1171 transition: all var(--mxch-transition-fast);
1172 text-decoration: none;
1173 border: none;
1174 }
1175
1176 .mxch-btn-primary {
1177 background: var(--mxch-primary);
1178 color: white;
1179 }
1180
1181 .mxch-btn-primary:hover {
1182 background: var(--mxch-primary-hover);
1183 color: white;
1184 transform: translateY(-1px);
1185 box-shadow: 0 4px 12px rgba(120, 115, 245, 0.3);
1186 }
1187
1188 .mxch-btn-secondary {
1189 background: white;
1190 color: var(--mxch-text-primary);
1191 border: 1px solid var(--mxch-input-border);
1192 }
1193
1194 .mxch-btn-secondary:hover {
1195 background: #f8fafc;
1196 border-color: #c7c7c7;
1197 }
1198
1199 .mxch-btn-ghost {
1200 background: transparent;
1201 color: var(--mxch-text-secondary);
1202 }
1203
1204 .mxch-btn-ghost:hover {
1205 background: #f1f5f9;
1206 color: var(--mxch-text-primary);
1207 }
1208
1209 .mxch-btn-sm {
1210 padding: 6px 12px;
1211 font-size: 13px;
1212 }
1213
1214 .mxch-btn-lg {
1215 padding: 12px 24px;
1216 font-size: 15px;
1217 }
1218
1219 .mxch-btn-icon {
1220 width: 18px;
1221 height: 18px;
1222 }
1223
1224 /* ==========================================================================
1225 Content Sections (hidden by default, shown when active)
1226 ========================================================================== */
1227 .mxch-section {
1228 display: none;
1229 }
1230
1231 .mxch-section.active {
1232 display: block;
1233 animation: mxcFadeIn 0.2s ease;
1234 }
1235
1236 @keyframes mxcFadeIn {
1237 from {
1238 opacity: 0;
1239 transform: translateY(8px);
1240 }
1241 to {
1242 opacity: 1;
1243 transform: translateY(0);
1244 }
1245 }
1246
1247 /* ==========================================================================
1248 Info Notices
1249 ========================================================================== */
1250 .mxch-notice {
1251 display: flex;
1252 align-items: flex-start;
1253 gap: var(--mxch-spacing-sm);
1254 padding: var(--mxch-spacing-md);
1255 border-radius: var(--mxch-radius-md);
1256 font-size: 13px;
1257 line-height: 1.5;
1258 }
1259
1260 .mxch-notice-icon {
1261 width: 18px;
1262 height: 18px;
1263 flex-shrink: 0;
1264 margin-top: 1px;
1265 }
1266
1267 .mxch-notice-info {
1268 background: #eff6ff;
1269 color: #1e40af;
1270 border: 1px solid #bfdbfe;
1271 }
1272
1273 .mxch-notice-warning {
1274 background: #fffbeb;
1275 color: #92400e;
1276 border: 1px solid #fde68a;
1277 }
1278
1279 .mxch-notice-success {
1280 background: #ecfdf5;
1281 color: #065f46;
1282 border: 1px solid #a7f3d0;
1283 }
1284
1285 .mxch-notice-error {
1286 background: #fef2f2;
1287 color: #991b1b;
1288 border: 1px solid #fecaca;
1289 }
1290
1291 /* ==========================================================================
1292 Disclosure (collapsible <details>)
1293 Generic Advanced/opt-in surface — used for static-bearer fallback on
1294 mxchat-mcp's Connected Apps tab, and any add-on that needs the same
1295 "advanced/show more" pattern. Originally lived in plugins/mxchat-mcp/css/
1296 admin-mcp.css; elevated here so every add-on inherits via the standard
1297 admin-sidebar.css enqueue.
1298 ========================================================================== */
1299 .mxch-disclosure {
1300 margin-top: 16px;
1301 border: 1px solid var(--mxch-card-border, #e2e4e9);
1302 border-radius: var(--mxch-radius-md, 6px);
1303 background: #fbfcfd;
1304 }
1305 .mxch-disclosure[open] {
1306 background: #fff;
1307 }
1308 .mxch-disclosure-summary {
1309 display: flex;
1310 align-items: center;
1311 gap: 10px;
1312 padding: 10px 14px;
1313 cursor: pointer;
1314 list-style: none;
1315 user-select: none;
1316 color: var(--mxch-text-secondary, #57606a);
1317 font-size: 13px;
1318 font-weight: 600;
1319 }
1320 .mxch-disclosure-summary::-webkit-details-marker { display: none; }
1321 .mxch-disclosure-summary::before {
1322 content: "";
1323 display: inline-block;
1324 width: 8px;
1325 height: 8px;
1326 border-right: 2px solid currentColor;
1327 border-bottom: 2px solid currentColor;
1328 transform: rotate(-45deg);
1329 transition: transform 0.18s ease;
1330 margin-right: 2px;
1331 }
1332 .mxch-disclosure[open] > .mxch-disclosure-summary::before {
1333 transform: rotate(45deg);
1334 }
1335 .mxch-disclosure-summary svg {
1336 flex-shrink: 0;
1337 opacity: 0.7;
1338 }
1339 .mxch-disclosure-summary-text {
1340 color: var(--mxch-text-primary, #1d2327);
1341 font-weight: 600;
1342 }
1343 .mxch-disclosure-summary-hint {
1344 color: var(--mxch-text-secondary, #57606a);
1345 font-weight: 400;
1346 font-size: 12px;
1347 }
1348 .mxch-disclosure-summary:hover .mxch-disclosure-summary-text {
1349 color: var(--mxch-primary, #7873f5);
1350 }
1351 .mxch-disclosure-summary:focus-visible {
1352 outline: 2px solid var(--mxch-primary, #7873f5);
1353 outline-offset: 2px;
1354 border-radius: var(--mxch-radius-md, 6px);
1355 }
1356 .mxch-disclosure-body {
1357 padding: 8px 14px 14px 14px;
1358 border-top: 1px solid var(--mxch-card-border, #e2e4e9);
1359 }
1360 @media (max-width: 600px) {
1361 .mxch-disclosure-summary {
1362 flex-wrap: wrap;
1363 }
1364 .mxch-disclosure-summary-hint {
1365 flex-basis: 100%;
1366 margin-left: 18px;
1367 }
1368 }
1369
1370 /* ==========================================================================
1371 Quick Questions List
1372 ========================================================================== */
1373 .mxch-quick-questions {
1374 display: flex;
1375 flex-direction: column;
1376 gap: var(--mxch-spacing-sm);
1377 }
1378
1379 .mxch-quick-question-item {
1380 display: flex;
1381 align-items: center;
1382 gap: var(--mxch-spacing-sm);
1383 padding: var(--mxch-spacing-sm);
1384 background: #f8fafc;
1385 border: 1px solid var(--mxch-card-border);
1386 border-radius: var(--mxch-radius-md);
1387 }
1388
1389 .mxch-quick-question-item .mxch-input {
1390 flex: 1;
1391 background: white;
1392 }
1393
1394 .mxch-quick-question-remove {
1395 padding: 6px;
1396 background: none;
1397 border: none;
1398 color: var(--mxch-text-muted);
1399 cursor: pointer;
1400 border-radius: var(--mxch-radius-sm);
1401 transition: all var(--mxch-transition-fast);
1402 }
1403
1404 .mxch-quick-question-remove:hover {
1405 background: #fee2e2;
1406 color: var(--mxch-error);
1407 }
1408
1409 .mxch-quick-question-add {
1410 display: flex;
1411 align-items: center;
1412 justify-content: center;
1413 gap: var(--mxch-spacing-xs);
1414 padding: var(--mxch-spacing-sm);
1415 border: 2px dashed var(--mxch-card-border);
1416 border-radius: var(--mxch-radius-md);
1417 color: var(--mxch-text-muted);
1418 background: none;
1419 cursor: pointer;
1420 font-size: 13px;
1421 transition: all var(--mxch-transition-fast);
1422 }
1423
1424 .mxch-quick-question-add:hover {
1425 border-color: var(--mxch-primary);
1426 color: var(--mxch-primary);
1427 background: var(--mxch-primary-lighter);
1428 }
1429
1430 /* ==========================================================================
1431 Tutorials Grid (for YouTube Tutorials section)
1432 ========================================================================== */
1433 .mxch-tutorials-grid {
1434 display: grid;
1435 grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
1436 gap: var(--mxch-spacing-lg);
1437 }
1438
1439 .mxch-tutorial-card {
1440 background: white;
1441 border: 1px solid var(--mxch-card-border);
1442 border-radius: var(--mxch-radius-lg);
1443 overflow: hidden;
1444 transition: all var(--mxch-transition);
1445 }
1446
1447 .mxch-tutorial-card:hover {
1448 box-shadow: var(--mxch-card-shadow-hover);
1449 transform: translateY(-2px);
1450 }
1451
1452 .mxch-tutorial-content {
1453 padding: var(--mxch-spacing-md);
1454 }
1455
1456 .mxch-tutorial-title {
1457 font-size: 15px;
1458 font-weight: 600;
1459 color: var(--mxch-text-primary);
1460 margin: 0 0 var(--mxch-spacing-sm) 0;
1461 }
1462
1463 .mxch-tutorial-description {
1464 font-size: 13px;
1465 color: var(--mxch-text-secondary);
1466 margin: 0 0 var(--mxch-spacing-md) 0;
1467 line-height: 1.5;
1468 }
1469
1470 .mxch-tutorial-link {
1471 display: inline-flex;
1472 align-items: center;
1473 gap: var(--mxch-spacing-xs);
1474 color: var(--mxch-primary);
1475 font-size: 13px;
1476 font-weight: 600;
1477 text-decoration: none;
1478 }
1479
1480 .mxch-tutorial-link:hover {
1481 text-decoration: underline;
1482 }
1483
1484 /* ==========================================================================
1485 Autosave Indicator
1486 ========================================================================== */
1487 .mxch-autosave-indicator {
1488 display: flex;
1489 align-items: center;
1490 gap: var(--mxch-spacing-xs);
1491 font-size: 12px;
1492 color: var(--mxch-text-muted);
1493 padding: var(--mxch-spacing-xs) var(--mxch-spacing-sm);
1494 background: #f1f5f9;
1495 border-radius: 20px;
1496 }
1497
1498 .mxch-autosave-indicator.saving {
1499 color: var(--mxch-warning);
1500 }
1501
1502 .mxch-autosave-indicator.saved {
1503 color: var(--mxch-success);
1504 }
1505
1506 .mxch-autosave-dot {
1507 width: 6px;
1508 height: 6px;
1509 border-radius: 50%;
1510 background: currentColor;
1511 }
1512
1513 /* ==========================================================================
1514 Mobile Header (Hidden on Desktop)
1515 ========================================================================== */
1516 .mxch-mobile-header {
1517 display: none;
1518 }
1519
1520 /* ==========================================================================
1521 Mobile Menu Overlay
1522 ========================================================================== */
1523 .mxch-mobile-overlay {
1524 display: none;
1525 }
1526
1527 /* ==========================================================================
1528 Mobile Menu Modal
1529 ========================================================================== */
1530 .mxch-mobile-menu {
1531 display: none;
1532 }
1533
1534 /* ==========================================================================
1535 Responsive Design
1536 ========================================================================== */
1537 @media screen and (max-width: 1200px) {
1538 .mxch-sidebar {
1539 width: 220px;
1540 min-width: 220px;
1541 }
1542
1543 .mxch-content {
1544 padding: var(--mxch-spacing-lg);
1545 }
1546 }
1547
1548 @media screen and (max-width: 960px) {
1549 /* Hide desktop sidebar on mobile */
1550 .mxch-sidebar {
1551 display: none;
1552 }
1553
1554 /* Show mobile header */
1555 .mxch-mobile-header {
1556 display: flex;
1557 align-items: center;
1558 justify-content: space-between;
1559 padding: 12px 16px;
1560 background: var(--mxch-sidebar-bg);
1561 position: sticky;
1562 top: 0;
1563 z-index: 100;
1564 flex-shrink: 0;
1565 border-bottom: 4px solid transparent;
1566 border-image: linear-gradient(135deg, #fa73e6, #7873f5, #3ac9d1);
1567 border-image-slice: 1;
1568 }
1569
1570 .mxch-mobile-header::before {
1571 content: '';
1572 position: absolute;
1573 top: 0;
1574 left: 0;
1575 width: 100%;
1576 height: 100%;
1577 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%);
1578 z-index: -1;
1579 }
1580
1581 .mxch-mobile-logo {
1582 display: flex;
1583 align-items: center;
1584 gap: 8px;
1585 text-decoration: none;
1586 }
1587
1588 .mxch-mobile-logo-icon {
1589 width: 28px;
1590 height: 28px;
1591 flex-shrink: 0;
1592 }
1593
1594 .mxch-mobile-logo-icon img {
1595 width: 100%;
1596 height: 100%;
1597 object-fit: contain;
1598 }
1599
1600 .mxch-mobile-logo-text {
1601 font-size: 18px;
1602 font-weight: 700;
1603 color: #ffffff;
1604 letter-spacing: -0.5px;
1605 }
1606
1607 .mxch-mobile-menu-btn {
1608 display: flex;
1609 align-items: center;
1610 justify-content: center;
1611 width: 40px;
1612 height: 40px;
1613 background: rgba(255, 255, 255, 0.1);
1614 border: none;
1615 border-radius: 8px;
1616 color: #ffffff;
1617 cursor: pointer;
1618 transition: background 0.15s ease;
1619 }
1620
1621 .mxch-mobile-menu-btn:hover {
1622 background: rgba(255, 255, 255, 0.15);
1623 }
1624
1625 /* Mobile Overlay */
1626 .mxch-mobile-overlay {
1627 display: block;
1628 position: fixed;
1629 top: 46px; /* Account for WordPress admin bar on mobile (46px on smaller screens) */
1630 left: 0;
1631 right: 0;
1632 bottom: 0;
1633 background: rgba(0, 0, 0, 0.5);
1634 z-index: 998;
1635 opacity: 0;
1636 visibility: hidden;
1637 transition: opacity 0.3s ease, visibility 0.3s ease;
1638 }
1639
1640 .mxch-mobile-overlay.open {
1641 opacity: 1;
1642 visibility: visible;
1643 }
1644
1645 /* Mobile Menu Modal */
1646 .mxch-mobile-menu {
1647 display: flex;
1648 flex-direction: column;
1649 position: fixed;
1650 top: 46px; /* Account for WordPress admin bar on mobile (46px on smaller screens) */
1651 right: 0;
1652 bottom: 0;
1653 width: 300px;
1654 max-width: 85vw;
1655 background: var(--mxch-sidebar-bg);
1656 z-index: 999;
1657 transform: translateX(100%);
1658 transition: transform 0.3s ease;
1659 overflow: hidden;
1660 overflow-x: hidden;
1661 box-sizing: border-box;
1662 }
1663
1664 .mxch-mobile-menu::before {
1665 content: '';
1666 position: absolute;
1667 top: 0;
1668 left: 0;
1669 width: 100%;
1670 height: 100%;
1671 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%);
1672 z-index: 0;
1673 pointer-events: none;
1674 }
1675
1676 .mxch-mobile-menu.open {
1677 transform: translateX(0);
1678 }
1679
1680 .mxch-mobile-menu-header {
1681 display: flex;
1682 align-items: center;
1683 justify-content: space-between;
1684 padding: 16px 20px;
1685 border-bottom: 4px solid transparent;
1686 border-image: linear-gradient(135deg, #fa73e6, #7873f5, #3ac9d1);
1687 border-image-slice: 1;
1688 position: relative;
1689 z-index: 1;
1690 }
1691
1692 .mxch-mobile-menu-title {
1693 font-size: 16px;
1694 font-weight: 600;
1695 color: #ffffff;
1696 }
1697
1698 .mxch-mobile-menu-close {
1699 display: flex;
1700 align-items: center;
1701 justify-content: center;
1702 width: 36px;
1703 height: 36px;
1704 background: rgba(255, 255, 255, 0.1);
1705 border: none;
1706 border-radius: 8px;
1707 color: #ffffff;
1708 cursor: pointer;
1709 transition: background 0.15s ease;
1710 }
1711
1712 .mxch-mobile-menu-close:hover {
1713 background: rgba(255, 255, 255, 0.15);
1714 }
1715
1716 .mxch-mobile-menu-nav {
1717 flex: 1;
1718 overflow-y: auto;
1719 padding: 16px 0;
1720 position: relative;
1721 z-index: 1;
1722 }
1723
1724 .mxch-mobile-nav-section {
1725 margin-bottom: 8px;
1726 }
1727
1728 .mxch-mobile-nav-section-title {
1729 font-size: 11px;
1730 font-weight: 600;
1731 text-transform: uppercase;
1732 letter-spacing: 0.5px;
1733 color: var(--mxch-sidebar-text);
1734 padding: 12px 20px 8px;
1735 opacity: 0.7;
1736 }
1737
1738 .mxch-mobile-nav-link {
1739 display: flex;
1740 align-items: center;
1741 gap: 10px;
1742 width: 100%;
1743 padding: 12px 20px;
1744 background: none;
1745 border: none;
1746 color: var(--mxch-sidebar-text);
1747 font-size: 14px;
1748 font-weight: 500;
1749 text-align: left;
1750 cursor: pointer;
1751 transition: all 0.15s ease;
1752 }
1753
1754 .mxch-mobile-nav-link:hover {
1755 background: rgba(255, 255, 255, 0.05);
1756 color: #ffffff;
1757 }
1758
1759 .mxch-mobile-nav-link.active {
1760 background: var(--mxch-sidebar-active-bg);
1761 color: #ffffff;
1762 }
1763
1764 .mxch-mobile-nav-link.expanded {
1765 background: rgba(255, 255, 255, 0.05);
1766 color: #ffffff;
1767 }
1768
1769 .mxch-mobile-nav-link span {
1770 flex: 1;
1771 }
1772
1773 /* Prevent addon status dot from expanding - override flex: 1 from above */
1774 .mxch-mobile-nav-link .mxch-addon-status-dot {
1775 flex: 0 0 8px;
1776 width: 8px;
1777 height: 8px;
1778 }
1779
1780 .mxch-mobile-nav-arrow {
1781 opacity: 0.5;
1782 transition: transform 0.2s ease;
1783 }
1784
1785 .mxch-mobile-nav-link.expanded .mxch-mobile-nav-arrow {
1786 transform: rotate(90deg);
1787 opacity: 1;
1788 }
1789
1790 /* Mobile Sub Navigation */
1791 .mxch-mobile-nav-sub {
1792 display: none;
1793 background: rgba(0, 0, 0, 0.2);
1794 }
1795
1796 .mxch-mobile-nav-sub.expanded {
1797 display: block;
1798 }
1799
1800 .mxch-mobile-nav-sub-link {
1801 display: flex;
1802 align-items: center;
1803 gap: 8px;
1804 width: 100%;
1805 padding: 10px 20px 10px 52px;
1806 background: none;
1807 border: none;
1808 color: var(--mxch-sidebar-text);
1809 font-size: 13px;
1810 text-align: left;
1811 cursor: pointer;
1812 transition: all 0.15s ease;
1813 }
1814
1815 .mxch-mobile-nav-sub-link::before {
1816 content: '';
1817 width: 6px;
1818 height: 6px;
1819 border-radius: 50%;
1820 background: currentColor;
1821 opacity: 0.4;
1822 }
1823
1824 .mxch-mobile-nav-sub-link:hover {
1825 background: rgba(255, 255, 255, 0.03);
1826 color: #ffffff;
1827 }
1828
1829 .mxch-mobile-nav-sub-link.active {
1830 color: var(--mxch-primary);
1831 background: rgba(120, 115, 245, 0.1);
1832 }
1833
1834 .mxch-mobile-nav-sub-link.active::before {
1835 opacity: 1;
1836 background: var(--mxch-primary);
1837 }
1838
1839 /* Mobile Menu Footer */
1840 .mxch-mobile-menu-footer {
1841 padding: 16px 20px;
1842 border-top: 1px solid rgba(255, 255, 255, 0.1);
1843 position: relative;
1844 z-index: 1;
1845 box-sizing: border-box;
1846 max-width: 100%;
1847 overflow: hidden;
1848 }
1849
1850 .mxch-mobile-upgrade-btn {
1851 display: flex;
1852 align-items: center;
1853 justify-content: center;
1854 gap: 8px;
1855 width: 100%;
1856 padding: 12px 16px;
1857 background: linear-gradient(135deg, var(--mxch-primary), #a78bfa);
1858 border-radius: 8px;
1859 color: white;
1860 text-decoration: none;
1861 font-size: 14px;
1862 font-weight: 600;
1863 transition: all 0.15s ease;
1864 box-sizing: border-box;
1865 max-width: 100%;
1866 }
1867
1868 .mxch-mobile-upgrade-btn:hover {
1869 transform: translateY(-1px);
1870 box-shadow: 0 4px 12px rgba(120, 115, 245, 0.4);
1871 color: white;
1872 }
1873
1874 /* Adjust main layout for mobile */
1875 .mxch-admin-wrapper {
1876 flex-direction: column;
1877 position: fixed;
1878 left: 0;
1879 right: 0;
1880 overflow: auto;
1881 }
1882
1883 .mxch-content {
1884 height: auto;
1885 overflow: visible;
1886 padding: var(--mxch-spacing-lg);
1887 width: 100%;
1888 box-sizing: border-box;
1889 }
1890
1891 /* Center content sections on mobile */
1892 .mxch-content-section {
1893 max-width: 100%;
1894 margin-left: auto;
1895 margin-right: auto;
1896 }
1897
1898 .mxch-rate-limit-controls {
1899 flex-direction: column;
1900 }
1901
1902 /* Card headers stack on mobile */
1903 .mxch-card-header {
1904 flex-direction: column;
1905 align-items: stretch;
1906 gap: 12px;
1907 }
1908
1909 /* Content header adjustments */
1910 .mxch-content-header {
1911 margin-bottom: var(--mxch-spacing-md);
1912 }
1913
1914 .mxch-content-title {
1915 font-size: 20px;
1916 }
1917 }
1918
1919 @media screen and (max-width: 600px) {
1920 .mxch-content {
1921 padding: var(--mxch-spacing-md);
1922 }
1923
1924 .mxch-card-body {
1925 padding: var(--mxch-spacing-md);
1926 }
1927
1928 .mxch-card {
1929 margin-left: 0;
1930 margin-right: 0;
1931 }
1932
1933 .mxch-pro-banner {
1934 flex-direction: column;
1935 text-align: center;
1936 padding: 16px;
1937 margin-left: 0;
1938 margin-right: 0;
1939 max-width: 100%;
1940 box-sizing: border-box;
1941 }
1942
1943 .mxch-pro-banner-content {
1944 max-width: 100%;
1945 }
1946
1947 .mxch-pro-banner-title {
1948 justify-content: center;
1949 font-size: 13px;
1950 }
1951
1952 .mxch-pro-banner-text {
1953 font-size: 12px;
1954 }
1955
1956 .mxch-pro-banner-btn {
1957 width: auto;
1958 max-width: 100%;
1959 padding: 10px 16px;
1960 font-size: 12px;
1961 justify-content: center;
1962 box-sizing: border-box;
1963 }
1964
1965 .mxch-field-row {
1966 flex-direction: column;
1967 }
1968
1969 .mxch-api-key-wrapper {
1970 flex-direction: column;
1971 }
1972
1973 .mxch-mobile-menu {
1974 width: 100%;
1975 max-width: 100%;
1976 }
1977 }
1978
1979 /* ==========================================================================
1980 WordPress Admin Overrides
1981 ========================================================================== */
1982 .mxch-admin-wrapper .form-table {
1983 margin: 0;
1984 }
1985
1986 .mxch-admin-wrapper .form-table th {
1987 padding: 0;
1988 width: auto;
1989 }
1990
1991 .mxch-admin-wrapper .form-table td {
1992 padding: 0;
1993 }
1994
1995 .mxch-admin-wrapper .form-table tr {
1996 display: block;
1997 margin-bottom: var(--mxch-spacing-lg);
1998 }
1999
2000 .mxch-admin-wrapper .form-table tr:last-child {
2001 margin-bottom: 0;
2002 }
2003
2004 /* ==========================================================================
2005 Autosave Feedback Indicators
2006 ========================================================================== */
2007 .mxch-admin-wrapper .feedback-container {
2008 display: inline-flex;
2009 align-items: center;
2010 margin-left: 10px;
2011 position: relative;
2012 z-index: 10;
2013 vertical-align: middle;
2014 }
2015
2016 .mxch-admin-wrapper .saving-spinner {
2017 width: 16px;
2018 height: 16px;
2019 border: 2px solid #e2e8f0;
2020 border-top-color: var(--mxch-primary);
2021 border-radius: 50%;
2022 animation: mxcSpin 0.6s linear infinite;
2023 }
2024
2025 .mxch-admin-wrapper .success-icon {
2026 display: none;
2027 color: var(--mxch-success);
2028 font-size: 16px;
2029 font-weight: bold;
2030 margin-left: 5px;
2031 }
2032
2033 @keyframes mxcSpin {
2034 to {
2035 transform: rotate(360deg);
2036 }
2037 }
2038
2039 /* Ensure feedback container appears inline with toggles */
2040 .mxch-admin-wrapper .toggle-switch + .feedback-container,
2041 .mxch-admin-wrapper .mxchat-toggle-switch + .feedback-container,
2042 .mxch-admin-wrapper label.toggle-switch ~ .feedback-container {
2043 display: inline-flex;
2044 vertical-align: middle;
2045 }
2046
2047 /* Position feedback near inputs - use inline for form-table context */
2048 .mxch-admin-wrapper .form-table input + .feedback-container,
2049 .mxch-admin-wrapper .form-table select + .feedback-container,
2050 .mxch-admin-wrapper .form-table textarea + .feedback-container {
2051 position: relative;
2052 display: inline-flex;
2053 vertical-align: middle;
2054 margin-left: 10px;
2055 right: auto;
2056 top: auto;
2057 transform: none;
2058 }
2059
2060 /* Position feedback near inputs - absolute for card layouts with field-control */
2061 .mxch-admin-wrapper .mxch-field-control input + .feedback-container,
2062 .mxch-admin-wrapper .mxch-field-control select + .feedback-container,
2063 .mxch-admin-wrapper .mxch-field-control textarea + .feedback-container {
2064 position: absolute;
2065 right: -30px;
2066 top: 50%;
2067 transform: translateY(-50%);
2068 }
2069
2070 /* Make input containers relative for absolute positioning */
2071 .mxch-admin-wrapper .mxch-field-control {
2072 position: relative;
2073 }
2074
2075 /* Feedback inside slider container */
2076 .mxch-admin-wrapper .slider-container + .feedback-container {
2077 margin-left: 15px;
2078 }
2079
2080 /* ==========================================================================
2081 Real-time Entry Updates
2082 ========================================================================== */
2083
2084 /* New entry highlight animation */
2085 .mxchat-new-entry {
2086 background-color: rgba(120, 115, 245, 0.15);
2087 animation: mxchatNewEntryFade 2s ease-out forwards;
2088 }
2089
2090 @keyframes mxchatNewEntryFade {
2091 0% {
2092 background-color: rgba(120, 115, 245, 0.25);
2093 }
2094 100% {
2095 background-color: transparent;
2096 }
2097 }
2098
2099 /* Count update flash */
2100 #mxchat-entry-count.mxchat-count-updated,
2101 #mxchat-sidebar-count.mxchat-count-updated {
2102 animation: mxchatCountPulse 0.5s ease-out;
2103 }
2104
2105 @keyframes mxchatCountPulse {
2106 0% {
2107 color: var(--mxch-primary);
2108 transform: scale(1.2);
2109 }
2110 100% {
2111 color: var(--mxch-text-secondary);
2112 transform: scale(1);
2113 }
2114 }
2115
2116 /* Sidebar badge specific pulse - keep white text on purple background */
2117 #mxchat-sidebar-count.mxchat-count-updated {
2118 animation: mxchatSidebarCountPulse 0.5s ease-out;
2119 }
2120
2121 @keyframes mxchatSidebarCountPulse {
2122 0% {
2123 transform: scale(1.3);
2124 background: var(--mxch-success);
2125 }
2126 100% {
2127 transform: scale(1);
2128 background: var(--mxch-primary);
2129 }
2130 }
2131
2132 /* ==========================================================================
2133 Pro Upgrade v2 - Cleaner, More Professional Design
2134 ========================================================================== */
2135
2136 /* Sidebar Upgrade Button - v2 (Concise) */
2137 .mxch-sidebar-upgrade-v2 {
2138 display: flex;
2139 align-items: center;
2140 justify-content: center;
2141 gap: 8px;
2142 padding: 10px 16px;
2143 background: rgba(120, 115, 245, 0.1);
2144 border: 1px solid rgba(120, 115, 245, 0.25);
2145 border-radius: var(--mxch-radius-md);
2146 color: #c4c1ff;
2147 text-decoration: none;
2148 font-size: 13px;
2149 font-weight: 500;
2150 transition: all 0.2s ease;
2151 position: relative;
2152 }
2153
2154 .mxch-sidebar-upgrade-v2:hover {
2155 background: rgba(120, 115, 245, 0.2);
2156 border-color: rgba(120, 115, 245, 0.5);
2157 color: #ffffff;
2158 text-decoration: none;
2159 }
2160
2161 .mxch-sidebar-upgrade-v2:focus {
2162 outline: none;
2163 box-shadow: 0 0 0 2px rgba(120, 115, 245, 0.4);
2164 }
2165
2166 .mxch-sidebar-upgrade-v2 svg {
2167 width: 14px;
2168 height: 14px;
2169 opacity: 0.8;
2170 flex-shrink: 0;
2171 }
2172
2173 .mxch-sidebar-upgrade-v2:hover svg {
2174 opacity: 1;
2175 }
2176
2177 /* Pro Banner - v2 (Clean & Minimal) */
2178 .mxch-pro-banner-v2 {
2179 display: flex;
2180 align-items: center;
2181 justify-content: space-between;
2182 gap: 20px;
2183 padding: 14px 20px;
2184 background: linear-gradient(135deg, rgba(120, 115, 245, 0.08) 0%, rgba(167, 139, 250, 0.06) 100%);
2185 border: 1px solid rgba(120, 115, 245, 0.15);
2186 border-radius: var(--mxch-radius-md);
2187 margin-bottom: var(--mxch-spacing-lg);
2188 }
2189
2190 .mxch-pro-banner-v2-content {
2191 display: flex;
2192 align-items: center;
2193 gap: 12px;
2194 flex: 1;
2195 min-width: 0;
2196 }
2197
2198 .mxch-pro-banner-v2-icon {
2199 width: 32px;
2200 height: 32px;
2201 display: flex;
2202 align-items: center;
2203 justify-content: center;
2204 background: linear-gradient(135deg, var(--mxch-primary) 0%, #a78bfa 100%);
2205 border-radius: 8px;
2206 flex-shrink: 0;
2207 }
2208
2209 .mxch-pro-banner-v2-icon svg {
2210 width: 16px;
2211 height: 16px;
2212 color: white;
2213 }
2214
2215 .mxch-pro-banner-v2-text {
2216 flex: 1;
2217 min-width: 0;
2218 }
2219
2220 .mxch-pro-banner-v2-title {
2221 font-size: 14px;
2222 font-weight: 600;
2223 color: var(--mxch-text-primary);
2224 margin: 0 0 2px 0;
2225 }
2226
2227 .mxch-pro-banner-v2-desc {
2228 font-size: 12px;
2229 color: var(--mxch-text-secondary);
2230 margin: 0;
2231 line-height: 1.4;
2232 }
2233
2234 .mxch-pro-banner-v2-btn {
2235 display: inline-flex;
2236 align-items: center;
2237 gap: 6px;
2238 padding: 8px 16px;
2239 background: var(--mxch-primary);
2240 color: white;
2241 font-size: 13px;
2242 font-weight: 500;
2243 border-radius: 6px;
2244 text-decoration: none;
2245 transition: all 0.2s ease;
2246 white-space: nowrap;
2247 flex-shrink: 0;
2248 }
2249
2250 .mxch-pro-banner-v2-btn:hover {
2251 background: var(--mxch-primary-hover);
2252 color: white;
2253 text-decoration: none;
2254 transform: translateY(-1px);
2255 box-shadow: 0 4px 12px rgba(120, 115, 245, 0.3);
2256 }
2257
2258 .mxch-pro-banner-v2-btn:focus {
2259 outline: none;
2260 box-shadow: 0 0 0 3px rgba(120, 115, 245, 0.3);
2261 }
2262
2263 .mxch-pro-banner-v2-btn svg {
2264 width: 14px;
2265 height: 14px;
2266 }
2267
2268 /* Mobile responsive for v2 banner */
2269 @media screen and (max-width: 600px) {
2270 .mxch-pro-banner-v2 {
2271 flex-direction: column;
2272 text-align: center;
2273 padding: 16px;
2274 gap: 12px;
2275 }
2276
2277 .mxch-pro-banner-v2-content {
2278 flex-direction: column;
2279 }
2280
2281 .mxch-pro-banner-v2-btn {
2282 width: 100%;
2283 justify-content: center;
2284 }
2285 }
2286
2287 /* ==========================================================================
2288 API Key Fields - Prevent Browser Autofill
2289 ========================================================================== */
2290
2291 /* Mask API key fields like password fields but avoid browser password autofill */
2292 .mxchat-api-key-field {
2293 -webkit-text-security: disc;
2294 text-security: disc;
2295 font-family: monospace;
2296 }
2297
2298 /* Show actual text when focused or when show button toggled */
2299 .mxchat-api-key-field.mxchat-show-key {
2300 -webkit-text-security: none;
2301 text-security: none;
2302 }
2303
2304 /* ==========================================================================
2305 Debug & Optimization Tools
2306 ========================================================================== */
2307
2308 /* Debug Log Viewer */
2309 .mxchat-debug-log-viewer {
2310 max-height: 400px;
2311 overflow-y: auto;
2312 background: #f8fafc;
2313 border: 1px solid var(--mxch-card-border, #e2e4e9);
2314 border-radius: 8px;
2315 padding: 0;
2316 }
2317
2318 .mxchat-debug-log-empty {
2319 display: flex;
2320 flex-direction: column;
2321 align-items: center;
2322 justify-content: center;
2323 padding: 48px 24px;
2324 text-align: center;
2325 color: #64748b;
2326 }
2327
2328 .mxchat-debug-log-empty p {
2329 margin: 16px 0 0;
2330 font-size: 14px;
2331 }
2332
2333 .mxchat-debug-log-entries {
2334 padding: 12px;
2335 }
2336
2337 .mxchat-debug-log-entry {
2338 background: #ffffff;
2339 border: 1px solid #e2e8f0;
2340 border-radius: 8px;
2341 padding: 12px;
2342 margin-bottom: 8px;
2343 font-size: 13px;
2344 }
2345
2346 .mxchat-debug-log-entry:last-child {
2347 margin-bottom: 0;
2348 }
2349
2350 .mxchat-log-header {
2351 display: flex;
2352 justify-content: space-between;
2353 align-items: center;
2354 margin-bottom: 8px;
2355 }
2356
2357 .mxchat-log-type {
2358 display: inline-block;
2359 padding: 2px 8px;
2360 border-radius: 4px;
2361 font-size: 10px;
2362 font-weight: 600;
2363 text-transform: uppercase;
2364 letter-spacing: 0.5px;
2365 background: #e2e8f0;
2366 color: #475569;
2367 }
2368
2369 .mxchat-log-type-settings_save .mxchat-log-type {
2370 background: #dbeafe;
2371 color: #1e40af;
2372 }
2373
2374 .mxchat-log-type-debug_mode .mxchat-log-type {
2375 background: #fef3c7;
2376 color: #92400e;
2377 }
2378
2379 .mxchat-log-type-api_error .mxchat-log-type {
2380 background: #fee2e2;
2381 color: #991b1b;
2382 }
2383
2384 .mxchat-log-type-reset .mxchat-log-type {
2385 background: #fce7f3;
2386 color: #9d174d;
2387 }
2388
2389 .mxchat-log-type-settings_export .mxchat-log-type {
2390 background: #d1fae5;
2391 color: #065f46;
2392 }
2393
2394 .mxchat-log-time {
2395 font-size: 11px;
2396 color: #94a3b8;
2397 }
2398
2399 .mxchat-log-message {
2400 color: #334155;
2401 line-height: 1.5;
2402 }
2403
2404 .mxchat-log-data {
2405 margin-top: 8px;
2406 padding: 8px;
2407 background: #f1f5f9;
2408 border-radius: 4px;
2409 font-family: monospace;
2410 font-size: 11px;
2411 color: #64748b;
2412 white-space: pre-wrap;
2413 word-break: break-all;
2414 }
2415
2416 /* Settings Tools Grid */
2417 .mxch-tools-grid {
2418 display: grid;
2419 grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
2420 gap: 24px;
2421 }
2422
2423 .mxch-tool-item {
2424 display: flex;
2425 gap: 16px;
2426 padding: 20px;
2427 background: #f8fafc;
2428 border: 1px solid #e2e8f0;
2429 border-radius: 12px;
2430 transition: all 0.2s ease;
2431 }
2432
2433 .mxch-tool-item:hover {
2434 border-color: var(--mxch-primary, #7873f5);
2435 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
2436 }
2437
2438 .mxch-tool-item-danger {
2439 border-color: #fecaca;
2440 background: #fef2f2;
2441 }
2442
2443 .mxch-tool-item-danger:hover {
2444 border-color: #ef4444;
2445 }
2446
2447 .mxch-tool-icon {
2448 flex-shrink: 0;
2449 width: 48px;
2450 height: 48px;
2451 display: flex;
2452 align-items: center;
2453 justify-content: center;
2454 background: #ffffff;
2455 border-radius: 10px;
2456 color: var(--mxch-primary, #7873f5);
2457 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
2458 }
2459
2460 .mxch-tool-item-danger .mxch-tool-icon {
2461 color: #ef4444;
2462 }
2463
2464 .mxch-tool-content h4 {
2465 margin: 0 0 6px;
2466 font-size: 15px;
2467 font-weight: 600;
2468 color: #1e293b;
2469 }
2470
2471 .mxch-tool-content p {
2472 margin: 0 0 12px;
2473 font-size: 13px;
2474 color: #64748b;
2475 line-height: 1.5;
2476 }
2477
2478 /* Danger Button */
2479 .mxch-btn-danger {
2480 background: #ef4444 !important;
2481 color: #ffffff !important;
2482 border-color: #ef4444 !important;
2483 }
2484
2485 .mxch-btn-danger:hover {
2486 background: #dc2626 !important;
2487 border-color: #dc2626 !important;
2488 }
2489
2490 /* Badge Styles */
2491 .mxch-badge {
2492 display: inline-flex;
2493 align-items: center;
2494 padding: 4px 10px;
2495 font-size: 12px;
2496 font-weight: 500;
2497 border-radius: 20px;
2498 background: #e2e8f0;
2499 color: #475569;
2500 }
2501
2502 .mxch-badge-warning {
2503 background: #fef3c7;
2504 color: #92400e;
2505 }
2506
2507 .mxch-badge-success {
2508 background: #d1fae5;
2509 color: #065f46;
2510 }
2511
2512 .mxch-badge-error {
2513 background: #fee2e2;
2514 color: #991b1b;
2515 }
2516
2517 /* Modal Styles */
2518 .mxch-modal {
2519 position: fixed;
2520 top: 0;
2521 left: 0;
2522 right: 0;
2523 bottom: 0;
2524 z-index: 100000;
2525 display: flex;
2526 align-items: center;
2527 justify-content: center;
2528 }
2529
2530 .mxch-modal-backdrop {
2531 position: absolute;
2532 top: 0;
2533 left: 0;
2534 right: 0;
2535 bottom: 0;
2536 background: rgba(0, 0, 0, 0.5);
2537 }
2538
2539 .mxch-modal-content {
2540 position: relative;
2541 width: 100%;
2542 max-width: 480px;
2543 background: #ffffff;
2544 border-radius: 16px;
2545 box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
2546 margin: 20px;
2547 }
2548
2549 .mxch-modal-header {
2550 display: flex;
2551 justify-content: space-between;
2552 align-items: center;
2553 padding: 20px 24px;
2554 border-bottom: 1px solid #e2e8f0;
2555 }
2556
2557 .mxch-modal-header h3 {
2558 margin: 0;
2559 font-size: 18px;
2560 font-weight: 600;
2561 color: #1e293b;
2562 }
2563
2564 .mxch-modal-close {
2565 width: 32px;
2566 height: 32px;
2567 display: flex;
2568 align-items: center;
2569 justify-content: center;
2570 background: none;
2571 border: none;
2572 font-size: 24px;
2573 color: #64748b;
2574 cursor: pointer;
2575 border-radius: 8px;
2576 transition: all 0.2s ease;
2577 }
2578
2579 .mxch-modal-close:hover {
2580 background: #f1f5f9;
2581 color: #1e293b;
2582 }
2583
2584 .mxch-modal-body {
2585 padding: 24px;
2586 }
2587
2588 .mxch-modal-footer {
2589 display: flex;
2590 justify-content: flex-end;
2591 gap: 12px;
2592 padding: 16px 24px;
2593 border-top: 1px solid #e2e8f0;
2594 background: #f8fafc;
2595 border-radius: 0 0 16px 16px;
2596 }
2597
2598 /* Input in modal */
2599 .mxch-input {
2600 width: 100%;
2601 padding: 10px 14px;
2602 font-size: 14px;
2603 border: 1px solid #d1d5db;
2604 border-radius: 8px;
2605 transition: all 0.2s ease;
2606 }
2607
2608 .mxch-input:focus {
2609 outline: none;
2610 border-color: var(--mxch-primary, #7873f5);
2611 box-shadow: 0 0 0 3px rgba(120, 115, 245, 0.1);
2612 }
2613
2614 /* Responsive adjustments for tools */
2615 @media screen and (max-width: 768px) {
2616 .mxch-tools-grid {
2617 grid-template-columns: 1fr;
2618 }
2619
2620 .mxch-tool-item {
2621 flex-direction: column;
2622 text-align: center;
2623 }
2624
2625 .mxch-tool-icon {
2626 margin: 0 auto;
2627 }
2628
2629 .mxchat-debug-log-viewer {
2630 max-height: 300px;
2631 }
2632
2633 .mxch-modal-content {
2634 margin: 10px;
2635 }
2636 }
2637
2638 /* ============================================================
2639 Dashboard page (Setup Assistant + dashboard cards)
2640 Added with plan-mxchat-20260526-704e25.
2641 ============================================================ */
2642
2643 .mxch-setup-card .mxch-card-body {
2644 padding-top: var(--mxch-spacing-md);
2645 }
2646
2647 .mxch-progress-bar {
2648 height: 6px;
2649 background: var(--mxch-card-border, #e5e7eb);
2650 border-radius: 999px;
2651 overflow: hidden;
2652 margin: var(--mxch-spacing-sm) 0 var(--mxch-spacing-xs);
2653 }
2654
2655 .mxch-progress-bar-fill {
2656 height: 100%;
2657 background: linear-gradient(90deg, var(--mxch-primary) 0%, #9b96ff 100%);
2658 border-radius: 999px;
2659 transition: width 400ms cubic-bezier(0.22, 1, 0.36, 1);
2660 }
2661
2662 .mxch-progress-label {
2663 font-size: 12px;
2664 color: var(--mxch-text-secondary);
2665 margin: 0 0 var(--mxch-spacing-md);
2666 font-weight: 500;
2667 }
2668
2669 .mxch-step-list {
2670 list-style: none;
2671 margin: 0;
2672 padding: 0;
2673 display: flex;
2674 flex-direction: column;
2675 gap: var(--mxch-spacing-sm);
2676 }
2677
2678 .mxch-step {
2679 display: grid;
2680 grid-template-columns: 32px 1fr auto;
2681 align-items: center;
2682 gap: var(--mxch-spacing-md);
2683 padding: var(--mxch-spacing-md);
2684 background: var(--mxch-content-bg, #f7f8fa);
2685 border: 1px solid transparent;
2686 border-radius: var(--mxch-radius-md);
2687 transition: background 160ms ease, border-color 160ms ease;
2688 }
2689
2690 .mxch-step.mxch-step-in-progress {
2691 background: var(--mxch-primary-lighter, rgba(120, 115, 245, 0.05));
2692 border-color: var(--mxch-primary-light, rgba(120, 115, 245, 0.1));
2693 }
2694
2695 .mxch-step.mxch-step-done {
2696 background: rgba(16, 185, 129, 0.06);
2697 }
2698
2699 .mxch-step-indicator {
2700 width: 28px;
2701 height: 28px;
2702 border-radius: 50%;
2703 display: flex;
2704 align-items: center;
2705 justify-content: center;
2706 font-size: 13px;
2707 font-weight: 600;
2708 background: #fff;
2709 color: var(--mxch-text-secondary, #64748b);
2710 border: 1.5px solid var(--mxch-card-border, #e5e7eb);
2711 flex-shrink: 0;
2712 }
2713
2714 .mxch-step-in-progress .mxch-step-indicator {
2715 color: var(--mxch-primary);
2716 border-color: var(--mxch-primary);
2717 background: #fff;
2718 box-shadow: 0 0 0 4px var(--mxch-primary-lighter, rgba(120, 115, 245, 0.06));
2719 }
2720
2721 .mxch-step-done .mxch-step-indicator {
2722 background: var(--mxch-success, #10b981);
2723 border-color: var(--mxch-success, #10b981);
2724 color: #fff;
2725 }
2726
2727 .mxch-step-number {
2728 line-height: 1;
2729 }
2730
2731 .mxch-step-body {
2732 min-width: 0;
2733 }
2734
2735 .mxch-step-title {
2736 font-size: 14px;
2737 font-weight: 600;
2738 color: var(--mxch-text-primary, #1a1a2e);
2739 margin-bottom: 2px;
2740 }
2741
2742 .mxch-step-done .mxch-step-title {
2743 color: var(--mxch-text-secondary, #64748b);
2744 }
2745
2746 .mxch-step-description {
2747 font-size: 12.5px;
2748 color: var(--mxch-text-secondary, #64748b);
2749 line-height: 1.45;
2750 }
2751
2752 .mxch-step-action {
2753 align-self: center;
2754 }
2755
2756 .mxch-setup-dismiss-row {
2757 margin-top: var(--mxch-spacing-md);
2758 text-align: right;
2759 }
2760
2761 .mxch-setup-dismiss,
2762 .mxch-setup-resume {
2763 font-size: 12.5px;
2764 color: var(--mxch-text-secondary, #64748b);
2765 text-decoration: none;
2766 border-bottom: 1px dotted currentColor;
2767 }
2768
2769 .mxch-setup-dismiss:hover,
2770 .mxch-setup-resume:hover {
2771 color: var(--mxch-primary);
2772 }
2773
2774 .mxch-resume-setup-row {
2775 margin: 0 0 var(--mxch-spacing-md);
2776 text-align: right;
2777 }
2778
2779 .mxch-dashboard-grid {
2780 display: grid;
2781 grid-template-columns: repeat(3, minmax(0, 1fr));
2782 gap: var(--mxch-spacing-md);
2783 margin-top: var(--mxch-spacing-lg);
2784 }
2785
2786 .mxch-dashboard-card .mxch-card-body {
2787 display: flex;
2788 flex-direction: column;
2789 gap: var(--mxch-spacing-sm);
2790 }
2791
2792 .mxch-dashboard-big-number {
2793 font-size: 36px;
2794 font-weight: 700;
2795 color: var(--mxch-text-primary, #1a1a2e);
2796 line-height: 1.1;
2797 letter-spacing: -0.02em;
2798 }
2799
2800 .mxch-dashboard-provider-name {
2801 font-size: 16px;
2802 font-weight: 600;
2803 color: var(--mxch-text-primary, #1a1a2e);
2804 word-break: break-word;
2805 }
2806
2807 .mxch-dashboard-card-meta {
2808 font-size: 13px;
2809 color: var(--mxch-text-secondary, #64748b);
2810 margin: 0;
2811 }
2812
2813 @media (max-width: 1024px) {
2814 .mxch-dashboard-grid {
2815 grid-template-columns: 1fr 1fr;
2816 }
2817 }
2818
2819 @media (max-width: 782px) {
2820 .mxch-step {
2821 grid-template-columns: 32px 1fr;
2822 grid-template-rows: auto auto;
2823 gap: var(--mxch-spacing-sm) var(--mxch-spacing-md);
2824 }
2825 .mxch-step-action {
2826 grid-column: 1 / -1;
2827 text-align: right;
2828 }
2829 .mxch-dashboard-grid {
2830 grid-template-columns: 1fr;
2831 }
2832 }
2833
2834 /* ------------------------------------------------------------------
2835 * Test Streaming Compatibility button (AI Models page)
2836 * Branded .mxch-btn replacing the legacy WP button + dashicon wrench.
2837 * ------------------------------------------------------------------ */
2838 .mxch-streaming-test-row {
2839 margin-top: var(--mxch-spacing-md, 16px);
2840 }
2841 .mxch-streaming-test-row .mxch-streaming-test-icon {
2842 vertical-align: middle;
2843 margin-right: 8px;
2844 }
2845 .mxch-streaming-test-result {
2846 margin-top: var(--mxch-spacing-sm, 12px);
2847 font-weight: 600;
2848 color: var(--mxch-text-primary, #1a1a2e);
2849 }
2850