@webless/agent 0.6.2 → 0.6.4

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