@eshal-bot/chat-widget 0.2.48 → 0.2.50

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.
@@ -7803,7 +7803,7 @@
7803
7803
  m$1.hydrateRoot;
7804
7804
  }
7805
7805
 
7806
- var css_248z$1 = "*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.chat-widget-root{--cw-primary:#1d4ed8;--cw-primary-hover:#1e40af;--cw-status-success:160 84% 39%;--cw-status-success-bg:152 81% 96%;--cw-status-warning:35 100% 50%;--cw-status-warning-bg:34 100% 95%;--cw-status-error:350 89% 60%;--cw-status-error-bg:356 100% 97%;--cw-status-info:199 89% 48%;--cw-status-info-bg:204 100% 97%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.chat-widget-root.dark{--cw-status-success:158 64% 52%;--cw-status-success-bg:152 36% 14%;--cw-status-warning:38 92% 60%;--cw-status-warning-bg:36 33% 14%;--cw-status-error:350 89% 65%;--cw-status-error-bg:356 33% 16%;--cw-status-info:199 89% 58%;--cw-status-info-bg:204 33% 14%}.\\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\\!container{max-width:1536px!important}.container{max-width:1536px}}#chat-widget-root .chat-widget-root *{box-sizing:border-box;margin:0;padding:0}#chat-widget-root .chat-messages::-webkit-scrollbar{width:6px}#chat-widget-root .chat-messages::-webkit-scrollbar-track{background:transparent}#chat-widget-root .chat-messages::-webkit-scrollbar-thumb{background:rgba(156,163,175,.5);border-radius:10px}#chat-widget-root .chat-messages::-webkit-scrollbar-thumb:hover{background:rgba(156,163,175,.7)}#chat-widget-root .dark .chat-messages::-webkit-scrollbar-thumb{background:rgba(75,85,99,.5)}#chat-widget-root .dark .chat-messages::-webkit-scrollbar-thumb:hover{background:rgba(75,85,99,.7)}#chat-widget-root .sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}#chat-widget-root .pointer-events-none{pointer-events:none}#chat-widget-root .visible{visibility:visible}#chat-widget-root .invisible{visibility:hidden}#chat-widget-root .collapse{visibility:collapse}#chat-widget-root .static{position:static}#chat-widget-root .fixed{position:fixed}#chat-widget-root .absolute{position:absolute}#chat-widget-root .relative{position:relative}#chat-widget-root .sticky{position:sticky}#chat-widget-root .inset-0{inset:0}#chat-widget-root .-top-8{top:-2rem}#chat-widget-root .bottom-0{bottom:0}#chat-widget-root .bottom-5{bottom:1.25rem}#chat-widget-root .bottom-full{bottom:100%}#chat-widget-root .left-0{left:0}#chat-widget-root .left-1\\/2{left:50%}#chat-widget-root .left-5{left:1.25rem}#chat-widget-root .right-0{right:0}#chat-widget-root .right-5{right:1.25rem}#chat-widget-root .top-0{top:0}#chat-widget-root .top-1\\/2{top:50%}#chat-widget-root .top-5{top:1.25rem}#chat-widget-root .top-full{top:100%}#chat-widget-root .isolate{isolation:isolate}#chat-widget-root .z-10{z-index:10}#chat-widget-root .z-50{z-index:50}#chat-widget-root .z-\\[60\\]{z-index:60}#chat-widget-root .z-\\[70\\]{z-index:70}#chat-widget-root .z-\\[71\\]{z-index:71}#chat-widget-root .z-\\[999999\\]{z-index:999999}#chat-widget-root .z-\\[9999\\]{z-index:9999}#chat-widget-root .m-0{margin:0}#chat-widget-root .mx-2{margin-left:.5rem;margin-right:.5rem}#chat-widget-root .mx-3{margin-left:.75rem;margin-right:.75rem}#chat-widget-root .my-3{margin-bottom:.75rem;margin-top:.75rem}#chat-widget-root .my-4{margin-bottom:1rem;margin-top:1rem}#chat-widget-root .-mb-px{margin-bottom:-1px}#chat-widget-root .mb-1{margin-bottom:.25rem}#chat-widget-root .mb-1\\.5{margin-bottom:.375rem}#chat-widget-root .mb-2{margin-bottom:.5rem}#chat-widget-root .mb-3{margin-bottom:.75rem}#chat-widget-root .mb-4{margin-bottom:1rem}#chat-widget-root .mb-5{margin-bottom:1.25rem}#chat-widget-root .ml-1{margin-left:.25rem}#chat-widget-root .ms-0\\.5{margin-inline-start:.125rem}#chat-widget-root .mt-0\\.5{margin-top:.125rem}#chat-widget-root .mt-1{margin-top:.25rem}#chat-widget-root .mt-1\\.5{margin-top:.375rem}#chat-widget-root .mt-2{margin-top:.5rem}#chat-widget-root .mt-3{margin-top:.75rem}#chat-widget-root .mt-4{margin-top:1rem}#chat-widget-root .block{display:block}#chat-widget-root .inline-block{display:inline-block}#chat-widget-root .inline{display:inline}#chat-widget-root .flex{display:flex}#chat-widget-root .inline-flex{display:inline-flex}#chat-widget-root .table{display:table}#chat-widget-root .grid{display:grid}#chat-widget-root .hidden{display:none}#chat-widget-root .h-1\\.5{height:.375rem}#chat-widget-root .h-10{height:2.5rem}#chat-widget-root .h-11{height:2.75rem}#chat-widget-root .h-12{height:3rem}#chat-widget-root .h-16{height:4rem}#chat-widget-root .h-2{height:.5rem}#chat-widget-root .h-3{height:.75rem}#chat-widget-root .h-3\\.5{height:.875rem}#chat-widget-root .h-4{height:1rem}#chat-widget-root .h-5{height:1.25rem}#chat-widget-root .h-6{height:1.5rem}#chat-widget-root .h-7{height:1.75rem}#chat-widget-root .h-8{height:2rem}#chat-widget-root .h-\\[650px\\]{height:650px}#chat-widget-root .h-auto{height:auto}#chat-widget-root .h-full{height:100%}#chat-widget-root .h-px{height:1px}#chat-widget-root .max-h-\\[85vh\\]{max-height:85vh}#chat-widget-root .min-h-0{min-height:0}#chat-widget-root .min-h-\\[48px\\]{min-height:48px}#chat-widget-root .w-1\\.5{width:.375rem}#chat-widget-root .w-10{width:2.5rem}#chat-widget-root .w-11{width:2.75rem}#chat-widget-root .w-12{width:3rem}#chat-widget-root .w-16{width:4rem}#chat-widget-root .w-2{width:.5rem}#chat-widget-root .w-3{width:.75rem}#chat-widget-root .w-3\\.5{width:.875rem}#chat-widget-root .w-4{width:1rem}#chat-widget-root .w-44{width:11rem}#chat-widget-root .w-5{width:1.25rem}#chat-widget-root .w-6{width:1.5rem}#chat-widget-root .w-7{width:1.75rem}#chat-widget-root .w-8{width:2rem}#chat-widget-root .w-80{width:20rem}#chat-widget-root .w-96{width:24rem}#chat-widget-root .w-\\[380px\\]{width:380px}#chat-widget-root .w-full{width:100%}#chat-widget-root .min-w-0{min-width:0}#chat-widget-root .min-w-\\[60px\\]{min-width:60px}#chat-widget-root .min-w-full{min-width:100%}#chat-widget-root .max-w-\\[75\\%\\]{max-width:75%}#chat-widget-root .max-w-\\[92vw\\]{max-width:92vw}#chat-widget-root .max-w-full{max-width:100%}#chat-widget-root .max-w-none{max-width:none}#chat-widget-root .max-w-sm{max-width:24rem}#chat-widget-root .max-w-xs{max-width:20rem}#chat-widget-root .flex-1{flex:1 1 0%}#chat-widget-root .flex-shrink-0,#chat-widget-root .shrink-0{flex-shrink:0}#chat-widget-root .grow{flex-grow:1}#chat-widget-root .border-collapse{border-collapse:collapse}#chat-widget-root .-translate-x-1\\/2{--tw-translate-x:-50%}#chat-widget-root .-translate-x-1\\/2,#chat-widget-root .-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .-translate-y-1\\/2{--tw-translate-y:-50%}#chat-widget-root .-rotate-90{--tw-rotate:-90deg}#chat-widget-root .-rotate-90,#chat-widget-root .rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .rotate-180{--tw-rotate:180deg}#chat-widget-root .rotate-90{--tw-rotate:90deg}#chat-widget-root .rotate-90,#chat-widget-root .scale-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .scale-0{--tw-scale-x:0;--tw-scale-y:0}#chat-widget-root .scale-100{--tw-scale-x:1;--tw-scale-y:1}#chat-widget-root .scale-100,#chat-widget-root .scale-110{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}#chat-widget-root .scale-125{--tw-scale-x:1.25;--tw-scale-y:1.25}#chat-widget-root .scale-125,#chat-widget-root .scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .scale-95{--tw-scale-x:.95;--tw-scale-y:.95}#chat-widget-root .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}#chat-widget-root .animate-bounce{animation:bounce 1s infinite}@keyframes pulse{50%{opacity:.5}}#chat-widget-root .animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}#chat-widget-root .animate-spin{animation:spin 1s linear infinite}#chat-widget-root .cursor-ew-resize{cursor:ew-resize}#chat-widget-root .cursor-nesw-resize{cursor:nesw-resize}#chat-widget-root .cursor-not-allowed{cursor:not-allowed}#chat-widget-root .cursor-ns-resize{cursor:ns-resize}#chat-widget-root .cursor-nwse-resize{cursor:nwse-resize}#chat-widget-root .cursor-pointer{cursor:pointer}#chat-widget-root .resize-none{resize:none}#chat-widget-root .resize{resize:both}#chat-widget-root .list-decimal{list-style-type:decimal}#chat-widget-root .list-disc{list-style-type:disc}#chat-widget-root .list-none{list-style-type:none}#chat-widget-root .flex-row{flex-direction:row}#chat-widget-root .flex-row-reverse{flex-direction:row-reverse}#chat-widget-root .flex-col{flex-direction:column}#chat-widget-root .flex-wrap{flex-wrap:wrap}#chat-widget-root .items-start{align-items:flex-start}#chat-widget-root .items-end{align-items:flex-end}#chat-widget-root .items-center{align-items:center}#chat-widget-root .justify-start{justify-content:flex-start}#chat-widget-root .justify-end{justify-content:flex-end}#chat-widget-root .justify-center{justify-content:center}#chat-widget-root .justify-between{justify-content:space-between}#chat-widget-root .gap-0{gap:0}#chat-widget-root .gap-0\\.5{gap:.125rem}#chat-widget-root .gap-1{gap:.25rem}#chat-widget-root .gap-1\\.5{gap:.375rem}#chat-widget-root .gap-2{gap:.5rem}#chat-widget-root .gap-2\\.5{gap:.625rem}#chat-widget-root .gap-3{gap:.75rem}#chat-widget-root .gap-4{gap:1rem}#chat-widget-root .gap-6{gap:1.5rem}#chat-widget-root :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}#chat-widget-root :is(.space-y-4>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}#chat-widget-root .overflow-hidden{overflow:hidden}#chat-widget-root .overflow-visible{overflow:visible}#chat-widget-root .overflow-x-auto{overflow-x:auto}#chat-widget-root .overflow-y-auto{overflow-y:auto}#chat-widget-root .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#chat-widget-root .whitespace-nowrap{white-space:nowrap}#chat-widget-root .whitespace-pre-wrap{white-space:pre-wrap}#chat-widget-root .break-words{overflow-wrap:break-word}#chat-widget-root .break-all{word-break:break-all}#chat-widget-root .rounded{border-radius:.25rem}#chat-widget-root .rounded-2xl{border-radius:1rem}#chat-widget-root .rounded-3xl{border-radius:1.5rem}#chat-widget-root .rounded-full{border-radius:9999px}#chat-widget-root .rounded-lg{border-radius:.5rem}#chat-widget-root .rounded-md{border-radius:.375rem}#chat-widget-root .rounded-xl{border-radius:.75rem}#chat-widget-root .rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}#chat-widget-root .rounded-tl-sm{border-top-left-radius:.125rem}#chat-widget-root .rounded-tr-sm{border-top-right-radius:.125rem}#chat-widget-root .border{border-width:1px}#chat-widget-root .border-0{border-width:0}#chat-widget-root .border-b{border-bottom-width:1px}#chat-widget-root .border-l-4{border-left-width:4px}#chat-widget-root .border-t{border-top-width:1px}#chat-widget-root .border-t-2{border-top-width:2px}#chat-widget-root .border-dotted{border-style:dotted}#chat-widget-root .border-none{border-style:none}#chat-widget-root .\\!border-status-error{border-color:hsl(var(--cw-status-error))!important}#chat-widget-root .border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}#chat-widget-root .border-amber-700\\/50{border-color:rgba(180,83,9,.5)}#chat-widget-root .border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}#chat-widget-root .border-blue-700\\/50{border-color:rgba(29,78,216,.5)}#chat-widget-root .border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-200\\/60{border-color:rgba(229,231,235,.6)}#chat-widget-root .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-700\\/50{border-color:rgba(55,65,81,.5)}#chat-widget-root .border-transparent{border-color:transparent}#chat-widget-root .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}#chat-widget-root .bg-amber-900\\/40{background-color:rgba(120,53,15,.4)}#chat-widget-root .bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}#chat-widget-root .bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}#chat-widget-root .bg-blue-900\\/30{background-color:rgba(30,58,138,.3)}#chat-widget-root .bg-current{background-color:currentColor}#chat-widget-root .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-50\\/30{background-color:rgba(249,250,251,.3)}#chat-widget-root .bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-700\\/50{background-color:rgba(55,65,81,.5)}#chat-widget-root .bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-800\\/50{background-color:rgba(31,41,55,.5)}#chat-widget-root .bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}#chat-widget-root .bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity,1))}#chat-widget-root .bg-orange-200{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity,1))}#chat-widget-root .bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity,1))}#chat-widget-root .bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}#chat-widget-root .bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}#chat-widget-root .bg-slate-50\\/50{background-color:rgba(248,250,252,.5)}#chat-widget-root .bg-slate-800\\/50{background-color:rgba(30,41,59,.5)}#chat-widget-root .bg-transparent{background-color:transparent}#chat-widget-root .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}#chat-widget-root .bg-white\\/10{background-color:hsla(0,0%,100%,.1)}#chat-widget-root .bg-white\\/20{background-color:hsla(0,0%,100%,.2)}#chat-widget-root .bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}#chat-widget-root .bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}#chat-widget-root .from-gray-50\\/50{--tw-gradient-from:rgba(249,250,251,.5) var(--tw-gradient-from-position);--tw-gradient-to:rgba(249,250,251,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .from-white\\/0{--tw-gradient-from:hsla(0,0%,100%,0) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .from-white\\/10{--tw-gradient-from:hsla(0,0%,100%,.1) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .from-yellow-200{--tw-gradient-from:#fef08a var(--tw-gradient-from-position);--tw-gradient-to:hsla(53,98%,77%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .via-white\\/5{--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),hsla(0,0%,100%,.05) var(--tw-gradient-via-position),var(--tw-gradient-to)}#chat-widget-root .to-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}#chat-widget-root .to-white\\/10{--tw-gradient-to:hsla(0,0%,100%,.1) var(--tw-gradient-to-position)}#chat-widget-root .to-yellow-400{--tw-gradient-to:#facc15 var(--tw-gradient-to-position)}#chat-widget-root .object-contain{-o-object-fit:contain;object-fit:contain}#chat-widget-root .p-0{padding:0}#chat-widget-root .p-0\\.5{padding:.125rem}#chat-widget-root .p-3{padding:.75rem}#chat-widget-root .p-5{padding:1.25rem}#chat-widget-root .p-6{padding:1.5rem}#chat-widget-root .p-8{padding:2rem}#chat-widget-root .px-1{padding-left:.25rem;padding-right:.25rem}#chat-widget-root .px-2{padding-left:.5rem;padding-right:.5rem}#chat-widget-root .px-2\\.5{padding-left:.625rem;padding-right:.625rem}#chat-widget-root .px-3{padding-left:.75rem;padding-right:.75rem}#chat-widget-root .px-4{padding-left:1rem;padding-right:1rem}#chat-widget-root .px-5{padding-left:1.25rem;padding-right:1.25rem}#chat-widget-root .py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}#chat-widget-root .py-1{padding-bottom:.25rem;padding-top:.25rem}#chat-widget-root .py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}#chat-widget-root .py-12{padding-bottom:3rem;padding-top:3rem}#chat-widget-root .py-2{padding-bottom:.5rem;padding-top:.5rem}#chat-widget-root .py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}#chat-widget-root .py-3{padding-bottom:.75rem;padding-top:.75rem}#chat-widget-root .py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}#chat-widget-root .py-4{padding-bottom:1rem;padding-top:1rem}#chat-widget-root .pb-1{padding-bottom:.25rem}#chat-widget-root .pb-2{padding-bottom:.5rem}#chat-widget-root .pl-1{padding-left:.25rem}#chat-widget-root .pl-2{padding-left:.5rem}#chat-widget-root .pl-4{padding-left:1rem}#chat-widget-root .pl-\\[50px\\]{padding-left:50px}#chat-widget-root .pr-1{padding-right:.25rem}#chat-widget-root .pt-1{padding-top:.25rem}#chat-widget-root .pt-4{padding-top:1rem}#chat-widget-root .text-left{text-align:left}#chat-widget-root .text-center{text-align:center}#chat-widget-root .text-right{text-align:right}#chat-widget-root .text-start{text-align:start}#chat-widget-root .align-text-bottom{vertical-align:text-bottom}#chat-widget-root .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}#chat-widget-root .text-2xl{font-size:1.5rem;line-height:2rem}#chat-widget-root .text-\\[10px\\]{font-size:10px}#chat-widget-root .text-base{font-size:1rem;line-height:1.5rem}#chat-widget-root .text-chip{font-size:11px;letter-spacing:0;line-height:1.4}#chat-widget-root .text-h4{font-size:18px;letter-spacing:0;line-height:1.3}#chat-widget-root .text-lg{font-size:1.125rem;line-height:1.75rem}#chat-widget-root .text-sm{font-size:.875rem;line-height:1.25rem}#chat-widget-root .text-xl{font-size:1.25rem;line-height:1.75rem}#chat-widget-root .text-xs{font-size:.75rem;line-height:1rem}#chat-widget-root .font-bold{font-weight:700}#chat-widget-root .font-medium{font-weight:500}#chat-widget-root .font-semibold{font-weight:600}#chat-widget-root .uppercase{text-transform:uppercase}#chat-widget-root .lowercase{text-transform:lowercase}#chat-widget-root .italic{font-style:italic}#chat-widget-root .tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}#chat-widget-root .leading-5{line-height:1.25rem}#chat-widget-root .leading-none{line-height:1}#chat-widget-root .leading-normal{line-height:1.5}#chat-widget-root .leading-relaxed{line-height:1.625}#chat-widget-root .leading-snug{line-height:1.375}#chat-widget-root .tracking-wide{letter-spacing:.025em}#chat-widget-root .text-\\[\\#4A5568\\]{--tw-text-opacity:1;color:rgb(74 85 104/var(--tw-text-opacity,1))}#chat-widget-root .text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}#chat-widget-root .text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}#chat-widget-root .text-current{color:currentColor}#chat-widget-root .text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-500\\/80{color:hsla(220,9%,46%,.8)}#chat-widget-root .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}#chat-widget-root .text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}#chat-widget-root .text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}#chat-widget-root .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}#chat-widget-root .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}#chat-widget-root .text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}#chat-widget-root .text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}#chat-widget-root .text-status-error{color:hsl(var(--cw-status-error))}#chat-widget-root .text-status-success{color:hsl(var(--cw-status-success))}#chat-widget-root .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}#chat-widget-root .text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}#chat-widget-root .underline{text-decoration-line:underline}#chat-widget-root .no-underline{text-decoration-line:none}#chat-widget-root .placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}#chat-widget-root .placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}#chat-widget-root .placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}#chat-widget-root .placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}#chat-widget-root .opacity-0{opacity:0}#chat-widget-root .opacity-50{opacity:.5}#chat-widget-root .opacity-60{opacity:.6}#chat-widget-root .opacity-70{opacity:.7}#chat-widget-root .opacity-75{opacity:.75}#chat-widget-root .opacity-80{opacity:.8}#chat-widget-root .opacity-90{opacity:.9}#chat-widget-root .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}#chat-widget-root .shadow,#chat-widget-root .shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}#chat-widget-root .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}#chat-widget-root .shadow-lg,#chat-widget-root .shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}#chat-widget-root .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}#chat-widget-root .shadow-sm,#chat-widget-root .shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}#chat-widget-root .shadow-black\\/20{--tw-shadow-color:rgba(0,0,0,.2);--tw-shadow:var(--tw-shadow-colored)}#chat-widget-root .shadow-gray-200\\/80{--tw-shadow-color:rgba(229,231,235,.8);--tw-shadow:var(--tw-shadow-colored)}#chat-widget-root .outline-none{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .outline{outline-style:solid}#chat-widget-root .ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .ring,#chat-widget-root .ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .ring-blue-100{--tw-ring-opacity:1;--tw-ring-color:rgb(219 234 254/var(--tw-ring-opacity,1))}#chat-widget-root .ring-blue-300{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity,1))}#chat-widget-root .ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity,1))}#chat-widget-root .blur{--tw-blur:blur(8px)}#chat-widget-root .blur,#chat-widget-root .drop-shadow{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgba(0,0,0,.1)) drop-shadow(0 1px 1px rgba(0,0,0,.06))}#chat-widget-root .drop-shadow-md{--tw-drop-shadow:drop-shadow(0 4px 3px rgba(0,0,0,.07)) drop-shadow(0 2px 2px rgba(0,0,0,.06))}#chat-widget-root .drop-shadow-md,#chat-widget-root .drop-shadow-sm{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .drop-shadow-sm{--tw-drop-shadow:drop-shadow(0 1px 1px rgba(0,0,0,.05))}#chat-widget-root .grayscale-\\[0\\.3\\]{--tw-grayscale:grayscale(0.3)}#chat-widget-root .filter,#chat-widget-root .grayscale-\\[0\\.3\\]{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .backdrop-blur-sm{--tw-backdrop-blur:blur(4px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}#chat-widget-root .transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .duration-150{transition-duration:.15s}#chat-widget-root .duration-200{transition-duration:.2s}#chat-widget-root .duration-300{transition-duration:.3s}#chat-widget-root .duration-500{transition-duration:.5s}#chat-widget-root :is(#chat-widget-root .animate-in){animation:slideIn .3s ease-out}#chat-widget-root :is(#chat-widget-root .transition-all){transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .\\[font-family\\:inherit\\]{font-family:inherit}#chat-widget-root .placeholder\\:text-\\[\\#A2A9B2\\]::-moz-placeholder{--tw-text-opacity:1;color:rgb(162 169 178/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-\\[\\#A2A9B2\\]::placeholder{--tw-text-opacity:1;color:rgb(162 169 178/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05}#chat-widget-root .hover\\:scale-105:hover,#chat-widget-root .hover\\:scale-110:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .hover\\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1}#chat-widget-root .hover\\:scale-\\[1\\.02\\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .hover\\:border-blue-400:hover{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}#chat-widget-root .hover\\:border-blue-600:hover{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}#chat-widget-root .hover\\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-blue-500\\/20:hover{background-color:rgba(59,130,246,.2)}#chat-widget-root .hover\\:bg-blue-900\\/50:hover{background-color:rgba(30,58,138,.5)}#chat-widget-root .hover\\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-transparent:hover{background-color:transparent}#chat-widget-root .hover\\:text-blue-500:hover{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:underline:hover{text-decoration-line:underline}#chat-widget-root .hover\\:opacity-80:hover{opacity:.8}#chat-widget-root .hover\\:opacity-90:hover{opacity:.9}#chat-widget-root .hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}#chat-widget-root .hover\\:shadow-md:hover,#chat-widget-root .hover\\:shadow-xl:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .hover\\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}#chat-widget-root .hover\\:grayscale-0:hover{--tw-grayscale:grayscale(0);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .focus\\:\\!border-status-error:focus{border-color:hsl(var(--cw-status-error))!important}#chat-widget-root .focus\\:border-\\[\\#5A6069\\]:focus{--tw-border-opacity:1;border-color:rgb(90 96 105/var(--tw-border-opacity,1))}#chat-widget-root .focus\\:border-\\[\\#B0B0B0\\]:focus{--tw-border-opacity:1;border-color:rgb(176 176 176/var(--tw-border-opacity,1))}#chat-widget-root .focus\\:bg-white:focus{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}#chat-widget-root .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .focus\\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .focus\\:ring-0:focus,#chat-widget-root .focus\\:ring-1:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .focus\\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .focus\\:ring-gray-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity,1))}#chat-widget-root .focus\\:ring-gray-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity,1))}#chat-widget-root .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .focus-visible\\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .focus-visible\\:ring-blue-700:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(29 78 216/var(--tw-ring-opacity,1))}#chat-widget-root .focus-visible\\:ring-white\\/40:focus-visible{--tw-ring-color:hsla(0,0%,100%,.4)}#chat-widget-root .active\\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95}#chat-widget-root .active\\:scale-95:active,#chat-widget-root .active\\:scale-\\[0\\.97\\]:active{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .active\\:scale-\\[0\\.97\\]:active{--tw-scale-x:0.97;--tw-scale-y:0.97}#chat-widget-root .active\\:scale-\\[0\\.98\\]:active{--tw-scale-x:0.98;--tw-scale-y:0.98}#chat-widget-root .active\\:scale-\\[0\\.98\\]:active,#chat-widget-root .active\\:scale-\\[0\\.99\\]:active{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .active\\:scale-\\[0\\.99\\]:active{--tw-scale-x:0.99;--tw-scale-y:0.99}#chat-widget-root .active\\:outline-none:active{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .active\\:ring-0:active{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}#chat-widget-root .disabled\\:opacity-40:disabled{opacity:.4}#chat-widget-root .disabled\\:opacity-50:disabled{opacity:.5}#chat-widget-root .disabled\\:shadow-none:disabled{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root :is(.group:hover .group-hover\\:scale-100){--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root :is(.group:hover .group-hover\\:opacity-100){opacity:1}#chat-widget-root .dark\\:text-gray-300:is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}#chat-widget-root .dark\\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}@media (min-width:768px){#chat-widget-root .md\\:text-sm{font-size:.875rem;line-height:1.25rem}}#chat-widget-root .rtl\\:rounded-tl-2xl:where([dir=rtl],[dir=rtl] *){border-top-left-radius:1rem}#chat-widget-root .rtl\\:rounded-tr-sm:where([dir=rtl],[dir=rtl] *){border-top-right-radius:.125rem}#chat-widget-root .\\[\\&\\:first-child\\]\\:\\!mt-0:first-child{margin-top:0!important}#chat-widget-root :is(.\\[\\&\\>\\*\\:first-child\\]\\:\\!mt-0>:first-child){margin-top:0!important}#chat-widget-root :is(.\\[\\&\\>\\*\\:last-child\\]\\:\\!mb-0>:last-child){margin-bottom:0!important}";
7806
+ var css_248z$1 = "*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.chat-widget-root{--cw-primary:#1d4ed8;--cw-primary-hover:#1e40af;--cw-status-success:160 84% 39%;--cw-status-success-bg:152 81% 96%;--cw-status-warning:35 100% 50%;--cw-status-warning-bg:34 100% 95%;--cw-status-error:350 89% 60%;--cw-status-error-bg:356 100% 97%;--cw-status-info:199 89% 48%;--cw-status-info-bg:204 100% 97%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.chat-widget-root.dark{--cw-status-success:158 64% 52%;--cw-status-success-bg:152 36% 14%;--cw-status-warning:38 92% 60%;--cw-status-warning-bg:36 33% 14%;--cw-status-error:350 89% 65%;--cw-status-error-bg:356 33% 16%;--cw-status-info:199 89% 58%;--cw-status-info-bg:204 33% 14%}.\\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\\!container{max-width:1536px!important}.container{max-width:1536px}}#chat-widget-root .chat-widget-root *{box-sizing:border-box;margin:0;padding:0}#chat-widget-root .chat-messages::-webkit-scrollbar{width:6px}#chat-widget-root .chat-messages::-webkit-scrollbar-track{background:transparent}#chat-widget-root .chat-messages::-webkit-scrollbar-thumb{background:rgba(156,163,175,.5);border-radius:10px}#chat-widget-root .chat-messages::-webkit-scrollbar-thumb:hover{background:rgba(156,163,175,.7)}#chat-widget-root .dark .chat-messages::-webkit-scrollbar-thumb{background:rgba(75,85,99,.5)}#chat-widget-root .dark .chat-messages::-webkit-scrollbar-thumb:hover{background:rgba(75,85,99,.7)}#chat-widget-root .sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}#chat-widget-root .pointer-events-none{pointer-events:none}#chat-widget-root .visible{visibility:visible}#chat-widget-root .invisible{visibility:hidden}#chat-widget-root .collapse{visibility:collapse}#chat-widget-root .static{position:static}#chat-widget-root .fixed{position:fixed}#chat-widget-root .absolute{position:absolute}#chat-widget-root .relative{position:relative}#chat-widget-root .sticky{position:sticky}#chat-widget-root .inset-0{inset:0}#chat-widget-root .-bottom-1\\/3{bottom:-33.333333%}#chat-widget-root .-left-\\[15\\%\\]{left:-15%}#chat-widget-root .-right-\\[15\\%\\]{right:-15%}#chat-widget-root .-top-8{top:-2rem}#chat-widget-root .bottom-0{bottom:0}#chat-widget-root .bottom-5{bottom:1.25rem}#chat-widget-root .bottom-full{bottom:100%}#chat-widget-root .left-0{left:0}#chat-widget-root .left-1\\/2{left:50%}#chat-widget-root .left-5{left:1.25rem}#chat-widget-root .left-\\[20\\%\\]{left:20%}#chat-widget-root .right-0{right:0}#chat-widget-root .right-5{right:1.25rem}#chat-widget-root .top-0{top:0}#chat-widget-root .top-1\\/2{top:50%}#chat-widget-root .top-5{top:1.25rem}#chat-widget-root .top-full{top:100%}#chat-widget-root .isolate{isolation:isolate}#chat-widget-root .z-10{z-index:10}#chat-widget-root .z-50{z-index:50}#chat-widget-root .z-\\[60\\]{z-index:60}#chat-widget-root .z-\\[70\\]{z-index:70}#chat-widget-root .z-\\[71\\]{z-index:71}#chat-widget-root .z-\\[999999\\]{z-index:999999}#chat-widget-root .z-\\[9999\\]{z-index:9999}#chat-widget-root .m-0{margin:0}#chat-widget-root .mx-2{margin-left:.5rem;margin-right:.5rem}#chat-widget-root .mx-3{margin-left:.75rem;margin-right:.75rem}#chat-widget-root .mx-5{margin-left:1.25rem;margin-right:1.25rem}#chat-widget-root .my-3{margin-bottom:.75rem;margin-top:.75rem}#chat-widget-root .my-4{margin-bottom:1rem;margin-top:1rem}#chat-widget-root .-mb-px{margin-bottom:-1px}#chat-widget-root .mb-0{margin-bottom:0}#chat-widget-root .mb-1{margin-bottom:.25rem}#chat-widget-root .mb-1\\.5{margin-bottom:.375rem}#chat-widget-root .mb-2{margin-bottom:.5rem}#chat-widget-root .mb-3{margin-bottom:.75rem}#chat-widget-root .mb-4{margin-bottom:1rem}#chat-widget-root .mb-5{margin-bottom:1.25rem}#chat-widget-root .ml-1{margin-left:.25rem}#chat-widget-root .ms-0\\.5{margin-inline-start:.125rem}#chat-widget-root .mt-0\\.5{margin-top:.125rem}#chat-widget-root .mt-1{margin-top:.25rem}#chat-widget-root .mt-1\\.5{margin-top:.375rem}#chat-widget-root .mt-2{margin-top:.5rem}#chat-widget-root .mt-3{margin-top:.75rem}#chat-widget-root .mt-4{margin-top:1rem}#chat-widget-root .block{display:block}#chat-widget-root .inline-block{display:inline-block}#chat-widget-root .inline{display:inline}#chat-widget-root .flex{display:flex}#chat-widget-root .inline-flex{display:inline-flex}#chat-widget-root .table{display:table}#chat-widget-root .grid{display:grid}#chat-widget-root .contents{display:contents}#chat-widget-root .hidden{display:none}#chat-widget-root .h-1\\.5{height:.375rem}#chat-widget-root .h-10{height:2.5rem}#chat-widget-root .h-11{height:2.75rem}#chat-widget-root .h-12{height:3rem}#chat-widget-root .h-16{height:4rem}#chat-widget-root .h-2{height:.5rem}#chat-widget-root .h-3{height:.75rem}#chat-widget-root .h-3\\.5{height:.875rem}#chat-widget-root .h-4{height:1rem}#chat-widget-root .h-5{height:1.25rem}#chat-widget-root .h-6{height:1.5rem}#chat-widget-root .h-7{height:1.75rem}#chat-widget-root .h-8{height:2rem}#chat-widget-root .h-\\[120\\%\\]{height:120%}#chat-widget-root .h-\\[130\\%\\]{height:130%}#chat-widget-root .h-\\[650px\\]{height:650px}#chat-widget-root .h-auto{height:auto}#chat-widget-root .h-full{height:100%}#chat-widget-root .h-px{height:1px}#chat-widget-root .max-h-\\[85vh\\]{max-height:85vh}#chat-widget-root .min-h-0{min-height:0}#chat-widget-root .min-h-\\[48px\\]{min-height:48px}#chat-widget-root .w-1\\.5{width:.375rem}#chat-widget-root .w-10{width:2.5rem}#chat-widget-root .w-11{width:2.75rem}#chat-widget-root .w-12{width:3rem}#chat-widget-root .w-16{width:4rem}#chat-widget-root .w-2{width:.5rem}#chat-widget-root .w-3{width:.75rem}#chat-widget-root .w-3\\.5{width:.875rem}#chat-widget-root .w-4{width:1rem}#chat-widget-root .w-44{width:11rem}#chat-widget-root .w-5{width:1.25rem}#chat-widget-root .w-6{width:1.5rem}#chat-widget-root .w-7{width:1.75rem}#chat-widget-root .w-8{width:2rem}#chat-widget-root .w-80{width:20rem}#chat-widget-root .w-96{width:24rem}#chat-widget-root .w-\\[380px\\]{width:380px}#chat-widget-root .w-\\[60\\%\\]{width:60%}#chat-widget-root .w-\\[70\\%\\]{width:70%}#chat-widget-root .w-full{width:100%}#chat-widget-root .min-w-0{min-width:0}#chat-widget-root .min-w-\\[60px\\]{min-width:60px}#chat-widget-root .min-w-full{min-width:100%}#chat-widget-root .max-w-\\[75\\%\\]{max-width:75%}#chat-widget-root .max-w-\\[92vw\\]{max-width:92vw}#chat-widget-root .max-w-full{max-width:100%}#chat-widget-root .max-w-none{max-width:none}#chat-widget-root .max-w-sm{max-width:24rem}#chat-widget-root .max-w-xs{max-width:20rem}#chat-widget-root .flex-1{flex:1 1 0%}#chat-widget-root .flex-shrink-0,#chat-widget-root .shrink-0{flex-shrink:0}#chat-widget-root .grow{flex-grow:1}#chat-widget-root .border-collapse{border-collapse:collapse}#chat-widget-root .origin-bottom{transform-origin:bottom}#chat-widget-root .-translate-x-1\\/2{--tw-translate-x:-50%}#chat-widget-root .-translate-x-1\\/2,#chat-widget-root .-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .-translate-y-1\\/2{--tw-translate-y:-50%}#chat-widget-root .-rotate-90{--tw-rotate:-90deg}#chat-widget-root .-rotate-90,#chat-widget-root .rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .rotate-180{--tw-rotate:180deg}#chat-widget-root .rotate-90{--tw-rotate:90deg}#chat-widget-root .rotate-90,#chat-widget-root .scale-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .scale-0{--tw-scale-x:0;--tw-scale-y:0}#chat-widget-root .scale-100{--tw-scale-x:1;--tw-scale-y:1}#chat-widget-root .scale-100,#chat-widget-root .scale-110{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}#chat-widget-root .scale-125{--tw-scale-x:1.25;--tw-scale-y:1.25}#chat-widget-root .scale-125,#chat-widget-root .scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .scale-95{--tw-scale-x:.95;--tw-scale-y:.95}#chat-widget-root .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}#chat-widget-root .animate-bounce{animation:bounce 1s infinite}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}#chat-widget-root .animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}#chat-widget-root .animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}#chat-widget-root .animate-spin{animation:spin 1s linear infinite}#chat-widget-root .animate-voice-glow{animation:voice-glow 7s ease-in-out infinite}@keyframes voice-glow{0%,to{transform:translate(0) scale(1)}50%{transform:translate(12%,-8%) scale(1.15)}}#chat-widget-root .animate-voice-glow-slow{animation:voice-glow 11s ease-in-out infinite reverse}#chat-widget-root .cursor-ew-resize{cursor:ew-resize}#chat-widget-root .cursor-nesw-resize{cursor:nesw-resize}#chat-widget-root .cursor-not-allowed{cursor:not-allowed}#chat-widget-root .cursor-ns-resize{cursor:ns-resize}#chat-widget-root .cursor-nwse-resize{cursor:nwse-resize}#chat-widget-root .cursor-pointer{cursor:pointer}#chat-widget-root .resize-none{resize:none}#chat-widget-root .resize{resize:both}#chat-widget-root .list-decimal{list-style-type:decimal}#chat-widget-root .list-disc{list-style-type:disc}#chat-widget-root .list-none{list-style-type:none}#chat-widget-root .flex-row{flex-direction:row}#chat-widget-root .flex-row-reverse{flex-direction:row-reverse}#chat-widget-root .flex-col{flex-direction:column}#chat-widget-root .flex-wrap{flex-wrap:wrap}#chat-widget-root .items-start{align-items:flex-start}#chat-widget-root .items-end{align-items:flex-end}#chat-widget-root .items-center{align-items:center}#chat-widget-root .justify-start{justify-content:flex-start}#chat-widget-root .justify-end{justify-content:flex-end}#chat-widget-root .justify-center{justify-content:center}#chat-widget-root .justify-between{justify-content:space-between}#chat-widget-root .gap-0{gap:0}#chat-widget-root .gap-0\\.5{gap:.125rem}#chat-widget-root .gap-1{gap:.25rem}#chat-widget-root .gap-1\\.5{gap:.375rem}#chat-widget-root .gap-10{gap:2.5rem}#chat-widget-root .gap-2{gap:.5rem}#chat-widget-root .gap-2\\.5{gap:.625rem}#chat-widget-root .gap-3{gap:.75rem}#chat-widget-root .gap-4{gap:1rem}#chat-widget-root .gap-6{gap:1.5rem}#chat-widget-root :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}#chat-widget-root :is(.space-y-4>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}#chat-widget-root .overflow-hidden{overflow:hidden}#chat-widget-root .overflow-visible{overflow:visible}#chat-widget-root .overflow-x-auto{overflow-x:auto}#chat-widget-root .overflow-y-auto{overflow-y:auto}#chat-widget-root .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#chat-widget-root .whitespace-nowrap{white-space:nowrap}#chat-widget-root .whitespace-pre-wrap{white-space:pre-wrap}#chat-widget-root .break-words{overflow-wrap:break-word}#chat-widget-root .break-all{word-break:break-all}#chat-widget-root .rounded{border-radius:.25rem}#chat-widget-root .rounded-2xl{border-radius:1rem}#chat-widget-root .rounded-3xl{border-radius:1.5rem}#chat-widget-root .rounded-full{border-radius:9999px}#chat-widget-root .rounded-lg{border-radius:.5rem}#chat-widget-root .rounded-md{border-radius:.375rem}#chat-widget-root .rounded-xl{border-radius:.75rem}#chat-widget-root .rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}#chat-widget-root .rounded-tl-sm{border-top-left-radius:.125rem}#chat-widget-root .rounded-tr-sm{border-top-right-radius:.125rem}#chat-widget-root .border{border-width:1px}#chat-widget-root .border-0{border-width:0}#chat-widget-root .border-b{border-bottom-width:1px}#chat-widget-root .border-l-4{border-left-width:4px}#chat-widget-root .border-t{border-top-width:1px}#chat-widget-root .border-t-2{border-top-width:2px}#chat-widget-root .border-solid{border-style:solid}#chat-widget-root .border-dotted{border-style:dotted}#chat-widget-root .border-none{border-style:none}#chat-widget-root .\\!border-status-error{border-color:hsl(var(--cw-status-error))!important}#chat-widget-root .border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}#chat-widget-root .border-amber-700\\/50{border-color:rgba(180,83,9,.5)}#chat-widget-root .border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}#chat-widget-root .border-blue-700\\/50{border-color:rgba(29,78,216,.5)}#chat-widget-root .border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-200\\/60{border-color:rgba(229,231,235,.6)}#chat-widget-root .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-700\\/50{border-color:rgba(55,65,81,.5)}#chat-widget-root .border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}#chat-widget-root .border-transparent{border-color:transparent}#chat-widget-root .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}#chat-widget-root .bg-amber-900\\/40{background-color:rgba(120,53,15,.4)}#chat-widget-root .bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}#chat-widget-root .bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}#chat-widget-root .bg-blue-900\\/30{background-color:rgba(30,58,138,.3)}#chat-widget-root .bg-current{background-color:currentColor}#chat-widget-root .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-50\\/30{background-color:rgba(249,250,251,.3)}#chat-widget-root .bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-700\\/50{background-color:rgba(55,65,81,.5)}#chat-widget-root .bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-800\\/50{background-color:rgba(31,41,55,.5)}#chat-widget-root .bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}#chat-widget-root .bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity,1))}#chat-widget-root .bg-orange-200{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity,1))}#chat-widget-root .bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity,1))}#chat-widget-root .bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}#chat-widget-root .bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}#chat-widget-root .bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}#chat-widget-root .bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}#chat-widget-root .bg-slate-50\\/50{background-color:rgba(248,250,252,.5)}#chat-widget-root .bg-slate-800\\/50{background-color:rgba(30,41,59,.5)}#chat-widget-root .bg-status-success{background-color:hsl(var(--cw-status-success))}#chat-widget-root .bg-status-warning{background-color:hsl(var(--cw-status-warning))}#chat-widget-root .bg-transparent{background-color:transparent}#chat-widget-root .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}#chat-widget-root .bg-white\\/10{background-color:hsla(0,0%,100%,.1)}#chat-widget-root .bg-white\\/20{background-color:hsla(0,0%,100%,.2)}#chat-widget-root .bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}#chat-widget-root .bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}#chat-widget-root .from-gray-50\\/50{--tw-gradient-from:rgba(249,250,251,.5) var(--tw-gradient-from-position);--tw-gradient-to:rgba(249,250,251,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .from-white\\/0{--tw-gradient-from:hsla(0,0%,100%,0) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .from-white\\/10{--tw-gradient-from:hsla(0,0%,100%,.1) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .from-yellow-200{--tw-gradient-from:#fef08a var(--tw-gradient-from-position);--tw-gradient-to:hsla(53,98%,77%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .via-white\\/5{--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),hsla(0,0%,100%,.05) var(--tw-gradient-via-position),var(--tw-gradient-to)}#chat-widget-root .to-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}#chat-widget-root .to-white\\/10{--tw-gradient-to:hsla(0,0%,100%,.1) var(--tw-gradient-to-position)}#chat-widget-root .to-yellow-400{--tw-gradient-to:#facc15 var(--tw-gradient-to-position)}#chat-widget-root .object-contain{-o-object-fit:contain;object-fit:contain}#chat-widget-root .p-0{padding:0}#chat-widget-root .p-0\\.5{padding:.125rem}#chat-widget-root .p-3{padding:.75rem}#chat-widget-root .p-5{padding:1.25rem}#chat-widget-root .p-6{padding:1.5rem}#chat-widget-root .p-8{padding:2rem}#chat-widget-root .px-1{padding-left:.25rem;padding-right:.25rem}#chat-widget-root .px-2{padding-left:.5rem;padding-right:.5rem}#chat-widget-root .px-2\\.5{padding-left:.625rem;padding-right:.625rem}#chat-widget-root .px-3{padding-left:.75rem;padding-right:.75rem}#chat-widget-root .px-3\\.5{padding-left:.875rem;padding-right:.875rem}#chat-widget-root .px-4{padding-left:1rem;padding-right:1rem}#chat-widget-root .px-5{padding-left:1.25rem;padding-right:1.25rem}#chat-widget-root .py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}#chat-widget-root .py-1{padding-bottom:.25rem;padding-top:.25rem}#chat-widget-root .py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}#chat-widget-root .py-12{padding-bottom:3rem;padding-top:3rem}#chat-widget-root .py-2{padding-bottom:.5rem;padding-top:.5rem}#chat-widget-root .py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}#chat-widget-root .py-3{padding-bottom:.75rem;padding-top:.75rem}#chat-widget-root .py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}#chat-widget-root .py-4{padding-bottom:1rem;padding-top:1rem}#chat-widget-root .pb-1{padding-bottom:.25rem}#chat-widget-root .pb-2{padding-bottom:.5rem}#chat-widget-root .pb-6{padding-bottom:1.5rem}#chat-widget-root .pl-1{padding-left:.25rem}#chat-widget-root .pl-2{padding-left:.5rem}#chat-widget-root .pl-4{padding-left:1rem}#chat-widget-root .pl-\\[50px\\]{padding-left:50px}#chat-widget-root .pr-1{padding-right:.25rem}#chat-widget-root .pt-1{padding-top:.25rem}#chat-widget-root .pt-10{padding-top:2.5rem}#chat-widget-root .pt-3{padding-top:.75rem}#chat-widget-root .pt-4{padding-top:1rem}#chat-widget-root .text-left{text-align:left}#chat-widget-root .text-center{text-align:center}#chat-widget-root .text-right{text-align:right}#chat-widget-root .text-start{text-align:start}#chat-widget-root .align-text-bottom{vertical-align:text-bottom}#chat-widget-root .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}#chat-widget-root .text-2xl{font-size:1.5rem;line-height:2rem}#chat-widget-root .text-\\[10px\\]{font-size:10px}#chat-widget-root .text-base{font-size:1rem;line-height:1.5rem}#chat-widget-root .text-chip{font-size:11px;letter-spacing:0;line-height:1.4}#chat-widget-root .text-h4{font-size:18px;letter-spacing:0;line-height:1.3}#chat-widget-root .text-lg{font-size:1.125rem;line-height:1.75rem}#chat-widget-root .text-sm{font-size:.875rem;line-height:1.25rem}#chat-widget-root .text-xl{font-size:1.25rem;line-height:1.75rem}#chat-widget-root .text-xs{font-size:.75rem;line-height:1rem}#chat-widget-root .font-bold{font-weight:700}#chat-widget-root .font-medium{font-weight:500}#chat-widget-root .font-semibold{font-weight:600}#chat-widget-root .uppercase{text-transform:uppercase}#chat-widget-root .lowercase{text-transform:lowercase}#chat-widget-root .italic{font-style:italic}#chat-widget-root .tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}#chat-widget-root .leading-5{line-height:1.25rem}#chat-widget-root .leading-none{line-height:1}#chat-widget-root .leading-normal{line-height:1.5}#chat-widget-root .leading-relaxed{line-height:1.625}#chat-widget-root .leading-snug{line-height:1.375}#chat-widget-root .tracking-wide{letter-spacing:.025em}#chat-widget-root .text-\\[\\#4A5568\\]{--tw-text-opacity:1;color:rgb(74 85 104/var(--tw-text-opacity,1))}#chat-widget-root .text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}#chat-widget-root .text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}#chat-widget-root .text-current{color:currentColor}#chat-widget-root .text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-500\\/80{color:hsla(220,9%,46%,.8)}#chat-widget-root .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}#chat-widget-root .text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}#chat-widget-root .text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}#chat-widget-root .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}#chat-widget-root .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}#chat-widget-root .text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}#chat-widget-root .text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}#chat-widget-root .text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}#chat-widget-root .text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}#chat-widget-root .text-status-error{color:hsl(var(--cw-status-error))}#chat-widget-root .text-status-success{color:hsl(var(--cw-status-success))}#chat-widget-root .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}#chat-widget-root .text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}#chat-widget-root .underline{text-decoration-line:underline}#chat-widget-root .no-underline{text-decoration-line:none}#chat-widget-root .placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}#chat-widget-root .placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}#chat-widget-root .placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}#chat-widget-root .placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}#chat-widget-root .opacity-0{opacity:0}#chat-widget-root .opacity-50{opacity:.5}#chat-widget-root .opacity-60{opacity:.6}#chat-widget-root .opacity-70{opacity:.7}#chat-widget-root .opacity-75{opacity:.75}#chat-widget-root .opacity-80{opacity:.8}#chat-widget-root .opacity-90{opacity:.9}#chat-widget-root .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}#chat-widget-root .shadow,#chat-widget-root .shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}#chat-widget-root .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}#chat-widget-root .shadow-lg,#chat-widget-root .shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}#chat-widget-root .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}#chat-widget-root .shadow-sm,#chat-widget-root .shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}#chat-widget-root .shadow-black\\/20{--tw-shadow-color:rgba(0,0,0,.2);--tw-shadow:var(--tw-shadow-colored)}#chat-widget-root .shadow-gray-200\\/80{--tw-shadow-color:rgba(229,231,235,.8);--tw-shadow:var(--tw-shadow-colored)}#chat-widget-root .outline-none{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .outline{outline-style:solid}#chat-widget-root .ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .ring,#chat-widget-root .ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .ring-blue-100{--tw-ring-opacity:1;--tw-ring-color:rgb(219 234 254/var(--tw-ring-opacity,1))}#chat-widget-root .ring-blue-300{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity,1))}#chat-widget-root .ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity,1))}#chat-widget-root .blur{--tw-blur:blur(8px)}#chat-widget-root .blur,#chat-widget-root .blur-2xl{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .blur-2xl{--tw-blur:blur(40px)}#chat-widget-root .drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgba(0,0,0,.1)) drop-shadow(0 1px 1px rgba(0,0,0,.06))}#chat-widget-root .drop-shadow,#chat-widget-root .drop-shadow-md{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .drop-shadow-md{--tw-drop-shadow:drop-shadow(0 4px 3px rgba(0,0,0,.07)) drop-shadow(0 2px 2px rgba(0,0,0,.06))}#chat-widget-root .drop-shadow-sm{--tw-drop-shadow:drop-shadow(0 1px 1px rgba(0,0,0,.05))}#chat-widget-root .drop-shadow-sm,#chat-widget-root .grayscale-\\[0\\.3\\]{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .grayscale-\\[0\\.3\\]{--tw-grayscale:grayscale(0.3)}#chat-widget-root .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .backdrop-blur-sm{--tw-backdrop-blur:blur(4px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}#chat-widget-root .transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-\\[opacity\\2c transform\\]{transition-duration:.15s;transition-property:opacity,transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .duration-150{transition-duration:.15s}#chat-widget-root .duration-200{transition-duration:.2s}#chat-widget-root .duration-300{transition-duration:.3s}#chat-widget-root .duration-500{transition-duration:.5s}#chat-widget-root .ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}#chat-widget-root :is(#chat-widget-root .animate-in){animation:slideIn .3s ease-out}#chat-widget-root :is(#chat-widget-root .transition-all){transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .\\[font-family\\:inherit\\]{font-family:inherit}#chat-widget-root .\\[overflow-wrap\\:anywhere\\]{overflow-wrap:anywhere}#chat-widget-root .placeholder\\:text-\\[\\#A2A9B2\\]::-moz-placeholder{--tw-text-opacity:1;color:rgb(162 169 178/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-\\[\\#A2A9B2\\]::placeholder{--tw-text-opacity:1;color:rgb(162 169 178/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05}#chat-widget-root .hover\\:scale-105:hover,#chat-widget-root .hover\\:scale-110:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .hover\\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1}#chat-widget-root .hover\\:scale-\\[1\\.02\\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .hover\\:border-blue-400:hover{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}#chat-widget-root .hover\\:border-blue-600:hover{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}#chat-widget-root .hover\\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-blue-500\\/20:hover{background-color:rgba(59,130,246,.2)}#chat-widget-root .hover\\:bg-blue-900\\/50:hover{background-color:rgba(30,58,138,.5)}#chat-widget-root .hover\\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-transparent:hover{background-color:transparent}#chat-widget-root .hover\\:text-blue-500:hover{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:underline:hover{text-decoration-line:underline}#chat-widget-root .hover\\:opacity-80:hover{opacity:.8}#chat-widget-root .hover\\:opacity-90:hover{opacity:.9}#chat-widget-root .hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}#chat-widget-root .hover\\:shadow-md:hover,#chat-widget-root .hover\\:shadow-xl:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .hover\\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}#chat-widget-root .hover\\:grayscale-0:hover{--tw-grayscale:grayscale(0);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .focus\\:\\!border-status-error:focus{border-color:hsl(var(--cw-status-error))!important}#chat-widget-root .focus\\:border-\\[\\#5A6069\\]:focus{--tw-border-opacity:1;border-color:rgb(90 96 105/var(--tw-border-opacity,1))}#chat-widget-root .focus\\:border-\\[\\#B0B0B0\\]:focus{--tw-border-opacity:1;border-color:rgb(176 176 176/var(--tw-border-opacity,1))}#chat-widget-root .focus\\:bg-white:focus{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}#chat-widget-root .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .focus\\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .focus\\:ring-0:focus,#chat-widget-root .focus\\:ring-1:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .focus\\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .focus\\:ring-gray-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity,1))}#chat-widget-root .focus\\:ring-gray-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity,1))}#chat-widget-root .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .focus-visible\\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .focus-visible\\:ring-blue-700:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(29 78 216/var(--tw-ring-opacity,1))}#chat-widget-root .focus-visible\\:ring-primary:focus-visible{--tw-ring-color:var(--cw-primary,#1d4ed8)}#chat-widget-root .focus-visible\\:ring-red-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(220 38 38/var(--tw-ring-opacity,1))}#chat-widget-root .focus-visible\\:ring-white\\/40:focus-visible{--tw-ring-color:hsla(0,0%,100%,.4)}#chat-widget-root .focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}#chat-widget-root .focus-visible\\:ring-offset-gray-900:focus-visible{--tw-ring-offset-color:#111827}#chat-widget-root .active\\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95}#chat-widget-root .active\\:scale-95:active,#chat-widget-root .active\\:scale-\\[0\\.97\\]:active{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .active\\:scale-\\[0\\.97\\]:active{--tw-scale-x:0.97;--tw-scale-y:0.97}#chat-widget-root .active\\:scale-\\[0\\.98\\]:active{--tw-scale-x:0.98;--tw-scale-y:0.98}#chat-widget-root .active\\:scale-\\[0\\.98\\]:active,#chat-widget-root .active\\:scale-\\[0\\.99\\]:active{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .active\\:scale-\\[0\\.99\\]:active{--tw-scale-x:0.99;--tw-scale-y:0.99}#chat-widget-root .active\\:outline-none:active{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .active\\:ring-0:active{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}#chat-widget-root .disabled\\:opacity-40:disabled{opacity:.4}#chat-widget-root .disabled\\:opacity-50:disabled{opacity:.5}#chat-widget-root .disabled\\:shadow-none:disabled{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root :is(.group:hover .group-hover\\:scale-100){--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root :is(.group:hover .group-hover\\:opacity-100){opacity:1}#chat-widget-root .dark\\:text-gray-300:is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}#chat-widget-root .dark\\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}@media (min-width:768px){#chat-widget-root .md\\:text-sm{font-size:.875rem;line-height:1.25rem}}#chat-widget-root .rtl\\:rounded-tl-2xl:where([dir=rtl],[dir=rtl] *){border-top-left-radius:1rem}#chat-widget-root .rtl\\:rounded-tr-sm:where([dir=rtl],[dir=rtl] *){border-top-right-radius:.125rem}#chat-widget-root .\\[\\&\\:first-child\\]\\:\\!mt-0:first-child{margin-top:0!important}#chat-widget-root :is(.\\[\\&\\>\\*\\:first-child\\]\\:\\!mt-0>:first-child){margin-top:0!important}#chat-widget-root :is(.\\[\\&\\>\\*\\:last-child\\]\\:\\!mb-0>:last-child){margin-bottom:0!important}";
7807
7807
 
