PluginProbe
Code Snippets / 4.0.0-beta.2
Code Snippets v4.0.0-beta.2
4.0.0-beta.2 3.10.2 3.10.1 3.10.0 3.10.0-beta.2 3.10.0-beta.1 4.0.0-beta.1 3.9.6 trunk 2.10.0 2.10.1 2.12.0 2.12.1 2.13.0 2.13.1 2.13.2 2.13.3 2.14.0 2.14.1 2.14.2 2.14.3 2.14.4 2.14.5 2.14.6 3.0.0 All 65 releases
code-snippets / css / manage / _ai-agent.scss

_ai-agent.scss in Code Snippets 4.0.0-beta.2, at css/manage/_ai-agent.scss

749 lines 13.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 .ai-agent-layout {
2 display: grid;
3 gap: var(--cs-sidebar-gap);
4 grid-template-columns: minmax(0, 1fr) var(--cs-sidebar-width);
5 grid-template-areas: 'main sidebar';
6 align-items: start;
7
8 @media screen and (width <= 782px) {
9 grid-template-columns: minmax(0, 1fr);
10 grid-template-areas: 'main' 'sidebar';
11 }
12 }
13
14 .ai-agent-layout__main {
15 grid-area: main;
16 display: flex;
17 flex-direction: column;
18 gap: 20px;
19 min-inline-size: 0;
20 min-block-size: 600px;
21 padding: 20px;
22 background: var(--cs-color-surface-subtle);
23 border: 1px solid var(--cs-color-border-subtle);
24 border-radius: var(--cs-card-radius);
25 }
26
27 .ai-agent-loading {
28 display: flex;
29 align-items: center;
30 justify-content: center;
31 gap: 8px;
32 padding-block: 48px;
33 color: var(--cs-color-text-secondary);
34 }
35
36 .ai-agent-layout__sidebar {
37 grid-area: sidebar;
38 }
39
40 /* History rail */
41
42 .ai-agent-history {
43 display: flex;
44 flex-direction: column;
45 gap: 8px;
46 min-block-size: 0;
47 position: relative;
48 }
49
50 .ai-agent-history--loading {
51 flex-direction: row;
52 align-items: center;
53 gap: 6px;
54 color: var(--cs-color-text-secondary);
55 font-size: 13px;
56 }
57
58 .ai-agent-history__empty {
59 color: var(--cs-color-text-subtle);
60 font-style: italic;
61 }
62
63 .ai-agent-history__list {
64 margin: 0;
65 list-style: none;
66 display: flex;
67 flex-direction: column;
68 gap: 6px;
69 flex: 1 1 auto;
70 min-block-size: 0;
71 overflow-y: auto;
72 padding-block-end: 24px;
73 scrollbar-width: thin;
74 }
75
76 .ai-agent-history__item {
77 display: flex;
78 align-items: stretch;
79 border: 1px solid var(--cs-color-border-subtle);
80 border-radius: 5px;
81 background: var(--cs-color-surface);
82 margin: 0;
83
84 &.is-active {
85 border-color: var(--cs-color-accent);
86 box-shadow: inset 3px 0 0 var(--cs-color-accent);
87 }
88 }
89
90 .ai-agent-history__open {
91 flex: 1 1 0;
92 min-inline-size: 0;
93 display: flex;
94 flex-direction: column;
95 gap: 6px;
96 align-items: flex-start;
97 padding-block: 8px;
98 padding-inline: 12px;
99 background: none;
100 border: 0;
101 cursor: pointer;
102 text-align: start;
103 }
104
105 .ai-agent-history__title {
106 display: block;
107 inline-size: 100%;
108 font-weight: 600;
109 overflow: hidden;
110 text-overflow: ellipsis;
111 white-space: nowrap;
112 }
113
114 .ai-agent-history__status {
115 display: inline-block;
116 padding: 0 8px;
117 border-radius: 999px;
118 font-size: 11px;
119 font-weight: 600;
120 line-height: 18px;
121 background: var(--cs-color-surface-muted);
122 color: var(--cs-color-text-secondary);
123
124 &.is-plan {
125 background: #e5f0fb;
126 color: var(--cs-color-accent);
127 }
128
129 &.is-done {
130 background: #edfaef;
131 color: #007017;
132 }
133
134 &.is-failed {
135 background: #fcf0f1;
136 color: #b32d2e;
137 }
138 }
139
140 .ai-agent-history__delete {
141 flex: 0 0 auto;
142 border: 0;
143 background: none;
144 cursor: pointer;
145 color: var(--cs-color-text-subtle);
146 font-size: 18px;
147 padding-inline: 10px;
148 opacity: 0;
149 pointer-events: none;
150 transition: opacity 120ms ease, color 120ms ease;
151
152 &:focus-visible,
153 &:hover {
154 color: var(--cs-color-error);
155 }
156
157 .ai-agent-history__item:hover &,
158 .ai-agent-history__item:focus-within & {
159 opacity: 1;
160 pointer-events: auto;
161 }
162 }
163
164 .ai-agent-history__delete-icon {
165 block-size: 18px;
166 inline-size: 18px;
167 display: block;
168 }
169
170 .ai-agent-history::after {
171 content: '';
172 position: absolute;
173 inset-inline: 0;
174 inset-block-end: 0;
175 block-size: 48px;
176 pointer-events: none;
177 background: linear-gradient(to bottom, rgb(255 255 255 / 0%), #fff 85%);
178 }
179
180 /* Conversation thread */
181
182 .ai-agent-thread {
183 display: flex;
184 flex-direction: column;
185 gap: 20px;
186 }
187
188 .ai-agent-message {
189 padding-block: 10px;
190 padding-inline: 14px;
191 border-radius: var(--cs-card-radius);
192 max-inline-size: 90%;
193
194 &.is-user {
195 align-self: flex-end;
196 background: color-mix(in srgb, var(--cs-color-surface-subtle) 97%, #000 3%);
197 }
198
199 &.is-assistant {
200 align-self: flex-start;
201 background: var(--cs-color-surface);
202 }
203 }
204
205 .ai-agent-message__role {
206 display: block;
207 font-size: 11px;
208 font-weight: 600;
209 text-transform: uppercase;
210 color: var(--cs-color-text-subtle);
211 margin-block-end: 4px;
212 }
213
214 .ai-agent-message__content {
215 white-space: pre-wrap;
216 }
217
218 .ai-agent-typing {
219 display: flex;
220 align-items: center;
221 gap: 8px;
222 color: var(--cs-color-text-secondary);
223 animation: ai-agent-fade-in 0.25s ease;
224 }
225
226 .ai-agent-plan,
227 .ai-agent-result {
228 animation: ai-agent-fade-in 0.25s ease;
229 border-radius: var(--cs-card-radius);
230 background: var(--cs-color-surface);
231 padding: 16px;
232 }
233
234 @keyframes ai-agent-fade-in {
235 from {
236 opacity: 0;
237 }
238
239 to {
240 opacity: 1;
241 }
242 }
243
244 .ai-agent-typing__dots {
245 display: inline-flex;
246 gap: 4px;
247
248 i {
249 inline-size: 6px;
250 block-size: 6px;
251 border-radius: 50%;
252 background: var(--cs-color-accent);
253 animation: ai-agent-blink 1.4s infinite both;
254
255 &:nth-child(2) {
256 animation-delay: 0.2s;
257 }
258
259 &:nth-child(3) {
260 animation-delay: 0.4s;
261 }
262 }
263 }
264
265 @keyframes ai-agent-blink {
266 0%,
267 80%,
268 100% {
269 opacity: 0.2;
270 }
271
272 40% {
273 opacity: 1;
274 }
275 }
276
277 /* Plan card */
278
279 .ai-agent-plan__header {
280 display: flex;
281 align-items: center;
282 justify-content: space-between;
283 gap: 12px;
284 margin-block-end: 12px;
285 }
286
287 .ai-agent-plan__title {
288 margin: 0;
289 font-size: 15px;
290 }
291
292 .ai-agent-plan__badge {
293 font-size: 11px;
294 font-weight: 600;
295 padding-block: 2px;
296 padding-inline: 8px;
297 border-radius: 999px;
298 background: var(--cs-color-surface-muted);
299 color: var(--cs-color-text-secondary);
300 white-space: nowrap;
301
302 &.is-bundle {
303 background: #e5f0fb;
304 color: var(--cs-color-accent);
305 }
306
307 &.is-done {
308 background: #edfaef;
309 color: #007017;
310 }
311 }
312
313 .ai-agent-plan__overview {
314 margin-block: 0 16px;
315 color: var(--cs-color-text);
316 line-height: 1.6;
317 white-space: pre-wrap;
318 }
319
320 .ai-agent-plan__parts-heading {
321 margin-block: 0 8px;
322 font-size: 12px;
323 text-transform: uppercase;
324 letter-spacing: 0.02em;
325 color: var(--cs-color-text-secondary);
326 }
327
328 .ai-agent-plan__parts {
329 margin: 0;
330 list-style: none;
331 display: flex;
332 flex-direction: column;
333 gap: 8px;
334 }
335
336 .ai-agent-plan__part {
337 display: grid;
338 grid-template-columns: auto 1fr;
339 gap: 4px 10px;
340 align-items: center;
341 padding: 10px 12px;
342 margin: 0;
343 background: var(--cs-color-surface-subtle);
344 border: 0;
345 border-radius: var(--cs-control-radius);
346
347 .badge {
348 align-self: start;
349 }
350 }
351
352 .ai-agent-plan__part-name {
353 font-weight: 600;
354 }
355
356 .ai-agent-plan__part-desc {
357 grid-column: 2;
358 margin: 0;
359 color: var(--cs-color-text-muted);
360 font-size: 13px;
361 line-height: 1.5;
362 }
363
364 .ai-agent-plan__actions {
365 display: flex;
366 gap: 8px;
367 margin-block-start: 16px;
368 }
369
370 /* Result card */
371
372 .ai-agent-result__lead {
373 color: var(--cs-color-text-secondary);
374 margin-block: 0 12px;
375 }
376
377 .ai-agent-result__rows {
378 margin: 0;
379 list-style: none;
380 display: flex;
381 flex-direction: column;
382 gap: 8px;
383 }
384
385 .ai-agent-result__row {
386 display: flex;
387 align-items: center;
388 gap: 10px;
389 padding: 10px 12px;
390 margin: 0;
391 background: var(--cs-color-surface-subtle);
392 border-radius: var(--cs-control-radius);
393 }
394
395 .ai-agent-result__name {
396 font-weight: 600;
397 flex: 1;
398 }
399
400 .ai-agent-result__status.is-error {
401 color: var(--cs-color-error);
402 font-size: 12px;
403 }
404
405 .ai-agent-result__status.is-deleted {
406 color: var(--cs-color-error);
407 font-weight: 600;
408 text-decoration: underline;
409 text-decoration-color: var(--cs-color-error);
410 }
411
412 .ai-agent-result__status.is-checking {
413 display: inline-flex;
414 align-items: center;
415 gap: 4px;
416 color: var(--cs-color-text-subtle);
417 font-size: 12px;
418 }
419
420 .ai-agent-result__link {
421 white-space: nowrap;
422 }
423
424 .ai-agent-result__edit {
425 margin-block-start: 16px;
426 padding-block-start: 16px;
427 border-block-start: 1px solid var(--cs-color-surface-muted);
428 display: flex;
429 flex-direction: column;
430 align-items: flex-start;
431 gap: 10px;
432 }
433
434 .ai-agent-result__edit-head {
435 inline-size: 100%;
436 display: flex;
437 align-items: center;
438 justify-content: space-between;
439 gap: 12px;
440 font-size: 13px;
441 color: var(--cs-color-text-secondary);
442 }
443
444 .ai-agent-result__edit-actions {
445 display: flex;
446 align-items: center;
447 gap: 16px;
448 }
449
450 /* Borderless treatment for the inline preview / make-changes / select buttons. */
451 .ai-agent-result .button-link {
452 border: 0;
453 box-shadow: none;
454 padding-inline: 2px;
455 }
456
457 /* Use plugin accent colour for preview/edit links. */
458 .wp-core-ui .ai-agent-result .ai-agent-result__row .button-link,
459 .ai-agent-result .ai-agent-result__link {
460 color: var(--cs-color-accent);
461
462 &:hover {
463 color: var(--cs-color-accent-hover);
464 }
465 }
466
467 /* Error panel */
468
469 // The agent asking to widen the context. Deliberately not styled as an error:
470 // nothing has gone wrong, and the user is being asked to consent.
471 .ai-agent-context-request {
472 border: 1px solid #c3d9ed;
473 border-radius: var(--cs-card-radius);
474 padding: 16px;
475 background: var(--cs-color-surface-info);
476
477 .ai-agent-context-request__detail {
478 margin-block: 0 12px;
479 font-size: 13px;
480 color: var(--cs-color-text-secondary);
481 }
482
483 .ai-agent-context-request__actions {
484 display: flex;
485 flex-wrap: wrap;
486 gap: 8px;
487 }
488 }
489
490 // Shown in place of the typing indicator once the user stops waiting on a
491 // generation the cloud may still be running.
492 .ai-agent-stopped {
493 display: flex;
494 flex-wrap: wrap;
495 align-items: center;
496 gap: 12px;
497 border: 1px solid var(--cs-color-border-subtle);
498 border-radius: var(--cs-card-radius);
499 padding: 12px 16px;
500 background: var(--cs-color-surface-subtle);
501
502 p {
503 margin: 0;
504 font-size: 13px;
505 color: var(--cs-color-text-secondary);
506 }
507 }
508
509 .ai-agent-error {
510 border: 1px solid #f0c33c;
511 border-radius: var(--cs-card-radius);
512 padding: 16px;
513 background: #fcf9e8;
514
515 p {
516 margin-block: 0 12px;
517 }
518 }
519
520
521 /* Prompt box */
522
523 .ai-agent-prompt {
524 border: 1px solid var(--cs-color-border-subtle);
525 border-radius: var(--cs-card-radius);
526 background: var(--cs-color-surface);
527 padding: 8px;
528
529 &:focus-within {
530 border-color: var(--cs-color-accent);
531 box-shadow: 0 0 0 1px var(--cs-color-accent);
532 }
533 }
534
535 .ai-agent-prompt__input {
536 box-sizing: border-box;
537 inline-size: 100%;
538 max-inline-size: 100%;
539 border: 0;
540 resize: vertical;
541 min-block-size: 90px;
542 font-size: 14px;
543 padding: 6px;
544 background: var(--cs-color-surface);
545 color: var(--cs-color-text);
546
547 &:focus {
548 outline: none;
549 box-shadow: none;
550 }
551
552 &:disabled {
553 background: var(--cs-color-surface);
554 color: var(--cs-color-text);
555 opacity: 1;
556 }
557 }
558
559 .ai-agent-prompt__footer {
560 display: flex;
561 align-items: center;
562 justify-content: space-between;
563 gap: 12px;
564 margin-block-start: 6px;
565 }
566
567 .ai-agent-prompt__hint {
568 font-size: 12px;
569 color: var(--cs-color-text-muted);
570 }
571
572 .ai-agent-result__edit .ai-agent-prompt {
573 inline-size: 100%;
574 }
575
576 /* Push the composer to the bottom of the main column. */
577 .ai-agent-layout__main > .ai-agent-prompt {
578 margin-block-start: auto;
579 }
580
581 /* Empty state — starter prompts in the blank area. */
582 .ai-agent-empty {
583 flex: 1 1 auto;
584 display: flex;
585 flex-direction: column;
586 align-items: center;
587 justify-content: center;
588 gap: 12px;
589 text-align: center;
590 padding: 24px;
591 }
592
593 .ai-agent-empty__eyebrow {
594 margin: 0;
595 font-size: 11px;
596 font-weight: 600;
597 letter-spacing: 0.06em;
598 text-transform: uppercase;
599 color: var(--cs-color-text-muted);
600 }
601
602 .ai-agent-empty__chips {
603 display: flex;
604 flex-wrap: wrap;
605 justify-content: center;
606 gap: 8px;
607 max-inline-size: 560px;
608 }
609
610 .ai-agent-empty__chip {
611 padding: 8px 16px;
612 border: 1px solid var(--cs-color-border-subtle);
613 border-radius: 999px;
614 background: var(--cs-color-surface);
615 color: var(--cs-color-text);
616 font-size: 14px;
617 line-height: 1.5;
618 cursor: pointer;
619
620 &:hover {
621 border-color: var(--cs-color-accent);
622 color: var(--cs-color-accent);
623 }
624 }
625
626 /* Sidebar */
627
628 .ai-agent-sidebar {
629 border: 1px solid var(--cs-color-border-subtle);
630 border-radius: var(--cs-card-radius);
631 background: var(--cs-color-surface);
632 overflow: hidden;
633 display: flex;
634 flex-direction: column;
635 max-block-size: 634px;
636 }
637
638 .ai-agent-sidebar__tabs {
639 display: flex;
640 border-block-end: 1px solid var(--cs-color-border-subtle);
641 }
642
643 .ai-agent-sidebar__tab {
644 flex: 1;
645 padding-block: 12px;
646 padding-inline: 8px;
647 border: 0;
648 background: var(--cs-color-surface-subtle);
649 cursor: pointer;
650 font-weight: 600;
651 color: var(--cs-color-text-secondary);
652 border-block-end: 2px solid transparent;
653
654 &:hover {
655 color: var(--cs-color-accent);
656 }
657
658 &.is-active {
659 background: var(--cs-color-surface);
660 color: var(--cs-color-accent);
661 border-block-end-color: var(--cs-color-accent);
662 }
663 }
664
665 .ai-agent-sidebar__panel {
666 display: flex;
667 flex-direction: column;
668 gap: 20px;
669 padding: 16px;
670 min-block-size: 0;
671 overflow: hidden;
672 }
673
674 .ai-agent-sidebar__panel[hidden]] {
675 display: none;
676 }
677
678 .ai-agent-sidebar__heading {
679 margin-block: 0 8px;
680 font-size: 13px;
681 text-transform: uppercase;
682 letter-spacing: 0.02em;
683 color: var(--cs-color-text-secondary);
684 }
685
686 .ai-agent-examples {
687 display: flex;
688 flex-direction: column;
689 gap: 6px;
690 }
691
692 .ai-agent-examples__chip {
693 text-align: start;
694 padding-block: 8px;
695 padding-inline: 10px;
696 border: 1px solid var(--cs-color-border-subtle);
697 border-radius: 5px;
698 background: var(--cs-color-surface-subtle);
699 cursor: pointer;
700
701 &:disabled {
702 opacity: 0.5;
703 cursor: not-allowed;
704 }
705
706 &:hover:not(:disabled) {
707 border-color: var(--cs-color-accent);
708 color: var(--cs-color-accent);
709 }
710 }
711
712 .ai-agent-quota__row {
713 margin-block-end: 10px;
714 }
715
716 .ai-agent-quota__label {
717 display: flex;
718 justify-content: space-between;
719 font-size: 12px;
720 color: var(--cs-color-text-secondary);
721 margin-block-end: 4px;
722 }
723
724 .ai-agent-quota__fill {
725 block-size: 100%;
726 background: var(--cs-color-accent);
727 }
728
729 .ai-agent-quota__track {
730 block-size: 8px;
731 border-radius: 999px;
732 background: var(--cs-color-surface-muted);
733 overflow: hidden;
734
735 &.is-warning .ai-agent-quota__fill {
736 background: var(--cs-color-error);
737 }
738 }
739
740 .ai-agent-message-limit__value {
741 margin: 0;
742 font-size: 13px;
743 color: var(--cs-color-text-secondary);
744
745 &.is-warning {
746 color: var(--cs-color-error);
747 }
748 }
749