@eshal-bot/chat-widget 0.1.51 → 0.1.53

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.
@@ -7869,7 +7869,7 @@
7869
7869
  m$1.hydrateRoot;
7870
7870
  }
7871
7871
 
7872
- 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:#2563eb;--cw-primary-hover:#1d4ed8;-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}.\\!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 .pointer-events-none{pointer-events:none}#chat-widget-root .visible{visibility:visible}#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-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-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-\\[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 .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-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-0\\.5{margin-left:.125rem}#chat-widget-root .ml-1{margin-left:.25rem}#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 .hidden{display:none}#chat-widget-root .h-1\\.5{height:.375rem}#chat-widget-root .h-10{height:2.5rem}#chat-widget-root .h-12{height:3rem}#chat-widget-root .h-14{height:3.5rem}#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-\\[48px\\]{height:48px}#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-12{width:3rem}#chat-widget-root .w-14{width:3.5rem}#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-\\[48px\\]{width:48px}#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-\\[85\\%\\]{max-width:85%}#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{flex-shrink:0}#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-0{--tw-rotate:0deg}#chat-widget-root .rotate-0,#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-not-allowed{cursor:not-allowed}#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-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-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}#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-3>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(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 .whitespace-normal{white-space:normal}#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 .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-red-500{--tw-border-opacity:1!important;border-color:rgb(239 68 68/var(--tw-border-opacity,1))!important}#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 .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-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-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-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}#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-cover{-o-object-fit:cover;object-fit:cover}#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-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-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-4{padding-left:1rem}#chat-widget-root .pl-\\[50px\\]{padding-left:50px}#chat-widget-root .pt-1{padding-top:.25rem}#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 .align-middle{vertical-align:middle}#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-\\[11px\\]{font-size:11px}#chat-widget-root .text-\\[15px\\]{font-size:15px}#chat-widget-root .text-base{font-size:1rem;line-height:1.5rem}#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 .leading-tight{line-height:1.25}#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-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-500{--tw-text-opacity:1;color:rgb(239 68 68/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-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 .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 .opacity-0{opacity:0}#chat-widget-root .opacity-50{opacity:.5}#chat-widget-root .opacity-60{opacity:.6}#chat-widget-root .opacity-80{opacity:.8}#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-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}#chat-widget-root .shadow-none,#chat-widget-root .shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#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-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);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#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 .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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#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 .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-\\[\\#8C8C8C\\]::-moz-placeholder{--tw-text-opacity:1;color:rgb(140 140 140/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-\\[\\#8C8C8C\\]::placeholder{--tw-text-opacity:1;color:rgb(140 140 140/var(--tw-text-opacity,1))}#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 .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-900\\/50:hover{background-color:rgba(30,58,138,.5)}#chat-widget-root .hover\\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}#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-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\\: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-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(239 68 68/var(--tw-border-opacity,1))!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\\: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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#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-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\\.98\\]: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\\.98\\]:active{--tw-scale-x:0.98;--tw-scale-y:0.98}#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))}#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}";
7872
+ 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:#2563eb;--cw-primary-hover:#1d4ed8;-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}.\\!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 .pointer-events-none{pointer-events:none}#chat-widget-root .visible{visibility:visible}#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-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-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-\\[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 .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-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-0\\.5{margin-left:.125rem}#chat-widget-root .ml-1{margin-left:.25rem}#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-12{height:3rem}#chat-widget-root .h-14{height:3.5rem}#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-\\[48px\\]{height:48px}#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-12{width:3rem}#chat-widget-root .w-14{width:3.5rem}#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-\\[48px\\]{width:48px}#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-\\[85\\%\\]{max-width:85%}#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{flex-shrink:0}#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-0{--tw-rotate:0deg}#chat-widget-root .rotate-0,#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-not-allowed{cursor:not-allowed}#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-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-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}#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-3>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(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-normal{white-space:normal}#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 .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-red-500{--tw-border-opacity:1!important;border-color:rgb(239 68 68/var(--tw-border-opacity,1))!important}#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 .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-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-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-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}#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-cover{-o-object-fit:cover;object-fit:cover}#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-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-4{padding-left:1rem}#chat-widget-root .pl-\\[50px\\]{padding-left:50px}#chat-widget-root .pt-1{padding-top:.25rem}#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 .align-middle{vertical-align:middle}#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-\\[11px\\]{font-size:11px}#chat-widget-root .text-\\[15px\\]{font-size:15px}#chat-widget-root .text-base{font-size:1rem;line-height:1.5rem}#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 .leading-tight{line-height:1.25}#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-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-500{--tw-text-opacity:1;color:rgb(239 68 68/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-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 .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-80{opacity:.8}#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-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}#chat-widget-root .shadow-none,#chat-widget-root .shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#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-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);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#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 .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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#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 .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-\\[\\#8C8C8C\\]::-moz-placeholder{--tw-text-opacity:1;color:rgb(140 140 140/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-\\[\\#8C8C8C\\]::placeholder{--tw-text-opacity:1;color:rgb(140 140 140/var(--tw-text-opacity,1))}#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 .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-900\\/50:hover{background-color:rgba(30,58,138,.5)}#chat-widget-root .hover\\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}#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-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-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(239 68 68/var(--tw-border-opacity,1))!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\\: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-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\\.98\\]: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\\.98\\]:active{--tw-scale-x:0.98;--tw-scale-y:0.98}#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))}#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}";
7873
7873
 
7874
7874
  var css_248z = ".chat-widget-root{position:fixed;z-index:999999}.chat-widget-container{color:var(--cw-text-color,inherit);font-family:var(\r\n --cw-font-family,-apple-system,BlinkMacSystemFont,\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",sans-serif\r\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}@media print{.chat-widget-root{display:none!important}}";
7875
7875
 
@@ -54177,6 +54177,1773 @@
54177
54177
  }, [fontFamily]);
54178
54178
  }
54179
54179
 
