@webless/agent 0.6.3 → 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/embed.css CHANGED
@@ -264,6 +264,49 @@ html.webless-agent-page-shift {
264
264
  }
265
265
  }
266
266
 
267
+ /* src/react/styles/primitives.css */
268
+ .webless-agent-root {
269
+ --as-card: var(--as-surface);
270
+ --as-card-border: var(--as-border);
271
+ --as-card-radius: var(--as-radius-lg);
272
+ --as-primary: var(--as-brand);
273
+ --as-primary-foreground: #fff;
274
+ --as-muted: var(--as-text-muted);
275
+ --as-accent: var(--as-brand-soft);
276
+ }
277
+ .webless-agent-root .as-card {
278
+ padding: 14px 16px;
279
+ border: 1px solid var(--as-card-border);
280
+ border-radius: var(--as-card-radius);
281
+ background: var(--as-card);
282
+ }
283
+ .webless-agent-root .as-badge {
284
+ display: inline-flex;
285
+ align-items: center;
286
+ padding: 3px 9px;
287
+ border-radius: 999px;
288
+ background: var(--as-accent);
289
+ color: var(--as-primary);
290
+ font-size: 11px;
291
+ font-weight: 650;
292
+ }
293
+ .webless-agent-root .as-button {
294
+ appearance: none;
295
+ min-height: 36px;
296
+ padding: 8px 14px;
297
+ border: 0;
298
+ border-radius: 999px;
299
+ background: var(--as-primary);
300
+ color: var(--as-primary-foreground);
301
+ cursor: pointer;
302
+ font: inherit;
303
+ font-weight: 650;
304
+ }
305
+ .webless-agent-root .as-button:focus-visible {
306
+ outline: 2px solid var(--as-primary);
307
+ outline-offset: 2px;
308
+ }
309
+
267
310
  /* src/react/styles/all.css */
268
311
 
269
312
  /* src/react/components/AgentActivityBubble/AgentActivityBubble.css */
@@ -274,7 +317,7 @@ html.webless-agent-page-shift {
274
317
  flex-direction: column;
275
318
  align-self: flex-start;
276
319
  align-items: stretch;
277
- gap: 7px;
320
+ gap: 8px;
278
321
  }
