PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 2.8.4
AI Engine – The Chatbot, AI Framework & MCP for WordPress v2.8.4
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 1 year ago chatgpt.scss 1 year ago messages.scss 1 year ago timeless.scss 1 year ago
_common.scss
1229 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-title {
24 flex: 1;
25 padding: 5px;
26 }
27
28 .mwai-discussion-actions {
29 position: absolute;
30 top: 50%;
31 right: calc(var(--mwai-spacing) / 2);
32 transform: translateY(-50%);
33 opacity: 0;
34 transition: opacity 0.2s ease-out;
35 z-index: 100;
36
37 .mwai-menu-icon {
38 width: 28px;
39 height: 28px;
40 display: flex;
41 align-items: center;
42 justify-content: center;
43 cursor: pointer;
44 color: var(--mwai-conversationsTextColor);
45 }
46
47 }
48
49 &.mwai-active {
50 cursor: pointer;
51
52 .mwai-discussion-title {
53 background: var(--mwai-backgroundPrimaryColor);
54 border-radius: var(--mwai-borderRadius);
55 opacity: 1;
56 }
57 }
58
59 &:hover {
60 cursor: pointer;
61
62 .mwai-discussion-title {
63 background: var(--mwai-backgroundPrimaryColor);
64 border-radius: var(--mwai-borderRadius);
65 opacity: 1;
66 }
67
68 .mwai-discussion-actions {
69 opacity: 1;
70 }
71 }
72
73 // Keep actions visible when menu is open
74 &:has(.mwai-context-menu) {
75 .mwai-discussion-actions {
76 opacity: 1;
77 }
78 }
79
80 &:first-child {
81 margin-top: calc(var(--mwai-spacing) / 2);
82 }
83 }
84
85 .mwai-header {
86 color: var(--mwai-headerButtonsColor);
87 padding: var(--mwai-spacing);
88 display: flex;
89 justify-content: space-between;
90 align-items: center;
91 gap: 10px;
92
93 button {
94 background: var(--mwai-backgroundPrimaryColor);
95 color: var(--mwai-fontColor);
96 border: none;
97 padding: 8px 16px;
98 border-radius: var(--mwai-borderRadius);
99 cursor: pointer;
100 transition: all 0.2s ease-out;
101
102 &:hover:not(:disabled) {
103 background: var(--mwai-iconTextBackgroundColor);
104 }
105
106 &:disabled {
107 opacity: 0.5;
108 cursor: not-allowed;
109 }
110 }
111
112 .mwai-refresh-btn {
113 padding: 8px;
114 display: flex;
115 align-items: center;
116 justify-content: center;
117 }
118 }
119
120 .mwai-body {
121 background: var(--mwai-conversationsBackgroundColor);
122 list-style: none;
123 padding: 0;
124 margin: 0;
125 position: relative;
126 min-height: 200px;
127 display: flex;
128 flex-direction: column;
129 border-radius: 0;
130 z-index: 1;
131 }
132
133 .mwai-loading-overlay {
134 position: absolute;
135 top: 0;
136 left: 0;
137 right: 0;
138 bottom: 0;
139 background: var(--mwai-conversationsBackgroundColor);
140 opacity: 0.9;
141 display: flex;
142 align-items: center;
143 justify-content: center;
144 z-index: 10;
145 }
146
147 .mwai-spinner {
148 animation: spin 1s linear infinite;
149 color: var(--mwai-fontColor);
150 }
151
152 @keyframes spin {
153 from { transform: rotate(0deg); }
154 to { transform: rotate(360deg); }
155 }
156
157 .mwai-pagination {
158 background: var(--mwai-backgroundHeaderColor);
159 padding: var(--mwai-spacing);
160 display: flex;
161 justify-content: space-between;
162 align-items: center;
163 border-top: 1px solid var(--mwai-backgroundPrimaryColor);
164
165 button {
166 background: var(--mwai-backgroundPrimaryColor);
167 color: var(--mwai-fontColor);
168 border: none;
169 padding: 8px 12px;
170 border-radius: var(--mwai-borderRadius);
171 cursor: pointer;
172 transition: all 0.2s ease-out;
173 display: flex;
174 align-items: center;
175 justify-content: center;
176
177 &:hover:not(:disabled) {
178 background: var(--mwai-iconTextBackgroundColor);
179 }
180
181 &:disabled {
182 opacity: 0.3;
183 cursor: not-allowed;
184 }
185 }
186
187 span {
188 color: var(--mwai-headerButtonsColor);
189 font-size: var(--mwai-fontSize);
190 font-weight: 500;
191 }
192
193 .mwai-page-indicator {
194 color: var(--mwai-headerButtonsColor);
195 font-size: calc(var(--mwai-fontSize) * 0.85);
196 font-weight: 400;
197 opacity: 0.8;
198 }
199 }
200 }
201 }
202
203 @mixin file-upload-icon-sprites {
204 $icon-size: 32px;
205
206 &.mwai-idle-add {
207 background-position: -1 * $icon-size -3 * $icon-size;
208 }
209
210 &.mwai-image-add {
211 background-position: -1 * $icon-size -0 * $icon-size;
212 }
213
214 &.mwai-image-up {
215 background-position: -2 * $icon-size -0 * $icon-size;
216 }
217
218 &.mwai-image-del {
219 background-position: -3 * $icon-size -0 * $icon-size;
220 }
221
222 &.mwai-image-ok {
223 background-position: -4 * $icon-size -0 * $icon-size;
224 }
225
226 &.mwai-document-add {
227 background-position: -1 * $icon-size -2 * $icon-size;
228 }
229
230 &.mwai-document-up {
231 background-position: -2 * $icon-size -2 * $icon-size;
232 }
233
234 &.mwai-document-del {
235 background-position: -3 * $icon-size -2 * $icon-size;
236 }
237
238 &.mwai-document-ok {
239 background-position: -4 * $icon-size -2 * $icon-size;
240 }
241
242 .mwai-file-upload-progress {
243 position: absolute;
244 font-size: 8px;
245 width: 21px;
246 top: 24px;
247 left: 23px;
248 overflow: hidden;
249 text-align: center;
250 font-weight: bold;
251 color: white;
252 }
253 }
254
255 @mixin microphone {
256
257 display: flex;
258 justify-content: center;
259 align-items: center;
260
261 svg {
262 opacity: 0.5;
263 filter: grayscale(100%);
264 transition: opacity 0.3s ease-out;
265 cursor: pointer;
266 }
267
268 &[active=true]=true] svg {
269 opacity: 1;
270 }
271
272 &[disabled]] svg {
273 opacity: 0;
274 cursor: not-allowed;
275 }
276 }
277
278 @mixin fullscreen-window {
279 position: fixed;
280 left: 0 !important;
281 right: 0 !important;
282 bottom: 0 !important;
283 top: 0 !important;
284 width: 100%;
285 height: 100%;
286 max-height: 100%;
287 max-width: 100%;
288 display: flex;
289 flex-direction: column;
290 margin: 0;
291 z-index: 999999;
292 background-color: var(--mwai-backgroundSecondaryColor);
293
294 .mwai-header {
295 border-radius: 0;
296 }
297
298 .mwai-body {
299 height: 100%;
300 max-height: inherit;
301 border-radius: 0;
302
303 .mwai-conversation {
304 flex: auto;
305 max-height: none;
306 }
307 }
308 }
309
310 @mixin common-styles {
311
312 // Transitions
313
314 &.mwai-transition, .mwai-transition {
315 opacity: 0;
316 transition: opacity 350ms ease-in-out;
317 }
318
319 &.mwai-transition-visible, .mwai-transition-visible {
320 opacity: 1;
321 }
322
323 .mwai-text {
324 overflow-wrap: anywhere;
325
326 img {
327 max-width: 100%;
328 }
329
330 div {
331 p:first-child {
332 margin-top: 0;
333 }
334 p:last-child {
335 margin-bottom: 0;
336 }
337 }
338 }
339
340 // The icon when the chat window is closed.
341
342 .mwai-trigger {
343 position: absolute;
344 right: 0;
345 bottom: 0;
346 transition: all 0.2s ease-out;
347 z-index: 9999;
348 display: flex;
349 flex-direction: column;
350 align-items: end;
351
352 .mwai-icon-text-container {
353 display: flex;
354 flex-direction: column;
355 align-items: flex-end;
356
357 .mwai-icon-text {
358 background: var(--mwai-iconTextBackgroundColor);
359 color: var(--mwai-iconTextColor);
360 box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.15);
361 max-width: 200px;
362 font-size: 13px;
363 margin-bottom: 15px;
364 padding: 10px 15px;
365 border-radius: 8px;
366 }
367
368 .mwai-icon-text-close {
369 color: var(--mwai-iconTextColor);
370 background: var(--mwai-iconTextBackgroundColor);
371 padding: 5px;
372 width: 30px;
373 height: 20px;
374 border-radius: 100%;
375 display: none;
376 justify-content: center;
377 align-items: center;
378 margin-bottom: 3px;
379 }
380
381 &:hover {
382 cursor: pointer;
383
384 .mwai-icon-text-close {
385 display: flex;
386 font-size: 12px;
387
388 &:hover {
389 filter: brightness(1.2);
390 }
391 }
392 }
393
394 @media (max-width: 760px) {
395 .mwai-icon-text-close {
396 display: flex;
397 }
398 }
399
400 }
401
402 .mwai-icon-container {
403
404 .mwai-icon {
405 filter: drop-shadow(0px 0px 15px rgba(0, 0, 0, 0.15));
406 transition: all 0.2s ease-out;
407
408 &:hover {
409 cursor: pointer;
410 transform: scale(1.05);
411 }
412 }
413 }
414 }
415
416 // Handle the chat window and fullscreen.
417 // Let's keep this common for all themes.
418
419 &.mwai-window {
420 position: fixed;
421 right: 30px;
422 bottom: 30px;
423 width: var(--mwai-width);
424 z-index: 9999;
425
426 .mwai-header {
427 display: none;
428 justify-content: flex-end;
429 align-items: center;
430 border-radius: var(--mwai-borderRadius) var(--mwai-borderRadius) 0 0;
431 background: var(--mwai-backgroundHeaderColor);
432
433 .mwai-buttons {
434 display: flex;
435 align-items: center;
436
437 .mwai-resize-button {
438 justify-content: center;
439 height: 32px;
440 width: 22px;
441 cursor: pointer;
442 display: flex;
443 justify-content: center;
444 align-items: center;
445
446 &:before {
447 transition: all 0.2s ease-out;
448 content: ' ';
449 cursor: pointer;
450 position: absolute;
451 height: 13px;
452 width: 13px;
453 border: 1px solid var(--mwai-headerButtonsColor);
454 }
455
456 &:hover:before {
457 width: 16px;
458 height: 16px;
459 }
460 }
461
462 .mwai-close-button {
463 justify-content: center;
464 height: 32px;
465 width: 33px;
466 cursor: pointer;
467 border-radius: var(--mwai-borderRadius);
468
469 &:before {
470 transition: all 0.2s ease-out;
471 transform: translate(16px, 5px) rotate(45deg);
472 }
473 &:after {
474 transition: all 0.2s ease-out;
475 transform: translate(16px, 5px) rotate(-45deg);
476 }
477 }
478
479 .mwai-close-button:before, .mwai-close-button:after {
480 content: ' ';
481 cursor: pointer;
482 position: absolute;
483 height: 22px;
484 width: 1px;
485 background-color: var(--mwai-headerButtonsColor);
486 }
487
488 .mwai-close-button:hover {
489 &:before {
490 opacity: 1;
491 transform: translate(16px, 5px) rotate(135deg);
492 }
493 &:after {
494 opacity: 1;
495 transform: translate(16px, 5px) rotate(45deg);
496 }
497 }
498
499 }
500 }
501
502 .mwai-body {
503 display: none;
504 opacity: 0;
505 max-height: var(--mwai-maxHeight);
506 border-radius: 0 0 var(--mwai-borderRadius) var(--mwai-borderRadius);
507 }
508
509 &.mwai-bottom-left {
510 bottom: 30px;
511 right: inherit;
512 left: 30px;
513
514 .mwai-trigger {
515 right: inherit;
516 left: 0;
517 }
518 }
519
520 &.mwai-top-right {
521 top: 30px;
522 bottom: inherit;
523 right: 30px;
524
525 .mwai-trigger {
526 top: 0;
527 bottom: inherit;
528 }
529 }
530
531 &.mwai-top-left {
532 top: 30px;
533 bottom: inherit;
534 right: inherit;
535 left: 30px;
536
537 .mwai-trigger {
538 top: 0;
539 bottom: inherit;
540 right: inherit;
541 left: 0;
542 }
543 }
544
545 &.mwai-top-left, &.mwai-bottom-left {
546
547 .mwai-trigger {
548 align-items: flex-start;
549 }
550 }
551
552 &.mwai-top-right, &.mwai-top-left {
553
554 .mwai-trigger {
555 flex-direction: column-reverse;
556
557 .mwai-icon-text {
558 margin-bottom: 0;
559 margin-top: 15px;
560 }
561 }
562 }
563 }
564
565 // Popup chat is fullscreen
566
567 &.mwai-window.mwai-fullscreen {
568
569 .mwai-header {
570
571 .mwai-buttons {
572 margin-bottom: 0px;
573
574 .mwai-resize-button {
575 &:before {
576 width: 16px;
577 height: 16px;
578 }
579
580 &:hover:before {
581 width: 13px;
582 height: 13px;
583 }
584 }
585 }
586 }
587 }
588
589 // Standard chat is fullscreen
590
591 &.mwai-fullscreen:not(.mwai-window), &.mwai-fullscreen.mwai-window.mwai-open {
592 @include fullscreen-window;
593 }
594
595 // Popup chat is open
596
597 &.mwai-window.mwai-open {
598
599 .mwai-header {
600 display: flex;
601 }
602
603 .mwai-body {
604 display: flex;
605 transition: opacity 200ms ease-in-out 0s;
606 opacity: 1;
607 }
608
609 .mwai-trigger {
610 display: none;
611 }
612 }
613
614 .mwai-error {
615 margin: var(--mwai-spacing);
616 color: white;
617 background: rgba(180, 55, 55, 0.55);
618 padding: var(--mwai-spacing);
619 border-radius: var(--mwai-borderRadius);
620
621 &:hover {
622 cursor: pointer;
623 background: rgba(180, 44, 44, 0.85);
624 }
625 }
626
627 &.mwai-bubble .mwai-icon-container {
628 background: var(--mwai-bubbleColor);
629 width: 60px;
630 height: 60px;
631 border-radius: 100%;
632 transition: all 0.2s ease-out;
633 display: flex;
634 justify-content: center;
635 align-items: center;
636
637 .mwai-icon {
638 max-width: 50%;
639 max-height: 50%;
640 filter: none;
641
642 &:hover {
643 transform: none;
644 }
645 }
646
647 .mwai-emoji {
648 font-size: 30px !important;
649 }
650
651 &:hover {
652 cursor: pointer;
653 filter: brightness(1.1);
654 }
655 }
656
657 @media (max-width: 760px) {
658 &.mwai-window.mwai-open {
659 @include fullscreen-window;
660
661 .mwai-input {
662 flex-direction: column;
663
664 button {
665 font-size: 16px;
666 margin-left: 0;
667 width: 100%;
668 }
669
670 .mwai-input-text {
671 //margin-bottom: var(--mwai-spacing);
672 width: 100%;
673
674 // This is to avoid iOS from zooming in when focusing on an input field.
675 input, textarea {
676 font-size: 16px;
677 }
678 }
679 }
680
681 .mwai-body {
682 display: flex;
683 transition: opacity 200ms ease-in-out 0s;
684 opacity: 1;
685 height: 100%;
686 max-height: inherit;
687
688 .mwai-conversation {
689 flex: auto;
690 max-height: none;
691 }
692 }
693
694 .mwai-resize-button {
695 display: none !important;
696 }
697
698 .mwai-trigger {
699 display: none;
700 }
701 }
702 }
703
704 // Keyframes for buttons
705
706 @keyframes mwai-button-spinner {
707
708 from {
709 transform: rotate(0turn);
710 }
711 to {
712 transform: rotate(1turn);
713 }
714 }
715
716 // Safari-specific fix for spinner cleanup
717 button:not(.mwai-busy):before {
718 content: none !important;
719 display: none !important;
720 animation: none !important;
721 }
722
723 // WordPress Admin Bar
724
725 .admin-bar .mwai-fullscreen:not(.mwai-window),
726 .admin-bar .mwai-fullscreen.mwai-window.mwai-open {
727 top: 32px;
728 }
729 }
730
731 @mixin code-dark {
732
733 pre code.hljs {
734 display: block;
735 overflow-x: auto;
736 padding: 1em;
737 }
738
739 code.hljs {
740 padding: 3px 5px;
741 }
742
743 .hljs {
744 color: #fff;
745
746 &-subst {
747 color: #fff;
748 }
749
750 &-comment {
751 color: #999;
752 }
753
754 &-attr,
755 &-doctag,
756 &-keyword,
757 &-meta .hljs-keyword,
758 &-section,
759 &-selector-tag {
760 color: #88aece;
761 }
762
763 &-attribute {
764 color: #c59bc1;
765 }
766
767 &-name,
768 &-number,
769 &-quote,
770 &-selector-id,
771 &-template-tag,
772 &-type {
773 color: #f08d49;
774 }
775
776 &-selector-class {
777 color: #88aece;
778 }
779
780 &-link,
781 &-regexp,
782 &-selector-attr,
783 &-string,
784 &-symbol,
785 &-template-variable,
786 &-variable {
787 color: #b5bd68;
788 }
789
790 &-meta,
791 &-selector-pseudo {
792 color: #88aece;
793 }
794
795 &-built_in,
796 &-literal,
797 &-title {
798 color: #f08d49;
799 }
800
801 &-bullet,
802 &-code {
803 color: #ccc;
804 }
805
806 &-meta .hljs-string {
807 color: #b5bd68;
808 }
809
810 &-deletion {
811 color: #de7176;
812 }
813
814 &-addition {
815 color: #76c490;
816 }
817
818 &-emphasis {
819 font-style: italic;
820 }
821
822 &-strong {
823 font-weight: 700;
824 }
825 }
826 }
827
828 @mixin code-light {
829
830 pre code.hljs {
831 display: block;
832 overflow-x: auto;
833 padding: 1em;
834 }
835
836 code.hljs {
837 padding: 3px 5px;
838 }
839
840 .hljs {
841 color: #333;
842 background: #f0f0f0;
843
844 &-subst {
845 color: #333;
846 }
847
848 &-comment {
849 color: #888;
850 }
851
852 &-attr,
853 &-doctag,
854 &-keyword,
855 &-meta .hljs-keyword,
856 &-section,
857 &-selector-tag {
858 color: #0077cc;
859 }
860
861 &-attribute {
862 color: #aa3377;
863 }
864
865 &-name,
866 &-number,
867 &-quote,
868 &-selector-id,
869 &-template-tag,
870 &-type {
871 color: #c18401;
872 }
873
874 &-selector-class {
875 color: #0077cc;
876 }
877
878 &-link,
879 &-regexp,
880 &-selector-attr,
881 &-string,
882 &-symbol,
883 &-template-variable,
884 &-variable {
885 color: #689700;
886 }
887
888 &-meta,
889 &-selector-pseudo {
890 color: #0077cc;
891 }
892
893 &-built_in,
894 &-literal,
895 &-title {
896 color: #c18401;
897 }
898
899 &-bullet,
900 &-code {
901 color: #555;
902 }
903
904 &-meta .hljs-string {
905 color: #689700;
906 }
907
908 &-deletion {
909 color: #b71c1c;
910 }
911
912 &-addition {
913 color: #1b5e20;
914 }
915
916 &-emphasis {
917 font-style: italic;
918 }
919
920 &-strong {
921 font-weight: 700;
922 }
923 }
924 }
925
926 @mixin reply-actions {
927 .mwai-reply-actions {
928 position: absolute;
929 border-radius: 5px;
930 top: 10px;
931 right: 10px;
932 display: flex;
933 align-items: center;
934 padding: 2px 2px;
935 z-index: 100;
936 background: var(--mwai-backgroundPrimaryColor);
937 box-shadow: 0 0 8px rgba(0, 0, 0, 0.25);
938 z-index: 100;
939
940 .mwai-copy-button {
941 fill: var(--mwai-fontColor);
942 padding: 3px 5px;
943 width: 24px;
944 height: 24px;
945 background: var(--mwai-backgroundPrimaryColor);
946 cursor: pointer;
947 border-radius: 5px;
948
949 &:hover {
950 filter: brightness(1.2);
951 }
952 }
953
954 &.mwai-hidden {
955 opacity: 0;
956 }
957 }
958 }
959
960 @mixin realtime {
961 .mwai-realtime {
962 padding: var(--mwai-spacing);
963
964 .mwai-visualizer {
965 display: flex;
966 justify-content: center;
967 align-items: center;
968
969 hr {
970 width: 100px;
971 margin-right: var(--mwai-spacing);
972 margin-left: var(--mwai-spacing);
973 border: 1px solid var(--mwai-backgroundPrimaryColor);
974 }
975
976 .mwai-animation {
977 background: var(--mwai-backgroundPrimaryColor);
978 }
979 }
980
981 .mwai-controls {
982 display: flex;
983 justify-content: center;
984 align-items: center;
985 margin-bottom: var(--mwai-spacing);
986
987 > * + * {
988 margin-left: 10px;
989 }
990
991 button {
992 border-radius: 100%;
993 width: 50px;
994 height: 50px;
995 margin: 5px;
996 padding: 5px;
997 display: flex;
998 align-items: center;
999 justify-content: center;
1000 color: var(--mwai-fontColor);
1001 border: 2px solid var(--mwai-backgroundPrimaryColor);
1002 background: none;
1003 cursor: pointer;
1004 transition: all 0.2s ease-out;
1005 min-width: inherit;
1006 max-width: inherit;
1007
1008 &:hover:not(:disabled) {
1009 background: var(--mwai-backgroundPrimaryColor);
1010 }
1011
1012 &:disabled {
1013 opacity: 0.5;
1014 cursor: not-allowed;
1015 background: none;
1016 }
1017
1018 &.mwai-active {
1019 border: 2px solid var(--mwai-fontColor);
1020 }
1021 }
1022 }
1023
1024 .mwai-last-transcript {
1025 margin: var(--mwai-spacing);
1026 margin-top: 0;
1027 border: 2px solid var(--mwai-backgroundPrimaryColor);
1028 padding: calc(var(--mwai-spacing) / 2);
1029 border-radius: var(--mwai-borderRadius);
1030 display: flex;
1031 justify-content: center;
1032 font-size: 80%;
1033 }
1034
1035 .mwai-statistics {
1036 display: grid;
1037 grid-template-columns: 1fr 1fr 1fr;
1038 grid-row-gap: 10px;
1039 font-size: 14px;
1040
1041 div {
1042 display: flex;
1043 flex-direction: column;
1044 align-items: center;
1045 }
1046
1047 label {
1048 font-size: 11px;
1049 opacity: 0.5;
1050 text-transform: uppercase;
1051 }
1052 }
1053
1054 .mwai-options {
1055 margin-top: var(--mwai-spacing);
1056 display: flex;
1057 align-items: center;
1058
1059 .mwai-option {
1060 cursor: pointer;
1061 opacity: 0.5;
1062 margin-right: 2px;
1063
1064 &.mwai-active {
1065 opacity: 1;
1066 }
1067 }
1068 }
1069 }
1070 }
1071
1072 // Context Menu Portal (appears at document body level)
1073 .mwai-context-menu-portal {
1074 .mwai-context-menu {
1075 background: var(--mwai-backgroundHeaderColor);
1076 border: 1px solid rgba(0, 0, 0, 0.1);
1077 border-radius: var(--mwai-borderRadius);
1078 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1079 font-size: 13px;
1080 color: var(--mwai-fontColor);
1081
1082 .mwai-menu-item {
1083 display: flex;
1084 align-items: center;
1085 gap: 8px;
1086 padding: 8px 12px;
1087 cursor: pointer;
1088 transition: background-color 0.2s;
1089
1090 &:hover {
1091 background-color: rgba(0, 0, 0, 0.05);
1092 }
1093
1094 &.mwai-danger {
1095 color: #dc3545;
1096
1097 &:hover {
1098 background-color: rgba(220, 53, 69, 0.1);
1099 }
1100 }
1101
1102 svg {
1103 flex-shrink: 0;
1104 }
1105 }
1106 }
1107 }
1108
1109
1110 // ChatbotChunks - Debug Stream Events Display
1111 .mwai-chunks {
1112 padding: 8px;
1113 background: rgba(0, 0, 0, 0.03);
1114 font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace;
1115 font-size: 11px;
1116 border-top: 1px solid rgba(0, 0, 0, 0.06);
1117
1118 &.mwai-chunks-collapsed {
1119 .mwai-chunks-header {
1120 margin-bottom: 0 !important;
1121 }
1122 }
1123
1124 .mwai-chunks-header {
1125 display: flex;
1126 align-items: center;
1127 gap: 6px;
1128 margin-bottom: 8px;
1129 color: #6b7280;
1130 font-size: 10px;
1131 text-transform: uppercase;
1132 letter-spacing: 0.05em;
1133
1134 .mwai-chunks-title {
1135 flex: 1; // This pushes the buttons to the right
1136 overflow: hidden;
1137 text-overflow: ellipsis;
1138 white-space: nowrap;
1139 }
1140
1141 .mwai-chunks-status {
1142 margin-left: 4px;
1143 font-weight: 500;
1144 }
1145
1146 .mwai-chunks-toggle {
1147 background: none;
1148 border: 1px solid rgba(0, 0, 0, 0.1);
1149 border-radius: 3px;
1150 padding: 2px;
1151 width: 30px;
1152 height: 20px;
1153 cursor: pointer;
1154 color: #6b7280;
1155 display: flex;
1156 align-items: center;
1157 justify-content: center;
1158 transition: all 0.2s ease;
1159 margin-left: 4px;
1160
1161 &:hover {
1162 background: rgba(0, 0, 0, 0.05);
1163 color: #374151;
1164 }
1165 }
1166 }
1167
1168 .mwai-chunk {
1169 margin-bottom: 4px;
1170 padding: 6px 8px;
1171 background: white;
1172 border-radius: 4px;
1173 border: 1px solid rgba(0, 0, 0, 0.06);
1174 transition: all 0.2s ease;
1175
1176 .mwai-chunk-header {
1177 display: flex;
1178 align-items: center;
1179 gap: 8px;
1180 cursor: pointer;
1181 user-select: none;
1182
1183 .mwai-chunk-time {
1184 color: #9ca3af;
1185 font-size: 10px;
1186 font-variant-numeric: tabular-nums;
1187 }
1188
1189 .mwai-chunk-type {
1190 display: flex;
1191 align-items: center;
1192 gap: 4px;
1193 padding: 2px 6px;
1194 border-radius: 3px;
1195 font-size: 10px;
1196 font-weight: 500;
1197 color: white;
1198 }
1199
1200 .mwai-chunk-data {
1201 flex: 1;
1202 color: #374151;
1203 overflow: hidden;
1204 text-overflow: ellipsis;
1205 white-space: nowrap;
1206 }
1207
1208 .mwai-chunk-expand {
1209 color: #9ca3af;
1210 transition: transform 0.2s ease;
1211 }
1212 }
1213
1214 .mwai-chunk-details {
1215 margin-top: 8px;
1216 padding: 8px;
1217 background: rgba(0, 0, 0, 0.02);
1218 border-radius: 3px;
1219 overflow-x: auto;
1220
1221 pre {
1222 margin: 0;
1223 white-space: pre-wrap;
1224 word-break: break-word;
1225 color: #4b5563;
1226 }
1227 }
1228 }
1229 }