@botfabrik/engine-webclient 4.90.6 → 4.92.0

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.
@@ -0,0 +1 @@
1
+ ._app_1rj0t_1{display:flex;flex-direction:row;height:100vh;height:100svh;background-color:var(--body-background-color)}._container_q2uun_1{height:100%;position:relative}._chatcontent_q2uun_6{display:flex;flex-flow:column nowrap;height:100%}._accessabilityHidden_q2uun_12{visibility:hidden}._messageContainer_1m8fy_1{flex:1;overflow-y:scroll;overscroll-behavior:contain;padding-top:1rem;position:relative;-webkit-overflow-scrolling:touch;scrollbar-color:rgba(0,0,0,.2) transparent}._messages_1m8fy_13{position:relative;list-style:none;font-size:.9rem;line-height:1.4;padding:0 1rem;margin:0;overflow-wrap:break-word;word-wrap:break-word}@media screen and (min-width: 1024px){._messageContainer_1m8fy_1{margin-bottom:1rem}._messages_1m8fy_13{padding-left:0}}@media (min-width: 36rem){._messageContainer_1m8fy_1{padding-top:2rem;padding-bottom:2rem}._messages_1m8fy_13{font-size:1rem;line-height:1.8}}._generalConditionsContainer_55hjg_1{margin-bottom:1.2rem;margin-left:1rem;margin-right:1rem}._generalConditions_55hjg_1{transition:all .5s linear;background-color:var(--bot-bubble-background-color);color:var(--bot-bubble-text-color);padding:.9em 1.3em;font-size:.9rem}._generalConditionsHeader_55hjg_15{display:flex;align-items:flex-end;justify-content:space-between;cursor:pointer}._generalConditionsHeader_55hjg_15:focus{outline:none}._generalConditionsBody_55hjg_26{display:flex;align-items:flex-end}._generalConditionsBody_55hjg_26:focus{outline:none}._generalConditionsAccept_55hjg_35{padding:.9em 1.3em;font-size:.9rem}._generalConditionsAccept_55hjg_35:focus{outline:none}._message_6i1zm_1{--bubble-margin: var(--bubble-margin-small);margin-bottom:var(--bubble-margin);transition:border-radius .5s;position:relative}._messageBot_6i1zm_9{--bot-bubble-user-actions-display: none;display:flex;align-items:flex-end}._messageBot_6i1zm_9:focus-within,._messageBot_6i1zm_9:hover{--bot-bubble-user-actions-display: flex}._messageBot_6i1zm_9:not(._messageBotLast_6i1zm_19) ._avatar_6i1zm_19{visibility:hidden}._messageBotFirst_6i1zm_24{--bot-bubble-top-left-radius: var(--bubble-radius-large);--bot-bubble-top-right-radius: var(--bubble-radius-large);--bot-bubble-bottom-right-radius: var(--bubble-radius-large)}._messageBotLast_6i1zm_19{--bot-bubble-top-right-radius: var(--bubble-radius-large);--bot-bubble-bottom-left-radius: var(--bubble-radius-large);--bot-bubble-bottom-right-radius: var(--bubble-radius-large);--bubble-margin: var(--bubble-margin-large)}._messageBotAnimated_6i1zm_37{animation-duration:.25s;animation-timing-function:ease-in;animation-delay:0s;animation-iteration-count:1;animation-direction:normal;animation-fill-mode:forwards;animation-play-state:running;animation-name:_fadeInLeft_6i1zm_1}._messageGuest_6i1zm_48{display:flex;align-items:flex-end;justify-content:flex-end}._messageGuestFirst_6i1zm_54{--guest-bubble-top-left-radius: var(--bubble-radius-large);--guest-bubble-top-right-radius: var(--bubble-radius-large);--guest-bubble-bottom-left-radius: var(--bubble-radius-large)}._messageGuestLast_6i1zm_60{--guest-bubble-top-left-radius: var(--bubble-radius-large);--guest-bubble-bottom-left-radius: var(--bubble-radius-large);--guest-bubble-bottom-right-radius: var(--bubble-radius-large);--bubble-margin: var(--bubble-margin-large);margin-bottom:var(--bubble-margin)}._avatar_6i1zm_19{width:var(--avatar-size);height:var(--avatar-size);border-radius:var(--avatar-radius, 50%)}._botAvatar_6i1zm_74{background-color:var(--bot-avatar-background-color)}._agentAvatar_6i1zm_78{background-color:var(--agent-avatar-background-color)}._bubble_6i1zm_82{display:inline-block;max-width:calc(100% - 4.3rem);position:relative}._bubbleContent_6i1zm_88{padding:var(--bubble-padding);color:inherit;font-size:inherit}._bubbleContent_6i1zm_88 *>:first-child{margin-top:0}._bubbleContent_6i1zm_88 *>:last-child{margin-bottom:0}._bubbleLeft_6i1zm_102{border-radius:var(--bot-bubble-top-left-radius) var(--bot-bubble-top-right-radius) var(--bot-bubble-bottom-right-radius) var(--bot-bubble-bottom-left-radius);border-color:var(--bot-bubble-border-color);border-width:var(--bot-bubble-border-width);border-style:solid;background-color:var(--bot-bubble-background-color);margin-left:1rem}._leftText_6i1zm_113{color:var(--bot-bubble-text-color)}._leftText_6i1zm_113 a{color:var(--bot-bubble-text-color)!important}._bubbleRight_6i1zm_120{border-radius:var(--guest-bubble-top-left-radius) var(--guest-bubble-top-right-radius) var(--guest-bubble-bottom-right-radius) var(--guest-bubble-bottom-left-radius);border-color:var(--guest-bubble-border-color);border-width:var(--guest-bubble-border-width);border-style:solid;background-color:var(--guest-bubble-background-color)}._rightText_6i1zm_130,._rightText_6i1zm_130 a{color:var(--guest-bubble-text-color)}@keyframes _fadeInLeft_6i1zm_1{0%{transform:translate(-100vw)}to{transform:translate(0)}}.source-info-reference{--footnote-padding: .2em}.source-info-reference:first-of-type{margin-left:var(--footnote-padding)}.source-info-reference:last-of-type{margin-right:var(--footnote-padding)}.source-info-reference.source-info-reference--before-space{margin-left:-.1em}.source-info-reference.source-info-reference--after-space{margin-right:-.1em}._sourceInfoReference_6i1zm_162 a{--bot-bubble-text-color: black;background:color-mix(in srgb,var(--brand-primary-color) 20%,transparent);padding:3px 6px;border-radius:6px;text-decoration:none!important;font-size:.75rem;font-family:monospace}._sourceInfoReferenceActive_6i1zm_174 a{--bot-bubble-text-color: white;background:var(--brand-primary-color)}._botMessageActions_1dl7x_1{--bot-bubble-user-actions-container-bg-opacity: 1;color:var(--text-secondary-color);padding:.125rem .5rem;vertical-align:middle;background-color:rgb(var(--bot-bubble-user-actions-container-bg, 255 255 255) / var(--bot-bubble-user-actions-container-bg-opacity));border-color:var(--color-gray-200);border-style:solid;border-width:1px;border-radius:.75rem;margin-top:-.75rem;top:100%;left:calc(var(--avatar-size, 2rem) + 1.5rem);position:absolute;z-index:10;display:var(--bot-bubble-user-actions-display);gap:.15rem}._alwaysVisible_1dl7x_22{--bot-bubble-user-actions-display: flex;--bot-bubble-user-actions-container-bg-opacity: 0;border-width:0;top:calc(100% + .75rem)}._reported_1dl7x_29{display:flex}._action_1dl7x_33{display:var(--bot-bubble-user-actions-display);font-size:.875rem;line-height:1.25rem;padding-left:.25rem;padding-right:.25rem;border-radius:.375rem;white-space:nowrap;justify-content:center;align-items:center;height:1.5rem;text-transform:none;border:0;cursor:pointer;color:inherit;background-color:rgb(var(--bot-bubble-user-actions-container-bg, 255 255 255) / var(--bot-bubble-user-actions-container-bg-opacity))}._action_1dl7x_33:hover{background-color:var(--color-gray-200)}._action_1dl7x_33._reported_1dl7x_29{display:flex}._sourceList_1n31h_1{display:flex;flex-direction:column;flex-wrap:wrap;gap:.5rem;list-style-type:none!important;margin:0;padding:0;padding-top:1rem}._source_1n31h_1{font-size:.7rem;width:fit-content;cursor:pointer;max-width:100%}._source_1n31h_1 a{display:flex;align-items:center;flex-direction:row;gap:.25rem;padding:3px 6px;border-radius:6px;color:var(--bot-bubble-source-text-color)!important;background-color:var(--bot-bubble-source-background-color)}._source_1n31h_1 a:hover{background:color-mix(in srgb,var(--bot-bubble-source-background-color) 75%,transparent)}._source_1n31h_1 a ._label_1n31h_37{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden}._source_1n31h_1 a svg{font-size:1rem;flex-shrink:0}._button_3ui4g_1{display:inline-block;font-family:inherit;font-size:1em;padding:.5em 1em;border-radius:.2rem;background-color:#fff;cursor:pointer;transition:all .2s linear;text-align:center}._buttonDefault_3ui4g_13{color:#000000d9;background-color:#fff;border:2px solid;border-color:color-mix(in srgb,var(--brand-primary-color) 20%,transparent)}._buttonDefault_3ui4g_13:hover{color:var(--brand-primary-color);border-color:var(--brand-primary-color)}._buttonDefault_3ui4g_13:disabled{cursor:not-allowed;opacity:.3}._buttonPrimary_3ui4g_28{color:var(--brand-secondary-color);background-color:var(--brand-primary-color);border:2px solid var(--brand-primary-color)}._buttonPrimary_3ui4g_28:hover{color:var(--brand-primary-color);background-color:var(--brand-secondary-color);border:2px solid var(--brand-primary-color)}._buttonPrimary_3ui4g_28:disabled{cursor:not-allowed;opacity:.3;color:var(--brand-secondary-color);background-color:var(--brand-primary-color)}._title_b904h_1{margin-top:0;margin-block-start:0}._subtitle_b904h_6{margin-top:.5rem;margin-bottom:.5rem}._buttons_b904h_11{margin-top:1rem;display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}._button_b904h_11{font-size:.9em;margin:0;background-color:var(--bot-bubble-text-color);color:var(--bot-bubble-background-color);border:2px solid var(--bot-bubble-text-color);width:100%}._button_b904h_11:hover{color:var(--bot-bubble-text-color);background-color:var(--bot-bubble-background-color);border:2px solid var(--bot-bubble-text-color)}._imageContainer_b904h_34{display:flex}._image_b904h_34{height:100%;width:100%;object-fit:cover;border-radius:calc(var(--bot-bubble-top-left-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-top-right-radius) - var(--bot-bubble-border-width)) 0 0}._video_container_b904h_49{display:flex}._video_b904h_49{width:100%;height:100%;border-radius:calc(var(--bot-bubble-top-left-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-top-right-radius) - var(--bot-bubble-border-width)) 0 0}._only_b904h_63{border-radius:calc(var(--bot-bubble-top-left-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-top-right-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-bottom-right-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-bottom-left-radius) - var(--bot-bubble-border-width))}._text_gp0s0_1{overflow-wrap:break-word}._command_gp0s0_5{padding:3px 6px;margin-right:3px;border-radius:6px;font-size:.75rem;font-family:monospace;background-color:var( --guest-bubble-command-background-color, rgba(255, 255, 255, .3) )}._markdown_nw7vg_1 h1,._markdown_nw7vg_1 h2,._markdown_nw7vg_1 h3,._markdown_nw7vg_1 h4,._markdown_nw7vg_1 h5,._markdown_nw7vg_1 p,._markdown_nw7vg_1 a,._markdown_nw7vg_1 ul,._markdown_nw7vg_1 ol{color:inherit;margin-block-start:.4em;margin-block-end:.4em;margin-inline-start:0px;margin-inline-end:0px}._markdown_nw7vg_1 h1{font-size:1.2rem;white-space:pre-wrap}._markdown_nw7vg_1 h2{font-size:1.1rem;white-space:pre-wrap}._markdown_nw7vg_1 h3,._markdown_nw7vg_1 h4,._markdown_nw7vg_1 h5{font-size:1rem;white-space:pre-wrap}._markdown_nw7vg_1 a{color:var(--text-link-color);text-decoration:underline;cursor:pointer}._markdown_nw7vg_1 a:hover{color:var(--text-link-color-hover);opacity:.8}._markdown_nw7vg_1 a:active{color:var(--text-link-color-hover)}._markdown_nw7vg_1 a:visited{color:var(--text-link-color)}._markdown_nw7vg_1 img{max-width:100%;margin-block-start:0;margin-block-end:0}._markdown_nw7vg_1 ul{padding:0 0 0 1.1em}._markdown_nw7vg_1 ul>li{list-style-type:disc}._markdown_nw7vg_1 ul>li ul{margin-block-start:0}._markdown_nw7vg_1 ul>li p{margin-bottom:0}._markdown_nw7vg_1 ol{padding:0 0 0 1.1em}._markdown_nw7vg_1 ol>li{list-style-type:decimal}._markdown_nw7vg_1 table,._markdown_nw7vg_1 td,._markdown_nw7vg_1 th{border:1px solid}._markdown_nw7vg_1 table{width:100%;border-collapse:collapse;margin-bottom:1rem;-webkit-hyphens:auto;hyphens:auto}._markdown_nw7vg_1 table th{text-align:left;padding:5px}._markdown_nw7vg_1 table td{padding:5px}._markdown_nw7vg_1 hr{margin-top:1rem;margin-bottom:1rem;border-top:1px solid;border-left:0;border-bottom:0;border-right:0}._ticontainer_xg0dn_1{padding:var(--bubble-padding)}._tiblock_xg0dn_5{align-items:center;display:flex;height:1rem;margin:2.1px}._tidot_xg0dn_12{background-color:var(--bot-bubble-text-color);animation:_mercuryTypingAnimation_xg0dn_1 1s infinite ease-in-out;border-radius:3px;display:inline-block;height:6px;margin-right:3px;width:6px}@keyframes _mercuryTypingAnimation_xg0dn_1{0%{transform:translateY(0)}28%{transform:translateY(-5px)}44%{transform:translateY(0)}}._tidot_xg0dn_12:nth-child(1){animation-delay:50ms}._tidot_xg0dn_12:nth-child(2){animation-delay:.15s}._tidot_xg0dn_12:nth-child(3){animation-delay:.25s}._bottomSheet_jp8dl_1{visibility:hidden;position:absolute;z-index:3000;height:100%;width:100%;background-color:var(--body-background-color);top:0;bottom:0;transform:translateY(100%);overflow-y:auto;overscroll-behavior:contain}._bottomSheetOpen_jp8dl_15{animation:_slide-in_jp8dl_1 .2s forwards;visibility:visible}._bottomSheetClose_jp8dl_20{animation:_slide-out_jp8dl_1 .2s forwards;visibility:hidden}@keyframes _slide-in_jp8dl_1{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes _slide-out_jp8dl_1{0%{transform:translateY(0)}to{transform:translateY(100%)}}._container_xc2nx_1{overflow:hidden}._container_xc2nx_1 iframe{width:100%;height:100%;border:none}._container_tr4tn_1{padding:.5rem;display:flex;justify-content:center;align-items:center;border-top:1px solid var(--text-primary-color);background-color:#fff;font-size:.7rem;color:var(--text-secondary-color)}._container_tr4tn_1 a{color:var(--brand-primary-color);text-decoration:none}@media screen and (min-width: 1024px){._container_tr4tn_1{padding:.75rem 0 0;background-color:transparent;border-top:unset}}._container_h23mk_1{padding:1rem}._container_h23mk_1 h1{font-size:1.6em}._container_h23mk_1 h2{font-size:1em}._container_h23mk_1 p{line-height:1.5}._formContainer_h23mk_17{display:flex;flex-direction:column}._emailInput_h23mk_22{box-sizing:border-box;margin:1rem 0 0;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:#000000a6;font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s;outline:none}._emailInput_h23mk_22:hover{border:1px solid var(--brand-primary-color)}._emailInput_h23mk_22:focus{border:1px solid var(--brand-primary-color)}._description_h23mk_52{font-size:.9rem;-webkit-hyphens:auto;hyphens:auto}._actions_h23mk_57{margin-top:1rem;padding-bottom:3rem;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-end;gap:.5rem}._validationError_h23mk_67{padding-top:.5em;color:var(--danger-color);font-size:.8em;height:1rem}._submitted_h23mk_74{margin-top:3rem;padding:1rem;border:1px solid var(--brand-primary-color);border-radius:2px}._inputContainer_fi5ao_1{z-index:2000}._blockUserInput_pot9c_1{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:left;position:relative;color:var(--text-secondary-color);font-size:.9rem;padding:.6rem 1rem;animation:_append-animate_pot9c_1 .2s ease-in;z-index:0}@keyframes _append-animate_pot9c_1{0%{opacity:0;top:6rem}to{opacity:1;top:0}}._commandsDropdown_5ytuv_1{position:relative}._commandsDropdown_5ytuv_1 ._commands_5ytuv_1{position:absolute;bottom:calc(100% - 3px);left:0;right:0;padding:1rem;margin:0;width:100%;overflow-y:auto;max-height:30em;border-radius:20px 20px 0 0;box-shadow:0 -8px 24px #0006;background-color:var( --commands-background-color, var(--brand-primary-color) );list-style-type:none}._commandsDropdown_5ytuv_1 ._command_5ytuv_1{display:flex;flex-direction:column;gap:.25rem;cursor:pointer;padding:1rem;border-radius:10px;color:var(--commands-text-color, white)}._commandsDropdown_5ytuv_1 ._command_5ytuv_1 h1{font-size:1.1rem;margin-block:0}._commandsDropdown_5ytuv_1 ._command_5ytuv_1 p{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;margin:0}._commandsDropdown_5ytuv_1 ._commandActive_5ytuv_46{color:var(--commands-active-text-color, white);background-color:var( --commands-active-background-color, rgba(255, 255, 255, .3) )}._commandsSelections_5ytuv_55{display:none}@media screen and (min-width: 1024px){._commandsSelections_5ytuv_55{display:flex;justify-content:center;flex-wrap:wrap;gap:.5rem;padding-inline:1rem;margin-top:1rem}._commandsSelections_5ytuv_55 button{background:transparent;color:var(--text-secondary-color);border:1px solid var(--text-secondary-color);border-radius:20px;padding:.5rem 1rem;cursor:pointer}._commandsSelections_5ytuv_55 button:hover{background:var(--brand-primary-color);border-color:var(--brand-primary-color);color:#fff}}._callToActionContainer_bkfcm_1{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;position:relative;padding:.6rem 1rem .3rem;animation:_append-animate_bkfcm_1 .2s ease-in;z-index:0}@keyframes _append-animate_bkfcm_1{0%{opacity:0;top:6rem}to{opacity:1;top:0}}._callToActionTitle_bkfcm_23{font-size:.9rem;color:var(--text-secondary-color);margin-bottom:.2rem;padding-right:.5rem}._rateOverlay_bkfcm_30{display:flex;flex-direction:column;justify-content:space-between}._rateOverlay_bkfcm_30 h2{font-size:1em;text-align:center}._rateOverlay_bkfcm_30 p{line-height:1.5}._rateOverlay_bkfcm_30 form{display:flex;flex:1;flex-direction:column;justify-content:space-between}._body_bkfcm_52{height:100%;display:flex;flex-direction:column;justify-content:space-between;padding:1rem}._footer_bkfcm_60 input{font-size:1rem;border:none;box-sizing:border-box;width:100%;outline-width:0;padding:1.3rem 1rem 1rem;text-overflow:ellipsis;color:var(--text-primary-color)}._actions_bkfcm_73{display:flex;justify-content:flex-end;align-items:center;line-height:0}._actions_bkfcm_73 button{width:100%;border-radius:0}@media screen and (min-width: 1024px){._footer_bkfcm_60 input{border-radius:20px}._actions_bkfcm_73{margin-top:.5rem}._actions_bkfcm_73 button{border-radius:.2rem}}._bubbles_bkfcm_101{display:flex;flex-direction:column}@keyframes _appear_bkfcm_1{0%{opacity:0}66%{opacity:0}to{opacity:1}}@keyframes _fadeInLeft_bkfcm_1{0%{transform:translate(-3rem)}80%{transform:translate(-3rem)}to{transform:translate(0)}}._rateFeedbackBotBubble_bkfcm_130{display:flex;align-items:flex-end;margin:1rem 0}._rateFeedbackGuestBubble_bkfcm_136{display:flex;align-items:flex-end;justify-content:flex-end}._avatar_bkfcm_142{width:var(--avatar-size);height:var(--avatar-size);animation-duration:.5s;animation-timing-function:ease-in;animation-delay:0s;animation-iteration-count:1;animation-direction:normal;animation-fill-mode:forwards;animation-play-state:running;animation-name:_fadeInLeft_bkfcm_1}._bubble_bkfcm_101{padding:var(--bubble-padding);font-size:.9rem;animation-duration:1s;animation-delay:0s;animation-timing-function:ease;animation-iteration-count:1;animation-direction:normal;animation-fill-mode:forwards;animation-play-state:running;animation-name:_appear_bkfcm_1}._botBubble_bkfcm_168{border-radius:var(--bubble-radius-large);background-color:var(--bot-bubble-background-color);margin-left:1rem;color:var(--bot-bubble-text-color)}._botBubble_bkfcm_168 a{color:var(--bot-bubble-text-color)!important}._guestBubble_bkfcm_179{animation-duration:.25s;align-self:end;border-radius:var(--bubble-radius-large);background-color:var(--guest-bubble-background-color);color:var(--guest-bubble-text-color);margin-left:1rem;display:box;line-clamp:3;box-orient:vertical;overflow:hidden}._guestBubble_bkfcm_179 a{color:var(--guest-bubble-text-color)}._rateText_bkfcm_198{padding:.75rem;font-size:.9rem}._stars_bkfcm_203{box-sizing:border-box;font-variant:tabular-nums;font-feature-settings:"tnum";display:inline-block;margin:0;padding:0;line-height:unset;list-style:none;outline:none}._starsSmall_bkfcm_215{font-size:1.2rem}._starsLarge_bkfcm_219{font-size:2rem}._starsLarge_bkfcm_219 ._star_bkfcm_203:not(:last-child){margin-right:1.5rem}._star_bkfcm_203{display:inline-block;color:inherit;cursor:pointer}._star_bkfcm_203:not(:last-child){margin-right:8px}._starReadonly_bkfcm_236{cursor:inherit}._star_bkfcm_203>div{transition:all .3s,outline 0s}._starIcon_bkfcm_246{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;text-rendering:optimizelegibility}._star_bkfcm_203 [aria-checked=true]{color:var(--brand-primary-color, #fadb14)}._star_bkfcm_203 [aria-checked=false]{color:var(--color-gray-400)}._starsDescriptionContainer_bkfcm_264{display:flex;flex-direction:column;width:fit-content;padding-top:1rem;padding-bottom:1rem;margin:auto}._starsDescription_bkfcm_264{display:flex;flex-direction:row;justify-content:space-between;font-size:.7rem;color:var(--text-secondary-color)}._inputWrapper_e3h44_1{display:flex;justify-content:center;align-items:center;line-height:0;background-color:#fff}@media screen and (min-width: 1024px){._inputWrapper_e3h44_1{border-radius:20px}._withOpenCommands_e3h44_14{border-top-left-radius:0;border-top-right-radius:0}}._messageInputWrapper_e3h44_20{flex:1;margin-right:.5rem;border-radius:inherit}._messageInput_e3h44_20{resize:none;font-size:1rem;font-family:inherit;border:none;border-radius:inherit;height:calc(1em + 3rem);box-sizing:border-box;width:100%;outline-width:0;padding:1.3rem 1rem;text-overflow:ellipsis}._messageInput_e3h44_20:focus{outline:none}._buttons_e3h44_44{padding-right:.5rem;display:flex;justify-content:center;align-items:center}._button_e3h44_44[disabled]{opacity:.4}._button_e3h44_44{display:flex;align-items:center;justify-content:center;width:40px;height:40px;font-family:inherit;color:var(--brand-primary-color);background-color:var(--brand-secondary-color);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:50%;border:none;text-align:center}._button_e3h44_44 svg{margin:2px;height:2em;width:2em;fill:currentColor}._button_e3h44_44:hover,._button_e3h44_44:active,._button_e3h44_44:focus{border:none;outline:none;color:var(--brand-secondary-color);background-color:var(--brand-primary-color)}._button_e3h44_44:not(:last-child){margin-right:.5em}._audioRecorder_g845f_1{display:flex;margin-left:-5px}._audioButton_g845f_6{display:flex;align-items:center;justify-content:center;cursor:pointer;-webkit-user-select:none;user-select:none;width:40px;height:40px;border-radius:50%;border:none;text-align:center;color:var(--brand-primary-color);background-color:var(--brand-secondary-color)}._audioButton_g845f_6:hover,._audioButton_g845f_6:active,._audioButton_g845f_6:focus{background-color:var(--brand-primary-color);color:var(--brand-secondary-color);border:none;outline:none}._audioButton_g845f_6 svg{margin:2px;height:2em;width:2em;fill:currentColor}._recorderIcon_g845f_37{width:1.3em;height:1.3em;border-radius:50%;animation:_pulse_g845f_1 2s infinite;margin:auto .6em}@keyframes _pulse_g845f_1{0%{background-color:#fff}40%{background-color:var(--danger-color)}60%{background-color:var(--danger-color)}to{background-color:#fff}}._spinning_g845f_60{width:40px;height:40px;padding:5px;display:block;margin:auto;color:var(--brand-primary-color);animation:_spin_g845f_60 1.2s linear infinite}@keyframes _spin_g845f_60{to{transform:rotate(360deg)}}._quickReplies_83npe_1{display:flex;flex-flow:row wrap;justify-content:flex-end;padding:.4rem 1rem;gap:.5rem}._quickReply_83npe_9{font-size:.8rem;background-color:var(--brand-secondary-color);color:var(--brand-primary-color);border:1px solid var(--brand-primary-color)}._quickReply_83npe_9:active,._quickReply_83npe_9:focus,._quickReply_83npe_9:hover{background-color:var(--brand-primary-color);color:var(--brand-secondary-color);border:1px solid var(--brand-secondary-color);outline:none}._header_1hky6_1{display:flex;justify-content:space-between;align-items:center;height:var(--header-height);background-color:var( --header-background-color, var(--brand-primary-color, white) )}._logoContainer_1hky6_13{height:inherit;flex:1;padding:var(--header-logo-padding)}._logo_1hky6_13{height:100%;background-image:var(--header-logo-url);background-repeat:no-repeat;background-size:contain;background-position:left center}._actions_1hky6_27{display:flex;align-items:center;padding:var(--header-icons-padding);color:var(--header-icon-color, white)}._actions_1hky6_27 button{background-color:transparent;color:inherit;border:none;cursor:pointer;border-radius:50%;padding:calc(var(--header-icon-size) / 3);margin:0}._actions_1hky6_27 button:hover{background-color:rgb(from var(--header-icon-color, white) r g b / 20%)}._actions_1hky6_27 button svg{width:var(--header-icon-size);height:var(--header-icon-size);display:block}@media screen and (min-width: 1024px){._header_1hky6_1{background-color:transparent;border-top-left-radius:0;border-top-right-radius:0}._actions_1hky6_27 button{font-size:2rem}._actions_1hky6_27 button:hover{background-color:var(--brand-primary-color);color:#fff}}._chatwindow_rkbir_1{display:flex;flex-direction:column;position:relative;width:100%;height:100vh;height:100svh;overflow:hidden}._chatwindow_rkbir_1 main{flex:1;overflow:hidden}._chatwindow_rkbir_1 aside{display:none}._chatwindowWithAside_rkbir_21{display:grid;position:relative;grid-template-rows:auto 1fr;grid-column-gap:6rem;grid-template-areas:"header" "main"}._chatwindowWithAside_rkbir_21 header{grid-area:header;display:block}._chatwindowWithAside_rkbir_21 main{position:relative;grid-area:main;flex:1}._chatwindowWithAside_rkbir_21 aside{display:flex;flex-direction:column;justify-content:flex-end;position:absolute;top:0;right:0;bottom:0;left:0;z-index:1000000;grid-area:main;overflow:hidden;container-type:inline-size;background-color:#00000080}._chatwindowWithAside_rkbir_21 aside:empty{display:none}@media screen and (min-width: 1024px){._chatwindow_rkbir_1{justify-content:center}._chatwindow_rkbir_1 header{padding-inline:2rem;grid-area:header}._chatwindow_rkbir_1 main{grid-area:header;flex:none;overflow:hidden}._chatwindow_rkbir_1 header,._chatwindow_rkbir_1 main{display:block;max-width:50em;width:100%;margin-left:auto;margin-right:auto}._chatwindowWithAside_rkbir_21{grid-template-columns:2fr 1fr;grid-template-areas:"header aside" "main aside"}._chatwindowWithAside_rkbir_21 header{margin-right:unset;padding:1rem 2rem}._chatwindowWithAside_rkbir_21 main{grid-area:main;flex:1;margin-right:unset;padding:0 2rem 1rem}._chatwindowWithAside_rkbir_21 aside{grid-area:aside;animation:none;background-color:unset}}.chat__cms-integration header{display:none}@keyframes _slideUpAside_eg9te_1{0%{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}._sourceInfos_eg9te_12{display:flex;flex-direction:column;max-height:90%;border-top-left-radius:.6rem;border-top-right-radius:.6rem;background-color:#fff;box-shadow:#00000059 0 5px 15px;animation:_slideUpAside_eg9te_1 .3s ease;transition:max-height .3s linear}._sourceInfos_eg9te_12._loadingContent_eg9te_23{max-height:50%}._sourceInfos_eg9te_12 svg{display:block}._sourceDetails_eg9te_32{display:flex;flex-direction:column;gap:1rem;padding:0 1rem;border-bottom:1px solid var(--color-gray-200)}._sourceHeader_eg9te_40{display:flex;align-items:center;justify-content:space-between;gap:.5rem}._sourceHeader_eg9te_40 p{display:-webkit-box;overflow-wrap:break-word;word-break:break-all;line-clamp:1;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}._sourceHeaderIcon_eg9te_57{font-size:2rem}._sourceContent_eg9te_61{flex:1;padding:1rem 1rem 0;line-height:1.5;overflow-y:auto;overflow-wrap:break-word}._openSourceButton_eg9te_69{margin:1rem;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:1rem;border-radius:5rem;text-decoration:none}._openSourceButton_eg9te_69 ._sourceButtonLabel_eg9te_79{display:flex;align-items:center;gap:.5rem}._openSourceButton_eg9te_69 ._sourceButtonLabel_eg9te_79 p{display:-webkit-box;font-size:1rem;margin-block:.5rem;line-clamp:1;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;text-align:left}._openSourceButton_eg9te_69 svg{font-size:1.5rem}._closeSourceInfosButton_eg9te_101{background-color:transparent;border:none;cursor:pointer;font-size:1.5rem;margin:0;padding:.25rem;border-radius:50%}._closeSourceInfosButton_eg9te_101:hover{background-color:var(--brand-primary-color);color:#fff}@keyframes _rotate_eg9te_1{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._loadingSourceInfos_eg9te_125{display:flex;align-items:center;justify-content:center;font-size:5rem;margin:5rem 7rem 7rem;color:var(--color-gray-700)}._loading_eg9te_23{animation:_rotate_eg9te_1 2s linear infinite;transform-origin:center}._loadingError_eg9te_139{display:flex;flex-direction:column;gap:2rem;padding:1rem 2rem 2rem}._loadingError_eg9te_139 h1,._loadingError_eg9te_139 p{text-align:center}._loadingError_eg9te_139 img{width:100%}@media screen and (min-width: 1024px){._sourceInfos_eg9te_12{height:100%;max-height:unset;max-width:35rem;margin-top:0;margin-left:1rem;border-radius:unset;animation:none;transition:none}._sourceInfos_eg9te_12._loadingContent_eg9te_23{max-height:100%}._sourceDetails_eg9te_32{padding:0 2rem}._sourceContent_eg9te_61{padding:2rem 2rem 0}._openSourceButton_eg9te_69{margin:2rem;border-radius:.2rem}._openSourceButton_eg9te_69 p{margin-block:revert}._loadingSourceInfos_eg9te_125{margin:7rem 0 0}@container (min-width: 30rem){._sourceInfos_eg9te_12{margin:2rem;height:calc(100% - 4rem)}}}._container_114wy_1{display:flex;flex-direction:column;height:100%}._body_114wy_7{padding:1rem;overflow-y:auto;flex:1;color:var(--text-primary-color)}._intro_114wy_14{margin-bottom:1em}._intro_114wy_14 h1{font-size:1.3em}._intro_114wy_14 h2{font-size:1em}._intro_114wy_14 p{line-height:1.4}._intro_114wy_14 ul{padding-left:1em}._intro_114wy_14 li{padding-top:.3em;padding-bottom:.3em;line-height:1.4}._footer_114wy_39{padding:1rem}._footnote_114wy_43{margin-top:.75rem;text-align:center;font-size:.8em;color:var(--text-secondary-color)}@media screen and (min-width: 1024px){._container_114wy_1{justify-content:center;background:#fff;border-radius:20px;padding:2rem}._containerWithFootnote_114wy_58{padding-bottom:1rem}._body_114wy_7{max-height:60vh;padding:0 0 1rem;margin-bottom:1rem}._footer_114wy_39{padding:0}}._startChatButton_114wy_73{width:100%}._formFields_114wy_77{display:flex;flex-direction:column;gap:.75em}._formField_114wy_77{display:flex;flex-direction:column;gap:8px}._radio_114wy_89{display:flex;align-items:flex-start;gap:6px;accent-color:var(--brand-primary-color)}._checkbox_114wy_96{display:flex;align-items:flex-start;gap:6px;padding:6px 0;accent-color:var(--brand-primary-color)}._input_114wy_104 input{border-width:1px;border-style:solid;border-color:#d9d9d9;box-sizing:border-box;margin:0;padding:4px 11px;color:#000000e0;font-size:1em;line-height:1.57;list-style:none;font-family:inherit;position:relative;display:inline-block;width:100%;min-width:0;border-radius:6px;transition:all .2s;accent-color:var(--brand-primary-color)}._input_114wy_104 input:focus,._input_114wy_104 input:focus-within{border-color:var(--brand-primary-color);box-shadow:0 0 0 2px #0591ff1a;outline:0;background-color:#fff}._input_114wy_104 input:hover{border-color:var(--brand-primary-color)}._inputLabel_114wy_138{margin-bottom:8px}._selectWrapper_114wy_142{position:relative}._selectWrapper_114wy_142:after{content:"⌄";font-size:1rem;top:2px;right:14px;position:absolute}._select_114wy_142 select{border-width:1px;border-style:solid;border-color:#d9d9d9;box-sizing:border-box;margin:0;padding:4px 11px;color:#000000e0;font-size:1em;line-height:1.57;list-style:none;font-family:inherit;position:relative;display:inline-block;width:100%;min-width:0;border-radius:6px;transition:all .2s;accent-color:var(--brand-primary-color);-webkit-appearance:none;-moz-appearance:none;appearance:none}._select_114wy_142 select:focus,._select_114wy_142 select:focus-within{border-color:var(--brand-primary-color);box-shadow:0 0 0 2px #0591ff1a;outline:0;background-color:#fff}._select_114wy_142 select:hover{border-color:var(--brand-primary-color)}._selectLabel_114wy_188{margin-bottom:8px}:root{--aspect-ratio: calc(16 / 9);--color-gray-100: #e9eff6;--color-gray-200: #d6d6d6;--color-gray-300: #bfbfbf;--color-gray-400: #999999;--color-gray-500: #707070;--color-gray-600: #565656;--color-gray-700: #434343;--color-gray-800: #2e2e2e;--color-gray-900: #1a1a1a;--body-background-color: white;--brand-primary-color: rgb(4, 47, 97);--brand-secondary-color: white;--text-primary-color: var(--color-gray-800);--text-secondary-color: var(--color-gray-500);--text-link-color: var(--text-primary-color);--text-link-color-hover: var(--brand-primary-color);--danger-color: #b11106;--scrollbar-thumb-color: var(--color-gray-200);--header-height: 4em;--header-icon-size: 1.5rem;--header-icons-padding: 1rem .75rem;--header-icon-color: white;--header-logo-padding: 1em;--header-logo-url: url(../logo.svg);--avatar-size: 2rem;--avatar-radius: 50%;--bot-avatar-background-color: var(--color-gray-100);--agent-avatar-background-color: var(--color-gray-100);--bubble-padding: .9em 1.3em;--bubble-margin-small: 3px;--bubble-margin-large: 1.2rem;--bubble-radius-large: 20px;--bubble-radius-small: 4px;--bot-bubble-background-color: white;--bot-bubble-text-color: var(--text-primary-color);--bot-bubble-border-color: var(--color-gray-700);--bot-bubble-border-width: 2px;--bot-bubble-top-left-radius: var(--bubble-radius-small);--bot-bubble-top-right-radius: var(--bubble-radius-large);--bot-bubble-bottom-right-radius: var(--bubble-radius-large);--bot-bubble-bottom-left-radius: var(--bubble-radius-small);--bot-bubble-source-background-color: var(--body-background-color);--bot-bubble-source-text-color: var(--bot-bubble-text-color);--guest-bubble-background-color: var(--brand-primary-color);--guest-bubble-text-color: white;--guest-bubble-border-color: white;--guest-bubble-border-width: 0px;--guest-bubble-top-left-radius: var(--bubble-radius-large);--guest-bubble-top-right-radius: var(--bubble-radius-small);--guest-bubble-bottom-right-radius: var(--bubble-radius-small);--guest-bubble-bottom-left-radius: var(--bubble-radius-large)}.chat__large{--header-icon-color: var(--color-gray-800);--header-logo-padding: 0 1em 0 0}[data-title]{--tooltip-min-width: 120px;--tooltip-max-width: min(400px, 80vw);--tooltip-tick-position-top: -10px;--tooltip-tick-position-bottom: unset;--tooltip-position-top: -42px;--tooltip-position-bottom: auto;--tooltip-position-left: auto;--tooltip-position-right: -.5em;--tooltip-border-color: #1f1f1f;--tooltip-border-color-top: var(--tooltip-border-color);--tooltip-border-color-bottom: transparent;position:relative;opacity:1}[data-title]:before{content:"";position:absolute;top:var(--tooltip-tick-position-top);bottom:var(--tooltip-tick-position-bottom);right:35%;border:6px solid transparent;border-top-color:var(--tooltip-border-color-top);border-bottom-color:var(--tooltip-border-color-bottom);z-index:999999;visibility:hidden}[data-title]:after{content:attr(data-title);position:absolute;top:var(--tooltip-position-top);bottom:var(--tooltip-position-bottom);right:var(--tooltip-position-right);left:var(--tooltip-position-left);font-size:14px;line-height:16px;padding:8px 10px;font-family:inherit;white-space:nowrap;border-radius:5px;background-color:#1f1f1f;color:#fafafa;box-shadow:1px 6px 16px #1f1f1f;z-index:99999;visibility:hidden}[data-title]:hover:before,[data-title]:hover:after{opacity:1;transition:all .1s ease .5s;visibility:visible}.tooltip--top-right[data-title]{--tooltip-position-left: -1em;--tooltip-position-right: auto}.tooltip--top-center[data-title]{--tooltip-position-top: auto;--tooltip-position-bottom: calc(100% + 1rem) ;--tooltip-tick-position-top: auto;--tooltip-tick-position-bottom: calc(100% + 4px) }.tooltip--top-center[data-title]:after{left:50%;transform:translate(-50%);min-width:var(--tooltip-min-width);max-width:var(--tooltip-max-width);width:max-content;white-space:normal;word-break:break-word;text-align:center;bottom:var(--tooltip-position-bottom);top:var(--tooltip-position-top)}.tooltip--bottom-left[data-title]{--tooltip-position-top: auto;--tooltip-position-bottom: -3em;--tooltip-tick-position-top: unset;--tooltip-tick-position-bottom: -10px;--tooltip-border-color-top: transparent;--tooltip-border-color-bottom: var(--tooltip-border-color)}::-webkit-scrollbar{width:8px;border:none}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-color)}*{box-sizing:border-box}body{margin:0}input::placeholder,textarea::placeholder{color:#666;opacity:1}svg{fill:currentColor}
@@ -13,8 +13,8 @@
13
13
  <meta name="theme-color" content="#000000" />
14
14
  <meta name="google" content="notranslate" />
15
15
  <title>Bubble Chat Client</title>
16
- <script type="module" crossorigin src="./assets/index-mzL-9NFo.js"></script>
17
- <link rel="stylesheet" crossorigin href="./assets/index-D5Y4qYek.css">
16
+ <script type="module" crossorigin src="./assets/index-CdIspDH2.js"></script>
17
+ <link rel="stylesheet" crossorigin href="./assets/index-acUYuLDa.css">
18
18
  </head>
19
19
 
20
20
  <body>
@@ -6,6 +6,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const globals_1 = require("@jest/globals");
7
7
  const createSessionInfo_1 = __importDefault(require("./createSessionInfo"));
8
8
  (0, globals_1.describe)('create session info', () => {
9
+ const props = {
10
+ sessionTokenSecret: 'some-secret',
11
+ };
9
12
  const querystrings = {};
10
13
  const headers = {
11
14
  host: 'fluance-chatbot.scapp.io',
@@ -43,7 +46,7 @@ const createSessionInfo_1 = __importDefault(require("./createSessionInfo"));
43
46
  environment: 'PROD',
44
47
  };
45
48
  (0, globals_1.it)('without user payload', async () => {
46
- const sessionInfo = await (0, createSessionInfo_1.default)(socket, 'my-client', 'TEST', defaultSessionInfo, 'my-user-id', 'de_DE', { email: 'hans@example.com' }, {})();
49
+ const sessionInfo = await (0, createSessionInfo_1.default)(socket, 'my-client', 'TEST', defaultSessionInfo, 'my-user-id', 'de_DE', { email: 'hans@example.com' }, props)();
47
50
  // client
48
51
  (0, globals_1.expect)(sessionInfo.client.name).toBe('my-client');
49
52
  (0, globals_1.expect)(sessionInfo.client.type).toBe('webclient');
@@ -70,6 +73,7 @@ const createSessionInfo_1 = __importDefault(require("./createSessionInfo"));
70
73
  };
71
74
  const props = {
72
75
  requestUserInfos,
76
+ sessionTokenSecret: 'some-secret',
73
77
  };
74
78
  const sessionInfo = await (0, createSessionInfo_1.default)(socket, 'my-client', 'TEST', defaultSessionInfo, 'my-user-id', 'de_DE', {}, props)();
75
79
  (0, globals_1.expect)(sessionInfo.user.id).toBe('hans.muster@PRIMARY');
@@ -84,6 +88,7 @@ const createSessionInfo_1 = __importDefault(require("./createSessionInfo"));
84
88
  };
85
89
  const props = {
86
90
  requestUserInfos,
91
+ sessionTokenSecret: 'some-secret',
87
92
  };
88
93
  const sessionInfo = await (0, createSessionInfo_1.default)(socket, 'my-client', 'TEST', defaultSessionInfo, 'my-user-id', 'de_DE', {}, props)();
89
94
  (0, globals_1.expect)(sessionInfo.user.id).toBe('my-user-id');
package/dist/index.d.ts CHANGED
@@ -13,6 +13,12 @@ export interface WebClientProps {
13
13
  speech?: SpeechToTextProps | undefined;
14
14
  expandChatWindowAtStart?: Devices;
15
15
  fabVisible?: boolean;
16
+ /**
17
+ * A secret key used to generate and verify session tokens (e.g. HMAC).
18
+ * Should be long, random, and stored securely (e.g. via environment variable).
19
+ * Used for signing tokens that identify sessions over insecure channels like WebSocket.
20
+ */
21
+ sessionTokenSecret: string;
16
22
  /**
17
23
  * Displays a start screen before a new chat begins, useful for user opt-in (e.g., terms acceptance).
18
24
  * Contains a text (`start-screen.intro` in Markdown), form fields, and a start button (`start-screen.start-chat`).
package/dist/index.js CHANGED
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.CLIENT_TYPE = exports.Devices = void 0;
7
7
  const engine_domain_1 = require("@botfabrik/engine-domain");
8
8
  const engine_transcript_export_1 = require("@botfabrik/engine-transcript-export");
9
+ const cookie_parser_1 = __importDefault(require("cookie-parser"));
10
+ const crypto_1 = require("crypto");
9
11
  const express_1 = require("express");
10
12
  const package_json_1 = require("../package.json");
11
13
  const createSessionInfo_1 = __importDefault(require("./createSessionInfo"));
@@ -24,11 +26,15 @@ var Devices;
24
26
  Devices["Desktop"] = "desktop";
25
27
  Devices["None"] = "none";
26
28
  })(Devices || (exports.Devices = Devices = {}));
29
+ const SESSION_ID_COOKIE_NAME = 'session-id';
30
+ const USER_ID_COOKIE_NAME = 'user-id';
27
31
  exports.default = (clientName, environment, props) => async (bot) => {
28
32
  const logger = bot.logger.child({ clientType: exports.CLIENT_TYPE, clientName });
33
+ bot.webserver.express.use((0, cookie_parser_1.default)());
29
34
  // serve transcript pdf
30
- bot.webserver.express.use('/transcript-pdf/:sessionId', async (req, res) => {
31
- const sessionId = req.params['sessionId'];
35
+ bot.webserver.express.get(`/${clientName}/transcript-pdf`, async (req, res) => {
36
+ const cookies = req.cookies || {};
37
+ const sessionId = cookies[SESSION_ID_COOKIE_NAME];
32
38
  if (sessionId?.length) {
33
39
  const session = await bot.createSession(sessionId);
34
40
  const pdf = await (0, engine_transcript_export_1.getPdf)(session);
@@ -61,6 +67,27 @@ exports.default = (clientName, environment, props) => async (bot) => {
61
67
  });
62
68
  }
63
69
  bot.webserver.express.use(`/${clientName}/embed`, (0, express_1.static)(__dirname + '/embed', serveStaticOptions));
70
+ bot.webserver.express.get(`/${clientName}/me/session`, (req, res) => {
71
+ const cookies = req.cookies || {};
72
+ const sessionId = cookies[SESSION_ID_COOKIE_NAME] || (0, crypto_1.randomUUID)();
73
+ const userId = cookies[USER_ID_COOKIE_NAME] ||
74
+ cookies['bubble-chat-user-id'] || // TODO: remove in future versions
75
+ (0, crypto_1.randomUUID)();
76
+ const sessionIdToken = generateSignedToken(sessionId, props.sessionTokenSecret);
77
+ const userIdToken = generateSignedToken(userId, props.sessionTokenSecret);
78
+ res.cookie(SESSION_ID_COOKIE_NAME, sessionId, {
79
+ ...buildCookieOptions(clientName, bot),
80
+ maxAge: 24 * 60 * 60 * 1000, // 1 day
81
+ });
82
+ if (!cookies[USER_ID_COOKIE_NAME]) {
83
+ res.cookie(USER_ID_COOKIE_NAME, userId, buildCookieOptions(clientName, bot));
84
+ }
85
+ res.status(201).json({ sessionIdToken, userIdToken });
86
+ });
87
+ bot.webserver.express.delete(`/${clientName}/me/session`, (_req, res) => {
88
+ res.clearCookie(SESSION_ID_COOKIE_NAME, buildCookieOptions(clientName, bot));
89
+ res.sendStatus(204);
90
+ });
64
91
  bot.webserver.express.get(`/${clientName}/logo.svg`, (_req, res) => {
65
92
  res.redirect(`/cms/chatbot/design/logo.svg?client=${clientName}`);
66
93
  });
@@ -116,13 +143,19 @@ const onTerminateSession = (socket, bot) => async ({ sessionId, // passed if the
116
143
  socket.leave(sessionId);
117
144
  await session.dispatch(engine_domain_1.Actions.guestDisconnected(sessionId));
118
145
  };
119
- const onStartChat = (socket, props, bot, clientName, environment, logger) => async ({ sessionId: sessionIdFromClient, userId: defaultUserId, querystrings, }) => {
146
+ const onStartChat = (socket, props, bot, clientName, environment, logger) => async ({ sessionIdToken, userIdToken, querystrings, }) => {
120
147
  const locale = (0, extractLocale_1.default)(querystrings, socket.request.headers['accept-language']);
148
+ const sessionId = verifySignedToken(sessionIdToken, props.sessionTokenSecret);
149
+ const userId = verifySignedToken(userIdToken, props.sessionTokenSecret);
150
+ if (!sessionId || !userId) {
151
+ logger.error(`Invalid session ID token received from client: ${sessionIdToken}`);
152
+ return;
153
+ }
121
154
  const sessionsCollection = bot.store.db.collection('sessions');
122
- const { sessionId, sessionInfo: defaultSessionInfo, isNew, } = await (0, requestSessionData_1.default)(sessionIdFromClient, querystrings, sessionsCollection, clientName, props);
155
+ const { sessionInfo: defaultSessionInfo, isNew } = await (0, requestSessionData_1.default)(sessionId, querystrings, sessionsCollection, clientName, props);
123
156
  // create a channel for each session
124
157
  socket.join(sessionId);
125
- const sessionInfo = await (0, createSessionInfo_1.default)(socket, clientName, environment, defaultSessionInfo, defaultUserId, locale, querystrings, props)();
158
+ const sessionInfo = await (0, createSessionInfo_1.default)(socket, clientName, environment, defaultSessionInfo, userId, locale, querystrings, props)();
126
159
  const session = await bot.createSession(sessionId, sessionInfo);
127
160
  sendConfigurationToClient(socket, props, bot, clientName);
128
161
  // sending persisted state to client
@@ -199,4 +232,44 @@ const sendConfigurationToClient = (socket, props, bot, clientName) => {
199
232
  });
200
233
  }
201
234
  };
235
+ const buildCookieOptions = (clientName, bot) => {
236
+ const isLocalhost = bot.webserver.baseUrl === 'http://localhost:3000';
237
+ return {
238
+ httpOnly: true, // 🔒 Not accessible via JS
239
+ secure: !isLocalhost, // ✅ true only for HTTPS
240
+ sameSite: 'lax', // 🔄 CORS protection (or 'Strict' / 'None')
241
+ path: `/${clientName}`, // Path for the cookie
242
+ };
243
+ };
244
+ /**
245
+ * Generates a signed token.
246
+ *
247
+ * @param payload
248
+ * @param secret
249
+ * @returns token in the format "payload.signature"
250
+ */
251
+ const generateSignedToken = (payload, secret) => {
252
+ const signature = (0, crypto_1.createHmac)('sha256', secret).update(payload).digest('hex');
253
+ return `${payload}.${signature}`;
254
+ };
255
+ /**
256
+ * Verifies a signed token.
257
+ *
258
+ * @param token in the format "payload.signature"
259
+ * @param secret
260
+ * @returns payload if the token is valid, otherwise null.
261
+ */
262
+ const verifySignedToken = (token, secret) => {
263
+ if (!token)
264
+ return null;
265
+ const [payload, signature] = token.split('.');
266
+ if (!payload || !signature)
267
+ return null;
268
+ const expectedSignature = (0, crypto_1.createHmac)('sha256', secret)
269
+ .update(payload)
270
+ .digest('hex');
271
+ if (signature !== expectedSignature)
272
+ return null;
273
+ return payload;
274
+ };
202
275
  exports.CLIENT_TYPE = 'webclient';
@@ -2,7 +2,6 @@ import type { SessionInfo } from '@botfabrik/engine-domain';
2
2
  import { type WebClientProps } from './index';
3
3
  import type { SessionInfoClientPayload, SessionInfoUserPayload } from './types';
4
4
  interface SessionData {
5
- sessionId: string;
6
5
  sessionInfo: SessionInfo<SessionInfoClientPayload, SessionInfoUserPayload>;
7
6
  isNew: boolean;
8
7
  }
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const crypto_1 = require("crypto");
4
3
  const index_1 = require("./index");
5
4
  const requestSessionData = async (sessionId, querystrings, sessionsCollection, clientName, props) => {
6
5
  const baseQuery = {
@@ -22,16 +21,13 @@ const requestSessionData = async (sessionId, querystrings, sessionsCollection, c
22
21
  };
23
22
  }
24
23
  const sessionRecord = await sessionsCollection.findOne(findSessionRecordQuery, { _id: 1, sessionInfo: 1 });
25
- let sesId;
26
24
  let sessionInfo;
27
25
  let isNew;
28
26
  if (sessionRecord) {
29
- sesId = sessionRecord._id;
30
27
  sessionInfo = sessionRecord.sessionInfo;
31
28
  isNew = false;
32
29
  }
33
30
  else {
34
- sesId = (0, crypto_1.randomUUID)();
35
31
  sessionInfo = {
36
32
  client: {},
37
33
  user: {},
@@ -40,7 +36,6 @@ const requestSessionData = async (sessionId, querystrings, sessionsCollection, c
40
36
  isNew = true;
41
37
  }
42
38
  return {
43
- sessionId: sesId,
44
39
  sessionInfo,
45
40
  isNew,
46
41
  };
@@ -5,18 +5,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const globals_1 = require("@jest/globals");
7
7
  const requestSessionData_1 = __importDefault(require("./requestSessionData"));
8
- globals_1.jest.mock('crypto', () => {
9
- const original = globals_1.jest.requireActual('crypto');
10
- return {
11
- v4: globals_1.jest.fn(() => 'uuid'),
12
- ...original,
13
- randomUUID: globals_1.jest.fn(() => 'some-uuid'),
14
- };
15
- });
16
8
  (0, globals_1.describe)('request session id', () => {
17
9
  (0, globals_1.beforeEach)(() => {
18
10
  globals_1.jest.clearAllMocks();
19
11
  });
12
+ const props = {
13
+ sessionTokenSecret: 'some-secret',
14
+ };
20
15
  const querystrings = {
21
16
  accessToken: 'access-token',
22
17
  };
@@ -26,14 +21,13 @@ globals_1.jest.mock('crypto', () => {
26
21
  const sessionsCollection = {
27
22
  findOne,
28
23
  };
29
- const { sessionId, isNew } = await (0, requestSessionData_1.default)('session-id', querystrings, sessionsCollection, 'test-bot', {});
24
+ const { isNew } = await (0, requestSessionData_1.default)('session-id', querystrings, sessionsCollection, 'test-bot', props);
30
25
  (0, globals_1.expect)(findOne).toHaveBeenCalledTimes(1);
31
26
  (0, globals_1.expect)(findOne).toHaveBeenCalledWith({
32
27
  _id: 'session-id',
33
28
  'sessionInfo.client.name': 'test-bot',
34
29
  'sessionInfo.client.type': 'webclient',
35
30
  }, { _id: 1, sessionInfo: 1 });
36
- (0, globals_1.expect)(sessionId).toBe('some-uuid');
37
31
  (0, globals_1.expect)(isNew).toBe(true);
38
32
  });
39
33
  (0, globals_1.it)('when sessionId has been passed by query param and exists in db', async () => {
@@ -42,14 +36,13 @@ globals_1.jest.mock('crypto', () => {
42
36
  const sessionsCollection = {
43
37
  findOne,
44
38
  };
45
- const { sessionId, isNew } = await (0, requestSessionData_1.default)('session-id', querystrings, sessionsCollection, 'test-bot', {});
39
+ const { isNew } = await (0, requestSessionData_1.default)('session-id', querystrings, sessionsCollection, 'test-bot', props);
46
40
  (0, globals_1.expect)(findOne).toHaveBeenCalledTimes(1);
47
41
  (0, globals_1.expect)(findOne).toHaveBeenCalledWith({
48
42
  _id: 'session-id',
49
43
  'sessionInfo.client.name': 'test-bot',
50
44
  'sessionInfo.client.type': 'webclient',
51
45
  }, { _id: 1, sessionInfo: 1 });
52
- (0, globals_1.expect)(sessionId).toBe('session-id');
53
46
  (0, globals_1.expect)(isNew).toBe(false);
54
47
  });
55
48
  (0, globals_1.it)('when requestSessionRecordQuery has been passed as webclient property but no such session exists in db', async () => {
@@ -61,9 +54,10 @@ globals_1.jest.mock('crypto', () => {
61
54
  const requestSessionRecordQuery = globals_1.jest.fn();
62
55
  const props = {
63
56
  requestSessionRecordQuery,
57
+ sessionTokenSecret: 'some-secret',
64
58
  };
65
59
  requestSessionRecordQuery.mockReturnValueOnce(Promise.resolve({ 'sessionInfo.user.id': 'hans@apptiva.ch' }));
66
- const { sessionId, isNew } = await (0, requestSessionData_1.default)('session-id', querystrings, sessionsCollection, 'test-bot', props);
60
+ const { isNew } = await (0, requestSessionData_1.default)('session-id', querystrings, sessionsCollection, 'test-bot', props);
67
61
  (0, globals_1.expect)(requestSessionRecordQuery).toHaveBeenCalledTimes(1);
68
62
  (0, globals_1.expect)(requestSessionRecordQuery).toHaveBeenCalledWith({
69
63
  querystrings,
@@ -75,7 +69,6 @@ globals_1.jest.mock('crypto', () => {
75
69
  'sessionInfo.client.type': 'webclient',
76
70
  'sessionInfo.user.id': 'hans@apptiva.ch',
77
71
  }, { _id: 1, sessionInfo: 1 });
78
- (0, globals_1.expect)(sessionId).toBe('some-uuid');
79
72
  (0, globals_1.expect)(isNew).toBe(true);
80
73
  });
81
74
  (0, globals_1.it)('when requestSessionRecordQuery has been passed as webclient property and session exists in db', async () => {
@@ -87,9 +80,10 @@ globals_1.jest.mock('crypto', () => {
87
80
  const requestSessionRecordQuery = globals_1.jest.fn();
88
81
  const props = {
89
82
  requestSessionRecordQuery,
83
+ sessionTokenSecret: 'some-secret',
90
84
  };
91
85
  requestSessionRecordQuery.mockReturnValueOnce(Promise.resolve({ 'sessionInfo.user.id': 'hans@apptiva.ch' }));
92
- const { sessionId, isNew } = await (0, requestSessionData_1.default)('session-id', querystrings, sessionsCollection, 'test-bot', props);
86
+ const { isNew } = await (0, requestSessionData_1.default)('session-id', querystrings, sessionsCollection, 'test-bot', props);
93
87
  (0, globals_1.expect)(requestSessionRecordQuery).toHaveBeenCalledTimes(1);
94
88
  (0, globals_1.expect)(requestSessionRecordQuery).toHaveBeenCalledWith({
95
89
  querystrings,
@@ -101,7 +95,6 @@ globals_1.jest.mock('crypto', () => {
101
95
  'sessionInfo.client.type': 'webclient',
102
96
  'sessionInfo.user.id': 'hans@apptiva.ch',
103
97
  }, { _id: 1, sessionInfo: 1 });
104
- (0, globals_1.expect)(sessionId).toBe('session-id');
105
98
  (0, globals_1.expect)(isNew).toBe(false);
106
99
  });
107
100
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botfabrik/engine-webclient",
3
- "version": "4.90.6",
3
+ "version": "4.92.0",
4
4
  "description": "Webclient for Botfabriks Bot Engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -25,11 +25,13 @@
25
25
  "@botfabrik/engine-utils": "^4.90.6",
26
26
  "@google-cloud/speech": "^7.1.0",
27
27
  "accept-language-parser": "^1.5.0",
28
+ "cookie-parser": "^1.4.7",
28
29
  "express": "^5.1.0",
29
30
  "uuid": "^11.1.0"
30
31
  },
31
32
  "devDependencies": {
32
33
  "@types/accept-language-parser": "^1.5.8",
34
+ "@types/cookie-parser": "^1.4.9",
33
35
  "@types/express": "^5.0.3",
34
36
  "@types/serve-static": "^1.15.8",
35
37
  "@types/ua-parser-js": "^0.7.39",
@@ -39,5 +41,5 @@
39
41
  "tsx": "^4.20.1",
40
42
  "typescript": "5.8.3"
41
43
  },
42
- "gitHead": "dd37c0bc588da6a64f35295ab1c1788f8f0c1674"
44
+ "gitHead": "b6327c46dd1927cc738fb5ac66f533b834a9fbec"
43
45
  }
@@ -1 +0,0 @@
1
- ._app_1rj0t_1{display:flex;flex-direction:row;height:100vh;height:100svh;background-color:var(--body-background-color)}._container_q2uun_1{height:100%;position:relative}._chatcontent_q2uun_6{display:flex;flex-flow:column nowrap;height:100%}._accessabilityHidden_q2uun_12{visibility:hidden}._messageContainer_1m8fy_1{flex:1;overflow-y:scroll;overscroll-behavior:contain;padding-top:1rem;position:relative;-webkit-overflow-scrolling:touch;scrollbar-color:rgba(0,0,0,.2) transparent}._messages_1m8fy_13{position:relative;list-style:none;font-size:.9rem;line-height:1.4;padding:0 1rem;margin:0;overflow-wrap:break-word;word-wrap:break-word}@media screen and (min-width: 1024px){._messageContainer_1m8fy_1{margin-bottom:1rem}._messages_1m8fy_13{padding-left:0}}@media (min-width: 36rem){._messageContainer_1m8fy_1{padding-top:2rem;padding-bottom:2rem}._messages_1m8fy_13{font-size:1rem;line-height:1.8}}._generalConditionsContainer_55hjg_1{margin-bottom:1.2rem;margin-left:1rem;margin-right:1rem}._generalConditions_55hjg_1{transition:all .5s linear;background-color:var(--bot-bubble-background-color);color:var(--bot-bubble-text-color);padding:.9em 1.3em;font-size:.9rem}._generalConditionsHeader_55hjg_15{display:flex;align-items:flex-end;justify-content:space-between;cursor:pointer}._generalConditionsHeader_55hjg_15:focus{outline:none}._generalConditionsBody_55hjg_26{display:flex;align-items:flex-end}._generalConditionsBody_55hjg_26:focus{outline:none}._generalConditionsAccept_55hjg_35{padding:.9em 1.3em;font-size:.9rem}._generalConditionsAccept_55hjg_35:focus{outline:none}._message_59o8c_1{--bubble-margin: var(--bubble-margin-small);margin-bottom:var(--bubble-margin);transition:border-radius .5s;position:relative}._messageBot_59o8c_9{--bot-bubble-user-actions-display: none;display:flex;align-items:flex-end}._messageBot_59o8c_9:focus-within,._messageBot_59o8c_9:hover{--bot-bubble-user-actions-display: flex}._messageBot_59o8c_9:not(._messageBotLast_59o8c_19) ._avatar_59o8c_19{visibility:hidden}._messageBotFirst_59o8c_24{--bot-bubble-top-left-radius: var(--bubble-radius-large);--bot-bubble-top-right-radius: var(--bubble-radius-large);--bot-bubble-bottom-right-radius: var(--bubble-radius-large)}._messageBotLast_59o8c_19{--bot-bubble-top-right-radius: var(--bubble-radius-large);--bot-bubble-bottom-left-radius: var(--bubble-radius-large);--bot-bubble-bottom-right-radius: var(--bubble-radius-large);--bubble-margin: var(--bubble-margin-large)}._messageBotAnimated_59o8c_37{animation-duration:.25s;animation-timing-function:ease-in;animation-delay:0s;animation-iteration-count:1;animation-direction:normal;animation-fill-mode:forwards;animation-play-state:running;animation-name:_fadeInLeft_59o8c_1}._messageGuest_59o8c_48{display:flex;align-items:flex-end;justify-content:flex-end}._messageGuestFirst_59o8c_54{--guest-bubble-top-left-radius: var(--bubble-radius-large);--guest-bubble-top-right-radius: var(--bubble-radius-large);--guest-bubble-bottom-left-radius: var(--bubble-radius-large)}._messageGuestLast_59o8c_60{--guest-bubble-top-left-radius: var(--bubble-radius-large);--guest-bubble-bottom-left-radius: var(--bubble-radius-large);--guest-bubble-bottom-right-radius: var(--bubble-radius-large);--bubble-margin: var(--bubble-margin-large);margin-bottom:var(--bubble-margin)}._avatar_59o8c_19{width:var(--avatar-size);height:var(--avatar-size);border-radius:var(--avatar-radius, 50%)}._botAvatar_59o8c_74{background-color:var(--bot-avatar-background-color)}._agentAvatar_59o8c_78{background-color:var(--agent-avatar-background-color)}._bubble_59o8c_82{display:inline-block;max-width:calc(100% - 4.3rem);position:relative}._bubbleContent_59o8c_88{padding:var(--bubble-padding);color:inherit;font-size:inherit}._bubbleContent_59o8c_88 *>:first-child{margin-top:0}._bubbleContent_59o8c_88 *>:last-child{margin-bottom:0}._bubbleLeft_59o8c_102{border-radius:var(--bot-bubble-top-left-radius) var(--bot-bubble-top-right-radius) var(--bot-bubble-bottom-right-radius) var(--bot-bubble-bottom-left-radius);border-color:var(--bot-bubble-border-color);border-width:var(--bot-bubble-border-width);border-style:solid;background-color:var(--bot-bubble-background-color);margin-left:1rem}._leftText_59o8c_113{color:var(--bot-bubble-text-color)}._leftText_59o8c_113 a{color:var(--bot-bubble-text-color)!important}._bubbleRight_59o8c_120{border-radius:var(--guest-bubble-top-left-radius) var(--guest-bubble-top-right-radius) var(--guest-bubble-bottom-right-radius) var(--guest-bubble-bottom-left-radius);border-color:var(--guest-bubble-border-color);border-width:var(--guest-bubble-border-width);border-style:solid;background-color:var(--guest-bubble-background-color)}._rightText_59o8c_130,._rightText_59o8c_130 a{color:var(--guest-bubble-text-color)}@keyframes _fadeInLeft_59o8c_1{0%{transform:translate(-100vw)}to{transform:translate(0)}}.source-info-reference{--footnote-padding: .2em}.source-info-reference:first-of-type{margin-left:var(--footnote-padding)}.source-info-reference:last-of-type{margin-right:var(--footnote-padding)}.source-info-reference.source-info-reference--before-space{margin-left:-.1em}.source-info-reference.source-info-reference--after-space{margin-right:-.1em}._sourceInfoReference_59o8c_162{display:none}._sourceInfoReference_59o8c_162 a{--bot-bubble-text-color: black;background:color-mix(in srgb,var(--brand-primary-color) 20%,transparent);padding:3px 6px;border-radius:6px;text-decoration:none!important;font-size:.75rem;font-family:monospace}._sourceInfoReferenceActive_59o8c_176 a{--bot-bubble-text-color: white;background:var(--brand-primary-color)}@media screen and (min-width: 1024px){._sourceInfoReference_59o8c_162{display:inline}}._botMessageActions_1dl7x_1{--bot-bubble-user-actions-container-bg-opacity: 1;color:var(--text-secondary-color);padding:.125rem .5rem;vertical-align:middle;background-color:rgb(var(--bot-bubble-user-actions-container-bg, 255 255 255) / var(--bot-bubble-user-actions-container-bg-opacity));border-color:var(--color-gray-200);border-style:solid;border-width:1px;border-radius:.75rem;margin-top:-.75rem;top:100%;left:calc(var(--avatar-size, 2rem) + 1.5rem);position:absolute;z-index:10;display:var(--bot-bubble-user-actions-display);gap:.15rem}._alwaysVisible_1dl7x_22{--bot-bubble-user-actions-display: flex;--bot-bubble-user-actions-container-bg-opacity: 0;border-width:0;top:calc(100% + .75rem)}._reported_1dl7x_29{display:flex}._action_1dl7x_33{display:var(--bot-bubble-user-actions-display);font-size:.875rem;line-height:1.25rem;padding-left:.25rem;padding-right:.25rem;border-radius:.375rem;white-space:nowrap;justify-content:center;align-items:center;height:1.5rem;text-transform:none;border:0;cursor:pointer;color:inherit;background-color:rgb(var(--bot-bubble-user-actions-container-bg, 255 255 255) / var(--bot-bubble-user-actions-container-bg-opacity))}._action_1dl7x_33:hover{background-color:var(--color-gray-200)}._action_1dl7x_33._reported_1dl7x_29{display:flex}._sourceList_1n31h_1{display:flex;flex-direction:column;flex-wrap:wrap;gap:.5rem;list-style-type:none!important;margin:0;padding:0;padding-top:1rem}._source_1n31h_1{font-size:.7rem;width:fit-content;cursor:pointer;max-width:100%}._source_1n31h_1 a{display:flex;align-items:center;flex-direction:row;gap:.25rem;padding:3px 6px;border-radius:6px;color:var(--bot-bubble-source-text-color)!important;background-color:var(--bot-bubble-source-background-color)}._source_1n31h_1 a:hover{background:color-mix(in srgb,var(--bot-bubble-source-background-color) 75%,transparent)}._source_1n31h_1 a ._label_1n31h_37{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden}._source_1n31h_1 a svg{font-size:1rem;flex-shrink:0}._button_3ui4g_1{display:inline-block;font-family:inherit;font-size:1em;padding:.5em 1em;border-radius:.2rem;background-color:#fff;cursor:pointer;transition:all .2s linear;text-align:center}._buttonDefault_3ui4g_13{color:#000000d9;background-color:#fff;border:2px solid;border-color:color-mix(in srgb,var(--brand-primary-color) 20%,transparent)}._buttonDefault_3ui4g_13:hover{color:var(--brand-primary-color);border-color:var(--brand-primary-color)}._buttonDefault_3ui4g_13:disabled{cursor:not-allowed;opacity:.3}._buttonPrimary_3ui4g_28{color:var(--brand-secondary-color);background-color:var(--brand-primary-color);border:2px solid var(--brand-primary-color)}._buttonPrimary_3ui4g_28:hover{color:var(--brand-primary-color);background-color:var(--brand-secondary-color);border:2px solid var(--brand-primary-color)}._buttonPrimary_3ui4g_28:disabled{cursor:not-allowed;opacity:.3;color:var(--brand-secondary-color);background-color:var(--brand-primary-color)}._title_b904h_1{margin-top:0;margin-block-start:0}._subtitle_b904h_6{margin-top:.5rem;margin-bottom:.5rem}._buttons_b904h_11{margin-top:1rem;display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}._button_b904h_11{font-size:.9em;margin:0;background-color:var(--bot-bubble-text-color);color:var(--bot-bubble-background-color);border:2px solid var(--bot-bubble-text-color);width:100%}._button_b904h_11:hover{color:var(--bot-bubble-text-color);background-color:var(--bot-bubble-background-color);border:2px solid var(--bot-bubble-text-color)}._imageContainer_b904h_34{display:flex}._image_b904h_34{height:100%;width:100%;object-fit:cover;border-radius:calc(var(--bot-bubble-top-left-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-top-right-radius) - var(--bot-bubble-border-width)) 0 0}._video_container_b904h_49{display:flex}._video_b904h_49{width:100%;height:100%;border-radius:calc(var(--bot-bubble-top-left-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-top-right-radius) - var(--bot-bubble-border-width)) 0 0}._only_b904h_63{border-radius:calc(var(--bot-bubble-top-left-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-top-right-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-bottom-right-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-bottom-left-radius) - var(--bot-bubble-border-width))}._text_gp0s0_1{overflow-wrap:break-word}._command_gp0s0_5{padding:3px 6px;margin-right:3px;border-radius:6px;font-size:.75rem;font-family:monospace;background-color:var( --guest-bubble-command-background-color, rgba(255, 255, 255, .3) )}._markdown_nw7vg_1 h1,._markdown_nw7vg_1 h2,._markdown_nw7vg_1 h3,._markdown_nw7vg_1 h4,._markdown_nw7vg_1 h5,._markdown_nw7vg_1 p,._markdown_nw7vg_1 a,._markdown_nw7vg_1 ul,._markdown_nw7vg_1 ol{color:inherit;margin-block-start:.4em;margin-block-end:.4em;margin-inline-start:0px;margin-inline-end:0px}._markdown_nw7vg_1 h1{font-size:1.2rem;white-space:pre-wrap}._markdown_nw7vg_1 h2{font-size:1.1rem;white-space:pre-wrap}._markdown_nw7vg_1 h3,._markdown_nw7vg_1 h4,._markdown_nw7vg_1 h5{font-size:1rem;white-space:pre-wrap}._markdown_nw7vg_1 a{color:var(--text-link-color);text-decoration:underline;cursor:pointer}._markdown_nw7vg_1 a:hover{color:var(--text-link-color-hover);opacity:.8}._markdown_nw7vg_1 a:active{color:var(--text-link-color-hover)}._markdown_nw7vg_1 a:visited{color:var(--text-link-color)}._markdown_nw7vg_1 img{max-width:100%;margin-block-start:0;margin-block-end:0}._markdown_nw7vg_1 ul{padding:0 0 0 1.1em}._markdown_nw7vg_1 ul>li{list-style-type:disc}._markdown_nw7vg_1 ul>li ul{margin-block-start:0}._markdown_nw7vg_1 ul>li p{margin-bottom:0}._markdown_nw7vg_1 ol{padding:0 0 0 1.1em}._markdown_nw7vg_1 ol>li{list-style-type:decimal}._markdown_nw7vg_1 table,._markdown_nw7vg_1 td,._markdown_nw7vg_1 th{border:1px solid}._markdown_nw7vg_1 table{width:100%;border-collapse:collapse;margin-bottom:1rem;-webkit-hyphens:auto;hyphens:auto}._markdown_nw7vg_1 table th{text-align:left;padding:5px}._markdown_nw7vg_1 table td{padding:5px}._markdown_nw7vg_1 hr{margin-top:1rem;margin-bottom:1rem;border-top:1px solid;border-left:0;border-bottom:0;border-right:0}._ticontainer_xg0dn_1{padding:var(--bubble-padding)}._tiblock_xg0dn_5{align-items:center;display:flex;height:1rem;margin:2.1px}._tidot_xg0dn_12{background-color:var(--bot-bubble-text-color);animation:_mercuryTypingAnimation_xg0dn_1 1s infinite ease-in-out;border-radius:3px;display:inline-block;height:6px;margin-right:3px;width:6px}@keyframes _mercuryTypingAnimation_xg0dn_1{0%{transform:translateY(0)}28%{transform:translateY(-5px)}44%{transform:translateY(0)}}._tidot_xg0dn_12:nth-child(1){animation-delay:50ms}._tidot_xg0dn_12:nth-child(2){animation-delay:.15s}._tidot_xg0dn_12:nth-child(3){animation-delay:.25s}._bottomSheet_jp8dl_1{visibility:hidden;position:absolute;z-index:3000;height:100%;width:100%;background-color:var(--body-background-color);top:0;bottom:0;transform:translateY(100%);overflow-y:auto;overscroll-behavior:contain}._bottomSheetOpen_jp8dl_15{animation:_slide-in_jp8dl_1 .2s forwards;visibility:visible}._bottomSheetClose_jp8dl_20{animation:_slide-out_jp8dl_1 .2s forwards;visibility:hidden}@keyframes _slide-in_jp8dl_1{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes _slide-out_jp8dl_1{0%{transform:translateY(0)}to{transform:translateY(100%)}}._container_xc2nx_1{overflow:hidden}._container_xc2nx_1 iframe{width:100%;height:100%;border:none}._container_tr4tn_1{padding:.5rem;display:flex;justify-content:center;align-items:center;border-top:1px solid var(--text-primary-color);background-color:#fff;font-size:.7rem;color:var(--text-secondary-color)}._container_tr4tn_1 a{color:var(--brand-primary-color);text-decoration:none}@media screen and (min-width: 1024px){._container_tr4tn_1{padding:.75rem 0 0;background-color:transparent;border-top:unset}}._container_h23mk_1{padding:1rem}._container_h23mk_1 h1{font-size:1.6em}._container_h23mk_1 h2{font-size:1em}._container_h23mk_1 p{line-height:1.5}._formContainer_h23mk_17{display:flex;flex-direction:column}._emailInput_h23mk_22{box-sizing:border-box;margin:1rem 0 0;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:#000000a6;font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s;outline:none}._emailInput_h23mk_22:hover{border:1px solid var(--brand-primary-color)}._emailInput_h23mk_22:focus{border:1px solid var(--brand-primary-color)}._description_h23mk_52{font-size:.9rem;-webkit-hyphens:auto;hyphens:auto}._actions_h23mk_57{margin-top:1rem;padding-bottom:3rem;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-end;gap:.5rem}._validationError_h23mk_67{padding-top:.5em;color:var(--danger-color);font-size:.8em;height:1rem}._submitted_h23mk_74{margin-top:3rem;padding:1rem;border:1px solid var(--brand-primary-color);border-radius:2px}._inputContainer_fi5ao_1{z-index:2000}._blockUserInput_pot9c_1{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:left;position:relative;color:var(--text-secondary-color);font-size:.9rem;padding:.6rem 1rem;animation:_append-animate_pot9c_1 .2s ease-in;z-index:0}@keyframes _append-animate_pot9c_1{0%{opacity:0;top:6rem}to{opacity:1;top:0}}._commandsDropdown_5ytuv_1{position:relative}._commandsDropdown_5ytuv_1 ._commands_5ytuv_1{position:absolute;bottom:calc(100% - 3px);left:0;right:0;padding:1rem;margin:0;width:100%;overflow-y:auto;max-height:30em;border-radius:20px 20px 0 0;box-shadow:0 -8px 24px #0006;background-color:var( --commands-background-color, var(--brand-primary-color) );list-style-type:none}._commandsDropdown_5ytuv_1 ._command_5ytuv_1{display:flex;flex-direction:column;gap:.25rem;cursor:pointer;padding:1rem;border-radius:10px;color:var(--commands-text-color, white)}._commandsDropdown_5ytuv_1 ._command_5ytuv_1 h1{font-size:1.1rem;margin-block:0}._commandsDropdown_5ytuv_1 ._command_5ytuv_1 p{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;margin:0}._commandsDropdown_5ytuv_1 ._commandActive_5ytuv_46{color:var(--commands-active-text-color, white);background-color:var( --commands-active-background-color, rgba(255, 255, 255, .3) )}._commandsSelections_5ytuv_55{display:none}@media screen and (min-width: 1024px){._commandsSelections_5ytuv_55{display:flex;justify-content:center;flex-wrap:wrap;gap:.5rem;padding-inline:1rem;margin-top:1rem}._commandsSelections_5ytuv_55 button{background:transparent;color:var(--text-secondary-color);border:1px solid var(--text-secondary-color);border-radius:20px;padding:.5rem 1rem;cursor:pointer}._commandsSelections_5ytuv_55 button:hover{background:var(--brand-primary-color);border-color:var(--brand-primary-color);color:#fff}}._callToActionContainer_bkfcm_1{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;position:relative;padding:.6rem 1rem .3rem;animation:_append-animate_bkfcm_1 .2s ease-in;z-index:0}@keyframes _append-animate_bkfcm_1{0%{opacity:0;top:6rem}to{opacity:1;top:0}}._callToActionTitle_bkfcm_23{font-size:.9rem;color:var(--text-secondary-color);margin-bottom:.2rem;padding-right:.5rem}._rateOverlay_bkfcm_30{display:flex;flex-direction:column;justify-content:space-between}._rateOverlay_bkfcm_30 h2{font-size:1em;text-align:center}._rateOverlay_bkfcm_30 p{line-height:1.5}._rateOverlay_bkfcm_30 form{display:flex;flex:1;flex-direction:column;justify-content:space-between}._body_bkfcm_52{height:100%;display:flex;flex-direction:column;justify-content:space-between;padding:1rem}._footer_bkfcm_60 input{font-size:1rem;border:none;box-sizing:border-box;width:100%;outline-width:0;padding:1.3rem 1rem 1rem;text-overflow:ellipsis;color:var(--text-primary-color)}._actions_bkfcm_73{display:flex;justify-content:flex-end;align-items:center;line-height:0}._actions_bkfcm_73 button{width:100%;border-radius:0}@media screen and (min-width: 1024px){._footer_bkfcm_60 input{border-radius:20px}._actions_bkfcm_73{margin-top:.5rem}._actions_bkfcm_73 button{border-radius:.2rem}}._bubbles_bkfcm_101{display:flex;flex-direction:column}@keyframes _appear_bkfcm_1{0%{opacity:0}66%{opacity:0}to{opacity:1}}@keyframes _fadeInLeft_bkfcm_1{0%{transform:translate(-3rem)}80%{transform:translate(-3rem)}to{transform:translate(0)}}._rateFeedbackBotBubble_bkfcm_130{display:flex;align-items:flex-end;margin:1rem 0}._rateFeedbackGuestBubble_bkfcm_136{display:flex;align-items:flex-end;justify-content:flex-end}._avatar_bkfcm_142{width:var(--avatar-size);height:var(--avatar-size);animation-duration:.5s;animation-timing-function:ease-in;animation-delay:0s;animation-iteration-count:1;animation-direction:normal;animation-fill-mode:forwards;animation-play-state:running;animation-name:_fadeInLeft_bkfcm_1}._bubble_bkfcm_101{padding:var(--bubble-padding);font-size:.9rem;animation-duration:1s;animation-delay:0s;animation-timing-function:ease;animation-iteration-count:1;animation-direction:normal;animation-fill-mode:forwards;animation-play-state:running;animation-name:_appear_bkfcm_1}._botBubble_bkfcm_168{border-radius:var(--bubble-radius-large);background-color:var(--bot-bubble-background-color);margin-left:1rem;color:var(--bot-bubble-text-color)}._botBubble_bkfcm_168 a{color:var(--bot-bubble-text-color)!important}._guestBubble_bkfcm_179{animation-duration:.25s;align-self:end;border-radius:var(--bubble-radius-large);background-color:var(--guest-bubble-background-color);color:var(--guest-bubble-text-color);margin-left:1rem;display:box;line-clamp:3;box-orient:vertical;overflow:hidden}._guestBubble_bkfcm_179 a{color:var(--guest-bubble-text-color)}._rateText_bkfcm_198{padding:.75rem;font-size:.9rem}._stars_bkfcm_203{box-sizing:border-box;font-variant:tabular-nums;font-feature-settings:"tnum";display:inline-block;margin:0;padding:0;line-height:unset;list-style:none;outline:none}._starsSmall_bkfcm_215{font-size:1.2rem}._starsLarge_bkfcm_219{font-size:2rem}._starsLarge_bkfcm_219 ._star_bkfcm_203:not(:last-child){margin-right:1.5rem}._star_bkfcm_203{display:inline-block;color:inherit;cursor:pointer}._star_bkfcm_203:not(:last-child){margin-right:8px}._starReadonly_bkfcm_236{cursor:inherit}._star_bkfcm_203>div{transition:all .3s,outline 0s}._starIcon_bkfcm_246{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;text-rendering:optimizelegibility}._star_bkfcm_203 [aria-checked=true]{color:var(--brand-primary-color, #fadb14)}._star_bkfcm_203 [aria-checked=false]{color:var(--color-gray-400)}._starsDescriptionContainer_bkfcm_264{display:flex;flex-direction:column;width:fit-content;padding-top:1rem;padding-bottom:1rem;margin:auto}._starsDescription_bkfcm_264{display:flex;flex-direction:row;justify-content:space-between;font-size:.7rem;color:var(--text-secondary-color)}._inputWrapper_e3h44_1{display:flex;justify-content:center;align-items:center;line-height:0;background-color:#fff}@media screen and (min-width: 1024px){._inputWrapper_e3h44_1{border-radius:20px}._withOpenCommands_e3h44_14{border-top-left-radius:0;border-top-right-radius:0}}._messageInputWrapper_e3h44_20{flex:1;margin-right:.5rem;border-radius:inherit}._messageInput_e3h44_20{resize:none;font-size:1rem;font-family:inherit;border:none;border-radius:inherit;height:calc(1em + 3rem);box-sizing:border-box;width:100%;outline-width:0;padding:1.3rem 1rem;text-overflow:ellipsis}._messageInput_e3h44_20:focus{outline:none}._buttons_e3h44_44{padding-right:.5rem;display:flex;justify-content:center;align-items:center}._button_e3h44_44[disabled]{opacity:.4}._button_e3h44_44{display:flex;align-items:center;justify-content:center;width:40px;height:40px;font-family:inherit;color:var(--brand-primary-color);background-color:var(--brand-secondary-color);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:50%;border:none;text-align:center}._button_e3h44_44 svg{margin:2px;height:2em;width:2em;fill:currentColor}._button_e3h44_44:hover,._button_e3h44_44:active,._button_e3h44_44:focus{border:none;outline:none;color:var(--brand-secondary-color);background-color:var(--brand-primary-color)}._button_e3h44_44:not(:last-child){margin-right:.5em}._audioRecorder_g845f_1{display:flex;margin-left:-5px}._audioButton_g845f_6{display:flex;align-items:center;justify-content:center;cursor:pointer;-webkit-user-select:none;user-select:none;width:40px;height:40px;border-radius:50%;border:none;text-align:center;color:var(--brand-primary-color);background-color:var(--brand-secondary-color)}._audioButton_g845f_6:hover,._audioButton_g845f_6:active,._audioButton_g845f_6:focus{background-color:var(--brand-primary-color);color:var(--brand-secondary-color);border:none;outline:none}._audioButton_g845f_6 svg{margin:2px;height:2em;width:2em;fill:currentColor}._recorderIcon_g845f_37{width:1.3em;height:1.3em;border-radius:50%;animation:_pulse_g845f_1 2s infinite;margin:auto .6em}@keyframes _pulse_g845f_1{0%{background-color:#fff}40%{background-color:var(--danger-color)}60%{background-color:var(--danger-color)}to{background-color:#fff}}._spinning_g845f_60{width:40px;height:40px;padding:5px;display:block;margin:auto;color:var(--brand-primary-color);animation:_spin_g845f_60 1.2s linear infinite}@keyframes _spin_g845f_60{to{transform:rotate(360deg)}}._quickReplies_83npe_1{display:flex;flex-flow:row wrap;justify-content:flex-end;padding:.4rem 1rem;gap:.5rem}._quickReply_83npe_9{font-size:.8rem;background-color:var(--brand-secondary-color);color:var(--brand-primary-color);border:1px solid var(--brand-primary-color)}._quickReply_83npe_9:active,._quickReply_83npe_9:focus,._quickReply_83npe_9:hover{background-color:var(--brand-primary-color);color:var(--brand-secondary-color);border:1px solid var(--brand-secondary-color);outline:none}._header_1hky6_1{display:flex;justify-content:space-between;align-items:center;height:var(--header-height);background-color:var( --header-background-color, var(--brand-primary-color, white) )}._logoContainer_1hky6_13{height:inherit;flex:1;padding:var(--header-logo-padding)}._logo_1hky6_13{height:100%;background-image:var(--header-logo-url);background-repeat:no-repeat;background-size:contain;background-position:left center}._actions_1hky6_27{display:flex;align-items:center;padding:var(--header-icons-padding);color:var(--header-icon-color, white)}._actions_1hky6_27 button{background-color:transparent;color:inherit;border:none;cursor:pointer;border-radius:50%;padding:calc(var(--header-icon-size) / 3);margin:0}._actions_1hky6_27 button:hover{background-color:rgb(from var(--header-icon-color, white) r g b / 20%)}._actions_1hky6_27 button svg{width:var(--header-icon-size);height:var(--header-icon-size);display:block}@media screen and (min-width: 1024px){._header_1hky6_1{background-color:transparent;border-top-left-radius:0;border-top-right-radius:0}._actions_1hky6_27 button{font-size:2rem}._actions_1hky6_27 button:hover{background-color:var(--brand-primary-color);color:#fff}}._chatwindow_6v6ob_1{display:flex;flex-direction:column;position:relative;width:100%;height:100vh;height:100svh;overflow:hidden}._chatwindow_6v6ob_1 main{flex:1;overflow:hidden}._chatwindow_6v6ob_1 aside{display:none}@media screen and (min-width: 1024px){._chatwindow_6v6ob_1{justify-content:center}._chatwindow_6v6ob_1 header{padding-inline:2rem;grid-area:header}._chatwindow_6v6ob_1 main{grid-area:header;flex:none;overflow:hidden}._chatwindow_6v6ob_1 header,._chatwindow_6v6ob_1 main{display:block;max-width:50em;width:100%;margin-left:auto;margin-right:auto}._chatwindowWithAside_6v6ob_46{display:grid;grid-template-columns:2fr 1fr;grid-template-rows:auto 1fr;grid-column-gap:6rem;grid-template-areas:"header aside" "main aside"}._chatwindowWithAside_6v6ob_46 header{grid-area:header;display:block;margin-right:unset;padding:1rem 2rem}._chatwindowWithAside_6v6ob_46 main{grid-area:main;flex:1;margin-right:unset;padding:0 2rem 1rem}._chatwindowWithAside_6v6ob_46 aside{grid-area:aside;overflow:hidden;display:block;container-type:inline-size}}.chat__cms-integration header{display:none}._sourceInfos_1878a_1{margin-left:1rem;height:100%;max-width:35rem;background-color:#fff;box-shadow:#00000059 0 5px 15px;display:flex;flex-direction:column}._sourceInfos_1878a_1 svg{display:block}._sourceDetails_1878a_16{padding:2rem;display:flex;flex-direction:column;gap:1rem}._sourceHeader_1878a_23{display:flex;align-items:center;justify-content:space-between;gap:.5rem}._sourceHeader_1878a_23 h1{margin:0;overflow-wrap:break-word;word-break:break-all;font-size:1.25rem;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}._sourceHeaderIcon_1878a_43{font-size:2rem}._openSourceButton_1878a_47{margin:2rem;display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:1rem;text-decoration:none}._openSourceButton_1878a_47 p{font-size:1rem;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}._openSourceButton_1878a_47 svg{font-size:1.5rem}._closeSourceInfosButton_1878a_70{background-color:transparent;border:none;cursor:pointer;font-size:1.5rem;margin:0;padding:.25rem;border-radius:50%}._closeSourceInfosButton_1878a_70:hover{background-color:var(--brand-primary-color);color:#fff}._sourceContent_1878a_85{flex:1;padding:0 2rem;line-height:1.5;overflow-y:auto;overflow-wrap:break-word}@container (min-width: 30rem){._sourceInfos_1878a_1{margin:2rem;height:calc(100% - 4rem)}}@keyframes _rotate_1878a_1{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._loadingSourceInfos_1878a_109{display:flex;align-items:center;justify-content:center;font-size:5rem;margin-top:7rem;color:var(--color-gray-700)}._loading_1878a_109{animation:_rotate_1878a_1 2s linear infinite;transform-origin:center}._loadingError_1878a_123{padding-inline:2rem;display:flex;flex-direction:column;gap:2rem}._loadingError_1878a_123 h1,._loadingError_1878a_123 p{text-align:center}._loadingError_1878a_123 img{width:100%}._container_114wy_1{display:flex;flex-direction:column;height:100%}._body_114wy_7{padding:1rem;overflow-y:auto;flex:1;color:var(--text-primary-color)}._intro_114wy_14{margin-bottom:1em}._intro_114wy_14 h1{font-size:1.3em}._intro_114wy_14 h2{font-size:1em}._intro_114wy_14 p{line-height:1.4}._intro_114wy_14 ul{padding-left:1em}._intro_114wy_14 li{padding-top:.3em;padding-bottom:.3em;line-height:1.4}._footer_114wy_39{padding:1rem}._footnote_114wy_43{margin-top:.75rem;text-align:center;font-size:.8em;color:var(--text-secondary-color)}@media screen and (min-width: 1024px){._container_114wy_1{justify-content:center;background:#fff;border-radius:20px;padding:2rem}._containerWithFootnote_114wy_58{padding-bottom:1rem}._body_114wy_7{max-height:60vh;padding:0 0 1rem;margin-bottom:1rem}._footer_114wy_39{padding:0}}._startChatButton_114wy_73{width:100%}._formFields_114wy_77{display:flex;flex-direction:column;gap:.75em}._formField_114wy_77{display:flex;flex-direction:column;gap:8px}._radio_114wy_89{display:flex;align-items:flex-start;gap:6px;accent-color:var(--brand-primary-color)}._checkbox_114wy_96{display:flex;align-items:flex-start;gap:6px;padding:6px 0;accent-color:var(--brand-primary-color)}._input_114wy_104 input{border-width:1px;border-style:solid;border-color:#d9d9d9;box-sizing:border-box;margin:0;padding:4px 11px;color:#000000e0;font-size:1em;line-height:1.57;list-style:none;font-family:inherit;position:relative;display:inline-block;width:100%;min-width:0;border-radius:6px;transition:all .2s;accent-color:var(--brand-primary-color)}._input_114wy_104 input:focus,._input_114wy_104 input:focus-within{border-color:var(--brand-primary-color);box-shadow:0 0 0 2px #0591ff1a;outline:0;background-color:#fff}._input_114wy_104 input:hover{border-color:var(--brand-primary-color)}._inputLabel_114wy_138{margin-bottom:8px}._selectWrapper_114wy_142{position:relative}._selectWrapper_114wy_142:after{content:"⌄";font-size:1rem;top:2px;right:14px;position:absolute}._select_114wy_142 select{border-width:1px;border-style:solid;border-color:#d9d9d9;box-sizing:border-box;margin:0;padding:4px 11px;color:#000000e0;font-size:1em;line-height:1.57;list-style:none;font-family:inherit;position:relative;display:inline-block;width:100%;min-width:0;border-radius:6px;transition:all .2s;accent-color:var(--brand-primary-color);-webkit-appearance:none;-moz-appearance:none;appearance:none}._select_114wy_142 select:focus,._select_114wy_142 select:focus-within{border-color:var(--brand-primary-color);box-shadow:0 0 0 2px #0591ff1a;outline:0;background-color:#fff}._select_114wy_142 select:hover{border-color:var(--brand-primary-color)}._selectLabel_114wy_188{margin-bottom:8px}:root{--aspect-ratio: calc(16 / 9);--color-gray-100: #e9eff6;--color-gray-200: #d6d6d6;--color-gray-300: #bfbfbf;--color-gray-400: #999999;--color-gray-500: #707070;--color-gray-600: #565656;--color-gray-700: #434343;--color-gray-800: #2e2e2e;--color-gray-900: #1a1a1a;--body-background-color: white;--brand-primary-color: rgb(4, 47, 97);--brand-secondary-color: white;--text-primary-color: var(--color-gray-800);--text-secondary-color: var(--color-gray-500);--text-link-color: var(--text-primary-color);--text-link-color-hover: var(--brand-primary-color);--danger-color: #b11106;--scrollbar-thumb-color: var(--color-gray-200);--header-height: 4em;--header-icon-size: 1.5rem;--header-icons-padding: 1rem .75rem;--header-icon-color: white;--header-logo-padding: 1em;--header-logo-url: url(../logo.svg);--avatar-size: 2rem;--avatar-radius: 50%;--bot-avatar-background-color: var(--color-gray-100);--agent-avatar-background-color: var(--color-gray-100);--bubble-padding: .9em 1.3em;--bubble-margin-small: 3px;--bubble-margin-large: 1.2rem;--bubble-radius-large: 20px;--bubble-radius-small: 4px;--bot-bubble-background-color: white;--bot-bubble-text-color: var(--text-primary-color);--bot-bubble-border-color: var(--color-gray-700);--bot-bubble-border-width: 2px;--bot-bubble-top-left-radius: var(--bubble-radius-small);--bot-bubble-top-right-radius: var(--bubble-radius-large);--bot-bubble-bottom-right-radius: var(--bubble-radius-large);--bot-bubble-bottom-left-radius: var(--bubble-radius-small);--bot-bubble-source-background-color: var(--body-background-color);--bot-bubble-source-text-color: var(--bot-bubble-text-color);--guest-bubble-background-color: var(--brand-primary-color);--guest-bubble-text-color: white;--guest-bubble-border-color: white;--guest-bubble-border-width: 0px;--guest-bubble-top-left-radius: var(--bubble-radius-large);--guest-bubble-top-right-radius: var(--bubble-radius-small);--guest-bubble-bottom-right-radius: var(--bubble-radius-small);--guest-bubble-bottom-left-radius: var(--bubble-radius-large)}.chat__large{--header-icon-color: var(--color-gray-800);--header-logo-padding: 0 1em 0 0}[data-title]{--tooltip-min-width: 120px;--tooltip-max-width: min(400px, 80vw);--tooltip-tick-position-top: -10px;--tooltip-tick-position-bottom: unset;--tooltip-position-top: -42px;--tooltip-position-bottom: auto;--tooltip-position-left: auto;--tooltip-position-right: -.5em;--tooltip-border-color: #1f1f1f;--tooltip-border-color-top: var(--tooltip-border-color);--tooltip-border-color-bottom: transparent;position:relative;opacity:1}[data-title]:before{content:"";position:absolute;top:var(--tooltip-tick-position-top);bottom:var(--tooltip-tick-position-bottom);right:35%;border:6px solid transparent;border-top-color:var(--tooltip-border-color-top);border-bottom-color:var(--tooltip-border-color-bottom);z-index:999999;visibility:hidden}[data-title]:after{content:attr(data-title);position:absolute;top:var(--tooltip-position-top);bottom:var(--tooltip-position-bottom);right:var(--tooltip-position-right);left:var(--tooltip-position-left);font-size:14px;line-height:16px;padding:8px 10px;font-family:inherit;white-space:nowrap;border-radius:5px;background-color:#1f1f1f;color:#fafafa;box-shadow:1px 6px 16px #1f1f1f;z-index:99999;visibility:hidden}[data-title]:hover:before,[data-title]:hover:after{opacity:1;transition:all .1s ease .5s;visibility:visible}.tooltip--top-right[data-title]{--tooltip-position-left: -1em;--tooltip-position-right: auto}.tooltip--top-center[data-title]{--tooltip-position-top: auto;--tooltip-position-bottom: calc(100% + 1rem) ;--tooltip-tick-position-top: auto;--tooltip-tick-position-bottom: calc(100% + 4px) }.tooltip--top-center[data-title]:after{left:50%;transform:translate(-50%);min-width:var(--tooltip-min-width);max-width:var(--tooltip-max-width);width:max-content;white-space:normal;word-break:break-word;text-align:center;bottom:var(--tooltip-position-bottom);top:var(--tooltip-position-top)}.tooltip--bottom-left[data-title]{--tooltip-position-top: auto;--tooltip-position-bottom: -3em;--tooltip-tick-position-top: unset;--tooltip-tick-position-bottom: -10px;--tooltip-border-color-top: transparent;--tooltip-border-color-bottom: var(--tooltip-border-color)}::-webkit-scrollbar{width:8px;border:none}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-color)}*{box-sizing:border-box}body{margin:0}input::placeholder,textarea::placeholder{color:#666;opacity:1}svg{fill:currentColor}