54180
+ function A2uiBlock(_ref) {
54181
+ let {
54182
+ spec,
54183
+ isDark = false,
54184
+ onButtonClick
54185
+ } = _ref;
54186
+ if (!spec || typeof spec !== 'object') return null;
54187
+ // Normalize underscore_case → kebab-case so the agent can emit either
54188
+ // form. Both `key_observations` and `key-observations` route here.
54189
+ const t = String(spec.type || '').trim().toLowerCase().replace(/_/g, '-');
54190
+
54191
+ // Charts (incl. graceful fallback for chart-shaped data with unknown type)
54192
+ const CHART_TYPES = new Set(['bar', 'line', 'area', 'pie', 'donut', 'scatter', 'bubble', 'radar', 'radial-bar', 'radial', 'radialbar', 'treemap', 'funnel', 'sankey', 'composed', 'waterfall', 'gauge', 'histogram', 'kpi']);
54193
+
54194
+ // ── On-demand analytical insight cards (12-06-2026) ──
54195
+ // Six types the database_query agent emits when the user explicitly
54196
+ // asks for analysis. Stack vertically as separate cards in the chat
54197
+ // bubble. See sub_agents/database_query/prompt.py for the schema spec.
54198
+ if (t === 'revenue-insights') return /*#__PURE__*/jsxRuntimeExports.jsx(RevenueInsightsCard, {
54199
+ spec: spec,
54200
+ isDark: isDark
54201
+ });
54202
+ if (t === 'impact-analysis') return /*#__PURE__*/jsxRuntimeExports.jsx(ImpactAnalysisCard, {
54203
+ spec: spec,
54204
+ isDark: isDark
54205
+ });
54206
+ if (t === 'deviation-analysis') return /*#__PURE__*/jsxRuntimeExports.jsx(DeviationAnalysisCard, {
54207
+ spec: spec,
54208
+ isDark: isDark
54209
+ });
54210
+ if (t === 'main-drivers') return /*#__PURE__*/jsxRuntimeExports.jsx(MainDriversCard, {
54211
+ spec: spec,
54212
+ isDark: isDark
54213
+ });
54214
+ if (t === 'key-observations') return /*#__PURE__*/jsxRuntimeExports.jsx(KeyObservationsCard, {
54215
+ spec: spec,
54216
+ isDark: isDark
54217
+ });
54218
+ if (t === 'recommendations') return /*#__PURE__*/jsxRuntimeExports.jsx(RecommendationsCard, {
54219
+ spec: spec,
54220
+ isDark: isDark
54221
+ });
54222
+ if (t === 'kpi') return /*#__PURE__*/jsxRuntimeExports.jsx(Kpi, {
54223
+ spec: spec,
54224
+ isDark: isDark
54225
+ });
54226
+ if (CHART_TYPES.has(t) || Array.isArray(spec.data) && spec.data.length > 0) {
54227
+ return /*#__PURE__*/jsxRuntimeExports.jsx(Chart, {
54228
+ spec: spec,
54229
+ type: t,
54230
+ isDark: isDark
54231
+ });
54232
+ }
54233
+ if (t === 'table') return /*#__PURE__*/jsxRuntimeExports.jsx(Table, {
54234
+ spec: spec,
54235
+ isDark: isDark
54236
+ });
54237
+ if (t === 'alert') return /*#__PURE__*/jsxRuntimeExports.jsx(Alert, {
54238
+ spec: spec,
54239
+ isDark: isDark
54240
+ });
54241
+ if (t === 'card') return /*#__PURE__*/jsxRuntimeExports.jsx(Card, {
54242
+ spec: spec,
54243
+ isDark: isDark
54244
+ });
54245
+ if (t === 'button-group') return /*#__PURE__*/jsxRuntimeExports.jsx(ButtonGroup, {
54246
+ spec: spec,
54247
+ isDark: isDark,
54248
+ onButtonClick: onButtonClick
54249
+ });
54250
+ if (t === 'form') return /*#__PURE__*/jsxRuntimeExports.jsx(FormDisplay, {
54251
+ spec: spec,
54252
+ isDark: isDark
54253
+ });
54254
+ if (t === 'confirmation') return /*#__PURE__*/jsxRuntimeExports.jsx(Confirmation, {
54255
+ spec: spec,
54256
+ isDark: isDark,
54257
+ onButtonClick: onButtonClick
54258
+ });
54259
+
54260
+ // Unrecognised type — render the data (if any) as a labeled list. Never
54261
+ // fall through to raw JSON; that's the bug we're fixing.
54262
+ if (Array.isArray(spec.data) && spec.data.length > 0) {
54263
+ return /*#__PURE__*/jsxRuntimeExports.jsx(Chart, {
54264
+ spec: spec,
54265
+ type: "bar",
54266
+ isDark: isDark
54267
+ });
54268
+ }
54269
+ return null;
54270
+ }
54271
+
54272
+ // ── Shared helpers ────────────────────────────────────────────────────────
54273
+
54274
+ const PALETTE = ['#3b82f6', '#10b981', '#f59e0b', '#ef4444', '#8b5cf6', '#ec4899', '#14b8a6', '#f97316', '#6366f1', '#84cc16'];
54275
+ const card = isDark => ({
54276
+ border: isDark ? '1px solid #374151' : '1px solid #e5e7eb',
54277
+ background: isDark ? '#1f2937' : '#ffffff',
54278
+ borderRadius: 8,
54279
+ padding: 12,
54280
+ margin: '8px 0',
54281
+ fontSize: 13,
54282
+ color: isDark ? '#f3f4f6' : '#111827'
54283
+ });
54284
+ function inferKeys(data, xKey, yKey) {
54285
+ // Resolve x/y keys defensively — the agent sometimes emits them, sometimes
54286
+ // we have to guess. Picks the first string-valued field for x and the
54287
+ // first numeric-valued field for y.
54288
+ if (!Array.isArray(data) || data.length === 0) return {
54289
+ x: 'name',
54290
+ y: 'value'
54291
+ };
54292
+ const sample = data[0] || {};
54293
+ if (xKey && Object.prototype.hasOwnProperty.call(sample, xKey)) {
54294
+ if (yKey && Object.prototype.hasOwnProperty.call(sample, yKey)) {
54295
+ return {
54296
+ x: xKey,
54297
+ y: yKey
54298
+ };
54299
+ }
54300
+ }
54301
+ let x = xKey || null;
54302
+ let y = yKey || null;
54303
+ for (const k of Object.keys(sample)) {
54304
+ const v = sample[k];
54305
+ if (x == null && (typeof v === 'string' || v == null)) x = k;
54306
+ if (y == null && typeof v === 'number' && Number.isFinite(v)) y = k;
54307
+ }
54308
+ return {
54309
+ x: x || 'name',
54310
+ y: y || 'value'
54311
+ };
54312
+ }
54313
+ function numericData(data, xKey, yKey) {
54314
+ return (data || []).map(row => {
54315
+ var _row$xKey;
54316
+ return {
54317
+ label: String((_row$xKey = row === null || row === void 0 ? void 0 : row[xKey]) !== null && _row$xKey !== void 0 ? _row$xKey : ''),
54318
+ value: Number(row === null || row === void 0 ? void 0 : row[yKey])
54319
+ };
54320
+ }).filter(d => Number.isFinite(d.value));
54321
+ }
54322
+
54323
+ // ── Chart (SVG: line / bar / pie / donut + everything-else fallback) ─────
54324
+
54325
+ function Chart(_ref2) {
54326
+ let {
54327
+ spec,
54328
+ type,
54329
+ isDark
54330
+ } = _ref2;
54331
+ const {
54332
+ x,
54333
+ y
54334
+ } = inferKeys(spec.data, spec.x, spec.y);
54335
+ const rows = numericData(spec.data, x, y);
54336
+ if (rows.length === 0) {
54337
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
54338
+ style: card(isDark),
54339
+ children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54340
+ style: {
54341
+ fontWeight: 600,
54342
+ marginBottom: 8
54343
+ },
54344
+ children: spec.title
54345
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54346
+ style: {
54347
+ color: isDark ? '#9ca3af' : '#6b7280',
54348
+ fontSize: 12
54349
+ },
54350
+ children: "No chartable data"
54351
+ })]
54352
+ });
54353
+ }
54354
+ const t = String(type || '').trim().toLowerCase();
54355
+ let body;
54356
+ if (t === 'pie' || t === 'donut') body = /*#__PURE__*/jsxRuntimeExports.jsx(PieSvg, {
54357
+ rows: rows,
54358
+ donut: t === 'donut',
54359
+ isDark: isDark
54360
+ });else if (t === 'line' || t === 'area') body = /*#__PURE__*/jsxRuntimeExports.jsx(LineSvg, {
54361
+ rows: rows,
54362
+ area: t === 'area',
54363
+ isDark: isDark
54364
+ });else body = /*#__PURE__*/jsxRuntimeExports.jsx(BarSvg, {
54365
+ rows: rows,
54366
+ isDark: isDark
54367
+ }); // bar + every fallback
54368
+
54369
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
54370
+ style: card(isDark),
54371
+ children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54372
+ style: {
54373
+ fontWeight: 600,
54374
+ marginBottom: 8
54375
+ },
54376
+ children: spec.title
54377
+ }), body]
54378
+ });
54379
+ }
54380
+ function BarSvg(_ref3) {
54381
+ let {
54382
+ rows,
54383
+ isDark
54384
+ } = _ref3;
54385
+ const w = 320;
54386
+ const h = 180;
54387
+ const padLeft = 8;
54388
+ const padRight = 8;
54389
+ const padTop = 8;
54390
+ const padBottom = 28;
54391
+ const innerW = w - padLeft - padRight;
54392
+ const innerH = h - padTop - padBottom;
54393
+ const maxV = Math.max(...rows.map(r => r.value), 0.0001);
54394
+ const bw = innerW / rows.length;
54395
+ const labelStroke = isDark ? '#9ca3af' : '#4b5563';
54396
+ const gridStroke = isDark ? '#374151' : '#e5e7eb';
54397
+ const fontColor = isDark ? '#d1d5db' : '#374151';
54398
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("svg", {
54399
+ viewBox: "0 0 ".concat(w, " ").concat(h),
54400
+ width: "100%",
54401
+ style: {
54402
+ display: 'block'
54403
+ },
54404
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("line", {
54405
+ x1: padLeft,
54406
+ y1: padTop + innerH,
54407
+ x2: padLeft + innerW,
54408
+ y2: padTop + innerH,
54409
+ stroke: gridStroke,
54410
+ strokeWidth: "1"
54411
+ }), rows.map((r, i) => {
54412
+ const barH = r.value / maxV * innerH;
54413
+ const x = padLeft + i * bw + bw * 0.15;
54414
+ const yPos = padTop + (innerH - barH);
54415
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("g", {
54416
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("rect", {
54417
+ x: x,
54418
+ y: yPos,
54419
+ width: bw * 0.7,
54420
+ height: barH,
54421
+ fill: PALETTE[i % PALETTE.length],
54422
+ rx: "2"
54423
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("text", {
54424
+ x: x + bw * 0.7 / 2,
54425
+ y: padTop + innerH + 14,
54426
+ fontSize: "9",
54427
+ fill: fontColor,
54428
+ textAnchor: "middle",
54429
+ children: truncate(r.label, 10)
54430
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("text", {
54431
+ x: x + bw * 0.7 / 2,
54432
+ y: yPos - 3,
54433
+ fontSize: "9",
54434
+ fill: labelStroke,
54435
+ textAnchor: "middle",
54436
+ children: formatNum(r.value)
54437
+ })]
54438
+ }, i);
54439
+ })]
54440
+ });
54441
+ }
54442
+ function LineSvg(_ref4) {
54443
+ let {
54444
+ rows,
54445
+ area,
54446
+ isDark
54447
+ } = _ref4;
54448
+ const w = 320;
54449
+ const h = 180;
54450
+ const padLeft = 28;
54451
+ const padRight = 12;
54452
+ const padTop = 12;
54453
+ const padBottom = 28;
54454
+ const innerW = w - padLeft - padRight;
54455
+ const innerH = h - padTop - padBottom;
54456
+ const vals = rows.map(r => r.value);
54457
+ const maxV = Math.max(...vals);
54458
+ const minV = Math.min(...vals, 0);
54459
+ const range = maxV - minV || 1;
54460
+ const gridStroke = isDark ? '#374151' : '#e5e7eb';
54461
+ const labelStroke = isDark ? '#9ca3af' : '#4b5563';
54462
+ const fontColor = isDark ? '#d1d5db' : '#374151';
54463
+ const lineColor = PALETTE[0];
54464
+ const xAt = i => padLeft + (rows.length > 1 ? i / (rows.length - 1) * innerW : innerW / 2);
54465
+ const yAt = v => padTop + innerH - (v - minV) / range * innerH;
54466
+ const points = rows.map((r, i) => "".concat(xAt(i), ",").concat(yAt(r.value))).join(' ');
54467
+ const areaPath = rows.length > 0 ? "M ".concat(xAt(0), ",").concat(padTop + innerH, " L ").concat(rows.map((r, i) => "".concat(xAt(i), ",").concat(yAt(r.value))).join(' L '), " L ").concat(xAt(rows.length - 1), ",").concat(padTop + innerH, " Z") : '';
54468
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("svg", {
54469
+ viewBox: "0 0 ".concat(w, " ").concat(h),
54470
+ width: "100%",
54471
+ style: {
54472
+ display: 'block'
54473
+ },
54474
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("line", {
54475
+ x1: padLeft,
54476
+ y1: padTop,
54477
+ x2: padLeft,
54478
+ y2: padTop + innerH,
54479
+ stroke: gridStroke,
54480
+ strokeWidth: "1"
54481
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("line", {
54482
+ x1: padLeft,
54483
+ y1: padTop + innerH,
54484
+ x2: padLeft + innerW,
54485
+ y2: padTop + innerH,
54486
+ stroke: gridStroke,
54487
+ strokeWidth: "1"
54488
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("text", {
54489
+ x: padLeft - 4,
54490
+ y: padTop + 4,
54491
+ fontSize: "9",
54492
+ fill: labelStroke,
54493
+ textAnchor: "end",
54494
+ children: formatNum(maxV)
54495
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("text", {
54496
+ x: padLeft - 4,
54497
+ y: padTop + innerH,
54498
+ fontSize: "9",
54499
+ fill: labelStroke,
54500
+ textAnchor: "end",
54501
+ children: formatNum(minV)
54502
+ }), area && /*#__PURE__*/jsxRuntimeExports.jsx("path", {
54503
+ d: areaPath,
54504
+ fill: lineColor,
54505
+ fillOpacity: "0.15"
54506
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("polyline", {
54507
+ points: points,
54508
+ fill: "none",
54509
+ stroke: lineColor,
54510
+ strokeWidth: "2",
54511
+ strokeLinejoin: "round",
54512
+ strokeLinecap: "round"
54513
+ }), rows.map((r, i) => /*#__PURE__*/jsxRuntimeExports.jsxs("g", {
54514
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("circle", {
54515
+ cx: xAt(i),
54516
+ cy: yAt(r.value),
54517
+ r: "3",
54518
+ fill: lineColor
54519
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("text", {
54520
+ x: xAt(i),
54521
+ y: padTop + innerH + 14,
54522
+ fontSize: "9",
54523
+ fill: fontColor,
54524
+ textAnchor: "middle",
54525
+ children: truncate(r.label, 10)
54526
+ })]
54527
+ }, i))]
54528
+ });
54529
+ }
54530
+ function PieSvg(_ref5) {
54531
+ let {
54532
+ rows,
54533
+ donut,
54534
+ isDark
54535
+ } = _ref5;
54536
+ const size = 200;
54537
+ const cx = size / 2;
54538
+ const cy = size / 2;
54539
+ const rOuter = size / 2 - 4;
54540
+ const rInner = donut ? rOuter * 0.55 : 0;
54541
+ const total = rows.reduce((s, r) => s + Math.max(0, r.value), 0);
54542
+ if (total <= 0) {
54543
+ return /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54544
+ style: {
54545
+ color: isDark ? '#9ca3af' : '#6b7280',
54546
+ fontSize: 12
54547
+ },
54548
+ children: "Empty pie chart"
54549
+ });
54550
+ }
54551
+ let acc = 0;
54552
+ const slices = rows.map((r, i) => {
54553
+ const startA = acc / total * Math.PI * 2 - Math.PI / 2;
54554
+ acc += Math.max(0, r.value);
54555
+ const endA = acc / total * Math.PI * 2 - Math.PI / 2;
54556
+ const large = endA - startA > Math.PI ? 1 : 0;
54557
+ const x1 = cx + rOuter * Math.cos(startA);
54558
+ const y1 = cy + rOuter * Math.sin(startA);
54559
+ const x2 = cx + rOuter * Math.cos(endA);
54560
+ const y2 = cy + rOuter * Math.sin(endA);
54561
+ if (donut) {
54562
+ const ix1 = cx + rInner * Math.cos(endA);
54563
+ const iy1 = cy + rInner * Math.sin(endA);
54564
+ const ix2 = cx + rInner * Math.cos(startA);
54565
+ const iy2 = cy + rInner * Math.sin(startA);
54566
+ return {
54567
+ d: "M ".concat(x1, ",").concat(y1, " A ").concat(rOuter, ",").concat(rOuter, " 0 ").concat(large, " 1 ").concat(x2, ",").concat(y2, " L ").concat(ix1, ",").concat(iy1, " A ").concat(rInner, ",").concat(rInner, " 0 ").concat(large, " 0 ").concat(ix2, ",").concat(iy2, " Z"),
54568
+ color: PALETTE[i % PALETTE.length],
54569
+ label: r.label,
54570
+ value: r.value
54571
+ };
54572
+ }
54573
+ return {
54574
+ d: "M ".concat(cx, ",").concat(cy, " L ").concat(x1, ",").concat(y1, " A ").concat(rOuter, ",").concat(rOuter, " 0 ").concat(large, " 1 ").concat(x2, ",").concat(y2, " Z"),
54575
+ color: PALETTE[i % PALETTE.length],
54576
+ label: r.label,
54577
+ value: r.value
54578
+ };
54579
+ });
54580
+ const labelColor = isDark ? '#d1d5db' : '#374151';
54581
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
54582
+ style: {
54583
+ display: 'flex',
54584
+ flexWrap: 'wrap',
54585
+ gap: 12,
54586
+ alignItems: 'center'
54587
+ },
54588
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("svg", {
54589
+ viewBox: "0 0 ".concat(size, " ").concat(size),
54590
+ width: "160",
54591
+ style: {
54592
+ flexShrink: 0
54593
+ },
54594
+ children: slices.map((s, i) => /*#__PURE__*/jsxRuntimeExports.jsx("path", {
54595
+ d: s.d,
54596
+ fill: s.color,
54597
+ stroke: isDark ? '#1f2937' : '#fff',
54598
+ strokeWidth: "1"
54599
+ }, i))
54600
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54601
+ style: {
54602
+ minWidth: 100,
54603
+ flex: '1 1 auto'
54604
+ },
54605
+ children: slices.map((s, i) => /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
54606
+ style: {
54607
+ display: 'flex',
54608
+ alignItems: 'center',
54609
+ gap: 6,
54610
+ marginBottom: 4,
54611
+ fontSize: 11
54612
+ },
54613
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("span", {
54614
+ style: {
54615
+ display: 'inline-block',
54616
+ width: 10,
54617
+ height: 10,
54618
+ background: s.color,
54619
+ borderRadius: 2
54620
+ }
54621
+ }), /*#__PURE__*/jsxRuntimeExports.jsxs("span", {
54622
+ style: {
54623
+ color: labelColor
54624
+ },
54625
+ children: [truncate(s.label, 18), " ", /*#__PURE__*/jsxRuntimeExports.jsx("span", {
54626
+ style: {
54627
+ opacity: 0.7
54628
+ },
54629
+ children: formatNum(s.value)
54630
+ })]
54631
+ })]
54632
+ }, i))
54633
+ })]
54634
+ });
54635
+ }
54636
+
54637
+ // ── KPI / Table / Alert / Card / Buttons / Form / Confirmation ───────────
54638
+
54639
+ function Kpi(_ref6) {
54640
+ var _ref7, _ref8, _spec$value;
54641
+ let {
54642
+ spec,
54643
+ isDark
54644
+ } = _ref6;
54645
+ const value = (_ref7 = (_ref8 = (_spec$value = spec.value) !== null && _spec$value !== void 0 ? _spec$value : spec.amount) !== null && _ref8 !== void 0 ? _ref8 : spec.metric) !== null && _ref7 !== void 0 ? _ref7 : spec.kpi;
54646
+ const label = spec.label || spec.title || '';
54647
+ const delta = spec.delta != null ? Number(spec.delta) : null;
54648
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
54649
+ style: card(isDark),
54650
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
54651
+ style: {
54652
+ fontSize: 11,
54653
+ color: isDark ? '#9ca3af' : '#6b7280',
54654
+ textTransform: 'uppercase',
54655
+ letterSpacing: '0.05em'
54656
+ },
54657
+ children: label
54658
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54659
+ style: {
54660
+ fontSize: 24,
54661
+ fontWeight: 700,
54662
+ marginTop: 2
54663
+ },
54664
+ children: value != null ? String(value) : '—'
54665
+ }), delta != null && Number.isFinite(delta) && /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
54666
+ style: {
54667
+ fontSize: 12,
54668
+ color: delta >= 0 ? '#10b981' : '#ef4444',
54669
+ marginTop: 2
54670
+ },
54671
+ children: [delta >= 0 ? '▲ ' : '▼ ', formatNum(Math.abs(delta))]
54672
+ })]
54673
+ });
54674
+ }
54675
+ function Table(_ref9) {
54676
+ let {
54677
+ spec,
54678
+ isDark
54679
+ } = _ref9;
54680
+ const cols = Array.isArray(spec.columns) && spec.columns.length > 0 ? spec.columns : Array.isArray(spec.data) && spec.data[0] ? Object.keys(spec.data[0]) : [];
54681
+ const rows = Array.isArray(spec.data) ? spec.data : Array.isArray(spec.rows) ? spec.rows : [];
54682
+ if (cols.length === 0 || rows.length === 0) {
54683
+ return /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54684
+ style: card(isDark),
54685
+ children: /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54686
+ style: {
54687
+ color: isDark ? '#9ca3af' : '#6b7280',
54688
+ fontSize: 12
54689
+ },
54690
+ children: "Empty table"
54691
+ })
54692
+ });
54693
+ }
54694
+ const border = isDark ? '1px solid #374151' : '1px solid #e5e7eb';
54695
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
54696
+ style: card(isDark),
54697
+ children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54698
+ style: {
54699
+ fontWeight: 600,
54700
+ marginBottom: 8
54701
+ },
54702
+ children: spec.title
54703
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54704
+ style: {
54705
+ overflowX: 'auto'
54706
+ },
54707
+ children: /*#__PURE__*/jsxRuntimeExports.jsxs("table", {
54708
+ style: {
54709
+ borderCollapse: 'collapse',
54710
+ width: '100%',
54711
+ fontSize: 12
54712
+ },
54713
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("thead", {
54714
+ children: /*#__PURE__*/jsxRuntimeExports.jsx("tr", {
54715
+ children: cols.map(c => /*#__PURE__*/jsxRuntimeExports.jsx("th", {
54716
+ style: {
54717
+ border,
54718
+ padding: '6px 8px',
54719
+ background: isDark ? '#111827' : '#f9fafb',
54720
+ textAlign: 'left',
54721
+ fontWeight: 600
54722
+ },
54723
+ children: c
54724
+ }, c))
54725
+ })
54726
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("tbody", {
54727
+ children: rows.map((row, i) => /*#__PURE__*/jsxRuntimeExports.jsx("tr", {
54728
+ children: cols.map(c => /*#__PURE__*/jsxRuntimeExports.jsx("td", {
54729
+ style: {
54730
+ border,
54731
+ padding: '6px 8px'
54732
+ },
54733
+ children: row && typeof row === 'object' ? formatCell(row[c]) : ''
54734
+ }, c))
54735
+ }, i))
54736
+ })]
54737
+ })
54738
+ })]
54739
+ });
54740
+ }
54741
+ function Alert(_ref0) {
54742
+ let {
54743
+ spec,
54744
+ isDark
54745
+ } = _ref0;
54746
+ const lvl = String(spec.level || 'info').toLowerCase();
54747
+ const palette = {
54748
+ info: {
54749
+ bg: isDark ? '#1e3a5f' : '#eff6ff',
54750
+ border: '#3b82f6',
54751
+ text: isDark ? '#dbeafe' : '#1e40af'
54752
+ },
54753
+ warn: {
54754
+ bg: isDark ? '#3d2e0a' : '#fef3c7',
54755
+ border: '#f59e0b',
54756
+ text: isDark ? '#fde68a' : '#92400e'
54757
+ },
54758
+ warning: {
54759
+ bg: isDark ? '#3d2e0a' : '#fef3c7',
54760
+ border: '#f59e0b',
54761
+ text: isDark ? '#fde68a' : '#92400e'
54762
+ },
54763
+ error: {
54764
+ bg: isDark ? '#3a1216' : '#fee2e2',
54765
+ border: '#ef4444',
54766
+ text: isDark ? '#fecaca' : '#991b1b'
54767
+ },
54768
+ success: {
54769
+ bg: isDark ? '#0e2e1d' : '#d1fae5',
54770
+ border: '#10b981',
54771
+ text: isDark ? '#a7f3d0' : '#065f46'
54772
+ }
54773
+ };
54774
+ const p = palette[lvl] || palette.info;
54775
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
54776
+ style: _objectSpread2(_objectSpread2({}, card(isDark)), {}, {
54777
+ background: p.bg,
54778
+ borderLeft: "4px solid ".concat(p.border),
54779
+ color: p.text
54780
+ }),
54781
+ children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54782
+ style: {
54783
+ fontWeight: 600,
54784
+ marginBottom: 4
54785
+ },
54786
+ children: spec.title
54787
+ }), spec.body && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54788
+ style: {
54789
+ fontSize: 12
54790
+ },
54791
+ children: String(spec.body)
54792
+ })]
54793
+ });
54794
+ }
54795
+ function Card(_ref1) {
54796
+ let {
54797
+ spec,
54798
+ isDark
54799
+ } = _ref1;
54800
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
54801
+ style: card(isDark),
54802
+ children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54803
+ style: {
54804
+ fontWeight: 600,
54805
+ marginBottom: 6
54806
+ },
54807
+ children: spec.title
54808
+ }), spec.body && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54809
+ style: {
54810
+ fontSize: 12
54811
+ },
54812
+ children: String(spec.body)
54813
+ })]
54814
+ });
54815
+ }
54816
+ function ButtonGroup(_ref10) {
54817
+ let {
54818
+ spec,
54819
+ isDark,
54820
+ onButtonClick
54821
+ } = _ref10;
54822
+ const buttons = Array.isArray(spec.buttons) ? spec.buttons : [];
54823
+ if (buttons.length === 0) return null;
54824
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
54825
+ style: {
54826
+ margin: '8px 0'
54827
+ },
54828
+ children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54829
+ style: {
54830
+ fontSize: 11,
54831
+ color: isDark ? '#9ca3af' : '#6b7280',
54832
+ textTransform: 'uppercase',
54833
+ letterSpacing: '0.05em',
54834
+ marginBottom: 6
54835
+ },
54836
+ children: spec.title
54837
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54838
+ style: {
54839
+ display: 'flex',
54840
+ flexWrap: 'wrap',
54841
+ gap: 6
54842
+ },
54843
+ children: buttons.map((b, i) => {
54844
+ var _ref13, _b$label2;
54845
+ return /*#__PURE__*/jsxRuntimeExports.jsx("button", {
54846
+ type: "button",
54847
+ onClick: onButtonClick ? () => {
54848
+ var _ref11, _b$value, _ref12, _b$label;
54849
+ return onButtonClick(String((_ref11 = (_b$value = b.value) !== null && _b$value !== void 0 ? _b$value : b.label) !== null && _ref11 !== void 0 ? _ref11 : ''), String((_ref12 = (_b$label = b.label) !== null && _b$label !== void 0 ? _b$label : b.value) !== null && _ref12 !== void 0 ? _ref12 : ''));
54850
+ } : undefined,
54851
+ disabled: !onButtonClick,
54852
+ style: {
54853
+ border: '1px solid ' + (isDark ? '#374151' : '#d1d5db'),
54854
+ background: isDark ? '#1f2937' : '#ffffff',
54855
+ color: isDark ? '#f3f4f6' : '#111827',
54856
+ padding: '6px 12px',
54857
+ borderRadius: 6,
54858
+ fontSize: 12,
54859
+ cursor: onButtonClick ? 'pointer' : 'default',
54860
+ opacity: onButtonClick ? 1 : 0.6
54861
+ },
54862
+ children: String((_ref13 = (_b$label2 = b.label) !== null && _b$label2 !== void 0 ? _b$label2 : b.value) !== null && _ref13 !== void 0 ? _ref13 : '')
54863
+ }, i);
54864
+ })
54865
+ })]
54866
+ });
54867
+ }
54868
+ function FormDisplay(_ref14) {
54869
+ let {
54870
+ spec,
54871
+ isDark
54872
+ } = _ref14;
54873
+ // Forms are read-only in the widget — the chat surface doesn't have a
54874
+ // form-submit channel, so we just render the fields for the user to read.
54875
+ const fields = Array.isArray(spec.fields) ? spec.fields : [];
54876
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
54877
+ style: card(isDark),
54878
+ children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54879
+ style: {
54880
+ fontWeight: 600,
54881
+ marginBottom: 8
54882
+ },
54883
+ children: spec.title
54884
+ }), fields.map((f, i) => {
54885
+ var _ref15, _f$value;
54886
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
54887
+ style: {
54888
+ marginBottom: 4,
54889
+ fontSize: 12
54890
+ },
54891
+ children: [/*#__PURE__*/jsxRuntimeExports.jsxs("span", {
54892
+ style: {
54893
+ color: isDark ? '#9ca3af' : '#6b7280'
54894
+ },
54895
+ children: [f.label || f.name, ": "]
54896
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("span", {
54897
+ children: String((_ref15 = (_f$value = f.value) !== null && _f$value !== void 0 ? _f$value : f.placeholder) !== null && _ref15 !== void 0 ? _ref15 : '')
54898
+ })]
54899
+ }, i);
54900
+ })]
54901
+ });
54902
+ }
54903
+ function Confirmation(_ref16) {
54904
+ let {
54905
+ spec,
54906
+ isDark,
54907
+ onButtonClick
54908
+ } = _ref16;
54909
+ const yes = spec.yes || {
54910
+ label: 'Yes',
54911
+ value: 'yes'
54912
+ };
54913
+ const no = spec.no || {
54914
+ label: 'No',
54915
+ value: 'no'
54916
+ };
54917
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
54918
+ style: card(isDark),
54919
+ children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54920
+ style: {
54921
+ fontWeight: 600,
54922
+ marginBottom: 6
54923
+ },
54924
+ children: spec.title
54925
+ }), spec.body && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
54926
+ style: {
54927
+ fontSize: 12,
54928
+ marginBottom: 8
54929
+ },
54930
+ children: String(spec.body)
54931
+ }), /*#__PURE__*/jsxRuntimeExports.jsx(ButtonGroup, {
54932
+ spec: {
54933
+ buttons: [yes, no]
54934
+ },
54935
+ isDark: isDark,
54936
+ onButtonClick: onButtonClick
54937
+ })]
54938
+ });
54939
+ }
54940
+
54941
+ // ── Formatting helpers ────────────────────────────────────────────────────
54942
+
54943
+ function truncate(s, max) {
54944
+ if (typeof s !== 'string') return String(s !== null && s !== void 0 ? s : '');
54945
+ return s.length > max ? s.slice(0, max - 1) + '…' : s;
54946
+ }
54947
+ function formatNum(n) {
54948
+ if (!Number.isFinite(n)) return '';
54949
+ const abs = Math.abs(n);
54950
+ if (abs >= 1000000000) return (n / 1000000000).toFixed(1) + 'B';
54951
+ if (abs >= 1000000) return (n / 1000000).toFixed(1) + 'M';
54952
+ if (abs >= 1000) return (n / 1000).toFixed(1) + 'k';
54953
+ if (Number.isInteger(n)) return String(n);
54954
+ return n.toFixed(2);
54955
+ }
54956
+ function formatCell(v) {
54957
+ if (v == null) return '';
54958
+ if (typeof v === 'number') return Number.isInteger(v) ? String(v) : v.toFixed(2);
54959
+ if (typeof v === 'object') return JSON.stringify(v);
54960
+ return String(v);
54961
+ }
54962
+
54963
+ // ─────────────────────────────────────────────────────────────────────────
54964
+ // ── ON-DEMAND ANALYTICAL INSIGHT CARDS (12-06-2026) ──
54965
+ // Six types the database_query agent emits AFTER a SQL answer when the
54966
+ // user EXPLICITLY asks for analysis (revenue insights / impact / deviation /
54967
+ // drivers / observations / recommendations). Each card has the same shell
54968
+ // (4px colored top-accent + icon + title + body) but a type-specific body.
54969
+ // Schemas: see services/knowledge-api/sub_agents/database_query/prompt.py.
54970
+ // ─────────────────────────────────────────────────────────────────────────
54971
+
54972
+ // ── Lucide-style SVG icons (sharp, monoline, inherit color via currentColor)
54973
+
54974
+ function IconTrendingUp(_ref17) {
54975
+ let {
54976
+ size = 14
54977
+ } = _ref17;
54978
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("svg", {
54979
+ width: size,
54980
+ height: size,
54981
+ viewBox: "0 0 24 24",
54982
+ fill: "none",
54983
+ stroke: "currentColor",
54984
+ strokeWidth: "2",
54985
+ strokeLinecap: "round",
54986
+ strokeLinejoin: "round",
54987
+ "aria-hidden": "true",
54988
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("polyline", {
54989
+ points: "22 7 13.5 15.5 8.5 10.5 2 17"
54990
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("polyline", {
54991
+ points: "16 7 22 7 22 13"
54992
+ })]
54993
+ });
54994
+ }
54995
+ function IconScale(_ref18) {
54996
+ let {
54997
+ size = 14
54998
+ } = _ref18;
54999
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("svg", {
55000
+ width: size,
55001
+ height: size,
55002
+ viewBox: "0 0 24 24",
55003
+ fill: "none",
55004
+ stroke: "currentColor",
55005
+ strokeWidth: "2",
55006
+ strokeLinecap: "round",
55007
+ strokeLinejoin: "round",
55008
+ "aria-hidden": "true",
55009
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("path", {
55010
+ d: "M16 16c0-1.7-2-3-2-3"
55011
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
55012
+ d: "M8 16c0-1.7 2-3 2-3"
55013
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
55014
+ d: "M7 21h10"
55015
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
55016
+ d: "M12 3v18"
55017
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
55018
+ d: "m17 7 5 9h-10z"
55019
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
55020
+ d: "m7 7-5 9h10z"
55021
+ })]
55022
+ });
55023
+ }
55024
+ function IconGitCompare(_ref19) {
55025
+ let {
55026
+ size = 14
55027
+ } = _ref19;
55028
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("svg", {
55029
+ width: size,
55030
+ height: size,
55031
+ viewBox: "0 0 24 24",
55032
+ fill: "none",
55033
+ stroke: "currentColor",
55034
+ strokeWidth: "2",
55035
+ strokeLinecap: "round",
55036
+ strokeLinejoin: "round",
55037
+ "aria-hidden": "true",
55038
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("circle", {
55039
+ cx: "5",
55040
+ cy: "6",
55041
+ r: "3"
55042
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("circle", {
55043
+ cx: "19",
55044
+ cy: "18",
55045
+ r: "3"
55046
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
55047
+ d: "M12 6h5a2 2 0 0 1 2 2v7"
55048
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
55049
+ d: "M12 18H7a2 2 0 0 1-2-2V9"
55050
+ })]
55051
+ });
55052
+ }
55053
+ function IconZap(_ref20) {
55054
+ let {
55055
+ size = 14
55056
+ } = _ref20;
55057
+ return /*#__PURE__*/jsxRuntimeExports.jsx("svg", {
55058
+ width: size,
55059
+ height: size,
55060
+ viewBox: "0 0 24 24",
55061
+ fill: "none",
55062
+ stroke: "currentColor",
55063
+ strokeWidth: "2",
55064
+ strokeLinecap: "round",
55065
+ strokeLinejoin: "round",
55066
+ "aria-hidden": "true",
55067
+ children: /*#__PURE__*/jsxRuntimeExports.jsx("polygon", {
55068
+ points: "13 2 3 14 12 14 11 22 21 10 12 10 13 2"
55069
+ })
55070
+ });
55071
+ }
55072
+ function IconLightbulb(_ref21) {
55073
+ let {
55074
+ size = 14
55075
+ } = _ref21;
55076
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("svg", {
55077
+ width: size,
55078
+ height: size,
55079
+ viewBox: "0 0 24 24",
55080
+ fill: "none",
55081
+ stroke: "currentColor",
55082
+ strokeWidth: "2",
55083
+ strokeLinecap: "round",
55084
+ strokeLinejoin: "round",
55085
+ "aria-hidden": "true",
55086
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("path", {
55087
+ d: "M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"
55088
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
55089
+ d: "M9 18h6"
55090
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
55091
+ d: "M10 22h4"
55092
+ })]
55093
+ });
55094
+ }
55095
+ function IconTarget(_ref22) {
55096
+ let {
55097
+ size = 14
55098
+ } = _ref22;
55099
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("svg", {
55100
+ width: size,
55101
+ height: size,
55102
+ viewBox: "0 0 24 24",
55103
+ fill: "none",
55104
+ stroke: "currentColor",
55105
+ strokeWidth: "2",
55106
+ strokeLinecap: "round",
55107
+ strokeLinejoin: "round",
55108
+ "aria-hidden": "true",
55109
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("circle", {
55110
+ cx: "12",
55111
+ cy: "12",
55112
+ r: "10"
55113
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("circle", {
55114
+ cx: "12",
55115
+ cy: "12",
55116
+ r: "6"
55117
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("circle", {
55118
+ cx: "12",
55119
+ cy: "12",
55120
+ r: "2"
55121
+ })]
55122
+ });
55123
+ }
55124
+
55125
+ // ── Theme per insight type (accent + icon container colors) ──
55126
+
55127
+ function insTheme(type, isDark) {
55128
+ // Light/dark pairs: [accent, iconBg, iconFg]
55129
+ const map = {
55130
+ 'revenue-insights': isDark ? ['#10b981', '#064e3b', '#a7f3d0'] : ['#10b981', '#ecfdf5', '#065f46'],
55131
+ 'impact-analysis': isDark ? ['#f59e0b', '#78350f', '#fde68a'] : ['#f59e0b', '#fef3c7', '#92400e'],
55132
+ 'deviation-analysis': isDark ? ['#3b82f6', '#1e3a8a', '#bfdbfe'] : ['#3b82f6', '#dbeafe', '#1e40af'],
55133
+ 'main-drivers': isDark ? ['#8b5cf6', '#4c1d95', '#ddd6fe'] : ['#8b5cf6', '#ede9fe', '#5b21b6'],
55134
+ 'key-observations': isDark ? ['#059669', '#064e3b', '#a7f3d0'] : ['#059669', '#f0fdf4', '#14532d'],
55135
+ 'recommendations': isDark ? ['#818cf8', '#312e81', '#c7d2fe'] : ['#4f46e5', '#eef2ff', '#4f46e5']
55136
+ };
55137
+ const [accent, iconBg, iconFg] = map[type] || ['#64748b', '#f1f5f9', '#475569'];
55138
+ return {
55139
+ accent,
55140
+ iconBg,
55141
+ iconFg
55142
+ };
55143
+ }
55144
+
55145
+ // ── Shared shell for all six insight cards ──
55146
+
55147
+ function InsightShell(_ref23) {
55148
+ let {
55149
+ type,
55150
+ icon,
55151
+ title,
55152
+ count,
55153
+ isDark,
55154
+ children
55155
+ } = _ref23;
55156
+ const {
55157
+ accent,
55158
+ iconBg,
55159
+ iconFg
55160
+ } = insTheme(type, isDark);
55161
+ const border = isDark ? '1px solid #374151' : '1px solid #e5e7eb';
55162
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
55163
+ style: {
55164
+ background: isDark ? '#1f2937' : '#ffffff',
55165
+ border,
55166
+ borderRadius: 12,
55167
+ overflow: 'hidden',
55168
+ margin: '8px 0',
55169
+ color: isDark ? '#f3f4f6' : '#0f172a'
55170
+ },
55171
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
55172
+ style: {
55173
+ height: 4,
55174
+ background: accent
55175
+ }
55176
+ }), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
55177
+ style: {
55178
+ display: 'flex',
55179
+ alignItems: 'center',
55180
+ justifyContent: 'space-between',
55181
+ gap: 8,
55182
+ padding: '12px 14px 10px',
55183
+ borderBottom: border
55184
+ },
55185
+ children: [/*#__PURE__*/jsxRuntimeExports.jsxs("div", {
55186
+ style: {
55187
+ display: 'flex',
55188
+ alignItems: 'center',
55189
+ gap: 8,
55190
+ fontSize: 13,
55191
+ fontWeight: 700
55192
+ },
55193
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("span", {
55194
+ style: {
55195
+ display: 'inline-flex',
55196
+ alignItems: 'center',
55197
+ justifyContent: 'center',
55198
+ width: 22,
55199
+ height: 22,
55200
+ borderRadius: 6,
55201
+ background: iconBg,
55202
+ color: iconFg
55203
+ },
55204
+ children: icon
55205
+ }), title]
55206
+ }), count != null && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55207
+ style: {
55208
+ fontSize: 11,
55209
+ color: isDark ? '#9ca3af' : '#64748b',
55210
+ fontVariantNumeric: 'tabular-nums'
55211
+ },
55212
+ children: count
55213
+ })]
55214
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55215
+ style: {
55216
+ padding: '12px 14px 14px',
55217
+ fontSize: 13,
55218
+ lineHeight: 1.55
55219
+ },
55220
+ children: children
55221
+ })]
55222
+ });
55223
+ }
55224
+
55225
+ // ── Shared mini-pieces (delta tag, metric chips) ──
55226
+
55227
+ function deltaToneInsights(delta) {
55228
+ const s = String(delta || '').trim();
55229
+ if (!s) return 'flat';
55230
+ if (s.startsWith('+')) return 'up';
55231
+ if (s.startsWith('-') || s.startsWith('−')) return 'dn';
55232
+ return 'flat';
55233
+ }
55234
+ function DeltaTag(_ref24) {
55235
+ let {
55236
+ delta,
55237
+ isDark
55238
+ } = _ref24;
55239
+ if (!delta) return null;
55240
+ const tone = deltaToneInsights(delta);
55241
+ const map = isDark ? {
55242
+ up: {
55243
+ bg: '#064e3b',
55244
+ fg: '#a7f3d0'
55245
+ },
55246
+ dn: {
55247
+ bg: '#7f1d1d',
55248
+ fg: '#fecaca'
55249
+ },
55250
+ flat: {
55251
+ bg: '#1f2937',
55252
+ fg: '#9ca3af'
55253
+ }
55254
+ } : {
55255
+ up: {
55256
+ bg: '#dcfce7',
55257
+ fg: '#166534'
55258
+ },
55259
+ dn: {
55260
+ bg: '#fee2e2',
55261
+ fg: '#991b1b'
55262
+ },
55263
+ flat: {
55264
+ bg: '#f1f5f9',
55265
+ fg: '#64748b'
55266
+ }
55267
+ };
55268
+ const t = map[tone];
55269
+ return /*#__PURE__*/jsxRuntimeExports.jsx("span", {
55270
+ style: {
55271
+ fontSize: 9,
55272
+ fontWeight: 600,
55273
+ padding: '1px 5px',
55274
+ borderRadius: 3,
55275
+ marginLeft: 4,
55276
+ background: t.bg,
55277
+ color: t.fg
55278
+ },
55279
+ children: delta
55280
+ });
55281
+ }
55282
+ function MetricChipsInsights(_ref25) {
55283
+ let {
55284
+ items,
55285
+ isDark
55286
+ } = _ref25;
55287
+ if (!items || !items.length) return null;
55288
+ const border = isDark ? '1px solid #374151' : '1px solid #e5e7eb';
55289
+ const labelCol = isDark ? '#9ca3af' : '#64748b';
55290
+ const valCol = isDark ? '#f3f4f6' : '#0f172a';
55291
+ const chipBg = isDark ? '#111827' : '#f8fafc';
55292
+ return /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55293
+ style: {
55294
+ display: 'flex',
55295
+ flexWrap: 'wrap',
55296
+ gap: 6,
55297
+ marginTop: 4
55298
+ },
55299
+ children: items.map((m, i) => /*#__PURE__*/jsxRuntimeExports.jsxs("span", {
55300
+ style: {
55301
+ display: 'inline-flex',
55302
+ alignItems: 'baseline',
55303
+ gap: 4,
55304
+ fontSize: 11,
55305
+ lineHeight: 1,
55306
+ padding: '5px 8px',
55307
+ borderRadius: 6,
55308
+ background: chipBg,
55309
+ border
55310
+ },
55311
+ children: [m.label && /*#__PURE__*/jsxRuntimeExports.jsxs("span", {
55312
+ style: {
55313
+ color: labelCol
55314
+ },
55315
+ children: [m.label, ":"]
55316
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("span", {
55317
+ style: {
55318
+ fontWeight: 700,
55319
+ color: valCol,
55320
+ fontVariantNumeric: 'tabular-nums'
55321
+ },
55322
+ children: m.value
55323
+ }), /*#__PURE__*/jsxRuntimeExports.jsx(DeltaTag, {
55324
+ delta: m.delta,
55325
+ isDark: isDark
55326
+ })]
55327
+ }, i))
55328
+ });
55329
+ }
55330
+
55331
+ // ── 1. Revenue Insights ──
55332
+
55333
+ function RevenueInsightsCard(_ref26) {
55334
+ let {
55335
+ spec,
55336
+ isDark
55337
+ } = _ref26;
55338
+ const totals = Array.isArray(spec.totals) ? spec.totals : [];
55339
+ const narrCol = isDark ? '#9ca3af' : '#64748b';
55340
+ return /*#__PURE__*/jsxRuntimeExports.jsxs(InsightShell, {
55341
+ type: "revenue-insights",
55342
+ icon: /*#__PURE__*/jsxRuntimeExports.jsx(IconTrendingUp, {}),
55343
+ title: spec.title || 'Revenue insights',
55344
+ count: null,
55345
+ isDark: isDark,
55346
+ children: [spec.headline && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55347
+ style: {
55348
+ fontSize: 18,
55349
+ fontWeight: 700,
55350
+ marginBottom: 4
55351
+ },
55352
+ children: spec.headline
55353
+ }), spec.narrative && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55354
+ style: {
55355
+ color: narrCol,
55356
+ marginBottom: totals.length ? 8 : 0
55357
+ },
55358
+ children: spec.narrative
55359
+ }), totals.length > 0 && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55360
+ style: {
55361
+ display: 'grid',
55362
+ gridTemplateColumns: 'repeat(auto-fit, minmax(140px, 1fr))',
55363
+ gap: 8,
55364
+ marginTop: 8
55365
+ },
55366
+ children: totals.map((t, i) => /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
55367
+ style: {
55368
+ background: isDark ? '#111827' : '#f8fafc',
55369
+ border: isDark ? '1px solid #374151' : '1px solid #e5e7eb',
55370
+ borderRadius: 8,
55371
+ padding: '8px 10px'
55372
+ },
55373
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
55374
+ style: {
55375
+ fontSize: 11,
55376
+ color: narrCol
55377
+ },
55378
+ children: t.label
55379
+ }), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
55380
+ style: {
55381
+ fontSize: 16,
55382
+ fontWeight: 700,
55383
+ fontVariantNumeric: 'tabular-nums'
55384
+ },
55385
+ children: [t.value, /*#__PURE__*/jsxRuntimeExports.jsx(DeltaTag, {
55386
+ delta: t.delta,
55387
+ isDark: isDark
55388
+ })]
55389
+ })]
55390
+ }, i))
55391
+ })]
55392
+ });
55393
+ }
55394
+
55395
+ // ── 2. Impact Analysis ──
55396
+
55397
+ function ImpactGroupBlock(_ref27) {
55398
+ let {
55399
+ items,
55400
+ sentiment,
55401
+ isDark
55402
+ } = _ref27;
55403
+ if (!items || items.length === 0) return null;
55404
+ const label = sentiment === 'positive' ? 'Positive impact' : sentiment === 'negative' ? 'Negative impact' : 'Neutral';
55405
+ const subColor = isDark ? '#9ca3af' : '#64748b';
55406
+ const blockStyle = sentiment === 'positive' ? {
55407
+ bg: isDark ? 'rgba(16,185,129,0.10)' : '#f0fdf4',
55408
+ bd: isDark ? 'rgba(52,211,153,0.30)' : '#bbf7d0',
55409
+ tx: isDark ? '#a7f3d0' : '#14532d',
55410
+ dot: isDark ? '#34d399' : '#10b981'
55411
+ } : sentiment === 'negative' ? {
55412
+ bg: isDark ? 'rgba(239,68,68,0.10)' : '#fef2f2',
55413
+ bd: isDark ? 'rgba(248,113,113,0.30)' : '#fecaca',
55414
+ tx: isDark ? '#fecaca' : '#7f1d1d',
55415
+ dot: isDark ? '#f87171' : '#ef4444'
55416
+ } : {
55417
+ bg: isDark ? '#111827' : '#f8fafc',
55418
+ bd: isDark ? '#374151' : '#e2e8f0',
55419
+ tx: isDark ? '#f3f4f6' : '#0f172a',
55420
+ dot: isDark ? '#9ca3af' : '#94a3b8'
55421
+ };
55422
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
55423
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
55424
+ style: {
55425
+ fontSize: 11,
55426
+ fontWeight: 700,
55427
+ textTransform: 'uppercase',
55428
+ letterSpacing: '0.4px',
55429
+ color: subColor,
55430
+ margin: '10px 0 6px'
55431
+ },
55432
+ children: label
55433
+ }), items.map((it, i) => /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
55434
+ style: {
55435
+ background: blockStyle.bg,
55436
+ border: "1px solid ".concat(blockStyle.bd),
55437
+ borderRadius: 8,
55438
+ padding: '8px 10px',
55439
+ margin: '4px 0',
55440
+ color: blockStyle.tx
55441
+ },
55442
+ children: [/*#__PURE__*/jsxRuntimeExports.jsxs("div", {
55443
+ style: {
55444
+ fontWeight: 700,
55445
+ display: 'block',
55446
+ marginBottom: 2
55447
+ },
55448
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("span", {
55449
+ style: {
55450
+ display: 'inline-block',
55451
+ width: 7,
55452
+ height: 7,
55453
+ borderRadius: '50%',
55454
+ background: blockStyle.dot,
55455
+ marginRight: 6,
55456
+ verticalAlign: 'middle'
55457
+ }
55458
+ }), it.title]
55459
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55460
+ children: it.description
55461
+ }), /*#__PURE__*/jsxRuntimeExports.jsx(MetricChipsInsights, {
55462
+ items: it.metrics,
55463
+ isDark: isDark
55464
+ })]
55465
+ }, i))]
55466
+ });
55467
+ }
55468
+ function ImpactAnalysisCard(_ref28) {
55469
+ let {
55470
+ spec,
55471
+ isDark
55472
+ } = _ref28;
55473
+ return /*#__PURE__*/jsxRuntimeExports.jsxs(InsightShell, {
55474
+ type: "impact-analysis",
55475
+ icon: /*#__PURE__*/jsxRuntimeExports.jsx(IconScale, {}),
55476
+ title: spec.title || 'Impact analysis',
55477
+ count: null,
55478
+ isDark: isDark,
55479
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx(ImpactGroupBlock, {
55480
+ items: spec.positive,
55481
+ sentiment: "positive",
55482
+ isDark: isDark
55483
+ }), /*#__PURE__*/jsxRuntimeExports.jsx(ImpactGroupBlock, {
55484
+ items: spec.negative,
55485
+ sentiment: "negative",
55486
+ isDark: isDark
55487
+ }), /*#__PURE__*/jsxRuntimeExports.jsx(ImpactGroupBlock, {
55488
+ items: spec.neutral,
55489
+ sentiment: "neutral",
55490
+ isDark: isDark
55491
+ })]
55492
+ });
55493
+ }
55494
+
55495
+ // ── 3. Deviation Analysis ──
55496
+
55497
+ function DeviationAnalysisCard(_ref29) {
55498
+ let {
55499
+ spec,
55500
+ isDark
55501
+ } = _ref29;
55502
+ const rows = Array.isArray(spec.deviations) ? spec.deviations : [];
55503
+ const border = isDark ? '1px solid #374151' : '1px solid #e5e7eb';
55504
+ const headColor = isDark ? '#9ca3af' : '#64748b';
55505
+ const cellColor = isDark ? '#f3f4f6' : '#0f172a';
55506
+ const deltaColor = tone => {
55507
+ if (tone === 'up') return isDark ? '#34d399' : '#15803d';
55508
+ if (tone === 'dn') return isDark ? '#f87171' : '#b91c1c';
55509
+ return isDark ? '#9ca3af' : '#64748b';
55510
+ };
55511
+ return /*#__PURE__*/jsxRuntimeExports.jsxs(InsightShell, {
55512
+ type: "deviation-analysis",
55513
+ icon: /*#__PURE__*/jsxRuntimeExports.jsx(IconGitCompare, {}),
55514
+ title: spec.title || 'Deviation analysis',
55515
+ count: null,
55516
+ isDark: isDark,
55517
+ children: [rows.length === 0 ? /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55518
+ style: {
55519
+ color: headColor,
55520
+ fontSize: 12,
55521
+ padding: '14px 0',
55522
+ textAlign: 'center'
55523
+ },
55524
+ children: "No deviations"
55525
+ }) : /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55526
+ style: {
55527
+ overflowX: 'auto'
55528
+ },
55529
+ children: /*#__PURE__*/jsxRuntimeExports.jsxs("table", {
55530
+ style: {
55531
+ width: '100%',
55532
+ borderCollapse: 'collapse',
55533
+ fontSize: 12
55534
+ },
55535
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("thead", {
55536
+ children: /*#__PURE__*/jsxRuntimeExports.jsx("tr", {
55537
+ children: ['Segment', 'Metric', 'Expected', 'Actual', 'Delta'].map(h => /*#__PURE__*/jsxRuntimeExports.jsx("th", {
55538
+ style: {
55539
+ padding: '7px 10px',
55540
+ borderBottom: border,
55541
+ textAlign: 'left',
55542
+ fontSize: 11,
55543
+ color: headColor,
55544
+ fontWeight: 600,
55545
+ textTransform: 'uppercase',
55546
+ letterSpacing: '0.3px'
55547
+ },
55548
+ children: h
55549
+ }, h))
55550
+ })
55551
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("tbody", {
55552
+ children: rows.map((r, i) => /*#__PURE__*/jsxRuntimeExports.jsxs("tr", {
55553
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("td", {
55554
+ style: {
55555
+ padding: '7px 10px',
55556
+ borderBottom: border,
55557
+ color: cellColor
55558
+ },
55559
+ children: r.segment
55560
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("td", {
55561
+ style: {
55562
+ padding: '7px 10px',
55563
+ borderBottom: border,
55564
+ color: cellColor
55565
+ },
55566
+ children: r.metric
55567
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("td", {
55568
+ style: {
55569
+ padding: '7px 10px',
55570
+ borderBottom: border,
55571
+ color: cellColor,
55572
+ fontVariantNumeric: 'tabular-nums'
55573
+ },
55574
+ children: r.expected
55575
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("td", {
55576
+ style: {
55577
+ padding: '7px 10px',
55578
+ borderBottom: border,
55579
+ color: cellColor,
55580
+ fontVariantNumeric: 'tabular-nums'
55581
+ },
55582
+ children: r.actual
55583
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("td", {
55584
+ style: {
55585
+ padding: '7px 10px',
55586
+ borderBottom: border,
55587
+ color: deltaColor(r.tone),
55588
+ fontWeight: 700,
55589
+ fontVariantNumeric: 'tabular-nums'
55590
+ },
55591
+ children: r.delta
55592
+ })]
55593
+ }, i))
55594
+ })]
55595
+ })
55596
+ }), spec.summary && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55597
+ style: {
55598
+ background: isDark ? '#111827' : '#f8fafc',
55599
+ border,
55600
+ borderRadius: 6,
55601
+ padding: '8px 10px',
55602
+ marginTop: 10,
55603
+ fontSize: 12,
55604
+ color: cellColor
55605
+ },
55606
+ children: spec.summary
55607
+ })]
55608
+ });
55609
+ }
55610
+
55611
+ // ── 4. Main Drivers ──
55612
+
55613
+ function MainDriversCard(_ref30) {
55614
+ let {
55615
+ spec,
55616
+ isDark
55617
+ } = _ref30;
55618
+ const sec = Array.isArray(spec.secondary) ? spec.secondary : [];
55619
+ const evidenceColor = isDark ? '#9ca3af' : '#64748b';
55620
+ const subColor = isDark ? '#9ca3af' : '#64748b';
55621
+ const primary = spec.primary;
55622
+ return /*#__PURE__*/jsxRuntimeExports.jsxs(InsightShell, {
55623
+ type: "main-drivers",
55624
+ icon: /*#__PURE__*/jsxRuntimeExports.jsx(IconZap, {}),
55625
+ title: spec.title || 'Main drivers',
55626
+ count: null,
55627
+ isDark: isDark,
55628
+ children: [primary && /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
55629
+ style: {
55630
+ background: isDark ? 'rgba(139,92,246,0.10)' : '#faf5ff',
55631
+ border: isDark ? '1px solid rgba(167,139,250,0.30)' : '1px solid #d8b4fe',
55632
+ borderRadius: 8,
55633
+ padding: '10px 12px',
55634
+ marginBottom: sec.length ? 10 : 0
55635
+ },
55636
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
55637
+ style: {
55638
+ fontSize: 10,
55639
+ fontWeight: 700,
55640
+ textTransform: 'uppercase',
55641
+ letterSpacing: '0.4px',
55642
+ color: isDark ? '#c4b5fd' : '#7c3aed',
55643
+ marginBottom: 4
55644
+ },
55645
+ children: "Primary driver"
55646
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55647
+ style: {
55648
+ fontWeight: 600
55649
+ },
55650
+ children: primary.factor
55651
+ }), primary.evidence && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55652
+ style: {
55653
+ color: evidenceColor,
55654
+ fontSize: 12,
55655
+ marginTop: 4
55656
+ },
55657
+ children: primary.evidence
55658
+ }), primary.metric && /*#__PURE__*/jsxRuntimeExports.jsxs("span", {
55659
+ style: {
55660
+ display: 'inline-block',
55661
+ marginTop: 6,
55662
+ background: isDark ? 'rgba(139,92,246,0.20)' : '#ede9fe',
55663
+ color: isDark ? '#ddd6fe' : '#5b21b6',
55664
+ fontSize: 11,
55665
+ fontWeight: 600,
55666
+ padding: '2px 7px',
55667
+ borderRadius: 6
55668
+ },
55669
+ children: [primary.metric.label, ": ", primary.metric.value]
55670
+ })]
55671
+ }), sec.length > 0 && /*#__PURE__*/jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, {
55672
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
55673
+ style: {
55674
+ fontSize: 11,
55675
+ fontWeight: 700,
55676
+ textTransform: 'uppercase',
55677
+ letterSpacing: '0.4px',
55678
+ color: subColor,
55679
+ margin: '10px 0 6px'
55680
+ },
55681
+ children: "Secondary drivers"
55682
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("ul", {
55683
+ style: {
55684
+ paddingLeft: 20,
55685
+ margin: 0
55686
+ },
55687
+ children: sec.map((s, i) => /*#__PURE__*/jsxRuntimeExports.jsxs("li", {
55688
+ style: {
55689
+ marginBottom: 6
55690
+ },
55691
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
55692
+ style: {
55693
+ fontWeight: 600
55694
+ },
55695
+ children: s.factor
55696
+ }), s.evidence && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55697
+ style: {
55698
+ color: evidenceColor,
55699
+ fontSize: 12,
55700
+ marginTop: 2
55701
+ },
55702
+ children: s.evidence
55703
+ })]
55704
+ }, i))
55705
+ })]
55706
+ })]
55707
+ });
55708
+ }
55709
+
55710
+ // ── Shared item-row for Observations & Recommendations ──
55711
+
55712
+ function InsightItem(_ref31) {
55713
+ let {
55714
+ rankBgFg,
55715
+ rank,
55716
+ chips,
55717
+ text,
55718
+ narrative,
55719
+ metrics,
55720
+ impactPill,
55721
+ isDark
55722
+ } = _ref31;
55723
+ const narrCol = isDark ? '#9ca3af' : '#64748b';
55724
+ const dashedBorder = isDark ? '1px dashed #374151' : '1px dashed #e5e7eb';
55725
+ return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
55726
+ style: {
55727
+ display: 'flex',
55728
+ gap: 10,
55729
+ alignItems: 'flex-start',
55730
+ padding: '10px 0',
55731
+ borderBottom: dashedBorder
55732
+ },
55733
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
55734
+ style: {
55735
+ flex: '0 0 22px',
55736
+ height: 22,
55737
+ width: 22,
55738
+ borderRadius: '50%',
55739
+ fontSize: 11,
55740
+ fontWeight: 700,
55741
+ display: 'flex',
55742
+ alignItems: 'center',
55743
+ justifyContent: 'center',
55744
+ fontVariantNumeric: 'tabular-nums',
55745
+ background: rankBgFg.bg,
55746
+ color: rankBgFg.fg
55747
+ },
55748
+ children: rank
55749
+ }), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
55750
+ style: {
55751
+ flex: '1 1 auto',
55752
+ minWidth: 0,
55753
+ display: 'flex',
55754
+ flexDirection: 'column',
55755
+ gap: 5
55756
+ },
55757
+ children: [chips, text && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55758
+ style: {
55759
+ fontSize: 13,
55760
+ fontWeight: 600
55761
+ },
55762
+ children: text
55763
+ }), narrative && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55764
+ style: {
55765
+ fontSize: 12,
55766
+ color: narrCol
55767
+ },
55768
+ children: narrative
55769
+ }), /*#__PURE__*/jsxRuntimeExports.jsx(MetricChipsInsights, {
55770
+ items: metrics,
55771
+ isDark: isDark
55772
+ }), impactPill]
55773
+ })]
55774
+ });
55775
+ }
55776
+
55777
+ // ── 5. Key Observations ──
55778
+
55779
+ function KeyObservationsCard(_ref32) {
55780
+ let {
55781
+ spec,
55782
+ isDark
55783
+ } = _ref32;
55784
+ const items = Array.isArray(spec.items) ? [...spec.items].sort((a, b) => (a.rank || 0) - (b.rank || 0)) : [];
55785
+ const rankBgFg = isDark ? {
55786
+ bg: '#064e3b',
55787
+ fg: '#a7f3d0'
55788
+ } : {
55789
+ bg: '#f0fdf4',
55790
+ fg: '#14532d'
55791
+ };
55792
+ return /*#__PURE__*/jsxRuntimeExports.jsx(InsightShell, {
55793
+ type: "key-observations",
55794
+ icon: /*#__PURE__*/jsxRuntimeExports.jsx(IconLightbulb, {}),
55795
+ title: spec.title || 'Key observations',
55796
+ count: items.length ? "".concat(items.length, " item").concat(items.length === 1 ? '' : 's') : null,
55797
+ isDark: isDark,
55798
+ children: items.length === 0 ? /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55799
+ style: {
55800
+ color: isDark ? '#9ca3af' : '#64748b',
55801
+ fontSize: 12,
55802
+ padding: '14px 0',
55803
+ textAlign: 'center'
55804
+ },
55805
+ children: "No observations available."
55806
+ }) : items.map((k, i) => {
55807
+ const chips = [];
55808
+ if (k.category) chips.push(/*#__PURE__*/jsxRuntimeExports.jsx("span", {
55809
+ style: chipStyle('cat', isDark),
55810
+ children: k.category
55811
+ }, "cat"));
55812
+ if (k.priority) chips.push(/*#__PURE__*/jsxRuntimeExports.jsx("span", {
55813
+ style: chipStyle('prio-' + k.priority, isDark),
55814
+ children: k.priority
55815
+ }, "prio"));
55816
+ return /*#__PURE__*/jsxRuntimeExports.jsx(InsightItem, {
55817
+ rankBgFg: rankBgFg,
55818
+ rank: k.rank || i + 1,
55819
+ chips: chips.length ? /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55820
+ style: {
55821
+ display: 'flex',
55822
+ flexWrap: 'wrap',
55823
+ gap: 5
55824
+ },
55825
+ children: chips
55826
+ }) : null,
55827
+ text: k.text,
55828
+ narrative: k.narrative,
55829
+ metrics: k.metrics,
55830
+ impactPill: null,
55831
+ isDark: isDark
55832
+ }, i);
55833
+ })
55834
+ });
55835
+ }
55836
+
55837
+ // ── 6. Recommendations ──
55838
+
55839
+ function RecommendationsCard(_ref33) {
55840
+ let {
55841
+ spec,
55842
+ isDark
55843
+ } = _ref33;
55844
+ const items = Array.isArray(spec.items) ? [...spec.items].sort((a, b) => (a.rank || 0) - (b.rank || 0)) : [];
55845
+ const rankBgFg = isDark ? {
55846
+ bg: '#312e81',
55847
+ fg: '#c7d2fe'
55848
+ } : {
55849
+ bg: '#4f46e5',
55850
+ fg: '#ffffff'
55851
+ };
55852
+ return /*#__PURE__*/jsxRuntimeExports.jsx(InsightShell, {
55853
+ type: "recommendations",
55854
+ icon: /*#__PURE__*/jsxRuntimeExports.jsx(IconTarget, {}),
55855
+ title: spec.title || 'Recommendations',
55856
+ count: items.length ? "".concat(items.length, " item").concat(items.length === 1 ? '' : 's') : null,
55857
+ isDark: isDark,
55858
+ children: items.length === 0 ? /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55859
+ style: {
55860
+ color: isDark ? '#9ca3af' : '#64748b',
55861
+ fontSize: 12,
55862
+ padding: '14px 0',
55863
+ textAlign: 'center'
55864
+ },
55865
+ children: "No recommendations available."
55866
+ }) : items.map((r, i) => {
55867
+ const segChips = (r.affected_segments || []).map((s, j) => /*#__PURE__*/jsxRuntimeExports.jsx("span", {
55868
+ style: chipStyle('seg', isDark),
55869
+ children: s
55870
+ }, j));
55871
+ const impactPill = r.expected_impact ? /*#__PURE__*/jsxRuntimeExports.jsxs("span", {
55872
+ style: {
55873
+ alignSelf: 'flex-start',
55874
+ display: 'inline-flex',
55875
+ alignItems: 'center',
55876
+ gap: 4,
55877
+ marginTop: 2,
55878
+ background: isDark ? 'rgba(16,185,129,0.18)' : '#dcfce7',
55879
+ color: isDark ? '#a7f3d0' : '#166534',
55880
+ fontSize: 10,
55881
+ fontWeight: 700,
55882
+ padding: '4px 9px',
55883
+ borderRadius: 999,
55884
+ border: isDark ? '1px solid rgba(52,211,153,0.30)' : '1px solid #bbf7d0'
55885
+ },
55886
+ children: ["\u2191 ", r.expected_impact]
55887
+ }) : null;
55888
+ return /*#__PURE__*/jsxRuntimeExports.jsx(InsightItem, {
55889
+ rankBgFg: rankBgFg,
55890
+ rank: r.rank || i + 1,
55891
+ chips: segChips.length ? /*#__PURE__*/jsxRuntimeExports.jsx("div", {
55892
+ style: {
55893
+ display: 'flex',
55894
+ flexWrap: 'wrap',
55895
+ gap: 5
55896
+ },
55897
+ children: segChips
55898
+ }) : null,
55899
+ text: r.action,
55900
+ narrative: r.rationale,
55901
+ metrics: r.metrics,
55902
+ impactPill: impactPill,
55903
+ isDark: isDark
55904
+ }, i);
55905
+ })
55906
+ });
55907
+ }
55908
+
55909
+ // ── Chip styling shared between observations + recommendations ──
55910
+
55911
+ function chipStyle(kind, isDark) {
55912
+ const base = {
55913
+ display: 'inline-flex',
55914
+ alignItems: 'center',
55915
+ fontSize: 10,
55916
+ fontWeight: 600,
55917
+ lineHeight: 1,
55918
+ padding: '3px 7px',
55919
+ borderRadius: 999,
55920
+ border: isDark ? '1px solid #374151' : '1px solid #e5e7eb',
55921
+ background: isDark ? '#111827' : '#f8fafc',
55922
+ color: isDark ? '#9ca3af' : '#64748b'
55923
+ };
55924
+ if (kind === 'cat') return _objectSpread2(_objectSpread2({}, base), {}, {
55925
+ background: isDark ? 'rgba(99,102,241,0.20)' : '#eef2ff',
55926
+ color: isDark ? '#c7d2fe' : '#4f46e5',
55927
+ border: '1px solid transparent'
55928
+ });
55929
+ if (kind === 'seg') return _objectSpread2(_objectSpread2({}, base), {}, {
55930
+ background: isDark ? '#1f2937' : '#f1f5f9',
55931
+ color: isDark ? '#f3f4f6' : '#0f172a'
55932
+ });
55933
+ if (kind === 'prio-high') return _objectSpread2(_objectSpread2({}, base), {}, {
55934
+ background: isDark ? 'rgba(239,68,68,0.18)' : '#fef2f2',
55935
+ color: isDark ? '#fecaca' : '#7f1d1d',
55936
+ border: isDark ? '1px solid rgba(248,113,113,0.30)' : '1px solid #fecaca'
55937
+ });
55938
+ if (kind === 'prio-medium') return _objectSpread2(_objectSpread2({}, base), {}, {
55939
+ background: isDark ? 'rgba(99,102,241,0.20)' : '#eef2ff',
55940
+ color: isDark ? '#c7d2fe' : '#4f46e5',
55941
+ border: '1px solid transparent'
55942
+ });
55943
+ if (kind === 'prio-low') return base;
55944
+ return base;
55945
+ }
55946
+
54180
55947
  const _excluded$1 = ["node", "children"],