7808
7808
  var css_248z = ".chat-widget-root{position:fixed;z-index:999999}.chat-widget-container{color:var(--cw-text-color,inherit);font-family:var(\n --cw-font-family,-apple-system,BlinkMacSystemFont,\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",sans-serif\n )}#chat-widget-root .chat-messages p{overflow-wrap:anywhere;word-break:break-word}textarea#chat-widget-input::-moz-placeholder{border:none;line-height:48px;outline:none}textarea#chat-widget-input::placeholder{border:none;line-height:48px;outline:none}textarea#chat-widget-input{border:none;line-height:48px;outline:none}@keyframes slideIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}#chat-widget-root .scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}#chat-widget-root .scrollbar-hide::-webkit-scrollbar{display:none}#chat-widget-root .slim-scrollbar-x{scrollbar-width:thin}#chat-widget-root .slim-scrollbar-x::-webkit-scrollbar{height:3px!important}#chat-widget-root .slim-scrollbar-x::-webkit-scrollbar-track{background:transparent!important}#chat-widget-root .slim-scrollbar-x::-webkit-scrollbar-thumb{background:#d1d5db!important;border-radius:2px!important}#chat-widget-root .slim-scrollbar-x::-webkit-scrollbar-thumb:hover{background:#9ca3af!important}@media print{.chat-widget-root{display:none!important}}";
