PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 2.9.8
AI Engine – The Chatbot, AI Framework & MCP for WordPress v2.9.8
3.6.2 3.6.1 3.6.0 3.5.9 3.5.8 3.5.7 3.5.6 3.5.5 3.5.4 3.5.3 3.5.2 3.5.1 3.5.0 3.4.9 3.4.8 3.4.7 0.2.1 1.6.91 0.2.2 1.6.92 0.2.3 1.6.93 0.2.4 1.6.94 0.2.5 1.6.95 0.2.6 1.6.96 0.2.7 1.6.97 0.2.8 1.6.98 0.2.9 1.6.99 0.3.0 1.7.0 0.3.1 1.7.1 0.3.2 1.7.2 0.3.3 1.7.3 0.3.4 1.7.4 0.3.5 1.7.5 0.3.6 1.7.6 0.4.0 1.7.7 0.4.1 1.7.8 0.4.2 1.7.9 0.4.3 1.8.0 0.4.4 1.8.1 0.4.5 1.8.2 0.4.6 1.8.3 0.4.7 1.8.4 0.4.8 1.8.5 0.4.9 1.8.6 0.5.0 1.8.7 0.5.1 1.8.8 0.5.2 1.8.9 0.5.3 1.9.0 0.5.4 1.9.1 0.5.5 1.9.2 0.5.6 1.9.3 0.5.7 1.9.4 0.5.8 1.9.5 0.5.9 1.9.6 0.6.0 1.9.7 0.6.1 1.9.8 0.6.2 1.9.81 0.6.3 1.9.82 0.6.4 1.9.83 0.6.5 1.9.84 0.6.6 1.9.85 0.6.7 1.9.86 0.6.8 1.9.87 0.6.9 1.9.88 0.7.0 1.9.89 0.7.1 1.9.90 0.7.2 1.9.91 0.7.3 1.9.92 0.7.4 1.9.93 0.7.5 1.9.94 0.7.6 1.9.95 0.7.7 1.9.96 0.7.8 1.9.97 0.7.9 1.9.98 0.8.0 1.9.99 0.8.1 2.0.0 0.8.2 2.0.1 0.8.3 2.0.2 0.8.4 2.0.3 0.8.5 2.0.4 0.8.6 2.0.5 0.8.7 2.0.6 0.8.8 2.0.7 0.8.9 2.0.8 0.9.0 2.0.9 0.9.2 2.1.0 0.9.3 2.1.1 0.9.4 2.1.2 0.9.5 2.1.3 0.9.6 2.1.4 0.9.7 2.1.5 0.9.8 2.1.6 0.9.81 2.1.7 0.9.82 2.1.8 0.9.83 2.1.9 0.9.84 2.2.0 0.9.85 2.2.1 0.9.86 2.2.2 0.9.87 2.2.3 0.9.88 2.2.4 0.9.89 2.2.5 0.9.9 2.2.51 0.9.91 2.2.52 0.9.92 2.2.53 0.9.93 2.2.54 0.9.94 2.2.56 0.9.95 2.2.57 0.9.96 2.2.6 0.9.97 2.2.60 0.9.98 2.2.61 0.9.99 2.2.62 1.0.0 2.2.63 1.0.01 2.2.70 1.0.1 2.2.80 1.0.2 2.2.81 1.0.3 2.2.90 1.0.4 2.2.91 1.0.5 2.2.92 1.0.6 2.2.93 1.0.7 2.2.94 1.0.8 2.2.95 1.0.9 2.3.0 1.1.0 2.3.1 1.1.1 2.3.2 1.1.2 2.3.3 1.1.3 2.3.4 1.1.4 2.3.5 1.1.5 2.3.6 1.1.6 2.3.7 1.1.7 2.3.8 1.1.8 2.3.9 1.1.9 2.4.0 1.2.0 2.4.1 1.2.1 2.4.2 1.2.2 2.4.3 1.2.21 2.4.4 1.2.3 2.4.5 1.2.30 2.4.6 1.3.0 2.4.7 1.3.1 2.4.8 1.3.2 2.4.9 1.3.3 2.5.0 1.3.31 2.5.1 1.3.32 2.5.2 1.3.33 2.5.3 1.3.34 2.5.4 1.3.35 2.5.5 1.3.36 2.5.6 1.3.37 2.5.7 1.3.38 2.5.8 1.3.39 2.5.9 1.3.40 2.6.0 1.3.41 2.6.1 1.3.42 2.6.2 1.3.43 2.6.3 1.3.44 2.6.5 1.3.45 2.6.6 1.3.46 2.6.7 1.3.47 2.6.8 1.3.48 2.6.9 1.3.49 2.7.0 1.3.50 2.7.1 1.3.51 2.7.2 1.3.52 2.7.3 1.3.53 2.7.4 1.3.54 2.7.5 1.3.56 2.7.6 1.3.57 2.7.7 1.3.58 2.7.8 1.3.59 2.7.9 1.3.60 2.8.0 1.3.61 2.8.1 1.3.62 2.8.2 1.3.63 2.8.3 1.3.64 2.8.4 1.3.65 2.8.5 1.3.66 2.8.6 1.3.67 2.8.7 1.3.68 2.8.8 1.3.69 2.8.9 1.3.70 2.9.0 1.3.71 2.9.1 1.3.72 2.9.2 1.3.73 2.9.3 1.3.74 2.9.4 1.3.75 2.9.5 1.3.76 2.9.6 1.3.77 2.9.7 1.3.78 2.9.8 1.3.79 2.9.9 1.3.80 3.0.0 1.3.81 3.0.1 1.3.82 3.0.2 1.3.83 3.0.3 1.3.84 3.0.4 1.3.85 3.0.5 1.3.86 3.0.6 1.3.87 3.0.7 1.3.88 3.0.8 1.3.89 3.0.9 1.3.90 3.1.0 1.3.91 3.1.1 1.3.92 3.1.2 1.3.93 3.1.3 1.3.94 3.1.4 1.3.95 3.1.5 1.3.96 3.1.6 1.3.97 3.1.7 1.3.98 3.1.8 1.3.99 3.1.9 1.4.0 3.2.0 1.4.1 3.2.1 1.4.2 3.2.2 1.4.3 3.2.3 1.4.4 3.2.4 1.4.5 3.2.5 1.4.6 3.2.6 1.4.7 3.2.7 1.4.8 3.2.8 1.4.9 3.2.9 1.5.0 3.3.0 1.5.1 3.3.1 1.5.2 3.3.2 1.5.3 3.3.3 1.5.4 3.3.4 1.5.5 3.3.5 1.5.6 3.3.6 1.5.7 3.3.7 1.5.8 3.3.8 1.5.9 3.3.9 1.6.0 3.4.0 1.6.1 3.4.1 1.6.2 3.4.2 1.6.3 3.4.3 1.6.5 3.4.4 1.6.51 3.4.5 1.6.52 3.4.6 1.6.53 1.6.54 1.6.55 1.6.56 1.6.57 1.6.58 1.6.59 1.6.60 1.6.61 1.6.62 1.6.63 1.6.64 1.6.65 1.6.66 1.6.67 1.6.68 trunk 1.6.69 0.0.1 1.6.70 0.0.2 1.6.71 0.0.3 1.6.72 0.0.4 1.6.73 0.0.5 1.6.74 0.0.6 1.6.75 0.0.7 1.6.76 0.0.8 1.6.77 0.0.9 1.6.78 0.1.0 1.6.79 0.1.1 1.6.81 0.1.2 1.6.82 0.1.3 1.6.83 0.1.4 1.6.84 0.1.5 1.6.85 0.1.6 1.6.86 0.1.7 1.6.87 0.1.8 1.6.88 0.1.9 1.6.89 0.2.0 1.6.90
ai-engine / themes / sass / _common.scss
ai-engine / themes / sass Last commit date
_common.scss 11 months ago chatgpt.scss 11 months ago messages.scss 11 months ago timeless.scss 11 months ago
_common.scss
1457 lines
1 // main: chatgpt.scss, messages.scss
2
3 @mixin discussions-styles {
4 &.mwai-discussions {
5 border-radius: var(--mwai-borderRadius);
6 background: var(--mwai-backgroundHeaderColor);
7 overflow: hidden;
8
9 * {
10 box-sizing: border-box;
11 }
12
13 .mwai-discussion {
14 display: flex;
15 position: relative;
16 padding-left: calc(var(--mwai-spacing) / 2);
17 padding-right: calc(var(--mwai-spacing) / 2);
18 padding-bottom: calc(var(--mwai-spacing) / 2);
19 color: var(--mwai-conversationsTextColor);
20 opacity: 0.65;
21 align-items: center;
22
23 .mwai-discussion-content {
24 flex: 1;
25 padding: 5px 10px;
26 overflow: hidden;
27 }
28
29 .mwai-discussion-title {
30 display: block;
31 overflow: hidden;
32 text-overflow: ellipsis;
33 white-space: nowrap;
34 font-size: var(--mwai-fontSize);
35 margin-bottom: 4px;
36 }
37
38 .mwai-discussion-info {
39 display: flex;
40 gap: 12px;
41 font-size: calc(var(--mwai-fontSize) * 0.85);
42 opacity: 0.7;
43
44 .mwai-info-item {
45 display: flex;
46 align-items: center;
47 gap: 4px;
48
49 svg {
50 opacity: 0.6;
51 }
52 }
53 }
54
55 .mwai-discussion-actions {
56 position: absolute;
57 top: 50%;
58 right: calc(var(--mwai-spacing) / 2);
59 transform: translateY(-50%);
60 opacity: 0;
61 transition: opacity 0.2s ease-out;
62 z-index: 100;
63
64 .mwai-menu-icon {
65 width: 28px;
66 height: 28px;
67 display: flex;
68 align-items: center;
69 justify-content: center;
70 cursor: pointer;
71 color: var(--mwai-conversationsTextColor);
72 }
73
74 }
75
76 &.mwai-active {
77 cursor: pointer;
78
79 .mwai-discussion-content {
80 background: var(--mwai-backgroundPrimaryColor);
81 border-radius: var(--mwai-borderRadius);
82 opacity: 1;
83 }
84 }
85
86 &:hover {
87 cursor: pointer;
88
89 .mwai-discussion-content {
90 background: var(--mwai-backgroundPrimaryColor);
91 border-radius: var(--mwai-borderRadius);
92 opacity: 1;
93 }
94
95 .mwai-discussion-actions {
96 opacity: 1;
97 }
98 }
99
100 // Keep actions visible when menu is open
101 &:has(.mwai-context-menu) {
102 .mwai-discussion-actions {
103 opacity: 1;
104 }
105 }
106
107 &:first-child {
108 margin-top: calc(var(--mwai-spacing) / 2);
109 }
110 }
111
112 .mwai-header {
113 color: var(--mwai-headerButtonsColor);
114 padding: var(--mwai-spacing);
115 display: flex;
116 justify-content: space-between;
117 align-items: center;
118 gap: 10px;
119
120 button {
121 background: var(--mwai-backgroundPrimaryColor);
122 color: var(--mwai-fontColor);
123 border: none;
124 padding: 8px 16px;
125 border-radius: var(--mwai-borderRadius);
126 cursor: pointer;
127 transition: all 0.2s ease-out;
128
129 &:hover:not(:disabled) {
130 background: var(--mwai-iconTextBackgroundColor);
131 }
132
133 &:disabled {
134 opacity: 0.5;
135 cursor: not-allowed;
136 }
137 }
138
139 .mwai-refresh-btn {
140 padding: 8px;
141 display: flex;
142 align-items: center;
143 justify-content: center;
144 }
145 }
146
147 .mwai-body {
148 background: var(--mwai-conversationsBackgroundColor);
149 list-style: none;
150 padding: 0;
151 margin: 0;
152 position: relative;
153 min-height: 200px;
154 display: flex;
155 flex-direction: column;
156 border-radius: 0;
157 z-index: 1;
158 }
159
160 .mwai-loading-overlay {
161 position: absolute;
162 top: 0;
163 left: 0;
164 right: 0;
165 bottom: 0;
166 background: var(--mwai-conversationsBackgroundColor);
167 opacity: 0.9;
168 display: flex;
169 align-items: center;
170 justify-content: center;
171 z-index: 10;
172 }
173
174 .mwai-spinner {
175 animation: spin 1s linear infinite;
176 color: var(--mwai-fontColor);
177 }
178
179 @keyframes spin {
180 from { transform: rotate(0deg); }
181 to { transform: rotate(360deg); }
182 }
183
184 .mwai-pagination {
185 background: var(--mwai-backgroundHeaderColor);
186 padding: var(--mwai-spacing);
187 display: flex;
188 justify-content: space-between;
189 align-items: center;
190 border-top: 1px solid var(--mwai-backgroundPrimaryColor);
191
192 button {
193 background: var(--mwai-backgroundPrimaryColor);
194 color: var(--mwai-fontColor);
195 border: none;
196 padding: 8px 12px;
197 border-radius: var(--mwai-borderRadius);
198 cursor: pointer;
199 transition: all 0.2s ease-out;
200 display: flex;
201 align-items: center;
202 justify-content: center;
203
204 &:hover:not(:disabled) {
205 background: var(--mwai-iconTextBackgroundColor);
206 }
207
208 &:disabled {
209 opacity: 0.3;
210 cursor: not-allowed;
211 }
212 }
213
214 span {
215 color: var(--mwai-headerButtonsColor);
216 font-size: var(--mwai-fontSize);
217 font-weight: 500;
218 }
219
220 .mwai-page-indicator {
221 color: var(--mwai-headerButtonsColor);
222 font-size: calc(var(--mwai-fontSize) * 0.85);
223 font-weight: 400;
224 opacity: 0.8;
225 }
226 }
227 }
228 }
229
230 @mixin file-upload-icon-sprites {
231 $icon-size: 32px;
232
233 &.mwai-idle-add {
234 background-position: -1 * $icon-size -3 * $icon-size;
235 }
236
237 &.mwai-image-add {
238 background-position: -1 * $icon-size -0 * $icon-size;
239 }
240
241 &.mwai-image-up {
242 background-position: -2 * $icon-size -0 * $icon-size;
243 }
244
245 &.mwai-image-del {
246 background-position: -3 * $icon-size -0 * $icon-size;
247 }
248
249 &.mwai-image-ok {
250 background-position: -4 * $icon-size -0 * $icon-size;
251 }
252
253 &.mwai-document-add {
254 background-position: -1 * $icon-size -2 * $icon-size;
255 }
256
257 &.mwai-document-up {
258 background-position: -2 * $icon-size -2 * $icon-size;
259 }
260
261 &.mwai-document-del {
262 background-position: -3 * $icon-size -2 * $icon-size;
263 }
264
265 &.mwai-document-ok {
266 background-position: -4 * $icon-size -2 * $icon-size;
267 }
268
269 .mwai-file-upload-progress {
270 position: absolute;
271 font-size: 8px;
272 width: 21px;
273 top: 24px;
274 left: 23px;
275 overflow: hidden;
276 text-align: center;
277 font-weight: bold;
278 color: white;
279 }
280 }
281
282 @mixin microphone {
283
284 display: flex;
285 justify-content: center;
286 align-items: center;
287
288 svg {
289 opacity: 0.5;
290 filter: grayscale(100%);
291 transition: opacity 0.3s ease-out;
292 cursor: pointer;
293 }
294
295 &[active=true]=true] svg {
296 opacity: 1;
297 }
298
299 &[disabled]] svg {
300 opacity: 0;
301 cursor: not-allowed;
302 }
303 }
304
305 @mixin fullscreen-window {
306 position: fixed;
307 left: 0 !important;
308 right: 0 !important;
309 bottom: 0 !important;
310 top: 0 !important;
311 width: 100%;
312 height: 100%;
313 max-height: 100%;
314 max-width: 100%;
315 display: flex;
316 flex-direction: column;
317 margin: 0;
318 z-index: 999999;
319 background-color: var(--mwai-backgroundSecondaryColor);
320
321 .mwai-header {
322 border-radius: 0;
323 }
324
325 .mwai-body {
326 height: 100%;
327 max-height: inherit;
328 border-radius: 0;
329
330 .mwai-conversation {
331 flex: auto;
332 max-height: none;
333 }
334 }
335 }
336
337 @mixin files-preview-styles {
338 .mwai-files {
339 display: flex;
340 flex-direction: column;
341 gap: 6px;
342 padding: var(--mwai-spacing);
343 background: var(--mwai-backgroundSecondaryColor);
344 border-top: 1px solid var(--mwai-backgroundPrimaryColor);
345 max-height: 150px;
346 overflow-y: auto;
347
348 // Custom scrollbar for webkit browsers
349 &::-webkit-scrollbar {
350 width: 6px;
351 }
352
353 &::-webkit-scrollbar-track {
354 background: var(--mwai-backgroundPrimaryColor);
355 border-radius: 3px;
356 }
357
358 &::-webkit-scrollbar-thumb {
359 background: var(--mwai-backgroundHeaderColor);
360 border-radius: 3px;
361
362 &:hover {
363 background: var(--mwai-primaryColor);
364 }
365 }
366
367 .mwai-file-preview {
368 position: relative;
369
370 .mwai-file-content {
371 display: flex;
372 align-items: center;
373 gap: 8px;
374 }
375
376 .mwai-file-thumbnail {
377 width: 32px;
378 height: 32px;
379 object-fit: cover;
380 border-radius: 4px;
381 border: 1px solid var(--mwai-backgroundHeaderColor);
382 display: block;
383 flex-shrink: 0;
384 }
385
386 .mwai-file-icon {
387 width: 32px;
388 height: 32px;
389 display: flex;
390 align-items: center;
391 justify-content: center;
392 background: var(--mwai-backgroundSecondaryColor);
393 border-radius: 4px;
394 color: var(--mwai-fontColor);
395 opacity: 0.6;
396 flex-shrink: 0;
397
398 svg {
399 width: 18px;
400 height: 18px;
401 }
402 }
403
404 .mwai-file-info {
405 flex: 1;
406 min-width: 0;
407 display: flex;
408 flex-direction: column;
409 gap: 2px;
410 }
411
412 .mwai-file-name {
413 font-size: calc(var(--mwai-fontSize) * 0.85);
414 color: var(--mwai-fontColor);
415 white-space: nowrap;
416 overflow: hidden;
417 text-overflow: ellipsis;
418 line-height: 1.2;
419 }
420
421 .mwai-file-size {
422 font-size: calc(var(--mwai-fontSize) * 0.7);
423 color: var(--mwai-fontColor);
424 opacity: 0.5;
425 line-height: 1;
426 }
427
428 .mwai-file-progress {
429 position: absolute;
430 bottom: 0;
431 left: 0;
432 right: 0;
433 height: 2px;
434 background: var(--mwai-backgroundHeaderColor);
435 border-radius: 0 0 calc(var(--mwai-borderRadius) / 2) calc(var(--mwai-borderRadius) / 2);
436 overflow: hidden;
437
438 .mwai-file-progress-bar {
439 height: 100%;
440 background: var(--mwai-primaryColor);
441 transition: width 0.3s ease;
442 }
443 }
444
445 .mwai-file-remove {
446 display: flex;
447 align-items: center;
448 justify-content: center;
449 background: none;
450 cursor: pointer;
451 color: var(--mwai-fontColor);
452 padding: 4px;
453 border: none;
454 line-height: 0;
455 min-width: inherit;
456 margin-left: auto;
457 opacity: 0.6;
458 transition: opacity 0.2s ease;
459
460 &:hover {
461 opacity: 1;
462 }
463
464 svg {
465 width: 20px;
466 height: 20px;
467 }
468 }
469 }
470
471 // Empty state when no files
472 &:empty {
473 display: none;
474 }
475 }
476 }
477
478 @mixin common-styles {
479
480 // Include files preview styles
481 @include files-preview-styles;
482
483 // File upload icon adjustment
484 .mwai-file-upload-icon {
485 margin-bottom: -3px;
486 }
487
488 // Transitions
489
490 &.mwai-transition, .mwai-transition {
491 opacity: 0;
492 transition: opacity 350ms ease-in-out;
493 }
494
495 &.mwai-transition-visible, .mwai-transition-visible {
496 opacity: 1;
497 }
498
499 .mwai-text {
500 overflow-wrap: anywhere;
501
502 img {
503 max-width: 100%;
504 }
505
506 div {
507 p:first-child {
508 margin-top: 0;
509 }
510 p:last-child {
511 margin-bottom: 0;
512 }
513 }
514 }
515
516 // The icon when the chat window is closed.
517
518 .mwai-trigger {
519 position: absolute;
520 right: 0;
521 bottom: 0;
522 transition: all 0.2s ease-out;
523 z-index: 9999;
524 display: flex;
525 flex-direction: column;
526 align-items: end;
527
528 .mwai-icon-text-container {
529 display: flex;
530 flex-direction: column;
531 align-items: flex-end;
532
533 .mwai-icon-text {
534 background: var(--mwai-iconTextBackgroundColor);
535 color: var(--mwai-iconTextColor);
536 box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.15);
537 max-width: 200px;
538 font-size: 13px;
539 margin-bottom: 15px;
540 padding: 10px 15px;
541 border-radius: 8px;
542 }
543
544 .mwai-icon-text-close {
545 color: var(--mwai-iconTextColor);
546 background: var(--mwai-iconTextBackgroundColor);
547 padding: 0;
548 width: 24px;
549 height: 24px;
550 border-radius: 50%;
551 display: none;
552 justify-content: center;
553 align-items: center;
554 margin-bottom: 3px;
555 }
556
557 &:hover {
558 cursor: pointer;
559
560 .mwai-icon-text-close {
561 display: flex;
562 font-size: 12px;
563
564 &:hover {
565 filter: brightness(1.2);
566 }
567 }
568 }
569
570 @media (max-width: 760px) {
571 .mwai-icon-text-close {
572 display: flex;
573 }
574 }
575
576 }
577
578 .mwai-icon-container {
579
580 .mwai-icon {
581 filter: drop-shadow(0px 0px 15px rgba(0, 0, 0, 0.15));
582 transition: all 0.2s ease-out;
583
584 &:hover {
585 cursor: pointer;
586 transform: scale(1.05);
587 }
588 }
589 }
590 }
591
592 // Handle the chat window and fullscreen.
593 // Let's keep this common for all themes.
594
595 &.mwai-window {
596 position: fixed;
597 right: 30px;
598 bottom: 30px;
599 width: var(--mwai-width);
600 z-index: 9999;
601
602 .mwai-header {
603 display: none;
604 justify-content: flex-end;
605 align-items: center;
606 border-radius: var(--mwai-borderRadius) var(--mwai-borderRadius) 0 0;
607 background: var(--mwai-backgroundHeaderColor);
608
609 .mwai-buttons {
610 display: flex;
611 align-items: center;
612
613 .mwai-resize-button {
614 justify-content: center;
615 height: 32px;
616 width: 22px;
617 cursor: pointer;
618 display: flex;
619 justify-content: center;
620 align-items: center;
621
622 &:before {
623 transition: all 0.2s ease-out;
624 content: ' ';
625 cursor: pointer;
626 position: absolute;
627 height: 13px;
628 width: 13px;
629 border: 1px solid var(--mwai-headerButtonsColor);
630 }
631
632 &:hover:before {
633 width: 16px;
634 height: 16px;
635 }
636 }
637
638 .mwai-close-button {
639 justify-content: center;
640 height: 32px;
641 width: 33px;
642 cursor: pointer;
643 border-radius: var(--mwai-borderRadius);
644
645 &:before {
646 transition: all 0.2s ease-out;
647 transform: translate(16px, 5px) rotate(45deg);
648 }
649 &:after {
650 transition: all 0.2s ease-out;
651 transform: translate(16px, 5px) rotate(-45deg);
652 }
653 }
654
655 .mwai-close-button:before, .mwai-close-button:after {
656 content: ' ';
657 cursor: pointer;
658 position: absolute;
659 height: 22px;
660 width: 1px;
661 background-color: var(--mwai-headerButtonsColor);
662 }
663
664 .mwai-close-button:hover {
665 &:before {
666 opacity: 1;
667 transform: translate(16px, 5px) rotate(135deg);
668 }
669 &:after {
670 opacity: 1;
671 transform: translate(16px, 5px) rotate(45deg);
672 }
673 }
674
675 }
676 }
677
678 .mwai-body {
679 display: none;
680 opacity: 0;
681 max-height: var(--mwai-maxHeight);
682 border-radius: 0 0 var(--mwai-borderRadius) var(--mwai-borderRadius);
683 }
684
685 &.mwai-bottom-left {
686 bottom: 30px;
687 right: inherit;
688 left: 30px;
689
690 .mwai-trigger {
691 right: inherit;
692 left: 0;
693 }
694 }
695
696 &.mwai-top-right {
697 top: 30px;
698 bottom: inherit;
699 right: 30px;
700
701 .mwai-trigger {
702 top: 0;
703 bottom: inherit;
704 }
705 }
706
707 &.mwai-top-left {
708 top: 30px;
709 bottom: inherit;
710 right: inherit;
711 left: 30px;
712
713 .mwai-trigger {
714 top: 0;
715 bottom: inherit;
716 right: inherit;
717 left: 0;
718 }
719 }
720
721 &.mwai-top-left, &.mwai-bottom-left {
722
723 .mwai-trigger {
724 align-items: flex-start;
725 }
726 }
727
728 &.mwai-top-right, &.mwai-top-left {
729
730 .mwai-trigger {
731 flex-direction: column-reverse;
732
733 .mwai-icon-text {
734 margin-bottom: 0;
735 margin-top: 15px;
736 }
737 }
738 }
739 }
740
741 // Popup chat is fullscreen
742
743 &.mwai-window.mwai-fullscreen {
744
745 .mwai-header {
746
747 .mwai-buttons {
748 margin-bottom: 0px;
749
750 .mwai-resize-button {
751 &:before {
752 width: 16px;
753 height: 16px;
754 }
755
756 &:hover:before {
757 width: 13px;
758 height: 13px;
759 }
760 }
761 }
762 }
763 }
764
765 // Standard chat is fullscreen
766
767 &.mwai-fullscreen:not(.mwai-window), &.mwai-fullscreen.mwai-window.mwai-open {
768 @include fullscreen-window;
769 }
770
771 // Popup chat is open
772
773 &.mwai-window.mwai-open {
774
775 .mwai-header {
776 display: flex;
777 }
778
779 .mwai-body {
780 display: flex;
781 transition: opacity 200ms ease-in-out 0s;
782 opacity: 1;
783 }
784
785 .mwai-trigger {
786 display: none;
787 }
788 }
789
790 // Old error style - kept for backwards compatibility
791 .mwai-body > .mwai-error {
792 margin: var(--mwai-spacing);
793 color: white;
794 background: rgba(180, 55, 55, 0.55);
795 padding: var(--mwai-spacing);
796 border-radius: var(--mwai-borderRadius);
797
798 &:hover {
799 cursor: pointer;
800 background: rgba(180, 44, 44, 0.85);
801 }
802 }
803
804 // Error message specific styles
805 .mwai-reply.mwai-error {
806 .mwai-text {
807 color: #ff5656; // ChatGPT-style red for error text
808
809 // Style links in error messages
810 a {
811 color: #ff5656;
812 text-decoration: underline;
813 }
814 }
815
816 // Style action buttons in error messages
817 .mwai-reply-actions {
818 .mwai-action-button {
819 fill: var(--mwai-fontColor);
820 padding: 3px 5px;
821 width: 24px;
822 height: 24px;
823 background: var(--mwai-backgroundPrimaryColor);
824 cursor: pointer;
825 border-radius: 5px;
826
827 &:hover {
828 filter: brightness(1.2);
829 }
830 }
831 }
832 }
833
834 // Reply actions visibility
835 .mwai-reply-actions {
836 opacity: 0;
837 transition: opacity 0.2s ease-in-out;
838 }
839
840 // Show reply actions on hover of entire reply container
841 .mwai-reply:hover .mwai-reply-actions {
842 opacity: 1 !important;
843 }
844
845 // Show reply actions on hover for AI Forms output fields
846 .mwai-form-output-container:hover .mwai-reply-actions {
847 opacity: 1 !important;
848 }
849
850 // Override mwai-hidden class on hover for forms
851 .mwai-form-output-container:hover .mwai-reply-actions.mwai-hidden {
852 opacity: 1 !important;
853 }
854
855 &.mwai-bubble .mwai-icon-container {
856 background: var(--mwai-bubbleColor);
857 width: 60px;
858 height: 60px;
859 border-radius: 100%;
860 transition: all 0.2s ease-out;
861 display: flex;
862 justify-content: center;
863 align-items: center;
864
865 .mwai-icon {
866 max-width: 50%;
867 max-height: 50%;
868 filter: none;
869
870 &:hover {
871 transform: none;
872 }
873 }
874
875 .mwai-emoji {
876 font-size: 30px !important;
877 }
878
879 &:hover {
880 cursor: pointer;
881 filter: brightness(1.1);
882 }
883 }
884
885 @media (max-width: 760px) {
886 &.mwai-window.mwai-open {
887 @include fullscreen-window;
888
889 .mwai-input {
890 flex-direction: column;
891
892 button {
893 font-size: 16px;
894 margin-left: 0;
895 width: 100%;
896 }
897
898 .mwai-input-text {
899 //margin-bottom: var(--mwai-spacing);
900 width: 100%;
901
902 // This is to avoid iOS from zooming in when focusing on an input field.
903 input, textarea {
904 font-size: 16px;
905 }
906 }
907 }
908
909 .mwai-body {
910 display: flex;
911 transition: opacity 200ms ease-in-out 0s;
912 opacity: 1;
913 height: 100%;
914 max-height: inherit;
915
916 .mwai-conversation {
917 flex: auto;
918 max-height: none;
919 }
920 }
921
922 .mwai-resize-button {
923 display: none !important;
924 }
925
926 .mwai-trigger {
927 display: none;
928 }
929 }
930 }
931
932 // Keyframes for buttons
933
934 @keyframes mwai-button-spinner {
935
936 from {
937 transform: rotate(0turn);
938 }
939 to {
940 transform: rotate(1turn);
941 }
942 }
943
944 // Safari-specific fix for spinner cleanup
945 button:not(.mwai-busy):before {
946 content: none !important;
947 display: none !important;
948 animation: none !important;
949 }
950
951 // WordPress Admin Bar
952
953 .admin-bar .mwai-fullscreen:not(.mwai-window),
954 .admin-bar .mwai-fullscreen.mwai-window.mwai-open {
955 top: 32px;
956 }
957 }
958
959 @mixin code-dark {
960
961 pre code.hljs {
962 display: block;
963 overflow-x: auto;
964 padding: 1em;
965 }
966
967 code.hljs {
968 padding: 3px 5px;
969 }
970
971 .hljs {
972 color: #fff;
973
974 &-subst {
975 color: #fff;
976 }
977
978 &-comment {
979 color: #999;
980 }
981
982 &-attr,
983 &-doctag,
984 &-keyword,
985 &-meta .hljs-keyword,
986 &-section,
987 &-selector-tag {
988 color: #88aece;
989 }
990
991 &-attribute {
992 color: #c59bc1;
993 }
994
995 &-name,
996 &-number,
997 &-quote,
998 &-selector-id,
999 &-template-tag,
1000 &-type {
1001 color: #f08d49;
1002 }
1003
1004 &-selector-class {
1005 color: #88aece;
1006 }
1007
1008 &-link,
1009 &-regexp,
1010 &-selector-attr,
1011 &-string,
1012 &-symbol,
1013 &-template-variable,
1014 &-variable {
1015 color: #b5bd68;
1016 }
1017
1018 &-meta,
1019 &-selector-pseudo {
1020 color: #88aece;
1021 }
1022
1023 &-built_in,
1024 &-literal,
1025 &-title {
1026 color: #f08d49;
1027 }
1028
1029 &-bullet,
1030 &-code {
1031 color: #ccc;
1032 }
1033
1034 &-meta .hljs-string {
1035 color: #b5bd68;
1036 }
1037
1038 &-deletion {
1039 color: #de7176;
1040 }
1041
1042 &-addition {
1043 color: #76c490;
1044 }
1045
1046 &-emphasis {
1047 font-style: italic;
1048 }
1049
1050 &-strong {
1051 font-weight: 700;
1052 }
1053 }
1054 }
1055
1056 @mixin code-light {
1057
1058 pre code.hljs {
1059 display: block;
1060 overflow-x: auto;
1061 padding: 1em;
1062 }
1063
1064 code.hljs {
1065 padding: 3px 5px;
1066 }
1067
1068 .hljs {
1069 color: #333;
1070 background: #f0f0f0;
1071
1072 &-subst {
1073 color: #333;
1074 }
1075
1076 &-comment {
1077 color: #888;
1078 }
1079
1080 &-attr,
1081 &-doctag,
1082 &-keyword,
1083 &-meta .hljs-keyword,
1084 &-section,
1085 &-selector-tag {
1086 color: #0077cc;
1087 }
1088
1089 &-attribute {
1090 color: #aa3377;
1091 }
1092
1093 &-name,
1094 &-number,
1095 &-quote,
1096 &-selector-id,
1097 &-template-tag,
1098 &-type {
1099 color: #c18401;
1100 }
1101
1102 &-selector-class {
1103 color: #0077cc;
1104 }
1105
1106 &-link,
1107 &-regexp,
1108 &-selector-attr,
1109 &-string,
1110 &-symbol,
1111 &-template-variable,
1112 &-variable {
1113 color: #689700;
1114 }
1115
1116 &-meta,
1117 &-selector-pseudo {
1118 color: #0077cc;
1119 }
1120
1121 &-built_in,
1122 &-literal,
1123 &-title {
1124 color: #c18401;
1125 }
1126
1127 &-bullet,
1128 &-code {
1129 color: #555;
1130 }
1131
1132 &-meta .hljs-string {
1133 color: #689700;
1134 }
1135
1136 &-deletion {
1137 color: #b71c1c;
1138 }
1139
1140 &-addition {
1141 color: #1b5e20;
1142 }
1143
1144 &-emphasis {
1145 font-style: italic;
1146 }
1147
1148 &-strong {
1149 font-weight: 700;
1150 }
1151 }
1152 }
1153
1154 @mixin reply-actions {
1155 .mwai-reply-actions {
1156 position: absolute;
1157 border-radius: 5px;
1158 top: 10px;
1159 right: 10px;
1160 display: flex;
1161 align-items: center;
1162 padding: 2px 2px;
1163 z-index: 100;
1164 background: var(--mwai-backgroundPrimaryColor);
1165 box-shadow: 0 0 8px rgba(0, 0, 0, 0.25);
1166 z-index: 100;
1167
1168 .mwai-copy-button {
1169 fill: var(--mwai-fontColor);
1170 padding: 3px 5px;
1171 width: 24px;
1172 height: 24px;
1173 background: var(--mwai-backgroundPrimaryColor);
1174 cursor: pointer;
1175 border-radius: 5px;
1176
1177 &:hover {
1178 filter: brightness(1.2);
1179 }
1180 }
1181
1182 &.mwai-hidden {
1183 opacity: 0;
1184 }
1185 }
1186 }
1187
1188 @mixin realtime {
1189 .mwai-realtime {
1190 padding: var(--mwai-spacing);
1191
1192 .mwai-visualizer {
1193 display: flex;
1194 justify-content: center;
1195 align-items: center;
1196
1197 hr {
1198 width: 100px;
1199 margin-right: var(--mwai-spacing);
1200 margin-left: var(--mwai-spacing);
1201 border: 1px solid var(--mwai-backgroundPrimaryColor);
1202 }
1203
1204 .mwai-animation {
1205 background: var(--mwai-backgroundPrimaryColor);
1206 }
1207 }
1208
1209 .mwai-controls {
1210 display: flex;
1211 justify-content: center;
1212 align-items: center;
1213 margin-bottom: var(--mwai-spacing);
1214
1215 > * + * {
1216 margin-left: 10px;
1217 }
1218
1219 button {
1220 border-radius: 100%;
1221 width: 50px;
1222 height: 50px;
1223 margin: 5px;
1224 padding: 5px;
1225 display: flex;
1226 align-items: center;
1227 justify-content: center;
1228 color: var(--mwai-fontColor);
1229 border: 2px solid var(--mwai-backgroundPrimaryColor);
1230 background: none;
1231 cursor: pointer;
1232 transition: all 0.2s ease-out;
1233 min-width: inherit;
1234 max-width: inherit;
1235
1236 &:hover:not(:disabled) {
1237 background: var(--mwai-backgroundPrimaryColor);
1238 }
1239
1240 &:disabled {
1241 opacity: 0.5;
1242 cursor: not-allowed;
1243 background: none;
1244 }
1245
1246 &.mwai-active {
1247 border: 2px solid var(--mwai-fontColor);
1248 }
1249 }
1250 }
1251
1252 .mwai-last-transcript {
1253 margin: var(--mwai-spacing);
1254 margin-top: 0;
1255 border: 2px solid var(--mwai-backgroundPrimaryColor);
1256 padding: calc(var(--mwai-spacing) / 2);
1257 border-radius: var(--mwai-borderRadius);
1258 display: flex;
1259 justify-content: center;
1260 font-size: 80%;
1261 }
1262
1263 .mwai-statistics {
1264 display: grid;
1265 grid-template-columns: 1fr 1fr 1fr;
1266 grid-row-gap: 10px;
1267 font-size: 14px;
1268
1269 div {
1270 display: flex;
1271 flex-direction: column;
1272 align-items: center;
1273 }
1274
1275 label {
1276 font-size: 11px;
1277 opacity: 0.5;
1278 text-transform: uppercase;
1279 }
1280 }
1281
1282 .mwai-options {
1283 margin-top: var(--mwai-spacing);
1284 display: flex;
1285 align-items: center;
1286
1287 .mwai-option {
1288 cursor: pointer;
1289 opacity: 0.5;
1290 margin-right: 2px;
1291
1292 &.mwai-active {
1293 opacity: 1;
1294 }
1295 }
1296 }
1297 }
1298 }
1299
1300 // Context Menu Portal (appears at document body level)
1301 .mwai-context-menu-portal {
1302 .mwai-context-menu {
1303 background: var(--mwai-backgroundHeaderColor);
1304 border: 1px solid rgba(0, 0, 0, 0.1);
1305 border-radius: var(--mwai-borderRadius);
1306 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1307 font-size: 13px;
1308 color: var(--mwai-fontColor);
1309
1310 .mwai-menu-item {
1311 display: flex;
1312 align-items: center;
1313 gap: 8px;
1314 padding: 8px 12px;
1315 cursor: pointer;
1316 transition: background-color 0.2s;
1317
1318 &:hover {
1319 background-color: rgba(0, 0, 0, 0.05);
1320 }
1321
1322 &.mwai-danger {
1323 color: #dc3545;
1324
1325 &:hover {
1326 background-color: rgba(220, 53, 69, 0.1);
1327 }
1328 }
1329
1330 svg {
1331 flex-shrink: 0;
1332 }
1333 }
1334 }
1335 }
1336
1337
1338 // ChatbotChunks - Debug Stream Events Display
1339 .mwai-chunks {
1340 padding: 8px;
1341 background: rgba(0, 0, 0, 0.03);
1342 font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace;
1343 font-size: 11px;
1344 border-top: 1px solid rgba(0, 0, 0, 0.06);
1345
1346 &.mwai-chunks-collapsed {
1347 .mwai-chunks-header {
1348 margin-bottom: 0 !important;
1349 }
1350 }
1351
1352 .mwai-chunks-header {
1353 display: flex;
1354 align-items: center;
1355 gap: 6px;
1356 margin-bottom: 8px;
1357 color: #6b7280;
1358 font-size: 10px;
1359 text-transform: uppercase;
1360 letter-spacing: 0.05em;
1361
1362 .mwai-chunks-title {
1363 flex: 1; // This pushes the buttons to the right
1364 overflow: hidden;
1365 text-overflow: ellipsis;
1366 white-space: nowrap;
1367 }
1368
1369 .mwai-chunks-status {
1370 margin-left: 4px;
1371 font-weight: 500;
1372 }
1373
1374 .mwai-chunks-toggle {
1375 background: none;
1376 border: 1px solid rgba(0, 0, 0, 0.1);
1377 border-radius: 3px;
1378 padding: 2px;
1379 width: 30px;
1380 height: 20px;
1381 cursor: pointer;
1382 color: #6b7280;
1383 display: flex;
1384 align-items: center;
1385 justify-content: center;
1386 transition: all 0.2s ease;
1387 margin-left: 4px;
1388
1389 &:hover {
1390 background: rgba(0, 0, 0, 0.05);
1391 color: #374151;
1392 }
1393 }
1394 }
1395
1396 .mwai-chunk {
1397 margin-bottom: 4px;
1398 padding: 6px 8px;
1399 background: white;
1400 border-radius: 4px;
1401 border: 1px solid rgba(0, 0, 0, 0.06);
1402 transition: all 0.2s ease;
1403
1404 .mwai-chunk-header {
1405 display: flex;
1406 align-items: center;
1407 gap: 8px;
1408 cursor: pointer;
1409 user-select: none;
1410
1411 .mwai-chunk-time {
1412 color: #9ca3af;
1413 font-size: 10px;
1414 font-variant-numeric: tabular-nums;
1415 }
1416
1417 .mwai-chunk-type {
1418 display: flex;
1419 align-items: center;
1420 gap: 4px;
1421 padding: 2px 6px;
1422 border-radius: 3px;
1423 font-size: 10px;
1424 font-weight: 500;
1425 color: white;
1426 }
1427
1428 .mwai-chunk-data {
1429 flex: 1;
1430 color: #374151;
1431 overflow: hidden;
1432 text-overflow: ellipsis;
1433 white-space: nowrap;
1434 }
1435
1436 .mwai-chunk-expand {
1437 color: #9ca3af;
1438 transition: transform 0.2s ease;
1439 }
1440 }
1441
1442 .mwai-chunk-details {
1443 margin-top: 8px;
1444 padding: 8px;
1445 background: rgba(0, 0, 0, 0.02);
1446 border-radius: 3px;
1447 overflow-x: auto;
1448
1449 pre {
1450 margin: 0;
1451 white-space: pre-wrap;
1452 word-break: break-word;
1453 color: #4b5563;
1454 }
1455 }
1456 }
1457 }