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

2,191 lines 53.1 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 Quick Questions List
1293 ========================================================================== */
1294 .mxch-quick-questions {
1295 display: flex;
1296 flex-direction: column;
1297 gap: var(--mxch-spacing-sm);
1298 }
1299
1300 .mxch-quick-question-item {
1301 display: flex;
1302 align-items: center;
1303 gap: var(--mxch-spacing-sm);
1304 padding: var(--mxch-spacing-sm);
1305 background: #f8fafc;
1306 border: 1px solid var(--mxch-card-border);
1307 border-radius: var(--mxch-radius-md);
1308 }
1309
1310 .mxch-quick-question-item .mxch-input {
1311 flex: 1;
1312 background: white;
1313 }
1314
1315 .mxch-quick-question-remove {
1316 padding: 6px;
1317 background: none;
1318 border: none;
1319 color: var(--mxch-text-muted);
1320 cursor: pointer;
1321 border-radius: var(--mxch-radius-sm);
1322 transition: all var(--mxch-transition-fast);
1323 }
1324
1325 .mxch-quick-question-remove:hover {
1326 background: #fee2e2;
1327 color: var(--mxch-error);
1328 }
1329
1330 .mxch-quick-question-add {
1331 display: flex;
1332 align-items: center;
1333 justify-content: center;
1334 gap: var(--mxch-spacing-xs);
1335 padding: var(--mxch-spacing-sm);
1336 border: 2px dashed var(--mxch-card-border);
1337 border-radius: var(--mxch-radius-md);
1338 color: var(--mxch-text-muted);
1339 background: none;
1340 cursor: pointer;
1341 font-size: 13px;
1342 transition: all var(--mxch-transition-fast);
1343 }
1344
1345 .mxch-quick-question-add:hover {
1346 border-color: var(--mxch-primary);
1347 color: var(--mxch-primary);
1348 background: var(--mxch-primary-lighter);
1349 }
1350
1351 /* ==========================================================================
1352 Tutorials Grid (for YouTube Tutorials section)
1353 ========================================================================== */
1354 .mxch-tutorials-grid {
1355 display: grid;
1356 grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
1357 gap: var(--mxch-spacing-lg);
1358 }
1359
1360 .mxch-tutorial-card {
1361 background: white;
1362 border: 1px solid var(--mxch-card-border);
1363 border-radius: var(--mxch-radius-lg);
1364 overflow: hidden;
1365 transition: all var(--mxch-transition);
1366 }
1367
1368 .mxch-tutorial-card:hover {
1369 box-shadow: var(--mxch-card-shadow-hover);
1370 transform: translateY(-2px);
1371 }
1372
1373 .mxch-tutorial-content {
1374 padding: var(--mxch-spacing-md);
1375 }
1376
1377 .mxch-tutorial-title {
1378 font-size: 15px;
1379 font-weight: 600;
1380 color: var(--mxch-text-primary);
1381 margin: 0 0 var(--mxch-spacing-sm) 0;
1382 }
1383
1384 .mxch-tutorial-description {
1385 font-size: 13px;
1386 color: var(--mxch-text-secondary);
1387 margin: 0 0 var(--mxch-spacing-md) 0;
1388 line-height: 1.5;
1389 }
1390
1391 .mxch-tutorial-link {
1392 display: inline-flex;
1393 align-items: center;
1394 gap: var(--mxch-spacing-xs);
1395 color: var(--mxch-primary);
1396 font-size: 13px;
1397 font-weight: 600;
1398 text-decoration: none;
1399 }
1400
1401 .mxch-tutorial-link:hover {
1402 text-decoration: underline;
1403 }
1404
1405 /* ==========================================================================
1406 Autosave Indicator
1407 ========================================================================== */
1408 .mxch-autosave-indicator {
1409 display: flex;
1410 align-items: center;
1411 gap: var(--mxch-spacing-xs);
1412 font-size: 12px;
1413 color: var(--mxch-text-muted);
1414 padding: var(--mxch-spacing-xs) var(--mxch-spacing-sm);
1415 background: #f1f5f9;
1416 border-radius: 20px;
1417 }
1418
1419 .mxch-autosave-indicator.saving {
1420 color: var(--mxch-warning);
1421 }
1422
1423 .mxch-autosave-indicator.saved {
1424 color: var(--mxch-success);
1425 }
1426
1427 .mxch-autosave-dot {
1428 width: 6px;
1429 height: 6px;
1430 border-radius: 50%;
1431 background: currentColor;
1432 }
1433
1434 /* ==========================================================================
1435 Mobile Header (Hidden on Desktop)
1436 ========================================================================== */
1437 .mxch-mobile-header {
1438 display: none;
1439 }
1440
1441 /* ==========================================================================
1442 Mobile Menu Overlay
1443 ========================================================================== */
1444 .mxch-mobile-overlay {
1445 display: none;
1446 }
1447
1448 /* ==========================================================================
1449 Mobile Menu Modal
1450 ========================================================================== */
1451 .mxch-mobile-menu {
1452 display: none;
1453 }
1454
1455 /* ==========================================================================
1456 Responsive Design
1457 ========================================================================== */
1458 @media screen and (max-width: 1200px) {
1459 .mxch-sidebar {
1460 width: 220px;
1461 min-width: 220px;
1462 }
1463
1464 .mxch-content {
1465 padding: var(--mxch-spacing-lg);
1466 }
1467 }
1468
1469 @media screen and (max-width: 960px) {
1470 /* Hide desktop sidebar on mobile */
1471 .mxch-sidebar {
1472 display: none;
1473 }
1474
1475 /* Show mobile header */
1476 .mxch-mobile-header {
1477 display: flex;
1478 align-items: center;
1479 justify-content: space-between;
1480 padding: 12px 16px;
1481 background: var(--mxch-sidebar-bg);
1482 position: sticky;
1483 top: 0;
1484 z-index: 100;
1485 flex-shrink: 0;
1486 border-bottom: 4px solid transparent;
1487 border-image: linear-gradient(135deg, #fa73e6, #7873f5, #3ac9d1);
1488 border-image-slice: 1;
1489 }
1490
1491 .mxch-mobile-header::before {
1492 content: '';
1493 position: absolute;
1494 top: 0;
1495 left: 0;
1496 width: 100%;
1497 height: 100%;
1498 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%);
1499 z-index: -1;
1500 }
1501
1502 .mxch-mobile-logo {
1503 display: flex;
1504 align-items: center;
1505 gap: 8px;
1506 text-decoration: none;
1507 }
1508
1509 .mxch-mobile-logo-icon {
1510 width: 28px;
1511 height: 28px;
1512 flex-shrink: 0;
1513 }
1514
1515 .mxch-mobile-logo-icon img {
1516 width: 100%;
1517 height: 100%;
1518 object-fit: contain;
1519 }
1520
1521 .mxch-mobile-logo-text {
1522 font-size: 18px;
1523 font-weight: 700;
1524 color: #ffffff;
1525 letter-spacing: -0.5px;
1526 }
1527
1528 .mxch-mobile-menu-btn {
1529 display: flex;
1530 align-items: center;
1531 justify-content: center;
1532 width: 40px;
1533 height: 40px;
1534 background: rgba(255, 255, 255, 0.1);
1535 border: none;
1536 border-radius: 8px;
1537 color: #ffffff;
1538 cursor: pointer;
1539 transition: background 0.15s ease;
1540 }
1541
1542 .mxch-mobile-menu-btn:hover {
1543 background: rgba(255, 255, 255, 0.15);
1544 }
1545
1546 /* Mobile Overlay */
1547 .mxch-mobile-overlay {
1548 display: block;
1549 position: fixed;
1550 top: 46px; /* Account for WordPress admin bar on mobile (46px on smaller screens) */
1551 left: 0;
1552 right: 0;
1553 bottom: 0;
1554 background: rgba(0, 0, 0, 0.5);
1555 z-index: 998;
1556 opacity: 0;
1557 visibility: hidden;
1558 transition: opacity 0.3s ease, visibility 0.3s ease;
1559 }
1560
1561 .mxch-mobile-overlay.open {
1562 opacity: 1;
1563 visibility: visible;
1564 }
1565
1566 /* Mobile Menu Modal */
1567 .mxch-mobile-menu {
1568 display: flex;
1569 flex-direction: column;
1570 position: fixed;
1571 top: 46px; /* Account for WordPress admin bar on mobile (46px on smaller screens) */
1572 right: 0;
1573 bottom: 0;
1574 width: 300px;
1575 max-width: 85vw;
1576 background: var(--mxch-sidebar-bg);
1577 z-index: 999;
1578 transform: translateX(100%);
1579 transition: transform 0.3s ease;
1580 overflow: hidden;
1581 overflow-x: hidden;
1582 box-sizing: border-box;
1583 }
1584
1585 .mxch-mobile-menu::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: 0;
1594 pointer-events: none;
1595 }
1596
1597 .mxch-mobile-menu.open {
1598 transform: translateX(0);
1599 }
1600
1601 .mxch-mobile-menu-header {
1602 display: flex;
1603 align-items: center;
1604 justify-content: space-between;
1605 padding: 16px 20px;
1606 border-bottom: 4px solid transparent;
1607 border-image: linear-gradient(135deg, #fa73e6, #7873f5, #3ac9d1);
1608 border-image-slice: 1;
1609 position: relative;
1610 z-index: 1;
1611 }
1612
1613 .mxch-mobile-menu-title {
1614 font-size: 16px;
1615 font-weight: 600;
1616 color: #ffffff;
1617 }
1618
1619 .mxch-mobile-menu-close {
1620 display: flex;
1621 align-items: center;
1622 justify-content: center;
1623 width: 36px;
1624 height: 36px;
1625 background: rgba(255, 255, 255, 0.1);
1626 border: none;
1627 border-radius: 8px;
1628 color: #ffffff;
1629 cursor: pointer;
1630 transition: background 0.15s ease;
1631 }
1632
1633 .mxch-mobile-menu-close:hover {
1634 background: rgba(255, 255, 255, 0.15);
1635 }
1636
1637 .mxch-mobile-menu-nav {
1638 flex: 1;
1639 overflow-y: auto;
1640 padding: 16px 0;
1641 position: relative;
1642 z-index: 1;
1643 }
1644
1645 .mxch-mobile-nav-section {
1646 margin-bottom: 8px;
1647 }
1648
1649 .mxch-mobile-nav-section-title {
1650 font-size: 11px;
1651 font-weight: 600;
1652 text-transform: uppercase;
1653 letter-spacing: 0.5px;
1654 color: var(--mxch-sidebar-text);
1655 padding: 12px 20px 8px;
1656 opacity: 0.7;
1657 }
1658
1659 .mxch-mobile-nav-link {
1660 display: flex;
1661 align-items: center;
1662 gap: 10px;
1663 width: 100%;
1664 padding: 12px 20px;
1665 background: none;
1666 border: none;
1667 color: var(--mxch-sidebar-text);
1668 font-size: 14px;
1669 font-weight: 500;
1670 text-align: left;
1671 cursor: pointer;
1672 transition: all 0.15s ease;
1673 }
1674
1675 .mxch-mobile-nav-link:hover {
1676 background: rgba(255, 255, 255, 0.05);
1677 color: #ffffff;
1678 }
1679
1680 .mxch-mobile-nav-link.active {
1681 background: var(--mxch-sidebar-active-bg);
1682 color: #ffffff;
1683 }
1684
1685 .mxch-mobile-nav-link.expanded {
1686 background: rgba(255, 255, 255, 0.05);
1687 color: #ffffff;
1688 }
1689
1690 .mxch-mobile-nav-link span {
1691 flex: 1;
1692 }
1693
1694 /* Prevent addon status dot from expanding - override flex: 1 from above */
1695 .mxch-mobile-nav-link .mxch-addon-status-dot {
1696 flex: 0 0 8px;
1697 width: 8px;
1698 height: 8px;
1699 }
1700
1701 .mxch-mobile-nav-arrow {
1702 opacity: 0.5;
1703 transition: transform 0.2s ease;
1704 }
1705
1706 .mxch-mobile-nav-link.expanded .mxch-mobile-nav-arrow {
1707 transform: rotate(90deg);
1708 opacity: 1;
1709 }
1710
1711 /* Mobile Sub Navigation */
1712 .mxch-mobile-nav-sub {
1713 display: none;
1714 background: rgba(0, 0, 0, 0.2);
1715 }
1716
1717 .mxch-mobile-nav-sub.expanded {
1718 display: block;
1719 }
1720
1721 .mxch-mobile-nav-sub-link {
1722 display: flex;
1723 align-items: center;
1724 gap: 8px;
1725 width: 100%;
1726 padding: 10px 20px 10px 52px;
1727 background: none;
1728 border: none;
1729 color: var(--mxch-sidebar-text);
1730 font-size: 13px;
1731 text-align: left;
1732 cursor: pointer;
1733 transition: all 0.15s ease;
1734 }
1735
1736 .mxch-mobile-nav-sub-link::before {
1737 content: '';
1738 width: 6px;
1739 height: 6px;
1740 border-radius: 50%;
1741 background: currentColor;
1742 opacity: 0.4;
1743 }
1744
1745 .mxch-mobile-nav-sub-link:hover {
1746 background: rgba(255, 255, 255, 0.03);
1747 color: #ffffff;
1748 }
1749
1750 .mxch-mobile-nav-sub-link.active {
1751 color: var(--mxch-primary);
1752 background: rgba(120, 115, 245, 0.1);
1753 }
1754
1755 .mxch-mobile-nav-sub-link.active::before {
1756 opacity: 1;
1757 background: var(--mxch-primary);
1758 }
1759
1760 /* Mobile Menu Footer */
1761 .mxch-mobile-menu-footer {
1762 padding: 16px 20px;
1763 border-top: 1px solid rgba(255, 255, 255, 0.1);
1764 position: relative;
1765 z-index: 1;
1766 box-sizing: border-box;
1767 max-width: 100%;
1768 overflow: hidden;
1769 }
1770
1771 .mxch-mobile-upgrade-btn {
1772 display: flex;
1773 align-items: center;
1774 justify-content: center;
1775 gap: 8px;
1776 width: 100%;
1777 padding: 12px 16px;
1778 background: linear-gradient(135deg, var(--mxch-primary), #a78bfa);
1779 border-radius: 8px;
1780 color: white;
1781 text-decoration: none;
1782 font-size: 14px;
1783 font-weight: 600;
1784 transition: all 0.15s ease;
1785 box-sizing: border-box;
1786 max-width: 100%;
1787 }
1788
1789 .mxch-mobile-upgrade-btn:hover {
1790 transform: translateY(-1px);
1791 box-shadow: 0 4px 12px rgba(120, 115, 245, 0.4);
1792 color: white;
1793 }
1794
1795 /* Adjust main layout for mobile */
1796 .mxch-admin-wrapper {
1797 flex-direction: column;
1798 position: fixed;
1799 left: 0;
1800 right: 0;
1801 overflow: auto;
1802 }
1803
1804 .mxch-content {
1805 height: auto;
1806 overflow: visible;
1807 padding: var(--mxch-spacing-lg);
1808 width: 100%;
1809 box-sizing: border-box;
1810 }
1811
1812 /* Center content sections on mobile */
1813 .mxch-content-section {
1814 max-width: 100%;
1815 margin-left: auto;
1816 margin-right: auto;
1817 }
1818
1819 .mxch-rate-limit-controls {
1820 flex-direction: column;
1821 }
1822 }
1823
1824 @media screen and (max-width: 600px) {
1825 .mxch-content {
1826 padding: var(--mxch-spacing-md);
1827 }
1828
1829 .mxch-card-body {
1830 padding: var(--mxch-spacing-md);
1831 }
1832
1833 .mxch-card {
1834 margin-left: 0;
1835 margin-right: 0;
1836 }
1837
1838 .mxch-pro-banner {
1839 flex-direction: column;
1840 text-align: center;
1841 padding: 16px;
1842 margin-left: 0;
1843 margin-right: 0;
1844 max-width: 100%;
1845 box-sizing: border-box;
1846 }
1847
1848 .mxch-pro-banner-content {
1849 max-width: 100%;
1850 }
1851
1852 .mxch-pro-banner-title {
1853 justify-content: center;
1854 font-size: 13px;
1855 }
1856
1857 .mxch-pro-banner-text {
1858 font-size: 12px;
1859 }
1860
1861 .mxch-pro-banner-btn {
1862 width: auto;
1863 max-width: 100%;
1864 padding: 10px 16px;
1865 font-size: 12px;
1866 justify-content: center;
1867 box-sizing: border-box;
1868 }
1869
1870 .mxch-field-row {
1871 flex-direction: column;
1872 }
1873
1874 .mxch-api-key-wrapper {
1875 flex-direction: column;
1876 }
1877
1878 .mxch-mobile-menu {
1879 width: 100%;
1880 max-width: 100%;
1881 }
1882 }
1883
1884 /* ==========================================================================
1885 WordPress Admin Overrides
1886 ========================================================================== */
1887 .mxch-admin-wrapper .form-table {
1888 margin: 0;
1889 }
1890
1891 .mxch-admin-wrapper .form-table th {
1892 padding: 0;
1893 width: auto;
1894 }
1895
1896 .mxch-admin-wrapper .form-table td {
1897 padding: 0;
1898 }
1899
1900 .mxch-admin-wrapper .form-table tr {
1901 display: block;
1902 margin-bottom: var(--mxch-spacing-lg);
1903 }
1904
1905 .mxch-admin-wrapper .form-table tr:last-child {
1906 margin-bottom: 0;
1907 }
1908
1909 /* ==========================================================================
1910 Autosave Feedback Indicators
1911 ========================================================================== */
1912 .mxch-admin-wrapper .feedback-container {
1913 display: inline-flex;
1914 align-items: center;
1915 margin-left: 10px;
1916 position: relative;
1917 z-index: 10;
1918 vertical-align: middle;
1919 }
1920
1921 .mxch-admin-wrapper .saving-spinner {
1922 width: 16px;
1923 height: 16px;
1924 border: 2px solid #e2e8f0;
1925 border-top-color: var(--mxch-primary);
1926 border-radius: 50%;
1927 animation: mxcSpin 0.6s linear infinite;
1928 }
1929
1930 .mxch-admin-wrapper .success-icon {
1931 display: none;
1932 color: var(--mxch-success);
1933 font-size: 16px;
1934 font-weight: bold;
1935 margin-left: 5px;
1936 }
1937
1938 @keyframes mxcSpin {
1939 to {
1940 transform: rotate(360deg);
1941 }
1942 }
1943
1944 /* Ensure feedback container appears inline with toggles */
1945 .mxch-admin-wrapper .toggle-switch + .feedback-container,
1946 .mxch-admin-wrapper .mxchat-toggle-switch + .feedback-container,
1947 .mxch-admin-wrapper label.toggle-switch ~ .feedback-container {
1948 display: inline-flex;
1949 vertical-align: middle;
1950 }
1951
1952 /* Position feedback near inputs - use inline for form-table context */
1953 .mxch-admin-wrapper .form-table input + .feedback-container,
1954 .mxch-admin-wrapper .form-table select + .feedback-container,
1955 .mxch-admin-wrapper .form-table textarea + .feedback-container {
1956 position: relative;
1957 display: inline-flex;
1958 vertical-align: middle;
1959 margin-left: 10px;
1960 right: auto;
1961 top: auto;
1962 transform: none;
1963 }
1964
1965 /* Position feedback near inputs - absolute for card layouts with field-control */
1966 .mxch-admin-wrapper .mxch-field-control input + .feedback-container,
1967 .mxch-admin-wrapper .mxch-field-control select + .feedback-container,
1968 .mxch-admin-wrapper .mxch-field-control textarea + .feedback-container {
1969 position: absolute;
1970 right: -30px;
1971 top: 50%;
1972 transform: translateY(-50%);
1973 }
1974
1975 /* Make input containers relative for absolute positioning */
1976 .mxch-admin-wrapper .mxch-field-control {
1977 position: relative;
1978 }
1979
1980 /* Feedback inside slider container */
1981 .mxch-admin-wrapper .slider-container + .feedback-container {
1982 margin-left: 15px;
1983 }
1984
1985 /* ==========================================================================
1986 Real-time Entry Updates
1987 ========================================================================== */
1988
1989 /* New entry highlight animation */
1990 .mxchat-new-entry {
1991 background-color: rgba(120, 115, 245, 0.15);
1992 animation: mxchatNewEntryFade 2s ease-out forwards;
1993 }
1994
1995 @keyframes mxchatNewEntryFade {
1996 0% {
1997 background-color: rgba(120, 115, 245, 0.25);
1998 }
1999 100% {
2000 background-color: transparent;
2001 }
2002 }
2003
2004 /* Count update flash */
2005 #mxchat-entry-count.mxchat-count-updated,
2006 #mxchat-sidebar-count.mxchat-count-updated {
2007 animation: mxchatCountPulse 0.5s ease-out;
2008 }
2009
2010 @keyframes mxchatCountPulse {
2011 0% {
2012 color: var(--mxch-primary);
2013 transform: scale(1.2);
2014 }
2015 100% {
2016 color: var(--mxch-text-secondary);
2017 transform: scale(1);
2018 }
2019 }
2020
2021 /* Sidebar badge specific pulse - keep white text on purple background */
2022 #mxchat-sidebar-count.mxchat-count-updated {
2023 animation: mxchatSidebarCountPulse 0.5s ease-out;
2024 }
2025
2026 @keyframes mxchatSidebarCountPulse {
2027 0% {
2028 transform: scale(1.3);
2029 background: var(--mxch-success);
2030 }
2031 100% {
2032 transform: scale(1);
2033 background: var(--mxch-primary);
2034 }
2035 }
2036
2037 /* ==========================================================================
2038 Pro Upgrade v2 - Cleaner, More Professional Design
2039 ========================================================================== */
2040
2041 /* Sidebar Upgrade Button - v2 (Concise) */
2042 .mxch-sidebar-upgrade-v2 {
2043 display: flex;
2044 align-items: center;
2045 justify-content: center;
2046 gap: 8px;
2047 padding: 10px 16px;
2048 background: rgba(120, 115, 245, 0.1);
2049 border: 1px solid rgba(120, 115, 245, 0.25);
2050 border-radius: var(--mxch-radius-md);
2051 color: #c4c1ff;
2052 text-decoration: none;
2053 font-size: 13px;
2054 font-weight: 500;
2055 transition: all 0.2s ease;
2056 position: relative;
2057 }
2058
2059 .mxch-sidebar-upgrade-v2:hover {
2060 background: rgba(120, 115, 245, 0.2);
2061 border-color: rgba(120, 115, 245, 0.5);
2062 color: #ffffff;
2063 text-decoration: none;
2064 }
2065
2066 .mxch-sidebar-upgrade-v2:focus {
2067 outline: none;
2068 box-shadow: 0 0 0 2px rgba(120, 115, 245, 0.4);
2069 }
2070
2071 .mxch-sidebar-upgrade-v2 svg {
2072 width: 14px;
2073 height: 14px;
2074 opacity: 0.8;
2075 flex-shrink: 0;
2076 }
2077
2078 .mxch-sidebar-upgrade-v2:hover svg {
2079 opacity: 1;
2080 }
2081
2082 /* Pro Banner - v2 (Clean & Minimal) */
2083 .mxch-pro-banner-v2 {
2084 display: flex;
2085 align-items: center;
2086 justify-content: space-between;
2087 gap: 20px;
2088 padding: 14px 20px;
2089 background: linear-gradient(135deg, rgba(120, 115, 245, 0.08) 0%, rgba(167, 139, 250, 0.06) 100%);
2090 border: 1px solid rgba(120, 115, 245, 0.15);
2091 border-radius: var(--mxch-radius-md);
2092 margin-bottom: var(--mxch-spacing-lg);
2093 }
2094
2095 .mxch-pro-banner-v2-content {
2096 display: flex;
2097 align-items: center;
2098 gap: 12px;
2099 flex: 1;
2100 min-width: 0;
2101 }
2102
2103 .mxch-pro-banner-v2-icon {
2104 width: 32px;
2105 height: 32px;
2106 display: flex;
2107 align-items: center;
2108 justify-content: center;
2109 background: linear-gradient(135deg, var(--mxch-primary) 0%, #a78bfa 100%);
2110 border-radius: 8px;
2111 flex-shrink: 0;
2112 }
2113
2114 .mxch-pro-banner-v2-icon svg {
2115 width: 16px;
2116 height: 16px;
2117 color: white;
2118 }
2119
2120 .mxch-pro-banner-v2-text {
2121 flex: 1;
2122 min-width: 0;
2123 }
2124
2125 .mxch-pro-banner-v2-title {
2126 font-size: 14px;
2127 font-weight: 600;
2128 color: var(--mxch-text-primary);
2129 margin: 0 0 2px 0;
2130 }
2131
2132 .mxch-pro-banner-v2-desc {
2133 font-size: 12px;
2134 color: var(--mxch-text-secondary);
2135 margin: 0;
2136 line-height: 1.4;
2137 }
2138
2139 .mxch-pro-banner-v2-btn {
2140 display: inline-flex;
2141 align-items: center;
2142 gap: 6px;
2143 padding: 8px 16px;
2144 background: var(--mxch-primary);
2145 color: white;
2146 font-size: 13px;
2147 font-weight: 500;
2148 border-radius: 6px;
2149 text-decoration: none;
2150 transition: all 0.2s ease;
2151 white-space: nowrap;
2152 flex-shrink: 0;
2153 }
2154
2155 .mxch-pro-banner-v2-btn:hover {
2156 background: var(--mxch-primary-hover);
2157 color: white;
2158 text-decoration: none;
2159 transform: translateY(-1px);
2160 box-shadow: 0 4px 12px rgba(120, 115, 245, 0.3);
2161 }
2162
2163 .mxch-pro-banner-v2-btn:focus {
2164 outline: none;
2165 box-shadow: 0 0 0 3px rgba(120, 115, 245, 0.3);
2166 }
2167
2168 .mxch-pro-banner-v2-btn svg {
2169 width: 14px;
2170 height: 14px;
2171 }
2172
2173 /* Mobile responsive for v2 banner */
2174 @media screen and (max-width: 600px) {
2175 .mxch-pro-banner-v2 {
2176 flex-direction: column;
2177 text-align: center;
2178 padding: 16px;
2179 gap: 12px;
2180 }
2181
2182 .mxch-pro-banner-v2-content {
2183 flex-direction: column;
2184 }
2185
2186 .mxch-pro-banner-v2-btn {
2187 width: 100%;
2188 justify-content: center;
2189 }
2190 }
2191