54181
55948
  _excluded2 = ["node", "children"],
54182
55949
  _excluded3 = ["node", "children"],
@@ -54190,6 +55957,19 @@
54190
55957
  _excluded1 = ["node", "children"],
54191
55958
  _excluded10 = ["node", "children"],
54192
55959
  _excluded11 = ["className", "children"];
55960
+ const A2UI_FENCE_LANGS = new Set(["eshal-ui", "eshal-chart", "chart"]);
55961
+
55962
+ // Pull a clean text payload out of ReactMarkdown's `children` prop — it's
55963
+ // usually a string for fenced code blocks but can be an array of nodes when
55964
+ // remark plugins pre-tokenise. Defensive coercion: anything non-string is
55965
+ // dropped so JSON.parse never sees React elements.
55966
+ function extractFenceText(children) {
55967
+ if (typeof children === "string") return children;
55968
+ if (Array.isArray(children)) {
55969
+ return children.map(c => typeof c === "string" ? c : "").join("");
55970
+ }
55971
+ return "";
55972
+ }
54193
55973
  const StreamingMarkdown = _ref => {
54194
55974
  let {
54195
55975
  content,
@@ -54557,11 +56337,34 @@
54557
56337
  children
54558
56338
  } = _ref12,
54559
56339
  props = _objectWithoutProperties$1(_ref12, _excluded11);
54560
- const match = /language-(\w+)/.exec(className || "");
56340
+ const match = /language-([\w-]+)/.exec(className || "");
56341
+ const lang = match ? match[1] : null;
56342
+
56343
+ // A2UI fence — render the JSON payload as a real visual block
56344
+ // (bar / line / pie chart / table / alert / KPI / card / button-
56345
+ // group). Falls through to the normal code-block rendering if
56346
+ // the JSON doesn't parse or the type is unrecognised — never
56347
+ // crashes the chat surface on a malformed fence. This is the
56348
+ // 12-06-2026 fix for the "graph responses show as raw JSON in
56349
+ // the embedded widget" bug.
56350
+ if (lang && A2UI_FENCE_LANGS.has(lang)) {
56351
+ const raw = extractFenceText(children).trim();
56352
+ try {
56353
+ const parsed = JSON.parse(raw);
56354
+ if (parsed && typeof parsed === "object") {
56355
+ return /*#__PURE__*/jsxRuntimeExports.jsx(A2uiBlock, {
56356
+ spec: parsed,
56357
+ isDark: isDark
56358
+ });
56359
+ }
56360
+ } catch (e) {
56361
+ // fall through to default code-block rendering
56362
+ }
56363
+ }
54561
56364
  if (match) {
54562
56365
  return /*#__PURE__*/jsxRuntimeExports.jsx(SyntaxHighlighter, _objectSpread2(_objectSpread2({
54563
56366
  style: oneDark,
54564
- language: match[1],
56367
+ language: lang,
54565
56368
  PreTag: "div",
54566
56369
  wrapLines: true
54567
56370
  }, props), {}, {
@@ -54902,13 +56705,62 @@
54902
56705
  return (_message$feedback = message === null || message === void 0 ? void 0 : message.feedback) !== null && _message$feedback !== void 0 ? _message$feedback : null;
54903
56706
  }); // 'like' | 'dislike' | null
54904
56707
 
56708
+ // Thumbs-down opens an optional free-text "what went wrong?" form before
56709
+ // the feedback is submitted — mirroring the in-app preview widget
56710
+ // (packages/frontend/.../preview-section/AssistantMessage.tsx). Previously
56711
+ // the installed widget POSTed the dislike immediately with no comment box,
56712
+ // so users got no chance to explain and no visible confirmation.
56713
+ const [showFeedbackForm, setShowFeedbackForm] = reactExports.useState(false);
56714
+ const [pendingFeedback, setPendingFeedback] = reactExports.useState(null); // 'dislike' | null
56715
+ const [feedbackText, setFeedbackText] = reactExports.useState("");
56716
+ const feedbackInputRef = reactExports.useRef(null);
54905
56717
  const handleFeedbackClick = reactExports.useCallback(type => {
54906
- const newFeedback = activeFeedback === type ? null : type;
54907
- setActiveFeedback(newFeedback);
54908
- if (onFeedback && displayContent) {
54909
- onFeedback(displayContent, newFeedback);
56718
+ if (!onFeedback || !displayContent) return;
56719
+
56720
+ // Clicking the active rating again toggles it off.
56721
+ if (activeFeedback === type) {
56722
+ setActiveFeedback(null);
56723
+ setShowFeedbackForm(false);
56724
+ setPendingFeedback(null);
56725
+ setFeedbackText("");
56726
+ onFeedback(displayContent, null);
56727
+ return;
56728
+ }
56729
+
56730
+ // Thumbs UP submits immediately — a one-click positive signal shouldn't
56731
+ // be gated behind a form.
56732
+ if (type === "like") {
56733
+ setActiveFeedback("like");
56734
+ setShowFeedbackForm(false);
56735
+ setPendingFeedback(null);
56736
+ setFeedbackText("");
56737
+ onFeedback(displayContent, "like");
56738
+ return;
54910
56739
  }
56740
+
56741
+ // Thumbs DOWN opens the optional-reason form; submit posts the feedback
56742
+ // (with or without text), cancel discards it.
56743
+ setPendingFeedback("dislike");
56744
+ setShowFeedbackForm(true);
56745
+ setFeedbackText("");
56746
+ setTimeout(() => {
56747
+ var _feedbackInputRef$cur;
56748
+ return (_feedbackInputRef$cur = feedbackInputRef.current) === null || _feedbackInputRef$cur === void 0 ? void 0 : _feedbackInputRef$cur.focus();
56749
+ }, 100);
54911
56750
  }, [activeFeedback, onFeedback, displayContent]);
56751
+ const handleFeedbackSubmit = reactExports.useCallback(() => {
56752
+ if (!onFeedback || !displayContent || !pendingFeedback) return;
56753
+ setActiveFeedback(pendingFeedback);
56754
+ onFeedback(displayContent, pendingFeedback, feedbackText.trim() || undefined);
56755
+ setShowFeedbackForm(false);
56756
+ setFeedbackText("");
56757
+ setPendingFeedback(null);
56758
+ }, [onFeedback, displayContent, pendingFeedback, feedbackText]);
56759
+ const handleFeedbackCancel = reactExports.useCallback(() => {
56760
+ setShowFeedbackForm(false);
56761
+ setFeedbackText("");
56762
+ setPendingFeedback(null);
56763
+ }, []);
54912
56764
  const bubbleColor = agentMessageBubbleColor !== undefined && agentMessageBubbleColor !== null ? agentMessageBubbleColor : isDark ? "#1f2937" : "#FFFFFF";
54913
56765
  const messageTextColor = assistantTextColor !== undefined && assistantTextColor !== null ? assistantTextColor : textColor !== undefined && textColor !== null ? textColor : isDark ? "#f3f4f6" : "#1A1A1A";
54914
56766
  const messageFontFamily = agentMessageBubbleFontFamily !== undefined && agentMessageBubbleFontFamily !== null ? agentMessageBubbleFontFamily : fontFamily !== undefined && fontFamily !== null ? fontFamily : "Inter";
@@ -55039,7 +56891,7 @@
55039
56891
  children: [/*#__PURE__*/jsxRuntimeExports.jsx("button", {
55040
56892
  type: "button",
55041
56893
  onClick: () => handleFeedbackClick('like'),
55042
- className: "p-0.5 rounded transition-colors ".concat(activeFeedback === 'like' ? 'text-green-500' : isDark ? 'text-gray-500 hover:text-gray-300' : 'text-gray-400 hover:text-gray-600'),
56894
+ className: "p-0.5 rounded transition-colors ".concat(activeFeedback === 'like' || pendingFeedback === 'like' ? 'text-green-500' : isDark ? 'text-gray-500 hover:text-gray-300' : 'text-gray-400 hover:text-gray-600'),
55043
56895
  style: {
55044
56896
  border: "none",
55045
56897
  background: "transparent",
@@ -55054,7 +56906,7 @@
55054
56906
  }), /*#__PURE__*/jsxRuntimeExports.jsx("button", {
55055
56907
  type: "button",
55056
56908
  onClick: () => handleFeedbackClick('dislike'),
55057
- className: "p-0.5 rounded transition-colors ".concat(activeFeedback === 'dislike' ? 'text-red-500' : isDark ? 'text-gray-500 hover:text-gray-300' : 'text-gray-400 hover:text-gray-600'),
56909
+ className: "p-0.5 rounded transition-colors ".concat(activeFeedback === 'dislike' || pendingFeedback === 'dislike' ? 'text-red-500' : isDark ? 'text-gray-500 hover:text-gray-300' : 'text-gray-400 hover:text-gray-600'),
55058
56910
  style: {
55059
56911
  border: "none",
55060
56912
  background: "transparent",
@@ -55068,6 +56920,55 @@
55068
56920
  })
55069
56921
  })]
55070
56922
  })]
56923
+ }), showFeedbackForm && pendingFeedback === 'dislike' && /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
56924
+ className: "mt-2 w-full rounded-xl border p-3 shadow ".concat(isDark ? "bg-gray-800 border-gray-700" : "bg-white border-gray-200"),
56925
+ style: {
56926
+ direction: isRtl ? "rtl" : "ltr"
56927
+ },
56928
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("textarea", {
56929
+ ref: feedbackInputRef,
56930
+ value: feedbackText,
56931
+ onChange: e => setFeedbackText(e.target.value),
56932
+ onKeyDown: e => {
56933
+ if ((e.metaKey || e.ctrlKey) && e.key === "Enter") {
56934
+ e.preventDefault();
56935
+ handleFeedbackSubmit();
56936
+ } else if (e.key === "Escape") {
56937
+ e.preventDefault();
56938
+ handleFeedbackCancel();
56939
+ }
56940
+ },
56941
+ placeholder: "What went wrong? (optional)",
56942
+ rows: 2,
56943
+ className: "w-full resize-none rounded-lg border px-2 py-1.5 text-xs focus:outline-none focus:ring-1 ".concat(isDark ? "bg-gray-900 border-gray-700 text-gray-100 placeholder-gray-500 focus:ring-gray-600" : "bg-white border-gray-200 text-gray-900 placeholder-gray-400 focus:ring-gray-300"),
56944
+ style: {
56945
+ fontFamily: messageFontFamily,
56946
+ textAlign: isRtl ? "right" : "left"
56947
+ }
56948
+ }), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
56949
+ className: "flex items-center justify-end gap-1.5 mt-1.5",
56950
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx("button", {
56951
+ type: "button",
56952
+ onClick: handleFeedbackCancel,
56953
+ className: "text-xs px-2 py-1 rounded transition-colors ".concat(isDark ? "text-gray-400 hover:text-gray-200" : "text-gray-500 hover:text-gray-700"),
56954
+ style: {
56955
+ border: "none",
56956
+ background: "transparent",
56957
+ cursor: "pointer"
56958
+ },
56959
+ children: "Cancel"
56960
+ }), /*#__PURE__*/jsxRuntimeExports.jsx("button", {
56961
+ type: "button",
56962
+ onClick: handleFeedbackSubmit,
56963
+ className: "text-xs px-2.5 py-1 rounded text-white transition-opacity hover:opacity-90",
56964
+ style: {
56965
+ backgroundColor: primaryColor || "#2563eb",
56966
+ border: "none",
56967
+ cursor: "pointer"
56968
+ },
56969
+ children: "Submit"
56970
+ })]
56971
+ })]
55071
56972
  })]