7809
7809
 
@@ -12258,6 +12258,599 @@
12258
12258
  moreSources: "+{count} nữa"
12259
12259
  }
12260
12260
  };
12261
+
12262
+ // The voice call screen (components/VoiceCallView.jsx): the status pill, the
12263
+ // transcript region and the Pause and End controls. Kept as its own table,
12264
+ // like A11Y_LABELS above, so every supported locale carries the full set in
12265
+ // one place. The ar, de, es, fr, ja, nl, sr and zh lines match the Testing
12266
+ // lab's call screen (packages/frontend/src/locales/*/common.json).
12267
+ const VOICE_CALL_TEXTS = {
12268
+ en: {
12269
+ callConnecting: "Connecting...",
12270
+ callLive: "Live",
12271
+ callPaused: "Paused",
12272
+ callReconnecting: "Reconnecting",
12273
+ callTranscript: "Call transcript",
12274
+ callPause: "Pause microphone",
12275
+ callResume: "Resume microphone",
12276
+ callPauseLabel: "Pause",
12277
+ callResumeLabel: "Resume",
12278
+ callEnd: "End call",
12279
+ callEndLabel: "End"
12280
+ },
12281
+ ar: {
12282
+ callConnecting: "جارٍ الاتصال...",
12283
+ callLive: "مباشر",
12284
+ callPaused: "متوقف مؤقتًا",
12285
+ callReconnecting: "جارٍ إعادة الاتصال",
12286
+ callTranscript: "نص المكالمة",
12287
+ callPause: "إيقاف الميكروفون مؤقتًا",
12288
+ callResume: "استئناف الميكروفون",
12289
+ callPauseLabel: "إيقاف مؤقت",
12290
+ callResumeLabel: "استئناف",
12291
+ callEnd: "إنهاء المكالمة",
12292
+ callEndLabel: "إنهاء"
12293
+ },
12294
+ es: {
12295
+ callConnecting: "Conectando...",
12296
+ callLive: "En directo",
12297
+ callPaused: "En pausa",
12298
+ callReconnecting: "Reconectando",
12299
+ callTranscript: "Transcripción de la llamada",
12300
+ callPause: "Pausar micrófono",
12301
+ callResume: "Reanudar micrófono",
12302
+ callPauseLabel: "Pausa",
12303
+ callResumeLabel: "Reanudar",
12304
+ callEnd: "Finalizar llamada",
12305
+ callEndLabel: "Finalizar"
12306
+ },
12307
+ be: {
12308
+ callConnecting: "Злучэнне...",
12309
+ callLive: "У эфіры",
12310
+ callPaused: "Прыпынена",
12311
+ callReconnecting: "Паўторнае злучэнне",
12312
+ callTranscript: "Расшыфроўка званка",
12313
+ callPause: "Прыпыніць мікрафон",
12314
+ callResume: "Узнавіць мікрафон",
12315
+ callPauseLabel: "Паўза",
12316
+ callResumeLabel: "Узнавіць",
12317
+ callEnd: "Завяршыць званок",
12318
+ callEndLabel: "Завяршыць"
12319
+ },
12320
+ bs: {
12321
+ callConnecting: "Povezivanje...",
12322
+ callLive: "Uživo",
12323
+ callPaused: "Pauzirano",
12324
+ callReconnecting: "Ponovno povezivanje",
12325
+ callTranscript: "Transkript poziva",
12326
+ callPause: "Pauziraj mikrofon",
12327
+ callResume: "Nastavi mikrofon",
12328
+ callPauseLabel: "Pauza",
12329
+ callResumeLabel: "Nastavi",
12330
+ callEnd: "Završi poziv",
12331
+ callEndLabel: "Završi"
12332
+ },
12333
+ bg: {
12334
+ callConnecting: "Свързване...",
12335
+ callLive: "На живо",
12336
+ callPaused: "На пауза",
12337
+ callReconnecting: "Повторно свързване",
12338
+ callTranscript: "Препис на разговора",
12339
+ callPause: "Пауза на микрофона",
12340
+ callResume: "Възобнови микрофона",
12341
+ callPauseLabel: "Пауза",
12342
+ callResumeLabel: "Продължи",
12343
+ callEnd: "Прекрати разговора",
12344
+ callEndLabel: "Прекрати"
12345
+ },
12346
+ my: {
12347
+ callConnecting: "ချိတ်ဆက်နေသည်...",
12348
+ callLive: "တိုက်ရိုက်",
12349
+ callPaused: "ခေတ္တရပ်ထားသည်",
12350
+ callReconnecting: "ပြန်လည်ချိတ်ဆက်နေသည်",
12351
+ callTranscript: "ဖုန်းခေါ်ဆိုမှု စာသားမှတ်တမ်း",
12352
+ callPause: "မိုက်ခရိုဖုန်းကို ခေတ္တရပ်ရန်",
12353
+ callResume: "မိုက်ခရိုဖုန်းကို ပြန်ဖွင့်ရန်",
12354
+ callPauseLabel: "ခေတ္တရပ်ရန်",
12355
+ callResumeLabel: "ဆက်လုပ်ရန်",
12356
+ callEnd: "ဖုန်းချရန်",
12357
+ callEndLabel: "ပြီးဆုံးရန်"
12358
+ },
12359
+ ca: {
12360
+ callConnecting: "Connectant...",
12361
+ callLive: "En directe",
12362
+ callPaused: "En pausa",
12363
+ callReconnecting: "Reconnectant",
12364
+ callTranscript: "Transcripció de la trucada",
12365
+ callPause: "Posa en pausa el micròfon",
12366
+ callResume: "Reprèn el micròfon",
12367
+ callPauseLabel: "Pausa",
12368
+ callResumeLabel: "Reprèn",
12369
+ callEnd: "Finalitza la trucada",
12370
+ callEndLabel: "Finalitza"
12371
+ },
12372
+ zh: {
12373
+ callConnecting: "正在连接...",
12374
+ callLive: "通话中",
12375
+ callPaused: "已暂停",
12376
+ callReconnecting: "正在重新连接",
12377
+ callTranscript: "通话记录",
12378
+ callPause: "暂停麦克风",
12379
+ callResume: "恢复麦克风",
12380
+ callPauseLabel: "暂停",
12381
+ callResumeLabel: "恢复",
12382
+ callEnd: "结束通话",
12383
+ callEndLabel: "结束"
12384
+ },
12385
+ hr: {
12386
+ callConnecting: "Povezivanje...",
12387
+ callLive: "Uživo",
12388
+ callPaused: "Pauzirano",
12389
+ callReconnecting: "Ponovno povezivanje",
12390
+ callTranscript: "Prijepis poziva",
12391
+ callPause: "Pauziraj mikrofon",
12392
+ callResume: "Nastavi mikrofon",
12393
+ callPauseLabel: "Pauza",
12394
+ callResumeLabel: "Nastavi",
12395
+ callEnd: "Završi poziv",
12396
+ callEndLabel: "Završi"
12397
+ },
12398
+ cs: {
12399
+ callConnecting: "Připojování...",
12400
+ callLive: "Živě",
12401
+ callPaused: "Pozastaveno",
12402
+ callReconnecting: "Opětovné připojování",
12403
+ callTranscript: "Přepis hovoru",
12404
+ callPause: "Pozastavit mikrofon",
12405
+ callResume: "Obnovit mikrofon",
12406
+ callPauseLabel: "Pozastavit",
12407
+ callResumeLabel: "Pokračovat",
12408
+ callEnd: "Ukončit hovor",
12409
+ callEndLabel: "Ukončit"
12410
+ },
12411
+ da: {
12412
+ callConnecting: "Forbinder...",
12413
+ callLive: "Live",
12414
+ callPaused: "Sat på pause",
12415
+ callReconnecting: "Genopretter forbindelse",
12416
+ callTranscript: "Udskrift af opkaldet",
12417
+ callPause: "Sæt mikrofonen på pause",
12418
+ callResume: "Genoptag mikrofonen",
12419
+ callPauseLabel: "Pause",
12420
+ callResumeLabel: "Genoptag",
12421
+ callEnd: "Afslut opkald",
12422
+ callEndLabel: "Afslut"
12423
+ },
12424
+ nl: {
12425
+ callConnecting: "Verbinden...",
12426
+ callLive: "Live",
12427
+ callPaused: "Gepauzeerd",
12428
+ callReconnecting: "Opnieuw verbinden",
12429
+ callTranscript: "Gesprekstranscript",
12430
+ callPause: "Microfoon pauzeren",
12431
+ callResume: "Microfoon hervatten",
12432
+ callPauseLabel: "Pauzeren",
12433
+ callResumeLabel: "Hervatten",
12434
+ callEnd: "Gesprek beëindigen",
12435
+ callEndLabel: "Beëindigen"
12436
+ },
12437
+ et: {
12438
+ callConnecting: "Ühendamine...",
12439
+ callLive: "Otse",
12440
+ callPaused: "Peatatud",
12441
+ callReconnecting: "Ühenduse taastamine",
12442
+ callTranscript: "Kõne ärakiri",
12443
+ callPause: "Peata mikrofon",
12444
+ callResume: "Jätka mikrofoniga",
12445
+ callPauseLabel: "Peata",
12446
+ callResumeLabel: "Jätka",
12447
+ callEnd: "Lõpeta kõne",
12448
+ callEndLabel: "Lõpeta"
12449
+ },
12450
+ fi: {
12451
+ callConnecting: "Yhdistetään...",
12452
+ callLive: "Käynnissä",
12453
+ callPaused: "Tauolla",
12454
+ callReconnecting: "Yhdistetään uudelleen",
12455
+ callTranscript: "Puhelun litterointi",
12456
+ callPause: "Keskeytä mikrofoni",
12457
+ callResume: "Jatka mikrofonia",
12458
+ callPauseLabel: "Tauko",
12459
+ callResumeLabel: "Jatka",
12460
+ callEnd: "Lopeta puhelu",
12461
+ callEndLabel: "Lopeta"
12462
+ },
12463
+ fr: {
12464
+ callConnecting: "Connexion...",
12465
+ callLive: "En direct",
12466
+ callPaused: "En pause",
12467
+ callReconnecting: "Reconnexion",
12468
+ callTranscript: "Transcription de l'appel",
12469
+ callPause: "Mettre le micro en pause",
12470
+ callResume: "Reprendre le micro",
12471
+ callPauseLabel: "Pause",
12472
+ callResumeLabel: "Reprendre",
12473
+ callEnd: "Terminer l'appel",
12474
+ callEndLabel: "Terminer"
12475
+ },
12476
+ de: {
12477
+ callConnecting: "Verbindung wird hergestellt...",
12478
+ callLive: "Live",
12479
+ callPaused: "Pausiert",
12480
+ callReconnecting: "Verbindung wird wiederhergestellt",
12481
+ callTranscript: "Gesprächstranskript",
12482
+ callPause: "Mikrofon pausieren",
12483
+ callResume: "Mikrofon fortsetzen",
12484
+ callPauseLabel: "Pause",
12485
+ callResumeLabel: "Fortsetzen",
12486
+ callEnd: "Anruf beenden",
12487
+ callEndLabel: "Beenden"
12488
+ },
12489
+ el: {
12490
+ callConnecting: "Σύνδεση...",
12491
+ callLive: "Ζωντανά",
12492
+ callPaused: "Σε παύση",
12493
+ callReconnecting: "Επανασύνδεση",
12494
+ callTranscript: "Απομαγνητοφώνηση κλήσης",
12495
+ callPause: "Παύση μικροφώνου",
12496
+ callResume: "Συνέχιση μικροφώνου",
12497
+ callPauseLabel: "Παύση",
12498
+ callResumeLabel: "Συνέχεια",
12499
+ callEnd: "Τερματισμός κλήσης",
12500
+ callEndLabel: "Τέλος"
12501
+ },
12502
+ hi: {
12503
+ callConnecting: "कनेक्ट हो रहा है...",
12504
+ callLive: "लाइव",
12505
+ callPaused: "रुका हुआ",
12506
+ callReconnecting: "फिर से कनेक्ट हो रहा है",
12507
+ callTranscript: "कॉल ट्रांसक्रिप्ट",
12508
+ callPause: "माइक्रोफ़ोन रोकें",
12509
+ callResume: "माइक्रोफ़ोन फिर से शुरू करें",
12510
+ callPauseLabel: "रोकें",
12511
+ callResumeLabel: "फिर शुरू करें",
12512
+ callEnd: "कॉल समाप्त करें",
12513
+ callEndLabel: "समाप्त करें"
12514
+ },
12515
+ mr: {
12516
+ callConnecting: "कनेक्ट होत आहे...",
12517
+ callLive: "लाइव्ह",
12518
+ callPaused: "थांबवले",
12519
+ callReconnecting: "पुन्हा कनेक्ट होत आहे",
12520
+ callTranscript: "कॉलचा उतारा",
12521
+ callPause: "मायक्रोफोन थांबवा",
12522
+ callResume: "मायक्रोफोन पुन्हा सुरू करा",
12523
+ callPauseLabel: "थांबवा",
12524
+ callResumeLabel: "पुन्हा सुरू करा",
12525
+ callEnd: "कॉल संपवा",
12526
+ callEndLabel: "संपवा"
12527
+ },
12528
+ hu: {
12529
+ callConnecting: "Kapcsolódás...",
12530
+ callLive: "Élő",
12531
+ callPaused: "Szüneteltetve",
12532
+ callReconnecting: "Újrakapcsolódás",
12533
+ callTranscript: "A hívás átirata",
12534
+ callPause: "Mikrofon szüneteltetése",
12535
+ callResume: "Mikrofon folytatása",
12536
+ callPauseLabel: "Szünet",
12537
+ callResumeLabel: "Folytatás",
12538
+ callEnd: "Hívás befejezése",
12539
+ callEndLabel: "Befejezés"
12540
+ },
12541
+ is: {
12542
+ callConnecting: "Tengist...",
12543
+ callLive: "Í beinni",
12544
+ callPaused: "Í hléi",
12545
+ callReconnecting: "Tengist aftur",
12546
+ callTranscript: "Afrit af símtali",
12547
+ callPause: "Gera hlé á hljóðnema",
12548
+ callResume: "Halda áfram með hljóðnema",
12549
+ callPauseLabel: "Hlé",
12550
+ callResumeLabel: "Halda áfram",
12551
+ callEnd: "Ljúka símtali",
12552
+ callEndLabel: "Ljúka"
12553
+ },
12554
+ id: {
12555
+ callConnecting: "Menghubungkan...",
12556
+ callLive: "Langsung",
12557
+ callPaused: "Dijeda",
12558
+ callReconnecting: "Menghubungkan ulang",
12559
+ callTranscript: "Transkrip panggilan",
12560
+ callPause: "Jeda mikrofon",
12561
+ callResume: "Lanjutkan mikrofon",
12562
+ callPauseLabel: "Jeda",
12563
+ callResumeLabel: "Lanjutkan",
12564
+ callEnd: "Akhiri panggilan",
12565
+ callEndLabel: "Akhiri"
12566
+ },
12567
+ it: {
12568
+ callConnecting: "Connessione...",
12569
+ callLive: "In diretta",
12570
+ callPaused: "In pausa",
12571
+ callReconnecting: "Riconnessione",
12572
+ callTranscript: "Trascrizione della chiamata",
12573
+ callPause: "Metti in pausa il microfono",
12574
+ callResume: "Riattiva il microfono",
12575
+ callPauseLabel: "Pausa",
12576
+ callResumeLabel: "Riprendi",
12577
+ callEnd: "Termina chiamata",
12578
+ callEndLabel: "Termina"
12579
+ },
12580
+ ja: {
12581
+ callConnecting: "接続中...",
12582
+ callLive: "ライブ",
12583
+ callPaused: "一時停止中",
12584
+ callReconnecting: "再接続中",
12585
+ callTranscript: "通話の文字起こし",
12586
+ callPause: "マイクを一時停止",
12587
+ callResume: "マイクを再開",
12588
+ callPauseLabel: "一時停止",
12589
+ callResumeLabel: "再開",
12590
+ callEnd: "通話を終了",
12591
+ callEndLabel: "終了"
12592
+ },
12593
+ ko: {
12594
+ callConnecting: "연결 중...",
12595
+ callLive: "통화 중",
12596
+ callPaused: "일시 중지됨",
12597
+ callReconnecting: "다시 연결 중",
12598
+ callTranscript: "통화 기록",
12599
+ callPause: "마이크 일시 중지",
12600
+ callResume: "마이크 다시 켜기",
12601
+ callPauseLabel: "일시 중지",
12602
+ callResumeLabel: "재개",
12603
+ callEnd: "통화 종료",
12604
+ callEndLabel: "종료"
12605
+ },
12606
+ lv: {
12607
+ callConnecting: "Savienojas...",
12608
+ callLive: "Tiešraidē",
12609
+ callPaused: "Pauzēts",
12610
+ callReconnecting: "Atjauno savienojumu",
12611
+ callTranscript: "Zvana atšifrējums",
12612
+ callPause: "Pauzēt mikrofonu",
12613
+ callResume: "Atsākt mikrofonu",
12614
+ callPauseLabel: "Pauze",
12615
+ callResumeLabel: "Atsākt",
12616
+ callEnd: "Beigt zvanu",
12617
+ callEndLabel: "Beigt"
12618
+ },
12619
+ lt: {
12620
+ callConnecting: "Jungiamasi...",
12621
+ callLive: "Tiesiogiai",
12622
+ callPaused: "Pristabdyta",
12623
+ callReconnecting: "Jungiamasi iš naujo",
12624
+ callTranscript: "Skambučio nuorašas",
12625
+ callPause: "Pristabdyti mikrofoną",
12626
+ callResume: "Tęsti mikrofoną",
12627
+ callPauseLabel: "Pristabdyti",
12628
+ callResumeLabel: "Tęsti",
12629
+ callEnd: "Baigti skambutį",
12630
+ callEndLabel: "Baigti"
12631
+ },
12632
+ mk: {
12633
+ callConnecting: "Се поврзува...",
12634
+ callLive: "Во живо",
12635
+ callPaused: "Паузирано",
12636
+ callReconnecting: "Повторно поврзување",
12637
+ callTranscript: "Транскрипт од повикот",
12638
+ callPause: "Паузирај го микрофонот",
12639
+ callResume: "Продолжи го микрофонот",
12640
+ callPauseLabel: "Пауза",
12641
+ callResumeLabel: "Продолжи",
12642
+ callEnd: "Заврши го повикот",
12643
+ callEndLabel: "Заврши"
12644
+ },
12645
+ ms: {
12646
+ callConnecting: "Menyambung...",
12647
+ callLive: "Langsung",
12648
+ callPaused: "Dijeda",
12649
+ callReconnecting: "Menyambung semula",
12650
+ callTranscript: "Transkrip panggilan",
12651
+ callPause: "Jeda mikrofon",
12652
+ callResume: "Sambung semula mikrofon",
12653
+ callPauseLabel: "Jeda",
12654
+ callResumeLabel: "Sambung semula",
12655
+ callEnd: "Tamatkan panggilan",
12656
+ callEndLabel: "Tamatkan"
12657
+ },
12658
+ no: {
12659
+ callConnecting: "Kobler til...",
12660
+ callLive: "Direkte",
12661
+ callPaused: "Satt på pause",
12662
+ callReconnecting: "Kobler til på nytt",
12663
+ callTranscript: "Transkripsjon av samtalen",
12664
+ callPause: "Sett mikrofonen på pause",
12665
+ callResume: "Gjenoppta mikrofonen",
12666
+ callPauseLabel: "Pause",
12667
+ callResumeLabel: "Gjenoppta",
12668
+ callEnd: "Avslutt samtalen",
12669
+ callEndLabel: "Avslutt"
12670
+ },
12671
+ fa: {
12672
+ callConnecting: "در حال اتصال...",
12673
+ callLive: "زنده",
12674
+ callPaused: "متوقف شده",
12675
+ callReconnecting: "در حال اتصال دوباره",
12676
+ callTranscript: "متن تماس",
12677
+ callPause: "توقف موقت میکروفون",
12678
+ callResume: "ادامه میکروفون",
12679
+ callPauseLabel: "توقف موقت",
12680
+ callResumeLabel: "ادامه",
12681
+ callEnd: "پایان تماس",
12682
+ callEndLabel: "پایان"
12683
+ },
12684
+ pl: {
12685
+ callConnecting: "Łączenie...",
12686
+ callLive: "Na żywo",
12687
+ callPaused: "Wstrzymano",
12688
+ callReconnecting: "Ponowne łączenie",
12689
+ callTranscript: "Transkrypcja rozmowy",
12690
+ callPause: "Wstrzymaj mikrofon",
12691
+ callResume: "Wznów mikrofon",
12692
+ callPauseLabel: "Wstrzymaj",
12693
+ callResumeLabel: "Wznów",
12694
+ callEnd: "Zakończ rozmowę",
12695
+ callEndLabel: "Zakończ"
12696
+ },
12697
+ pt: {
12698
+ callConnecting: "Conectando...",
12699
+ callLive: "Ao vivo",
12700
+ callPaused: "Pausado",
12701
+ callReconnecting: "Reconectando",
12702
+ callTranscript: "Transcrição da chamada",
12703
+ callPause: "Pausar microfone",
12704
+ callResume: "Retomar microfone",
12705
+ callPauseLabel: "Pausar",
12706
+ callResumeLabel: "Retomar",
12707
+ callEnd: "Encerrar chamada",
12708
+ callEndLabel: "Encerrar"
12709
+ },
12710
+ ro: {
12711
+ callConnecting: "Se conectează...",
12712
+ callLive: "În direct",
12713
+ callPaused: "În pauză",
12714
+ callReconnecting: "Se reconectează",
12715
+ callTranscript: "Transcrierea apelului",
12716
+ callPause: "Întrerupe microfonul",
12717
+ callResume: "Reia microfonul",
12718
+ callPauseLabel: "Pauză",
12719
+ callResumeLabel: "Reia",
12720
+ callEnd: "Încheie apelul",
12721
+ callEndLabel: "Încheie"
12722
+ },
12723
+ ru: {
12724
+ callConnecting: "Подключение...",
12725
+ callLive: "В эфире",
12726
+ callPaused: "Приостановлено",
12727
+ callReconnecting: "Переподключение",
12728
+ callTranscript: "Расшифровка звонка",
12729
+ callPause: "Приостановить микрофон",
12730
+ callResume: "Возобновить микрофон",
12731
+ callPauseLabel: "Пауза",
12732
+ callResumeLabel: "Продолжить",
12733
+ callEnd: "Завершить звонок",
12734
+ callEndLabel: "Завершить"
12735
+ },
12736
+ sr: {
12737
+ callConnecting: "Povezivanje...",
12738
+ callLive: "Uživo",
12739
+ callPaused: "Pauzirano",
12740
+ callReconnecting: "Ponovno povezivanje",
12741
+ callTranscript: "Transkript poziva",
12742
+ callPause: "Pauziraj mikrofon",
12743
+ callResume: "Nastavi mikrofon",
12744
+ callPauseLabel: "Pauza",
12745
+ callResumeLabel: "Nastavi",
12746
+ callEnd: "Završi poziv",
12747
+ callEndLabel: "Završi"
12748
+ },
12749
+ sk: {
12750
+ callConnecting: "Pripája sa...",
12751
+ callLive: "Naživo",
12752
+ callPaused: "Pozastavené",
12753
+ callReconnecting: "Opätovné pripájanie",
12754
+ callTranscript: "Prepis hovoru",
12755
+ callPause: "Pozastaviť mikrofón",
12756
+ callResume: "Obnoviť mikrofón",
12757
+ callPauseLabel: "Pozastaviť",
12758
+ callResumeLabel: "Pokračovať",
12759
+ callEnd: "Ukončiť hovor",
12760
+ callEndLabel: "Ukončiť"
12761
+ },
12762
+ sl: {
12763
+ callConnecting: "Povezovanje...",
12764
+ callLive: "V živo",
12765
+ callPaused: "Začasno ustavljeno",
12766
+ callReconnecting: "Ponovno povezovanje",
12767
+ callTranscript: "Prepis klica",
12768
+ callPause: "Začasno ustavi mikrofon",
12769
+ callResume: "Nadaljuj z mikrofonom",
12770
+ callPauseLabel: "Premor",
12771
+ callResumeLabel: "Nadaljuj",
12772
+ callEnd: "Končaj klic",
12773
+ callEndLabel: "Končaj"
12774
+ },
12775
+ sv: {
12776
+ callConnecting: "Ansluter...",
12777
+ callLive: "Live",
12778
+ callPaused: "Pausad",
12779
+ callReconnecting: "Återansluter",
12780
+ callTranscript: "Samtalsutskrift",
12781
+ callPause: "Pausa mikrofonen",
12782
+ callResume: "Återuppta mikrofonen",
12783
+ callPauseLabel: "Pausa",
12784
+ callResumeLabel: "Återuppta",
12785
+ callEnd: "Avsluta samtal",
12786
+ callEndLabel: "Avsluta"
12787
+ },
12788
+ th: {
12789
+ callConnecting: "กำลังเชื่อมต่อ...",
12790
+ callLive: "กำลังสนทนา",
12791
+ callPaused: "หยุดชั่วคราว",
12792
+ callReconnecting: "กำลังเชื่อมต่อใหม่",
12793
+ callTranscript: "บันทึกการสนทนา",
12794
+ callPause: "หยุดไมโครโฟนชั่วคราว",
12795
+ callResume: "เปิดไมโครโฟนต่อ",
12796
+ callPauseLabel: "หยุดชั่วคราว",
12797
+ callResumeLabel: "ทำต่อ",
12798
+ callEnd: "วางสาย",
12799
+ callEndLabel: "วางสาย"
12800
+ },
12801
+ tr: {
12802
+ callConnecting: "Bağlanıyor...",
12803
+ callLive: "Canlı",
12804
+ callPaused: "Duraklatıldı",
12805
+ callReconnecting: "Yeniden bağlanıyor",
12806
+ callTranscript: "Arama dökümü",
12807
+ callPause: "Mikrofonu duraklat",
12808
+ callResume: "Mikrofonu sürdür",
12809
+ callPauseLabel: "Duraklat",
12810
+ callResumeLabel: "Sürdür",
12811
+ callEnd: "Aramayı bitir",
12812
+ callEndLabel: "Bitir"
12813
+ },
12814
+ uk: {
12815
+ callConnecting: "Підключення...",
12816
+ callLive: "Наживо",
12817
+ callPaused: "Призупинено",
12818
+ callReconnecting: "Повторне підключення",
12819
+ callTranscript: "Розшифровка дзвінка",
12820
+ callPause: "Призупинити мікрофон",
12821
+ callResume: "Відновити мікрофон",
12822
+ callPauseLabel: "Пауза",
12823
+ callResumeLabel: "Продовжити",
12824
+ callEnd: "Завершити дзвінок",
12825
+ callEndLabel: "Завершити"
12826
+ },
12827
+ ur: {
12828
+ callConnecting: "رابطہ ہو رہا ہے...",
12829
+ callLive: "براہ راست",
12830
+ callPaused: "موقوف",
12831
+ callReconnecting: "دوبارہ رابطہ ہو رہا ہے",
12832
+ callTranscript: "کال کی تحریر",
12833
+ callPause: "مائیکروفون موقوف کریں",
12834
+ callResume: "مائیکروفون دوبارہ شروع کریں",
12835
+ callPauseLabel: "موقوف کریں",
12836
+ callResumeLabel: "دوبارہ شروع کریں",
12837
+ callEnd: "کال ختم کریں",
12838
+ callEndLabel: "ختم کریں"
12839
+ },
12840
+ vi: {
12841
+ callConnecting: "Đang kết nối...",
12842
+ callLive: "Trực tiếp",
12843
+ callPaused: "Đã tạm dừng",
12844
+ callReconnecting: "Đang kết nối lại",
12845
+ callTranscript: "Bản ghi cuộc gọi",
12846
+ callPause: "Tạm dừng micrô",
12847
+ callResume: "Tiếp tục micrô",
12848
+ callPauseLabel: "Tạm dừng",
12849
+ callResumeLabel: "Tiếp tục",
12850
+ callEnd: "Kết thúc cuộc gọi",
12851
+ callEndLabel: "Kết thúc"
12852
+ }
12853
+ };
12261
12854
  const ONBOARDING_PLACEHOLDERS = {
12262
12855
  en: {
12263
12856
  onboardingNamePlaceholder: "Please enter your name",
@@ -12586,7 +13179,7 @@
12586
13179
  const normalized = normalizeLocale(locale);
12587
13180
  const dict = DICTIONARIES[normalized] || EN;
12588
13181
  const onboarding = ONBOARDING_PLACEHOLDERS[normalized];
12589
- return onboarding?.[key] ?? dict[key] ?? A11Y_LABELS[normalized]?.[key] ?? ATTACHMENT_REJECTION_TEXTS[normalized]?.[key] ?? ONBOARDING_PLACEHOLDERS.en[key] ?? A11Y_LABELS.en[key] ?? ATTACHMENT_REJECTION_TEXTS.en[key] ?? EN[key] ?? key;
13182
+ return onboarding?.[key] ?? dict[key] ?? A11Y_LABELS[normalized]?.[key] ?? VOICE_CALL_TEXTS[normalized]?.[key] ?? ATTACHMENT_REJECTION_TEXTS[normalized]?.[key] ?? ONBOARDING_PLACEHOLDERS.en[key] ?? A11Y_LABELS.en[key] ?? VOICE_CALL_TEXTS.en[key] ?? ATTACHMENT_REJECTION_TEXTS.en[key] ?? EN[key] ?? key;
12590
13183
  }
12591
13184
  function createTranslator(locale) {
12592
13185
  const normalized = normalizeLocale(locale);
@@ -12711,6 +13304,99 @@
12711
13304
  return [...prev, makeBubble(text)];
12712
13305
  }
12713
13306
 
13307
+ /**
13308
+ * The card a voice answer puts on the call screen.
13309
+ *
13310
+ * voice-runtime sends `{"a2ui": {"blocks": ["```eshal-ui ...```", ...]}}`
13311
+ * while the agent is still speaking. The blocks are already fenced, so the
13312
+ * chat's markdown renderer shows them unchanged. The card belongs to the last
13313
+ * assistant message and stays on screen until a newer answer has words of
13314
+ * its own.
13315
+ * Mirrors packages/frontend/src/components/chatbot-preview/voiceCard.ts.
13316
+ */
13317
+
13318
+ /** The joined card blocks if the event carries a card, else null. */
13319
+ function voiceCardText(event) {
13320
+ const blocks = event?.a2ui?.blocks;
13321
+ if (!Array.isArray(blocks)) return null;
13322
+ const parts = blocks.filter(b => typeof b === "string" && b.trim() !== "");
13323
+ return parts.length ? parts.join("\n\n") : null;
13324
+ }
13325
+
13326
+ /** The messages with the event's card attached to the last assistant message. */
13327
+ function applyVoiceCard(messages, event) {
13328
+ const card = voiceCardText(event);
13329
+ if (!card) return messages;
13330
+ for (let i = messages.length - 1; i >= 0; i--) {
13331
+ if (messages[i].role === "assistant") {
13332
+ const next = [...messages];
13333
+ next[i] = {
13334
+ ...next[i],
13335
+ a2ui: card
13336
+ };
13337
+ return next;
13338
+ }
13339
+ }
13340
+ return messages;
13341
+ }
13342
+
13343
+ /**
13344
+ * The card on screen: the last card an answer carried. It stays while the
13345
+ * caller speaks and while the next answer is still on its way (dev, 5 Nov
13346
+ * 2026: a payment link vanished the moment the caller asked about it), and
13347
+ * goes once a newer answer has words of its own.
13348
+ */
13349
+ function latestVoiceCard(lines) {
13350
+ for (let i = lines.length - 1; i >= 0; i--) {
13351
+ const line = lines[i];
13352
+ if (line.role !== "assistant") continue;
13353
+ if (line.a2ui) return line.a2ui;
13354
+ if (!line.isProcessing && (line.content || "").trim()) return "";
13355
+ }
13356
+ return "";
13357
+ }
13358
+ const CARD_FENCE = /```[ \t]*(?:eshal-ui|eshal-chart|chart)\b[^\n]*\n[\s\S]*?(?:```|$)/g;
13359
+
13360
+ /**
13361
+ * An answer's words without its cards. On the call screen the card is drawn
13362
+ * below the answer, so its title and body would otherwise show twice.
13363
+ */
13364
+ function withoutCards(text) {
13365
+ return (text || "").replace(CARD_FENCE, "").replace(/\n{3,}/g, "\n\n").trim();
13366
+ }
13367
+
13368
+ // `[7]`, `[7][8]`, `[7, 8]`, `[7-9]`: the same shapes the frontend's
13369
+ // stripCitationMarkers drops (U+2013 written as an escape).
13370
+ const CITATION_MARKERS = /\s*\[\d+(?:\s*[,\-–]\s*\d+)*\](?:\s*\[\d+(?:\s*[,\-–]\s*\d+)*\])*/g;
13371
+
13372
+ /**
13373
+ * The words a call line shows: no cards and no citation markers. The call
13374
+ * screen has no source pills; the chat shows them once the call ends.
13375
+ */
13376
+ function callLineText(text) {
13377
+ return withoutCards(text).replace(CITATION_MARKERS, "").replace(/\s+([.,;:!?])/g, "$1").replace(/[ \t]{2,}/g, " ").trim();
13378
+ }
13379
+
13380
+ /**
13381
+ * A card button whose value is a web address (a payment or check-in link)
13382
+ * opens in a new tab rather than being sent as the caller's next turn.
13383
+ * Returns true when it was a link and was opened.
13384
+ */
13385
+ function openCardLink(value, open = url => {
13386
+ window.open(url, "_blank", "noopener,noreferrer");
13387
+ }) {
13388
+ const text = String(value ?? "").trim();
13389
+ let url;
13390
+ try {
13391
+ url = new URL(text);
13392
+ } catch {
13393
+ return false; // not an address: a choice the agent should hear
13394
+ }
13395
+ if (url.protocol !== "https:" && url.protocol !== "http:") return false;
13396
+ open(url.href);
13397
+ return true;
13398
+ }
13399
+
12714
13400
  /**
12715
13401
  * Replies the widget never streamed itself.
12716
13402
  *
@@ -12937,6 +13623,29 @@
12937
13623
  });
12938
13624
  };
12939
13625
 
13626
+ /**
13627
+ * EV-5013: why the widget refuses to render on this page, or null when it
13628
+ * renders. The refusal used to be silent (ChatWidget returned null with no
13629
+ * log), so an install with an empty allow-list looked identical to a broken
13630
+ * embed. The returned sentence names the reason and the host for one
13631
+ * console.warn.
13632
+ * @param {string[]} allowedDomains - Same list isDomainAllowed checks
13633
+ * @returns {string|null}
13634
+ */
13635
+ const domainRefusalReason = (allowedDomains = []) => {
13636
+ if (typeof window === 'undefined') {
13637
+ return null;
13638
+ }
13639
+ if (isDomainAllowed(allowedDomains)) {
13640
+ return null;
13641
+ }
13642
+ const host = window.location.host.toLowerCase();
13643
+ if (!allowedDomains || allowedDomains.length === 0) {
13644
+ return `[Eshal chat widget] Not rendering on ${host}: no allowed domains are configured for this AI assistant. Add the domain under Channels > Website chat.`;
13645
+ }
13646
+ return `[Eshal chat widget] Not rendering on ${host}: this host is not in the allowed domains for this AI assistant. Add it under Channels > Website chat.`;
13647
+ };
13648
+
12940
13649
  // Field order for onboarding form: name → email → phone (then any others)
