UNPKG

touchstage-client

Version:

A customizable chat widget for providing interactive in-app tours and user guidance

373 lines 1.3 MB
(function(){"use strict";try{if(typeof document<"u"){var o=document.createElement("style");o.appendChild(document.createTextNode('.chat-widget-button{position:fixed;bottom:20px;right:20px;width:58px;height:58px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 14px 24px #00000073;transition:transform .3s ease;z-index:1000}.chat-widget-button:hover{transform:scale(1.1)}.chat-widget{position:fixed;font-family:Manrope,sans-serif;bottom:100px;right:20px;width:min(350px,calc(100vw - 40px));background:#fff;border-radius:16px;border:1px solid #D5D5D5;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 2px 92px #00000026;z-index:999;transition:opacity .3s ease,transform .3s ease,width .3s ease,height .3s ease}.chat-non-empty-height{height:min(525px,calc(100vh - 120px))}.chat-widget.chat-expanded{width:min(calc(100vw - 40px),calc(100vw - 40px));height:calc(100vh - 140px)}.chat-widget.hidden{opacity:0;transform:translateY(20px);pointer-events:none;display:none}.menu-button{position:absolute;top:20px;left:20px;width:40px;height:40px;background:#ffffffe6;border-radius:10px;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10}.hamburger{width:18px;height:2px;background:#000;position:relative}.hamburger:before,.hamburger:after{content:"";position:absolute;width:18px;height:2px;background:#000;left:0}.hamburger:before{top:-6px}.hamburger:after{top:6px}.avatar-group{margin-bottom:24px;position:relative;width:-moz-fit-content;width:fit-content}.avatar{width:40px;height:40px;border-radius:50%;-o-object-fit:cover;object-fit:cover;border:2px solid white}.avatar:first-child{transform:translate(32px);z-index:1}.avatar:last-child{transform:translate(-32px);z-index:1}.bot-avatar{width:48px;height:48px;z-index:2;background:#000;border-radius:12px;display:flex;align-items:center;justify-content:center}.bot-avatar-small{border-radius:8px;display:flex;align-items:center;justify-content:center}.bot-avatar-small svg{width:20px;height:20px;border-radius:50%}.bot-avatar-small img{width:28px;height:28px}.message{margin-bottom:16px;display:flex;flex-direction:column}.message.AI,.message.thinking{align-items:flex-start;padding-right:20%}.message.CUSTOMER{align-items:flex-end;padding-left:20%}.message-header{display:flex;align-items:center;gap:4px;margin-bottom:8px}.agent-name{font-weight:600;font-size:12px;color:#000;margin-left:4px}.dot{color:#666;font-size:15px;margin:0 2px}.agent-type{color:#666;font-size:12px}.message-content{font-size:12px;line-height:1.6;font-weight:500;color:#000}.message.thinking .message-content{color:#000}.chat-input-section{margin:8px 12px}.chat-input{padding:14px;background:#fafbfc;border-radius:50px;position:relative;border:1px solid #D5D5D5;display:flex;align-items:center;justify-content:space-between}.chat-input-footer{display:flex;align-items:center;justify-content:center;gap:4px;font-size:8px;font-weight:600;color:#707070;margin-top:8px;text-align:center;line-height:1;cursor:pointer}.plus-button{width:18px;height:18px;min-width:18px;border:none;border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}#messageInput{width:100%;border:none;padding:0 8px;font-size:12px;background:transparent;line-height:18px;color:#000;resize:none;min-height:18px;max-height:100px;overflow-y:auto}#messageInput::-moz-placeholder{color:#71717a;line-height:18px}#messageInput::placeholder{color:#71717a;line-height:18px}#messageInput:focus{outline:none!important;box-shadow:none!important}#messageInput::outline{outline:none!important;box-shadow:none!important}.send-button{width:18px;height:18px;min-width:18px;border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;color:#fff}.send-button.disabled{cursor:not-allowed}.send-button svg{width:20px;height:20px;transform:rotate(-90deg)}.thinking{display:flex;align-items:center;color:#000;font-size:12px}.dots{display:inline-flex;margin-left:0;line-height:1}.dot{color:#000;opacity:0;margin:0 2px;animation:dotAppear 2s infinite}.tour-dot{color:#fff!important}.dot:nth-child(1){animation-delay:0s}.dot:nth-child(2){animation-delay:.3s}.dot:nth-child(3){animation-delay:.6s}@keyframes dotAppear{0%,10%{opacity:0;transform:translateY(2px)}20%,80%{opacity:1;transform:translateY(0)}90%,to{opacity:0;transform:translateY(2px)}}.privacy-notice{padding:12px 16px;background:#f5f5f5;font-size:13px;line-height:1.4;color:#666;display:flex;gap:12px;align-items:flex-start;margin:0 12px 12px;border-radius:8px}.privacy-notice.hidden{display:none}.privacy-content{flex:1}.privacy-notice a{color:#ff5c35;text-decoration:none}.privacy-notice a:hover{text-decoration:underline}.close-privacy{background:none;border:none;color:#666;font-size:20px;cursor:pointer;padding:0 4px;line-height:1}@media (max-width: 480px){.chat-widget-button{bottom:16px;right:16px}.chat-widget{bottom:0;right:0;width:100%;height:calc(100% - 80px);border-radius:20px 20px 0 0}.message-content{font-size:12px}.avatar-group{margin:0}}@media (max-width: 360px){.avatar-group{gap:8px;margin-bottom:20px}.bot-avatar{width:48px;height:48px;padding:10px}}.empty-state{background-image:url(https://touchstage-public.s3.ap-south-1.amazonaws.com/chat-widget/popover-bg.png);background-color:#f6f8fa;background-size:cover;background-position:center;height:100%;display:flex;flex-direction:column;position:relative}.empty-state.hidden{display:none}.header-content{display:flex;align-items:center;justify-content:space-between}.header-left{display:flex;align-items:center;gap:8px}.header-center{display:flex;align-items:center;gap:8px;position:absolute;left:50%;transform:translate(-50%)}.header-center svg{width:16px;height:16px}.header-center span{font-size:12px;font-weight:600;color:#1a1a1a}.header-right{display:flex;align-items:center}.empty-state .header-content,.conversation-state .header-content{padding:16px 12px}.header-text{display:flex;align-items:center;justify-content:space-between;width:100%;margin-left:8px}.empty-state-header{font-size:12px;font-weight:500;color:#707070}.header-content h1{font-size:12px;font-weight:600;color:#0b1411;margin:0}.conversation-state{height:100%;display:flex;flex-direction:column;background-image:url(https://touchstage-public.s3.ap-south-1.amazonaws.com/chat-widget/popover-bg.png);background-size:auto;background-position:center;background-color:#f6f8fa}.conversation-state.hidden{display:none}.chat-header{display:flex;align-items:center;padding:16px;border-bottom:1px solid #eee;gap:12px}.back-button,.expand-button{background:none;border:none;cursor:pointer;color:#666}.header-title{font-size:16px;font-weight:600;color:#000}.first-message{bottom:100px;left:0;right:0;padding:0 24px;opacity:0;transform:translateY(20px);transition:all .3s ease;padding:32px 30px!important}.first-message.visible{opacity:1;transform:translateY(0)}.quick-options-container{display:flex;flex-direction:column;gap:0px;padding:12px 0 0;width:100%;margin:0 auto}.quick-options-row{display:flex;justify-content:center;gap:12px;width:100%;flex-wrap:wrap;padding:0}.quick-option-btn{background:#e1e7f8;border:none;border-radius:50px;padding:8px;font-size:12px;font-weight:600;line-height:16px;color:#000;cursor:pointer;transition:all .3s ease;text-align:center;white-space:nowrap;will-change:transform;position:relative;z-index:1;box-shadow:0 1px 2px #0000000d;margin:4px}.quick-option-btn:hover{background:#e1e7f8;transform:scale(1.02)!important;z-index:2;box-shadow:0 2px 8px #0000000d}.quick-option-btn:active{background:#e1e7f8;transform:scale(.98)!important;box-shadow:0 1px 2px #0000000d}.quick-options-row:last-child:has(button:only-child){justify-content:center}@media (max-width: 640px){.quick-options-container{padding:20px 16px;gap:16px}.quick-options-row{flex-direction:column;align-items:center;gap:12px}.quick-option-btn{width:100%;max-width:100%;transform:none!important}}.conversation-state .bot-avatar-small{width:32px;height:32px;border-radius:8px}.conversation-state .header-title{font-size:18px;font-weight:600}.chat-messages{flex:1;padding:16px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#888 #f1f1f1;background-color:#f6f8fa}.chat-messages::-webkit-scrollbar{width:8px}.chat-messages::-webkit-scrollbar-track{background:#f1f1f1;border-radius:10px}.chat-messages::-webkit-scrollbar-thumb{background:#888;border-radius:10px}.chat-messages::-webkit-scrollbar-thumb:hover{background:#555}.message.CUSTOMER .message-container{background:none;padding:0;border-radius:12px 12px 2px}.message.AI .message-container,.message.thinking .message-container{background:none;padding:0;border-radius:2px 12px 12px}.message.CUSTOMER .message-content{background:#4b5b71;color:#fff;border-radius:12px 12px 2px;padding:12px}.message.AI .message-content{background:#fff;color:#000;border-radius:2px 12px 12px;border:1px solid #EAEAEA;padding:12px}.message.thinking .message-content{background:transparent;color:#000;border-radius:2px 12px 12px;border:none;padding:12px 0}.avatar-group{position:relative;width:-moz-fit-content;width:fit-content;margin-bottom:32px;display:flex;justify-content:center}.avatar{width:40px;height:40px;border-radius:50%;-o-object-fit:cover;object-fit:cover;border:2px solid white;position:absolute}.avatar:first-child{transform:translate(-28px);z-index:1}.avatar:last-child{transform:translate(28px);z-index:1}.bot-avatar{width:48px;height:48px;background:#000;border-radius:12px;display:flex;align-items:center;justify-content:center;z-index:2}.bot-avatar svg{width:24px;height:24px}@media (max-width: 480px){.avatar-group{margin-bottom:24px}}.chat-actions{position:sticky;bottom:0;background:#f3f4f6;border-top:1px solid #E5E7EB;padding:12px 16px;margin-top:auto;z-index:10}.action-status{display:flex;align-items:center;gap:8px;width:100%;color:#666;font-size:14px}.action-status svg{width:18px;height:18px;color:#666;flex-shrink:0}.quick-responses-container{width:100%}.quick-responses{display:flex;flex-direction:column;gap:8px;width:100%}.quick-response-btn{background:#ff5c35;color:#fff;border-radius:12px;padding:12px 16px;font-size:14px;font-weight:600;text-align:left;cursor:pointer;transition:all .2s ease;width:100%;margin-top:8px;text-align:center}.start-tour-btn{background:#ff5c35;color:#fff;border-radius:12px;padding:12px 16px;font-size:14px;font-weight:600;text-align:left;cursor:pointer;transition:all .2s ease;width:auto;text-align:center}.start-tour-btn:hover,.quick-response-btn:hover{background:#ff5c35;color:#fff}@media (max-width: 480px){.quick-responses{padding:8px 12px}.quick-response-btn{padding:6px 12px;font-size:13px}}.typing-dots{display:flex;gap:4px;padding:8px}.typing-dots span{width:8px;height:8px;background:#000;border-radius:50%;animation:typing 1s infinite ease-in-out}.typing-dots span:nth-child(1){animation-delay:.1s}.typing-dots span:nth-child(2){animation-delay:.2s}.typing-dots span:nth-child(3){animation-delay:.3s}@keyframes typing{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}@keyframes outerRipple{0%{transform:translate(-50%,-50%) scale(.25);opacity:1}to{transform:translate(-50%,-50%) scale(1);opacity:0}}@keyframes innerRipple{0%{transform:translate(-50%,-50%) scale(.25);opacity:1}to{transform:translate(-50%,-50%) scale(1);opacity:1}}.driver-highlight-circle.inner-circle{box-shadow:0 0 10px #ff5c354d}.driver-highlight-circle.outer-circle{animation:outerRipple 1s infinite ease-out}@keyframes slideIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.custom-popover.driver-popover{display:block!important;color:#fff;border-radius:12px;padding:0;box-shadow:none;background-color:transparent;z-index:2147483648}.custom-popover.driver-popover .driver-popover-content-container{background-image:url(https://touchstage-public.s3.ap-south-1.amazonaws.com/chat-widget/popover-bg.png);background-size:300% 300%;background-position:center;background-repeat:no-repeat;padding:16px;background-color:#1c1c1c;border-start-start-radius:12px;border-start-end-radius:12px;box-shadow:0 8px 24px #0003}.custom-popover.driver-popover .driver-popover-step-count{font-size:12px;font-weight:500;margin-bottom:4px;color:#fff}.custom-popover.driver-popover .driver-popover-title{font-size:14px;font-weight:600;color:#fff}.custom-popover.driver-popover .driver-popover-description{font-size:12px;line-height:1.5;color:#e1e1e1;display:none!important}.custom-popover.driver-popover .driver-popover-footer button{background:#ff5c35;color:#fff;border:none;padding:8px;font-size:12px;font-weight:500;cursor:pointer;transition:background .2s ease;text-shadow:none;border-radius:40px!important}.driver-popover-prev-btn{display:none!important}.custom-popover.driver-popover .driver-popover-footer button:hover{background:#ff4718}.custom-popover.driver-popover .driver-popover-footer{position:relative;margin-top:0!important;display:block!important}.custom-popover.driver-popover .driver-popover-arrow{border:5px solid #1A1A1A;content:"";position:absolute;display:none}.custom-popover.driver-popover .driver-popover-arrow-side-right{right:100%;border-left-color:transparent;border-bottom-color:transparent;border-top-color:transparent}.custom-popover.driver-popover .driver-popover-arrow-side-left{left:100%;border-right-color:transparent;border-bottom-color:transparent;border-top-color:transparent}.custom-popover.driver-popover .driver-popover-progress-dots{gap:6px;margin-top:16px}.custom-popover.driver-popover .driver-popover-progress-dot{width:8px;height:8px;background:#fff3;border-radius:50%}.custom-popover.driver-popover .driver-popover-progress-dot.active{background:#ff5c35}.custom-popover.driver-popover .driver-popover-next-btn{width:100%!important;text-align:center!important;background:#2e2e2e!important;padding:6px!important}.custom-popover.driver-popover .driver-popover-navigation-btns{display:flex!important;flex-direction:column!important;justify-content:space-between!important;align-items:center!important}.custom-popover.driver-popover .driver-popover-next-btn-parent{width:100%;width:-webkit-fill-available;width:-moz-available;padding:0 8px 8px!important;background-color:#1c1c1c;border-bottom-left-radius:12px;border-bottom-right-radius:12px;box-shadow:0 8px 24px #0003}.custom-popover.driver-popover .driver-popover-close-btn-parent{margin-top:4px!important}.custom-popover.driver-popover .driver-popover-exit-btn{margin:0!important;left:50%;text-align:center;background:transparent!important;color:#71717a!important;font-size:12px!important;font-weight:600!important;padding:6px!important;background-color:#fff!important;z-index:2}.custom-popover.driver-popover .driver-popover-cancel-btn{display:none!important}.custom-popover.driver-popover .driver-popover-close-btn{color:#d2d2d2!important}.custom-popover.driver-popover .driver-popover-close-btn:focus{color:#d2d2d2!important}.custom-popover.driver-popover button:focus,.feedback-modal button:focus{outline:none!important}.icon-container{transition:transform .3s ease;display:flex;align-items:center;justify-content:center}.icon-container.rotated{transform:rotate(180deg)}.quick-action-btn{background-color:#fff;border-radius:5px;padding:6px 8px;font-size:10px;font-weight:700;text-align:left;cursor:pointer;color:#101827;border:1px solid #9CA3AF;gap:4px;display:flex;align-items:center;justify-content:center}.quick-action-btn:hover{background-color:#f7f7f7;box-shadow:0 4px 8px #6f64aa2b}.quick-action-btn svg{width:10px;height:10px}.show-me-btn{position:relative;color:#fff;border:none;padding:6px 8px;border-radius:5px;cursor:pointer;transition:all .3s ease;z-index:1;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:600}@keyframes moveGradient{0%{background-position:100% 0}to{background-position:-100% 0}}.show-me-btn:hover:before{animation:moveGradient 3s linear infinite}.show-me-btn:active{transform:scale(.98)}.show-me-btn{box-shadow:0 2px 4px #6f64aa2b}.show-me-btn:hover{box-shadow:0 4px 8px #6f64aa2b}.chat-widget button:focus,.chat-widget button:focus-visible{outline:none!important}.driver-popover-cursor{position:fixed;z-index:2147483647;pointer-events:none;transition:top 1s ease,left 1s ease,transform .5s ease,inset .5s ease}.tour-bottom-bar{position:fixed;bottom:16px;left:50%;transform:translate(-50%);-webkit-user-select:none;-moz-user-select:none;user-select:none;touch-action:none;z-index:2147483647;pointer-events:auto;min-width:350px;max-width:calc(100vw - 10px);width:-moz-max-content;width:max-content}.tour-bottom-bar *{pointer-events:auto}.tour-bottom-bar.custom-position{transition:top .1s ease,left .1s ease}.tour-bottom-bar.dragging{cursor:grabbing;opacity:.95;transition:none}.tour-bottom-bar:before{content:"";position:absolute;top:0;left:0;right:0;height:0px;background:#ffffff1a;border-radius:4px 4px 0 0;cursor:grab}.tour-bottom-bar.dragging:before{cursor:grabbing}.tour-progress-expand,.tour-exit-button,.feedback-container{cursor:pointer;pointer-events:auto}.tour-feedback-container:focus{outline:none!important;box-shadow:none!important;border:none}.tour-feedback-container::outline{outline:none!important;box-shadow:none!important}.tour-bottom-bar-step{background-color:#1e1e20;max-height:min(400px,calc(100vh - 350px));width:min(400px,calc(100vw - 10px));overflow:auto;pointer-events:auto!important;position:absolute;bottom:100%;left:50%;transform:translate(-50%);z-index:2147483647;background-color:#1c1c1c;border-radius:10px;margin-bottom:10px;isolation:isolate;display:flex;flex-direction:column;overflow:hidden}.tour-bottom-bar-step-content{overflow-y:auto;overflow-x:hidden;flex:1;touch-action:auto;-webkit-overflow-scrolling:touch;border-top:1px solid #262626;border-bottom:1px solid #262626;pointer-events:all;background-image:linear-gradient(#0000004d,#0000004d),url(https://touchstage-public.s3.ap-south-1.amazonaws.com/chat-widget/popover-bg.png);background-size:200% 200%;background-position:center;background-repeat:no-repeat}.tour-bottom-bar-step-item{padding:0 16px;display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;border-radius:10px;font-size:12px;font-weight:600;color:#fff}.step-icon{padding:16px 0}.tour-bottom-bar-content{display:flex;align-items:center;border-radius:60px;background-color:#1c1c1c;pointer-events:auto!important}.tour-bottom-bar-content2{display:flex;align-items:center;border-radius:10px;background-color:#1c1c1c;pointer-events:auto!important}.step-title{padding:16px 0;border-bottom:1px solid #313131;width:100%}.step-title.completed{text-decoration:line-through;opacity:.7}.tour-progress{background-image:url(https://touchstage-public.s3.ap-south-1.amazonaws.com/chat-widget/popover-bg.png);background-size:250% 200%;background-position:top;background-repeat:repeat;padding:8px 12px;display:flex;align-items:center;flex-grow:1;gap:8px;border-radius:60px 0 0 60px}.tour-progress-text{font-size:14px;font-weight:600;color:#fff}.circular-progress{display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;width:20px;height:20px}.tour-progress-expand{width:14px;height:14px;display:flex;align-items:center;justify-content:center;border-radius:50%;background-color:#2e2e2e;border:1px solid #2e2e2e;color:#fff}.tour-progress-exit{padding:10px 8px;display:flex;align-items:center;justify-content:center;gap:4px}.tour-exit-button{display:flex;align-items:center;justify-content:center;background-color:#2e2e2e;border:1px solid #2e2e2e;border-radius:40px;padding:4px 6px;gap:4px;font-size:10px;font-weight:600;color:#fff}.step-number{font-size:12px;font-weight:500;color:#fffc;line-height:1}.incomplete-step{position:relative}.completed-step-number-container{width:14px;height:14px;display:flex;align-items:center;justify-content:center;border-radius:50%;background-color:#2e2e2e;padding:8px}.incomplete-step-number-container{width:14px;height:14px;display:flex;align-items:center;justify-content:center;border-radius:50%;background-color:#2e2e2e;padding:8px;border:1px solid #C2C4BB}.incomplete-step-number{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:12px;font-weight:500;color:#fffc;line-height:1}.driver-overlay{position:fixed!important;box-sizing:content-box!important;z-index:999999!important;opacity:0!important;display:none!important;pointer-events:none!important}body.driver-active *:not([style*="pointer-events: none !important"]):not([style*="pointer-events: none"]){pointer-events:auto!important}.custom-popover.driver-popover .driver-popover-chat-container{width:100%;width:-webkit-fill-available;width:-moz-available;padding:8px!important;background-color:#1c1c1c;border-bottom-left-radius:12px;border-bottom-right-radius:12px;box-shadow:0 8px 24px #0003}.custom-popover.driver-popover .driver-popover-chat-container .chat-input-container{display:flex;align-items:center;border:none;border-radius:4px;font-size:12px;color:#fff;width:100%;width:-webkit-fill-available;width:-moz-available;line-height:1.2;background-color:#404040;padding:8px}.custom-popover.driver-popover .driver-popover-chat-container .chat-input-container .tour-chat-input{border:none!important;font-size:12px!important;color:#fff!important;width:100%!important;line-height:18px!important;padding:0!important;margin:0!important;border-radius:0!important;background-color:#404040!important;z-index:2147483647!important;position:relative!important;outline:none!important;box-shadow:none!important;-webkit-user-select:text!important;-moz-user-select:text!important;user-select:text!important;pointer-events:auto!important;cursor:text!important;caret-color:#fff!important;-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;-webkit-tap-highlight-color:transparent!important;-webkit-focus-ring-color:transparent!important}.custom-popover.driver-popover .driver-popover-chat-container .chat-input-container .tour-chat-input:focus,.custom-popover.driver-popover .driver-popover-chat-container .chat-input-container .tour-chat-input:focus-visible,.custom-popover.driver-popover .driver-popover-chat-container .chat-input-container .tour-chat-input:active{outline:none!important;box-shadow:none!important;border:none!important;cursor:text!important;caret-color:#fff!important;background-color:#404040!important;color:#fff!important}.custom-popover.driver-popover .driver-popover-chat-container .chat-input-container .chat-input-container{position:relative!important;pointer-events:auto!important;z-index:2147483646!important}.custom-popover.driver-popover .driver-popover-chat-container .chat-input-container .driver-popover-chat-container{pointer-events:auto!important;position:relative!important;z-index:2147483645!important}.custom-popover.driver-popover .driver-popover-chat-container .chat-input-container .driver-popover-chat-container *{pointer-events:auto!important}.custom-popover.driver-popover .driver-popover-chat-container .chat-input-container .custom-popover.driver-popover .tour-chat-input{pointer-events:auto!important;-webkit-user-select:text!important;-moz-user-select:text!important;user-select:text!important;z-index:2147483647!important}.custom-popover.driver-popover .driver-popover-chat-container .chat-input-container .chat-send-button{width:20px;height:20px;min-width:20px;border:none;border-radius:50%;background:#6047ec;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;color:#fff;margin-left:8px;transform:rotate(-90deg)}.custom-popover.driver-popover .tour-messages-container .tour-message{font-size:12px;margin-bottom:5px;border-radius:4px;line-height:1.4;display:flex;flex-direction:column}.custom-popover.driver-popover .tour-messages-container .tour-message.CUSTOMER{font-size:12px;margin-bottom:5px;border-radius:4px;line-height:1.4;align-items:flex-end;margin-left:20%}.custom-popover.driver-popover .tour-messages-container .thinking{font-size:12px;margin-bottom:5px;border-radius:4px;line-height:1.4;align-items:flex-start;margin-right:20%;width:-moz-fit-content;width:fit-content}.custom-popover.driver-popover .tour-messages-container .tour-message-container{padding:6px 8px!important;background:#404040!important;border-radius:5px;max-width:100%;color:#fff!important;width:-moz-fit-content;width:fit-content}.feedback-button{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;padding:4px;border-radius:4px;background:none;cursor:pointer;transition:all .2s}.feedback-button:hover{background:#f9fafb}.feedback-button span[role=img]{font-size:24px;width:24px;height:24px;display:flex;align-items:center}.expand-button{cursor:pointer;border-radius:4px;transition:background-color .2s ease}.expand-button:hover{background-color:#0000001a}.chat-messages-container{background-color:#f6f8fa}.chat-messages-container-expanded{max-width:50vw;width:100%;margin:0 auto;background-color:#f6f8fa}.agent-avatar{margin-bottom:8px;display:flex;align-items:center;justify-content:center}.agent-logo{width:30px;height:30px;border-radius:50%;-o-object-fit:contain;object-fit:contain}.default-agent-avatar{width:30px;height:30px;border-radius:50%;background:#34353c;display:flex;align-items:center;justify-content:center}.empty-state-header{text-align:center;margin-bottom:24px}.empty-state-header h1{font-size:24px;font-weight:600;color:#000;margin:0 0 4px;line-height:1.2}.empty-state-header p{font-size:12px;font-weight:500;color:#71717a;margin:0;line-height:1.4}.quick-actions-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;width:100%}.quick-actions-grid .quick-action-card:nth-child(odd):last-child{grid-column:1 / -1;max-width:calc(50% - 6px);margin:0 auto;justify-self:center}.quick-action-card{background:#e9ecf7;border:1px solid #E9ECF7;border-radius:16px;padding:12px;text-align:left;cursor:pointer;transition:all .2s ease;display:flex;flex-direction:column;justify-content:flex-start}.quick-action-card:hover{background:#e9ecf7;border-color:#e9ecf7;transform:translateY(-1px);box-shadow:0 4px 8px #0000001a}.quick-action-title{font-size:10px;font-weight:800;color:#000;margin-bottom:2px;line-height:1.3;text-transform:capitalize}.quick-action-description{font-size:10px;font-weight:500;color:#71717a;line-height:1.4;text-transform:capitalize}.chat-active-banner{background:linear-gradient(135deg,#f44336,#d32f2f);color:#fff;padding:8px 16px;font-size:12px;font-weight:500;text-align:center;border-radius:0;display:flex;align-items:center;justify-content:center;gap:6px;position:relative;overflow:hidden}.chat-active-banner:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);animation:shimmer 2s infinite}@keyframes shimmer{0%{left:-100%}to{left:100%}}.chat-active-banner .status-dot{width:6px;height:6px;background:#fff;border-radius:50%;animation:pulse 1.5s infinite}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.2)}}.chat-active-banner .status-text{font-size:12px;font-weight:500;letter-spacing:.3px}.feedback-modal{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;justify-content:center;align-items:flex-end;z-index:10000}.feedback-modal-content{background:#fff;padding:16px;border-radius:10px;position:relative;width:90%;max-width:450px;bottom:16px}.feedback-close-button{position:absolute;top:4px;right:4px;background:none;border:none;cursor:pointer;padding:4px;color:#666}.feedback-modal h2{font-size:14px;font-weight:600;color:#000;margin-bottom:10px;margin-top:0!important}.feedback-options{display:flex;justify-content:space-between;gap:12px;margin-bottom:10px}.feedback-option{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px;border:1px solid #E5E7EB;border-radius:8px;background:none;cursor:pointer;transition:all .2s}.feedback-option:hover{background:#f9fafb}.feedback-option span[role=img]{font-size:24px;width:24px;height:24px;display:flex;align-items:center}.feedback-option span:last-child{font-size:10px;color:#666}.feedback-submit{color:#fff;border:none;font-size:12px;font-weight:500;cursor:pointer;transition:background .2s ease;text-shadow:none;border-radius:40px!important;width:100%!important;text-align:center!important;background:#000!important;padding:8px!important;line-height:1.3}.feedback-submit:hover{background:#333}.feedback-option.selected{background-color:#d1e7dd;border-color:#0f5132;color:#0f5132}.select-action-container{width:100%;margin-top:4px}.select-action-container .select-action{width:100%;padding:6px 32px 6px 8px;border-radius:5px;font-size:12px;line-height:1.4;color:#101827;border:1px solid #9CA3AF}.select-action-container .select-action .selection-action-option{font-size:14px;line-height:1.4;color:#000}.select-action-container .select-action:focus-visible{outline:none;border:1px solid #9CA3AF}.select-action-container .select-action:focus{outline:none;border:1px solid #9CA3AF;box-shadow:none!important}.secret-key-container{width:100%;margin-bottom:4px;margin-top:4px;margin-right:4px}.secret-key-container .secret-action-btn{background-color:#fff;width:100%;border-radius:40px;padding:8px;font-size:12px;font-weight:600;text-align:left;cursor:pointer;color:#1a1a1a;border:1px solid #000000;gap:4px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 4px #6f64aa2b}.secret-key-container .secret-action-btn:hover{background-color:#f7f7f7;box-shadow:0 4px 8px #6f64aa2b}.action-response-container{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;max-width:100%}.action-response-container .quick-chat-response-btn{background-color:#fff;padding:6px 8px;font-size:10px;font-weight:600;text-align:left;cursor:pointer;border-radius:5px;color:#101827;border:1px solid #9CA3AF;gap:4px;display:flex;align-items:center;justify-content:center;flex:0 1 auto;max-width:100%;min-width:-moz-fit-content;min-width:fit-content}.action-response-container .quick-chat-response-btn:hover{background-color:#f7f7f7;box-shadow:0 4px 8px #6f64aa2b}.action-response-container .quick-chat-response-btn svg{width:10px;height:10px}.confirmation-modal{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:10000}.confirmation-modal-content{background:#fff;padding:20px;border-radius:10px;position:relative;width:90%;max-width:400px;box-shadow:0 4px 6px #0000001a}.confirmation-close-button{position:absolute;top:8px;right:8px;background:none;border:none;cursor:pointer;padding:4px;color:#666}.confirmation-modal h2{font-size:16px;font-weight:600;color:#000;margin-bottom:12px;margin-top:0}.confirmation-modal p{font-size:14px;color:#666;margin-bottom:20px;line-height:1.4}.confirmation-buttons{display:flex;justify-content:flex-end;gap:12px}.confirmation-button{padding:8px 16px;border:none;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:background-color .2s ease}.confirmation-button-cancel{background-color:#f3f4f6;color:#374151}.confirmation-button-cancel:hover{background-color:#e5e7eb}.confirmation-button-confirm{background-color:#000;color:#fff}.confirmation-button-confirm:hover{background-color:#333}.driver-active .driver-overlay,.driver-active *{pointer-events:none}.driver-active .driver-active-element,.driver-active .driver-active-element *,.driver-popover,.driver-popover *{pointer-events:auto}@keyframes animate-fade-in{0%{opacity:0}to{opacity:1}}.driver-fade .driver-overlay{animation:animate-fade-in .2s ease-in-out}.driver-fade .driver-popover{animation:animate-fade-in .2s}.driver-popover{all:unset;box-sizing:border-box;color:#2d2d2d;margin:0;padding:15px;border-radius:5px;min-width:250px;max-width:300px;box-shadow:0 1px 10px #0006;z-index:1000000000;position:fixed;top:0;right:0;background-color:#fff}.driver-popover *{font-family:Helvetica Neue,Inter,ui-sans-serif,"Apple Color Emoji",Helvetica,Arial,sans-serif}.driver-popover-title{font:19px/normal sans-serif;font-weight:700;display:block;position:relative;line-height:1.5;zoom:1;margin:0}.driver-popover-close-btn{all:unset;position:absolute;top:0;right:0;width:32px;height:28px;cursor:pointer;font-size:18px;font-weight:500;color:#d2d2d2;z-index:1;text-align:center;transition:color;transition-duration:.2s}.driver-popover-close-btn:hover,.driver-popover-close-btn:focus{color:#2d2d2d}.driver-popover-title[style*=block]+.driver-popover-description{margin-top:5px}.driver-popover-description{margin-bottom:0;font:14px/normal sans-serif;line-height:1.5;font-weight:400;zoom:1}.driver-popover-footer{margin-top:15px;text-align:right;zoom:1;display:flex;align-items:center;justify-content:space-between}.driver-popover-progress-text{font-size:13px;font-weight:400;color:#727272;zoom:1}.driver-popover-footer button{all:unset;display:inline-block;box-sizing:border-box;padding:3px 7px;text-decoration:none;text-shadow:1px 1px 0 #fff;background-color:#fff;color:#2d2d2d;font:12px/normal sans-serif;cursor:pointer;outline:0;zoom:1;line-height:1.3;border:1px solid #ccc;border-radius:3px}.driver-popover-footer .driver-popover-btn-disabled{opacity:.5;pointer-events:none}:not(body):has(>.driver-active-element){overflow:hidden!important}.driver-no-interaction,.driver-no-interaction *{pointer-events:none!important}.driver-popover-footer button:hover,.driver-popover-footer button:focus{background-color:#f7f7f7}.driver-popover-navigation-btns{display:flex;flex-grow:1;justify-content:flex-end}.driver-popover-navigation-btns button+button{margin-left:4px}.driver-popover-arrow{content:"";position:absolute;border:5px solid #fff}.driver-popover-arrow-side-over{display:none}.driver-popover-arrow-side-left{left:100%;border-right-color:transparent;border-bottom-color:transparent;border-top-color:transparent}.driver-popover-arrow-side-right{right:100%;border-left-color:transparent;border-bottom-color:transparent;border-top-color:transparent}.driver-popover-arrow-side-top{top:100%;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}.driver-popover-arrow-side-bottom{bottom:100%;border-left-color:transparent;border-top-color:transparent;border-right-color:transparent}.driver-popover-arrow-side-center{display:none}.driver-popover-arrow-side-left.driver-popover-arrow-align-start,.driver-popover-arrow-side-right.driver-popover-arrow-align-start{top:15px}.driver-popover-arrow-side-top.driver-popover-arrow-align-start,.driver-popover-arrow-side-bottom.driver-popover-arrow-align-start{left:15px}.driver-popover-arrow-align-end.driver-popover-arrow-side-left,.driver-popover-arrow-align-end.driver-popover-arrow-side-right{bottom:15px}.driver-popover-arrow-side-top.driver-popover-arrow-align-end,.driver-popover-arrow-side-bottom.driver-popover-arrow-align-end{right:15px}.driver-popover-arrow-side-left.driver-popover-arrow-align-center,.driver-popover-arrow-side-right.driver-popover-arrow-align-center{top:50%;margin-top:-5px}.driver-popover-arrow-side-top.driver-popover-arrow-align-center,.driver-popover-arrow-side-bottom.driver-popover-arrow-align-center{left:50%;margin-left:-5px}.driver-popover-arrow-none{display:none}')),document.head.appendChild(o)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})(); var q3 = Object.defineProperty; var W3 = (e, t, r) => t in e ? q3(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r; var Dn = (e, t, r) => W3(e, typeof t != "symbol" ? t + "" : t, r); try { let e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {}, t = new e.Error().stack; t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "0194fadc-b942-4e02-a842-250664ae3275", e._sentryDebugIdIdentifier = "sentry-dbid-0194fadc-b942-4e02-a842-250664ae3275"); } catch { } function Y3(e, t) { for (var r = 0; r < t.length; r++) { const a = t[r]; if (typeof a != "string" && !Array.isArray(a)) { for (const o in a) if (o !== "default" && !(o in e)) { const l = Object.getOwnPropertyDescriptor(a, o); l && Object.defineProperty(e, o, l.get ? l : { enumerable: !0, get: () => a[o] }); } } } return Object.freeze(Object.defineProperty(e, Symbol.toStringTag, { value: "Module" })); } { let e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {}; e.SENTRY_RELEASE = { id: "11a388fa4bf079a55f1b9bdbcbd62eda053b7bab" }; } var Ph = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {}; function Hf(e) { return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e; } var bk = { exports: {} }, Bb = { exports: {} }, wf = { exports: {} }; wf.exports; var vT; function G3() { return vT || (vT = 1, function(e, t) { /** * @license React * react.development.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ (function() { typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart == "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error()); var r = "18.3.1", a = Symbol.for("react.element"), o = Symbol.for("react.portal"), l = Symbol.for("react.fragment"), u = Symbol.for("react.strict_mode"), d = Symbol.for("react.profiler"), p = Symbol.for("react.provider"), m = Symbol.for("react.context"), g = Symbol.for("react.forward_ref"), v = Symbol.for("react.suspense"), S = Symbol.for("react.suspense_list"), b = Symbol.for("react.memo"), w = Symbol.for("react.lazy"), x = Symbol.for("react.offscreen"), k = Symbol.iterator, R = "@@iterator"; function I(T) { if (T === null || typeof T != "object") return null; var P = k && T[k] || T[R]; return typeof P == "function" ? P : null; } var N = { /** * @internal * @type {ReactComponent} */ current: null }, z = { transition: null }, j = { current: null, // Used to reproduce behavior of `batchedUpdates` in legacy mode. isBatchingLegacy: !1, didScheduleLegacyUpdate: !1 }, M = { /** * @internal * @type {ReactComponent} */ current: null }, V = {}, J = null; function le(T) { J = T; } V.setExtraStackFrame = function(T) { J = T; }, V.getCurrentStack = null, V.getStackAddendum = function() { var T = ""; J && (T += J); var P = V.getCurrentStack; return P && (T += P() || ""), T; }; var _ = !1, H = !1, Q = !1, te = !1, pe = !1, Se = { ReactCurrentDispatcher: N, ReactCurrentBatchConfig: z, ReactCurrentOwner: M }; Se.ReactDebugCurrentFrame = V, Se.ReactCurrentActQueue = j; function Ue(T) { { for (var P = arguments.length, K = new Array(P > 1 ? P - 1 : 0), ne = 1; ne < P; ne++) K[ne - 1] = arguments[ne]; ht("warn", T, K); } } function Te(T) { { for (var P = arguments.length, K = new Array(P > 1 ? P - 1 : 0), ne = 1; ne < P; ne++) K[ne - 1] = arguments[ne]; ht("error", T, K); } } function ht(T, P, K) { { var ne = Se.ReactDebugCurrentFrame, be = ne.getStackAddendum(); be !== "" && (P += "%s", K = K.concat([be])); var tt = K.map(function($e) { return String($e); }); tt.unshift("Warning: " + P), Function.prototype.apply.call(console[T], console, tt); } } var Ht = {}; function O(T, P) { { var K = T.constructor, ne = K && (K.displayName || K.name) || "ReactClass", be = ne + "." + P; if (Ht[be]) return; Te("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.", P, ne), Ht[be] = !0; } } var me = { /** * Checks whether or not this composite component is mounted. * @param {ReactClass} publicInstance The instance we want to test. * @return {boolean} True if mounted, false otherwise. * @protected * @final */ isMounted: function(T) { return !1; }, /** * Forces an update. This should only be invoked when it is known with * certainty that we are **not** in a DOM transaction. * * You may want to call this when you know that some deeper aspect of the * component's state has changed but `setState` was not called. * * This will not invoke `shouldComponentUpdate`, but it will invoke * `componentWillUpdate` and `componentDidUpdate`. * * @param {ReactClass} publicInstance The instance that should rerender. * @param {?function} callback Called after component is updated. * @param {?string} callerName name of the calling function in the public API. * @internal */ enqueueForceUpdate: function(T, P, K) { O(T, "forceUpdate"); }, /** * Replaces all of the state. Always use this or `setState` to mutate state. * You should treat `this.state` as immutable. * * There is no guarantee that `this.state` will be immediately updated, so * accessing `this.state` after calling this method may return the old value. * * @param {ReactClass} publicInstance The instance that should rerender. * @param {object} completeState Next state. * @param {?function} callback Called after component is updated. * @param {?string} callerName name of the calling function in the public API. * @internal */ enqueueReplaceState: function(T, P, K, ne) { O(T, "replaceState"); }, /** * Sets a subset of the state. This only exists because _pendingState is * internal. This provides a merging strategy that is not available to deep * properties which is confusing. TODO: Expose pendingState or don't use it * during the merge. * * @param {ReactClass} publicInstance The instance that should rerender. * @param {object} partialState Next partial state to be merged with state. * @param {?function} callback Called after component is updated. * @param {?string} Name of the calling function in the public API. * @internal */ enqueueSetState: function(T, P, K, ne) { O(T, "setState"); } }, Be = Object.assign, L = {}; Object.freeze(L); function Me(T, P, K) { this.props = T, this.context = P, this.refs = L, this.updater = K || me; } Me.prototype.isReactComponent = {}, Me.prototype.setState = function(T, P) { if (typeof T != "object" && typeof T != "function" && T != null) throw new Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables."); this.updater.enqueueSetState(this, T, P, "setState"); }, Me.prototype.forceUpdate = function(T) { this.updater.enqueueForceUpdate(this, T, "forceUpdate"); }; { var Ze = { isMounted: ["isMounted", "Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."], replaceState: ["replaceState", "Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."] }, Pe = function(T, P) { Object.defineProperty(Me.prototype, T, { get: function() { Ue("%s(...) is deprecated in plain JavaScript React classes. %s", P[0], P[1]); } }); }; for (var He in Ze) Ze.hasOwnProperty(He) && Pe(He, Ze[He]); } function Ge() { } Ge.prototype = Me.prototype; function Je(T, P, K) { this.props = T, this.context = P, this.refs = L, this.updater = K || me; } var We = Je.prototype = new Ge(); We.constructor = Je, Be(We, Me.prototype), We.isPureReactComponent = !0; function wt() { var T = { current: null }; return Object.seal(T), T; } var ye = Array.isArray; function Pt(T) { return ye(T); } function yn(T) { { var P = typeof Symbol == "function" && Symbol.toStringTag, K = P && T[Symbol.toStringTag] || T.constructor.name || "Object"; return K; } } function an(T) { try { return wn(T), !1; } catch { return !0; } } function wn(T) { return "" + T; } function jn(T) { if (an(T)) return Te("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.", yn(T)), wn(T); } function qr(T, P, K) { var ne = T.displayName; if (ne) return ne; var be = P.displayName || P.name || ""; return be !== "" ? K + "(" + be + ")" : K; } function tn(T) { return T.displayName || "Context"; } function bn(T) { if (T == null) return null; if (typeof T.tag == "number" && Te("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), typeof T == "function") return T.displayName || T.name || null; if (typeof T == "string") return T; switch (T) { case l: return "Fragment"; case o: return "Portal"; case d: return "Profiler"; case u: return "StrictMode"; case v: return "Suspense"; case S: return "SuspenseList"; } if (typeof T == "object") switch (T.$$typeof) { case m: var P = T; return tn(P) + ".Consumer"; case p: var K = T; return tn(K._context) + ".Provider"; case g: return qr(T, T.render, "ForwardRef"); case b: var ne = T.displayName || null; return ne !== null ? ne : bn(T.type) || "Memo"; case w: { var be = T, tt = be._payload, $e = be._init; try { return bn($e(tt)); } catch { return null; } } } return null; } var Bn = Object.prototype.hasOwnProperty, Rn = { key: !0, ref: !0, __self: !0, __source: !0 }, Mn, Dr, Gt; Gt = {}; function ee(T) { if (Bn.call(T, "ref")) { var P = Object.getOwnPropertyDescriptor(T, "ref").get; if (P && P.isReactWarning) return !1; } return T.ref !== void 0; } function ge(T) { if (Bn.call(T, "key")) { var P = Object.getOwnPropertyDescriptor(T, "key").get; if (P && P.isReactWarning) return !1; } return T.key !== void 0; } function Ke(T, P) { var K = function() { Mn || (Mn = !0, Te("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)", P)); }; K.isReactWarning = !0, Object.defineProperty(T, "key", { get: K, configurable: !0 }); } function at(T, P) { var K = function() { Dr || (Dr = !0, Te("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)", P)); }; K.isReactWarning = !0, Object.defineProperty(T, "ref", { get: K, configurable: !0 }); } function ue(T) { if (typeof T.ref == "string" && M.current && T.__self && M.current.stateNode !== T.__self) { var P = bn(M.current.type); Gt[P] || (Te('Component "%s" contains the string ref "%s". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref', P, T.ref), Gt[P] = !0); } } var _e = function(T, P, K, ne, be, tt, $e) { var ut = { // This tag allows us to uniquely identify this as a React Element $$typeof: a, // Built-in properties that belong on the element type: T, key: P, ref: K, props: $e, // Record the component responsible for creating this element. _owner: tt }; return ut._store = {}, Object.defineProperty(ut._store, "validated", { configurable: !1, enumerable: !1, writable: !0, value: !1 }), Object.defineProperty(ut, "_self", { configurable: !1, enumerable: !1, w