55072
56973
  })]
55073
56974
  })
@@ -60071,10 +61972,14 @@
60071
61972
  }, [isCsatEnabled, showResolveForm, isConversationResolved, resolveRating, resolveFeedbackText]);
60072
61973
  const latestPromptSuggestions = reactExports.useMemo(() => {
60073
61974
  if (!messages || !Array.isArray(messages)) return [];
61975
+ // Reflect the LATEST assistant message's prompts ONLY — do NOT walk back
61976
+ // to an earlier turn. Walking back showed the PREVIOUS turn's chips
61977
+ // whenever the current answer's prompts were empty/late (the one-turn lag).
60074
61978
  for (let i = messages.length - 1; i >= 0; i -= 1) {
60075
- const msg = messages[i];
60076
- if ((msg === null || msg === void 0 ? void 0 : msg.role) === "assistant" && Array.isArray(msg.prompts) && msg.prompts.length > 0) {
60077
- return msg.prompts;
61979
+ var _messages$i;
61980
+ if (((_messages$i = messages[i]) === null || _messages$i === void 0 ? void 0 : _messages$i.role) === "assistant") {
61981
+ const p = messages[i].prompts;
61982
+ return Array.isArray(p) ? p : [];
60078
61983
  }
60079
61984
  }
60080
61985
  return [];
@@ -60090,6 +61995,18 @@
60090
61995
  stablePromptSuggestionsRef.current = [];
60091
61996
  }
60092
61997
  }, [latestPromptSuggestions, messages]);