12941
13650
  // Lower number = earlier in the form. Name first, then email, then phone.
12942
13651
  // Keys are lowercase so getOnboardingFieldOrder(fieldType) works for any casing.
@@ -13626,6 +14335,9 @@
13626
14335
  // Bidi/Voice state
13627
14336
  const [isConversationLoading, setIsConversationLoading] = reactExports.useState(false);
13628
14337
  const [isVoiceSessionActive, setIsVoiceSessionActive] = reactExports.useState(false);
14338
+ // The call screen's Pause (toggleVoicePause): mic frames are dropped before
14339
+ // the speech gate while true. The socket stays open.
14340
+ const [isVoicePaused, setIsVoicePaused] = reactExports.useState(false);
13629
14341
  const [bidiMessages, setBidiMessages] = reactExports.useState([]);
13630
14342
  const [voiceStatus, setVoiceStatus] = reactExports.useState("idle"); // 'idle' | 'connecting' | 'connected' | 'error'
13631
14343
  const [voiceError, setVoiceError] = reactExports.useState(null);
@@ -13758,9 +14470,14 @@
13758
14470
  });
13759
14471
  };
13760
14472
  const currentInputMessageIdRef = reactExports.useRef(null);
14473
+ // voice-runtime's live turn bubble (inputTranscription.replace). Only its
14474
+ // finished question clears it, never an interruption or a word of the bot's
14475
+ // reply, so a question spoken over the agent shows once.
14476
+ const liveInputMessageIdRef = reactExports.useRef(null);
13761
14477
  const currentAssistantMessageIdRef = reactExports.useRef(null);