279
322
  .agent-activity-bubble__status {
280
323
  display: flex;
@@ -289,13 +332,13 @@ html.webless-agent-page-shift {
289
332
  .agent-activity-bubble__pulse {
290
333
  position: relative;
291
334
  display: grid;
292
- width: 15px;
293
- height: 15px;
294
- flex: 0 0 15px;
335
+ width: 16px;
336
+ height: 16px;
337
+ flex: 0 0 16px;
295
338
  place-items: center;
296
339
  border-radius: 999px;
297
- background: var(--as-success);
298
- color: #fff;
340
+ background: var(--as-brand);
341
+ color: var(--as-surface);
299
342
  }
300
343
  .agent-activity-bubble__pulse::after {
301
344
  content: "\2713";
@@ -304,16 +347,13 @@ html.webless-agent-page-shift {
304
347
  line-height: 1;
305
348
  }
306
349
  .agent-activity-bubble__pulse.is-active {
307
- background: var(--as-brand);
308
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--as-brand) 11%, transparent);
309
- animation: agent-activity-pulse 1.8s ease-in-out infinite;
350
+ border: 2px solid color-mix(in srgb, var(--as-brand) 26%, transparent);
351
+ border-top-color: var(--as-brand);
352
+ background: transparent;
353
+ animation: agent-activity-spin 0.9s linear infinite;
310
354
  }
311
355
  .agent-activity-bubble__pulse.is-active::after {
312
356
  content: "";
313
- width: 5px;
314
- height: 5px;
315
- border-radius: inherit;
316
- background: currentColor;
317
357
  }
318
358
  .agent-activity-bubble__pulse.is-error {
319
359
  background: var(--as-danger);
@@ -328,12 +368,12 @@ html.webless-agent-page-shift {
328
368
  .agent-activity-bubble__summary {
329
369
  appearance: none;
330
370
  display: flex;
331
- width: 100%;
332
- min-height: 34px;
371
+ width: fit-content;
372
+ min-height: 32px;
333
373
  align-items: center;
334
- gap: 9px;
335
- margin: 0;
336
- padding: 0 2px;
374
+ gap: 8px;
375
+ margin: 0 0 0 -6px;
376
+ padding: 4px 6px;
337
377
  border: 0;
338
378
  border-radius: 8px;
339
379
  background: transparent;
@@ -356,15 +396,12 @@ html.webless-agent-page-shift {
356
396
  transition: transform 180ms cubic-bezier(0.22, 1, 0.36, 1);
357
397
  }
358
398
  .agent-activity-bubble__summary:hover {
399
+ background: var(--as-surface-muted);
359
400
  color: var(--as-text);
360
401
  }
361
402
  .agent-activity-bubble__summary:focus-visible {
362
- outline: none;
363
- color: var(--as-text);
364
- text-decoration: underline;
365
- text-decoration-color: color-mix(in srgb, var(--as-text) 46%, transparent);
366
- text-decoration-thickness: 2px;
367
- text-underline-offset: 4px;
403
+ outline: 2px solid var(--as-brand);
404
+ outline-offset: 2px;
368
405
  }
369
406
  .agent-activity-bubble__summary[aria-expanded=true]::before {
370
407
  transform: rotate(225deg) translate(-1px, -1px);
@@ -373,85 +410,78 @@ html.webless-agent-page-shift {
373
410
  display: grid;
374
411
  gap: 0;
375
412
  margin: 0;
376
- padding: 3px 0 2px 24px;
413
+ padding: 4px 0 2px 18px;
377
414
  list-style: none;
378
415
  }
379
416
  .agent-activity-bubble__step {
380
417
  position: relative;
381
418
  display: grid;
382
- min-height: 50px;
383
- grid-template-columns: 26px minmax(0, 1fr);
419
+ min-height: 42px;
420
+ grid-template-columns: 18px minmax(0, 1fr);
384
421
  align-items: flex-start;
385
422
  gap: 10px;
386
- padding: 5px 0;
423
+ padding: 8px 0 4px;
387
424
  }
388
425
  .agent-activity-bubble__step:not(:last-child)::after {
389
426
  position: absolute;
390
- top: 30px;
391
- bottom: -6px;
392
- left: 12px;
427
+ top: 29px;
428
+ bottom: -9px;
429
+ left: 8px;
393
430
  width: 1px;
394
- background: color-mix(in srgb, var(--as-text) 11%, transparent);
431
+ background: color-mix(in srgb, var(--as-text) 10%, transparent);
395
432
  content: "";
396
433
  }
434
+ .agent-activity-bubble__step--child {
435
+ margin-left: 9px;
436
+ }
397
437
  .agent-activity-bubble__step-icon {
398
438
  position: relative;
399
439
  z-index: 1;
400
- display: inline-flex;
401
- width: 25px;
402
- height: 25px;
403
- align-items: center;
404
- justify-content: center;
405
- overflow: hidden;
406
- border: 0;
407
- border-radius: 8px;
408
- background: var(--as-surface-muted);
409
- color: var(--as-text-muted);
410
- font-size: 10px;
411
- font-weight: 750;
412
- }
413
- .agent-activity-bubble__step-icon svg {
414
- width: 15px;
415
- height: 15px;
416
- }
417
- .agent-activity-bubble__step-icon img {
418
- position: absolute;
419
- inset: 0;
420
- width: 100%;
421
- height: 100%;
422
- border-radius: inherit;
440
+ display: inline-grid;
441
+ width: 18px;
442
+ height: 18px;
443
+ place-items: center;
444
+ border: 2px solid color-mix(in srgb, var(--as-text) 18%, transparent);
445
+ border-radius: 999px;
423
446
  background: var(--as-surface);
424
- object-fit: contain;
447
+ color: var(--as-surface);
448
+ font-size: 9px;
449
+ font-weight: 800;
450
+ line-height: 1;
425
451
  }
426
- .agent-activity-bubble__step[data-kind=specialist] .agent-activity-bubble__step-icon {
427
- background: var(--as-brand-soft);
428
- color: var(--as-brand);
452
+ .agent-activity-bubble__step[data-state=completed] .agent-activity-bubble__step-icon {
453
+ border-color: var(--as-brand);
454
+ background: var(--as-brand);
455
+ }
456
+ .agent-activity-bubble__step[data-state=completed] .agent-activity-bubble__step-icon::after {
457
+ content: "\2713";
429
458
  }
430
459
  .agent-activity-bubble__step[data-state=active] .agent-activity-bubble__step-icon {
431
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--as-brand) 8%, transparent);
460
+ border-color: color-mix(in srgb, var(--as-brand) 26%, transparent);
461
+ border-top-color: var(--as-brand);
462
+ background: transparent;
463
+ animation: agent-activity-spin 0.9s linear infinite;
432
464
  }
433
465
  .agent-activity-bubble__step[data-state=error] .agent-activity-bubble__step-icon {
434
- background: color-mix(in srgb, var(--as-danger) 7%, var(--as-surface));
435
- color: var(--as-danger);
466
+ border-color: var(--as-danger);
467
+ background: var(--as-surface);
436
468
  }
437
469
  .agent-activity-bubble__step-copy {
438
470
  display: grid;
439
471
  min-width: 0;
440
472
  gap: 2px;
441
- padding-top: 2px;
442
473
  }
443
474
  .agent-activity-bubble__step-heading {
444
475
  display: flex;
445
476
  min-width: 0;
446
477
  align-items: baseline;
447
478
  gap: 8px;
448
- flex-wrap: wrap;
449
479
  }
450
480
  .agent-activity-bubble__step-heading strong {
451
481
  overflow: hidden;
452
482
  color: var(--as-text);
453
- font-size: 12px;
454
- font-weight: 680;
483
+ font-size: 12.5px;
484
+ font-weight: 700;
455
485
  line-height: 1.35;
456
486
  text-overflow: ellipsis;
457
487
  white-space: nowrap;
@@ -461,13 +491,50 @@ html.webless-agent-page-shift {
461
491
  font-size: 11.5px;
462
492
  line-height: 1.4;
463
493
  }
464
- @keyframes agent-activity-pulse {
465
- 50% {
466
- opacity: 0.55;
494
+ .agent-activity-bubble__delegation {
495
+ display: inline-flex;
496
+ width: fit-content;
497
+ align-items: center;
498
+ gap: 6px;
499
+ margin-top: 4px;
500
+ padding: 3px 9px;
501
+ border-radius: 999px;
502
+ background: var(--as-brand-soft);
503
+ color: var(--as-brand);
504
+ font-size: 11px;
505
+ font-weight: 650;
506
+ line-height: 1.4;
507
+ }
508
+ .agent-activity-bubble__step-retry {
509
+ appearance: none;
510
+ justify-self: start;
511
+ margin: 2px 0 0;
512
+ padding: 0;
513
+ border: 0;
514
+ background: transparent;
515
+ color: var(--as-brand);
516
+ cursor: pointer;
517
+ font-family: inherit;
518
+ font-size: 11.5px;
519
+ font-weight: 650;
520
+ text-decoration: underline;
521
+ text-underline-offset: 2px;
522
+ }
523
+ .agent-activity-bubble__step-retry:hover {
524
+ color: var(--as-text);
525
+ }
526
+ .agent-activity-bubble__step-retry:focus-visible {
527
+ outline: 2px solid var(--as-brand);
528
+ outline-offset: 2px;
529
+ }
530
+ @keyframes agent-activity-spin {
531
+ to {
532
+ transform: rotate(360deg);
467
533
  }
468
534
  }
469
535
  @media (prefers-reduced-motion: reduce) {
470
- .agent-activity-bubble__pulse.is-active {
536
+ .agent-activity-bubble__pulse.is-active,
537
+ .agent-activity-bubble__step[data-state=active] .agent-activity-bubble__step-icon {
471
538
  animation: none;
472
539
  }
473
540
  .agent-activity-bubble__summary::before {
@@ -483,12 +550,12 @@ html.webless-agent-page-shift {
483
550
  }
484
551
  .composer__field {
485
552
  display: flex;
486
- align-items: flex-end;
553
+ align-items: center;
487
554
  gap: 6px;
488
- padding: 6px;
555
+ padding: 5px 5px 5px 14px;
489
556
  border: 1px solid var(--as-control-border, color-mix(in srgb, var(--as-text) 14%, transparent));
490
- border-radius: 16px;
491
- background: color-mix(in srgb, var(--as-surface-muted) 42%, var(--as-surface));
557
+ border-radius: 999px;
558
+ background: var(--as-surface);
492
559
  box-shadow: 0 1px 2px color-mix(in srgb, var(--as-text) 5%, transparent);
493
560
  }
494
561
  .composer__field:focus-within {
@@ -502,7 +569,7 @@ html.webless-agent-page-shift {
502
569
  background: transparent;
503
570
  resize: none;
504
571
  field-sizing: content;
505
- padding: 8px 6px 8px 8px;
572
+ padding: 8px 0;
506
573
  font-size: 13px;
507
574
  line-height: 1.45;
508
575
  color: var(--as-text);
@@ -521,7 +588,7 @@ html.webless-agent-page-shift {
521
588
  height: 34px;
522
589
  border-radius: 999px;
523
590
  background: var(--as-brand);
524
- color: var(--as-visitor-text);
591
+ color: var(--as-surface);
525
592
  display: grid;
526
593
  place-items: center;
527
594
  cursor: pointer;
@@ -541,8 +608,8 @@ html.webless-agent-page-shift {
541
608
  }
542
609
  .composer--dock .composer__field {
543
610
  align-items: center;
544
- padding: 5px 5px 5px 13px;
545
- background: color-mix(in srgb, var(--as-surface-muted) 42%, var(--as-surface));
611
+ padding: 5px 5px 5px 14px;
612
+ background: var(--as-surface);
546
613
  border: 1px solid var(--as-control-border, color-mix(in srgb, var(--as-text) 14%, transparent));
547
614
  border-radius: 999px;
548
615
  box-shadow: none;
@@ -564,6 +631,112 @@ html.webless-agent-page-shift {
564
631
  width: 15px;
565
632
  height: 15px;
566
633
  }
634
+ .composer--form .composer__sheet {
635
+ display: flex;
636
+ flex-direction: column;
637
+ overflow: hidden;
638
+ border: 1px solid var(--as-control-border, color-mix(in srgb, var(--as-text) 14%, transparent));
639
+ border-radius: 22px;
640
+ background: var(--as-surface);
641
+ box-shadow: 0 1px 2px color-mix(in srgb, var(--as-text) 5%, transparent);
642
+ animation: composer-form-in 180ms cubic-bezier(0.16, 1, 0.3, 1);
643
+ }
644
+ .composer--form .composer__sheet:focus-within {
645
+ border-color: color-mix(in srgb, var(--as-brand) 42%, var(--as-border));
646
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--as-brand) 10%, transparent);
647
+ }
648
+ .composer__row {
649
+ padding: 12px 16px 10px;
650
+ border-bottom: 1px solid var(--as-hairline, color-mix(in srgb, var(--as-text) 9%, transparent));
651
+ }
652
+ .composer__row--grow {
653
+ padding-bottom: 8px;
654
+ }
655
+ .composer__label {
656
+ display: block;
657
+ min-width: 0;
658
+ }
659
+ .composer__sr-only {
660
+ position: absolute;
661
+ width: 1px;
662
+ height: 1px;
663
+ padding: 0;
664
+ margin: -1px;
665
+ overflow: hidden;
666
+ clip: rect(0, 0, 0, 0);
667
+ white-space: nowrap;
668
+ border: 0;
669
+ }
670
+ .composer__control {
671
+ display: block;
672
+ width: 100%;
673
+ min-width: 0;
674
+ border: none;
675
+ background: transparent;
676
+ padding: 0;
677
+ color: var(--as-text);
678
+ font: inherit;
679
+ font-size: 14px;
680
+ line-height: 1.45;
681
+ }
682
+ .composer__control--area {
683
+ resize: none;
684
+ min-height: 72px;
685
+ field-sizing: content;
686
+ max-height: 140px;
687
+ }
688
+ .composer__control::placeholder {
689
+ color: color-mix(in srgb, var(--as-text) 62%, transparent);
690
+ }
691
+ .composer__control:focus {
692
+ outline: none;
693
+ }
694
+ .composer__error {
695
+ margin: 6px 0 0;
696
+ color: var(--as-danger);
697
+ font-size: 12px;
698
+ line-height: 1.35;
699
+ }
700
+ .composer__toolbar {
701
+ display: flex;
702
+ align-items: center;
703
+ justify-content: flex-end;
704
+ gap: 12px;
705
+ padding: 8px 8px 8px 16px;
706
+ }
707
+ .composer__send:focus-visible {
708
+ outline: 2px solid var(--as-brand);
709
+ outline-offset: 2px;
710
+ }
711
+ .composer--form .composer__send {
712
+ width: 36px;
713
+ height: 36px;
714
+ }
715
+ @keyframes composer-form-in {
716
+ from {
717
+ opacity: 0;
718
+ transform: translateY(6px);
719
+ }
720
+ to {
721
+ opacity: 1;
722
+ transform: none;
723
+ }
724
+ }
725
+ @media (prefers-reduced-motion: reduce) {
726
+ .composer--form .composer__sheet {
727
+ animation: none;
728
+ }
729
+ .composer__send {
730
+ transition: none;
731
+ }
732
+ }
733
+ .composer--dock.composer--form .composer__control {
734
+ font-size: 15px;
735
+ }
736
+ .composer--dock.composer--form .composer__send {
737
+ width: 44px;
738
+ height: 44px;
739
+ }
567
740
 
568
741
  /* src/react/components/FollowUpChips/FollowUpChips.css */
569
742
  .followups {
@@ -580,42 +753,33 @@ html.webless-agent-page-shift {
580
753
  }
581
754
  .followups__list {
582
755
  display: flex;
583
- flex-direction: column;
584
- gap: 6px;
756
+ flex-wrap: wrap;
757
+ gap: 8px;
585
758
  }
586
759
  .followups__chip {
587
760
  appearance: none;
761
+ display: inline-flex;
762
+ align-items: center;
588
763
  border: 1px solid var(--as-border);
589
764
  background: var(--as-surface);
590
765
  color: var(--as-text);
591
- font-size: 13px;
592
- position: relative;
593
- font-weight: 580;
766
+ font-size: 12.5px;
767
+ font-weight: 600;
594
768
  line-height: 1.4;
595
769
  text-align: left;
596
- border-radius: 12px;
597
- padding: 11px 34px 11px 12px;
770
+ border-radius: 999px;
771
+ padding: 8px 14px;
598
772
  cursor: pointer;
599
- transition: border-color 0.15s ease, background 0.15s ease;
773
+ transition:
774
+ border-color 0.15s ease,
775
+ background 0.15s ease,
776
+ color 0.15s ease;
600
777
  word-break: break-word;
601
778
  }
602
- .followups__chip::after {
603
- position: absolute;
604
- top: 50%;
605
- right: 13px;
606
- color: var(--as-text-subtle);
607
- content: "\2192";
608
- font-size: 13px;
609
- transform: translateY(-50%);
610
- transition: transform 150ms ease, color 150ms ease;
611
- }
612
779
  .followups__chip:hover:not(:disabled) {
613
- border-color: color-mix(in srgb, var(--as-brand) 28%, var(--as-border));
780
+ border-color: color-mix(in srgb, var(--as-brand) 32%, var(--as-border));
614
781
  background: var(--as-brand-soft);
615
- }
616
- .followups__chip:hover:not(:disabled)::after {
617
782
  color: var(--as-brand);
618
- transform: translate(2px, -50%);
619
783
  }
620
784
  .followups__chip:disabled {
621
785
  opacity: 0.5;
@@ -650,9 +814,6 @@ html.webless-agent-page-shift {
650
814
  white-space: nowrap;
651
815
  text-align: left;
652
816
  }
653
- .followups__chip--dock::after {
654
- display: none;
655
- }
656
817
 
657
818
  /* src/react/components/BookingCard/BookingCard.css */
658
819
  .booking-card {
@@ -675,6 +836,48 @@ html.webless-agent-page-shift {
675
836
  .booking-card__form {
676
837
  padding: 16px;
677
838
  }
839
+ .booking-card__steps {
840
+ display: grid;
841
+ grid-template-columns: repeat(3, minmax(0, 1fr));
842
+ gap: 8px;
843
+ margin: 0;
844
+ padding: 0 0 4px;
845
+ list-style: none;
846
+ }
847
+ .booking-card__step-indicator {
848
+ display: flex;
849
+ min-width: 0;
850
+ align-items: center;
851
+ gap: 6px;
852
+ color: var(--as-text-subtle);
853
+ font-size: 11px;
854
+ font-weight: 650;
855
+ }
856
+ .booking-card__step-indicator > span:first-child {
857
+ display: grid;
858
+ width: 22px;
859
+ height: 22px;
860
+ flex: 0 0 auto;
861
+ place-items: center;
862
+ border: 1px solid var(--as-border);
863
+ border-radius: 999px;
864
+ color: inherit;
865
+ font-size: 11px;
866
+ }
867
+ .booking-card__step-indicator--active {
868
+ color: var(--as-text);
869
+ }
870
+ .booking-card__step-indicator--active > span:first-child {
871
+ border-color: var(--as-brand);
872
+ background: var(--as-brand);
873
+ color: var(--as-visitor-text);
874
+ }
875
+ .booking-card__step-indicator--complete {
876
+ color: var(--as-brand);
877
+ }
878
+ .booking-card__step-indicator--complete > span:first-child {
879
+ border-color: var(--as-brand);
880
+ }
678
881
  .booking-card__step {
679
882
  gap: 16px;
680
883
  }
@@ -747,6 +950,35 @@ html.webless-agent-page-shift {
747
950
  outline: 2px solid var(--as-brand);
748
951
  outline-offset: 2px;
749
952
  }
953
+ .booking-card__loading {
954
+ display: flex;
955
+ align-items: center;
956
+ gap: 8px;
957
+ margin: 0;
958
+ color: var(--as-text-muted);
959
+ font-size: 13px;
960
+ line-height: 1.4;
961
+ }
962
+ .booking-card__loading::before {
963
+ width: 12px;
964
+ height: 12px;
965
+ flex: 0 0 auto;
966
+ border: 2px solid color-mix(in srgb, var(--as-brand) 30%, var(--as-border));
967
+ border-top-color: var(--as-brand);
968
+ border-radius: 50%;
969
+ content: "";
970
+ animation: booking-card-spin 0.7s linear infinite;
971
+ }
972
+ @media (prefers-reduced-motion: reduce) {
973
+ .booking-card__loading::before {
974
+ animation: none;
975
+ }
976
+ }
977
+ @keyframes booking-card-spin {
978
+ to {
979
+ transform: rotate(360deg);
980
+ }
981
+ }
750
982
  .booking-card__weekdays,
751
983
  .booking-card__calendar {
752
984
  display: grid;
@@ -832,19 +1064,30 @@ html.webless-agent-page-shift {
832
1064
  padding: 8px 12px;
833
1065
  border: 1px solid var(--as-border);
834
1066
  border-radius: var(--as-radius-md);
835
- background: var(--as-surface);
1067
+ background: var(--as-surface-muted, #f4f6fb);
836
1068
  color: var(--as-text);
1069
+ caret-color: var(--as-text);
1070
+ -webkit-text-fill-color: var(--as-text);
1071
+ color-scheme: light;
837
1072
  font: inherit;
838
1073
  font-size: 13px;
839
1074
  }
1075
+ .booking-card__field input:-webkit-autofill,
1076
+ .booking-card__field input:-webkit-autofill:hover,
1077
+ .booking-card__field input:-webkit-autofill:focus {
1078
+ -webkit-text-fill-color: var(--as-text);
1079
+ caret-color: var(--as-text);
1080
+ box-shadow: 0 0 0 1000px var(--as-surface-muted, #f4f6fb) inset;
1081
+ }
840
1082
  .booking-card__submit {
841
1083
  width: 100%;
842
1084
  min-height: 44px;
843
1085
  padding: 8px 12px;
844
1086
  border: 0;
845
1087
  border-radius: var(--as-radius-md);
846
- background: var(--as-visitor-bubble, #111);
847
- color: var(--as-visitor-text, #fff);
1088
+ background: var(--as-brand);
1089
+ color: #fff;
1090
+ -webkit-text-fill-color: #fff;
848
1091
  font: inherit;
849
1092
  font-size: 13px;
850
1093
  font-weight: 600;
@@ -923,9 +1166,13 @@ html.webless-agent-page-shift {
923
1166
  word-break: break-word;
924
1167
  }
925
1168
  .message-bubble--visitor .message-bubble__text {
926
- background: var(--as-visitor-bubble);
927
- color: var(--as-visitor-text);
928
- border-bottom-right-radius: 5px;
1169
+ padding: 10px 14px;
1170
+ border-radius: var(--as-radius-lg);
1171
+ border-bottom-right-radius: 6px;
1172
+ background: var(--as-brand-soft);
1173
+ color: var(--as-text);
1174
+ white-space: pre-wrap;
1175
+ text-decoration: none;
929
1176
  }
930
1177
  .message-bubble--agent .message-bubble__text {
931
1178
  min-width: 0;
@@ -936,6 +1183,38 @@ html.webless-agent-page-shift {
936
1183
  background: transparent;
937
1184
  color: var(--as-text);
938
1185
  }
1186
+ .message-bubble__sources {
1187
+ display: grid;
1188
+ gap: 6px;
1189
+ margin: 10px 0 0;
1190
+ padding: 10px 0 0;
1191
+ border-top: 1px solid var(--as-border);
1192
+ list-style: none;
1193
+ }
1194
+ .message-bubble__sources a {
1195
+ display: flex;
1196
+ min-width: 0;
1197
+ align-items: center;
1198
+ gap: 8px;
1199
+ color: var(--as-text);
1200
+ font-size: 12.5px;
1201
+ font-weight: 600;
1202
+ text-decoration: none;
1203
+ }
1204
+ .message-bubble__sources a:hover {
1205
+ color: var(--as-brand);
1206
+ }
1207
+ .message-bubble__source-icon {
1208
+ display: grid;
1209
+ width: 22px;
1210
+ height: 22px;
1211
+ flex: 0 0 22px;
1212
+ place-items: center;
1213
+ border-radius: 6px;
1214
+ background: var(--as-brand-soft);
1215
+ color: var(--as-brand);
1216
+ font-size: 11px;
1217
+ }
939
1218
  .message-bubble__markdown > :first-child {
940
1219
  margin-top: 0;
941
1220
  }
@@ -983,6 +1262,338 @@ html.webless-agent-page-shift {
983
1262
  font-size: 0.92em;
984
1263
  }
985
1264
 
1265
+ /* src/react/components/ConfirmationCard/ConfirmationCard.css */
1266
+ .confirmation-card {
1267
+ display: grid;
1268
+ gap: 12px;
1269
+ padding: 14px 16px;
1270
+ border: 1px solid var(--as-border);
1271
+ border-radius: var(--as-radius-lg);
1272
+ background: var(--as-surface);
1273
+ color: var(--as-text);
1274
+ }
1275
+ .confirmation-card__heading {
1276
+ display: grid;
1277
+ gap: 4px;
1278
+ }
1279
+ .confirmation-card__heading strong {
1280
+ font-size: 14px;
1281
+ font-weight: 650;
1282
+ line-height: 1.4;
1283
+ text-wrap: pretty;
1284
+ }
1285
+ .confirmation-card__heading p {
1286
+ margin: 0;
1287
+ color: var(--as-text-muted);
1288
+ font-size: 13px;
1289
+ line-height: 1.45;
1290
+ }
1291
+ .confirmation-card__actions {
1292
+ display: grid;
1293
+ gap: 8px;
1294
+ }
1295
+ .confirmation-card__action {
1296
+ appearance: none;
1297
+ min-height: 40px;
1298
+ padding: 8px 14px;
1299
+ border: 1px solid var(--as-border);
1300
+ border-radius: 10px;
1301
+ background: var(--as-surface);
1302
+ color: var(--as-text);
1303
+ cursor: pointer;
1304
+ font: inherit;
1305
+ font-weight: 650;
1306
+ }
1307
+ .confirmation-card__action--primary {
1308
+ border-color: var(--as-brand);
1309
+ background: var(--as-brand);
1310
+ color: #fff;
1311
+ }
1312
+ .confirmation-card__action--danger {
1313
+ border-color: color-mix(in srgb, var(--as-danger) 40%, var(--as-border));
1314
+ color: var(--as-danger);
1315
+ }
1316
+ .confirmation-card__action:hover:not(:disabled) {
1317
+ border-color: var(--as-brand);
1318
+ }
1319
+ .confirmation-card__action--primary:hover:not(:disabled) {
1320
+ filter: brightness(1.04);
1321
+ }
1322
+ .confirmation-card__action:focus-visible {
1323
+ outline: 2px solid var(--as-brand);
1324
+ outline-offset: 2px;
1325
+ }
1326
+ .confirmation-card__action:disabled {
1327
+ cursor: default;
1328
+ opacity: 0.5;
1329
+ }
1330
+ @media (prefers-reduced-motion: reduce) {
1331
+ .confirmation-card__action--primary:hover:not(:disabled) {
1332
+ filter: none;
1333
+ }
1334
+ }
1335
+
1336
+ /* src/react/components/HumanInputCard/HumanInputCard.css */
1337
+ .human-input-card {
1338
+ display: grid;
1339
+ gap: 12px;
1340
+ padding: 14px;
1341
+ border: 1px solid color-mix(in srgb, var(--as-brand) 24%, var(--as-border));
1342
+ border-radius: var(--as-radius-md);
1343
+ background: color-mix(in srgb, var(--as-brand-soft) 42%, var(--as-surface));
1344
+ color: var(--as-text);
1345
+ }
1346
+ .human-input-card__heading {
1347
+ display: grid;
1348
+ gap: 4px;
1349
+ }
1350
+ .human-input-card__heading strong {
1351
+ font-size: 13px;
1352
+ font-weight: 700;
1353
+ }
1354
+ .human-input-card__heading p {
1355
+ margin: 0;
1356
+ color: var(--as-text-muted);
1357
+ font-size: 13px;
1358
+ line-height: 1.45;
1359
+ }
1360
+ .human-input-card__unavailable {
1361
+ margin: 0;
1362
+ color: var(--as-text-muted);
1363
+ font-size: 12px;
1364
+ }
1365
+ .human-input-card__options {
1366
+ display: flex;
1367
+ flex-wrap: wrap;
1368
+ gap: 8px;
1369
+ }
1370
+ .human-input-card__option {
1371
+ appearance: none;
1372
+ display: grid;
1373
+ gap: 2px;
1374
+ min-height: 36px;
1375
+ padding: 8px 12px;
1376
+ border: 1px solid var(--as-control-border);
1377
+ border-radius: 10px;
1378
+ background: var(--as-surface);
1379
+ color: var(--as-text);
1380
+ cursor: pointer;
1381
+ font: inherit;
1382
+ text-align: left;
1383
+ }
1384
+ .human-input-card__option--primary {
1385
+ border-color: var(--as-brand);
1386
+ background: var(--as-brand);
1387
+ color: var(--as-visitor-text);
1388
+ }
1389
+ .human-input-card__option--danger {
1390
+ color: var(--as-danger);
1391
+ }
1392
+ .human-input-card__option small {
1393
+ max-width: 34ch;
1394
+ color: inherit;
1395
+ font-size: 11px;
1396
+ opacity: 0.8;
1397
+ }
1398
+ .human-input-card__option:hover:not(:disabled) {
1399
+ border-color: var(--as-brand);
1400
+ }
1401
+ .human-input-card__option:focus-visible,
1402
+ .human-input-card form input:focus-visible,
1403
+ .human-input-card form button:focus-visible {
1404
+ outline: 2px solid var(--as-brand);
1405
+ outline-offset: 2px;
1406
+ }
1407
+ .human-input-card__option:disabled,
1408
+ .human-input-card form button:disabled,
1409
+ .human-input-card form input:disabled {
1410
+ cursor: default;
1411
+ opacity: 0.5;
1412
+ }
1413
+ .human-input-card form {
1414
+ display: grid;
1415
+ gap: 6px;
1416
+ }
1417
+ .human-input-card form label {
1418
+ font-size: 12px;
1419
+ font-weight: 650;
1420
+ }
1421
+ .human-input-card form div {
1422
+ display: flex;
1423
+ gap: 8px;
1424
+ }
1425
+ .human-input-card form input {
1426
+ min-width: 0;
1427
+ min-height: 38px;
1428
+ flex: 1 1 auto;
1429
+ padding: 8px 10px;
1430
+ border: 1px solid var(--as-control-border);
1431
+ border-radius: 10px;
1432
+ background: var(--as-surface);
1433
+ color: var(--as-text);
1434
+ font: inherit;
1435
+ }
1436
+ .human-input-card form button {
1437
+ min-height: 38px;
1438
+ padding: 8px 12px;
1439
+ border: 0;
1440
+ border-radius: 10px;
1441
+ background: var(--as-brand);
1442
+ color: var(--as-visitor-text);
1443
+ cursor: pointer;
1444
+ font: inherit;
1445
+ font-weight: 650;
1446
+ }
1447
+
1448
+ /* src/react/components/ToolResultCard/ToolResultCard.css */
1449
+ .tool-result-card {
1450
+ display: grid;
1451
+ width: 100%;
1452
+ gap: 8px;
1453
+ padding: 12px;
1454
+ border: 1px solid var(--as-border);
1455
+ border-radius: var(--as-radius-md);
1456
+ background: var(--as-surface);
1457
+ color: var(--as-text);
1458
+ font-size: 12px;
1459
+ }
1460
+ .tool-result-card__heading {
1461
+ display: flex;
1462
+ align-items: center;
1463
+ gap: 8px;
1464
+ }
1465
+ .tool-result-card__heading strong {
1466
+ font-size: 13px;
1467
+ font-weight: 650;
1468
+ }
1469
+ .tool-result-card__status {
1470
+ width: 8px;
1471
+ height: 8px;
1472
+ flex: 0 0 auto;
1473
+ border-radius: 50%;
1474
+ background: var(--as-success);
1475
+ }
1476
+ .tool-result-card--failed .tool-result-card__status,
1477
+ .tool-result-card--rejected .tool-result-card__status {
1478
+ background: var(--as-danger);
1479
+ }
1480
+ .tool-result-card p {
1481
+ margin: 0;
1482
+ color: var(--as-text-muted);
1483
+ line-height: 1.45;
1484
+ }
1485
+ .tool-result-card dl {
1486
+ display: grid;
1487
+ gap: 6px;
1488
+ margin: 0;
1489
+ }
1490
+ .tool-result-card dl div {
1491
+ display: grid;
1492
+ grid-template-columns: minmax(80px, 0.45fr) minmax(0, 1fr);
1493
+ gap: 10px;
1494
+ }
1495
+ .tool-result-card dt {
1496
+ color: var(--as-text-muted);
1497
+ }
1498
+ .tool-result-card dd {
1499
+ min-width: 0;
1500
+ margin: 0;
1501
+ overflow-wrap: anywhere;
1502
+ }
1503
+ .tool-result-card__links {
1504
+ display: flex;
1505
+ flex-wrap: wrap;
1506
+ gap: 8px;
1507
+ }
1508
+ .tool-result-card__links a {
1509
+ color: var(--as-brand);
1510
+ font-weight: 650;
1511
+ text-underline-offset: 2px;
1512
+ }
1513
+ .tool-result-card__links a:focus-visible {
1514
+ outline: 2px solid var(--as-brand);
1515
+ outline-offset: 2px;
1516
+ }
1517
+
1518
+ /* src/react/components/CollectionResultCard/CollectionResultCard.css */
1519
+ .collection-result-card__list {
1520
+ display: grid;
1521
+ gap: 10px;
1522
+ margin: 0;
1523
+ padding: 0;
1524
+ list-style: none;
1525
+ }
1526
+ .collection-result-card__list li {
1527
+ display: grid;
1528
+ gap: 6px;
1529
+ padding-top: 8px;
1530
+ border-top: 1px solid var(--as-border);
1531
+ }
1532
+ .collection-result-card__list li:first-child {
1533
+ padding-top: 0;
1534
+ border-top: 0;
1535
+ }
1536
+ .collection-result-card__item-title {
1537
+ font-size: 13px;
1538
+ font-weight: 650;
1539
+ }
1540
+ .collection-result-card__empty {
1541
+ margin: 0;
1542
+ color: var(--as-text-muted);
1543
+ }
1544
+ .collection-result-card__list a {
1545
+ color: var(--as-brand);
1546
+ font-weight: 650;
1547
+ text-underline-offset: 2px;
1548
+ }
1549
+
1550
+ /* src/react/components/EntityResultCard/EntityResultCard.css */
1551
+ .entity-result-card {
1552
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.04);
1553
+ }
1554
+ @media (prefers-reduced-motion: reduce) {
1555
+ .entity-result-card {
1556
+ transition: none;
1557
+ }
1558
+ }
1559
+
1560
+ /* src/react/components/SignatureResultCard/SignatureResultCard.css */
1561
+ .signature-result-card__badge {
1562
+ display: inline-flex;
1563
+ width: fit-content;
1564
+ align-items: center;
1565
+ padding: 2px 8px;
1566
+ border-radius: 999px;
1567
+ background: var(--as-surface-muted, rgb(255 255 255 / 0.06));
1568
+ color: var(--as-text-muted);
1569
+ font-size: 11px;
1570
+ font-weight: 600;
1571
+ letter-spacing: 0.02em;
1572
+ text-transform: capitalize;
1573
+ }
1574
+ .signature-result-card__cta {
1575
+ display: inline-flex;
1576
+ width: fit-content;
1577
+ align-items: center;
1578
+ justify-content: center;
1579
+ padding: 8px 12px;
1580
+ border-radius: var(--as-radius-md);
1581
+ background: var(--as-brand);
1582
+ color: #fff;
1583
+ font-size: 12px;
1584
+ font-weight: 650;
1585
+ text-decoration: none;
1586
+ }
1587
+ .signature-result-card__cta:focus-visible {
1588
+ outline: 2px solid var(--as-brand);
1589
+ outline-offset: 2px;
1590
+ }
1591
+ @media (prefers-reduced-motion: reduce) {
1592
+ .signature-result-card__cta {
1593
+ transition: none;
1594
+ }
1595
+ }
1596
+
986
1597
  /* src/react/components/AgentRail/AgentRail.css */
987
1598
  .agent-rail {
988
1599
  --rail-width: var(--as-rail-max-width);
@@ -1003,6 +1614,10 @@ html.webless-agent-page-shift {
1003
1614
  box-shadow: var(--as-shadow-rail);
1004
1615
  color: var(--as-text);
1005
1616
  font-family: var(--as-font-body);
1617
+ text-decoration: none;
1618
+ }
1619
+ .agent-rail :where(p, span, strong, button, label) {
1620
+ text-decoration: none;
1006
1621
  }
1007
1622
  .agent-rail:focus {
1008
1623
  outline: none;
@@ -1151,6 +1766,12 @@ html.webless-agent-page-shift {
1151
1766
  margin: 0 auto;
1152
1767
  padding: 24px 20px 32px;
1153
1768
  }
1769
+ .agent-rail__turn-block {
1770
+ display: flex;
1771
+ flex-direction: column;
1772
+ align-items: stretch;
1773
+ gap: 10px;
1774
+ }
1154
1775
  .agent-rail__welcome {
1155
1776
  display: flex;
1156
1777
  flex-direction: column;
@@ -1507,9 +2128,8 @@ html.webless-agent-page-shift {
1507
2128
  }
1508
2129
  .assist-edge-tab--bottom {
1509
2130
  left: var(--tab-along);
1510
- bottom: var(--tab-inset);
1511
- border-bottom: none;
1512
- border-radius: 999px 999px 0 0;
2131
+ bottom: max(calc(var(--tab-inset) + 24px), env(safe-area-inset-bottom));
2132
+ border-radius: 999px;
1513
2133
  transform: translateX(-50%) translateY(calc(100% + 18px));
1514
2134
  }
1515
2135
  .assist-edge-tab--bottom.is-visible {
@@ -1518,6 +2138,23 @@ html.webless-agent-page-shift {
1518
2138
  .assist-edge-tab--bottom.is-visible:hover {
1519
2139
  transform: translateX(-50%) translateY(-2px);
1520
2140
  }
2141
+ .assist-edge-tab--bottom.assist-edge-tab--align-start {
2142
+ left: max(calc(var(--tab-inset) + 24px), env(safe-area-inset-left));
2143
+ transform: translateY(calc(100% + 42px));
2144
+ }
2145
+ .assist-edge-tab--bottom.assist-edge-tab--align-end {
2146
+ right: max(calc(var(--tab-inset) + 24px), env(safe-area-inset-right));
2147
+ left: auto;
2148
+ transform: translateY(calc(100% + 42px));
2149
+ }
2150
+ .assist-edge-tab--bottom.assist-edge-tab--align-start.is-visible,
2151
+ .assist-edge-tab--bottom.assist-edge-tab--align-end.is-visible {
2152
+ transform: translateY(0);
2153
+ }
2154
+ .assist-edge-tab--bottom.assist-edge-tab--align-start.is-visible:hover,
2155
+ .assist-edge-tab--bottom.assist-edge-tab--align-end.is-visible:hover {
2156
+ transform: translateY(-2px);
2157
+ }
1521
2158
  .assist-edge-tab--outline {
1522
2159
  --tab-fill: color-mix(in srgb, var(--as-surface) 96%, var(--as-text) 4%);
1523
2160
  --tab-line: color-mix(in srgb, var(--as-brand) 42%, var(--as-border));