61998
+
61999
+ // The moment a NEW user turn starts, drop the carried-over suggestions so a
62000
+ // late/empty current turn never leaves the PREVIOUS turn's chips showing
62001
+ // (the reported one-turn lag). They reappear when this turn yields prompts.
62002
+ // (`userMessageCount` is declared above.)
62003
+ const prevUserMessageCountRef = reactExports.useRef(userMessageCount);
62004
+ reactExports.useEffect(() => {
62005
+ if (userMessageCount !== prevUserMessageCountRef.current) {
62006
+ prevUserMessageCountRef.current = userMessageCount;
62007
+ stablePromptSuggestionsRef.current = [];
62008
+ }
62009
+ }, [userMessageCount]);
60093
62010
  const stablePromptSuggestions = latestPromptSuggestions.length > 0 ? latestPromptSuggestions : stablePromptSuggestionsRef.current;
60094
62011
  reactExports.useEffect(() => {
60095
62012
  if (!csatEnabled) return;
@@ -61898,6 +63815,16 @@
61898
63815
  })
61899
63816
  }];
61900
63817
 
63818
+ // Reorder the keyless cascade: freeipapi.com is currently the only one
63819
+ // reliably reachable from a browser — ip-api.com's free tier is HTTP-only
63820
+ // (→ HTTP 403 over HTTPS), ipwho.is → 403, ipapi.co → 429. Trying freeipapi
63821
+ // first avoids three doomed round-trips on every lookup. The rest stay as
63822
+ // fallback in case they recover or behave differently from another network.
63823
+ // NOTE: all IP providers locate the ISP gateway, not the device — for an
63824
+ // accurate end-user position use getBrowserLocation() (GPS + reverseGeocode).
63825
+ const FREE_ORDER = ["freeipapi.com", "ipwho.is", "ipapi.co", "ip-api.com"];
63826
+ freeProviders.sort((a, b) => FREE_ORDER.indexOf(a.name) - FREE_ORDER.indexOf(b.name));
63827
+
61901
63828
  // Key-based providers go first (more reliable, higher limits)