13762
14478
  const isAudioReadyRef = reactExports.useRef(false);
13763
14479
  const isVoiceSessionActiveRef = reactExports.useRef(false);
14480
+ const isVoicePausedRef = reactExports.useRef(false);
13764
14481
  reactExports.useRef(null);
13765
14482
  const pendingAssistantUpdateRef = reactExports.useRef(null); // Track pending assistant updates to prevent duplicates
13766
14483
  reactExports.useRef(null); // Track when user started speaking for proper timestamp ordering
@@ -15104,25 +15821,39 @@
15104
15821
  });
15105
15822
  currentInputMessageIdRef.current = null;
15106
15823
  }, []);
15107
- const appendUserTranscription = reactExports.useCallback((text, finished = false) => {
15824
+ const appendUserTranscription = reactExports.useCallback((text, finished = false, replace = false) => {
15108
15825
  // Mark that user has spoken - now we can process assistant responses
15109
15826
  userHasSpokenRef.current = true;
15827
+
15828
+ // voice-runtime sends the whole turn so far each time (replace) and the
15829
+ // turn keeps its own marker; knowledge-api sends chunks to append to the
15830
+ // shared one. On the qa calls of 5 Nov 2026 the caller spoke over the
15831
+ // bot and the interruption cleared the shared marker between the live
15832
+ // words and the finished question, so the question showed twice.
15833
+ const inputIdRef = replace ? liveInputMessageIdRef : currentInputMessageIdRef;
15110
15834
  if (!text || typeof text === 'string' && !text.trim()) {
15111
- if (finished && currentInputMessageIdRef.current) {
15112
- setBidiMessages(prev => prev.map(message => message.id === currentInputMessageIdRef.current ? {
15113
- ...message,
15114
- isProcessing: false
15115
- } : message));
15116
- currentInputMessageIdRef.current = null;
15835
+ if (finished) {
15836
+ // The marker is read and cleared inside the update, like every
15837
+ // other use of it here (see the end of the update below).
15838
+ setBidiMessages(prev => {
15839
+ const doneId = inputIdRef.current;
15840
+ inputIdRef.current = null;
15841
+ if (!doneId) return prev;
15842
+ return prev.map(message => message.id === doneId ? {
15843
+ ...message,
15844
+ isProcessing: false
15845
+ } : message);
15846
+ });
15117
15847
  }
15118
15848
  return;
15119
15849
  }
15120
15850
  const chunk = cleanCJKSpaces(text);
15851
+ const join = previous => replace ? chunk : cleanCJKSpaces(`${previous || ""}${chunk}`);
15121
15852
  setBidiMessages(prev => {
15122
15853
  const prevLength = prev.length;
15123
15854
  let result = [...prev]; // Create new array to avoid mutations
15124
15855
 
15125
- if (!currentInputMessageIdRef.current) {
15856
+ if (!inputIdRef.current) {
15126
15857
  const newId = `bidi-input-${Date.now()}`;
15127
15858
  const latestAssistantMessage = prev.filter(m => m.role === "assistant" && m.metadata?.source === "bidi").sort((a, b) => {
15128
15859
  const timeA = a.timestamp instanceof Date ? a.timestamp.getTime() : new Date(a.timestamp).getTime();
@@ -15149,27 +15880,27 @@
15149
15880
  if (!messageExists) {
15150
15881
  result = [...result, userMessage];
15151
15882
  // Set ref AFTER adding message to result array
15152
- currentInputMessageIdRef.current = newId;
15883
+ inputIdRef.current = newId;
15153
15884
  } else {
15154
15885
  console.warn("[BIDI] appendUserTranscription: message already exists, updating instead", {
15155
15886
  messageId: newId
15156
15887
  });
15157
- currentInputMessageIdRef.current = newId;
15888
+ inputIdRef.current = newId;
15158
15889
  result = result.map(msg => msg.id === newId ? {
15159
15890
  ...msg,
15160
- content: `${msg.content || ""}${chunk}`,
15891
+ content: replace ? chunk : `${msg.content || ""}${chunk}`,
15161
15892
  isProcessing: !finished
15162
15893
  } : msg);
15163
15894
  }
15164
15895
  } else {
15165
15896
  // Update existing user message
15166
- const userMessageExists = result.some(m => m.id === currentInputMessageIdRef.current);
15897
+ const userMessageExists = result.some(m => m.id === inputIdRef.current);
15167
15898
  if (userMessageExists) {
15168
15899
  result = result.map(message => {
15169
- if (message.id !== currentInputMessageIdRef.current) {
15900
+ if (message.id !== inputIdRef.current) {
15170
15901
  return message;
15171
15902
  }
15172
- const combined = cleanCJKSpaces(`${message.content || ""}${chunk}`);
15903
+ const combined = join(message.content);
15173
15904
  return {
15174
15905
  ...message,
15175
15906
  content: combined,
@@ -15184,12 +15915,12 @@
15184
15915
  });
15185
15916
  } else {
15186
15917
  console.error("[BIDI] appendUserTranscription: ERROR - user message not found!", {
15187
- expectedId: currentInputMessageIdRef.current,
15918
+ expectedId: inputIdRef.current,
15188
15919
  existingIds: result.map(m => m.id)
15189
15920
  });
15190
15921
  // Message was lost - create a new one
15191
15922
  const newId = `bidi-input-${Date.now()}`;
15192
- currentInputMessageIdRef.current = newId;
15923
+ inputIdRef.current = newId;
15193
15924
  const userMessage = createMessage({
15194
15925
  id: newId,
15195
15926
  role: "user",
@@ -15207,6 +15938,14 @@
15207
15938
  }
15208
15939
  }
15209
15940
 
15941
+ // A finished turn clears its marker here, inside the update that read
15942
+ // it. React can run this update after the call returns; clearing the
15943
+ // marker outside it then let the update see no marker and add the
15944
+ // finished question as a second bubble.
15945
+ if (finished) {
15946
+ inputIdRef.current = null;
15947
+ }
15948
+
15210
15949
  // CRITICAL: Safety check - never return fewer messages than we started with
15211
15950
  if (result.length < prevLength) {
15212
15951
  console.error("[BIDI] appendUserTranscription: CRITICAL ERROR - losing messages!", {
@@ -15228,7 +15967,6 @@
15228
15967
  return result;
15229
15968
  });
15230
15969
  if (finished) {
15231
- currentInputMessageIdRef.current = null;
15232
15970
  setIsLoading(true);
15233
15971
  }
15234
15972
  }, []);
@@ -15450,16 +16188,12 @@
15450
16188
  });
15451
16189
  currentAssistantMessageIdRef.current = null;
15452
16190
  pendingAssistantUpdateRef.current = null;
15453
- } else {
15454
- // Clear pending update ref after state update completes to allow new updates
15455
- // Use a microtask to clear after React has processed the update
15456
- const keyToClear = updateKey;
15457
- Promise.resolve().then(() => {
15458
- if (pendingAssistantUpdateRef.current === keyToClear) {
15459
- pendingAssistantUpdateRef.current = null;
15460
- }
15461
- });
15462
16191
  }
16192
+ // A partial transcript used to clear pendingAssistantUpdateRef in a
16193
+ // microtask keyed on `updateKey`, a name never defined here. It threw on
16194
+ // every partial, and the socket handler dropped the rest of that message
16195
+ // (its audio, its prompts). Nothing sets the ref to a key, so there is
16196
+ // nothing to clear.
15463
16197
  }, []);
15464
16198
  const handleContentParts = reactExports.useCallback((parts, finished = false, audioOnly = false) => {
15465
16199
  console.log("[BIDI] handleContentParts called", {
@@ -15547,11 +16281,14 @@
15547
16281
  setIsVoiceSessionActive(false);
15548
16282
  setIsLoading(false);
15549
16283
  isVoiceSessionActiveRef.current = false;
16284
+ isVoicePausedRef.current = false;
16285
+ setIsVoicePaused(false);
15550
16286
  setVoiceStatus("idle");
15551
16287
  setVoiceError(null);
15552
16288
 
15553
16289
  // Reset userHasSpoken flag when stopping session
15554
16290
  userHasSpokenRef.current = false;
16291
+ liveInputMessageIdRef.current = null;
15555
16292
  pendingVoiceSourcesRef.current = null;
15556
16293
  if (bargeInTimerRef.current) clearTimeout(bargeInTimerRef.current);
15557
16294
  bargeInTimerRef.current = null;
@@ -15646,6 +16383,13 @@
15646
16383
  });
15647
16384
  return;
15648
16385
  }
16386
+
16387
+ // Paused: the agent is not heard and its words are not shown. Audio
16388
+ // that arrives now is dropped, not queued for after the pause.
16389
+ if (isVoicePausedRef.current && (event.content?.parts || event.outputTranscription || event.greeting)) {
16390
+ if (event.turnComplete) handleTurnComplete();
16391
+ return;
16392
+ }
15649
16393
  if (event.interrupted) {
15650
16394
  console.log("[BIDI] handleBidiEvent: processing interrupted");
15651
16395
  handleInterrupted();
@@ -15665,7 +16409,7 @@
15665
16409
  // Only call appendUserTranscription if there's actual text or if it's finished
15666
16410
  if (transcriptionText || transcriptionFinished) {
15667
16411
  updateActivity(organizationId);
15668
- appendUserTranscription(transcriptionText, transcriptionFinished);
16412
+ appendUserTranscription(transcriptionText, transcriptionFinished, Boolean(event.inputTranscription.replace));
15669
16413
  } else {
15670
16414
  console.warn("[BIDI] handleBidiEvent: inputTranscription event has no text and not finished", event.inputTranscription);
15671
16415
  }
@@ -15719,6 +16463,14 @@
15719
16463
  });
15720
16464
  }
15721
16465
 
16466
+ // The card a voice answer puts on the call screen (lib/voiceCard.js).
16467
+ // It is silent, so it is kept even while paused; finalTranscript only
16468
+ // replaces content, so the card survives it.
16469
+ if (voiceCardText(event)) {
16470
+ setBidiMessages(prev => applyVoiceCard(prev, event));
16471
+ return;
16472
+ }
16473
+
15722
16474
  // Voice citations (round 3): the streaming voice path fans out ADK
15723
16475
  // *partial* deltas as the live transcript, but only the FINAL answer
15724
16476
  // carries the trailing `[N]` markers, so the accumulated transcript had no
@@ -15842,7 +16594,9 @@
15842
16594
  }
15843
16595
  }, [appendAssistantContent, appendUserTranscription, handleContentParts, handleInterrupted, handleTurnComplete, stopVoiceSession, settleBargeIn]);
15844
16596
  const handleRecorderAudio = reactExports.useCallback(pcmData => {
15845
- if (!isVoiceSessionActiveRef.current) {
16597
+ // Frames after the session stopped, or while the call is paused, are
16598
+ // dropped before the gate sees them.
16599
+ if (!isVoiceSessionActiveRef.current || isVoicePausedRef.current) {
15846
16600
  return;
15847
16601
  }
15848
16602
  // Route mic frames through the VAD gate: it forwards only voiced frames
@@ -16080,8 +16834,11 @@
16080
16834
 
16081
16835
  // Reset userHasSpoken flag when starting new session
16082
16836
  userHasSpokenRef.current = false;
16837
+ liveInputMessageIdRef.current = null;
16083
16838
  greetingActiveRef.current = false;
16084
16839
  voiceWelcomeIdRef.current = null;
16840
+ isVoicePausedRef.current = false;
16841
+ setIsVoicePaused(false);
16085
16842
  setBidiMessages(prev => {
16086
16843
  // Don't add welcome message if there are already any messages (either bidi or text)
16087
16844
  // This prevents showing welcome message when turning voice on again after a conversation
@@ -16125,6 +16882,33 @@
16125
16882
  }
16126
16883
  void startVoiceSession();
16127
16884
  }, [isVoiceSessionActive, startVoiceSession, stopVoiceSession, voiceStatus]);
16885
+
16886
+ // The call screen's Pause stops sending mic audio without closing the
16887
+ // socket, and silences the agent: what it was saying stops now. A turn the
16888
+ // caller was in the middle of is closed with audio_end, so the server does
16889
+ // not wait on audio that will not come.
16890
+ const toggleVoicePause = reactExports.useCallback(() => {
16891
+ const next = !isVoicePausedRef.current;
16892
+ isVoicePausedRef.current = next;
16893
+ setIsVoicePaused(next);
16894
+ if (!next) return;
16895
+ audioPlayerNodeRef.current?.port.postMessage({
16896
+ command: "endOfAudio"
16897
+ });
16898
+ if (bargeInTimerRef.current) clearTimeout(bargeInTimerRef.current);
16899
+ bargeInTimerRef.current = null;
16900
+ bargeInPendingRef.current = false;
16901
+ const gate = speechGateRef.current;
16902
+ if (gate?.isSpeaking()) {
16903
+ const ws = websocketRef.current;
16904
+ if (ws && ws.readyState === WebSocket.OPEN) {
16905
+ ws.send(JSON.stringify({
16906
+ type: "audio_end"
16907
+ }));
16908
+ }
16909
+ }
16910
+ gate?.reset();
16911
+ }, []);
16128
16912
  const sendBidiTextMessage = reactExports.useCallback(text => {
16129
16913
  const trimmed = text.trim();
16130
16914
  if (!trimmed) {
@@ -16396,6 +17180,14 @@
16396
17180
  }, [organizationId, inactivityTimeoutValue, inactivityTimeoutUnit, bidiSessionId]);
16397
17181
  const memoizedQuickQuestions = reactExports.useMemo(() => quickQuestions, [quickQuestions]);
16398
17182
 
17183
+ // What the call screen's glow reads (hooks/useVoiceCallLevel.js): the
17184
+ // player it taps and the speech gate. Refs only, so the object is stable.
17185
+ const voiceLevelSource = reactExports.useMemo(() => ({
17186
+ playerNodeRef: audioPlayerNodeRef,
17187
+ playerContextRef: audioPlayerContextRef,
17188
+ speechGateRef
17189
+ }), []);
17190
+
16399
17191
  // Merge and sort messages from both sources (text and voice) by timestamp
16400
17192
  // This ensures all messages persist regardless of voice session state
16401
17193
  const activeMessages = reactExports.useMemo(() => mergeTranscript(messages, bidiMessages), [bidiMessages, messages]);
@@ -16439,6 +17231,10 @@
16439
17231
  voiceStatus,
16440
17232
  voiceError,
16441
17233
  voiceConclusionForCsat,
17234
+ // The voice call screen: the call's own lines, Pause, and the glow's source.
17235
+ bidiMessages,
17236
+ isVoicePaused,
17237
+ voiceLevelSource,
16442
17238
  // Onboarding state
16443
17239
  onboardingQuestions,
16444
17240
  onboardingActive,
@@ -16466,6 +17262,7 @@
16466
17262
  handleDecision,
16467
17263
  // Bidi/Voice actions
16468
17264
  handleVoiceToggle,
17265
+ toggleVoicePause,
16469
17266
  sendBidiTextMessage,
16470
17267
  // Session lifecycle
16471
17268
  sessionExpiringSoon,
@@ -16616,7 +17413,7 @@
16616
17413
  * See the LICENSE file in the root directory of this source tree.
16617
17414
  */
16618
17415
 
16619
- const __iconNode$j = [["path", {
17416
+ const __iconNode$m = [["path", {
16620
17417
  d: "M2 10v3",
16621
17418
  key: "1fnikh"
16622
17419
  }], ["path", {
@@ -16635,7 +17432,7 @@
16635
17432
  d: "M22 10v3",
16636
17433
  key: "154ddg"
16637
17434
  }]];
16638
- const AudioLines = createLucideIcon("audio-lines", __iconNode$j);
17435
+ const AudioLines = createLucideIcon("audio-lines", __iconNode$m);
16639
17436
 
16640
17437
  /**
16641
17438
  * @license lucide-react v0.575.0 - ISC
@@ -16644,11 +17441,11 @@
16644
17441
  * See the LICENSE file in the root directory of this source tree.
16645
17442
  */
16646
17443
 
16647
- const __iconNode$i = [["path", {
17444
+ const __iconNode$l = [["path", {
16648
17445
  d: "M20 6 9 17l-5-5",
16649
17446
  key: "1gmf2c"
16650
17447
  }]];
16651
- const Check = createLucideIcon("check", __iconNode$i);
17448
+ const Check = createLucideIcon("check", __iconNode$l);
16652
17449
 
16653
17450
  /**
16654
17451
  * @license lucide-react v0.575.0 - ISC
@@ -16657,11 +17454,11 @@
16657
17454
  * See the LICENSE file in the root directory of this source tree.
16658
17455
  */
16659
17456
 
16660
- const __iconNode$h = [["path", {
17457
+ const __iconNode$k = [["path", {
16661
17458
  d: "m15 18-6-6 6-6",
16662
17459
  key: "1wnfg3"
16663
17460
  }]];
16664
- const ChevronLeft = createLucideIcon("chevron-left", __iconNode$h);
17461
+ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$k);
16665
17462
 
16666
17463
  /**
16667
17464
  * @license lucide-react v0.575.0 - ISC
@@ -16670,11 +17467,11 @@
16670
17467
  * See the LICENSE file in the root directory of this source tree.
16671
17468
  */
16672
17469
 
16673
- const __iconNode$g = [["path", {
17470
+ const __iconNode$j = [["path", {
16674
17471
  d: "m9 18 6-6-6-6",
16675
17472
  key: "mthhwq"
16676
17473
  }]];
16677
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$g);
17474
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$j);
16678
17475
 
16679
17476
  /**
16680
17477
  * @license lucide-react v0.575.0 - ISC
@@ -16683,7 +17480,7 @@
16683
17480
  * See the LICENSE file in the root directory of this source tree.
16684
17481
  */
16685
17482
 
16686
- const __iconNode$f = [["circle", {
17483
+ const __iconNode$i = [["circle", {
16687
17484
  cx: "12",
16688
17485
  cy: "12",
16689
17486
  r: "10",
@@ -16701,7 +17498,7 @@
16701
17498
  y2: "16",
16702
17499
  key: "4dfq90"
16703
17500
  }]];
16704
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$f);
17501
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$i);
16705
17502
 
16706
17503
  /**
16707
17504
  * @license lucide-react v0.575.0 - ISC
@@ -16710,7 +17507,7 @@
16710
17507
  * See the LICENSE file in the root directory of this source tree.
16711
17508
  */
16712
17509
 
16713
- const __iconNode$e = [["rect", {
17510
+ const __iconNode$h = [["rect", {
16714
17511
  width: "14",
16715
17512
  height: "14",
16716
17513
  x: "8",
@@ -16722,7 +17519,7 @@
16722
17519
  d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",
16723
17520
  key: "zix9uf"
16724
17521
  }]];
16725
- const Copy = createLucideIcon("copy", __iconNode$e);
17522
+ const Copy = createLucideIcon("copy", __iconNode$h);
16726
17523
 
16727
17524
  /**
16728
17525
  * @license lucide-react v0.575.0 - ISC
@@ -16731,7 +17528,7 @@
16731
17528
  * See the LICENSE file in the root directory of this source tree.
16732
17529
  */
16733
17530
 
16734
- const __iconNode$d = [["circle", {
17531
+ const __iconNode$g = [["circle", {
16735
17532
  cx: "12",
16736
17533
  cy: "12",
16737
17534
  r: "1",
@@ -16747,7 +17544,7 @@
16747
17544
  r: "1",
16748
17545
  key: "1pcz8c"
16749
17546
  }]];
16750
- const Ellipsis = createLucideIcon("ellipsis", __iconNode$d);
17547
+ const Ellipsis = createLucideIcon("ellipsis", __iconNode$g);
16751
17548
 
16752
17549
  /**
16753
17550
  * @license lucide-react v0.575.0 - ISC
@@ -16756,7 +17553,7 @@
16756
17553
  * See the LICENSE file in the root directory of this source tree.
16757
17554
  */
16758
17555
 
16759
- const __iconNode$c = [["path", {
17556
+ const __iconNode$f = [["path", {
16760
17557
  d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",
16761
17558
  key: "1oefj6"
16762
17559
  }], ["path", {
@@ -16772,7 +17569,7 @@
16772
17569
  d: "M16 17H8",
16773
17570
  key: "z1uh3a"
16774
17571
  }]];
16775
- const FileText = createLucideIcon("file-text", __iconNode$c);
17572
+ const FileText = createLucideIcon("file-text", __iconNode$f);
16776
17573
 
16777
17574
  /**
16778
17575
  * @license lucide-react v0.575.0 - ISC
@@ -16781,11 +17578,11 @@
16781
17578
  * See the LICENSE file in the root directory of this source tree.
16782
17579
  */
16783
17580
 
16784
- const __iconNode$b = [["path", {
17581
+ const __iconNode$e = [["path", {
16785
17582
  d: "M21 12a9 9 0 1 1-6.219-8.56",
16786
17583
  key: "13zald"
16787
17584
  }]];
16788
- const LoaderCircle = createLucideIcon("loader-circle", __iconNode$b);
17585
+ const LoaderCircle = createLucideIcon("loader-circle", __iconNode$e);
16789
17586
 
16790
17587
  /**
16791
17588
  * @license lucide-react v0.575.0 - ISC
@@ -16794,11 +17591,11 @@
16794
17591
  * See the LICENSE file in the root directory of this source tree.
16795
17592
  */
16796
17593
 
16797
- const __iconNode$a = [["path", {
17594
+ const __iconNode$d = [["path", {
16798
17595
  d: "M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",
16799
17596
  key: "1sd12s"
16800
17597
  }]];
16801
- const MessageCircle = createLucideIcon("message-circle", __iconNode$a);
17598
+ const MessageCircle = createLucideIcon("message-circle", __iconNode$d);
16802
17599
 
16803
17600
  /**
16804
17601
  * @license lucide-react v0.575.0 - ISC
@@ -16807,11 +17604,11 @@
16807
17604
  * See the LICENSE file in the root directory of this source tree.
16808
17605
  */
16809
17606
 
16810
- const __iconNode$9 = [["path", {
17607
+ const __iconNode$c = [["path", {
16811
17608
  d: "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",
16812
17609
  key: "kfwtm"
16813
17610
  }]];
16814
- const Moon = createLucideIcon("moon", __iconNode$9);
17611
+ const Moon = createLucideIcon("moon", __iconNode$c);
16815
17612
 
16816
17613
  /**
16817
17614
  * @license lucide-react v0.575.0 - ISC
@@ -16820,11 +17617,67 @@
16820
17617
  * See the LICENSE file in the root directory of this source tree.
16821
17618
  */
16822
17619
 
16823
- const __iconNode$8 = [["path", {
17620
+ const __iconNode$b = [["path", {
16824
17621
  d: "m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551",
16825
17622
  key: "1miecu"
16826
17623
  }]];
16827
- const Paperclip = createLucideIcon("paperclip", __iconNode$8);
17624
+ const Paperclip = createLucideIcon("paperclip", __iconNode$b);
17625
+
17626
+ /**
17627
+ * @license lucide-react v0.575.0 - ISC
17628
+ *
17629
+ * This source code is licensed under the ISC license.
17630
+ * See the LICENSE file in the root directory of this source tree.
17631
+ */
17632
+
17633
+ const __iconNode$a = [["rect", {
17634
+ x: "14",
17635
+ y: "3",
17636
+ width: "5",
17637
+ height: "18",
17638
+ rx: "1",
17639
+ key: "kaeet6"
17640
+ }], ["rect", {
17641
+ x: "5",
17642
+ y: "3",
17643
+ width: "5",
17644
+ height: "18",
17645
+ rx: "1",
17646
+ key: "1wsw3u"
17647
+ }]];
17648
+ const Pause = createLucideIcon("pause", __iconNode$a);
17649
+
17650
+ /**
17651
+ * @license lucide-react v0.575.0 - ISC
17652
+ *
17653
+ * This source code is licensed under the ISC license.
17654
+ * See the LICENSE file in the root directory of this source tree.
17655
+ */
17656
+
17657
+ const __iconNode$9 = [["path", {
17658
+ d: "M10.1 13.9a14 14 0 0 0 3.732 2.668 1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2 18 18 0 0 1-12.728-5.272",
17659
+ key: "1wngk7"
17660
+ }], ["path", {
17661
+ d: "M22 2 2 22",
17662
+ key: "y4kqgn"
17663
+ }], ["path", {
17664
+ d: "M4.76 13.582A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 .244.473",
17665
+ key: "10hv5p"
17666
+ }]];
17667
+ const PhoneOff = createLucideIcon("phone-off", __iconNode$9);
17668
+
17669
+ /**
17670
+ * @license lucide-react v0.575.0 - ISC
17671
+ *
17672
+ * This source code is licensed under the ISC license.
17673
+ * See the LICENSE file in the root directory of this source tree.
17674
+ */
17675
+
17676
+ const __iconNode$8 = [["path", {
17677
+ d: "M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",
17678
+ key: "10ikf1"
17679
+ }]];
17680
+ const Play = createLucideIcon("play", __iconNode$8);
16828
17681
 
16829
17682
  /**
16830
17683
  * @license lucide-react v0.575.0 - ISC
@@ -17425,7 +18278,7 @@
17425
18278
  }
17426
18279
  var jsxRuntimeExports = jsxRuntime.exports;
17427
18280
 
17428
- const MarkdownRenderer = /*#__PURE__*/reactExports.lazy(loadMarkdownRenderer);
18281
+ const MarkdownRenderer$1 = /*#__PURE__*/reactExports.lazy(loadMarkdownRenderer);
17429
18282
 
17430
18283
  // The IIFE build's chunk loader does a real network fetch for a sibling
17431
18284
  // script file (unlike the previous inlined-everything build, where the
@@ -17610,7 +18463,7 @@
17610
18463
  fontFamily: fontFamily,
17611
18464
  fontSize: fontSize
17612
18465
  }),
17613
- children: /*#__PURE__*/jsxRuntimeExports.jsx(MarkdownRenderer, {
18466
+ children: /*#__PURE__*/jsxRuntimeExports.jsx(MarkdownRenderer$1, {
17614
18467
  content: displayedContent,
17615
18468
  isStreaming: isStreaming,
17616
18469
  isDark: isDark,
@@ -22183,6 +23036,423 @@
22183
23036
  });
22184
23037
  };
22185
23038
 
23039
+ /** The caller's level while the speech gate holds a voiced turn. */
23040
+ const CALLER_SPEAKING_LEVEL = 0.6;
23041
+ /** Below this the agent's output counts as silence. */
23042
+ const AGENT_SILENCE = 0.02;
23043
+ const FRAME_MS = 66;
23044
+ const QUIET = {
23045
+ level: 0,
23046
+ speaker: "none"
23047
+ };
23048
+
23049
+ /** Root mean square of an analyser's time-domain bytes, scaled to 0..1. */
23050
+ function levelFromTimeDomain(bytes) {
23051
+ if (!bytes || bytes.length === 0) return 0;
23052
+ let sum = 0;
23053
+ for (let i = 0; i < bytes.length; i++) {
23054
+ const v = (bytes[i] - 128) / 128;
23055
+ sum += v * v;
23056
+ }
23057
+ // Speech RMS sits well under 0.5; scale so normal speech fills the band.
23058
+ return Math.min(1, Math.sqrt(sum / bytes.length) * 3);
23059
+ }
23060
+
23061
+ /**
23062
+ * The glow band's level for the call screen: `{ level: 0..1, speaker }` with
23063
+ * speaker "agent", "caller" or "none". The agent's level is read from an
23064
+ * AnalyserNode tapped off the existing player worklet (a read-only branch,
23065
+ * the playback path is unchanged). The caller's level comes from the existing
23066
+ * speech gate's isSpeaking(), so no new mic processing is added.
23067
+ * Mirrors packages/frontend/src/components/chatbot-preview/useVoiceCallLevel.ts.
23068
+ *
23069
+ * `source` holds useChatState's refs: playerNodeRef, playerContextRef and
23070
+ * speechGateRef.
23071
+ */
23072
+ function useVoiceCallLevel(active, source) {
23073
+ const [state, setState] = reactExports.useState(QUIET);
23074
+ reactExports.useEffect(() => {
23075
+ if (!active || !source || typeof window === "undefined") return undefined;
23076
+ const {
23077
+ playerNodeRef,
23078
+ playerContextRef,
23079
+ speechGateRef
23080
+ } = source;
23081
+ let analyser = null;
23082
+ let tappedNode = null;
23083
+ let buffer = null;
23084
+ const ensureAnalyser = () => {
23085
+ const node = playerNodeRef?.current;
23086
+ const ctx = playerContextRef?.current;
23087
+ if (!node || !ctx || node === tappedNode) return;
23088
+ try {
23089
+ analyser = ctx.createAnalyser();
23090
+ analyser.fftSize = 512;
23091
+ node.connect(analyser);
23092
+ tappedNode = node;
23093
+ buffer = new Uint8Array(analyser.fftSize);
23094
+ } catch {
23095
+ analyser = null;
23096
+ }
23097
+ };
23098
+ const tick = () => {
23099
+ ensureAnalyser();
23100
+ let agent = 0;
23101
+ if (analyser && buffer) {
23102
+ try {
23103
+ analyser.getByteTimeDomainData(buffer);
23104
+ agent = levelFromTimeDomain(buffer);
23105
+ } catch {
23106
+ agent = 0; // the player's context was closed under us
23107
+ }
23108
+ }
23109
+ const callerSpeaking = Boolean(speechGateRef?.current?.isSpeaking?.());
23110
+ let next;
23111
+ if (agent > AGENT_SILENCE) next = {
23112
+ level: agent,
23113
+ speaker: "agent"
23114
+ };else if (callerSpeaking) next = {
23115
+ level: CALLER_SPEAKING_LEVEL,
23116
+ speaker: "caller"
23117
+ };else next = QUIET;
23118
+ setState(prev => prev.speaker === next.speaker && Math.abs(prev.level - next.level) < 0.03 ? prev : next);
23119
+ };
23120
+ const id = window.setInterval(tick, FRAME_MS);
23121
+ return () => {
23122
+ window.clearInterval(id);
23123
+ if (tappedNode && analyser) {
23124
+ try {
23125
+ tappedNode.disconnect(analyser);
23126
+ } catch {
23127
+ /* the player was already torn down */
23128
+ }
23129
+ }
23130
+ setState(QUIET);
23131
+ };
23132
+ }, [active, source]);
23133
+ return state;
23134
+ }
23135
+
23136
+ const MarkdownRenderer = /*#__PURE__*/reactExports.lazy(loadMarkdownRenderer);
23137
+
23138
+ /**
23139
+ * The voice call screen: while a voice session is active it takes the place of
23140
+ * the message list and the input. A status pill with the call time, the
23141
+ * agent's latest answer large (with the card it put on screen), the caller's
23142
+ * latest words above the controls, and a glow at the bottom that follows who
23143
+ * is speaking. When the call ends the chat returns with the call's lines.
23144
+ * Mirrors packages/frontend/src/components/chatbot-preview/VoiceCallView.tsx.
23145
+ */
23146
+
23147
+ /** The call status for the hook's voiceStatus while a session is active. */
23148
+ function voiceCallStatus(voiceStatus, isPaused) {
23149
+ if (voiceStatus === "connecting") return "connecting";
23150
+ if (voiceStatus === "connected") return isPaused ? "paused" : "live";
23151
+ // Active but the socket closed: the hook is waiting to reconnect.
23152
+ return "reconnecting";
23153
+ }
23154
+ function formatCallTime(totalSeconds) {
23155
+ const s = Math.max(0, Math.floor(totalSeconds));
23156
+ const mm = Math.floor(s / 60);
23157
+ const ss = s % 60;
23158
+ return `${String(mm).padStart(2, "0")}:${String(ss).padStart(2, "0")}`;
23159
+ }
23160
+ const DEFAULT_PRIMARY = "#1d4ed8";
23161
+
23162
+ /**
23163
+ * The agent's brand colour at an alpha, for the glow. Hex colours become
23164
+ * rgba(); any other CSS colour is mixed with transparent.
23165
+ */
23166
+ function withAlpha(color, alpha) {
23167
+ const value = String(color || DEFAULT_PRIMARY).trim();
23168
+ const hex = value.replace(/^#/, "");
23169
+ if (/^([0-9a-f]{3}|[0-9a-f]{6})$/i.test(hex)) {
23170
+ const full = hex.length === 3 ? hex.split("").map(c => c + c).join("") : hex;
23171
+ const n = parseInt(full, 16);
23172
+ return `rgba(${n >> 16 & 255}, ${n >> 8 & 255}, ${n & 255}, ${alpha})`;
23173
+ }
23174
+ return `color-mix(in srgb, ${value} ${Math.round(alpha * 100)}%, transparent)`;
23175
+ }
23176
+ function usePrefersReducedMotion() {
23177
+ const [reduced, setReduced] = reactExports.useState(false);
23178
+ reactExports.useEffect(() => {
23179
+ if (typeof window === "undefined" || !window.matchMedia) return undefined;
23180
+ const mq = window.matchMedia("(prefers-reduced-motion: reduce)");
23181
+ setReduced(Boolean(mq.matches));
23182
+ const onChange = e => setReduced(e.matches);
23183
+ mq.addEventListener?.("change", onChange);
23184
+ return () => mq.removeEventListener?.("change", onChange);
23185
+ }, []);
23186
+ return reduced;
23187
+ }
23188
+
23189
+ /**
23190
+ * Seconds the call has been running: holds at 0 while connecting and stands
23191
+ * still while paused, so a paused call does not run up its time.
23192
+ */
23193
+ function useCallTimer(running) {
23194
+ const totalRef = reactExports.useRef(0); // ms counted before the current running stretch
23195
+ const [seconds, setSeconds] = reactExports.useState(0);
23196
+ reactExports.useEffect(() => {
23197
+ if (!running) return undefined;
23198
+ const since = Date.now();
23199
+ const update = () => setSeconds(Math.floor((totalRef.current + Date.now() - since) / 1000));
23200
+ update();
23201
+ const id = window.setInterval(update, 1000);
23202
+ return () => {
23203
+ window.clearInterval(id);
23204
+ totalRef.current += Date.now() - since;
23205
+ };
23206
+ }, [running]);
23207
+ return seconds;
23208
+ }
23209
+
23210
+ // The card falls back to nothing if the markdown chunk fails to load; the
23211
+ // call itself carries on. Keyed by the card, so a new card gets a new try.
23212
+ class CardBoundary extends reactExports.Component {
23213
+ state = {
23214
+ failed: false
23215
+ };
23216
+ static getDerivedStateFromError() {
23217
+ return {
23218
+ failed: true
23219
+ };
23220
+ }
23221
+ componentDidCatch(error) {
23222
+ // eslint-disable-next-line no-console
23223
+ console.error("[widget] call card failed to render:", error);
23224
+ }
23225
+ render() {
23226
+ return this.state.failed ? null : this.props.children;
23227
+ }
23228
+ }
23229
+
23230
+ // Three soft lights in the agent's brand colour, offset so their drift
23231
+ // overlaps.
23232
+ const GLOW_BLOBS = [{
23233
+ className: "-bottom-1/3 -left-[15%] h-[120%] w-[70%]",
23234
+ alpha: 0.7,
23235
+ animation: "animate-voice-glow"
23236
+ }, {
23237
+ className: "-bottom-1/3 left-[20%] h-[130%] w-[60%]",
23238
+ alpha: 0.45,
23239
+ animation: "animate-voice-glow-slow"
23240
+ }, {
23241
+ className: "-bottom-1/3 -right-[15%] h-[120%] w-[70%]",
23242
+ alpha: 0.2,
23243
+ animation: "animate-voice-glow"
23244
+ }];
23245
+ const STATUS_KEY = {
23246
+ connecting: "callConnecting",
23247
+ live: "callLive",
23248
+ paused: "callPaused",
23249
+ reconnecting: "callReconnecting"
23250
+ };
23251
+ function latestLine(lines, role) {
23252
+ for (let i = lines.length - 1; i >= 0; i--) {
23253
+ if (lines[i].role === "user" !== (role === "user")) continue;
23254
+ const text = callLineText(lines[i].content || "");
23255
+ if (text) return text;
23256
+ }
23257
+ return "";
23258
+ }
23259
+ function VoiceCallView({
23260
+ status,
23261
+ agentName,
23262
+ primaryColor,
23263
+ lines = [],
23264
+ level = 0,
23265
+ speaker = "none",
23266
+ isPaused = false,
23267
+ onTogglePause,
23268
+ onEnd,
23269
+ isDark = false,
23270
+ isRtl = false,
23271
+ errorText,
23272
+ onCardAction,
23273
+ defaultLanguage = "en",
23274
+ fontFamily
23275
+ }) {
23276
+ const t = reactExports.useMemo(() => createTranslator(defaultLanguage), [defaultLanguage]);
23277
+ const reducedMotion = usePrefersReducedMotion();
23278
+ const seconds = useCallTimer(status !== "connecting" && !isPaused);
23279
+ const scrollRef = reactExports.useRef(null);
23280
+ const lastContent = lines.length ? lines[lines.length - 1].content : "";
23281
+ const lastAgent = latestLine(lines, "agent");
23282
+ const lastCaller = latestLine(lines, "user");
23283
+ const card = latestVoiceCard(lines);
23284
+ reactExports.useEffect(() => {
23285
+ const el = scrollRef.current;
23286
+ if (el) el.scrollTop = el.scrollHeight;
23287
+ }, [lines.length, lastContent]);
23288
+
23289
+ // With reduced motion the band holds one gentle level instead of following
23290
+ // the audio.
23291
+ const shown = isPaused ? 0 : reducedMotion ? speaker === "none" ? 0.15 : 0.4 : level;
23292
+ // Silence is a low, faint glow; speech lifts and brightens it.
23293
+ const glowOpacity = isPaused ? 0.25 : 0.45 + shown * 0.55;
23294
+ const glowScale = 0.7 + shown * 0.3;
23295
+ const pulsing = status === "live" && !reducedMotion;
23296
+ const dotColor = status === "live" ? "bg-status-success" : status === "paused" ? "bg-gray-400" : "bg-status-warning";
23297
+ const labelClass = cn("text-xs font-medium", isDark ? "text-gray-200" : "text-slate-700");
23298
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
23299
+ "data-testid": "voice-call-view",
23300
+ "data-reduced-motion": reducedMotion ? "true" : "false",
23301
+ dir: isRtl ? "rtl" : "ltr",
23302
+ className: cn("flex-1 min-h-0 flex flex-col", isDark ? "bg-gray-900 text-gray-100" : "bg-white text-gray-900"),
23303
+ style: fontFamily ? {
23304
+ fontFamily
23305
+ } : undefined,
23306
+ children: [/*#__PURE__*/jsxRuntimeExports.jsxs("div", {
23307
+ className: "flex items-center justify-center gap-2 pt-3 pb-2 px-4 flex-shrink-0",
23308
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("span", {
23309
+ className: "sr-only",
23310
+ children: agentName
23311
+ }), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
23312
+ role: "status",
23313
+ "data-testid": "voice-call-status",
23314
+ className: cn(
23315
+ // border-solid: the widget runs without Tailwind's preflight, so
23316
+ // `border` alone sets only the width.
23317
+ "inline-flex items-center gap-1.5 rounded-full border border-solid px-2.5 py-0.5 text-xs font-medium", isDark ? "border-gray-700 bg-gray-800" : "border-slate-200 bg-slate-50"),
23318
+ children: [/*#__PURE__*/jsxRuntimeExports.jsxs("span", {
23319
+ className: "relative flex h-2 w-2",
23320
+ children: [pulsing && /*#__PURE__*/jsxRuntimeExports.jsx("span", {
23321
+ "data-testid": "voice-call-pulse",
23322
+ className: cn("absolute inline-flex h-full w-full rounded-full opacity-60 animate-ping", dotColor)
23323
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("span", {
23324
+ className: cn("relative inline-flex h-2 w-2 rounded-full", dotColor)
23325
+ })]
23326
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("span", {
23327
+ children: t(STATUS_KEY[status] || STATUS_KEY.reconnecting)
23328
+ }), status !== "connecting" && /*#__PURE__*/jsxRuntimeExports.jsx("span", {
23329
+ "data-testid": "voice-call-timer",
23330
+ dir: "ltr",
23331
+ className: "tabular-nums text-gray-500",
23332
+ children: formatCallTime(seconds)
23333
+ })]
23334
+ })]
23335
+ }), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
23336
+ ref: scrollRef,
23337
+ "aria-live": "polite",
23338
+ "aria-label": t("callTranscript"),
23339
+ className: "flex-1 min-h-0 overflow-y-auto px-5 pt-3 pb-2 flex flex-col",
23340
+ children: [lastAgent && /*#__PURE__*/jsxRuntimeExports.jsx("p", {
23341
+ "data-testid": "voice-call-line-agent",
23342
+ dir: "auto",
23343
+ className: cn("m-0 text-lg leading-snug font-medium whitespace-pre-wrap break-words", isDark ? "text-gray-100" : "text-gray-900"),
23344
+ children: lastAgent
23345
+ }), card ?
23346
+ /*#__PURE__*/
23347
+ // Full height: the call's middle area scrolls as one, so a card
23348
+ // never gets squeezed into a small box of its own.
23349
+ jsxRuntimeExports.jsx("div", {
23350
+ "data-testid": "voice-call-card",
23351
+ className: "flex-shrink-0 my-3",
23352
+ children: /*#__PURE__*/jsxRuntimeExports.jsx(CardBoundary, {
23353
+ children: /*#__PURE__*/jsxRuntimeExports.jsx(reactExports.Suspense, {
23354
+ fallback: null,
23355
+ children: /*#__PURE__*/jsxRuntimeExports.jsx(MarkdownRenderer, {
23356
+ content: card,
23357
+ isDark: isDark,
23358
+ isRtl: isRtl,
23359
+ fontFamily: fontFamily,
23360
+ provideCitations: false,
23361
+ onButtonClick: value => onCardAction?.(String(value ?? ""))
23362
+ })
23363
+ })
23364
+ }, card)
23365
+ }) : null]
23366
+ }), lastCaller && /*#__PURE__*/jsxRuntimeExports.jsx("p", {
23367
+ "data-testid": "voice-call-line-caller",
23368
+ dir: "auto",
23369
+ className: cn("mx-5 mt-2 mb-0 flex-shrink-0 rounded-lg border border-solid px-3.5 py-2.5 text-sm italic break-words [overflow-wrap:anywhere]", isDark ? "border-gray-700 bg-gray-800 text-gray-300" : "border-slate-200 bg-slate-50 text-slate-600"),
23370
+ children: lastCaller
23371
+ }), errorText && /*#__PURE__*/jsxRuntimeExports.jsx("p", {
23372
+ role: "alert",
23373
+ className: "m-0 px-4 pt-1 text-xs text-status-error",
23374
+ children: errorText
23375
+ }), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
23376
+ className: "relative flex-shrink-0 overflow-hidden pt-10 pb-6",
23377
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
23378
+ "aria-hidden": "true",
23379
+ "data-testid": "voice-call-glow",
23380
+ className: cn("pointer-events-none absolute inset-0 origin-bottom", !reducedMotion && "transition-[opacity,transform] duration-300 ease-out"),
23381
+ style: {
23382
+ opacity: glowOpacity,
23383
+ transform: `scaleY(${glowScale})`,
23384
+ WebkitMaskImage: "linear-gradient(to top, black 35%, transparent 100%)",
23385
+ maskImage: "linear-gradient(to top, black 35%, transparent 100%)"
23386
+ },
23387
+ children: GLOW_BLOBS.map(blob => /*#__PURE__*/jsxRuntimeExports.jsx("span", {
23388
+ className: cn("absolute rounded-full blur-2xl", blob.className, !reducedMotion && !isPaused && blob.animation),
23389
+ style: {
23390
+ background: withAlpha(primaryColor, blob.alpha)
23391
+ }
23392
+ }, blob.className))
23393
+ }), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
23394
+ className: "relative z-10 flex items-start justify-center gap-10",
23395
+ children: [/*#__PURE__*/jsxRuntimeExports.jsxs("div", {
23396
+ className: "flex flex-col items-center gap-1.5",
23397
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("button", {
23398
+ type: "button",
23399
+ onClick: onTogglePause,
23400
+ "aria-label": isPaused ? t("callResume") : t("callPause"),
23401
+ "aria-pressed": isPaused,
23402
+ className: cn("h-12 w-12 p-0 rounded-full flex items-center justify-center border border-solid shadow-sm cursor-pointer transition-colors duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2", isDark ? "bg-gray-800 border-gray-700 text-gray-100 hover:bg-gray-700 focus-visible:ring-offset-gray-900" : "bg-white border-slate-200 text-gray-900 hover:bg-slate-50"),
23403
+ children: isPaused ? /*#__PURE__*/jsxRuntimeExports.jsx(Play, {
23404
+ className: "h-5 w-5",
23405
+ "aria-hidden": "true"
23406
+ }) : /*#__PURE__*/jsxRuntimeExports.jsx(Pause, {
23407
+ className: "h-5 w-5",
23408
+ "aria-hidden": "true"
23409
+ })
23410
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("span", {
23411
+ className: labelClass,
23412
+ children: isPaused ? t("callResumeLabel") : t("callPauseLabel")
23413
+ })]
23414
+ }), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
23415
+ className: "flex flex-col items-center gap-1.5",
23416
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("button", {
23417
+ type: "button",
23418
+ onClick: onEnd,
23419
+ "aria-label": t("callEnd"),
23420
+ className: "h-12 w-12 p-0 rounded-full flex items-center justify-center border-0 bg-red-600 text-white shadow-sm cursor-pointer transition-colors duration-200 hover:bg-red-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-red-600 focus-visible:ring-offset-2",
23421
+ children: /*#__PURE__*/jsxRuntimeExports.jsx(PhoneOff, {
23422
+ className: "h-5 w-5",
23423
+ "aria-hidden": "true"
23424
+ })
23425
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("span", {
23426
+ className: labelClass,
23427
+ children: t("callEndLabel")
23428
+ })]
23429
+ })]
23430
+ })]
23431
+ })]
23432
+ });
23433
+ }
23434
+
23435
+ /**
23436
+ * The call screen fed by the live audio level. Kept apart from the view so
23437
+ * only this small tree re-renders as the level changes (about 15 times a
23438
+ * second), not the chat window. `levelSource` holds useChatState's player and
23439
+ * speech gate refs.
23440
+ */
23441
+ function LiveVoiceCallView({
23442
+ levelSource,
23443
+ ...props
23444
+ }) {
23445
+ const {
23446
+ level,
23447
+ speaker
23448
+ } = useVoiceCallLevel(!props.isPaused, levelSource);
23449
+ return /*#__PURE__*/jsxRuntimeExports.jsx(VoiceCallView, {
23450
+ ...props,
23451
+ level: level,
23452
+ speaker: speaker
23453
+ });
23454
+ }
23455
+
22186
23456
  /**
22187
23457
  * Auto-scroll hook that scrolls to bottom when dependencies change
22188
23458
  */
@@ -22656,6 +23926,14 @@
22656
23926
  voiceConclusionForCsat = false,
22657
23927
  onVoiceToggle,
22658
23928
  onBidiSubmit,
23929
+ // The voice call screen: the call's own lines (useChatState's
23930
+ // bidiMessages), Pause, the glow's level source, and the text send a card
23931
+ // click goes through.
23932
+ bidiMessages = [],
23933
+ isVoicePaused = false,
23934
+ onToggleVoicePause,
23935
+ voiceLevelSource,
23936
+ onBidiTextMessage,
22659
23937
  disclaimerEnabled = false,
22660
23938
  disclaimerText,
22661
23939
  disclaimerPosition = "top",
@@ -22947,6 +24225,18 @@
22947
24225
  delay: 0
22948
24226
  });
22949
24227
  const isRtlLanguage = isRtlLocale(defaultLanguage);
24228
+
24229
+ // While a voice call is live the body becomes the call screen; when it
24230
+ // ends the chat returns with the call's lines kept as messages.
24231
+ const showCallView = isVoiceSessionActive;
24232
+ // A card button on the call screen: a web address (a payment or check-in
24233
+ // link) opens in a new tab, anything else is the caller's next turn.
24234
+ const handleVoiceCardAction = reactExports.useCallback(value => {
24235
+ if (!openCardLink(value)) onBidiTextMessage?.(value);
24236
+ }, [onBidiTextMessage]);
24237
+ // EV-3813: voiceError is an i18n code (lib/voiceErrors.js), resolved the
24238
+ // way ChatInput resolves it.
24239
+ const voiceErrorText = voiceError ? t(voiceError) === voiceError ? t("voiceUnavailable") : t(voiceError) : null;
22950
24240
  const resolvedAgentBubbleColor = reactExports.useMemo(() => {
22951
24241
  if (isDark) {
22952
24242
  if (isDefaultColor(agentMessageBubbleColor, DEFAULT_AGENT_BUBBLE_COLOR)) {
@@ -23490,7 +24780,22 @@
23490
24780
  isRtl: isRtlLanguage,
23491
24781
  defaultLanguage: defaultLanguage
23492
24782
  }), !isMinimized && /*#__PURE__*/jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, {
23493
- children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
24783
+ children: [showCallView ? /*#__PURE__*/jsxRuntimeExports.jsx(LiveVoiceCallView, {
24784
+ levelSource: voiceLevelSource,
24785
+ status: voiceCallStatus(voiceStatus, isVoicePaused),
24786
+ agentName: conciergeName || companyName,
24787
+ primaryColor: primaryColor,
24788
+ lines: bidiMessages,
24789
+ isPaused: isVoicePaused,
24790
+ onTogglePause: onToggleVoicePause,
24791
+ onEnd: onVoiceToggle,
24792
+ isDark: isDark,
24793
+ isRtl: isRtlLanguage,
24794
+ errorText: voiceErrorText,
24795
+ onCardAction: handleVoiceCardAction,
24796
+ defaultLanguage: defaultLanguage,
24797
+ fontFamily: fontFamily
24798
+ }) : /*#__PURE__*/jsxRuntimeExports.jsx("div", {
23494
24799
  ref: messagesContainerRef,
23495
24800
  role: "log",
23496
24801
  "aria-live": "polite",
@@ -23588,64 +24893,68 @@
23588
24893
  })
23589
24894
  })]
23590
24895
  })
23591
- }), !(onboardingActive && !onboardingCompleted) && /*#__PURE__*/jsxRuntimeExports.jsx(ChatInput, {
23592
- onSynthesizeAssistantMessage: onSynthesizeAssistantMessage,
23593
- onStopGeneration: onStopGeneration,
23594
- inputValue: inputValue,
23595
- setInputValue: setInputValue,
23596
- onSend: onSend,
23597
- isDark: isDark,
23598
- primaryColor: primaryColor,
23599
- isOpen: isOpen,
23600
- isMinimized: isMinimized,
23601
- isLoading: isLoading,
23602
- isConversationLoading: isConversationLoading,
23603
- verificationPending: verificationPendingKeys.size > 0,
23604
- placeholder: placeholder,
23605
- textColor: resolvedTextColor,
23606
- fontFamily: fontFamily,
23607
- userMessageBubbleFontFamily: userMessageBubbleFontFamily,
23608
- userMessageBubbleFontSize: userMessageBubbleFontSize,
23609
- fontSize: fontSize,
23610
- isRtl: isRtlLanguage,
23611
- csatVisible: showCsat && csatEnabled && !csatSubmitted || isCsatEnabled && (showResolveForm || isConversationResolved),
23612
- enableVoiceInteraction: enableVoiceInteraction,
23613
- isVoiceSessionActive: isVoiceSessionActive,
23614
- voiceStatus: voiceStatus,
23615
- voiceError: voiceError,
23616
- onVoiceToggle: onVoiceToggle,
23617
- onBidiSubmit: onBidiSubmit,
23618
- disclaimerEnabled: disclaimerEnabled,
23619
- disclaimerText: disclaimerText,
23620
- disclaimerPosition: disclaimerPosition,
23621
- disclaimerLinkUrl: disclaimerLinkUrl,
23622
- disclaimerLinkLabel: disclaimerLinkLabel,
23623
- showPoweredBy: showPoweredBy,
23624
- defaultLanguage: defaultLanguage,
23625
- onboardingQuestions: onboardingQuestions,
23626
- onboardingActive: onboardingActive,
23627
- onboardingCompleted: onboardingCompleted,
23628
- onboardingEnabled: onboardingEnabled,
23629
- userMessageBoxColor: userMessageBoxColor,
23630
- resolvedUserMessageColor: resolvedUserMessageColor,
23631
- userTextColor: userTextColor,
23632
- promptSuggestions: showResolveForm || isConversationResolved || autoPromptEnabled === false || isLoading ? [] : stablePromptSuggestions,
23633
- onPromptSuggestionClick: stableOnPromptSuggestionClick,
23634
- autoPromptQuestionDisplay: autoPromptQuestionDisplay,
23635
- tagSelectorNode: null,
23636
- showResolveButton: isCsatEnabled && hasUserMessages && !isConversationResolved && !showResolveForm && !showCsat && !shouldHideResolveForOnboarding,
23637
- onResolve: () => {
23638
- if (!isCsatEnabled) return;
23639
- setShowResolveForm(true);
23640
- }
23641
- // Attachments (RAG-attach-1) - paperclip stays hidden
23642
- // unless the operator explicitly opted in via
23643
- // MasterAgent.config.chatFeatures.
23644
- ,
23645
- chatFeatures: chatFeatures,
23646
- apiEndpoint: apiBaseUrl,
23647
- organizationId: organizationId,
23648
- conversationId: conversationId
24896
+ }), !(onboardingActive && !onboardingCompleted) && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
24897
+ className: showCallView ? "hidden" : "contents",
24898
+ "data-testid": "chat-input-slot",
24899
+ children: /*#__PURE__*/jsxRuntimeExports.jsx(ChatInput, {
24900
+ onSynthesizeAssistantMessage: onSynthesizeAssistantMessage,
24901
+ onStopGeneration: onStopGeneration,
24902
+ inputValue: inputValue,
24903
+ setInputValue: setInputValue,
24904
+ onSend: onSend,
24905
+ isDark: isDark,
24906
+ primaryColor: primaryColor,
24907
+ isOpen: isOpen,
24908
+ isMinimized: isMinimized,
24909
+ isLoading: isLoading,
24910
+ isConversationLoading: isConversationLoading,
24911
+ verificationPending: verificationPendingKeys.size > 0,
24912
+ placeholder: placeholder,
24913
+ textColor: resolvedTextColor,
24914
+ fontFamily: fontFamily,
24915
+ userMessageBubbleFontFamily: userMessageBubbleFontFamily,
24916
+ userMessageBubbleFontSize: userMessageBubbleFontSize,
24917
+ fontSize: fontSize,
24918
+ isRtl: isRtlLanguage,
24919
+ csatVisible: showCsat && csatEnabled && !csatSubmitted || isCsatEnabled && (showResolveForm || isConversationResolved),
24920
+ enableVoiceInteraction: enableVoiceInteraction,
24921
+ isVoiceSessionActive: isVoiceSessionActive,
24922
+ voiceStatus: voiceStatus,
24923
+ voiceError: voiceError,
24924
+ onVoiceToggle: onVoiceToggle,
24925
+ onBidiSubmit: onBidiSubmit,
24926
+ disclaimerEnabled: disclaimerEnabled,
24927
+ disclaimerText: disclaimerText,
24928
+ disclaimerPosition: disclaimerPosition,
24929
+ disclaimerLinkUrl: disclaimerLinkUrl,
24930
+ disclaimerLinkLabel: disclaimerLinkLabel,
24931
+ showPoweredBy: showPoweredBy,
24932
+ defaultLanguage: defaultLanguage,
24933
+ onboardingQuestions: onboardingQuestions,
24934
+ onboardingActive: onboardingActive,
24935
+ onboardingCompleted: onboardingCompleted,
24936
+ onboardingEnabled: onboardingEnabled,
24937
+ userMessageBoxColor: userMessageBoxColor,
24938
+ resolvedUserMessageColor: resolvedUserMessageColor,
24939
+ userTextColor: userTextColor,
24940
+ promptSuggestions: showResolveForm || isConversationResolved || autoPromptEnabled === false || isLoading ? [] : stablePromptSuggestions,
24941
+ onPromptSuggestionClick: stableOnPromptSuggestionClick,
24942
+ autoPromptQuestionDisplay: autoPromptQuestionDisplay,
24943
+ tagSelectorNode: null,
24944
+ showResolveButton: isCsatEnabled && hasUserMessages && !isConversationResolved && !showResolveForm && !showCsat && !shouldHideResolveForOnboarding,
24945
+ onResolve: () => {
24946
+ if (!isCsatEnabled) return;
24947
+ setShowResolveForm(true);
24948
+ }
24949
+ // Attachments (RAG-attach-1) - paperclip stays hidden
24950
+ // unless the operator explicitly opted in via
24951
+ // MasterAgent.config.chatFeatures.
24952
+ ,
24953
+ chatFeatures: chatFeatures,
24954
+ apiEndpoint: apiBaseUrl,
24955
+ organizationId: organizationId,
24956
+ conversationId: conversationId
24957
+ })
23649
24958
  })]
23650
24959
  })]
23651
24960
  })]
@@ -23968,7 +25277,7 @@
23968
25277
  * value by its own test (that constant sat at 0.1.113 while this package was
23969
25278
  * at 0.2.2 precisely because nothing enforced it - EV-2431).
23970
25279
  */
23971
- const WIDGET_VERSION = '0.2.48';
25280
+ const WIDGET_VERSION = '0.2.50';
23972
25281
 
23973
25282
  /**
23974
25283
  * API utility functions
@@ -24335,6 +25644,23 @@
24335
25644
  return isDomainAllowed(widgetConfig.allowedDomains);
24336
25645
  }, [widgetConfig]);
24337
25646
 
25647
+ // EV-5013: a refused domain used to render nothing with no log at all.
25648
+ // Say why, once per distinct reason, so the operator can see it in the
25649
+ // console instead of guessing at a blank page. Effect, not render: a
25650
+ // render-time warn would repeat on every re-render.
25651
+ const lastRefusalRef = reactExports.useRef(null);
25652
+ reactExports.useEffect(() => {
25653
+ if (!widgetConfig || isAllowed) {
25654
+ lastRefusalRef.current = null;
25655
+ return;
25656
+ }
25657
+ const reason = domainRefusalReason(widgetConfig.allowedDomains);
25658
+ if (reason && reason !== lastRefusalRef.current) {
25659
+ lastRefusalRef.current = reason;
25660
+ console.warn(reason);
25661
+ }
25662
+ }, [widgetConfig, isAllowed]);
25663
+
24338
25664
  // Create default config for useChatState when config is not ready
24339
25665
  const defaultConfig = reactExports.useMemo(() => ({
24340
25666
  welcomeMessage: "Hi! How can we help?",
@@ -24377,6 +25703,10 @@
24377
25703
  voiceConclusionForCsat,
24378
25704
  handleVoiceToggle,
24379
25705
  sendBidiTextMessage,
25706
+ bidiMessages,
25707
+ isVoicePaused,
25708
+ toggleVoicePause,
25709
+ voiceLevelSource,
24380
25710
  onboardingActive,
24381
25711
  onboardingCompleted,
24382
25712
  handleOnboardingFormSubmit,
@@ -24526,6 +25856,8 @@
24526
25856
  console.error("ChatWidget configuration error:", configError);
24527
25857
  return null;
24528
25858
  }
25859
+
25860
+ // The console.warn for this case is the EV-5013 effect above.
24529
25861
  if (!isAllowed) {
24530
25862
  return null;
24531
25863
  }
@@ -24594,6 +25926,11 @@
24594
25926
  voiceConclusionForCsat: voiceConclusionForCsat,
24595
25927
  onVoiceToggle: handleVoiceToggle,
24596
25928
  onBidiSubmit: () => sendBidiTextMessage(inputValue),
25929
+ bidiMessages: bidiMessages,
25930
+ isVoicePaused: isVoicePaused,
25931
+ onToggleVoicePause: toggleVoicePause,
25932
+ voiceLevelSource: voiceLevelSource,
25933
+ onBidiTextMessage: sendBidiTextMessage,
24597
25934
  disclaimerEnabled: widgetConfig.disclaimerEnabled,
24598
25935
  disclaimerText: widgetConfig.disclaimerText,
24599
25936
  disclaimerPosition: widgetConfig.disclaimerPosition,