61902
63829
  return [...keyedProviders, ...freeProviders];
61903
63830
  }
@@ -61995,22 +63922,130 @@
61995
63922
  }));
61996
63923
  }
61997
63924
 
63925
+ // Default options for navigator.geolocation.getCurrentPosition.
63926
+ // enableHighAccuracy → prefer real GPS over coarse network positioning;
63927
+ // timeout 8s → don't hang forever waiting for a fix;
63928
+ // maximumAge 5 min → accept a recently-cached fix so a silent refresh
63929
+ // (permission already granted) resolves instantly.
63930
+ const DEFAULT_GEO_OPTIONS = {
63931
+ enableHighAccuracy: true,
63932
+ timeout: 8000,
63933
+ maximumAge: 5 * 60 * 1000
63934
+ };
63935
+
61998
63936
  /**
61999
- * Get browser-native geolocation (GPS / network-based, requires user permission)
63937
+ * Get browser-native geolocation (GPS / network-based).
63938
+ * Triggers the native permission prompt on first use for an origin (unless the
63939
+ * user already granted/denied). Resolves null — never rejects — on error,
63940
+ * denial, unsupported, or insecure (plain-HTTP) context, so callers can simply
63941
+ * fall back to IP geo.
63942
+ *
63943
+ * @param {PositionOptions} [options] - merged over DEFAULT_GEO_OPTIONS
63944
+ * @returns {Promise<{latitude:number, longitude:number, accuracy:number}|null>}
62000
63945
  */
62001
- function getBrowserGeolocation$1(options = {
62002
- timeout: 8000
62003
- }) {
63946
+ function getBrowserGeolocation$1(options = {}) {
62004
63947
  return new Promise(resolve => {
62005
- if (!navigator?.geolocation) return resolve(null);
63948
+ if (typeof navigator === "undefined" || !navigator.geolocation) return resolve(null);
63949
+ // getCurrentPosition only resolves in a secure context (HTTPS or
63950
+ // localhost). Bail early on plain HTTP rather than attempt a doomed prompt.
63951
+ if (typeof window !== "undefined" && window.isSecureContext === false) return resolve(null);
62006
63952
  navigator.geolocation.getCurrentPosition(pos => resolve({
62007
63953
  latitude: pos.coords.latitude,
62008
63954
  longitude: pos.coords.longitude,
62009
63955
  accuracy: pos.coords.accuracy
62010
- }), () => resolve(null), options);
63956
+ }), () => resolve(null), {
63957
+ ...DEFAULT_GEO_OPTIONS,
63958
+ ...options
63959
+ });
62011
63960
  });
62012
63961
  }
62013
63962
 
63963
+ /**
63964
+ * Query the current geolocation permission WITHOUT triggering a prompt.
63965
+ * Lets the host decide whether to ask: "granted" → fetch silently, "denied" →
63966
+ * skip (IP fallback), "prompt" → show your own pre-ask before getCurrentPosition.
63967
+ * Returns "unsupported" where the Permissions API is unavailable (e.g. older
63968
+ * Safari) so callers can treat it as "not known to be granted".
63969
+ * @returns {Promise<"granted"|"denied"|"prompt"|"unsupported">}
63970
+ */
63971
+ async function getGeolocationPermission$1() {
63972
+ try {
63973
+ if (typeof navigator === "undefined" || !navigator.permissions || !navigator.permissions.query) {
63974
+ return "unsupported";
63975
+ }
63976
+ const status = await navigator.permissions.query({
63977
+ name: "geolocation"
63978
+ });
63979
+ return status.state; // "granted" | "denied" | "prompt"
63980
+ } catch {
63981
+ return "unsupported";
63982
+ }
63983
+ }
63984
+
63985
+ /**
63986
+ * Reverse-geocode latitude/longitude → city / region / country.
63987
+ * Uses BigDataCloud's keyless, CORS-enabled *client* endpoint (no API key,
63988
+ * accurate to the city/state level). Resolves null on network failure or an
63989
+ * unusable response so the caller can keep any prior (IP-based) values.
63990
+ *
63991
+ * @param {number} latitude
63992
+ * @param {number} longitude
63993
+ * @param {Object} [options]
63994
+ * @param {number} [options.timeoutMs]
63995
+ * @param {string} [options.localityLanguage="en"]
63996
+ * @returns {Promise<{city,region,regionCode,country,countryCode,latitude,longitude}|null>}
63997
+ */
63998
+ async function reverseGeocode$1(latitude, longitude, options = {}) {
63999
+ if (typeof latitude !== "number" || typeof longitude !== "number") return null;
64000
+ const timeoutMs = options.timeoutMs || _globalConfig.timeoutMs || 5000;
64001
+ const lang = options.localityLanguage || "en";
64002
+ const url = "https://api.bigdatacloud.net/data/reverse-geocode-client" + `?latitude=${latitude}&longitude=${longitude}&localityLanguage=${lang}`;
64003
+ try {
64004
+ const d = await fetchWithTimeout(url, timeoutMs);
64005
+ const city = d.city || d.locality || "";
64006
+ // Treat an empty body (e.g. mid-ocean coords) as a miss, not a result.
64007
+ if (!city && !d.countryName) return null;
64008
+ return {
64009
+ city,
64010
+ region: d.principalSubdivision || "",
64011
+ regionCode: (d.principalSubdivisionCode || "").split("-").pop() || "",
64012
+ country: d.countryName || "",
64013
+ countryCode: d.countryCode || "",
64014
+ latitude,
64015
+ longitude
64016
+ };
64017
+ } catch {
64018
+ return null;
64019
+ }
64020
+ }
64021
+
64022
+ /**
64023
+ * High-level "exact location" helper. Gets the device GPS fix (prompting if
64024
+ * needed) and reverse-geocodes it. Returns a geo-shaped object tagged
64025
+ * source:"gps" when the place resolved; the bare coords (no source tag) when
64026
+ * only the fix succeeded but reverse-geocoding failed; or null when there is no
64027
+ * fix at all (denied / unsupported / insecure). This is the accurate-location
64028
+ * primitive — prefer it over IP geo for the real end-user position.
64029
+ *
64030
+ * @param {PositionOptions} [options]
64031
+ * @returns {Promise<Object|null>}
64032
+ */
64033
+ async function getBrowserLocation$1(options = {}) {
64034
+ const coords = await getBrowserGeolocation$1(options);
64035
+ if (!coords) return null;
64036
+ const place = await reverseGeocode$1(coords.latitude, coords.longitude, options);
64037
+ const hasPlace = !!(place && (place.city || place.country));
64038
+ return {
64039
+ ...(hasPlace ? place : {}),
64040
+ latitude: coords.latitude,
64041
+ longitude: coords.longitude,
64042
+ accuracy: coords.accuracy,
64043
+ ...(hasPlace ? {
64044
+ source: "gps"
64045
+ } : {})
64046
+ };
64047
+ }
64048
+
62014
64049
  /** Build a Google Maps URL from coordinates */
62015
64050
  function toMapsUrl$1(lat, lon) {
62016
64051
  return `https://www.google.com/maps?q=${lat},${lon}`;
@@ -62020,6 +64055,9 @@
62020
64055
  resolveLocation: resolveLocation$1,
62021
64056
  listProviders: listProviders$1,
62022
64057
  getBrowserGeolocation: getBrowserGeolocation$1,
64058
+ getGeolocationPermission: getGeolocationPermission$1,
64059
+ reverseGeocode: reverseGeocode$1,
64060
+ getBrowserLocation: getBrowserLocation$1,
62023
64061
  toMapsUrl: toMapsUrl$1
62024
64062
  };
62025
64063
 
@@ -62203,6 +64241,9 @@
62203
64241
  resolveLocation,
62204
64242
  listProviders,
62205
64243
  getBrowserGeolocation,
64244
+ getGeolocationPermission,
64245
+ reverseGeocode,
64246
+ getBrowserLocation,
62206
64247
  toMapsUrl
62207
64248
  } = location;
62208
64249
  const {
@@ -62235,7 +64276,13 @@
62235
64276
  * @param {Object} [options]
62236
64277
  * @param {Function} [options.onReady] - Callback when profile is ready
62237
64278
  * @param {Function} [options.onError] - Callback on error
62238
- * @param {boolean} [options.geoFromBrowser=false] - Also request GPS (asks permission)
64279
+ * @param {boolean|"auto"} [options.geoFromBrowser=true] - Capture precise GPS
64280
+ * and reverse-geocode it into `geo`. DEFAULT true = request on init()
64281
+ * (shows the native permission prompt unless already granted/denied);
64282
+ * false = never (IP only); "auto" = use GPS only when permission was
64283
+ * ALREADY granted (silent, never prompts).
64284
+ * @param {Object} [options.geoApiKeys] - API keys for keyed geo providers
64285
+ * @param {PositionOptions} [options.geoOptions] - Override getCurrentPosition opts
62239
64286
  * @param {boolean} [options.cache=true] - Use cached profile if < maxAgeMs old
62240
64287
  * @param {number} [options.maxAgeMs=300000] - Max cache age (default 5 min)
62241
64288
  * @param {boolean} [options.autoInit=false] - Auto-init on construction
@@ -62245,7 +64292,13 @@
62245
64292
  this._options = {
62246
64293
  onReady: options.onReady || null,
62247
64294
  onError: options.onError || null,
62248
- geoFromBrowser: options.geoFromBrowser || false,
64295
+ // Default ON: capture precise GPS on init() behind the browser's native
64296
+ // permission prompt. Use `=== undefined` (not `|| `) so an explicit
64297
+ // `false` opt-out is honored; pass "auto" to use an already-granted
64298
+ // permission silently without ever prompting.
64299
+ geoFromBrowser: options.geoFromBrowser === undefined ? true : options.geoFromBrowser,
64300
+ geoApiKeys: options.geoApiKeys || null,
64301
+ geoOptions: options.geoOptions || null,
62249
64302
  cache: options.cache !== false,
62250
64303
  maxAgeMs: options.maxAgeMs || 5 * 60 * 1000,
62251
64304
  autoInit: options.autoInit || false,
@@ -62295,15 +64348,46 @@
62295
64348
  confidence
62296
64349
  } = generateFingerprint();
62297
64350
 
62298
- // 3. IP + Geo — run in parallel
62299
- const [ipResult, browserGeo] = await Promise.all([detectIP(), this._options.geoFromBrowser ? getBrowserGeolocation() : Promise.resolve(null)]);
62300
- const ip = ipResult?.ip || "unknown";
62301
- const ipVersion = ipResult ? getIPVersion(ip) : "unknown";
62302
-
62303
- // 4. Resolve geo from IP
62304
- let geo = null;
62305
- if (ip !== "unknown") {
62306
- geo = await resolveLocation(ip);
64351
+ // 3. IP→geo chain and (optional) precise browser GPS run concurrently.
64352
+ // GPS is the slow path (permission prompt + satellite fix) so we never
64353
+ // block the IP lookup on it.
64354
+ const ipApiKeys = this._options.geoApiKeys ? {
64355
+ apiKeys: this._options.geoApiKeys
64356
+ } : {};
64357
+ const [ipBundle, gpsLoc] = await Promise.all([(async () => {
64358
+ const ipResult = await detectIP();
64359
+ const ipAddr = ipResult?.ip || "unknown";
64360
+ const ipGeo = ipAddr !== "unknown" ? await resolveLocation(ipAddr, ipApiKeys) : null;
64361
+ return {
64362
+ ip: ipAddr,
64363
+ ipVersion: ipResult ? getIPVersion(ipAddr) : "unknown",
64364
+ geo: ipGeo
64365
+ };
64366
+ })(), this._collectBrowserLocation()]);
64367
+ const {
64368
+ ip,
64369
+ ipVersion
64370
+ } = ipBundle;
64371
+
64372
+ // 4. Geo: start from the (coarse) IP location, then — when we have a
64373
+ // precise GPS fix — OVERRIDE city/region/country with the
64374
+ // reverse-geocoded values. IP geo only locates the ISP gateway, so a
64375
+ // real device fix always wins. Denied/unavailable → IP value stays.
64376
+ let geo = ipBundle.geo;
64377
+ let browserGeo = null;
64378
+ if (gpsLoc) {
64379
+ browserGeo = {
64380
+ latitude: gpsLoc.latitude,
64381
+ longitude: gpsLoc.longitude,
64382
+ accuracy: gpsLoc.accuracy
64383
+ };
64384
+ if (gpsLoc.source === "gps") {
64385
+ // gpsLoc carries city/region/regionCode/country/countryCode/lat/lng/source
64386
+ geo = {
64387
+ ...(geo || {}),
64388
+ ...gpsLoc
64389
+ };
64390
+ }
62307
64391
  }
62308
64392
 
62309
64393
  // 5. Browser context
@@ -62345,6 +64429,56 @@
62345
64429
  }
62346
64430
  }
62347
64431
 
64432
+ /**
64433
+ * Decide whether to capture browser GPS during init(), honoring geoFromBrowser:
64434
+ * false → null (skip)
64435
+ * "auto" → only when permission is ALREADY granted (silent, never prompts)
64436
+ * true → attempt (getCurrentPosition shows the prompt unless denied)
64437
+ * @private
64438
+ * @returns {Promise<Object|null>}
64439
+ */
64440
+ async _collectBrowserLocation() {
64441
+ const mode = this._options.geoFromBrowser;
64442
+ if (!mode) return null;
64443
+ if (mode === "auto") {
64444
+ const perm = await getGeolocationPermission();
64445
+ if (perm !== "granted") return null; // never prompt during a silent init
64446
+ }
64447
+ return getBrowserLocation(this._options.geoOptions || {});
64448
+ }
64449
+
64450
+ /**
64451
+ * Capture precise browser location AFTER your UI has obtained user consent
64452
+ * (e.g. an in-widget "Share your location?" pre-ask). Triggers the native
64453
+ * permission prompt, reverse-geocodes the fix, merges it into the current
64454
+ * profile's `geo` (source:"gps"), re-persists, and fires onReady. No-ops
64455
+ * gracefully when denied/unavailable (keeps the IP fallback) or before init().
64456
+ * @param {PositionOptions} [options]
64457
+ * @returns {Promise<UserProfile|null>}
64458
+ */
64459
+ async captureBrowserLocation(options = {}) {
64460
+ const loc = await getBrowserLocation({
64461
+ ...(this._options.geoOptions || {}),
64462
+ ...options
64463
+ });
64464
+ if (!loc || !this.profile) return this.profile; // denied/unavailable or not init'd yet
64465
+ this.profile.browserGeo = {
64466
+ latitude: loc.latitude,
64467
+ longitude: loc.longitude,
64468
+ accuracy: loc.accuracy
64469
+ };
64470
+ this.profile.mapsUrl = toMapsUrl(loc.latitude, loc.longitude);
64471
+ if (loc.source === "gps") {
64472
+ this.profile.geo = {
64473
+ ...(this.profile.geo || {}),
64474
+ ...loc
64475
+ };
64476
+ }
64477
+ saveSessionMeta(this.profile);
64478
+ if (this._options.onReady) this._options.onReady(this.profile);
64479
+ return this.profile;
64480
+ }
64481
+
62348
64482
  /**
62349
64483
  * Get the current profile (must call init() first)
62350
64484
  * @returns {UserProfile|null}
@@ -62439,6 +64573,9 @@
62439
64573
  src.exports.resolveLocation = resolveLocation;
62440
64574
  src.exports.listProviders = listProviders;
62441
64575
  src.exports.getBrowserGeolocation = getBrowserGeolocation;
64576
+ src.exports.getGeolocationPermission = getGeolocationPermission;
64577
+ src.exports.reverseGeocode = reverseGeocode;
64578
+ src.exports.getBrowserLocation = getBrowserLocation;
62442
64579
  src.exports.getOrCreateUserID = getOrCreateUserID;
62443
64580
  src.exports.getOrCreateSessionID = getOrCreateSessionID;
62444
64581
  src.exports.clearSession = clearSession;