@subiz/widget-v4 4.1.210 → 4.1.212

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.
Files changed (130) hide show
  1. package/README.md +21 -2
  2. package/assets/img/dot_chat.svg +3 -0
  3. package/assets/less/chatbox.less +9 -0
  4. package/assets/less/form.less +10 -0
  5. package/assets/less/message.less +114 -13
  6. package/assets/less/widget.less +15 -18
  7. package/compiled_src/call/css.js +1 -1
  8. package/compiled_src/chatbox/Buttons.js +7 -4
  9. package/compiled_src/chatbox/ChatButton.js +127 -29
  10. package/compiled_src/chatbox/Event.js +37 -5
  11. package/compiled_src/chatbox/Events.js +348 -129
  12. package/compiled_src/chatbox/FormAttachment.js +1 -1
  13. package/compiled_src/chatbox/Header.js +7 -2
  14. package/compiled_src/chatbox/InfoMessage.js +1 -1
  15. package/compiled_src/chatbox/MessageInput.js +24 -9
  16. package/compiled_src/chatbox/OrderAttachments.js +13 -13
  17. package/compiled_src/chatbox/QuoteMessage.js +3 -2
  18. package/compiled_src/chatbox/TextMessage.js +22 -18
  19. package/compiled_src/chatbox/Widget.js +200 -129
  20. package/compiled_src/chatbox/block.js +39 -29
  21. package/compiled_src/chatbox/conversation-history.js +44 -0
  22. package/compiled_src/chatbox/event-layout.js +59 -0
  23. package/compiled_src/chatbox/greeting.js +32 -0
  24. package/compiled_src/chatbox/main.js +3 -0
  25. package/compiled_src/common.js +13 -9
  26. package/compiled_src/form/css.js +1 -1
  27. package/compiled_src/lib.js +22 -32
  28. package/compiled_src/notif/css.js +1 -1
  29. package/compiled_src/plugin.js +11 -18
  30. package/compiled_src/popup/css.js +1 -1
  31. package/compiled_src/popup/popup.js +1 -1
  32. package/compiled_src/store/api.js +0 -2
  33. package/compiled_src/store/api_fake.js +1 -1
  34. package/compiled_src/store/attachments.js +28 -0
  35. package/compiled_src/store/chain.js +24 -10
  36. package/compiled_src/store/kv.js +9 -13
  37. package/compiled_src/store/lsdb.js +1 -1
  38. package/compiled_src/store/store.js +356 -117
  39. package/compiled_src/util/common.js +48 -41
  40. package/compiled_src/util/event.js +15 -0
  41. package/compiled_src/util/pubsub.js +28 -13
  42. package/compiled_src/util/url.js +18 -0
  43. package/dist/127.js +13 -13
  44. package/dist/132.js +1 -1
  45. package/dist/1a0f6f3ff1a.127.js +1 -0
  46. package/dist/{1a0d80f6e72.132.js → 1a0f6f3ff1a.132.js} +1 -1
  47. package/dist/{1a0d80f6e72.27.js → 1a0f6f3ff1a.27.js} +1 -1
  48. package/dist/1a0f6f3ff1a.278.js +1 -0
  49. package/dist/{1a0d80f6e72.339.js → 1a0f6f3ff1a.339.js} +1 -1
  50. package/dist/1a0f6f3ff1a.459.js +1 -0
  51. package/dist/1a0f6f3ff1a.app.js +1 -0
  52. package/dist/{1a0d80f6e72.chat.html → 1a0f6f3ff1a.chat.html} +1 -1
  53. package/dist/1a0f6f3ff1a.chat.js +1 -0
  54. package/dist/{1a0d80f6e72.form.html → 1a0f6f3ff1a.form.html} +1 -1
  55. package/dist/1a0f6f3ff1a.form.js +1 -0
  56. package/dist/{1a0d80f6e72.index.html → 1a0f6f3ff1a.index.html} +1 -1
  57. package/dist/{1a0d80f6e72.library.html → 1a0f6f3ff1a.library.html} +1 -1
  58. package/dist/1a0f6f3ff1a.library.js +1 -0
  59. package/dist/{1a0d80f6e72.preview.html → 1a0f6f3ff1a.preview.html} +1 -1
  60. package/dist/1a0f6f3ff1a.preview.js +1 -0
  61. package/dist/1a0f6f3ff1a.webview.js +1 -0
  62. package/dist/27.js +2 -2
  63. package/dist/459.js +2 -2
  64. package/dist/HASH +1 -1
  65. package/dist/assets/img/dot_chat.335fd8a.svg +3 -0
  66. package/dist/screenshoot.js +1523 -619
  67. package/package.json +12 -5
  68. package/src/chatbox/Buttons.js +5 -4
  69. package/src/chatbox/ChatButton.js +133 -39
  70. package/src/chatbox/Event.js +38 -5
  71. package/src/chatbox/Events.js +306 -134
  72. package/src/chatbox/FormAttachment.js +1 -1
  73. package/src/chatbox/Header.js +5 -4
  74. package/src/chatbox/InfoMessage.js +1 -1
  75. package/src/chatbox/MessageInput.js +15 -10
  76. package/src/chatbox/OrderAttachments.js +13 -13
  77. package/src/chatbox/QuoteMessage.js +3 -2
  78. package/src/chatbox/TextMessage.js +21 -20
  79. package/src/chatbox/Widget.js +150 -150
  80. package/src/chatbox/block.js +29 -27
  81. package/src/chatbox/conversation-history.js +37 -0
  82. package/src/chatbox/event-layout.js +72 -0
  83. package/src/chatbox/greeting.js +13 -0
  84. package/src/chatbox/main.js +3 -0
  85. package/src/common.js +15 -9
  86. package/src/lib.js +22 -35
  87. package/src/plugin.js +11 -13
  88. package/src/popup/popup.js +1 -1
  89. package/src/store/api.js +0 -2
  90. package/src/store/api_fake.js +1 -1
  91. package/src/store/attachments.js +21 -0
  92. package/src/store/chain.js +25 -12
  93. package/src/store/kv.js +10 -19
  94. package/src/store/lsdb.js +1 -1
  95. package/src/store/store.js +313 -130
  96. package/src/util/common.js +48 -43
  97. package/src/util/event.js +7 -0
  98. package/src/util/pubsub.js +27 -8
  99. package/src/util/url.js +14 -0
  100. package/test.cjs +59 -0
  101. package/assets/less/contact.less +0 -126
  102. package/compiled_src/util/common.test.js +0 -414
  103. package/compiled_src/util/event.test.js +0 -38
  104. package/compiled_src/util/extractor.test.js +0 -299
  105. package/compiled_src/util/extractor.test2.js +0 -61
  106. package/compiled_src/util/gate.test.js +0 -18
  107. package/compiled_src/util/pubsub.test.js +0 -35
  108. package/dist/1a0d80f6e72.127.js +0 -1
  109. package/dist/1a0d80f6e72.278.js +0 -1
  110. package/dist/1a0d80f6e72.459.js +0 -1
  111. package/dist/1a0d80f6e72.74.js +0 -1
  112. package/dist/1a0d80f6e72.997.js +0 -1
  113. package/dist/1a0d80f6e72.app.js +0 -1
  114. package/dist/1a0d80f6e72.chat.js +0 -1
  115. package/dist/1a0d80f6e72.form.js +0 -1
  116. package/dist/1a0d80f6e72.library.js +0 -1
  117. package/dist/1a0d80f6e72.preview.js +0 -1
  118. package/dist/1a0d80f6e72.webview.js +0 -1
  119. package/dist/74.js +0 -376
  120. package/dist/997.js +0 -37
  121. package/src/contact/contact.js +0 -400
  122. package/src/contact/css.js +0 -1
  123. package/src/util/common.test.js +0 -301
  124. package/src/util/event.test.js +0 -31
  125. package/src/util/extractor.test.js +0 -240
  126. package/src/util/extractor.test2.js +0 -56
  127. package/src/util/gate.test.js +0 -20
  128. package/src/util/pubsub.test.js +0 -37
  129. /package/dist/{1a0d80f6e72.185.js → 1a0f6f3ff1a.185.js} +0 -0
  130. /package/dist/{1a0d80f6e72.490.js → 1a0f6f3ff1a.490.js} +0 -0
@@ -1054,6 +1054,8 @@ class Emoji extends _common_js__WEBPACK_IMPORTED_MODULE_1__/* .Com */ .Mw {
1054
1054
  /* harmony import */ var _Emoji_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2959);
1055
1055
  /* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2840);
1056
1056
  /* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(172);
1057
+ /* harmony import */ var _util_url_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4339);
1058
+
1057
1059
 
1058
1060
 
1059
1061
 
@@ -1093,9 +1095,8 @@ class Block extends _common_js__WEBPACK_IMPORTED_MODULE_2__/* .Com */ .Mw {
1093
1095
  ele.tag = 'li';
1094
1096
  }
1095
1097
  if (block.type == 'heading') {
1096
- if (block.level < 1) block.level = 1;
1097
- if (block.level > 6) block.level = 6;
1098
- ele.tag = 'h' + block.level;
1098
+ let level = Math.max(1, Math.min(6, Math.floor(Number(block.level) || 1)));
1099
+ ele.tag = 'h' + level;
1099
1100
  }
1100
1101
  if (block.type == 'paragraph' || block.type == 'section' || block.type == 'div') ele.tag = 'div';
1101
1102
  ele.text = block.text;
@@ -1109,8 +1110,10 @@ class Block extends _common_js__WEBPACK_IMPORTED_MODULE_2__/* .Com */ .Mw {
1109
1110
  ele.tag = 'em';
1110
1111
  }
1111
1112
  }
1112
- if (block.underline) ele.Style += 'text-decoration:underline;';
1113
- if (block.strike_through) ele.Style += 'text-decoration: line-through;';
1113
+ let decorations = [];
1114
+ if (block.underline) decorations.push('underline');
1115
+ if (block.strike_through) decorations.push('line-through');
1116
+ if (decorations.length) ele.style += 'text-decoration: ' + decorations.join(' ') + ' !important;';
1114
1117
  }
1115
1118
  if (block.type == 'dynamic-field') {
1116
1119
  let key = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(block.attrs, 'key');
@@ -1118,20 +1121,20 @@ class Block extends _common_js__WEBPACK_IMPORTED_MODULE_2__/* .Com */ .Mw {
1118
1121
  }
1119
1122
  if (block.type == 'link') {
1120
1123
  ele.tag = 'a';
1121
- ele.attrs['href'] = block.href;
1124
+ ele.attrs['href'] = (0,_util_url_js__WEBPACK_IMPORTED_MODULE_4__/* .safeUrl */ .P)(block.href);
1122
1125
  ele.attrs['target'] = block.target;
1123
1126
  ele.attrs['title'] = block.title;
1124
1127
  }
1125
1128
  if (block.type == 'mention-agent' || block.type == 'mention') {
1126
1129
  ele.tag = 'span';
1127
1130
  ele.class = 'mention';
1128
- let id = block.attrs.id = '';
1129
- if (block.attrs.id == '*' || block.attrs.id == 'all') {
1130
- ele.text = '@' + this.$t('all');
1131
+ let id = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(block, 'attrs.id', '');
1132
+ if (id == '*' || id == 'all') {
1133
+ ele.text = '@' + (this.props.t ? this.props.t('all') : 'all');
1131
1134
  }
1132
- if (id.startsWith('ag')) {
1133
- let ag = store.matchAgent(id);
1134
- let name = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.getAgentDisplayName(ag, insert.mention.fullname);
1135
+ if (typeof id === 'string' && /^(ag|at)/.test(id) && this.props.store) {
1136
+ let ag = this.props.store.matchAgent(id);
1137
+ let name = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.getAgentDisplayName(this.props.store.matchAccount(), ag);
1135
1138
  ele.text = '@' + name;
1136
1139
  }
1137
1140
  }
@@ -1139,18 +1142,15 @@ class Block extends _common_js__WEBPACK_IMPORTED_MODULE_2__/* .Com */ .Mw {
1139
1142
  if (block.type == 'emoji') {
1140
1143
  let code = '';
1141
1144
  if (_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.size(block.attrs) > 0) code = block.attrs['code'];
1142
- if (code == '') code = block.Text;
1145
+ if (!code) code = block.text || block.Text;
1143
1146
  if (code != '') {
1144
1147
  ele.tag = 'Emoji';
1145
1148
  ele.attrs['emojiCode'] = code;
1146
1149
  }
1147
1150
  }
1148
- if (block.type == 'table') {
1149
- return null;
1150
- }
1151
1151
  if (block.type === 'image') {
1152
1152
  ele.tag = 'img';
1153
- ele.attrs['src'] = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(block, 'image.url');
1153
+ ele.attrs['src'] = (0,_util_url_js__WEBPACK_IMPORTED_MODULE_4__/* .safeUrl */ .P)(_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(block, 'image.url'), true);
1154
1154
  ele.attrs['alt'] = block.alt_text;
1155
1155
  }
1156
1156
  if (block.type == 'hard_break') {
@@ -1167,10 +1167,13 @@ class Block extends _common_js__WEBPACK_IMPORTED_MODULE_2__/* .Com */ .Mw {
1167
1167
  if (!url.startsWith('//') && !url.startsWith('https://') && !url.startsWith('http://') && !url.startsWith('data:')) {
1168
1168
  url = '//' + url;
1169
1169
  }
1170
+ url = (0,_util_url_js__WEBPACK_IMPORTED_MODULE_4__/* .safeUrl */ .P)(url);
1171
+ if (!url) return tag.text;
1170
1172
  return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("a", {
1171
1173
  href: url,
1172
1174
  target: "_blank",
1173
- onClick: e => this.props.onLink(e, url)
1175
+ rel: "noopener noreferrer",
1176
+ onClick: e => this.props.onLink && this.props.onLink(e, url)
1174
1177
  }, tag.text);
1175
1178
  }
1176
1179
  if (tag.type === 'phone') return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("a", {
@@ -1187,10 +1190,12 @@ class Block extends _common_js__WEBPACK_IMPORTED_MODULE_2__/* .Com */ .Mw {
1187
1190
  }
1188
1191
  switch (ele.tag) {
1189
1192
  case 'img':
1193
+ if (!ele.attrs.src) return block.alt_text || null;
1190
1194
  return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("a", {
1191
1195
  class: this.props.textMessage ? 'message-text-inline-image-wrapper' : '',
1192
1196
  href: _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(ele, 'attrs.src'),
1193
- target: "_blank"
1197
+ target: "_blank",
1198
+ rel: "noopener noreferrer"
1194
1199
  }, (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("img", {
1195
1200
  class: this.props.textMessage ? 'message-text-inline-image' : '',
1196
1201
  src: _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(ele, 'attrs.src'),
@@ -1231,37 +1236,43 @@ class Block extends _common_js__WEBPACK_IMPORTED_MODULE_2__/* .Com */ .Mw {
1231
1236
  class: this.props.textMessage ? 'text-message-li' : ''
1232
1237
  }, $body);
1233
1238
  case 'span':
1234
- return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("span", null, $body);
1239
+ return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("span", {
1240
+ class: ele.class,
1241
+ style: ele.style
1242
+ }, $body);
1235
1243
  case 'em':
1236
- return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("em", null, $body);
1244
+ return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("em", {
1245
+ style: ele.style
1246
+ }, $body);
1237
1247
  case 'b':
1238
- return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("b", null, $body);
1248
+ return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("b", {
1249
+ style: ele.style
1250
+ }, $body);
1239
1251
  case 'hr':
1240
1252
  return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("hr", null);
1241
1253
  case 'br':
1242
1254
  return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("br", null);
1243
1255
  case 'a':
1256
+ if (!ele.attrs.href) return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("span", null, $body);
1244
1257
  return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("a", {
1245
1258
  class: this.props.textMessage ? 'message-text-link' : '',
1246
1259
  href: ele.attrs['href'],
1247
1260
  target: this.props.textMessage ? '_blank' : ele.attrs['target'],
1248
- title: ele.attrs['title']
1261
+ title: ele.attrs['title'],
1262
+ rel: "noopener noreferrer",
1263
+ onClick: e => this.props.onLink && this.props.onLink(e, ele.attrs.href)
1249
1264
  }, $body);
1250
1265
  case 'Emoji':
1251
1266
  return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)(_Emoji_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, {
1252
1267
  emojiCode: ele.attrs['emojiCode']
1253
1268
  });
1254
1269
  }
1255
- return null;
1270
+ return $body;
1256
1271
  }
1257
1272
  render() {
1258
1273
  return this.renderBlock(this.props.block);
1259
1274
  }
1260
1275
  }
1261
- function absLink(url) {
1262
- if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('//')) return 'http://' + url;
1263
- return url;
1264
- }
1265
1276
 
1266
1277
  /***/ },
1267
1278
 
@@ -1270,7 +1281,7 @@ function absLink(url) {
1270
1281
 
1271
1282
  "use strict";
1272
1283
  __webpack_require__.r(__webpack_exports__);
1273
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__webpack_require__(8113));
1284
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__webpack_require__(1775));
1274
1285
  /* harmony export */ __webpack_require__.d(__webpack_exports__, [
1275
1286
  /* harmony export */ "default", 0, __WEBPACK_DEFAULT_EXPORT__
1276
1287
  /* harmony export */ ]);
@@ -1548,15 +1559,19 @@ class Com extends preact__WEBPACK_IMPORTED_MODULE_0__/* .Component */ .uA {
1548
1559
  constructor(props) {
1549
1560
  super(props);
1550
1561
  this._isMounted = true;
1551
- _util_index_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.setTimeout(() => {
1552
- if (this.componentWillUnmount) {
1553
- let old = this.componentWillUnmount.bind(this);
1554
- this.componentWillUnmount = () => {
1555
- old();
1556
- this._isMounted = false;
1557
- };
1558
- }
1559
- }, 10);
1562
+ this._subscriptions = new Set();
1563
+ const onUnmount = this.componentWillUnmount;
1564
+ this.componentWillUnmount = () => {
1565
+ if (!this._isMounted) return;
1566
+ this._isMounted = false;
1567
+ for (const unsubscribe of this._subscriptions) unsubscribe();
1568
+ this._subscriptions.clear();
1569
+ if (onUnmount) onUnmount.call(this);
1570
+ };
1571
+ }
1572
+ onDispose(cleanup) {
1573
+ if (this._isMounted) this._subscriptions.add(cleanup);else cleanup();
1574
+ return () => this._subscriptions.delete(cleanup);
1560
1575
  }
1561
1576
  }
1562
1577
  class Clickaway extends Com {
@@ -1920,7 +1935,16 @@ function pipeExtracts(text, extractors) {
1920
1935
  return out;
1921
1936
  }
1922
1937
  function extractText(text) {
1923
- var link = extractLinks;
1938
+ var link = value => {
1939
+ const emails = extractEmails(value);
1940
+ return extractLinks(value).map(span => {
1941
+ const matched = value.substr(span.index, span.length);
1942
+ return {
1943
+ ...span,
1944
+ length: matched.replace(/[.,;!?]+$/, '').length
1945
+ };
1946
+ }).filter(span => !emails.some(email => span.index >= email.index && span.index + span.length <= email.index + email.length));
1947
+ };
1924
1948
  link.type = 'link';
1925
1949
  var email = extractEmails;
1926
1950
  email.type = 'email';
@@ -2192,8 +2216,14 @@ function orderByF(a, f, d) {
2192
2216
  return clone;
2193
2217
  }
2194
2218
  function isPhone(phone) {
2195
- var re = /^[\+]?[(]?[0-9]{2,3}[)]?[-\s\.]?[0-9]{3,4}[-\s\.]?[0-9]{4,6}$/im;
2196
- return re.test(String(phone));
2219
+ if (typeof phone !== 'string' && typeof phone !== 'number') return false;
2220
+ const value = String(phone).trim();
2221
+ const ungrouped = value.replace(/\((\d+)\)/g, '$1');
2222
+ if (!/^\+?\d+(?:[ .-]\d+)*$/.test(ungrouped)) return false;
2223
+ const digits = value.replace(/\D/g, '');
2224
+ if (digits.length < 7 || digits.length > 15 || /^(\d)\1+$/.test(digits)) return false;
2225
+ if (value.startsWith('+') && digits.startsWith('0')) return false;
2226
+ return true;
2197
2227
  }
2198
2228
  function isURL(url) {
2199
2229
  var re = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/gi;
@@ -2204,8 +2234,17 @@ function isNumber(num) {
2204
2234
  return re.test(String(num));
2205
2235
  }
2206
2236
  function isEmail(email) {
2237
+ if (typeof email !== 'string') return false;
2238
+ const value = email.trim();
2239
+ if (value.length > 254) return false;
2240
+ const at = value.lastIndexOf('@');
2241
+ const local = value.slice(0, at);
2242
+ const domain = value.slice(at + 1);
2243
+ if (!local || local.length > 64) return false;
2244
+ if (!local.startsWith('"') && (local.startsWith('.') || local.endsWith('.') || local.includes('..'))) return false;
2245
+ if (!domain.startsWith('[') && domain.split('.').some(label => label.length > 63 || !/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(label))) return false;
2207
2246
  const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
2208
- return re.test(String(email).toLowerCase());
2247
+ return re.test(value.toLowerCase());
2209
2248
  }
2210
2249
  function last(array) {
2211
2250
  var length = array == null ? 0 : array.length;
@@ -2474,7 +2513,7 @@ function js2css(js, onlyprops, variables) {
2474
2513
  return style;
2475
2514
  }
2476
2515
  function browserName() {
2477
- var isOpera = !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
2516
+ var isOpera = !!window.opr && !!window.opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
2478
2517
  var isFirefox = typeof InstallTrigger !== 'undefined';
2479
2518
  var isSafari = /constructor/i.test(window.HTMLElement) || function (p) {
2480
2519
  return p.toString() === '[object SafariRemoteNotification]';
@@ -2593,8 +2632,8 @@ function checkRunConditions(freq, conds, lastrun, store) {
2593
2632
  break;
2594
2633
  case 'user_is_a_contact':
2595
2634
  let attributes = op.get(store.matchUser(), 'attributes', []);
2596
- let emailAttr = find(attributes, att => att.key === 'emails' && attr.text && att.key === 'related_email' && attr.text);
2597
- let phoneAttr = find(attributes, att => att.key === 'phones' && attr.text && att.key === 'related_phone' && attr.text);
2635
+ let emailAttr = find(attributes, att => (att.key === 'emails' || att.key === 'related_email') && att.text);
2636
+ let phoneAttr = find(attributes, att => (att.key === 'phones' || att.key === 'related_phone') && att.text);
2598
2637
  let hasContact = emailAttr || phoneAttr;
2599
2638
  if (cond.user_is_a_contact) {
2600
2639
  if (!hasContact) return false;
@@ -2890,8 +2929,7 @@ function unicodeToAscii(str) {
2890
2929
  str = str.replaceAll('đ', 'd').replaceAll('Đ', 'D');
2891
2930
  return str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
2892
2931
  }
2893
- function scrollIntoViewIfNeeded($ele) {
2894
- centerIfNeeded = arguments.length === 0 ? true : !!centerIfNeeded;
2932
+ function scrollIntoViewIfNeeded($ele, centerIfNeeded = true) {
2895
2933
  var parent = $ele.parentNode;
2896
2934
  var parentComputedStyle = window.getComputedStyle(parent, null);
2897
2935
  var parentBorderTopWidth = parseInt(parentComputedStyle.getPropertyValue('border-top-width'));
@@ -2922,51 +2960,31 @@ function blockToText(block) {
2922
2960
  return _blockToText(block).trim();
2923
2961
  }
2924
2962
  function isBlockEmpty(block) {
2925
- return _isBlockEmpty(block);
2926
- }
2927
- function _isBlockEmpty(block = {}) {
2928
- if (!size(block.content)) {
2929
- if ((block.text || '').trim()) return false;
2930
- return true;
2931
- }
2932
- let result = true;
2933
- map(block.content, content => {
2934
- result = result && _isBlockEmpty(content);
2935
- });
2936
- return result;
2963
+ return isEmptyBlock(block);
2937
2964
  }
2938
2965
  function _blockToText(block) {
2939
- if (!block || !block.type) return '';
2966
+ if (!block) return '';
2940
2967
  let out = '';
2941
2968
  if (block.type == 'bullet_list' || block.type == 'ordered_list') {
2942
- map(block.content, item => {
2943
- preifx = '\n* ';
2944
- if (block.type == 'ordered_list') {
2945
- prefix = i + '\n. ';
2946
- }
2947
- out += prefix + blockToText(item).trim();
2969
+ map(block.content, (item, i) => {
2970
+ let prefix = block.type == 'ordered_list' ? '\n' + (Number(i) + 1) + '. ' : '\n* ';
2971
+ out += prefix + _blockToText(item).trim();
2948
2972
  });
2949
2973
  return out;
2950
2974
  }
2951
2975
  if (block.type == 'heading' || block.type == 'paragraph') {
2952
2976
  out += '\n';
2953
2977
  }
2954
- if (block.type == '' || block.type == 'text' || block.type == 'link' || block.type == 'mention-agent' || block.type == 'dynamic-field') {
2955
- return out + block.text;
2978
+ if (block.type == '' || block.type == 'text' || block.type == 'link' || block.type == 'mention-agent' || block.type == 'mention' || block.type == 'dynamic-field') {
2979
+ if (!size(block.content)) return out + (block.text || '');
2956
2980
  }
2957
2981
  if (block.type == 'horizontal_rule') return out + '\n---\n';
2958
2982
  if (block.type == 'emoji') {
2959
- let code;
2960
- if (size(block.attrs) > 0) code = block.attrs['code'];
2961
- if (code == '') code = block.text;
2962
- if (code != '') {
2963
- let emoji = find(LEXICAL_EMOJI_LIST, emoji => emoji.code === code);
2964
- out + op.get(emoji, 'text', code);
2965
- }
2966
- return out;
2983
+ return out + (op.get(block, 'attrs.code') || block.text || block.Text || '');
2967
2984
  }
2968
- map(block.content, block => {
2969
- out += blockToText(block);
2985
+ if (!size(block.content)) return out + (block.text || '');
2986
+ map(block.content, child => {
2987
+ out += _blockToText(child);
2970
2988
  });
2971
2989
  return out;
2972
2990
  }
@@ -2992,12 +3010,16 @@ function absLink(url) {
2992
3010
  return url;
2993
3011
  }
2994
3012
  function isEmptyBlock(block) {
2995
- if (!block || !block.type) return true;
3013
+ if (!block) return true;
3014
+ if (block.type === 'image' && op.get(block, 'image.url')) return false;
3015
+ if (block.type === 'emoji' && (op.get(block, 'attrs.code') || block.Text)) return false;
3016
+ if (block.type === 'horizontal_rule') return false;
2996
3017
  let hasContent = size(filter(map(block.content, block => isEmptyBlock(block)), isEmpty => !isEmpty)) > 0;
2997
3018
  return !trim(block.text) && !hasContent;
2998
3019
  }
2999
3020
  function isEmptyMessage(msg) {
3000
3021
  if (!msg) return true;
3022
+ if (msg.deleted) return false;
3001
3023
  if (!msg.text && isEmptyBlock(msg.block) && isEmptyAttachment(msg)) return true;
3002
3024
  return false;
3003
3025
  }
@@ -3268,26 +3290,41 @@ var pubsub_namespaceFn = /*#__PURE__*/__webpack_require__.cw(function(module, __
3268
3290
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3269
3291
  /* harmony export */ A: () => (/* binding */ Pubsub)
3270
3292
  /* harmony export */ });
3271
- var {
3272
- filter,
3273
- map
3274
- } = (common_namespaceFn());
3275
3293
  class Pubsub {
3276
3294
  constructor() {
3277
3295
  this.listeners = {};
3278
3296
  }
3279
- publish(topic, payload, payload2, payload3) {
3280
- this.listeners[topic] = filter(this.listeners[topic], sub => sub.obj._isMounted);
3281
- map(this.listeners[topic], ({
3282
- cb
3283
- }) => cb(payload, payload2, payload3));
3297
+ publish(topic, ...payload) {
3298
+ const subscriptions = (this.listeners[topic] || []).slice();
3299
+ for (const subscription of subscriptions) {
3300
+ if (!subscription.obj._isMounted) subscription.unsubscribe();
3301
+ if (subscription.active) subscription.cb(...payload);
3302
+ }
3284
3303
  }
3285
3304
  on2(obj, topic, cb) {
3286
- if (!this.listeners[topic]) this.listeners[topic] = [];
3287
- this.listeners[topic].push({
3305
+ const subscription = {
3288
3306
  obj,
3289
- cb
3290
- });
3307
+ cb,
3308
+ active: true
3309
+ };
3310
+ let release = () => {};
3311
+ const unsubscribe = () => {
3312
+ if (!subscription.active) return;
3313
+ subscription.active = false;
3314
+ this.listeners[topic] = (this.listeners[topic] || []).filter(sub => sub !== subscription);
3315
+ if (!this.listeners[topic].length) delete this.listeners[topic];
3316
+ release();
3317
+ };
3318
+ subscription.unsubscribe = unsubscribe;
3319
+ if (!this.listeners[topic]) this.listeners[topic] = [];
3320
+ this.listeners[topic].push(subscription);
3321
+ if (typeof obj.onDispose === 'function') release = obj.onDispose(unsubscribe);
3322
+ return unsubscribe;
3323
+ }
3324
+ clear() {
3325
+ for (const subscriptions of Object.values(this.listeners)) {
3326
+ for (const subscription of subscriptions.slice()) subscription.unsubscribe();
3327
+ }
3291
3328
  }
3292
3329
  }
3293
3330
  });
@@ -3402,6 +3439,28 @@ sb = Object.assign(sb, campaign_namespaceObject);
3402
3439
 
3403
3440
  /***/ },
3404
3441
 
3442
+ /***/ 4339
3443
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3444
+
3445
+ "use strict";
3446
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3447
+ /* harmony export */ P: () => (/* binding */ safeUrl)
3448
+ /* harmony export */ });
3449
+ function safeUrl(value, image = false) {
3450
+ if (typeof value !== 'string') return '';
3451
+ const url = value.trim();
3452
+ const normalized = url.replace(/[\u0000-\u0020\u007f]/g, '');
3453
+ const scheme = normalized.match(/^([a-z][a-z0-9+.-]*):/i);
3454
+ if (!scheme) return url;
3455
+ if (/^https?$/i.test(scheme[1])) return url;
3456
+ if (!image && /^(mailto|tel)$/i.test(scheme[1])) return url;
3457
+ if (image && /^blob$/i.test(scheme[1])) return url;
3458
+ if (image && /^data:image\/(png|jpe?g|gif|webp|avif);base64,/i.test(normalized)) return url;
3459
+ return '';
3460
+ }
3461
+
3462
+ /***/ },
3463
+
3405
3464
  /***/ 5672
3406
3465
  (module) {
3407
3466
 
@@ -3589,7 +3648,7 @@ sb = Object.assign(sb, campaign_namespaceObject);
3589
3648
 
3590
3649
  /***/ },
3591
3650
 
3592
- /***/ 8113
3651
+ /***/ 1775
3593
3652
  (module, __webpack_exports__, __webpack_require__) {
3594
3653
 
3595
3654
  "use strict";
@@ -3699,7 +3758,7 @@ var ___CSS_LOADER_URL_REPLACEMENT_21___ = _node_modules_css_loader_dist_runtime_
3699
3758
  var ___CSS_LOADER_URL_REPLACEMENT_22___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_1___default()((_img_emoji_messenger_sub_23_529_60_784_png__WEBPACK_IMPORTED_MODULE_24___default()));
3700
3759
  var ___CSS_LOADER_URL_REPLACEMENT_23___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_1___default()((_img_emoji_messenger_sub_23_529_58_824_png__WEBPACK_IMPORTED_MODULE_25___default()));
3701
3760
  // Module
3702
- ___CSS_LOADER_EXPORT___.push([module.id, "#sbz92 * {\n all: unset !important;\n}\n.sbz_no_scroll {\n overflow: hidden !important;\n overflow-x: hidden !important;\n overflow-y: hidden !important;\n}\n#sbz92 {\n /* Handle on hover */\n /*\n.widget-header--button-close {\n\tdisplay: flex;\n\tborder-radius: 6px;\n\tjustify-self: flex-end;\n\talign-items: center;\n\talign-self: flex-start;\n\n\tfilter: brightness(0.95);\n\t&:hover {\n\t\topacity: 1;\n\t\tfilter: brightness(1.1);\n\t\tscale: 1.1;\n\t}\n}\n*/\n /*\n[data-tooltip]::after {\n\ttext-align: center;\n\tmin-width: 60px;\n\tmax-width: 350px;\n\n\ttransform: translate3d(0, 0, 0);\n\t-webkit-backface-visibility: hidden;\n\tbackface-visibility: hidden;\n\twill-change: transform;\n\topacity: 0;\n\tpointer-events: none;\n\ttransition: opacity @tooltip-transition-duration @tooltip-transition-easing @tooltip-transition-delay;\n\tposition: absolute;\n\tbox-sizing: border-box;\n\tz-index: @z-index + 2000;\n\ttransform-origin: top;\n\twhite-space: pre-wrap;\n\twidth: 100%;\n\n\tbackground: @black;\n\tborder-radius: 5px;\n\n\t.color(@white);\n\n\tcontent: attr(data-tooltip);\n\tfont-size: @tooltip-font-size;\n\tfont-weight: @tooltip-font-weight;\n\ttext-transform: @tooltip-text-transform;\n\tpadding: 0.5em;\n\tbox-sizing: content-box;\n}\n\n[data-tooltip]:hover::after,\n[data-tooltip]:focus::after {\n\topacity: 1;\n\tpointer-events: auto;\n}\n\n// ------------------------------------------------\n// [2] Position Modifiers\n// ------------------------------------------------\n\n[data-tooltip][data-tooltip-position|='top']::after {\n\tmargin-bottom: @tooltip-margin;\n\ttransform: translate3d(-50%, -5px, 0);\n\tbottom: 100%;\n\tleft: 50%;\n}\n\n// ------------------------------------------------\n// [2.1] Top Left\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='top-left']::after {\n\ttransform: translate3d(~'calc(-100% + 16px)', -5px, 0);\n\tbottom: 100%;\n}\n\n// ------------------------------------------------\n// [2.2] Top Right\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='top-right']::after {\n\ttransform: translate3d(~'calc(0% + -16px)', -5px, 0);\n\tbottom: 100%;\n}\n\n// ------------------------------------------------\n// [2.3] Bottom\n// ------------------------------------------------\n\n[data-tooltip][data-tooltip-position|='bottom']::after,\n[data-tooltip]:not([data-tooltip-position])::after {\n\ttransform: translate3d(-50%, 0, 0);\n\tmargin-top: @tooltip-margin;\n\tleft: 50%;\n\ttop: 100%;\n}\n\n// ------------------------------------------------\n// [2.4] Bottom Left\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='bottom-left']::after {\n\ttransform: translate3d(~'calc(-100% + 16px)', 0, 0);\n}\n\n// ------------------------------------------------\n// [2.5] Bottom Right\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='bottom-right']::after {\n\ttransform: translate3d(~'calc(0% + -16px)', 0, 0);\n}\n\n// ------------------------------------------------\n// [2.6] Left\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='left']::after {\n\tbottom: auto;\n\tleft: auto;\n\tright: 100%;\n\ttop: 50%;\n\ttransform: translate3d(0, -50%, 0);\n\tmargin-right: @tooltip-margin;\n}\n\n// ------------------------------------------------\n// [2.7] Right\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='right']::after {\n\tbottom: auto;\n\tleft: 100%;\n\ttop: 50%;\n\ttransform: translate3d(0, -50%, 0);\n\tmargin-left: @tooltip-margin;\n}\n\n*/\n}\n#sbz92 *,\n#sbz92 *::before,\n#sbz92 *::after {\n box-sizing: border-box !important;\n}\n#sbz92 [tabindex='-1']:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n#sbz92 b,\n#sbz92 strong {\n font-weight: 500 !important;\n}\n#sbz92 a {\n color: #020202 !important;\n text-decoration: none !important;\n background-color: transparent !important;\n font-weight: 600 !important;\n}\n#sbz92 a:hover {\n cursor: pointer !important;\n color: #000000 !important;\n text-decoration: underline !important;\n}\n#sbz92 a:not([href]) {\n color: inherit !important;\n text-decoration: none !important;\n}\n#sbz92 a:not([href]):hover {\n color: inherit !important;\n text-decoration: none !important;\n}\n#sbz92 img {\n vertical-align: middle !important;\n border-style: none !important;\n}\n#sbz92 svg {\n overflow: hidden !important;\n vertical-align: middle !important;\n}\n#sbz92 label {\n display: inline-block !important;\n}\n#sbz92 button {\n border-radius: 0 !important;\n}\n#sbz92 button:focus {\n outline: 1px dotted !important;\n outline: 5px auto -webkit-focus-ring-color !important;\n}\n#sbz92 input,\n#sbz92 button,\n#sbz92 select,\n#sbz92 optgroup,\n#sbz92 textarea {\n margin: 0 !important;\n}\n#sbz92 button,\n#sbz92 input {\n overflow: visible !important;\n}\n#sbz92 button,\n#sbz92 select {\n text-transform: none !important;\n}\n#sbz92 select {\n word-wrap: normal !important;\n}\n#sbz92 button,\n#sbz92 [type=\"button\"],\n#sbz92 [type=\"reset\"],\n#sbz92 [type=\"submit\"] {\n -webkit-appearance: button !important;\n}\n#sbz92 button:not(:disabled),\n#sbz92 [type='button']:not(:disabled),\n#sbz92 [type='reset']:not(:disabled),\n#sbz92 [type='submit']:not(:disabled) {\n cursor: pointer !important;\n}\n#sbz92 button::-moz-focus-inner,\n#sbz92 [type='button']::-moz-focus-inner,\n#sbz92 [type='reset']::-moz-focus-inner,\n#sbz92 [type='submit']::-moz-focus-inner {\n padding: 0 !important;\n border-style: none !important;\n}\n#sbz92 input[type='radio'],\n#sbz92 input[type='checkbox'] {\n box-sizing: border-box !important;\n padding: 0 !important;\n}\n#sbz92 input[type='date'],\n#sbz92 input[type='time'],\n#sbz92 input[type='datetime-local'],\n#sbz92 input[type='month'] {\n -webkit-appearance: listbox !important;\n}\n#sbz92 textarea {\n overflow: auto !important;\n resize: vertical !important;\n}\n#sbz92 [type='number']::-webkit-inner-spin-button,\n#sbz92 [type='number']::-webkit-outer-spin-button {\n height: auto !important;\n}\n#sbz92 [hidden] {\n display: none !important;\n}\n#sbz92 ::-webkit-input-placeholder {\n /* Edge */\n color: #777 !important;\n}\n#sbz92 :-ms-input-placeholder {\n /* Internet Explorer 10-11 */\n color: #777 !important;\n}\n#sbz92 ::placeholder {\n color: #777 !important;\n}\n#sbz92 div {\n display: block !important;\n text-rendering: geometricPrecision !important;\n -webkit-font-smoothing: antialiased !important;\n -moz-osx-font-smoothing: grayscale !important;\n}\n#sbz92 ::-webkit-scrollbar {\n width: 7px !important;\n height: 7px !important;\n}\n#sbz92 ::-webkit-scrollbar-track {\n border-radius: 10px !important;\n}\n#sbz92 ::-webkit-scrollbar-thumb {\n border-radius: 10px !important;\n background: #d6d6d6 !important;\n}\n#sbz92 ::-webkit-scrollbar-thumb:hover {\n background: #aaa !important;\n}\n#sbz92 .badge {\n padding: 2px 8px !important;\n font-size: 12px !important;\n font-weight: 600 !important;\n border-radius: 6px !important;\n display: inline-flex !important;\n align-items: center !important;\n}\n#sbz92 .badge.badge--success {\n color: #28a745 !important;\n -webkit-text-fill-color: #28a745 !important;\n background: #28a74526 !important;\n}\n#sbz92 .dot {\n width: 8px !important;\n height: 8px !important;\n border-radius: 4px !important;\n flex-shrink: 0 !important;\n background: #000 !important;\n}\n#sbz92 .dot.dot--success {\n background: #28a745 !important;\n}\n#sbz92 * {\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;\n -webkit-tap-highlight-color: transparent !important;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji' !important;\n font-size: 16px !important;\n -webkit-box-sizing: border-box !important;\n -moz-box-sizing: border-box !important;\n box-sizing: border-box !important;\n margin: 0 !important;\n padding: 0 !important;\n border: 0 !important;\n vertical-align: baseline !important;\n}\n#sbz92 button:focus {\n outline: none !important;\n}\n#sbz92 img {\n overflow: hidden !important;\n flex-shrink: 0 !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n background-size: 100% 100% !important;\n -webkit-user-select: none !important;\n -khtml-user-select: none !important;\n -moz-user-select: none !important;\n -o-user-select: none !important;\n user-select: none !important;\n -webkit-user-drag: none !important;\n}\n#sbz92 .pos-relative {\n position: relative !important;\n}\n#sbz92 .flex-row {\n flex-direction: row !important;\n}\n#sbz92 .flex-column {\n flex-direction: column !important;\n}\n#sbz92 .flex-grow-1 {\n flex-grow: 1 !important;\n}\n#sbz92 .align-self-end {\n align-self: flex-end !important;\n}\n#sbz92 .align-items-end {\n align-items: flex-end !important;\n}\n#sbz92 .justify-content-center {\n justify-content: center !important;\n}\n#sbz92 .h-full {\n height: 100% !important;\n}\n#sbz92 .w-full {\n width: 100% !important;\n}\n#sbz92 .text-muted {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .text-lg {\n font-size: 18px !important;\n}\n#sbz92 .text-xl {\n font-size: 20px !important;\n}\n#sbz92 .text-sm {\n font-size: 14px !important;\n}\n#sbz92 .text-center {\n text-align: center !important;\n}\n#sbz92 .text-danger {\n color: #ea3d2f !important;\n}\n#sbz92 .text-italic {\n font-style: italic !important;\n}\n#sbz92 .d-none {\n display: none !important;\n}\n#sbz92 .d-flex {\n display: flex !important;\n}\n#sbz92 .d-inline-block {\n display: inline-block !important;\n}\n#sbz92 .ml-1 {\n margin-left: 7.5px !important;\n}\n#sbz92 .pl-2 {\n padding-left: 15px !important;\n}\n#sbz92 .pr-2 {\n padding-right: 15px !important;\n}\n#sbz92 .pb-2 {\n padding-bottom: 15px !important;\n}\n#sbz92 .mt-1 {\n margin-top: 7.5px !important;\n}\n#sbz92 .mt-2 {\n margin-top: 15px !important;\n}\n#sbz92 .ml-2 {\n margin-left: 15px !important;\n}\n#sbz92 .mr-1 {\n margin-right: 7.5px !important;\n}\n#sbz92 .mr-2 {\n margin-right: 15px !important;\n}\n#sbz92 .pt-3 {\n padding-top: 22.5px !important;\n}\n#sbz92 .pl-3 {\n padding-left: 22.5px !important;\n}\n#sbz92 .pr-3 {\n padding-right: 22.5px !important;\n}\n#sbz92 .pb-3 {\n padding-bottom: 22.5px !important;\n}\n#sbz92 .mt-3 {\n margin-top: 22.5px !important;\n}\n#sbz92 .ml-3 {\n margin-left: 22.5px !important;\n}\n#sbz92 .mr-3 {\n margin-right: 22.5px !important;\n}\n#sbz92 .mb-3 {\n margin-bottom: 22.5px !important;\n}\n#sbz92 .mb-2 {\n margin-bottom: 15px !important;\n}\n#sbz92 .mb-1 {\n margin-bottom: 7.5px !important;\n}\n#sbz92 .muted {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .i {\n font-style: italic !important;\n}\n#sbz92 .align-items-center {\n align-items: center !important;\n}\n#sbz92 .text-truncate {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .flex_1 {\n flex: 1 !important;\n flex-shrink: 0 !important;\n}\n#sbz92 .justify-content-between {\n justify-content: space-between !important;\n}\n#sbz92 .no-shrink {\n flex-shrink: 0 !important;\n}\n#sbz92 .loading {\n flex: 1 !important;\n align-items: center !important;\n justify-content: center !important;\n display: flex !important;\n flex-direction: column !important;\n background: white !important;\n}\n#sbz92 .avatar-container {\n text-align: center !important;\n}\n#sbz92 .avatar {\n position: relative !important;\n object-fit: cover !important;\n display: inline-block !important;\n}\n#sbz92 .group-avatar--primary .avatar {\n width: 40px !important;\n height: 40px !important;\n border-radius: 35px !important;\n}\n#sbz92 .group-avatar--secondary .avatar {\n position: relative !important;\n width: 35px !important;\n height: 35px !important;\n border-radius: 35px !important;\n}\n#sbz92 .avatar.avatar__account {\n width: 38px !important;\n height: 38px !important;\n border-radius: 38px !important;\n margin-right: 7.5px !important;\n}\n#sbz92 .group-avatar--primary .group-avatar--agent-middle {\n width: 50px !important;\n height: 50px !important;\n margin-left: -10px !important;\n z-index: 3 !important;\n position: relative !important;\n}\n#sbz92 .group-avatar--primary .group-avatar--agent-left {\n z-index: 2 !important;\n}\n#sbz92 .group-avatar--primary .group-avatar--agent-right {\n z-index: 2 !important;\n margin-left: -10px !important;\n}\n#sbz92 .group-avatar--secondary .group-avatar--agent-left {\n z-index: 3 !important;\n}\n#sbz92 .group-avatar--secondary .group-avatar--agent-middle {\n z-index: 2 !important;\n margin-left: -15px !important;\n}\n#sbz92 .group-avatar--secondary .group-avatar--agent-right {\n z-index: 1 !important;\n margin-left: -15px !important;\n}\n#sbz92 .widget-header {\n z-index: -1 !important;\n position: relative !important;\n transition: height 0.2s !important;\n border-radius: 15px 15px 0px 0px !important;\n background: '@background' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n width: 100% !important;\n}\n#sbz92 .widget-header .widget-header--total-unread-convo {\n font-size: 13px !important;\n font-weight: 500 !important;\n background: #ef000d !important;\n display: flex !important;\n border-radius: 50% !important;\n justify-content: center !important;\n align-items: center !important;\n width: 20px !important;\n height: 20px !important;\n position: absolute !important;\n cursor: pointer !important;\n right: -8px !important;\n top: -4px !important;\n}\n#sbz92 .widget-header--collapsed {\n height: auto !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--collapsed {\n height: auto !important;\n padding: 15px 22.5px !important;\n position: relative !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--collapsed .widget-header--title {\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n text-overflow: ellipsis !important;\n font-size: 16px !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--collapsed .widget-header--description {\n font-size: 14px !important;\n overflow: hidden !important;\n opacity: 0.7 !important;\n flex: 1 !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n margin-top: 2.5px !important;\n position: relative !important;\n line-height: 1.5 !important;\n}\n#sbz92 .mobile .widget-header {\n border-radius: 0px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded {\n height: 224px !important;\n padding: 15px 22.5px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--top-wrapper {\n display: flex !important;\n flex-direction: row !important;\n align-items: center !important;\n margin-bottom: 10px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--avatar-wrapper {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--title {\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n text-overflow: ellipsis !important;\n flex: 1 !important;\n font-size: 16px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--description {\n position: relative !important;\n text-align: center !important;\n margin-top: 15px !important;\n white-space: pre-wrap !important;\n display: -webkit-box !important;\n -webkit-box-orient: vertical !important;\n -webkit-line-clamp: 2 !important;\n overflow: hidden !important;\n line-height: 1.5 !important;\n}\n#sbz92 .widget-header--convo-expanded {\n height: 224px !important;\n}\n#sbz92 .widget-header--inner {\n position: absolute !important;\n top: 0 !important;\n left: 50% !important;\n transform: translateX(-50%) !important;\n width: 100% !important;\n opacity: 1 !important;\n display: flex !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--hidden {\n opacity: 0 !important;\n transform: scale(0) !important;\n animation-duration: 0.05s !important;\n animation-name: hide !important;\n}\n#sbz92 .widget-header--title-container {\n min-width: 0 !important;\n flex: 1 !important;\n display: flex !important;\n flex-direction: column !important;\n z-index: 1 !important;\n}\n#sbz92 .widget-header--button-close {\n display: flex !important;\n border-radius: 6px !important;\n justify-self: flex-end !important;\n align-items: center !important;\n align-self: flex-start !important;\n opacity: 0.6 !important;\n transition: opacity 0.15s ease, scale 0.15s ease, filter 0.15s ease !important;\n filter: brightness(0.95) !important;\n}\n#sbz92 .widget-header--button-close:hover {\n opacity: 1 !important;\n filter: brightness(1.1) !important;\n scale: 1.1 !important;\n}\n#sbz92 .widget-header--button-close-icon {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9ImZlYXRoZXIgZmVhdGhlci14Ij48bGluZSB4MT0iMTgiIHkxPSI2IiB4Mj0iNiIgeTI9IjE4Ij48L2xpbmU+PGxpbmUgeDE9IjYiIHkxPSI2IiB4Mj0iMTgiIHkyPSIxOCI+PC9saW5lPjwvc3ZnPgo=') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n cursor: pointer !important;\n}\n#sbz92 .widget-header--button-back {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IndoaXRlIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTQgNmwxNiAwIiAvPjxwYXRoIGQ9Ik00IDEybDE2IDAiIC8+PHBhdGggZD0iTTQgMThsMTYgMCIgLz48L3N2Zz4K') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n background-size: 24px 24px !important;\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n position: relative !important;\n}\n#sbz92 .widget-header--wrap-button-back {\n display: flex !important;\n position: relative !important;\n margin-right: 7.5px !important;\n cursor: pointer !important;\n scale: 1 !important;\n opacity: 0.6 !important;\n transition: opacity 0.15s ease, scale 0.15s ease, filter 0.15s ease !important;\n filter: brightness(0.95) !important;\n}\n#sbz92 .widget-header--wrap-button-back:hover {\n opacity: 1 !important;\n filter: brightness(1.1) !important;\n scale: 1.1 !important;\n}\n#sbz92 .fade-enter-active,\n#sbz92 .fade-leave-active {\n transition: opacity 0.5s ease-out 0.2s !important;\n}\n#sbz92 .fade-enter,\n#sbz92 .fade-leave-to {\n opacity: 0 !important;\n}\n#sbz92 .slide-fade-enter-active {\n transition: all 0.3s ease !important;\n}\n#sbz92 .slide-fade-leave-active {\n transition: all 0.2s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .slide-fade-enter,\n#sbz92 .slide-fade-leave-to {\n transform: translateX(10px) !important;\n opacity: 0 !important;\n}\n#sbz92 .widget_header__body {\n padding-bottom: 70px !important;\n}\n#sbz92 .widget_header__body.widget_header__body__social {\n display: flex !important;\n}\n#sbz92 .social__account_logo {\n height: 90px !important;\n width: 90px !important;\n margin-right: 15px !important;\n border-radius: 15px !important;\n object-fit: cover !important;\n}\n#sbz92 .social__introduction {\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n max-height: 72px !important;\n overflow: hidden !important;\n display: -webkit-box !important;\n -webkit-box-orient: vertical !important;\n -webkit-line-clamp: 3 !important;\n}\n#sbz92 .social__links {\n display: flex !important;\n flex-direction: row !important;\n}\n#sbz92 .social__links-logo {\n height: 30px !important;\n width: 30px !important;\n border-radius: 50% !important;\n margin-right: 10px !important;\n margin-top: 5px !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n display: block !important;\n}\n#sbz92 .social__links-logo--facebook {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Ccircle%20cx%3D%2215%22%20cy%3D%2215%22%20r%3D%2215%22%20fill%3D%22%230264FF%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M17.2944%2029.8252C16.5464%2029.9404%2015.7803%2030%2015%2030C14.0962%2030%2013.2109%2029.9199%2012.3511%2029.7666V18.4775H10V14.4287H12.3511V11.8086C12.3511%209.93457%2013.2744%207%2017.3384%207L21%207.01465V10.9453H18.3433C17.9075%2010.9453%2017.2947%2011.1553%2017.2947%2012.0488V14.4326H20.989L20.5571%2018.4775H17.2944V29.8252Z%22%20fill%3D%22white%22/%3E%3C/svg%3E') !important;\n}\n#sbz92 .social__links-logo--messenger {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Crect%20width%3D%2230%22%20height%3D%2230%22%20rx%3D%2215%22%20fill%3D%22%23007FFF%22/%3E%3Crect%20x%3D%224.28564%22%20y%3D%226%22%20width%3D%2221.4286%22%20height%3D%2218.8571%22%20fill%3D%22white%22/%3E%3Cpath%20d%3D%22M14.9478%2014.5713C14.8228%2014.5917%2014.6974%2014.6104%2014.5715%2014.6276C14.6974%2014.6104%2014.8228%2014.5917%2014.9478%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7507%2014.5713C14.691%2014.5823%2014.6313%2014.5923%2014.5715%2014.6026C14.6313%2014.5923%2014.691%2014.5823%2014.7507%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M15.0126%2014.5713C14.8663%2014.5878%2014.7192%2014.6024%2014.5715%2014.6148C14.7192%2014.6024%2014.8663%2014.5878%2015.0126%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.783%2014.5713C14.7128%2014.5807%2014.642%2014.5894%2014.5715%2014.5976C14.642%2014.5894%2014.7128%2014.5807%2014.783%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7299%2014.5713C14.6773%2014.5825%2014.6244%2014.5937%2014.5715%2014.6045C14.6244%2014.5937%2014.6773%2014.5825%2014.7299%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.6992%2014.5713C14.6567%2014.5834%2014.6141%2014.5949%2014.5715%2014.6068C14.6141%2014.5949%2014.6567%2014.5834%2014.6992%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7107%2014.5713C14.6645%2014.5834%2014.618%2014.5958%2014.5715%2014.6075C14.618%2014.5958%2014.6645%2014.5836%2014.7107%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7194%2014.5713C14.6704%2014.5827%2014.621%2014.5935%2014.5715%2014.6045C14.621%2014.5935%2014.6704%2014.5827%2014.7194%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.8087%2014.5713C14.7297%2014.5779%2014.6507%2014.5839%2014.5715%2014.5891C14.6507%2014.5839%2014.7297%2014.5779%2014.8087%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M15.0417%2014.5713C14.8856%2014.5814%2014.7288%2014.5894%2014.5715%2014.5946C14.7288%2014.5894%2014.8856%2014.5814%2015.0417%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.8206%2014.5713C14.7377%2014.574%2014.6546%2014.5761%2014.5715%2014.5775C14.6546%2014.5761%2014.7377%2014.574%2014.8206%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.1547%2012.3174L9.29419%2017.4636L13.7176%2015.0365L16.0288%2017.4636L20.8621%2012.3174L16.4877%2014.7019L14.1547%2012.3174Z%22%20fill%3D%22%23448AFF%22/%3E%3Cpath%20d%3D%22M15%200C6.717%200%200%206.717%200%2015C0%2023.283%206.717%2030%2015%2030C23.283%2030%2030%2023.283%2030%2015C30%206.717%2023.283%200%2015%200ZM15.1172%2023.0294C14.1886%2023.0294%2013.2923%2022.8983%2012.4491%2022.6554L9.42421%2024.375V21.14C7.39815%2019.5982%206.10428%2017.2501%206.10428%2014.6203C6.10428%209.97581%2010.1395%206.21094%2015.1172%206.21094C20.0951%206.21094%2024.1301%209.97581%2024.1301%2014.6203C24.1301%2019.2643%2020.0951%2023.0294%2015.1172%2023.0294V23.0294Z%22%20fill%3D%22%23007FFF%22/%3E%3C/svg%3E') !important;\n}\n#sbz92 .social__links-logo--email {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d%3D%22M22.6875%2012.9688C21.9375%2013.5625%2020.3125%2014.75%2017.875%2016.5L17.5625%2016.75C17.0625%2017.125%2016.6875%2017.4062%2016.375%2017.5625C15.875%2017.875%2015.4062%2018%2015%2018C14.5625%2018%2014.125%2017.875%2013.625%2017.5938C13.3125%2017.4375%2012.9375%2017.1562%2012.4375%2016.7812L12.125%2016.5C9.59375%2014.6875%208%2013.5%207.3125%2012.9688C7.25%2012.9375%207.15625%2012.9375%207.09375%2012.9688C7.03125%2013%207%2013.0625%207%2013.125V19.5C7%2019.9375%207.125%2020.2812%207.4375%2020.5625C7.71875%2020.875%208.0625%2021%208.5%2021H21.5C21.9062%2021%2022.25%2020.875%2022.5625%2020.5625C22.8438%2020.2812%2023%2019.9375%2023%2019.5V13.125C23%2013.0625%2022.9375%2013%2022.875%2012.9375C22.8125%2012.9062%2022.75%2012.9062%2022.6875%2012.9688ZM15%2017C14.7188%2017%2014.375%2016.875%2014%2016.625C13.75%2016.5%2013.4375%2016.2812%2013.0312%2015.9375L12.7188%2015.7188C10.1562%2013.8438%208.40625%2012.5625%207.5%2011.8438L7.28125%2011.6875C7.09375%2011.5625%207%2011.3438%207%2011.0938V10.5C7%2010.0938%207.125%209.75%207.4375%209.4375C7.71875%209.15625%208.0625%209%208.5%209H21.5C21.9062%209%2022.25%209.15625%2022.5625%209.4375C22.8438%209.75%2023%2010.0938%2023%2010.5V11.0938C23%2011.3438%2022.9062%2011.5625%2022.7188%2011.6875L22.5625%2011.8125C21.6562%2012.5312%2019.9062%2013.8438%2017.2812%2015.7188L16.9688%2015.9375C16.5312%2016.2812%2016.2188%2016.5%2016%2016.625C15.5938%2016.875%2015.25%2017%2015%2017Z%22%20fill%3D%22white%22/%3E%3C/svg%3E') !important;\n}\n#sbz92 .social__links-logo--zalo {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M29.9999%2014.9385C29.9669%206.68262%2023.2639%200%2015%200C6.7157%200%200%206.71582%200%2015C0%2023.2842%206.7157%2030%2015%2030C23.2639%2030%2029.9669%2023.3174%2029.9999%2015.0615C29.9999%2015.041%2030%2015.0205%2030%2015C30%2014.9795%2029.9999%2014.959%2029.9999%2014.9385Z%22%20fill%3D%22white%22/%3E%3Cpath%20d%3D%22M24.5612%2017.4695C22.9394%2017.4726%2021.6242%2016.1862%2021.6279%2014.6005C21.6316%2013.0345%2022.9474%2011.7445%2024.5473%2011.7383C26.1556%2011.732%2027.4826%2013.0349%2027.4786%2014.6162C27.4746%2016.1926%2026.1719%2017.4665%2024.5612%2017.4695ZM22.8416%2014.6183C22.8459%2015.5573%2023.6166%2016.3004%2024.5777%2016.2923C25.5165%2016.2845%2026.2699%2015.5301%2026.2673%2014.6005C26.2646%2013.6712%2025.51%2012.9317%2024.56%2012.9277C23.6012%2012.9237%2022.8373%2013.6751%2022.8416%2014.6183Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20d%3D%22M19.5054%2010.0762H20.795V17.4217H19.9447C19.7021%2017.4217%2019.5054%2017.225%2019.5054%2016.9823V10.0762Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20d%3D%22M18.5227%2011.8907H17.2881V12.2935C16.5767%2011.8601%2015.8509%2011.6775%2015.06%2011.831C14.2526%2011.9876%2013.6164%2012.4043%2013.167%2013.0917C12.4538%2014.1826%2012.5894%2015.5904%2013.4938%2016.5431C14.3504%2017.4454%2015.8628%2017.8178%2017.2815%2016.9247C17.2835%2016.934%2017.286%2016.9422%2017.2881%2016.9511V16.9826C17.2881%2017.2252%2017.4849%2017.422%2017.7275%2017.422H18.5227V11.8907V11.8907ZM15.5853%2016.2787C14.6636%2016.268%2013.8924%2015.5006%2013.8986%2014.6004C13.9048%2013.692%2014.6716%2012.9481%2015.602%2012.9479C16.5427%2012.9477%2017.2871%2013.6781%2017.2882%2014.6026C17.2893%2015.5333%2016.521%2016.2896%2015.5853%2016.2787Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20d%3D%22M8.0481%2016.2438C9.39854%2014.5856%2010.6939%2012.9885%2011.9984%2011.3989C12.2464%2011.0968%2012.3662%2010.7671%2012.3731%2010.3807C12.3761%2010.2135%2012.3261%2010.1646%2012.1596%2010.165C11.6056%2010.1666%206.41195%2010.165%206.41195%2010.165V11.4709H10.4978C10.4424%2011.543%207.83556%2014.7218%206.57932%2016.2403C6.37112%2016.4919%206.26503%2016.7645%206.25401%2017.0936C6.24628%2017.3242%206.28864%2017.4139%206.52267%2017.4211V17.4217H11.9356C12.1782%2017.4217%2012.3749%2017.225%2012.3749%2016.9823V16.2487V16.2438H8.0481V16.2438Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.948%2026.1338C6.03613%2027.1172%207.26917%2027.9424%208.61108%2028.5752V26.1338H4.948ZM0.00268555%2014.7119C0.0775146%2010.7393%201.69666%207.14453%204.28479%204.50293C4.0459%204.98242%203.83435%205.47949%203.64661%205.99121C2.58862%208.87598%202.31299%2011.8506%202.69116%2014.8916C2.95862%2017.042%203.55518%2019.0869%204.63391%2020.9775C4.8269%2021.3154%205.02271%2021.6582%205.26489%2021.9609C5.76672%2022.5879%205.80981%2023.2725%205.59888%2024.0049C5.4873%2024.3926%205.32227%2024.75%205.11304%2025.082C4.95691%2025.3291%204.77612%2025.5635%204.57434%2025.7842C1.81921%2023.1201%200.0819092%2019.4102%200.00280762%2015.2939C0.000976562%2015.1963%200%2015.0986%200%2015C0%2014.9033%200.000854492%2014.8076%200.00268555%2014.7119Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M24.8226%2026.3367C22.191%2028.6189%2018.7568%2029.9998%2015%2029.9998C11.1449%2029.9998%207.62952%2028.5457%204.97241%2026.156C6.32458%2026.1921%207.61877%2025.9031%208.86353%2025.3464C8.97681%2025.2957%209.06262%2025.3113%209.16443%2025.364C12.2258%2026.9646%2015.5131%2027.5125%2018.926%2027.3962C20.9574%2027.3269%2022.9333%2027.0046%2024.8226%2026.3367Z%22%20fill%3D%22%23015BDF%22/%3E%3C/svg%3E') !important;\n}\n@keyframes hide {\n 100% {\n opacity: 0;\n transform: scale(0);\n }\n}\n#sbz92 .widget-header-expand-container {\n width: 100% !important;\n}\n#sbz92 .message-input {\n width: 100% !important;\n border-top: 1px solid #e3e3e3 !important;\n display: flex !important;\n flex-direction: row !important;\n padding: 15px 22.5px !important;\n}\n#sbz92 .message-input--disabled {\n background: #f0f0f0 !important;\n opacity: 0.6 !important;\n filter: grayscale(1) !important;\n}\n#sbz92 textarea[disabled='disabled']::-webkit-input-placeholder {\n color: #a4a4a4 !important;\n -webkit-text-fill-color: #a4a4a4 !important;\n}\n#sbz92 textarea[disabled='disabled']:-ms-input-placeholder {\n color: #a4a4a4 !important;\n -webkit-text-fill-color: #a4a4a4 !important;\n}\n#sbz92 textarea[disabled='disabled']::placeholder {\n color: #a4a4a4 !important;\n -webkit-text-fill-color: #a4a4a4 !important;\n}\n#sbz92 .message-input--input {\n word-wrap: break-word !important;\n resize: none !important;\n flex: 1 !important;\n align-self: center !important;\n margin-right: 7.5px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .message-input--input::placeholder {\n opacity: 0.5 !important;\n /* Firefox */\n}\n#sbz92 .message-input--input::-ms-input-placeholder {\n /* Edge 12 -18 */\n opacity: 0.5 !important;\n /* Firefox */\n}\n#sbz92 .message-input--emoji-button {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImdyYXkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLXNtaWxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCI+PC9jaXJjbGU+PHBhdGggZD0iTTggMTRzMS41IDIgNCAyIDQtMiA0LTIiPjwvcGF0aD48bGluZSB4MT0iOSIgeTE9IjkiIHgyPSI5LjAxIiB5Mj0iOSI+PC9saW5lPjxsaW5lIHgxPSIxNSIgeTE9IjkiIHgyPSIxNS4wMSIgeTI9IjkiPjwvbGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .message-input--button {\n background-size: 70% !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 32px !important;\n height: 32px !important;\n display: block !important;\n cursor: pointer !important;\n position: relative !important;\n border-radius: 20px !important;\n transition: background-color 0.2s !important;\n}\n#sbz92 .message-input--button:hover {\n background-color: #eeeeee !important;\n}\n#sbz92 .message-input--disabled .message-input--button {\n cursor: default !important;\n}\n#sbz92 .message-input--disabled .message-input--button {\n cursor: default !important;\n}\n#sbz92 .message-input--attachment-button {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImdyYXkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLXBhcGVyY2xpcCI+PHBhdGggZD0iTTIxLjQ0IDExLjA1bC05LjE5IDkuMTlhNiA2IDAgMCAxLTguNDktOC40OWw5LjE5LTkuMTlhNCA0IDAgMCAxIDUuNjYgNS42NmwtOS4yIDkuMTlhMiAyIDAgMCAxLTIuODMtMi44M2w4LjQ5LTguNDgiPjwvcGF0aD48L3N2Zz4K') !important;\n}\n#sbz92 .message-input--send-button {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2225%22%20height%3D%2225%22%20viewBox%3D%220%200%2024%2024%22%20stroke-width%3D%221.5%22%20stroke%3D%22@esc-primary-color-esc%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22/%3E%3Cpath%20d%3D%22M4.698%204.034l16.302%207.966l-16.302%207.966a.503%20.503%200%200%201%20-.546%20-.124a.555%20.555%200%200%201%20-.12%20-.568l2.468%20-7.274l-2.468%20-7.274a.555%20.555%200%200%201%20.12%20-.568a.503%20.503%200%200%201%20.546%20-.124z%22%20fill%3D%22@esc-primary-color-esc%22/%3E%3Cpath%20d%3D%22M6.5%2012h14.5%22%20/%3E%3C/svg%3E') !important;\n background-size: 82% !important;\n}\n#sbz92 .message-input--preform {\n justify-content: center !important;\n padding: 11px !important;\n @spacer 2;\n}\n#sbz92 .btn--preform {\n border-radius: 7px !important;\n padding-left: 32px !important;\n padding-right: 32px !important;\n height: 40px !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n font-size: 14px !important;\n line-height: 20px !important;\n text-align: center !important;\n background: '@primary_color' !important;\n width: 60% !important;\n}\n#sbz92 .widget-body.embed-chat .message-input {\n border: 1px solid #e3e3e3 !important;\n border-radius: 8px !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .form-label {\n margin-top: 15px !important;\n}\n#sbz92 .form {\n border: 1px solid #eeeeee !important;\n box-sizing: border-box !important;\n box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15) !important;\n border-radius: 7px !important;\n}\n#sbz92 textarea.form-control {\n resize: none !important;\n word-wrap: break-word !important;\n}\n#sbz92 .form-control--container {\n position: relative !important;\n}\n#sbz92 input.form-control[disabled] {\n background: #f9f9f9 !important;\n}\n#sbz92 .form-control--container .form-control--check {\n position: absolute !important;\n right: 10px !important;\n top: 10px !important;\n background-size: 100% 100% !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 20px !important;\n height: 20px !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM1QkFBMUQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWNoZWNrIj48cG9seWxpbmUgcG9pbnRzPSIyMCA2IDkgMTcgNCAxMiI+PC9wb2x5bGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .form-control--valid-input--error {\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n font-size: 14px !important;\n padding-top: 5px !important;\n}\n#sbz92 input[type='text'].form-control.input--error,\n#sbz92 input[type='number'].form-control.input--error,\n#sbz92 input[type='date'].form-control.input--error,\n#sbz92 textarea.form-control.input--error,\n#sbz92 select.form-control.input--error {\n border: 1px solid #dc3545 !important;\n background: #dd41500f !important;\n}\n#sbz92 input[type='text'].form-control,\n#sbz92 input[type='number'].form-control,\n#sbz92 input[type='date'].form-control,\n#sbz92 textarea.form-control,\n#sbz92 select.form-control {\n width: 100% !important;\n border: 1px solid #c4c4c4 !important;\n border-radius: 8px !important;\n transition: all 100ms ease !important;\n padding: 10px 12px !important;\n}\n#sbz92 input[type='text'].form-control:hover,\n#sbz92 input[type='number'].form-control:hover,\n#sbz92 input[type='date'].form-control:hover,\n#sbz92 textarea.form-control:hover,\n#sbz92 select.form-control:hover {\n border: 1px solid #6c757d !important;\n}\n#sbz92 input[type='text'].form-control.input--error:hover,\n#sbz92 input[type='number'].form-control.input--error:hover,\n#sbz92 input[type='date'].form-control.input--error:hover,\n#sbz92 textarea.form-control.input--error:hover,\n#sbz92 select.form-control.input--error:hover {\n border: 1px solid #dc3545 !important;\n}\n#sbz92 select.form-control {\n padding: 1px 8px !important;\n}\n#sbz92 input[type='date'].form-control {\n height: 40px !important;\n width: 100% !important;\n background-color: #fff !important;\n}\n#sbz92 .form-wrapper-attachment input[type='date'].form-control {\n height: 32px !important;\n padding-top: 6px !important;\n padding-bottom: 6px !important;\n}\n#sbz92 input[type='text'].form-control:focus,\n#sbz92 input[type='number'].form-control:focus,\n#sbz92 input[type='date'].form-control:focus,\n#sbz92 textarea.form-control:focus,\n#sbz92 select.form-control:focus {\n border: 1px solid '@primary_color' !important;\n}\n#sbz92 input[type='text'].form-control.input--error:focus,\n#sbz92 input[type='number'].form-control.input--error:focus,\n#sbz92 input[type='date'].form-control.input--error:focus,\n#sbz92 textarea.form-control.input--error:focus,\n#sbz92 select.form-control.input--error:focus {\n border: 1px solid #dc3545 !important;\n}\n#sbz92 .label {\n display: block !important;\n padding-bottom: 6px !important;\n margin-top: 8px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n font-size: 14px !important;\n font-weight: 500 !important;\n}\n#sbz92 .form--btn-submit {\n border-radius: 7px !important;\n padding-left: 32px !important;\n padding-right: 32px !important;\n width: 100% !important;\n}\n#sbz92 .form .radio {\n display: block !important;\n position: relative !important;\n width: 100% !important;\n margin-top: 5px !important;\n}\n#sbz92 .form .radio:first-of-type {\n margin-top: 0 !important;\n}\n#sbz92 .form input[type='radio'] {\n position: absolute !important;\n visibility: hidden !important;\n}\n#sbz92 .form .radio--label {\n padding-left: 22px !important;\n display: block !important;\n position: relative !important;\n z-index: 9 !important;\n cursor: pointer !important;\n}\n#sbz92 .form .radio--check {\n display: block !important;\n position: absolute !important;\n border: 1px solid #aaa !important;\n border-radius: 100% !important;\n height: 16px !important;\n width: 16px !important;\n top: 0px !important;\n left: 0px !important;\n z-index: 5 !important;\n transition: border 0.15s linear !important;\n -webkit-transition: border 0.15s linear !important;\n}\n#sbz92 .form .radio--check:hover {\n border: 1px solid #888 !important;\n}\n#sbz92 .form .radio--check::before {\n display: block !important;\n position: absolute !important;\n content: '' !important;\n border-radius: 100% !important;\n height: 10px !important;\n width: 10px !important;\n top: 2px !important;\n left: 2px !important;\n margin: auto !important;\n transition: background 0.15s linear !important;\n -webkit-transition: background 0.15s linear !important;\n}\n#sbz92 .form input[type='radio']:checked ~ .radio--check {\n border: 1px solid '@primary_color' !important;\n}\n#sbz92 .form input[type='radio']:checked ~ .radio--check::before {\n background: '@primary_color' !important;\n}\n#sbz92 .form .checkbox {\n display: block !important;\n position: relative !important;\n width: 100% !important;\n margin-top: 5px !important;\n}\n#sbz92 .form .checkbox:first-of-type {\n margin-top: 0 !important;\n}\n#sbz92 .form input[type='checkbox'] {\n position: absolute !important;\n visibility: hidden !important;\n}\n#sbz92 .form .checkbox--label {\n padding-left: 22px !important;\n display: block !important;\n position: relative !important;\n z-index: 9 !important;\n cursor: pointer !important;\n}\n#sbz92 .form .checkbox--check {\n display: block !important;\n position: absolute !important;\n border: 1px solid #aaa !important;\n border-radius: 4 px !important;\n height: 16px !important;\n width: 16px !important;\n top: 0px !important;\n left: 0px !important;\n z-index: 5 !important;\n transition: border 0.15s linear !important;\n -webkit-transition: border 0.15s linear !important;\n}\n#sbz92 .form .checkbox--check:hover {\n border: 1px solid #888 !important;\n}\n#sbz92 .form .checkbox--check::before {\n display: block !important;\n position: absolute !important;\n content: '' !important;\n height: 100% !important;\n width: 100% !important;\n margin: auto !important;\n transition: background 0.15s linear !important;\n -webkit-transition: background 0.15s linear !important;\n}\n#sbz92 .form input[type='checkbox']:checked ~ .checkbox--check {\n border: 1px solid '@primary_color' !important;\n}\n#sbz92 .form input[type='checkbox']:checked ~ .checkbox--check::before {\n background: '@primary_color' !important;\n}\n#sbz92 .form .select .form-control {\n padding-right: 20px !important;\n}\n#sbz92 .form select {\n /*background: url(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00LjQxMDU4IDYuOTExMDdDNC43MzYwMiA2LjU4NTYzIDUuMjYzNjYgNi41ODU2MyA1LjU4OTA5IDYuOTExMDdMOS45OTk4NCAxMS4zMjE4TDE0LjQxMDYgNi45MTEwN0MxNC43MzYgNi41ODU2MyAxNS4yNjM3IDYuNTg1NjMgMTUuNTg5MSA2LjkxMTA3QzE1LjkxNDUgNy4yMzY1MSAxNS45MTQ1IDcuNzY0MTQgMTUuNTg5MSA4LjA4OTU4TDEwLjU4OTEgMTMuMDg5NkMxMC4yNjM3IDEzLjQxNSA5LjczNjAyIDEzLjQxNSA5LjQxMDU4IDEzLjA4OTZMNC40MTA1OCA4LjA4OTU4QzQuMDg1MTQgNy43NjQxNCA0LjA4NTE0IDcuMjM2NTEgNC40MTA1OCA2LjkxMTA3WiIgZmlsbD0iYmxhY2siLz4KPC9zdmc+\") no-repeat right;*/\n}\n#sbz92 .form-require-info--list {\n background: #fff !important;\n overflow-y: auto !important;\n overflow-x: hidden !important;\n}\n#sbz92 .form-require-info--title {\n font-size: 18px !important;\n line-height: 20px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n background: #fff !important;\n border-bottom: 1px solid #f0f0f0 !important;\n}\n#sbz92 .form-require-info--item {\n border-bottom: 1px solid #f0f0f0 !important;\n}\n#sbz92 .form-require-info--item:hover {\n cursor: pointer !important;\n background: #e0e0e0 !important;\n}\n#sbz92 input[type='checkbox'] {\n background-color: initial !important;\n cursor: default !important;\n -webkit-appearance: checkbox !important;\n box-sizing: border-box !important;\n margin: 3px 3px 3px 4px !important;\n padding: initial !important;\n border: initial !important;\n}\n#sbz92 input[type='radio'] {\n background-color: initial !important;\n cursor: default !important;\n -webkit-appearance: radio !important;\n box-sizing: border-box !important;\n margin: 3px 3px 0px 5px !important;\n padding: initial !important;\n border: initial !important;\n}\n#sbz92 option {\n font-weight: normal !important;\n display: block !important;\n white-space: pre !important;\n min-height: 1.2em !important;\n padding: 0px 2px 1px !important;\n}\n#sbz92 select {\n -webkit-writing-mode: horizontal-tb !important;\n text-rendering: auto !important;\n color: -internal-light-dark-color(black, white) !important;\n letter-spacing: normal !important;\n word-spacing: normal !important;\n text-transform: none !important;\n text-indent: 0px !important;\n text-shadow: none !important;\n display: inline-block !important;\n text-align: start !important;\n -webkit-appearance: menulist !important;\n box-sizing: border-box !important;\n align-items: center !important;\n white-space: pre !important;\n -webkit-rtl-ordering: logical !important;\n background-color: -internal-light-dark-color(white, black) !important;\n cursor: default !important;\n margin: 0em !important;\n font: 400 13.3333px Arial !important;\n border-radius: 0px !important;\n border-width: 1px !important;\n border-style: solid !important;\n border-color: #a9a9a9 !important;\n border-image: initial !important;\n}\n#sbz92 select {\n position: relative !important;\n display: inline-block !important;\n border: 2px #cccc solid !important;\n border-radius: 5px !important;\n height: 36px !important;\n line-height: 34px !important;\n padding: 0 12px !important;\n font-size: 14px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .custom-select--wrap-selected {\n display: flex !important;\n position: relative !important;\n justify-content: space-between !important;\n cursor: pointer !important;\n border: 1px solid #d8d8d8 !important;\n border-radius: 5px !important;\n padding: 5px !important;\n}\n#sbz92 .custom-select--selected-items {\n display: flex !important;\n align-items: center !important;\n flex-wrap: wrap !important;\n}\n#sbz92 .custom-select--selected-item {\n display: flex !important;\n align-items: center !important;\n margin: 3px 3px !important;\n padding: 1px 6px !important;\n border-radius: 5px !important;\n border: 1px solid #d8d8d8 !important;\n font-size: 14px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n vertical-align: top !important;\n}\n#sbz92 .icn-delete:before {\n display: flex !important;\n justify-items: center !important;\n font-size: 12px !important;\n margin-left: 5px !important;\n opacity: 0.5 !important;\n content: '\\2715' !important;\n}\n#sbz92 .custom-select--wrap-options {\n display: flex !important;\n flex-direction: column !important;\n position: absolute !important;\n left: 0 !important;\n top: 100% !important;\n border: 1px solid #dadce0 !important;\n -webkit-box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n border-radius: 5px !important;\n width: 100% !important;\n background: #fff !important;\n z-index: 11 !important;\n max-height: 200px !important;\n overflow-y: auto !important;\n}\n#sbz92 .custom-select--input-search {\n font-size: 15px !important;\n padding: 8px !important;\n border-bottom: 1px solid #d8d8d8 !important;\n}\n#sbz92 .custom-select--items-options {\n margin: 0 !important;\n display: flex !important;\n flex-direction: column !important;\n}\n#sbz92 .custom-select--item-options {\n padding: 10px !important;\n cursor: pointer !important;\n}\n#sbz92 .custom-select--item-options:hover {\n background-color: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n}\n#sbz92 .custom-select--icon-dropdown {\n margin-left: auto !important;\n float: right !important;\n cursor: pointer !important;\n}\n#sbz92 .custom-select--icon-dropdown path {\n d: path('M 7 9.5 L 12 14.5 L 17 9.5 H 7 Z') !important;\n fill: black !important;\n}\n#sbz92 .form-component {\n margin-bottom: 15px !important;\n}\n#sbz92 .form-component:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .form-component.submitted {\n margin-bottom: 8px !important;\n}\n#sbz92 .form-component.form-component-submit-button {\n margin-top: 20px !important;\n}\n#sbz92 .form-wrapper.form {\n padding: 20px !important;\n background-color: #fff !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form {\n padding: 12px 15px !important;\n margin-top: 5px !important;\n box-shadow: 0 0 0 1px #eeeeee !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='text'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='number'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='date'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form select.form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form textarea.form-control {\n padding: 6px 10px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component {\n margin-bottom: 12px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component.submitted {\n margin-bottom: 5px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component.submitted:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component:first-child .label {\n margin-top: 0 !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component.form-component-submit-button {\n margin-top: 16px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .label {\n padding-bottom: 4px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-control--valid-input--error {\n padding-top: 3px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .btn--start-convo {\n height: 36px !important;\n}\n#sbz92 select.form-control.form-control--empty {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n@media only screen and (min-width: 968px) {\n #sbz92 .form-radios-wrapper.horizontal {\n display: flex;\n flex-wrap: wrap;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio {\n margin-right: 10px;\n width: 300px;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio:first-child {\n margin-top: 0;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio:nth-child(2) {\n margin-top: 0;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio:nth-child(2n) {\n margin-right: 0;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal {\n display: flex;\n flex-wrap: wrap;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox {\n margin-right: 10px;\n width: 300px;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox:first-child {\n margin-top: 0;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox:nth-child(2) {\n margin-top: 0;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox:nth-child(2n) {\n margin-right: 0;\n }\n}\n#sbz92 .form-ratings-wrapper {\n display: inline-flex !important;\n}\n#sbz92 .star {\n width: 32px !important;\n height: 30px !important;\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ") !important;\n background-position: 0px 0px !important;\n background-size: cover !important;\n}\n#sbz92 .form-wrapper-attachment .star-wrapper {\n padding-right: 12px !important;\n}\n#sbz92 .star-wrapper {\n cursor: pointer !important;\n padding-right: 20px !important;\n}\n#sbz92 .star-wrapper:last-child {\n padding-right: 0 !important;\n}\n#sbz92 .star-wrapper.hovering .star {\n background-position: -32px 0 !important;\n}\n#sbz92 .star-wrapper.selected {\n cursor: auto !important;\n}\n#sbz92 .star-wrapper.selected .star {\n background-position: -64px 0 !important;\n}\n#sbz92 .widget-body--events-container {\n overflow-x: hidden !important;\n overflow-y: auto !important;\n display: flex !important;\n flex-direction: column !important;\n flex: 1 !important;\n padding-left: 22.5px !important;\n padding-right: 22.5px !important;\n}\n#sbz92 .widget-body--events {\n padding-top: 20px !important;\n flex: 1 !important;\n}\n#sbz92 .mobile .widget-body--events {\n display: flex !important;\n flex-direction: column !important;\n justify-content: flex-end !important;\n padding-bottom: 15px !important;\n}\n#sbz92 .widget-body--events-container.widget-body--events-container__error {\n align-items: center !important;\n justify-content: center !important;\n}\n#sbz92 .convo-event {\n position: relative !important;\n}\n#sbz92 .convo-event-time {\n text-align: center !important;\n margin-top: 15px !important;\n}\n#sbz92 .convo-event-time span {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .file-attachment {\n padding: 10px !important;\n border-radius: 10px !important;\n cursor: pointer !important;\n margin: 5px 0 0 0 !important;\n}\n#sbz92 .file-attachment--agent {\n background-color: '@primary_color' !important;\n width: fit-content !important;\n}\n#sbz92 .file-attachment--user {\n background-color: #eeeeee !important;\n align-self: flex-end !important;\n}\n#sbz92 .file-attachment--link {\n display: flex !important;\n flex-direction: row !important;\n align-items: center !important;\n width: fit-content !important;\n}\n#sbz92 .file-attachment--agent .file-attachment--filename {\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n text-decoration: underline !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n max-width: 200px !important;\n}\n#sbz92 .file-attachment--user .file-attachment--filename {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n text-decoration: underline !important;\n text-overflow: ellipsis !important;\n overflow: hidden !important;\n white-space: nowrap !important;\n max-width: 200px !important;\n}\n#sbz92 .file-attachment--download {\n width: 24px !important;\n height: 24px !important;\n border-radius: 30px !important;\n display: inline-block !important;\n}\n#sbz92 .file-attachment--agent .file-attachment--download {\n background: '@text_color' !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMjY1RkYiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWFycm93LWRvd24iPjxsaW5lIHgxPSIxMiIgeTE9IjUiIHgyPSIxMiIgeTI9IjE5Ij48L2xpbmU+PHBvbHlsaW5lIHBvaW50cz0iMTkgMTIgMTIgMTkgNSAxMiI+PC9wb2x5bGluZT48L3N2Zz4K') !important;\n background-size: 15px 15px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n}\n#sbz92 .file-attachment--user .file-attachment--download {\n background: #c4c4c4 !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9ImZlYXRoZXIgZmVhdGhlci1hcnJvdy1kb3duIj48bGluZSB4MT0iMTIiIHkxPSI1IiB4Mj0iMTIiIHkyPSIxOSI+PC9saW5lPjxwb2x5bGluZSBwb2ludHM9IjE5IDEyIDEyIDE5IDUgMTIiPjwvcG9seWxpbmU+PC9zdmc+Cg==') !important;\n background-size: 15px 15px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n}\n#sbz92 .message-text--user {\n line-height: 1.5 !important;\n margin: 5px 0 0 !important;\n display: inline-block !important;\n font-weight: 500 !important;\n background-color: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n padding: 12px 16px 12px 16px !important;\n}\n#sbz92 .message-text--user.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .message-text--agent.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .message-text--user.message-user--error {\n background-color: #dc3545 !important;\n}\n#sbz92 .message-text--agent.message-text--deleted {\n opacity: 0.7 !important;\n font-style: italic !important;\n}\n#sbz92 .message-text--agent {\n line-height: 1.5 !important;\n white-space: pre-wrap !important;\n display: inline-block !important;\n background: '@primary_color_faded' !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n padding: 12px 16px 12px 16px !important;\n}\n#sbz92 .message-agent.message-text--agent {\n max-width: 100% !important;\n margin-top: 0 !important;\n}\n#sbz92 .message-block-pre {\n max-width: 100% !important;\n margin: 0 !important;\n overflow-x: auto !important;\n white-space: pre !important;\n}\n#sbz92 .message-block-code {\n font-family: monospace !important;\n}\n#sbz92 .message-user__container {\n display: flex !important;\n flex-direction: row !important;\n align-items: flex-end !important;\n justify-content: flex-end !important;\n}\n#sbz92 .sending_dot.sending_dot__hide {\n opacity: 0 !important;\n background-color: #000 !important;\n}\n#sbz92 .sending_dot {\n width: 15px !important;\n height: 15px !important;\n margin-right: 5px !important;\n border-radius: 50% !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWNsb2NrIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCI+PC9jaXJjbGU+PHBvbHlsaW5lIHBvaW50cz0iMTIgNiAxMiAxMiAxNiAxNCI+PC9wb2x5bGluZT48L3N2Zz4K') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n}\n#sbz92 .message-user {\n border-radius: 18px !important;\n border-bottom-right-radius: 4px !important;\n max-width: 85% !important;\n align-self: flex-end !important;\n word-break: break-word !important;\n position: relative !important;\n white-space: pre-wrap !important;\n}\n#sbz92 .message-user.message-user-images-container {\n width: 85% !important;\n display: flex !important;\n justify-content: flex-end !important;\n}\n#sbz92 .message-user.message-user-audio {\n flex: 1 !important;\n}\n#sbz92 .message-agent {\n border-radius: 18px !important;\n border-bottom-left-radius: 4px !important;\n max-width: 85% !important;\n word-break: break-word !important;\n position: relative !important;\n}\n#sbz92 a.message_error {\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n opacity: 0.8 !important;\n display: block !important;\n text-align: end !important;\n font-size: 13px !important;\n margin-top: 5px !important;\n margin-bottom: 10px !important;\n}\n#sbz92 a.message_error:hover {\n opacity: 1 !important;\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n}\n#sbz92 .message_error__text {\n display: inline-block !important;\n vertical-align: text-top !important;\n}\n#sbz92 .message_error__icon {\n display: inline-block !important;\n vertical-align: bottom !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSIjZGMzNTQ1IiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWFsZXJ0LWNpcmNsZSI+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAiPjwvY2lyY2xlPjxsaW5lIHgxPSIxMiIgeTE9IjgiIHgyPSIxMiIgeTI9IjEyIj48L2xpbmU+PGxpbmUgeDE9IjEyIiB5MT0iMTYiIHgyPSIxMi4wMSIgeTI9IjE2Ij48L2xpbmU+PC9zdmc+Cgo=') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 20px !important;\n height: 20px !important;\n}\n#sbz92 .image-attachment__img {\n width: 100% !important;\n margin: 5px 0 0 0 !important;\n border-radius: 7px !important;\n border: 1px solid #eeeeee !important;\n}\n#sbz92 .audio-attachment {\n width: 100% !important;\n margin: 5px 0 0 0 !important;\n height: 45px !important;\n display: inline !important;\n}\n#sbz92 .audio-attachment__audio {\n all: inherit !important;\n width: 100% !important;\n}\n#sbz92 .video-attachment {\n border-radius: 7px !important;\n width: 100% !important;\n margin: 5px 0 0 0 !important;\n}\n#sbz92 .video-attachment__video {\n all: inherit !important;\n width: 100% !important;\n}\n#sbz92 .info-message {\n text-align: center !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n margin: 10px !important;\n}\n#sbz92 .message-sender {\n margin-top: 10px !important;\n}\n#sbz92 .message-sender-avatar {\n border-radius: 50% !important;\n width: 25px !important;\n height: 25px !important;\n margin-right: 10px !important;\n}\n#sbz92 .message-sender-name {\n color: #495057 !important;\n -webkit-text-fill-color: #495057 !important;\n vertical-align: middle !important;\n}\n#sbz92 .message-system {\n text-align: center !important;\n margin: 10px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .form-attachment {\n display: flex !important;\n flex-direction: column !important;\n padding: 10px !important;\n -webkit-box-shadow: 0 0 10px #dee2e6 !important;\n box-shadow: 0 0 10px #dee2e6 !important;\n border-radius: 7px !important;\n margin-top: 10px !important;\n}\n#sbz92 .form-attachment-field {\n display: flex !important;\n flex-direction: column !important;\n margin-bottom: 0px !important;\n}\n#sbz92 .form-attachment-field__title {\n color: #4c4c4c !important;\n -webkit-text-fill-color: #4c4c4c !important;\n}\n#sbz92 .form-attachment-field__text {\n width: 100% !important;\n border: 1px solid #dbdbdb !important;\n padding: 10px !important;\n margin: 3px 0px 0px 0px !important;\n border-radius: 7px !important;\n}\n#sbz92 .input--error {\n border: 1px solid red !important;\n}\n#sbz92 .input--success {\n background-color: #f9f9f9 !important;\n pointer-events: none !important;\n}\n#sbz92 .form-attachment-field__error {\n color: brown !important;\n -webkit-text-fill-color: brown !important;\n float: right !important;\n}\n#sbz92 .form-attachment-field__checkbox {\n width: 100% !important;\n all: inherit !important;\n -webkit-appearance: textfield !important;\n margin-right: 8px !important;\n}\n#sbz92 .form-attachment-field__checkbox:hover {\n cursor: pointer !important;\n}\n#sbz92 .form-attachment-field__list-item {\n display: flex !important;\n align-items: center !important;\n margin: 4px !important;\n margin-left: 0px !important;\n}\n#sbz92 .form-attachment-field__radio {\n width: 100% !important;\n all: inherit !important;\n -webkit-appearance: textfield !important;\n margin-right: 8px !important;\n}\n#sbz92 .form-attachment-field__datetime {\n width: 100% !important;\n border: 1px solid #dbdbdb !important;\n padding: 10px !important;\n margin: 3px 0px 0px 0px !important;\n border-radius: 7px !important;\n}\n#sbz92 .form-attachment--submit-btn {\n background-color: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n width: 100% !important;\n margin-top: 10px !important;\n border-radius: 7px !important;\n padding: 10px !important;\n text-align: center !important;\n font-size: 16px !important;\n}\n#sbz92 .form-attachment--submit-btn:hover {\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n}\n#sbz92 .red {\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n}\n#sbz92 .typing {\n background-color: #f4f5f7 !important;\n color: #7a7a7b !important;\n -webkit-text-fill-color: #7a7a7b !important;\n padding: 10px !important;\n opacity: 1 !important;\n transition: all 0.2s !important;\n position: absolute !important;\n bottom: 0px !important;\n left: 0px !important;\n width: 100% !important;\n}\n#sbz92 .typing--hidden {\n opacity: 0 !important;\n display: none !important;\n}\n#sbz92 .markdown-message img {\n max-width: 100% !important;\n margin-top: 10px !important;\n}\n#sbz92 .button-attachments {\n display: block !important;\n margin-top: 5px !important;\n}\n#sbz92 .url-button-attachment:first-child {\n border-top-left-radius: 7px !important;\n border-top-right-radius: 7px !important;\n}\n#sbz92 .url-button-attachment:last-child {\n border-bottom-left-radius: 7px !important;\n border-bottom-right-radius: 7px !important;\n border-bottom: 1px solid '@primary_color' !important;\n}\n#sbz92 .agent-message .url-button-attachment {\n text-decoration: none !important;\n padding: 10px 18px !important;\n display: block !important;\n text-align: center !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n border: 1px solid #000 !important;\n border-radius: 12px !important;\n text-overflow: ellipsis !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n white-space: nowrap !important;\n}\n#sbz92 .agent-message .url-button-attachment:hover {\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n border-color: '@primary_color' !important;\n}\n#sbz92 .message_quick_replies {\n display: flex !important;\n flex-wrap: wrap !important;\n flex-direction: column !important;\n}\n#sbz92 .message_quick_reply {\n cursor: pointer !important;\n position: relative !important;\n padding: 10px 18px !important;\n margin-top: 8px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n border-radius: 12px !important;\n user-select: none !important;\n overflow: hidden !important;\n white-space: nowrap !important;\n width: fit-content !important;\n font-weight: 500 !important;\n max-width: 100% !important;\n text-overflow: ellipsis !important;\n border: 1px solid #000 !important;\n transition: all 100ms ease !important;\n}\n#sbz92 .message_quick_reply:hover {\n background: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n border-color: '@primary_color' !important;\n}\n#sbz92 .generic-attachment-container {\n position: relative !important;\n margin-top: 10px !important;\n}\n#sbz92 .generic-attachments {\n display: block !important;\n}\n#sbz92 .generic-attachment {\n display: flex !important;\n width: 100% !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n user-select: none !important;\n cursor: grab !important;\n}\n#sbz92 .generic-attachment--element-content {\n flex: 1 !important;\n}\n#sbz92 .generic-attachment--element {\n border: 1px solid #d8d8d8 !important;\n background: white !important;\n border-radius: 7px !important;\n overflow: hidden !important;\n width: 220px !important;\n margin-right: 10px !important;\n vertical-align: top !important;\n display: flex !important;\n flex-direction: column !important;\n flex-shrink: 0 !important;\n}\n#sbz92 .generic-attachment--element:last-child {\n margin-right: 0 !important;\n}\n#sbz92 .generic-attachment--element .generic-attachment--element-img {\n width: 100% !important;\n height: 150px !important;\n object-fit: cover !important;\n}\n#sbz92 .generic-attachment--element .url-button-attachment:first-child {\n border-radius: 0 !important;\n}\n#sbz92 .generic-attachment--element .url-button-attachment {\n padding: 10px !important;\n display: block !important;\n padding-top: 9px !important;\n padding-button: 9px !important;\n text-align: center !important;\n border: none !important;\n border-top: 1px solid #d8d8d8 !important;\n width: 100% !important;\n color: #0d6efd !important;\n -webkit-text-fill-color: #0d6efd !important;\n}\n#sbz92 .generic-attachment--element .url-button-attachment:hover {\n color: #024dbc !important;\n -webkit-text-fill-color: #024dbc !important;\n border-color: #d8d8d8 !important;\n}\n#sbz92 .generic-attachment--element .generic-attachment--element-title {\n padding: 0px 13px !important;\n margin-top: 13px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n font-weight: 600 !important;\n font-size: 16px !important;\n line-height: 20px !important;\n white-space: normal !important;\n}\n#sbz92 .generic-attachment--element .generic-attachment--element-subtitle {\n padding: 0px 13px !important;\n color: gray !important;\n -webkit-text-fill-color: gray !important;\n margin-top: 5px !important;\n white-space: pre-wrap !important;\n display: -webkit-box !important;\n -webkit-line-clamp: 4 !important;\n -webkit-box-orient: vertical !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n}\n#sbz92 .generic-attachment--element.clickable {\n cursor: pointer !important;\n}\n#sbz92 .widget_body__events__error_msg {\n margin-top: 50px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n text-align: center !important;\n}\n#sbz92 .widget_body__events__error_retry {\n margin-top: 10px !important;\n}\n#sbz92 .generic-attachment-navigator {\n position: absolute !important;\n top: 50% !important;\n transform: translateY(-50%) !important;\n cursor: pointer !important;\n width: 20px !important;\n font-size: 80px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n color: rgba(255, 255, 255, 0.85) !important;\n -webkit-text-fill-color: rgba(255, 255, 255, 0.85) !important;\n text-shadow: 0 10px 25px rgba(0, 0, 0, 0.75) !important;\n z-index: 999 !important;\n user-select: none !important;\n}\n#sbz92 .generic-attachment-navigator:hover {\n text-shadow: 0 10px 20px rgba(0, 0, 0, 0.75) !important;\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n}\n#sbz92 .generic-attachment-navigator.generic-attachment-navigator--disabled {\n display: none !important;\n}\n#sbz92 .generic-attachment-navigator.generic-attachment-navigator--left {\n left: 2px !important;\n}\n#sbz92 .generic-attachment-navigator.generic-attachment-navigator--right {\n right: 2px !important;\n}\n#sbz92 .generic-attachment-navigator-icon {\n font-size: 80px !important;\n}\n#sbz92 .order_attachment__product_img {\n width: 40px !important;\n height: 40px !important;\n margin-right: 10px !important;\n border-radius: 5px !important;\n flex-shrink: 0 !important;\n display: block !important;\n object-fit: contain !important;\n background: whitesmoke !important;\n}\n#sbz92 .order_attachment__product_name {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n}\n#sbz92 .order_attachment__header {\n padding-bottom: 5px !important;\n border-bottom: 1px solid #ccc !important;\n margin-bottom: 5px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: space-between !important;\n}\n#sbz92 .order_attachment__product_desc {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n color: #999 !important;\n -webkit-text-fill-color: #999 !important;\n font-size: 13px !important;\n}\n#sbz92 .order_attachment__product {\n display: flex !important;\n align-items: center !important;\n margin-top: 5px !important;\n margin-bottom: 5 !important;\n}\n#sbz92 .order_attachment__text_sm {\n font-size: 13px !important;\n}\n#sbz92 .order_attachment__text_muted {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .order_attachment__text_truncate {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .order_attachment {\n margin-top: 10px !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n border: 1px solid #aaa !important;\n background: white !important;\n border-radius: 8px !important;\n width: 220px !important;\n overflow-y: auto !important;\n overflow-x: hidden !important;\n padding: 10px !important;\n}\n#sbz92 .order_attachment__footer {\n margin-top: 10px !important;\n padding-top: 10px !important;\n border-top: 1px solid #ccc !important;\n}\n#sbz92 .order_attachment__total {\n font-size: 16px !important;\n}\n#sbz92 .order_attachment__label {\n font-size: 13px !important;\n color: #777 !important;\n -webkit-text-fill-color: #777 !important;\n margin-top: 10px !important;\n}\n#sbz92 .order_attachment__label.no_margin {\n margin-top: 0 !important;\n}\n#sbz92 .order_attachment.order_attachment__user {\n margin-right: 50px !important;\n align-self: flex-end !important;\n margin-right: 0 !important;\n margin-left: 50px !important;\n align-self: flex-start !important;\n}\n#sbz92 .product_attachment {\n margin-top: 10px !important;\n border: 1px solid #d8d8d8 !important;\n background: white !important;\n border-radius: 7px !important;\n overflow: hidden !important;\n width: 200px !important;\n display: inline-block !important;\n vertical-align: top !important;\n transition: all 0.1s !important;\n}\n#sbz92 .product_attachment.product_attachment__user {\n margin-right: 50px !important;\n align-self: flex-end !important;\n margin-right: 0 !important;\n margin-left: 50px !important;\n align-self: flex-start !important;\n}\n#sbz92 .product_attachment__img {\n width: 200px !important;\n height: 200px !important;\n border-bottom: 1px solid #d8d8d8 !important;\n object-fit: cover !important;\n display: block !important;\n}\n#sbz92 .product_attachment__price {\n padding-left: 10px !important;\n}\n#sbz92 .product_attachment__btns {\n margin-top: 5px !important;\n}\n#sbz92 .product_attachment__btn {\n border-top: 1px solid #d8d8d8 !important;\n display: flex !important;\n padding: 8px 10px !important;\n align-items: center !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n justify-content: center !important;\n cursor: pointer !important;\n text-transform: capitalize !important;\n}\n#sbz92 .product_attachment__btn:last-child {\n margin-right: 0 !important;\n}\n#sbz92 .product_attachment__btn:hover {\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n}\n#sbz92 a.product_attachment__title {\n display: block !important;\n padding: 8px 10px 0 10px !important;\n font-weight: 500 !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n word-break: break-word !important;\n margin-bottom: 5px !important;\n}\n#sbz92 .product_attachment__subtitle {\n white-space: pre-wrap !important;\n display: -webkit-box !important;\n -webkit-line-clamp: 3 !important;\n -webkit-box-orient: vertical !important;\n overflow: hidden !important;\n padding: 5px 10px !important;\n color: #aaa !important;\n -webkit-text-fill-color: #aaa !important;\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n margin-bottom: 5px !important;\n}\n#sbz92 .product_attachment__btn_external_link {\n width: 16px !important;\n height: 16px !important;\n margin-left: 5px !important;\n margin-top: -2px !important;\n}\n#sbz92 .agent-convo-event-wrapper {\n max-width: 85% !important;\n margin-top: 5px !important;\n}\n#sbz92 .agent-convo-event-wrapper.full {\n max-width: 100% !important;\n}\n#sbz92 .agent-convo-event-inner {\n position: relative !important;\n display: inline-block !important;\n max-width: 100% !important;\n}\n#sbz92 .message-event-actions {\n position: absolute !important;\n bottom: -10px !important;\n opacity: 0.7 !important;\n left: calc(100% - 25px) !important;\n display: none !important;\n border: 1px solid #dee2e6 !important;\n background-color: white !important;\n border-radius: 4px !important;\n z-index: 10 !important;\n}\n#sbz92 .message-event-actions.ended {\n bottom: -10px !important;\n}\n#sbz92 .message-event-actions:hover {\n opacity: 1 !important;\n}\n#sbz92 .agent-convo-event-inner:hover .message-event-actions {\n display: flex !important;\n}\n#sbz92 .message-event-actions-static {\n display: none !important;\n margin-top: 2px !important;\n border: none !important;\n padding: 0 !important;\n gap: 4px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-actions {\n display: none !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-actions-static {\n display: flex !important;\n position: absolute !important;\n bottom: -30px !important;\n left: 0 !important;\n z-index: 2 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn {\n padding: 0 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn .message-event-action-btn-svg {\n width: 24px !important;\n height: 24px !important;\n background-position: 2px 2px !important;\n background-size: 20px 20px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n padding-right: 10px !important;\n border-radius: 5px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev .message-event-action-btn-svg {\n width: 24px !important;\n height: 24px !important;\n background-position: 2px 2px !important;\n background-size: 20px 20px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev:hover {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev.message-event-action-btn_like.active {\n color: #34c759 !important;\n -webkit-text-fill-color: #34c759 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev.message-event-action-btn_like.active {\n color: #34c759 !important;\n -webkit-text-fill-color: #34c759 !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev:hover {\n background-color: unset !important;\n}\n#sbz92 .message-event-action-btn {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n cursor: pointer !important;\n padding: 2px !important;\n}\n#sbz92 .message-event-action-btn:hover {\n background-color: #ececec !important;\n}\n#sbz92 .message-event-action-btn.active:hover {\n background-color: #dbfde3 !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev {\n padding: 0px !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev:hover {\n background-color: unset !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev.active:hover {\n background-color: unset !important;\n}\n#sbz92 .message-event-action-btn .message-event-action-btn-svg {\n width: 20px !important;\n height: 20px !important;\n border-radius: 4px !important;\n background-position: 2px 2px !important;\n background-size: 16px 16px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n}\n#sbz92 .message-event-action-btn-svg.like {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IiM2Yzc1N2QiICBzdHJva2Utd2lkdGg9IjIiICBzdHJva2UtbGluZWNhcD0icm91bmQiICBzdHJva2UtbGluZWpvaW49InJvdW5kIiAgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGh1bWItdXAiPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDExdjhhMSAxIDAgMCAxIC0xIDFoLTJhMSAxIDAgMCAxIC0xIC0xdi03YTEgMSAwIDAgMSAxIC0xaDNhNCA0IDAgMCAwIDQgLTR2LTFhMiAyIDAgMCAxIDQgMHY1aDNhMiAyIDAgMCAxIDIgMmwtMSA1YTIgMyAwIDAgMSAtMiAyaC03YTMgMyAwIDAgMSAtMyAtMyIgLz48L3N2Zz4K') !important;\n}\n#sbz92 .message-event-action-btn-svg.dislike {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IiM2Yzc1N2QiICBzdHJva2Utd2lkdGg9IjIiICBzdHJva2UtbGluZWNhcD0icm91bmQiICBzdHJva2UtbGluZWpvaW49InJvdW5kIiAgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGh1bWItZG93biI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTcgMTN2LThhMSAxIDAgMCAwIC0xIC0xaC0yYTEgMSAwIDAgMCAtMSAxdjdhMSAxIDAgMCAwIDEgMWgzYTQgNCAwIDAgMSA0IDR2MWEyIDIgMCAwIDAgNCAwdi01aDNhMiAyIDAgMCAwIDIgLTJsLTEgLTVhMiAzIDAgMCAwIC0yIC0yaC03YTMgMyAwIDAgMCAtMyAzIiAvPjwvc3ZnPgo=') !important;\n}\n#sbz92 .message-event-action-btn-svg.info {\n background-image: url('data:image/svg+xml;base64,PHN2ZwogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICB3aWR0aD0iMjQiCiAgaGVpZ2h0PSIyNCIKICB2aWV3Qm94PSIwIDAgMjQgMjQiCiAgZmlsbD0ibm9uZSIKICBzdHJva2U9IiM2Yzc1N2QiCiAgc3Ryb2tlLXdpZHRoPSIyIgogIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICBzdHJva2UtbGluZWpvaW49InJvdW5kIgo+CiAgPHBhdGggZD0iTTMgMTJhOSA5IDAgMSAwIDE4IDBhOSA5IDAgMCAwIC0xOCAwIiAvPgogIDxwYXRoIGQ9Ik0xMiA5aC4wMSIgLz4KICA8cGF0aCBkPSJNMTEgMTJoMXY0aDEiIC8+Cjwvc3ZnPgo=') !important;\n}\n#sbz92 .message-event-action-btn:hover .message-event-action-btn-svg.like {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9ImJsYWNrIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgIGNsYXNzPSJpY29uIGljb24tdGFibGVyIGljb25zLXRhYmxlci1vdXRsaW5lIGljb24tdGFibGVyLXRodW1iLXVwIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNyAxMXY4YTEgMSAwIDAgMSAtMSAxaC0yYTEgMSAwIDAgMSAtMSAtMXYtN2ExIDEgMCAwIDEgMSAtMWgzYTQgNCAwIDAgMCA0IC00di0xYTIgMiAwIDAgMSA0IDB2NWgzYTIgMiAwIDAgMSAyIDJsLTEgNWEyIDMgMCAwIDEgLTIgMmgtN2EzIDMgMCAwIDEgLTMgLTMiIC8+PC9zdmc+Cg==') !important;\n}\n#sbz92 .message-event-action-btn:hover .message-event-action-btn-svg.dislike {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9ImJsYWNrIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgIGNsYXNzPSJpY29uIGljb24tdGFibGVyIGljb25zLXRhYmxlci1vdXRsaW5lIGljb24tdGFibGVyLXRodW1iLWRvd24iPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDEzdi04YTEgMSAwIDAgMCAtMSAtMWgtMmExIDEgMCAwIDAgLTEgMXY3YTEgMSAwIDAgMCAxIDFoM2E0IDQgMCAwIDEgNCA0djFhMiAyIDAgMCAwIDQgMHYtNWgzYTIgMiAwIDAgMCAyIC0ybC0xIC01YTIgMyAwIDAgMCAtMiAtMmgtN2EzIDMgMCAwIDAgLTMgMyIgLz48L3N2Zz4K') !important;\n}\n#sbz92 .message-event-action-btn:hover .message-event-action-btn-svg.info {\n background-image: url('data:image/svg+xml;base64,PHN2ZwogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICB3aWR0aD0iMjQiCiAgaGVpZ2h0PSIyNCIKICB2aWV3Qm94PSIwIDAgMjQgMjQiCiAgZmlsbD0ibm9uZSIKICBzdHJva2U9IiMwMDAiCiAgc3Ryb2tlLXdpZHRoPSIyIgogIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICBzdHJva2UtbGluZWpvaW49InJvdW5kIgo+CiAgPHBhdGggZD0iTTMgMTJhOSA5IDAgMSAwIDE4IDBhOSA5IDAgMCAwIC0xOCAwIiAvPgogIDxwYXRoIGQ9Ik0xMiA5aC4wMSIgLz4KICA8cGF0aCBkPSJNMTEgMTJoMXY0aDEiIC8+Cjwvc3ZnPgo=') !important;\n}\n#sbz92 .message-event-action-btn.active .message-event-action-btn-svg.like {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9IiMzNEM3NTkiICBjbGFzcz0iaWNvbiBpY29uLXRhYmxlciBpY29ucy10YWJsZXItZmlsbGVkIGljb24tdGFibGVyLXRodW1iLXVwIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTMgM2EzIDMgMCAwIDEgMi45OTUgMi44MjRsLjAwNSAuMTc2djRoMmEzIDMgMCAwIDEgMi45OCAyLjY1bC4wMTUgLjE3NGwuMDA1IC4xNzZsLS4wMiAuMTk2bC0xLjAwNiA1LjAzMmMtLjM4MSAxLjYyNiAtMS41MDIgMi43OTYgLTIuODEgMi43OGwtLjE2NCAtLjAwOGgtOGExIDEgMCAwIDEgLS45OTMgLS44ODNsLS4wMDcgLS4xMTdsLjAwMSAtOS41MzZhMSAxIDAgMCAxIC41IC0uODY1YTIuOTk4IDIuOTk4IDAgMCAwIDEuNDkyIC0yLjM5N2wuMDA3IC0uMjAydi0xYTMgMyAwIDAgMSAzIC0zeiIgLz48cGF0aCBkPSJNNSAxMGExIDEgMCAwIDEgLjk5MyAuODgzbC4wMDcgLjExN3Y5YTEgMSAwIDAgMSAtLjg4MyAuOTkzbC0uMTE3IC4wMDdoLTFhMiAyIDAgMCAxIC0xLjk5NSAtMS44NWwtLjAwNSAtLjE1di03YTIgMiAwIDAgMSAxLjg1IC0xLjk5NWwuMTUgLS4wMDVoMXoiIC8+PC9zdmc+Cg==') !important;\n}\n#sbz92 .message-event-action-btn.active .message-event-action-btn-svg.dislike {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzI0ODBfOTUpIj4KPHBhdGggZD0iTTEzIDIxLjAwNzlDMTMuNzY1IDIxLjAwOCAxNC41MDEyIDIwLjcxNTcgMTUuMDU3OSAyMC4xOTFDMTUuNjE0NyAxOS42NjYyIDE1Ljk0OTkgMTguOTQ4NiAxNS45OTUgMTguMTg0OUwxNiAxOC4wMDc5VjE0LjAwNzlIMThDMTguNzM1MSAxNC4wMDggMTkuNDQ0NyAxMy43MzgyIDE5Ljk5NCAxMy4yNDk3QzIwLjU0MzQgMTIuNzYxMiAyMC44OTQyIDEyLjA4OCAyMC45OCAxMS4zNTc5TDIwLjk5NSAxMS4xODQ5TDIxIDExLjAwNzlMMjAuOTggMTAuODExOUwxOS45NzQgNS43Nzk5MkMxOS41OTMgNC4xNTQ5MiAxOC40NzIgMi45ODM5MiAxNy4xNjQgMi45OTk5MkwxNyAzLjAwNzkySDlDOC43NTQ5MSAzLjAwNzk4IDguNTE4MzggMy4wOTgwNCA4LjMzNTMzIDMuMjYxMDFDOC4xNTIyNyAzLjQyMzk3IDguMDM1NDMgMy42NDg0OSA4LjAwNyAzLjg5MTkyTDggNC4wMDc5Mkw4LjAwMSAxMy41NDM5QzguMDAxIDEzLjcxOTUgOC4wNDcyMSAxMy44OTE5IDguMTM0OTggMTQuMDQzOUM4LjIyMjc1IDE0LjE5NTkgOC4zNDg5OCAxNC4zMjIyIDguNTAxIDE0LjQwOTlDOC45MjcyOSAxNC42NTYxIDkuMjg2NCAxNS4wMDM1IDkuNTQ2NjEgMTUuNDIxM0M5LjgwNjgyIDE1LjgzOTIgOS45NjAxMyAxNi4zMTQ3IDkuOTkzIDE2LjgwNTlMMTAgMTcuMDA3OVYxOC4wMDc5QzEwIDE4LjgwMzYgMTAuMzE2MSAxOS41NjY2IDEwLjg3ODcgMjAuMTI5MkMxMS40NDEzIDIwLjY5MTggMTIuMjA0NCAyMS4wMDc5IDEzIDIxLjAwNzlaIiBmaWxsPSIjMzMzMzMzIi8+CjxwYXRoIGQ9Ik01IDE0LjAwODFDNS4yNDQ5MyAxNC4wMDggNS40ODEzNCAxMy45MTgxIDUuNjY0MzcgMTMuNzU1M0M1Ljg0NzQxIDEzLjU5MjYgNS45NjQzNCAxMy4zNjgzIDUuOTkzIDEzLjEyNTFMNiAxMy4wMDgxVjQuMDA4MDZDNS45OTk5NyAzLjc2MzEyIDUuOTEwMDQgMy41MjY3MiA1Ljc0NzI4IDMuMzQzNjhDNS41ODQ1MyAzLjE2MDY1IDUuMzYwMjUgMy4wNDM3MSA1LjExNyAzLjAxNTA2TDUgMy4wMDgwNkg0QzMuNDk1MSAzLjAwNzkzIDMuMDA4ODQgMy4xOTg3OCAyLjYzODgxIDMuNTQyMjlDMi4yNjg3OCAzLjg4NTc5IDIuMDQyMzYgNC4zNTY1NCAyLjAwNSA0Ljg2MDA2TDIgNS4wMTAwNlYxMi4wMTAxQzIuMDAwMDkgMTIuNTE0NSAyLjE5MDc3IDEzLjAwMDIgMi41MzM4NCAxMy4zN0MyLjg3NjkgMTMuNzM5NyAzLjM0NzAyIDEzLjk2NjIgMy44NSAxNC4wMDQxTDQgMTQuMDA5MUw1IDE0LjAwODFaIiBmaWxsPSIjMzMzMzMzIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMjQ4MF85NSI+CjxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K') !important;\n}\n#sbz92 .inline-time {\n font-size: 13px !important;\n margin-top: 6px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n font-weight: 500 !important;\n opacity: 0.4 !important;\n}\n#sbz92 .message-text-inline-image-wrapper {\n display: block !important;\n margin-top: 8px !important;\n margin-bottom: 8px !important;\n max-width: 100% !important;\n}\n#sbz92 .message-text-inline-image {\n width: 100% !important;\n}\n#sbz92 .text-message-ul {\n display: block !important;\n list-style-type: disc !important;\n margin-block-start: 8px !important;\n margin-block-end: 8px !important;\n padding-inline-start: 20px !important;\n}\n#sbz92 .text-message-ol {\n display: block !important;\n list-style-type: decimal !important;\n margin-block-start: 8px !important;\n margin-block-end: 8px !important;\n padding-inline-start: 20px !important;\n}\n#sbz92 .text-message-li {\n display: list-item !important;\n}\n#sbz92 .agent-message .text-message-link {\n color: #0d6efd !important;\n -webkit-text-fill-color: #0d6efd !important;\n font-weight: 400 !important;\n}\n#sbz92 .agent-message .text-message-link:hover {\n color: #024dbc !important;\n -webkit-text-fill-color: #024dbc !important;\n}\n#sbz92 .user-message .text-message-link {\n text-decoration: underline !important;\n text-decoration-color: rgba(255, 255, 255, 0.6) !important;\n text-underline-offset: 4px !important;\n}\n#sbz92 .user-message .text-message-link:hover {\n text-decoration-color: #fff !important;\n background-color: rgba(255, 255, 255, 0.08) !important;\n}\n#sbz92 .message-quote {\n padding: 6px 10px !important;\n border-left: 3px solid '@primary_color' !important;\n background-color: #dfdfdf !important;\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n margin-bottom: 8px !important;\n max-width: 100% !important;\n}\n#sbz92 .message-quote-title {\n font-weight: 600 !important;\n font-size: 14px !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .message-quote-content {\n opacity: 0.7 !important;\n color: '@secondary_color' !important;\n -webkit-text-fill-color: '@secondary_color' !important;\n font-size: 14px !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .message-quote-inner-img {\n width: 36px !important;\n height: 36px !important;\n object-fit: cover !important;\n}\n#sbz92 .message-quote-inner {\n margin-left: 15px !important;\n flex: 1 !important;\n overflow: hidden !important;\n}\n#sbz92 .image-attachment.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .file-attachment.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .widget_body_empty_img {\n max-width: 150px !important;\n max-height: 150px !important;\n}\n#sbz92 .emoji {\n position: relative !important;\n width: 20px !important;\n height: 20px !important;\n background-size: 100% !important;\n background-repeat: no-repeat !important;\n border: none !important;\n display: inline-block !important;\n vertical-align: text-bottom !important;\n}\n#sbz92 .emoji--angry {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_1___ + ") !important;\n}\n#sbz92 .emoji--confused {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_2___ + ") !important;\n}\n#sbz92 .emoji--crying,\n#sbz92 .emoji--cry {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_3___ + ") !important;\n}\n#sbz92 .emoji--grinning {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_4___ + ") !important;\n}\n#sbz92 .emoji--heart_eyes,\n#sbz92 .emoji--heart-eyes {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_5___ + ") !important;\n}\n#sbz92 .emoji--neutral_face,\n#sbz92 .emoji--neutral {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_6___ + ") !important;\n}\n#sbz92 .emoji--disappointed,\n#sbz92 .emoji--sad {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_7___ + ") !important;\n}\n#sbz92 .emoji--sleepy {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_8___ + ") !important;\n}\n#sbz92 .emoji--smile,\n#sbz92 .emoji--smiling {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_9___ + ") !important;\n}\n#sbz92 .emoji--open_mouth,\n#sbz92 .emoji--surprised {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_10___ + ") !important;\n}\n#sbz92 .emoji--tired_face,\n#sbz92 .emoji--tired {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_11___ + ") !important;\n}\n#sbz92 .emoji--stuck_out_tongue,\n#sbz92 .emoji--tongue-out {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_12___ + ") !important;\n}\n#sbz92 .emoji--wink {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_13___ + ") !important;\n}\n#sbz92 .emoji--moyai {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_14___ + ") !important;\n}\n#sbz92 .emoji--dislike,\n#sbz92 .emoji--unlike,\n#sbz92 .emoji--thumbsdown {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_15___ + ") !important;\n}\n#sbz92 .emoji--like,\n#sbz92 .emoji--thumbsup {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_16___ + ") !important;\n}\n#sbz92 .emoji--ok_hand {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_17___ + ") !important;\n}\n#sbz92 .emoji--octopus {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_18___ + ") !important;\n}\n#sbz92 .emoji--pig2 {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_19___ + ") !important;\n}\n#sbz92 .emoji--wave {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_20___ + ") !important;\n}\n#sbz92 .emoji--mouse {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_21___ + ") !important;\n}\n#sbz92 .emoji--mouse2 {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_22___ + ") !important;\n}\n#sbz92 .emoji--rat {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_23___ + ") !important;\n}\n#sbz92 .emoji-picker {\n display: flex !important;\n flex-direction: row !important;\n z-index: 20 !important;\n position: absolute !important;\n max-width: 240px !important;\n background: #fff !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n border-radius: 10px !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n right: 15px !important;\n bottom: 55px !important;\n flex-wrap: wrap !important;\n padding: 10px !important;\n justify-content: space-between !important;\n align-items: center !important;\n}\n#sbz92 .emoji-picker--item {\n background-size: 100% !important;\n width: 30px !important;\n height: 30px !important;\n position: relative !important;\n background-repeat: no-repeat !important;\n display: inline-block !important;\n vertical-align: text-bottom !important;\n margin: 5px !important;\n cursor: pointer !important;\n transition: background-color 0.2s !important;\n}\n#sbz92 .emoji-picker-background-item {\n background-size: 50% !important;\n width: 40px !important;\n height: 40px !important;\n border-radius: 100% !important;\n}\n#sbz92 .emoji-picker-background-item:hover {\n background-color: #dee2e6 !important;\n}\n#sbz92 .convo-list {\n display: flex !important;\n flex-direction: column !important;\n flex: 1 !important;\n width: 100% !important;\n justify-content: space-between !important;\n overflow: auto !important;\n margin-top: -60px !important;\n padding-left: 22.5px !important;\n padding-right: 22.5px !important;\n}\n#sbz92 .convo-list--list {\n background: #fff !important;\n overflow-y: auto !important;\n overflow-x: hidden !important;\n}\n#sbz92 .convo-list--title {\n font-weight: 500 !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n background: #fff !important;\n border-bottom: 1px solid #f0f0f0 !important;\n padding: 15px !important;\n}\n#sbz92 .convo-list--container {\n border-radius: 10px !important;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1) !important;\n overflow: auto !important;\n display: flex !important;\n flex-direction: column !important;\n user-select: none !important;\n}\n#sbz92 .convo-list--footer {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n margin-top: 22.5px !important;\n}\n#sbz92 .convo-list--convo-last-info {\n overflow: hidden !important;\n white-space: nowrap !important;\n justify-content: center !important;\n display: flex !important;\n flex-direction: column !important;\n flex: 1 !important;\n margin-left: 15px !important;\n}\n#sbz92 .convo-list--convo-last-message {\n font-weight: normal !important;\n flex: 1 !important;\n cursor: pointer !important;\n display: flex !important;\n width: 100% !important;\n overflow: hidden !important;\n align-items: center !important;\n}\n#sbz92 .convo-list--convo-last-mes {\n text-overflow: ellipsis !important;\n opacity: 0.6 !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: normal !important;\n}\n#sbz92 .convo-list--convo-title {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n}\n#sbz92 .convo-list--convo-completed {\n width: 14px !important;\n}\n#sbz92 .convo-list--convo-name {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n flex: 1 !important;\n margin-right: 16px !important;\n cursor: pointer !important;\n}\n#sbz92 .convo-list--item {\n cursor: pointer !important;\n border-bottom: 1px solid '@primary_color_faded' !important;\n padding: 15px !important;\n display: flex !important;\n flex-direction: row !important;\n transition: background 0.15s ease !important;\n}\n#sbz92 .convo-list--item:hover {\n background: '@primary_color_faded' !important;\n}\n#sbz92 .convo-list--convo-time span {\n font-size: 14px !important;\n line-height: 20px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n opacity: 0.6 !important;\n min-width: 70px !important;\n cursor: pointer !important;\n}\n#sbz92 .convo-list--item-unread {\n width: 8px !important;\n height: 8px !important;\n background: #dc3545 !important;\n border-radius: 50% !important;\n margin-left: 15px !important;\n align-self: center !important;\n}\n#sbz92 .convo-list--item-avatar {\n width: 32px !important;\n height: 32px !important;\n}\n#sbz92 .widget-body--empty {\n display: flex !important;\n flex: 1 !important;\n justify-content: center !important;\n align-items: center !important;\n flex-direction: column !important;\n}\n#sbz92 .widget-body--empty-text {\n color: #343a40 !important;\n -webkit-text-fill-color: #343a40 !important;\n margin-top: 30px !important;\n text-align: center !important;\n}\n#sbz92 .widget-body--empty-icon {\n width: 128px !important;\n height: 128px !important;\n -webkit-mask-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cg%20data-name%3D%22Layer%202%22%3E%3Cpath%20d%3D%22M130.9%20366.9a9.9%209.9%200%200%200-2.9%207.1%2010.33%2010.33%200%200%200%202.9%207.1%209.73%209.73%200%200%200%207.1%202.9%2010.33%2010.33%200%200%200%207.1-2.9%209.73%209.73%200%200%200%202.9-7.1%2010.52%2010.52%200%200%200-2.9-7.1%209.9%209.9%200%200%200-7.1-2.9%2010.33%2010.33%200%200%200-7.1%202.9zM483.7%20282a183.07%20183.07%200%200%200%2028.3-98C512%2082.5%20429.5%200%20328%200a183.16%20183.16%200%200%200-96%2027%2010%2010%200%200%200%2010.5%2017.1A162.67%20162.67%200%200%201%20328%2020c90.4%200%20164%2073.6%20164%20164a162.73%20162.73%200%200%201-27.9%2091.5%2010.07%2010.07%200%200%200%20.3%2011.6l11%2040.9-44-11.8a10%2010%200%200%200-8.4%201.5%20164.32%20164.32%200%200%201-151.8%2020.2%20138.68%20138.68%200%200%200-97.1-97.1%20164.31%20164.31%200%200%201%2014.5-143.2%2010%2010%200%200%200-17-10.6%20184%20184%200%200%200-19.9%20149.6c-4.5-.4-9.1-.7-13.7-.7C61.9%20236%200%20297.9%200%20374a136.88%20136.88%200%200%200%2022.9%2076.1L12.2%20490a10%2010%200%200%200%2012.3%2012.3l40.9-11a137.71%20137.71%200%200%200%20146.5-.8%2010%2010%200%200%200-10.7-16.9%20118.09%20118.09%200%200%201-128.6-1.5%209.73%209.73%200%200%200-8.1-1.3L36%20478.5l7.4-27.7a10%2010%200%200%200-1.5-8.4%20117.95%20117.95%200%201%201%20207-28%2010%2010%200%200%200%2018.8%206.8%20137.72%20137.72%200%200%200%208.3-47.3%20124.44%20124.44%200%200%200-.7-13.7%20183.93%20183.93%200%200%200%20155.3-23.6l56.2%2015.1a10%2010%200%200%200%2012.3-12.3zm-246%20162.2a10.52%2010.52%200%200%200-7.1%202.9%209.73%209.73%200%200%200-2.9%207.1%2010.33%2010.33%200%200%200%202.9%207.1%209.73%209.73%200%200%200%207.1%202.9%2010.52%2010.52%200%200%200%207.1-2.9%209.73%209.73%200%200%200%202.9-7.1%209.9%209.9%200%200%200-10-10zM205.3%2070.7a10.52%2010.52%200%200%200%207.1-2.9%209.73%209.73%200%200%200%202.9-7.1%2010.14%2010.14%200%200%200-2.9-7.1%209.9%209.9%200%200%200-7.1-2.9%2010.52%2010.52%200%200%200-7.1%202.9%209.9%209.9%200%200%200-2.9%207.1%2010.52%2010.52%200%200%200%202.9%207.1%209.9%209.9%200%200%200%207.1%202.9zm-19.4%20296.2a9.9%209.9%200%200%200-2.9%207.1%2010.33%2010.33%200%200%200%202.9%207.1%209.73%209.73%200%200%200%207.1%202.9%2010.33%2010.33%200%200%200%207.1-2.9%209.73%209.73%200%200%200%202.9-7.1%2010.33%2010.33%200%200%200-2.9-7.1%209.9%209.9%200%200%200-7.1-2.9%2010.33%2010.33%200%200%200-7.1%202.9zm210.8-201.1a9.8%209.8%200%200%200%205.2-1.5l1.3-.8a9.92%209.92%200%200%200%203.3-13.7%2010.06%2010.06%200%200%200-13.8-3.3l-1.3.8a10%2010%200%200%200%205.3%2018.5zm-68.1%20107.4a58%2058%200%200%200%2057.9-57.9%207%207%200%200%200-7-7H277.7a7%207%200%200%200-7%207%2058%2058%200%200%200%2057.9%2057.9zm-43.5-50.9h87.1l-1%203.7a43.93%2043.93%200%200%201-85.2%200zm-25.8-56.5a9.8%209.8%200%200%200%205.2-1.5l1.3-.8a9.92%209.92%200%200%200%203.3-13.7%2010.06%2010.06%200%200%200-13.8-3.3l-1.3.8a10%2010%200%200%200%205.3%2018.5zM75.9%20366.9A9.9%209.9%200%200%200%2073%20374a10.33%2010.33%200%200%200%202.9%207.1A9.73%209.73%200%200%200%2083%20384a10.33%2010.33%200%200%200%207.1-2.9A9.73%209.73%200%200%200%2093%20374a10.33%2010.33%200%200%200-2.9-7.1A9.9%209.9%200%200%200%2083%20364a10.33%2010.33%200%200%200-7.1%202.9z%22%20fill%3D%22%234285f4%22%20data-name%3D%22Capa%201%22/%3E%3C/g%3E%3C/svg%3E') !important;\n border-radius: 0 !important;\n background-color: '@primary_color' !important;\n}\n#sbz92 .mobile .widget-container {\n border-radius: 0px !important;\n max-height: 100% !important;\n margin-bottom: 0 !important;\n top: auto !important;\n left: 0 !important;\n right: 0 !important;\n width: 100% !important;\n height: '@mobile_height' !important;\n opacity: 1 !important;\n transition: opacity 0.15s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .mobile .widget-container.widget-container--left {\n left: 0 !important;\n right: 0 !important;\n}\n#sbz92 .mobile .widget-container.widget-container--right {\n right: 0 !important;\n left: 0 !important;\n}\n#sbz92 .mobile .widget-container.widget-container--hide {\n top: -100vh !important;\n opacity: 0 !important;\n transition: opacity 0.15s cubic-bezier(1, 0.5, 0.8, 1), bottom 0.15s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .widget-container.widget-container--left {\n left: '@desktop_button.margin_x' !important;\n right: unset !important;\n}\n#sbz92 .widget-container.widget-container--right {\n right: '@desktop_button.margin_x' !important;\n left: unset !important;\n}\n#sbz92 .widget-container {\n max-height: 100% !important;\n max-height: '@desktop_widget_max_height' !important;\n max-width: 100% !important;\n background: #fff !important;\n z-index: '@z_index_3' !important;\n border-radius: 15px !important;\n box-shadow: 0 5px 25px 0 rgba(0, 0, 0, 0.13) !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n position: '@widget_position' !important;\n margin-bottom: '@desktop_button.margin_y' !important;\n width: '@width' !important;\n height: '@height' !important;\n bottom: 0 !important;\n opacity: 1 !important;\n transform: translateY(0) !important;\n transition: transform 0.15s cubic-bezier(1, 0.5, 0.8, 1), opacity 0.2s cubic-bezier(1, 0.5, 0.8, 1), scale 0.15s ease !important;\n visibility: visible !important;\n overflow: hidden !important;\n}\n#sbz92 .widget-container.widget-container--full {\n max-height: 100% !important;\n height: 100% !important;\n margin-bottom: 0 !important;\n}\n#sbz92 .widget-container.widget-container--hide {\n opacity: 0 !important;\n transform: translateY(20px) !important;\n visibility: hidden !important;\n transition: transform 0.15s cubic-bezier(1, 0.5, 0.8, 1), opacity 0.1s cubic-bezier(1, 0.5, 0.8, 1), visibility 0.1s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .btn--start-convo {\n border-radius: 7px !important;\n flex-shrink: 0 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n padding-left: 32px !important;\n padding-right: 32px !important;\n height: 42px !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n font-size: 16px !important;\n font-weight: 500 !important;\n line-height: 20px !important;\n text-align: center !important;\n background: '@primary_color' !important;\n width: 100% !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n transition: filter 250ms ease !important;\n}\n#sbz92 .btn--start-convo::after {\n display: none !important;\n}\n#sbz92 .btn--start-convo:hover {\n filter: brightness(1.1) !important;\n}\n#sbz92 .btn--start-convo:disabled {\n opacity: 0.5 !important;\n cursor: default !important;\n pointer-events: none !important;\n}\n#sbz92 .widget-body.widget-body--none {\n display: none !important;\n}\n#sbz92 .widget-body {\n flex: 1 !important;\n flex-grow: 1 !important;\n z-index: -1 !important;\n width: 100% !important;\n overflow-y: auto !important;\n flex-direction: column !important;\n display: flex !important;\n position: relative !important;\n}\n#sbz92 .embed-chat .widget-body--events {\n width: 600px !important;\n margin: 0 auto !important;\n max-width: 100% !important;\n}\n#sbz92 .embed-chat .message-input {\n max-width: 600px !important;\n margin: 20px auto !important;\n}\n#sbz92 .embed-chat .widget-header--inner {\n max-width: 100% !important;\n width: 600px !important;\n}\n#sbz92 .embed-chat .widget-body--content {\n width: 600px !important;\n margin: 0 auto !important;\n max-width: 100% !important;\n}\n#sbz92 .embed-chat .convo-list {\n width: 600px !important;\n margin: 0 auto !important;\n max-width: 100% !important;\n}\n#sbz92 .widget-body--content {\n overflow-y: auto !important;\n overflow-x: hidden !important;\n flex: 1 !important;\n display: flex !important;\n flex-direction: column !important;\n position: relative !important;\n min-height: 0 !important;\n}\n#sbz92 .poweredby {\n margin-bottom: 15px !important;\n text-align: center !important;\n}\n#sbz92 .poweredby .poweredby--text {\n text-decoration: none !important;\n font-size: 13px !important;\n color: #7c7c7c !important;\n -webkit-text-fill-color: #7c7c7c !important;\n vertical-align: baseline !important;\n}\n#sbz92 .poweredby .poweredby--text .poweredby--subiz-logo {\n opacity: 0.7 !important;\n margin-top: -1px !important;\n height: 12px !important;\n}\n#sbz92 .poweredby .poweredby--text:hover {\n color: #333 !important;\n -webkit-text-fill-color: #333 !important;\n}\n#sbz92 .poweredby .poweredby--text:hover .poweredby--subiz-logo {\n opacity: 1 !important;\n}\n#sbz92 .empty-container {\n display: flex !important;\n justify-content: center !important;\n flex-direction: column !important;\n margin-top: 30px !important;\n margin-bottom: 30px !important;\n}\n#sbz92 .empty-desc {\n text-align: center !important;\n margin: 30px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .chat-button--white-bg {\n display: none !important;\n z-index: -1 !important;\n}\n#sbz92 .chat-button--white-bg--mask-only {\n background: white !important;\n width: 66px !important;\n height: 66px !important;\n top: 2px !important;\n left: 2px !important;\n position: absolute !important;\n border-radius: 50% !important;\n display: block !important;\n}\n#sbz92 .mobile .chat-button--default {\n width: '@mobile_button.width' !important;\n height: '@mobile_button.height' !important;\n background: '@background' !important;\n border-radius: '@mobile_button.border_radius' !important;\n}\n#sbz92 .mobile .widget-layout {\n bottom: '@mobile_button.margin_y' !important;\n}\n#sbz92 .mobile .widget-layout.widget-layout--left {\n left: '@mobile_button.margin_x' !important;\n right: unset !important;\n}\n#sbz92 .mobile .widget-layout.widget-layout--right {\n right: '@mobile_button.margin_x' !important;\n left: unset !important;\n}\n#sbz92 .mobile .chat-button--img {\n min-width: '@mobile_button.width' !important;\n}\n#sbz92 .chat-button {\n cursor: pointer !important;\n position: relative !important;\n scale: 1 !important;\n transition: filter 250ms ease, opacity 0.15s ease-in, scale 0.125s ease-in-out, transform 0.2s ease-in-out !important;\n}\n#sbz92 .chat-button.hidden {\n opacity: 0 !important;\n}\n#sbz92 .chat-button:hover {\n filter: brightness(1.1) !important;\n scale: 1.05 !important;\n}\n#sbz92 .chat-button--img {\n opacity: 0 !important;\n min-width: '@desktop_button.width' !important;\n display: block !important;\n}\n#sbz92 .chat-button.chat-button--left {\n float: left !important;\n}\n#sbz92 .chat-button.chat-button--right {\n float: right !important;\n}\n#sbz92 .widget-layout {\n z-index: '@z_index_2' !important;\n position: '@widget_position' !important;\n bottom: '@desktop_button.margin_y' !important;\n transition: opacity 150ms !important;\n opacity: 1 !important;\n}\n#sbz92 .widget-layout.widget-layout--hidden {\n opacity: 0 !important;\n pointer-events: none !important;\n}\n#sbz92 .widget-layout.widget-layout--left {\n left: '@desktop_button.margin_x' !important;\n right: unset !important;\n}\n#sbz92 .widget-layout.widget-layout--right {\n right: '@desktop_button.margin_x' !important;\n left: unset !important;\n}\n#sbz92 .chat-button--unread {\n position: absolute !important;\n right: 0px !important;\n top: -5px !important;\n background: #dc3545 !important;\n padding-left: 5px !important;\n padding-right: 5px !important;\n padding-top: 2px !important;\n padding-bottom: 2px !important;\n border-radius: 5px !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n}\n#sbz92 .widget-preview {\n z-index: '@z_index_3' !important;\n background: #fff !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n border-radius: 15px !important;\n max-width: 100% !important;\n width: 340px !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .widget-preview.widget-preview--hidden {\n display: none !important;\n}\n#sbz92 .widget-preview--btn-close {\n cursor: pointer !important;\n opacity: 0.5 !important;\n align-self: flex-start !important;\n background-color: #e5e5e5 !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzMzMiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXIteCI+PGxpbmUgeDE9IjE4IiB5MT0iNiIgeDI9IjYiIHkyPSIxOCI+PC9saW5lPjxsaW5lIHgxPSI2IiB5MT0iNiIgeDI9IjE4IiB5Mj0iMTgiPjwvbGluZT48L3N2Zz4K') !important;\n background-size: 16px 16px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n border-radius: 100% !important;\n transition: background-color 0.2s !important;\n}\n#sbz92 .widget-preview--btn-close:hover {\n opacity: 1 !important;\n}\n#sbz92 .widget-preview--avatar {\n width: 45px !important;\n height: 45px !important;\n border: 1px solid rgba(31, 54, 90, 0.1) !important;\n border-radius: 100% !important;\n margin-right: 15px !important;\n}\n#sbz92 .widget-preview--body {\n display: flex !important;\n padding: 15px !important;\n}\n#sbz92 .widget-preview--title {\n display: block !important;\n font-size: 15px !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n margin-bottom: 5px !important;\n opacity: 0.7 !important;\n}\n#sbz92 .widget-preview--content {\n cursor: pointer !important;\n flex: 1 !important;\n overflow: hidden !important;\n}\n#sbz92 .widget-preview--message {\n white-space: pre-wrap !important;\n word-wrap: break-word !important;\n font-weight: 500 !important;\n font-size: 16px !important;\n display: block !important;\n margin: 0 !important;\n margin-bottom: 0px !important;\n max-height: 78px !important;\n overflow: hidden !important;\n}\n#sbz92 .widget-preview--action {\n border-top: 1px solid #f0f0f0 !important;\n cursor: pointer !important;\n padding: 13px !important;\n}\n#sbz92 .widget-preview--action-text {\n display: block !important;\n text-align: center !important;\n font-weight: 500 !important;\n font-size: 16px !important;\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n margin: 0 !important;\n}\n#sbz92 .widget-internet-status {\n position: absolute !important;\n bottom: 0 !important;\n left: 0 !important;\n width: 100% !important;\n font-size: 14px !important;\n z-index: 10 !important;\n text-align: center !important;\n padding: 6px 5px !important;\n}\n#sbz92 .widget-internet-status.negative {\n background-color: #212325 !important;\n color: #fff !important;\n}\n#sbz92 .widget-internet-status.positive {\n background-color: #19b600 !important;\n color: #fff !important;\n}\n#sbz92 .widget-preview-text-message--header {\n display: flex !important;\n overflow: hidden !important;\n align-items: center !important;\n width: 100% !important;\n}\n#sbz92 .widget-preview-text-message--header .widget-preview--avatar {\n width: 24px !important;\n height: 24px !important;\n flex-shrink: 0 !important;\n margin-right: 10px !important;\n}\n#sbz92 .widget-preview-text-message--author {\n flex: 1 !important;\n overflow: hidden !important;\n display: flex !important;\n align-items: center !important;\n}\n#sbz92 .widget-preview-text-message--author .badge {\n margin-left: 10px !important;\n}\n#sbz92 .widget-preview-text-message--author-text {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n line-height: 1.5 !important;\n color: '@secondary_color' !important;\n -webkit-text-fill-color: '@secondary_color' !important;\n}\n#sbz92 .widget-preview-text-message--content {\n margin-top: 10px !important;\n white-space: pre-wrap !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper {\n z-index: '@z_index_3' !important;\n width: 100% !important;\n margin-bottom: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: flex-start !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.right {\n align-items: flex-end !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal {\n flex-direction: row !important;\n flex-wrap: wrap !important;\n align-items: center !important;\n gap: 10px !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal.right {\n justify-content: flex-end !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal.left {\n justify-content: flex-start !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal .widget-preview-quick-reply-item {\n margin: 0 !important;\n max-width: 200px !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n padding: 6px 15px !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal .widget-preview-quick-reply-item:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .widget-preview-quick-reply-item {\n border-radius: 20px !important;\n padding: 8px 20px !important;\n background: #fff !important;\n border: 1.5px solid !important;\n border-color: '@primary_color' !important;\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n margin-bottom: 15px !important;\n cursor: pointer !important;\n transition: 0.3s ease !important;\n position: relative !important;\n}\n#sbz92 .widget-preview-quick-reply-item:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .widget-preview-quick-reply-item:hover {\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n background-color: '@primary_color' !important;\n}\n#sbz92 .widget-preview-image-wrapper {\n z-index: '@z_index_3' !important;\n width: 100% !important;\n margin-bottom: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: flex-start !important;\n}\n#sbz92 .widget-preview-image-wrapper.right {\n align-items: flex-end !important;\n}\n#sbz92 .widget-preview-image-item {\n max-width: 300px !important;\n border-radius: 15px !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n border: 1px solid #dee2e6 !important;\n overflow: hidden !important;\n cursor: pointer !important;\n}\n#sbz92 .widget-preview-image-item img {\n width: 100% !important;\n max-height: 300px !important;\n object-fit: cover !important;\n}\n#sbz92 .widget-preview-text-message {\n z-index: '@z_index_3' !important;\n background: #fff !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n border: 1px solid #dee2e6 !important;\n border-radius: 15px !important;\n max-width: 100% !important;\n min-width: 210px !important;\n margin-bottom: 15px !important;\n padding: 15px 20px !important;\n positive: relative !important;\n cursor: pointer !important;\n}\n#sbz92 .widget-preview-text-message.right {\n border-bottom-right-radius: 8px !important;\n}\n#sbz92 .widget-preview-text-message.left {\n border-bottom-left-radius: 8px !important;\n}\n#sbz92 .widget-preview-new-wrapper {\n max-width: '@preview_max_width' !important;\n position: relative !important;\n opacity: 1 !important;\n transition: opacity 0.15s ease-in, transform 0.15s ease-in !important;\n transform: translateY(0) !important;\n}\n#sbz92 .widget-preview-new-wrapper.hidden {\n transform: translateY(20px) !important;\n transition: opacity 0.15s ease-out, transform 0.15s ease-out !important;\n opacity: 0 !important;\n}\n#sbz92 .widget-preview-new-wrapper:hover .widget-preview-x-wrapper {\n display: flex !important;\n}\n#sbz92 .widget-preview-x-wrapper {\n display: none !important;\n justify-content: flex-start !important;\n width: calc(100% + 40px) !important;\n position: absolute !important;\n padding: 15px 20px !important;\n left: -20px !important;\n bottom: 100% !important;\n}\n#sbz92 .widget-preview-x-wrapper.mobile {\n display: flex !important;\n}\n#sbz92 .widget-preview-x-wrapper.right {\n justify-content: flex-end !important;\n left: unset !important;\n right: -20px !important;\n}\n#sbz92 .widget-preview-x-wrapper .widget-preview--btn-close {\n opacity: 1 !important;\n width: 32px !important;\n height: 32px !important;\n border: 1px solid #ececec !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n background-color: #00000040 !important;\n background-size: 16px 16px !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiNlY2VjZWMiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXIteCI+PGxpbmUgeDE9IjE4IiB5MT0iNiIgeDI9IjYiIHkyPSIxOCI+PC9saW5lPjxsaW5lIHgxPSI2IiB5MT0iNiIgeDI9IjE4IiB5Mj0iMTgiPjwvbGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .widget-preview-x-wrapper .widget-preview--btn-close:hover {\n border-color: #fff !important;\n background-color: #00000066 !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXIteCI+PGxpbmUgeDE9IjE4IiB5MT0iNiIgeDI9IjYiIHkyPSIxOCI+PC9saW5lPjxsaW5lIHgxPSI2IiB5MT0iNiIgeDI9IjE4IiB5Mj0iMTgiPjwvbGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .rating--overlay {\n position: absolute !important;\n height: 100% !important;\n width: 100% !important;\n background: black !important;\n opacity: 0.3 !important;\n top: 0 !important;\n left: 0 !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n z-index: 9 !important;\n}\n#sbz92 .rating {\n border-top-left-radius: 10px !important;\n border-top-right-radius: 10px !important;\n overflow: hidden !important;\n position: absolute !important;\n height: 400px !important;\n max-height: 80% !important;\n width: 100% !important;\n bottom: 0 !important;\n /* centering */\n left: 0 !important;\n background: white !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n z-index: 10 !important;\n}\n#sbz92 .rating .rating--comment {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n resize: none !important;\n margin-left: 20px !important;\n margin-right: 20px !important;\n border: 2px solid lightgray !important;\n border-radius: 5px !important;\n padding: 10px !important;\n height: 60px !important;\n min-height: 60px !important;\n}\n#sbz92 .rating .rating--close-btn {\n right: 20px !important;\n top: -2px !important;\n width: 22px !important;\n height: 22px !important;\n position: absolute !important;\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23acacac%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22feather%20feather-x%22%3E%3Cline%20x1%3D%2218%22%20y1%3D%226%22%20x2%3D%226%22%20y2%3D%2218%22%3E%3C/line%3E%3Cline%20x1%3D%226%22%20y1%3D%226%22%20x2%3D%2218%22%20y2%3D%2218%22%3E%3C/line%3E%3C/svg%3E') !important;\n cursor: pointer !important;\n}\n#sbz92 .rating .rating--close-btn:hover {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22feather%20feather-x%22%3E%3Cline%20x1%3D%2218%22%20y1%3D%226%22%20x2%3D%226%22%20y2%3D%2218%22%3E%3C/line%3E%3Cline%20x1%3D%226%22%20y1%3D%226%22%20x2%3D%2218%22%20y2%3D%2218%22%3E%3C/line%3E%3C/svg%3E') !important;\n}\n#sbz92 .rating .rating--handle:hover .rating--thumb {\n background: #e0e0e0 !important;\n}\n#sbz92 .rating .rating--thumb {\n width: 70px !important;\n height: 6px !important;\n background: #eaeaea !important;\n border-radius: 5px !important;\n margin: 0 auto !important;\n cursor: grabbing !important;\n margin-top: 8px !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .rating .rating--content {\n display: flex !important;\n flex: 1 !important;\n flex-grow: 1 !important;\n height: calc(100% - 40px) !important;\n flex-direction: column !important;\n justify-content: space-between !important;\n}\n#sbz92 .rating .rating--heading {\n margin: 0 !important;\n font-weight: 500 !important;\n font-size: 20px !important;\n line-height: 20px !important;\n text-align: center !important;\n flex-grow: 1 !important;\n position: relative !important;\n}\n#sbz92 .rating .rating--description {\n text-align: center !important;\n flex-grow: 1 !important;\n font-size: 15px !important;\n padding-left: 20px !important;\n padding-right: 20px !important;\n display: flex !important;\n align-items: center !important;\n margin-top: 10px !important;\n margin-bottom: 15px !important;\n}\n#sbz92 .rating .rating-faces-container {\n flex: 5 !important;\n display: flex !important;\n justify-content: space-around !important;\n align-items: center !important;\n margin: 10px 10px !important;\n}\n#sbz92 .rating .rating-face-container {\n padding: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n cursor: pointer !important;\n border-radius: 10px !important;\n user-select: none !important;\n -webkit-transition: all 0.1s !important;\n transition: all 0.1s !important;\n}\n#sbz92 .rating .rating-face-container:hover {\n box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1) !important;\n}\n#sbz92 .rating .rating-face--text {\n margin-top: 10px !important;\n margin-bottom: 0px !important;\n font-size: 13px !important;\n color: #4d4d4d !important;\n -webkit-text-fill-color: #4d4d4d !important;\n}\n#sbz92 .rating .rating-no-thanks {\n flex: 10 !important;\n text-align: center !important;\n cursor: pointer !important;\n display: flex !important;\n justify-content: center !important;\n align-items: flex-end !important;\n color: #acacac !important;\n -webkit-text-fill-color: #acacac !important;\n}\n#sbz92 .rating .rating-no-thanks:hover {\n color: black !important;\n -webkit-text-fill-color: black !important;\n}\n#sbz92 .text__danger {\n color: #dc3545 !important;\n}\n#sbz92 .extension--close-btn {\n background: #00000088 !important;\n border-radius: 8px !important;\n color: #ffffffaa !important;\n -webkit-text-fill-color: #ffffffaa !important;\n right: 10px !important;\n top: -35px !important;\n font-size: 14px !important;\n position: absolute !important;\n padding: 5px 15px !important;\n cursor: pointer !important;\n}\n#sbz92 .extension--close-btn:hover {\n background: #000000 !important;\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n}\n#sbz92 .extension--handle {\n margin-bottom: 10px !important;\n}\n#sbz92 .extension--handle:hover .extension--thumb {\n background: #e0e0e0 !important;\n}\n#sbz92 .extension--thumb {\n width: 70px !important;\n cursor: grabbing !important;\n margin: 0 auto !important;\n height: 6px !important;\n background: #eaeaea !important;\n border-radius: 5px !important;\n flex: 1 !important;\n margin-top: 5px !important;\n}\n#sbz92 .extension {\n border-top-left-radius: 10px !important;\n position: absolute !important;\n border-top-right-radius: 10px !important;\n width: 100% !important;\n bottom: 0 !important;\n /* centering */\n left: 0 !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n background: white !important;\n z-index: 10 !important;\n}\n#sbz92 .extension--overlay {\n position: absolute !important;\n height: 100% !important;\n width: 100% !important;\n background: black !important;\n opacity: 0.3 !important;\n top: 0 !important;\n left: 0 !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n z-index: 9 !important;\n}\n#sbz92 .order__footer {\n margin-top: 40px !important;\n color: #888 !important;\n -webkit-text-fill-color: #888 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .order__footer_delimiter {\n width: 1px !important;\n height: 15px !important;\n border-right: 1px solid #bbb !important;\n}\n#sbz92 .order__footer_link {\n padding: 0 10px !important;\n font-size: 14px !important;\n cursor: pointer !important;\n}\n#sbz92 .order__footer_link:hover {\n text-decoration: none !important;\n color: #555 !important;\n -webkit-text-fill-color: #555 !important;\n}\n#sbz92 .desktop.order {\n border-radius: 0 !important;\n width: 780px !important;\n margin: 0 auto !important;\n height: 100% !important;\n}\n#sbz92 .desktop.order .order_section__line {\n display: none !important;\n}\n#sbz92 .desktop.order .desktop_order__heading {\n line-height: 20px !important;\n}\n#sbz92 .desktop.order .order_attachment__product_img {\n width: 50px !important;\n height: 50px !important;\n}\n#sbz92 .desktop.order .order_label {\n font-weight: 500 !important;\n margin-top: 30px !important;\n margin-bottom: 10px !important;\n font-size: 16px !important;\n}\n#sbz92 .desktop.order .order_label:first-child {\n margin-top: 0 !important;\n}\n#sbz92 .desktop.order .order_recap {\n margin-top: 0px !important;\n background: #f4f4f4 !important;\n margin-top: 20px !important;\n width: 270px !important;\n box-shadow: 0 0 0 1px hsla(0, 0%, 69%, 0.2), 0 15px 35px 0 rgba(49, 49, 93, 0.08), 0 5px 15px 0 rgba(0, 0, 0, 0.06) !important;\n border-radius: 6px !important;\n background-color: #fff !important;\n padding: 32px 32px 20px !important;\n}\n#sbz92 .desktop.order .order_acc_header {\n display: flex !important;\n align-items: center !important;\n margin-top: 20px !important;\n}\n#sbz92 .desktop.order .order_acc_logo {\n height: 50px !important;\n}\n#sbz92 .desktop.order .order_acc_name {\n font-size: 16px !important;\n margin-left: 10px !important;\n border-left: 1px solid #aaa !important;\n padding-left: 10px !important;\n}\n#sbz92 .desktop.order .order_summary_line {\n align-items: center !important;\n overflow: hidden !important;\n padding: 5px 0 !important;\n display: flex !important;\n justify-content: space-between !important;\n}\n#sbz92 .desktop_order__content {\n display: flex !important;\n}\n#sbz92 .order {\n width: 100% !important;\n display: flex !important;\n flex-direction: column !important;\n background: white !important;\n z-index: 10 !important;\n}\n#sbz92 .order .ship_card {\n display: flex !important;\n align-items: center !important;\n overflow: hidden !important;\n width: 190px !important;\n cursor: pointer !important;\n padding: 10px 15px !important;\n box-shadow: none !important;\n border: 2px solid #eee !important;\n color: #777 !important;\n -webkit-text-fill-color: #777 !important;\n margin-top: 5px !important;\n border-radius: 8px !important;\n background: white !important;\n transition: all 150ms ease-out !important;\n}\n#sbz92 .order .ship_card:hover {\n color: #555 !important;\n -webkit-text-fill-color: #555 !important;\n border: 2px solid #aaa !important;\n}\n#sbz92 .order .ship_card.ship_card__active {\n color: #333 !important;\n -webkit-text-fill-color: #333 !important;\n border: 2px solid #777 !important;\n background: #fafafa !important;\n}\n#sbz92 .order .order_ship_icon {\n margin-top: -3px !important;\n width: 15px !important;\n height: 15px !important;\n opacity: 0.6 !important;\n}\n#sbz92 .order .card_section {\n margin-top: 20px !important;\n max-width: 500px !important;\n box-shadow: 0 0 0 1px hsla(0, 0%, 69%, 0.2), 0 15px 35px 0 rgba(49, 49, 93, 0.08), 0 5px 15px 0 rgba(0, 0, 0, 0.06) !important;\n border-radius: 6px !important;\n background-color: #fff !important;\n padding: 32px !important;\n}\n#sbz92 .order input[type='text'].form-control,\n#sbz92 .order input[type='number'].form-control,\n#sbz92 .order input[type='date'].form-control,\n#sbz92 .order textarea.form-control,\n#sbz92 .order select.form-control {\n background: #f4f4f4 !important;\n border: 1px solid transparent !important;\n padding: 7px 10px !important;\n}\n#sbz92 .order input[type='text'].form-control:hover,\n#sbz92 .order input[type='number'].form-control:hover,\n#sbz92 .order input[type='date'].form-control:hover,\n#sbz92 .order textarea.form-control:hover,\n#sbz92 .order select.form-control:hover {\n background: #f0f0f0 !important;\n}\n#sbz92 .order input[type='text'].form-control:focus,\n#sbz92 .order input[type='number'].form-control:focus,\n#sbz92 .order input[type='date'].form-control:focus,\n#sbz92 .order textarea.form-control:focus,\n#sbz92 .order select.form-control:focus,\n#sbz92 .order input[type='text'].form-control:active,\n#sbz92 .order input[type='number'].form-control:active,\n#sbz92 .order input[type='date'].form-control:active,\n#sbz92 .order textarea.form-control:active,\n#sbz92 .order select.form-control:active {\n background: #eee !important;\n}\n#sbz92 .order input[type='text'].form-control.err,\n#sbz92 .order input[type='number'].form-control.err,\n#sbz92 .order input[type='date'].form-control.err,\n#sbz92 .order textarea.form-control.err,\n#sbz92 .order select.form-control.err {\n background: #ffe6e6 !important;\n border: 1px solid #ff8a8a !important;\n}\n#sbz92 .order .form {\n box-shadow: none !important;\n border: none !important;\n padding: 0 !important;\n}\n#sbz92 .order .form .radio {\n height: unset !important;\n}\n#sbz92 .order .order--content {\n display: flex !important;\n flex: 1 !important;\n flex-direction: column !important;\n}\n#sbz92 .order .order--content-content {\n flex: 1 !important;\n overflow: auto !important;\n}\n#sbz92 .order .order--heading {\n margin: 0 !important;\n margin-top: 20px !important;\n padding-left: 20px !important;\n padding-right: 20px !important;\n padding-bottom: 8px !important;\n line-height: 20px !important;\n position: relative !important;\n}\n#sbz92 .order .order--header-desc {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n font-size: 13px !important;\n}\n#sbz92 .order .order__product_line {\n display: flex !important;\n overflow: hidden !important;\n}\n#sbz92 .order .order--footer {\n text-align: k center !important;\n cursor: pointer !important;\n display: flex !important;\n justify-content: center !important;\n align-items: flex-end !important;\n color: #acacac !important;\n -webkit-text-fill-color: #acacac !important;\n}\n#sbz92 .order .order--footer:hover {\n color: black !important;\n -webkit-text-fill-color: black !important;\n}\n#sbz92 .order .order_section_label {\n color: #444 !important;\n -webkit-text-fill-color: #444 !important;\n margin-bottom: 5px !important;\n text-transform: uppercase !important;\n font-size: 13px !important;\n font-weight: 500 !important;\n}\n#sbz92 .order .order_label {\n color: #444 !important;\n -webkit-text-fill-color: #444 !important;\n margin-bottom: 5px !important;\n text-transform: uppercase !important;\n font-size: 13px !important;\n font-weight: 500 !important;\n}\n#sbz92 .order .order_section {\n padding-left: 20px !important;\n padding-right: 20px !important;\n padding-bottom: 15px !important;\n padding-top: 15px !important;\n}\n#sbz92 .order .order_section__line {\n border-top: 4px solid #eee !important;\n width: 100% !important;\n}\n#sbz92 .order .order_summary_line {\n overflow: hidden !important;\n padding: 3px 0 !important;\n display: flex !important;\n justify-content: space-between !important;\n}\n#sbz92 .order .order_btn {\n width: 100% !important;\n}\n#sbz92 .order .order_tracking_link {\n text-decoration: underline !important;\n cursor: pointer !important;\n}\n#sbz92 .order .order_tracking_link:hover {\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n}\n#sbz92 .order .order_tracking_link_icon {\n margin-top: -3px !important;\n width: 15px !important;\n height: 15px !important;\n}\n#sbz92 .order .order_shipping_provider_logo {\n width: 32px !important;\n height: 32px !important;\n margin-right: 10px !important;\n}\n#sbz92 .order .order_btn.order__btn__light {\n background: #f0f0f0 !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n border-radius: 6px !important;\n text-align: center !important;\n padding: 8px !important;\n cursor: pointer !important;\n}\n#sbz92 .order .order_btn.order__btn__light:hover {\n color: black !important;\n -webkit-text-fill-color: black !important;\n background: #ddd !important;\n}\n#sbz92 div.order__card {\n display: flex !important;\n padding: 15px !important;\n box-shadow: none !important;\n border: 2px solid #eee !important;\n margin-top: 10px !important;\n border-radius: 8px !important;\n background: #fafafa !important;\n}\n#sbz92 div.order__card.order__card__active {\n border: 2px solid #777 !important;\n background: white !important;\n}\n#sbz92 .order_form_label {\n margin-top: 10px !important;\n margin-bottom: 4px !important;\n}\n#sbz92 .btn-confirm-order {\n width: 100% !important;\n background: '@primary_color' !important;\n display: flex !important;\n align-items: center !important;\n border-radius: 5px !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n padding: 15px 10px !important;\n cursor: pointer !important;\n justify-content: center !important;\n font-weight: 500 !important;\n margin-top: 10px !important;\n}\n#sbz92 .btn-confirm-order:hover {\n background: #0053d4 !important;\n}\n#sbz92 .order__total {\n font-weight: 500 !important;\n font-size: 20px !important;\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n}\n#sbz92 .btn-cancel-order {\n color: #666 !important;\n -webkit-text-fill-color: #666 !important;\n text-decoration: underline !important;\n display: inline-block !important;\n margin-top: 10px !important;\n cursor: pointer !important;\n}\n#sbz92 .btn-cancel-order:hover {\n color: #333 !important;\n -webkit-text-fill-color: #333 !important;\n}\n#sbz92 .order_status {\n text-transform: uppercase !important;\n background: black !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n display: inline-block !important;\n border-radius: 4px !important;\n padding: 6px 6px 4px 6px !important;\n line-height: 1 !important;\n font-weight: 500 !important;\n font-size: 12px !important;\n}\n#sbz92 .order_status.order_status__canceled {\n background: whitesmoke !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .order_status.order_status__cancel {\n background: whitesmoke !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .order_status.order_status__confirmed {\n background: '@primary_color' !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__shipping {\n background: #000 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__fullfilled {\n background: #28a745 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__hold {\n background: #dc3545 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__draft {\n background: #ffc107 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__open {\n background: #ffc107 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_error {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n justify-content: center !important;\n height: 100% !important;\n width: 100% !important;\n}\n#sbz92 .order_attachment__note {\n font-size: 14px !important;\n white-space: pre-wrap !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n display: -webkit-box !important;\n -webkit-line-clamp: 3 !important;\n -webkit-box-orient: vertical !important;\n}\n#sbz92 .dropdown_select {\n position: absolute !important;\n background: white !important;\n -webkit-box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n border-radius: 5px !important;\n width: 150px !important;\n z-index: 20 !important;\n overflow: hidden !important;\n}\n#sbz92 .dropdown_select__overlay {\n top: 0 !important;\n overflow: hidden !important;\n position: absolute !important;\n background: #000000aa !important;\n z-index: 19 !important;\n left: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n}\n#sbz92 .dropdown_select__item {\n padding: 7px 10px !important;\n cursor: pointer !important;\n}\n#sbz92 .dropdown_select__item:hover {\n background: '@primary_color' !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n}\n#sbz92 .dropdown_select_filter {\n padding: 8px 10px !important;\n border-bottom: 1px solid #eee !important;\n position: relative !important;\n}\n#sbz92 .dropdown_select_filter:hover .dropdown_select_filter__icon {\n opacity: 1 !important;\n}\n#sbz92 .dropdown_select_filter_input {\n border-radius: 5px !important;\n width: 100% !important;\n display: block !important;\n background: #f4f4f4 !important;\n border: none !important;\n padding: 7px 10px !important;\n padding-left: 35px !important;\n}\n#sbz92 .dropdown_select_filter_input:hover {\n background: #f0f0f0 !important;\n}\n#sbz92 .dropdown_select_filter_input:focus,\n#sbz92 .dropdown_select_filter_input:active {\n background: #eee !important;\n}\n#sbz92 .dropdown_select_input {\n border-radius: 5px !important;\n overflow: hidden !important;\n cursor: pointer !important;\n flex-wrap: nowrap !important;\n display: flex !important;\n background: #f4f4f4 !important;\n border: 1px solid trasparent !important;\n padding: 7px 10px !important;\n height: 32px !important;\n min-width: 120px !important;\n width: 100% !important;\n}\n#sbz92 .dropdown_select_input:hover {\n background: #f0f0f0 !important;\n}\n#sbz92 .dropdown_select_input:focus,\n#sbz92 .dropdown_select_input:active {\n background: #eee !important;\n}\n#sbz92 .dropdown_select_input.err {\n background: #ffe6e6 !important;\n border: 1px solid #ff8a8a !important;\n}\n#sbz92 .dropdown_select__items {\n max-height: 300px !important;\n min-height: 100px !important;\n overflow-x: hidden !important;\n overflow-y: auto !important;\n}\n#sbz92 .dropdown_select_filter__icon {\n width: 22px !important;\n height: 15px !important;\n position: absolute !important;\n z-index: 2 !important;\n top: 15px !important;\n left: 18px !important;\n border-right: 1px solid #aaa !important;\n padding-right: 7px !important;\n opacity: 0.5 !important;\n}\n#sbz92 .dropdown_select_filter__empty {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n flex-direction: column !important;\n}\n#sbz92 .dropdown_select_filter__empty_img {\n height: 50px !important;\n margin-top: 10px !important;\n margin-bottom: 10px !important;\n}\n#sbz92 .dropdown_select__caret {\n width: 14px !important;\n margin-top: 3px !important;\n opacity: 0.6 !important;\n height: 15px !important;\n}\ndiv#sbz92 {\n all: initial;\n}\nbody div#sbz92 {\n all: initial !important;\n}\n", ""]);
3761
+ ___CSS_LOADER_EXPORT___.push([module.id, "#sbz92 * {\n all: unset !important;\n}\n.sbz_no_scroll {\n overflow: hidden !important;\n overflow-x: hidden !important;\n overflow-y: hidden !important;\n}\n#sbz92 {\n /* Handle on hover */\n /*\n.widget-header--button-close {\n\tdisplay: flex;\n\tborder-radius: 6px;\n\tjustify-self: flex-end;\n\talign-items: center;\n\talign-self: flex-start;\n\n\tfilter: brightness(0.95);\n\t&:hover {\n\t\topacity: 1;\n\t\tfilter: brightness(1.1);\n\t\tscale: 1.1;\n\t}\n}\n*/\n /*\n[data-tooltip]::after {\n\ttext-align: center;\n\tmin-width: 60px;\n\tmax-width: 350px;\n\n\ttransform: translate3d(0, 0, 0);\n\t-webkit-backface-visibility: hidden;\n\tbackface-visibility: hidden;\n\twill-change: transform;\n\topacity: 0;\n\tpointer-events: none;\n\ttransition: opacity @tooltip-transition-duration @tooltip-transition-easing @tooltip-transition-delay;\n\tposition: absolute;\n\tbox-sizing: border-box;\n\tz-index: @z-index + 2000;\n\ttransform-origin: top;\n\twhite-space: pre-wrap;\n\twidth: 100%;\n\n\tbackground: @black;\n\tborder-radius: 5px;\n\n\t.color(@white);\n\n\tcontent: attr(data-tooltip);\n\tfont-size: @tooltip-font-size;\n\tfont-weight: @tooltip-font-weight;\n\ttext-transform: @tooltip-text-transform;\n\tpadding: 0.5em;\n\tbox-sizing: content-box;\n}\n\n[data-tooltip]:hover::after,\n[data-tooltip]:focus::after {\n\topacity: 1;\n\tpointer-events: auto;\n}\n\n// ------------------------------------------------\n// [2] Position Modifiers\n// ------------------------------------------------\n\n[data-tooltip][data-tooltip-position|='top']::after {\n\tmargin-bottom: @tooltip-margin;\n\ttransform: translate3d(-50%, -5px, 0);\n\tbottom: 100%;\n\tleft: 50%;\n}\n\n// ------------------------------------------------\n// [2.1] Top Left\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='top-left']::after {\n\ttransform: translate3d(~'calc(-100% + 16px)', -5px, 0);\n\tbottom: 100%;\n}\n\n// ------------------------------------------------\n// [2.2] Top Right\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='top-right']::after {\n\ttransform: translate3d(~'calc(0% + -16px)', -5px, 0);\n\tbottom: 100%;\n}\n\n// ------------------------------------------------\n// [2.3] Bottom\n// ------------------------------------------------\n\n[data-tooltip][data-tooltip-position|='bottom']::after,\n[data-tooltip]:not([data-tooltip-position])::after {\n\ttransform: translate3d(-50%, 0, 0);\n\tmargin-top: @tooltip-margin;\n\tleft: 50%;\n\ttop: 100%;\n}\n\n// ------------------------------------------------\n// [2.4] Bottom Left\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='bottom-left']::after {\n\ttransform: translate3d(~'calc(-100% + 16px)', 0, 0);\n}\n\n// ------------------------------------------------\n// [2.5] Bottom Right\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='bottom-right']::after {\n\ttransform: translate3d(~'calc(0% + -16px)', 0, 0);\n}\n\n// ------------------------------------------------\n// [2.6] Left\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='left']::after {\n\tbottom: auto;\n\tleft: auto;\n\tright: 100%;\n\ttop: 50%;\n\ttransform: translate3d(0, -50%, 0);\n\tmargin-right: @tooltip-margin;\n}\n\n// ------------------------------------------------\n// [2.7] Right\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='right']::after {\n\tbottom: auto;\n\tleft: 100%;\n\ttop: 50%;\n\ttransform: translate3d(0, -50%, 0);\n\tmargin-left: @tooltip-margin;\n}\n\n*/\n}\n#sbz92 *,\n#sbz92 *::before,\n#sbz92 *::after {\n box-sizing: border-box !important;\n}\n#sbz92 [tabindex='-1']:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n#sbz92 b,\n#sbz92 strong {\n font-weight: 500 !important;\n}\n#sbz92 a {\n color: #020202 !important;\n text-decoration: none !important;\n background-color: transparent !important;\n font-weight: 600 !important;\n}\n#sbz92 a:hover {\n cursor: pointer !important;\n color: #000000 !important;\n text-decoration: underline !important;\n}\n#sbz92 a:not([href]) {\n color: inherit !important;\n text-decoration: none !important;\n}\n#sbz92 a:not([href]):hover {\n color: inherit !important;\n text-decoration: none !important;\n}\n#sbz92 img {\n vertical-align: middle !important;\n border-style: none !important;\n}\n#sbz92 svg {\n overflow: hidden !important;\n vertical-align: middle !important;\n}\n#sbz92 label {\n display: inline-block !important;\n}\n#sbz92 button {\n border-radius: 0 !important;\n}\n#sbz92 button:focus {\n outline: 1px dotted !important;\n outline: 5px auto -webkit-focus-ring-color !important;\n}\n#sbz92 input,\n#sbz92 button,\n#sbz92 select,\n#sbz92 optgroup,\n#sbz92 textarea {\n margin: 0 !important;\n}\n#sbz92 button,\n#sbz92 input {\n overflow: visible !important;\n}\n#sbz92 button,\n#sbz92 select {\n text-transform: none !important;\n}\n#sbz92 select {\n word-wrap: normal !important;\n}\n#sbz92 button,\n#sbz92 [type=\"button\"],\n#sbz92 [type=\"reset\"],\n#sbz92 [type=\"submit\"] {\n -webkit-appearance: button !important;\n}\n#sbz92 button:not(:disabled),\n#sbz92 [type='button']:not(:disabled),\n#sbz92 [type='reset']:not(:disabled),\n#sbz92 [type='submit']:not(:disabled) {\n cursor: pointer !important;\n}\n#sbz92 button::-moz-focus-inner,\n#sbz92 [type='button']::-moz-focus-inner,\n#sbz92 [type='reset']::-moz-focus-inner,\n#sbz92 [type='submit']::-moz-focus-inner {\n padding: 0 !important;\n border-style: none !important;\n}\n#sbz92 input[type='radio'],\n#sbz92 input[type='checkbox'] {\n box-sizing: border-box !important;\n padding: 0 !important;\n}\n#sbz92 input[type='date'],\n#sbz92 input[type='time'],\n#sbz92 input[type='datetime-local'],\n#sbz92 input[type='month'] {\n -webkit-appearance: listbox !important;\n}\n#sbz92 textarea {\n overflow: auto !important;\n resize: vertical !important;\n}\n#sbz92 [type='number']::-webkit-inner-spin-button,\n#sbz92 [type='number']::-webkit-outer-spin-button {\n height: auto !important;\n}\n#sbz92 [hidden] {\n display: none !important;\n}\n#sbz92 ::-webkit-input-placeholder {\n /* Edge */\n color: #777 !important;\n}\n#sbz92 :-ms-input-placeholder {\n /* Internet Explorer 10-11 */\n color: #777 !important;\n}\n#sbz92 ::placeholder {\n color: #777 !important;\n}\n#sbz92 div {\n display: block !important;\n text-rendering: geometricPrecision !important;\n -webkit-font-smoothing: antialiased !important;\n -moz-osx-font-smoothing: grayscale !important;\n}\n#sbz92 ::-webkit-scrollbar {\n width: 7px !important;\n height: 7px !important;\n}\n#sbz92 ::-webkit-scrollbar-track {\n border-radius: 10px !important;\n}\n#sbz92 ::-webkit-scrollbar-thumb {\n border-radius: 10px !important;\n background: #d6d6d6 !important;\n}\n#sbz92 ::-webkit-scrollbar-thumb:hover {\n background: #aaa !important;\n}\n#sbz92 .badge {\n padding: 2px 8px !important;\n font-size: 12px !important;\n font-weight: 600 !important;\n border-radius: 6px !important;\n display: inline-flex !important;\n align-items: center !important;\n}\n#sbz92 .badge.badge--success {\n color: #28a745 !important;\n -webkit-text-fill-color: #28a745 !important;\n background: #28a74526 !important;\n}\n#sbz92 .dot {\n width: 8px !important;\n height: 8px !important;\n border-radius: 4px !important;\n flex-shrink: 0 !important;\n background: #000 !important;\n}\n#sbz92 .dot.dot--success {\n background: #28a745 !important;\n}\n#sbz92 * {\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;\n -webkit-tap-highlight-color: transparent !important;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji' !important;\n font-size: 16px !important;\n -webkit-box-sizing: border-box !important;\n -moz-box-sizing: border-box !important;\n box-sizing: border-box !important;\n margin: 0 !important;\n padding: 0 !important;\n border: 0 !important;\n vertical-align: baseline !important;\n}\n#sbz92 button:focus {\n outline: none !important;\n}\n#sbz92 button:focus-visible {\n outline: 2px solid #6c757d !important;\n outline-offset: 3px !important;\n}\n#sbz92 button:not(:disabled) {\n cursor: pointer !important;\n}\n#sbz92 img {\n overflow: hidden !important;\n flex-shrink: 0 !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n background-size: 100% 100% !important;\n -webkit-user-select: none !important;\n -khtml-user-select: none !important;\n -moz-user-select: none !important;\n -o-user-select: none !important;\n user-select: none !important;\n -webkit-user-drag: none !important;\n}\n#sbz92 .pos-relative {\n position: relative !important;\n}\n#sbz92 .flex-row {\n flex-direction: row !important;\n}\n#sbz92 .flex-column {\n flex-direction: column !important;\n}\n#sbz92 .flex-grow-1 {\n flex-grow: 1 !important;\n}\n#sbz92 .align-self-end {\n align-self: flex-end !important;\n}\n#sbz92 .align-items-end {\n align-items: flex-end !important;\n}\n#sbz92 .justify-content-center {\n justify-content: center !important;\n}\n#sbz92 .h-full {\n height: 100% !important;\n}\n#sbz92 .w-full {\n width: 100% !important;\n}\n#sbz92 .text-muted {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .text-lg {\n font-size: 18px !important;\n}\n#sbz92 .text-xl {\n font-size: 20px !important;\n}\n#sbz92 .text-sm {\n font-size: 14px !important;\n}\n#sbz92 .text-center {\n text-align: center !important;\n}\n#sbz92 .text-danger {\n color: #ea3d2f !important;\n}\n#sbz92 .text-italic {\n font-style: italic !important;\n}\n#sbz92 .d-none {\n display: none !important;\n}\n#sbz92 .d-flex {\n display: flex !important;\n}\n#sbz92 .d-inline-block {\n display: inline-block !important;\n}\n#sbz92 .ml-1 {\n margin-left: 7.5px !important;\n}\n#sbz92 .pl-2 {\n padding-left: 15px !important;\n}\n#sbz92 .pr-2 {\n padding-right: 15px !important;\n}\n#sbz92 .pb-2 {\n padding-bottom: 15px !important;\n}\n#sbz92 .mt-1 {\n margin-top: 7.5px !important;\n}\n#sbz92 .mt-2 {\n margin-top: 15px !important;\n}\n#sbz92 .ml-2 {\n margin-left: 15px !important;\n}\n#sbz92 .mr-1 {\n margin-right: 7.5px !important;\n}\n#sbz92 .mr-2 {\n margin-right: 15px !important;\n}\n#sbz92 .pt-3 {\n padding-top: 22.5px !important;\n}\n#sbz92 .pl-3 {\n padding-left: 22.5px !important;\n}\n#sbz92 .pr-3 {\n padding-right: 22.5px !important;\n}\n#sbz92 .pb-3 {\n padding-bottom: 22.5px !important;\n}\n#sbz92 .mt-3 {\n margin-top: 22.5px !important;\n}\n#sbz92 .ml-3 {\n margin-left: 22.5px !important;\n}\n#sbz92 .mr-3 {\n margin-right: 22.5px !important;\n}\n#sbz92 .mb-3 {\n margin-bottom: 22.5px !important;\n}\n#sbz92 .mb-2 {\n margin-bottom: 15px !important;\n}\n#sbz92 .mb-1 {\n margin-bottom: 7.5px !important;\n}\n#sbz92 .muted {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .i {\n font-style: italic !important;\n}\n#sbz92 .align-items-center {\n align-items: center !important;\n}\n#sbz92 .text-truncate {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .flex_1 {\n flex: 1 !important;\n flex-shrink: 0 !important;\n}\n#sbz92 .justify-content-between {\n justify-content: space-between !important;\n}\n#sbz92 .no-shrink {\n flex-shrink: 0 !important;\n}\n#sbz92 .loading {\n flex: 1 !important;\n align-items: center !important;\n justify-content: center !important;\n display: flex !important;\n flex-direction: column !important;\n background: white !important;\n}\n#sbz92 .avatar-container {\n text-align: center !important;\n}\n#sbz92 .avatar {\n position: relative !important;\n object-fit: cover !important;\n display: inline-block !important;\n}\n#sbz92 .group-avatar--primary .avatar {\n width: 40px !important;\n height: 40px !important;\n border-radius: 35px !important;\n}\n#sbz92 .group-avatar--secondary .avatar {\n position: relative !important;\n width: 35px !important;\n height: 35px !important;\n border-radius: 35px !important;\n}\n#sbz92 .avatar.avatar__account {\n width: 38px !important;\n height: 38px !important;\n border-radius: 38px !important;\n margin-right: 7.5px !important;\n}\n#sbz92 .group-avatar--primary .group-avatar--agent-middle {\n width: 50px !important;\n height: 50px !important;\n margin-left: -10px !important;\n z-index: 3 !important;\n position: relative !important;\n}\n#sbz92 .group-avatar--primary .group-avatar--agent-left {\n z-index: 2 !important;\n}\n#sbz92 .group-avatar--primary .group-avatar--agent-right {\n z-index: 2 !important;\n margin-left: -10px !important;\n}\n#sbz92 .group-avatar--secondary .group-avatar--agent-left {\n z-index: 3 !important;\n}\n#sbz92 .group-avatar--secondary .group-avatar--agent-middle {\n z-index: 2 !important;\n margin-left: -15px !important;\n}\n#sbz92 .group-avatar--secondary .group-avatar--agent-right {\n z-index: 1 !important;\n margin-left: -15px !important;\n}\n#sbz92 .widget-header {\n z-index: -1 !important;\n position: relative !important;\n transition: height 0.2s !important;\n border-radius: 15px 15px 0px 0px !important;\n background: '@background' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n width: 100% !important;\n}\n#sbz92 .widget-header .widget-header--total-unread-convo {\n font-size: 13px !important;\n font-weight: 500 !important;\n background: #ef000d !important;\n display: flex !important;\n border-radius: 50% !important;\n justify-content: center !important;\n align-items: center !important;\n width: 20px !important;\n height: 20px !important;\n position: absolute !important;\n cursor: pointer !important;\n right: -8px !important;\n top: -4px !important;\n}\n#sbz92 .widget-header--collapsed {\n height: auto !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--collapsed {\n height: auto !important;\n padding: 15px 22.5px !important;\n position: relative !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--collapsed .widget-header--title {\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n text-overflow: ellipsis !important;\n font-size: 16px !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--collapsed .widget-header--description {\n font-size: 14px !important;\n overflow: hidden !important;\n opacity: 0.7 !important;\n flex: 1 !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n margin-top: 2.5px !important;\n position: relative !important;\n line-height: 1.5 !important;\n}\n#sbz92 .mobile .widget-header {\n border-radius: 0px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded {\n height: 224px !important;\n padding: 15px 22.5px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--top-wrapper {\n display: flex !important;\n flex-direction: row !important;\n align-items: center !important;\n margin-bottom: 10px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--avatar-wrapper {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--title {\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n text-overflow: ellipsis !important;\n flex: 1 !important;\n font-size: 16px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--description {\n position: relative !important;\n text-align: center !important;\n margin-top: 15px !important;\n white-space: pre-wrap !important;\n display: -webkit-box !important;\n -webkit-box-orient: vertical !important;\n -webkit-line-clamp: 2 !important;\n overflow: hidden !important;\n line-height: 1.5 !important;\n}\n#sbz92 .widget-header--convo-expanded {\n height: 224px !important;\n}\n#sbz92 .widget-header--inner {\n position: absolute !important;\n top: 0 !important;\n left: 50% !important;\n transform: translateX(-50%) !important;\n width: 100% !important;\n opacity: 1 !important;\n display: flex !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--hidden {\n opacity: 0 !important;\n transform: scale(0) !important;\n animation-duration: 0.05s !important;\n animation-name: hide !important;\n}\n#sbz92 .widget-header--title-container {\n min-width: 0 !important;\n flex: 1 !important;\n display: flex !important;\n flex-direction: column !important;\n z-index: 1 !important;\n}\n#sbz92 .widget-header--button-close {\n display: flex !important;\n border-radius: 6px !important;\n justify-self: flex-end !important;\n align-items: center !important;\n align-self: flex-start !important;\n opacity: 0.6 !important;\n transition: opacity 0.15s ease, scale 0.15s ease, filter 0.15s ease !important;\n filter: brightness(0.95) !important;\n}\n#sbz92 .widget-header--button-close:hover {\n opacity: 1 !important;\n filter: brightness(1.1) !important;\n scale: 1.1 !important;\n}\n#sbz92 .widget-header--button-close-icon {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9ImZlYXRoZXIgZmVhdGhlci14Ij48bGluZSB4MT0iMTgiIHkxPSI2IiB4Mj0iNiIgeTI9IjE4Ij48L2xpbmU+PGxpbmUgeDE9IjYiIHkxPSI2IiB4Mj0iMTgiIHkyPSIxOCI+PC9saW5lPjwvc3ZnPgo=') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n cursor: pointer !important;\n}\n#sbz92 .widget-header--button-back {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IndoaXRlIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTQgNmwxNiAwIiAvPjxwYXRoIGQ9Ik00IDEybDE2IDAiIC8+PHBhdGggZD0iTTQgMThsMTYgMCIgLz48L3N2Zz4K') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n background-size: 24px 24px !important;\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n position: relative !important;\n}\n#sbz92 .widget-header--wrap-button-back {\n display: flex !important;\n position: relative !important;\n margin-right: 7.5px !important;\n cursor: pointer !important;\n scale: 1 !important;\n opacity: 0.6 !important;\n transition: opacity 0.15s ease, scale 0.15s ease, filter 0.15s ease !important;\n filter: brightness(0.95) !important;\n}\n#sbz92 .widget-header--wrap-button-back:hover {\n opacity: 1 !important;\n filter: brightness(1.1) !important;\n scale: 1.1 !important;\n}\n#sbz92 .fade-enter-active,\n#sbz92 .fade-leave-active {\n transition: opacity 0.5s ease-out 0.2s !important;\n}\n#sbz92 .fade-enter,\n#sbz92 .fade-leave-to {\n opacity: 0 !important;\n}\n#sbz92 .slide-fade-enter-active {\n transition: all 0.3s ease !important;\n}\n#sbz92 .slide-fade-leave-active {\n transition: all 0.2s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .slide-fade-enter,\n#sbz92 .slide-fade-leave-to {\n transform: translateX(10px) !important;\n opacity: 0 !important;\n}\n#sbz92 .widget_header__body {\n padding-bottom: 70px !important;\n}\n#sbz92 .widget_header__body.widget_header__body__social {\n display: flex !important;\n}\n#sbz92 .social__account_logo {\n height: 90px !important;\n width: 90px !important;\n margin-right: 15px !important;\n border-radius: 15px !important;\n object-fit: cover !important;\n}\n#sbz92 .social__introduction {\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n max-height: 72px !important;\n overflow: hidden !important;\n display: -webkit-box !important;\n -webkit-box-orient: vertical !important;\n -webkit-line-clamp: 3 !important;\n}\n#sbz92 .social__links {\n display: flex !important;\n flex-direction: row !important;\n}\n#sbz92 .social__links-logo {\n height: 30px !important;\n width: 30px !important;\n border-radius: 50% !important;\n margin-right: 10px !important;\n margin-top: 5px !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n display: block !important;\n}\n#sbz92 .social__links-logo--facebook {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Ccircle%20cx%3D%2215%22%20cy%3D%2215%22%20r%3D%2215%22%20fill%3D%22%230264FF%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M17.2944%2029.8252C16.5464%2029.9404%2015.7803%2030%2015%2030C14.0962%2030%2013.2109%2029.9199%2012.3511%2029.7666V18.4775H10V14.4287H12.3511V11.8086C12.3511%209.93457%2013.2744%207%2017.3384%207L21%207.01465V10.9453H18.3433C17.9075%2010.9453%2017.2947%2011.1553%2017.2947%2012.0488V14.4326H20.989L20.5571%2018.4775H17.2944V29.8252Z%22%20fill%3D%22white%22/%3E%3C/svg%3E') !important;\n}\n#sbz92 .social__links-logo--messenger {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Crect%20width%3D%2230%22%20height%3D%2230%22%20rx%3D%2215%22%20fill%3D%22%23007FFF%22/%3E%3Crect%20x%3D%224.28564%22%20y%3D%226%22%20width%3D%2221.4286%22%20height%3D%2218.8571%22%20fill%3D%22white%22/%3E%3Cpath%20d%3D%22M14.9478%2014.5713C14.8228%2014.5917%2014.6974%2014.6104%2014.5715%2014.6276C14.6974%2014.6104%2014.8228%2014.5917%2014.9478%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7507%2014.5713C14.691%2014.5823%2014.6313%2014.5923%2014.5715%2014.6026C14.6313%2014.5923%2014.691%2014.5823%2014.7507%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M15.0126%2014.5713C14.8663%2014.5878%2014.7192%2014.6024%2014.5715%2014.6148C14.7192%2014.6024%2014.8663%2014.5878%2015.0126%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.783%2014.5713C14.7128%2014.5807%2014.642%2014.5894%2014.5715%2014.5976C14.642%2014.5894%2014.7128%2014.5807%2014.783%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7299%2014.5713C14.6773%2014.5825%2014.6244%2014.5937%2014.5715%2014.6045C14.6244%2014.5937%2014.6773%2014.5825%2014.7299%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.6992%2014.5713C14.6567%2014.5834%2014.6141%2014.5949%2014.5715%2014.6068C14.6141%2014.5949%2014.6567%2014.5834%2014.6992%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7107%2014.5713C14.6645%2014.5834%2014.618%2014.5958%2014.5715%2014.6075C14.618%2014.5958%2014.6645%2014.5836%2014.7107%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7194%2014.5713C14.6704%2014.5827%2014.621%2014.5935%2014.5715%2014.6045C14.621%2014.5935%2014.6704%2014.5827%2014.7194%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.8087%2014.5713C14.7297%2014.5779%2014.6507%2014.5839%2014.5715%2014.5891C14.6507%2014.5839%2014.7297%2014.5779%2014.8087%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M15.0417%2014.5713C14.8856%2014.5814%2014.7288%2014.5894%2014.5715%2014.5946C14.7288%2014.5894%2014.8856%2014.5814%2015.0417%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.8206%2014.5713C14.7377%2014.574%2014.6546%2014.5761%2014.5715%2014.5775C14.6546%2014.5761%2014.7377%2014.574%2014.8206%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.1547%2012.3174L9.29419%2017.4636L13.7176%2015.0365L16.0288%2017.4636L20.8621%2012.3174L16.4877%2014.7019L14.1547%2012.3174Z%22%20fill%3D%22%23448AFF%22/%3E%3Cpath%20d%3D%22M15%200C6.717%200%200%206.717%200%2015C0%2023.283%206.717%2030%2015%2030C23.283%2030%2030%2023.283%2030%2015C30%206.717%2023.283%200%2015%200ZM15.1172%2023.0294C14.1886%2023.0294%2013.2923%2022.8983%2012.4491%2022.6554L9.42421%2024.375V21.14C7.39815%2019.5982%206.10428%2017.2501%206.10428%2014.6203C6.10428%209.97581%2010.1395%206.21094%2015.1172%206.21094C20.0951%206.21094%2024.1301%209.97581%2024.1301%2014.6203C24.1301%2019.2643%2020.0951%2023.0294%2015.1172%2023.0294V23.0294Z%22%20fill%3D%22%23007FFF%22/%3E%3C/svg%3E') !important;\n}\n#sbz92 .social__links-logo--email {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d%3D%22M22.6875%2012.9688C21.9375%2013.5625%2020.3125%2014.75%2017.875%2016.5L17.5625%2016.75C17.0625%2017.125%2016.6875%2017.4062%2016.375%2017.5625C15.875%2017.875%2015.4062%2018%2015%2018C14.5625%2018%2014.125%2017.875%2013.625%2017.5938C13.3125%2017.4375%2012.9375%2017.1562%2012.4375%2016.7812L12.125%2016.5C9.59375%2014.6875%208%2013.5%207.3125%2012.9688C7.25%2012.9375%207.15625%2012.9375%207.09375%2012.9688C7.03125%2013%207%2013.0625%207%2013.125V19.5C7%2019.9375%207.125%2020.2812%207.4375%2020.5625C7.71875%2020.875%208.0625%2021%208.5%2021H21.5C21.9062%2021%2022.25%2020.875%2022.5625%2020.5625C22.8438%2020.2812%2023%2019.9375%2023%2019.5V13.125C23%2013.0625%2022.9375%2013%2022.875%2012.9375C22.8125%2012.9062%2022.75%2012.9062%2022.6875%2012.9688ZM15%2017C14.7188%2017%2014.375%2016.875%2014%2016.625C13.75%2016.5%2013.4375%2016.2812%2013.0312%2015.9375L12.7188%2015.7188C10.1562%2013.8438%208.40625%2012.5625%207.5%2011.8438L7.28125%2011.6875C7.09375%2011.5625%207%2011.3438%207%2011.0938V10.5C7%2010.0938%207.125%209.75%207.4375%209.4375C7.71875%209.15625%208.0625%209%208.5%209H21.5C21.9062%209%2022.25%209.15625%2022.5625%209.4375C22.8438%209.75%2023%2010.0938%2023%2010.5V11.0938C23%2011.3438%2022.9062%2011.5625%2022.7188%2011.6875L22.5625%2011.8125C21.6562%2012.5312%2019.9062%2013.8438%2017.2812%2015.7188L16.9688%2015.9375C16.5312%2016.2812%2016.2188%2016.5%2016%2016.625C15.5938%2016.875%2015.25%2017%2015%2017Z%22%20fill%3D%22white%22/%3E%3C/svg%3E') !important;\n}\n#sbz92 .social__links-logo--zalo {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M29.9999%2014.9385C29.9669%206.68262%2023.2639%200%2015%200C6.7157%200%200%206.71582%200%2015C0%2023.2842%206.7157%2030%2015%2030C23.2639%2030%2029.9669%2023.3174%2029.9999%2015.0615C29.9999%2015.041%2030%2015.0205%2030%2015C30%2014.9795%2029.9999%2014.959%2029.9999%2014.9385Z%22%20fill%3D%22white%22/%3E%3Cpath%20d%3D%22M24.5612%2017.4695C22.9394%2017.4726%2021.6242%2016.1862%2021.6279%2014.6005C21.6316%2013.0345%2022.9474%2011.7445%2024.5473%2011.7383C26.1556%2011.732%2027.4826%2013.0349%2027.4786%2014.6162C27.4746%2016.1926%2026.1719%2017.4665%2024.5612%2017.4695ZM22.8416%2014.6183C22.8459%2015.5573%2023.6166%2016.3004%2024.5777%2016.2923C25.5165%2016.2845%2026.2699%2015.5301%2026.2673%2014.6005C26.2646%2013.6712%2025.51%2012.9317%2024.56%2012.9277C23.6012%2012.9237%2022.8373%2013.6751%2022.8416%2014.6183Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20d%3D%22M19.5054%2010.0762H20.795V17.4217H19.9447C19.7021%2017.4217%2019.5054%2017.225%2019.5054%2016.9823V10.0762Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20d%3D%22M18.5227%2011.8907H17.2881V12.2935C16.5767%2011.8601%2015.8509%2011.6775%2015.06%2011.831C14.2526%2011.9876%2013.6164%2012.4043%2013.167%2013.0917C12.4538%2014.1826%2012.5894%2015.5904%2013.4938%2016.5431C14.3504%2017.4454%2015.8628%2017.8178%2017.2815%2016.9247C17.2835%2016.934%2017.286%2016.9422%2017.2881%2016.9511V16.9826C17.2881%2017.2252%2017.4849%2017.422%2017.7275%2017.422H18.5227V11.8907V11.8907ZM15.5853%2016.2787C14.6636%2016.268%2013.8924%2015.5006%2013.8986%2014.6004C13.9048%2013.692%2014.6716%2012.9481%2015.602%2012.9479C16.5427%2012.9477%2017.2871%2013.6781%2017.2882%2014.6026C17.2893%2015.5333%2016.521%2016.2896%2015.5853%2016.2787Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20d%3D%22M8.0481%2016.2438C9.39854%2014.5856%2010.6939%2012.9885%2011.9984%2011.3989C12.2464%2011.0968%2012.3662%2010.7671%2012.3731%2010.3807C12.3761%2010.2135%2012.3261%2010.1646%2012.1596%2010.165C11.6056%2010.1666%206.41195%2010.165%206.41195%2010.165V11.4709H10.4978C10.4424%2011.543%207.83556%2014.7218%206.57932%2016.2403C6.37112%2016.4919%206.26503%2016.7645%206.25401%2017.0936C6.24628%2017.3242%206.28864%2017.4139%206.52267%2017.4211V17.4217H11.9356C12.1782%2017.4217%2012.3749%2017.225%2012.3749%2016.9823V16.2487V16.2438H8.0481V16.2438Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.948%2026.1338C6.03613%2027.1172%207.26917%2027.9424%208.61108%2028.5752V26.1338H4.948ZM0.00268555%2014.7119C0.0775146%2010.7393%201.69666%207.14453%204.28479%204.50293C4.0459%204.98242%203.83435%205.47949%203.64661%205.99121C2.58862%208.87598%202.31299%2011.8506%202.69116%2014.8916C2.95862%2017.042%203.55518%2019.0869%204.63391%2020.9775C4.8269%2021.3154%205.02271%2021.6582%205.26489%2021.9609C5.76672%2022.5879%205.80981%2023.2725%205.59888%2024.0049C5.4873%2024.3926%205.32227%2024.75%205.11304%2025.082C4.95691%2025.3291%204.77612%2025.5635%204.57434%2025.7842C1.81921%2023.1201%200.0819092%2019.4102%200.00280762%2015.2939C0.000976562%2015.1963%200%2015.0986%200%2015C0%2014.9033%200.000854492%2014.8076%200.00268555%2014.7119Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M24.8226%2026.3367C22.191%2028.6189%2018.7568%2029.9998%2015%2029.9998C11.1449%2029.9998%207.62952%2028.5457%204.97241%2026.156C6.32458%2026.1921%207.61877%2025.9031%208.86353%2025.3464C8.97681%2025.2957%209.06262%2025.3113%209.16443%2025.364C12.2258%2026.9646%2015.5131%2027.5125%2018.926%2027.3962C20.9574%2027.3269%2022.9333%2027.0046%2024.8226%2026.3367Z%22%20fill%3D%22%23015BDF%22/%3E%3C/svg%3E') !important;\n}\n@keyframes hide {\n 100% {\n opacity: 0;\n transform: scale(0);\n }\n}\n#sbz92 .widget-header-expand-container {\n width: 100% !important;\n}\n#sbz92 .message-input {\n width: 100% !important;\n border-top: 1px solid #e3e3e3 !important;\n display: flex !important;\n flex-direction: row !important;\n padding: 15px 22.5px !important;\n}\n#sbz92 .message-input--disabled {\n background: #f0f0f0 !important;\n opacity: 0.6 !important;\n filter: grayscale(1) !important;\n}\n#sbz92 textarea[disabled='disabled']::-webkit-input-placeholder {\n color: #a4a4a4 !important;\n -webkit-text-fill-color: #a4a4a4 !important;\n}\n#sbz92 textarea[disabled='disabled']:-ms-input-placeholder {\n color: #a4a4a4 !important;\n -webkit-text-fill-color: #a4a4a4 !important;\n}\n#sbz92 textarea[disabled='disabled']::placeholder {\n color: #a4a4a4 !important;\n -webkit-text-fill-color: #a4a4a4 !important;\n}\n#sbz92 .message-input--input {\n word-wrap: break-word !important;\n resize: none !important;\n flex: 1 !important;\n align-self: center !important;\n margin-right: 7.5px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .message-input--input::placeholder {\n opacity: 0.5 !important;\n /* Firefox */\n}\n#sbz92 .message-input--input::-ms-input-placeholder {\n /* Edge 12 -18 */\n opacity: 0.5 !important;\n /* Firefox */\n}\n#sbz92 .message-input--emoji-button {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImdyYXkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLXNtaWxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCI+PC9jaXJjbGU+PHBhdGggZD0iTTggMTRzMS41IDIgNCAyIDQtMiA0LTIiPjwvcGF0aD48bGluZSB4MT0iOSIgeTE9IjkiIHgyPSI5LjAxIiB5Mj0iOSI+PC9saW5lPjxsaW5lIHgxPSIxNSIgeTE9IjkiIHgyPSIxNS4wMSIgeTI9IjkiPjwvbGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .message-input--button {\n background-size: 70% !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 32px !important;\n height: 32px !important;\n display: block !important;\n cursor: pointer !important;\n position: relative !important;\n border-radius: 20px !important;\n transition: background-color 0.2s !important;\n}\n#sbz92 .message-input--button:hover {\n background-color: #eeeeee !important;\n}\n#sbz92 .message-input--disabled .message-input--button {\n cursor: default !important;\n}\n#sbz92 .message-input--disabled .message-input--button {\n cursor: default !important;\n}\n#sbz92 .message-input--attachment-button {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImdyYXkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLXBhcGVyY2xpcCI+PHBhdGggZD0iTTIxLjQ0IDExLjA1bC05LjE5IDkuMTlhNiA2IDAgMCAxLTguNDktOC40OWw5LjE5LTkuMTlhNCA0IDAgMCAxIDUuNjYgNS42NmwtOS4yIDkuMTlhMiAyIDAgMCAxLTIuODMtMi44M2w4LjQ5LTguNDgiPjwvcGF0aD48L3N2Zz4K') !important;\n}\n#sbz92 .message-input--send-button {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2225%22%20height%3D%2225%22%20viewBox%3D%220%200%2024%2024%22%20stroke-width%3D%221.5%22%20stroke%3D%22@esc-primary-color-esc%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22/%3E%3Cpath%20d%3D%22M4.698%204.034l16.302%207.966l-16.302%207.966a.503%20.503%200%200%201%20-.546%20-.124a.555%20.555%200%200%201%20-.12%20-.568l2.468%20-7.274l-2.468%20-7.274a.555%20.555%200%200%201%20.12%20-.568a.503%20.503%200%200%201%20.546%20-.124z%22%20fill%3D%22@esc-primary-color-esc%22/%3E%3Cpath%20d%3D%22M6.5%2012h14.5%22%20/%3E%3C/svg%3E') !important;\n background-size: 82% !important;\n}\n#sbz92 .message-input--preform {\n justify-content: center !important;\n padding: 11px !important;\n @spacer 2;\n}\n#sbz92 .btn--preform {\n border-radius: 7px !important;\n padding-left: 32px !important;\n padding-right: 32px !important;\n height: 40px !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n font-size: 14px !important;\n line-height: 20px !important;\n text-align: center !important;\n background: '@primary_color' !important;\n width: 60% !important;\n}\n#sbz92 .widget-body.embed-chat .message-input {\n border: 1px solid #e3e3e3 !important;\n border-radius: 8px !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .form-label {\n margin-top: 15px !important;\n}\n#sbz92 .form {\n border: 1px solid #eeeeee !important;\n box-sizing: border-box !important;\n box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15) !important;\n border-radius: 7px !important;\n}\n#sbz92 textarea.form-control {\n resize: none !important;\n word-wrap: break-word !important;\n}\n#sbz92 .form-control--container {\n position: relative !important;\n}\n#sbz92 input.form-control[disabled] {\n background: #f9f9f9 !important;\n}\n#sbz92 .form-control--container .form-control--check {\n position: absolute !important;\n right: 10px !important;\n top: 10px !important;\n background-size: 100% 100% !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 20px !important;\n height: 20px !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM1QkFBMUQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWNoZWNrIj48cG9seWxpbmUgcG9pbnRzPSIyMCA2IDkgMTcgNCAxMiI+PC9wb2x5bGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .form-control--valid-input--error {\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n font-size: 14px !important;\n padding-top: 5px !important;\n}\n#sbz92 input[type='text'].form-control.input--error,\n#sbz92 input[type='tel'].form-control.input--error,\n#sbz92 input[type='email'].form-control.input--error,\n#sbz92 input[type='number'].form-control.input--error,\n#sbz92 input[type='date'].form-control.input--error,\n#sbz92 textarea.form-control.input--error,\n#sbz92 select.form-control.input--error {\n border: 1px solid #dc3545 !important;\n background: #dd41500f !important;\n}\n#sbz92 input[type='text'].form-control,\n#sbz92 input[type='tel'].form-control,\n#sbz92 input[type='email'].form-control,\n#sbz92 input[type='number'].form-control,\n#sbz92 input[type='date'].form-control,\n#sbz92 textarea.form-control,\n#sbz92 select.form-control {\n width: 100% !important;\n border: 1px solid #c4c4c4 !important;\n border-radius: 8px !important;\n transition: all 100ms ease !important;\n padding: 10px 12px !important;\n}\n#sbz92 input[type='text'].form-control:hover,\n#sbz92 input[type='tel'].form-control:hover,\n#sbz92 input[type='email'].form-control:hover,\n#sbz92 input[type='number'].form-control:hover,\n#sbz92 input[type='date'].form-control:hover,\n#sbz92 textarea.form-control:hover,\n#sbz92 select.form-control:hover {\n border: 1px solid #6c757d !important;\n}\n#sbz92 input[type='text'].form-control.input--error:hover,\n#sbz92 input[type='tel'].form-control.input--error:hover,\n#sbz92 input[type='email'].form-control.input--error:hover,\n#sbz92 input[type='number'].form-control.input--error:hover,\n#sbz92 input[type='date'].form-control.input--error:hover,\n#sbz92 textarea.form-control.input--error:hover,\n#sbz92 select.form-control.input--error:hover {\n border: 1px solid #dc3545 !important;\n}\n#sbz92 select.form-control {\n padding: 1px 8px !important;\n}\n#sbz92 input[type='date'].form-control {\n height: 40px !important;\n width: 100% !important;\n background-color: #fff !important;\n}\n#sbz92 .form-wrapper-attachment input[type='date'].form-control {\n height: 32px !important;\n padding-top: 6px !important;\n padding-bottom: 6px !important;\n}\n#sbz92 input[type='text'].form-control:focus,\n#sbz92 input[type='tel'].form-control:focus,\n#sbz92 input[type='email'].form-control:focus,\n#sbz92 input[type='number'].form-control:focus,\n#sbz92 input[type='date'].form-control:focus,\n#sbz92 textarea.form-control:focus,\n#sbz92 select.form-control:focus {\n border: 1px solid '@primary_color' !important;\n}\n#sbz92 input[type='text'].form-control.input--error:focus,\n#sbz92 input[type='tel'].form-control.input--error:focus,\n#sbz92 input[type='email'].form-control.input--error:focus,\n#sbz92 input[type='number'].form-control.input--error:focus,\n#sbz92 input[type='date'].form-control.input--error:focus,\n#sbz92 textarea.form-control.input--error:focus,\n#sbz92 select.form-control.input--error:focus {\n border: 1px solid #dc3545 !important;\n}\n#sbz92 .label {\n display: block !important;\n padding-bottom: 6px !important;\n margin-top: 8px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n font-size: 14px !important;\n font-weight: 500 !important;\n}\n#sbz92 .form--btn-submit {\n border-radius: 7px !important;\n padding-left: 32px !important;\n padding-right: 32px !important;\n width: 100% !important;\n}\n#sbz92 .form .radio {\n display: block !important;\n position: relative !important;\n width: 100% !important;\n margin-top: 5px !important;\n}\n#sbz92 .form .radio:first-of-type {\n margin-top: 0 !important;\n}\n#sbz92 .form input[type='radio'] {\n position: absolute !important;\n visibility: hidden !important;\n}\n#sbz92 .form .radio--label {\n padding-left: 22px !important;\n display: block !important;\n position: relative !important;\n z-index: 9 !important;\n cursor: pointer !important;\n}\n#sbz92 .form .radio--check {\n display: block !important;\n position: absolute !important;\n border: 1px solid #aaa !important;\n border-radius: 100% !important;\n height: 16px !important;\n width: 16px !important;\n top: 0px !important;\n left: 0px !important;\n z-index: 5 !important;\n transition: border 0.15s linear !important;\n -webkit-transition: border 0.15s linear !important;\n}\n#sbz92 .form .radio--check:hover {\n border: 1px solid #888 !important;\n}\n#sbz92 .form .radio--check::before {\n display: block !important;\n position: absolute !important;\n content: '' !important;\n border-radius: 100% !important;\n height: 10px !important;\n width: 10px !important;\n top: 2px !important;\n left: 2px !important;\n margin: auto !important;\n transition: background 0.15s linear !important;\n -webkit-transition: background 0.15s linear !important;\n}\n#sbz92 .form input[type='radio']:checked ~ .radio--check {\n border: 1px solid '@primary_color' !important;\n}\n#sbz92 .form input[type='radio']:checked ~ .radio--check::before {\n background: '@primary_color' !important;\n}\n#sbz92 .form .checkbox {\n display: block !important;\n position: relative !important;\n width: 100% !important;\n margin-top: 5px !important;\n}\n#sbz92 .form .checkbox:first-of-type {\n margin-top: 0 !important;\n}\n#sbz92 .form input[type='checkbox'] {\n position: absolute !important;\n visibility: hidden !important;\n}\n#sbz92 .form .checkbox--label {\n padding-left: 22px !important;\n display: block !important;\n position: relative !important;\n z-index: 9 !important;\n cursor: pointer !important;\n}\n#sbz92 .form .checkbox--check {\n display: block !important;\n position: absolute !important;\n border: 1px solid #aaa !important;\n border-radius: 4 px !important;\n height: 16px !important;\n width: 16px !important;\n top: 0px !important;\n left: 0px !important;\n z-index: 5 !important;\n transition: border 0.15s linear !important;\n -webkit-transition: border 0.15s linear !important;\n}\n#sbz92 .form .checkbox--check:hover {\n border: 1px solid #888 !important;\n}\n#sbz92 .form .checkbox--check::before {\n display: block !important;\n position: absolute !important;\n content: '' !important;\n height: 100% !important;\n width: 100% !important;\n margin: auto !important;\n transition: background 0.15s linear !important;\n -webkit-transition: background 0.15s linear !important;\n}\n#sbz92 .form input[type='checkbox']:checked ~ .checkbox--check {\n border: 1px solid '@primary_color' !important;\n}\n#sbz92 .form input[type='checkbox']:checked ~ .checkbox--check::before {\n background: '@primary_color' !important;\n}\n#sbz92 .form .select .form-control {\n padding-right: 20px !important;\n}\n#sbz92 .form select {\n /*background: url(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00LjQxMDU4IDYuOTExMDdDNC43MzYwMiA2LjU4NTYzIDUuMjYzNjYgNi41ODU2MyA1LjU4OTA5IDYuOTExMDdMOS45OTk4NCAxMS4zMjE4TDE0LjQxMDYgNi45MTEwN0MxNC43MzYgNi41ODU2MyAxNS4yNjM3IDYuNTg1NjMgMTUuNTg5MSA2LjkxMTA3QzE1LjkxNDUgNy4yMzY1MSAxNS45MTQ1IDcuNzY0MTQgMTUuNTg5MSA4LjA4OTU4TDEwLjU4OTEgMTMuMDg5NkMxMC4yNjM3IDEzLjQxNSA5LjczNjAyIDEzLjQxNSA5LjQxMDU4IDEzLjA4OTZMNC40MTA1OCA4LjA4OTU4QzQuMDg1MTQgNy43NjQxNCA0LjA4NTE0IDcuMjM2NTEgNC40MTA1OCA2LjkxMTA3WiIgZmlsbD0iYmxhY2siLz4KPC9zdmc+\") no-repeat right;*/\n}\n#sbz92 .form-require-info--list {\n background: #fff !important;\n overflow-y: auto !important;\n overflow-x: hidden !important;\n}\n#sbz92 .form-require-info--title {\n font-size: 18px !important;\n line-height: 20px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n background: #fff !important;\n border-bottom: 1px solid #f0f0f0 !important;\n}\n#sbz92 .form-require-info--item {\n border-bottom: 1px solid #f0f0f0 !important;\n}\n#sbz92 .form-require-info--item:hover {\n cursor: pointer !important;\n background: #e0e0e0 !important;\n}\n#sbz92 input[type='checkbox'] {\n background-color: initial !important;\n cursor: default !important;\n -webkit-appearance: checkbox !important;\n box-sizing: border-box !important;\n margin: 3px 3px 3px 4px !important;\n padding: initial !important;\n border: initial !important;\n}\n#sbz92 input[type='radio'] {\n background-color: initial !important;\n cursor: default !important;\n -webkit-appearance: radio !important;\n box-sizing: border-box !important;\n margin: 3px 3px 0px 5px !important;\n padding: initial !important;\n border: initial !important;\n}\n#sbz92 option {\n font-weight: normal !important;\n display: block !important;\n white-space: pre !important;\n min-height: 1.2em !important;\n padding: 0px 2px 1px !important;\n}\n#sbz92 select {\n -webkit-writing-mode: horizontal-tb !important;\n text-rendering: auto !important;\n color: -internal-light-dark-color(black, white) !important;\n letter-spacing: normal !important;\n word-spacing: normal !important;\n text-transform: none !important;\n text-indent: 0px !important;\n text-shadow: none !important;\n display: inline-block !important;\n text-align: start !important;\n -webkit-appearance: menulist !important;\n box-sizing: border-box !important;\n align-items: center !important;\n white-space: pre !important;\n -webkit-rtl-ordering: logical !important;\n background-color: -internal-light-dark-color(white, black) !important;\n cursor: default !important;\n margin: 0em !important;\n font: 400 13.3333px Arial !important;\n border-radius: 0px !important;\n border-width: 1px !important;\n border-style: solid !important;\n border-color: #a9a9a9 !important;\n border-image: initial !important;\n}\n#sbz92 select {\n position: relative !important;\n display: inline-block !important;\n border: 2px #cccc solid !important;\n border-radius: 5px !important;\n height: 36px !important;\n line-height: 34px !important;\n padding: 0 12px !important;\n font-size: 14px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .custom-select--wrap-selected {\n display: flex !important;\n position: relative !important;\n justify-content: space-between !important;\n cursor: pointer !important;\n border: 1px solid #d8d8d8 !important;\n border-radius: 5px !important;\n padding: 5px !important;\n}\n#sbz92 .custom-select--selected-items {\n display: flex !important;\n align-items: center !important;\n flex-wrap: wrap !important;\n}\n#sbz92 .custom-select--selected-item {\n display: flex !important;\n align-items: center !important;\n margin: 3px 3px !important;\n padding: 1px 6px !important;\n border-radius: 5px !important;\n border: 1px solid #d8d8d8 !important;\n font-size: 14px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n vertical-align: top !important;\n}\n#sbz92 .icn-delete:before {\n display: flex !important;\n justify-items: center !important;\n font-size: 12px !important;\n margin-left: 5px !important;\n opacity: 0.5 !important;\n content: '\\2715' !important;\n}\n#sbz92 .custom-select--wrap-options {\n display: flex !important;\n flex-direction: column !important;\n position: absolute !important;\n left: 0 !important;\n top: 100% !important;\n border: 1px solid #dadce0 !important;\n -webkit-box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n border-radius: 5px !important;\n width: 100% !important;\n background: #fff !important;\n z-index: 11 !important;\n max-height: 200px !important;\n overflow-y: auto !important;\n}\n#sbz92 .custom-select--input-search {\n font-size: 15px !important;\n padding: 8px !important;\n border-bottom: 1px solid #d8d8d8 !important;\n}\n#sbz92 .custom-select--items-options {\n margin: 0 !important;\n display: flex !important;\n flex-direction: column !important;\n}\n#sbz92 .custom-select--item-options {\n padding: 10px !important;\n cursor: pointer !important;\n}\n#sbz92 .custom-select--item-options:hover {\n background-color: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n}\n#sbz92 .custom-select--icon-dropdown {\n margin-left: auto !important;\n float: right !important;\n cursor: pointer !important;\n}\n#sbz92 .custom-select--icon-dropdown path {\n d: path('M 7 9.5 L 12 14.5 L 17 9.5 H 7 Z') !important;\n fill: black !important;\n}\n#sbz92 .form-component {\n margin-bottom: 15px !important;\n}\n#sbz92 .form-component:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .form-component.submitted {\n margin-bottom: 8px !important;\n}\n#sbz92 .form-component.form-component-submit-button {\n margin-top: 20px !important;\n}\n#sbz92 .form-wrapper.form {\n padding: 20px !important;\n background-color: #fff !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form {\n padding: 12px 15px !important;\n margin-top: 5px !important;\n box-shadow: 0 0 0 1px #eeeeee !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='text'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='tel'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='email'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='number'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='date'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form select.form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form textarea.form-control {\n padding: 6px 10px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component {\n margin-bottom: 12px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component.submitted {\n margin-bottom: 5px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component.submitted:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component:first-child .label {\n margin-top: 0 !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component.form-component-submit-button {\n margin-top: 16px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .label {\n padding-bottom: 4px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-control--valid-input--error {\n padding-top: 3px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .btn--start-convo {\n height: 36px !important;\n}\n#sbz92 select.form-control.form-control--empty {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n@media only screen and (min-width: 968px) {\n #sbz92 .form-radios-wrapper.horizontal {\n display: flex;\n flex-wrap: wrap;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio {\n margin-right: 10px;\n width: 300px;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio:first-child {\n margin-top: 0;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio:nth-child(2) {\n margin-top: 0;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio:nth-child(2n) {\n margin-right: 0;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal {\n display: flex;\n flex-wrap: wrap;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox {\n margin-right: 10px;\n width: 300px;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox:first-child {\n margin-top: 0;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox:nth-child(2) {\n margin-top: 0;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox:nth-child(2n) {\n margin-right: 0;\n }\n}\n#sbz92 .form-ratings-wrapper {\n display: inline-flex !important;\n}\n#sbz92 .star {\n width: 32px !important;\n height: 30px !important;\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ") !important;\n background-position: 0px 0px !important;\n background-size: cover !important;\n}\n#sbz92 .form-wrapper-attachment .star-wrapper {\n padding-right: 12px !important;\n}\n#sbz92 .star-wrapper {\n cursor: pointer !important;\n padding-right: 20px !important;\n}\n#sbz92 .star-wrapper:last-child {\n padding-right: 0 !important;\n}\n#sbz92 .star-wrapper.hovering .star {\n background-position: -32px 0 !important;\n}\n#sbz92 .star-wrapper.selected {\n cursor: auto !important;\n}\n#sbz92 .star-wrapper.selected .star {\n background-position: -64px 0 !important;\n}\n#sbz92 .conversation-history-error {\n display: flex !important;\n align-items: center !important;\n gap: 8px !important;\n margin: 8px 0 16px !important;\n padding: 8px 10px !important;\n border-radius: 10px !important;\n background: #f5f6f8 !important;\n color: #737782 !important;\n font-size: 12px !important;\n line-height: 18px !important;\n text-align: left !important;\n}\n#sbz92 .conversation-history-error__text {\n flex: 1 !important;\n min-width: 0 !important;\n}\n#sbz92 .conversation-history-error__retry {\n position: relative !important;\n flex-shrink: 0 !important;\n border: 0 !important;\n border-radius: 6px !important;\n padding: 5px 8px !important;\n background: transparent !important;\n color: #545866 !important;\n font-size: 12px !important;\n font-weight: 600 !important;\n line-height: 18px !important;\n cursor: pointer !important;\n}\n#sbz92 .conversation-history-error__retry:hover:not(:disabled) {\n background: #e8eaf0 !important;\n}\n#sbz92 .conversation-history-error__retry:disabled {\n cursor: wait !important;\n}\n#sbz92 .conversation-history-error__retry:focus-visible {\n outline: 2px solid #737782 !important;\n outline-offset: 2px !important;\n}\n#sbz92 .conversation-history-error__spinner {\n position: absolute !important;\n inset: 0 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n}\n#sbz92 .widget-body--events-container {\n overflow-x: hidden !important;\n overflow-y: auto !important;\n display: flex !important;\n flex-direction: column !important;\n flex: 1 !important;\n padding-left: 22.5px !important;\n padding-right: 22.5px !important;\n}\n#sbz92 .widget-body--events {\n padding-top: 20px !important;\n flex: 1 !important;\n}\n#sbz92 .mobile .widget-body--events {\n display: flex !important;\n flex-direction: column !important;\n justify-content: flex-end !important;\n padding-bottom: 15px !important;\n}\n#sbz92 .widget-body--events-container.widget-body--events-container__error {\n align-items: center !important;\n justify-content: center !important;\n}\n#sbz92 .convo-event {\n position: relative !important;\n}\n#sbz92 .convo-event-time {\n text-align: center !important;\n margin-top: 15px !important;\n}\n#sbz92 .convo-event-time span {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .file-attachment {\n padding: 10px !important;\n border-radius: 10px !important;\n cursor: pointer !important;\n margin: 5px 0 0 0 !important;\n}\n#sbz92 .file-attachment--agent {\n background-color: '@primary_color' !important;\n width: fit-content !important;\n}\n#sbz92 .file-attachment--user {\n background-color: #eeeeee !important;\n align-self: flex-end !important;\n}\n#sbz92 .file-attachment--link {\n display: flex !important;\n flex-direction: row !important;\n align-items: center !important;\n width: fit-content !important;\n}\n#sbz92 .file-attachment--agent .file-attachment--filename {\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n text-decoration: underline !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n max-width: 200px !important;\n}\n#sbz92 .file-attachment--user .file-attachment--filename {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n text-decoration: underline !important;\n text-overflow: ellipsis !important;\n overflow: hidden !important;\n white-space: nowrap !important;\n max-width: 200px !important;\n}\n#sbz92 .file-attachment--download {\n width: 24px !important;\n height: 24px !important;\n border-radius: 30px !important;\n display: inline-block !important;\n}\n#sbz92 .file-attachment--agent .file-attachment--download {\n background: '@text_color' !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMjY1RkYiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWFycm93LWRvd24iPjxsaW5lIHgxPSIxMiIgeTE9IjUiIHgyPSIxMiIgeTI9IjE5Ij48L2xpbmU+PHBvbHlsaW5lIHBvaW50cz0iMTkgMTIgMTIgMTkgNSAxMiI+PC9wb2x5bGluZT48L3N2Zz4K') !important;\n background-size: 15px 15px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n}\n#sbz92 .file-attachment--user .file-attachment--download {\n background: #c4c4c4 !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9ImZlYXRoZXIgZmVhdGhlci1hcnJvdy1kb3duIj48bGluZSB4MT0iMTIiIHkxPSI1IiB4Mj0iMTIiIHkyPSIxOSI+PC9saW5lPjxwb2x5bGluZSBwb2ludHM9IjE5IDEyIDEyIDE5IDUgMTIiPjwvcG9seWxpbmU+PC9zdmc+Cg==') !important;\n background-size: 15px 15px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n}\n#sbz92 .message-text--user {\n line-height: 1.5 !important;\n margin: 5px 0 0 !important;\n display: inline-block !important;\n font-weight: 500 !important;\n background-color: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n padding: 12px 16px 12px 16px !important;\n}\n#sbz92 .message-text--user.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .message-text--agent.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .message-text--user.message-user--error {\n background-color: #dc3545 !important;\n}\n#sbz92 .message-text--deleted {\n opacity: 0.7 !important;\n font-style: italic !important;\n}\n#sbz92 .message-text--agent {\n line-height: 1.5 !important;\n white-space: pre-wrap !important;\n display: inline-block !important;\n background: '@primary_color_faded' !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n padding: 12px 16px 12px 16px !important;\n}\n#sbz92 .message-agent.message-text--agent {\n max-width: 100% !important;\n margin-top: 0 !important;\n}\n#sbz92 .message-block-pre {\n display: block !important;\n min-width: 0 !important;\n max-width: 100% !important;\n margin: 4px 0 !important;\n padding: 10px 12px !important;\n border: 1px solid rgba(0, 0, 0, 0.06) !important;\n border-radius: 8px !important;\n background: rgba(0, 0, 0, 0.03) !important;\n white-space: pre-wrap !important;\n overflow-wrap: anywhere !important;\n word-break: normal !important;\n}\n#sbz92 .message-block-code,\n#sbz92 .message-block-code * {\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace !important;\n font-size: 13px !important;\n line-height: 20px !important;\n}\n#sbz92 .message-block-pre .message-block-code {\n display: block !important;\n}\n#sbz92 .message-user__container {\n display: flex !important;\n flex-direction: row !important;\n align-items: flex-end !important;\n justify-content: flex-end !important;\n}\n#sbz92 .sending_dot.sending_dot__hide {\n opacity: 0 !important;\n background-color: #000 !important;\n}\n#sbz92 .sending_dot {\n width: 15px !important;\n height: 15px !important;\n margin-right: 5px !important;\n border-radius: 50% !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWNsb2NrIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCI+PC9jaXJjbGU+PHBvbHlsaW5lIHBvaW50cz0iMTIgNiAxMiAxMiAxNiAxNCI+PC9wb2x5bGluZT48L3N2Zz4K') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n}\n#sbz92 .message-user {\n border-radius: 18px !important;\n border-bottom-right-radius: 4px !important;\n max-width: 85% !important;\n align-self: flex-end !important;\n word-break: break-word !important;\n position: relative !important;\n white-space: pre-wrap !important;\n}\n#sbz92 .message-user.message-user-images-container {\n width: 85% !important;\n display: flex !important;\n justify-content: flex-end !important;\n}\n#sbz92 .message-user.message-user-audio {\n flex: 1 !important;\n}\n#sbz92 .message-agent {\n border-radius: 18px !important;\n border-bottom-left-radius: 4px !important;\n max-width: 85% !important;\n word-break: break-word !important;\n position: relative !important;\n}\n#sbz92 a.message_error {\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n opacity: 0.8 !important;\n display: block !important;\n text-align: end !important;\n font-size: 13px !important;\n margin-top: 5px !important;\n margin-bottom: 10px !important;\n}\n#sbz92 a.message_error:hover {\n opacity: 1 !important;\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n}\n#sbz92 .message_error__text {\n display: inline-block !important;\n vertical-align: text-top !important;\n}\n#sbz92 .message_error__icon {\n display: inline-block !important;\n vertical-align: bottom !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSIjZGMzNTQ1IiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWFsZXJ0LWNpcmNsZSI+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAiPjwvY2lyY2xlPjxsaW5lIHgxPSIxMiIgeTE9IjgiIHgyPSIxMiIgeTI9IjEyIj48L2xpbmU+PGxpbmUgeDE9IjEyIiB5MT0iMTYiIHgyPSIxMi4wMSIgeTI9IjE2Ij48L2xpbmU+PC9zdmc+Cgo=') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 20px !important;\n height: 20px !important;\n}\n#sbz92 .image-attachment__img {\n width: 100% !important;\n margin: 5px 0 0 0 !important;\n border-radius: 7px !important;\n border: 1px solid #eeeeee !important;\n}\n#sbz92 .audio-attachment {\n width: 100% !important;\n margin: 5px 0 0 0 !important;\n height: 45px !important;\n display: inline !important;\n}\n#sbz92 .audio-attachment__audio {\n all: inherit !important;\n width: 100% !important;\n}\n#sbz92 .video-attachment {\n border-radius: 7px !important;\n width: 100% !important;\n margin: 5px 0 0 0 !important;\n}\n#sbz92 .video-attachment__video {\n all: inherit !important;\n width: 100% !important;\n}\n#sbz92 .info-message {\n text-align: center !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n margin: 10px !important;\n}\n#sbz92 .info-message--ended {\n padding-top: 16px !important;\n}\n#sbz92 .conversation-event {\n display: block !important;\n min-width: 0 !important;\n border: 0 !important;\n padding: 0 !important;\n margin: 0 !important;\n}\n#sbz92 .conversation-history-start {\n display: block !important;\n height: 1px !important;\n flex-shrink: 0 !important;\n}\n#sbz92 .message-user__container--send {\n transition: transform 260ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;\n transform: translate3d(0, 0, 0) !important;\n}\n#sbz92 .message-user__container--send.message-user__container--enter {\n transform: translate3d(0, 14px, 0) !important;\n}\n@media (prefers-reduced-motion: reduce) {\n #sbz92 .message-user__container--send {\n transition: none !important;\n }\n #sbz92 .message-user__container--send.message-user__container--enter {\n transform: none !important;\n }\n}\n#sbz92 .conversation-event--history {\n filter: grayscale(0.8) !important;\n}\n#sbz92 .conversation-event--history + .conversation-event:not(.conversation-event--history)::before {\n content: '' !important;\n display: block !important;\n border-top: 2px solid '@primary_color_faded' !important;\n margin: 60px 40px !important;\n}\n#sbz92 .message-sender {\n margin-top: 10px !important;\n}\n#sbz92 .message-sender-avatar {\n border-radius: 50% !important;\n width: 25px !important;\n height: 25px !important;\n margin-right: 10px !important;\n}\n#sbz92 .message-sender-name {\n color: #495057 !important;\n -webkit-text-fill-color: #495057 !important;\n vertical-align: middle !important;\n}\n#sbz92 .message-system {\n text-align: center !important;\n margin: 10px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .form-attachment {\n display: flex !important;\n flex-direction: column !important;\n padding: 10px !important;\n -webkit-box-shadow: 0 0 10px #dee2e6 !important;\n box-shadow: 0 0 10px #dee2e6 !important;\n border-radius: 7px !important;\n margin-top: 10px !important;\n}\n#sbz92 .form-attachment-field {\n display: flex !important;\n flex-direction: column !important;\n margin-bottom: 0px !important;\n}\n#sbz92 .form-attachment-field__title {\n color: #4c4c4c !important;\n -webkit-text-fill-color: #4c4c4c !important;\n}\n#sbz92 .form-attachment-field__text {\n width: 100% !important;\n border: 1px solid #dbdbdb !important;\n padding: 10px !important;\n margin: 3px 0px 0px 0px !important;\n border-radius: 7px !important;\n}\n#sbz92 .input--error {\n border: 1px solid red !important;\n}\n#sbz92 .input--success {\n background-color: #f9f9f9 !important;\n pointer-events: none !important;\n}\n#sbz92 .form-attachment-field__error {\n color: brown !important;\n -webkit-text-fill-color: brown !important;\n float: right !important;\n}\n#sbz92 .form-attachment-field__checkbox {\n width: 100% !important;\n all: inherit !important;\n -webkit-appearance: textfield !important;\n margin-right: 8px !important;\n}\n#sbz92 .form-attachment-field__checkbox:hover {\n cursor: pointer !important;\n}\n#sbz92 .form-attachment-field__list-item {\n display: flex !important;\n align-items: center !important;\n margin: 4px !important;\n margin-left: 0px !important;\n}\n#sbz92 .form-attachment-field__radio {\n width: 100% !important;\n all: inherit !important;\n -webkit-appearance: textfield !important;\n margin-right: 8px !important;\n}\n#sbz92 .form-attachment-field__datetime {\n width: 100% !important;\n border: 1px solid #dbdbdb !important;\n padding: 10px !important;\n margin: 3px 0px 0px 0px !important;\n border-radius: 7px !important;\n}\n#sbz92 .form-attachment--submit-btn {\n background-color: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n width: 100% !important;\n margin-top: 10px !important;\n border-radius: 7px !important;\n padding: 10px !important;\n text-align: center !important;\n font-size: 16px !important;\n}\n#sbz92 .form-attachment--submit-btn:hover {\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n}\n#sbz92 .red {\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n}\n#sbz92 .typing {\n background-color: #f4f5f7 !important;\n color: #7a7a7b !important;\n -webkit-text-fill-color: #7a7a7b !important;\n padding: 10px !important;\n opacity: 1 !important;\n transition: all 0.2s !important;\n position: absolute !important;\n bottom: 0px !important;\n left: 0px !important;\n width: 100% !important;\n}\n#sbz92 .typing--hidden {\n opacity: 0 !important;\n display: none !important;\n}\n#sbz92 .markdown-message img {\n max-width: 100% !important;\n margin-top: 10px !important;\n}\n#sbz92 .button-attachments {\n display: block !important;\n margin-top: 5px !important;\n}\n#sbz92 .url-button-attachment:first-child {\n border-top-left-radius: 7px !important;\n border-top-right-radius: 7px !important;\n}\n#sbz92 .url-button-attachment:last-child {\n border-bottom-left-radius: 7px !important;\n border-bottom-right-radius: 7px !important;\n border-bottom: 1px solid '@primary_color' !important;\n}\n#sbz92 .agent-message .url-button-attachment {\n text-decoration: none !important;\n padding: 10px 18px !important;\n display: block !important;\n text-align: center !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n border: 1px solid #000 !important;\n border-radius: 12px !important;\n text-overflow: ellipsis !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n white-space: nowrap !important;\n}\n#sbz92 .agent-message .url-button-attachment:hover {\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n border-color: '@primary_color' !important;\n}\n#sbz92 .message_quick_replies {\n display: flex !important;\n flex-wrap: wrap !important;\n flex-direction: column !important;\n}\n#sbz92 .message_quick_reply {\n cursor: pointer !important;\n position: relative !important;\n padding: 10px 18px !important;\n margin-top: 8px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n border-radius: 12px !important;\n user-select: none !important;\n overflow: hidden !important;\n white-space: nowrap !important;\n width: fit-content !important;\n font-weight: 500 !important;\n max-width: 100% !important;\n text-overflow: ellipsis !important;\n border: 1px solid #000 !important;\n transition: all 100ms ease !important;\n}\n#sbz92 .message_quick_reply:hover {\n background: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n border-color: '@primary_color' !important;\n}\n#sbz92 .generic-attachment-container {\n position: relative !important;\n margin-top: 10px !important;\n}\n#sbz92 .generic-attachments {\n display: block !important;\n}\n#sbz92 .generic-attachment {\n display: flex !important;\n width: 100% !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n user-select: none !important;\n cursor: grab !important;\n}\n#sbz92 .generic-attachment--element-content {\n flex: 1 !important;\n}\n#sbz92 .generic-attachment--element {\n border: 1px solid #d8d8d8 !important;\n background: white !important;\n border-radius: 7px !important;\n overflow: hidden !important;\n width: 220px !important;\n margin-right: 10px !important;\n vertical-align: top !important;\n display: flex !important;\n flex-direction: column !important;\n flex-shrink: 0 !important;\n}\n#sbz92 .generic-attachment--element:last-child {\n margin-right: 0 !important;\n}\n#sbz92 .generic-attachment--element .generic-attachment--element-img {\n width: 100% !important;\n height: 150px !important;\n object-fit: cover !important;\n}\n#sbz92 .generic-attachment--element .url-button-attachment {\n padding: 10px !important;\n display: block !important;\n padding-top: 9px !important;\n padding-bottom: 9px !important;\n text-align: center !important;\n border: none !important;\n border-top: 1px solid #d8d8d8 !important;\n border-radius: 0 !important;\n width: 100% !important;\n color: #0d6efd !important;\n -webkit-text-fill-color: #0d6efd !important;\n}\n#sbz92 .generic-attachment--element .url-button-attachment:hover {\n color: #024dbc !important;\n -webkit-text-fill-color: #024dbc !important;\n border-color: #d8d8d8 !important;\n}\n#sbz92 .generic-attachment--element .generic-attachment--element-title {\n padding: 0px 13px !important;\n margin-top: 13px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n font-weight: 600 !important;\n font-size: 16px !important;\n line-height: 20px !important;\n white-space: normal !important;\n}\n#sbz92 .generic-attachment--element .generic-attachment--element-subtitle {\n padding: 0px 13px !important;\n color: gray !important;\n -webkit-text-fill-color: gray !important;\n margin-top: 5px !important;\n white-space: pre-wrap !important;\n display: -webkit-box !important;\n -webkit-line-clamp: 4 !important;\n -webkit-box-orient: vertical !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n}\n#sbz92 .generic-attachment--element.clickable {\n cursor: pointer !important;\n}\n#sbz92 .widget_body__events__error_msg {\n margin-top: 50px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n text-align: center !important;\n}\n#sbz92 .widget_body__events__error_retry {\n margin-top: 10px !important;\n}\n#sbz92 .generic-attachment-navigator {\n position: absolute !important;\n top: 50% !important;\n transform: translateY(-50%) !important;\n cursor: pointer !important;\n width: 20px !important;\n font-size: 80px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n color: rgba(255, 255, 255, 0.85) !important;\n -webkit-text-fill-color: rgba(255, 255, 255, 0.85) !important;\n text-shadow: 0 10px 25px rgba(0, 0, 0, 0.75) !important;\n z-index: 999 !important;\n user-select: none !important;\n}\n#sbz92 .generic-attachment-navigator:hover {\n text-shadow: 0 10px 20px rgba(0, 0, 0, 0.75) !important;\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n}\n#sbz92 .generic-attachment-navigator.generic-attachment-navigator--disabled {\n display: none !important;\n}\n#sbz92 .generic-attachment-navigator.generic-attachment-navigator--left {\n left: 2px !important;\n}\n#sbz92 .generic-attachment-navigator.generic-attachment-navigator--right {\n right: 2px !important;\n}\n#sbz92 .generic-attachment-navigator-icon {\n font-size: 80px !important;\n}\n#sbz92 .order_attachment__product_img {\n width: 40px !important;\n height: 40px !important;\n margin-right: 10px !important;\n border-radius: 5px !important;\n flex-shrink: 0 !important;\n display: block !important;\n object-fit: contain !important;\n background: whitesmoke !important;\n}\n#sbz92 .order_attachment__product_name {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n}\n#sbz92 .order_attachment__header {\n padding-bottom: 5px !important;\n border-bottom: 1px solid #ccc !important;\n margin-bottom: 5px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: space-between !important;\n}\n#sbz92 .order_attachment__product_desc {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n color: #999 !important;\n -webkit-text-fill-color: #999 !important;\n font-size: 13px !important;\n}\n#sbz92 .order_attachment__product {\n display: flex !important;\n align-items: center !important;\n margin-top: 5px !important;\n margin-bottom: 5 !important;\n}\n#sbz92 .order_attachment__text_sm {\n font-size: 13px !important;\n}\n#sbz92 .order_attachment__text_muted {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .order_attachment__text_truncate {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .order_attachment {\n margin-top: 10px !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n border: 1px solid #aaa !important;\n background: white !important;\n border-radius: 8px !important;\n width: 220px !important;\n overflow-y: auto !important;\n overflow-x: hidden !important;\n padding: 10px !important;\n}\n#sbz92 .order_attachment__footer {\n margin-top: 10px !important;\n padding-top: 10px !important;\n border-top: 1px solid #ccc !important;\n}\n#sbz92 .order_attachment__total {\n font-size: 16px !important;\n}\n#sbz92 .order_attachment__label {\n font-size: 13px !important;\n color: #777 !important;\n -webkit-text-fill-color: #777 !important;\n margin-top: 10px !important;\n}\n#sbz92 .order_attachment__label.no_margin {\n margin-top: 0 !important;\n}\n#sbz92 .order_attachment.order_attachment__user {\n margin-right: 50px !important;\n align-self: flex-end !important;\n margin-right: 0 !important;\n margin-left: 50px !important;\n align-self: flex-start !important;\n}\n#sbz92 .product_attachment {\n margin-top: 10px !important;\n border: 1px solid #d8d8d8 !important;\n background: white !important;\n border-radius: 7px !important;\n overflow: hidden !important;\n width: 200px !important;\n display: inline-block !important;\n vertical-align: top !important;\n transition: all 0.1s !important;\n}\n#sbz92 .product_attachment.product_attachment__user {\n margin-right: 50px !important;\n align-self: flex-end !important;\n margin-right: 0 !important;\n margin-left: 50px !important;\n align-self: flex-start !important;\n}\n#sbz92 .product_attachment__img {\n width: 200px !important;\n height: 200px !important;\n border-bottom: 1px solid #d8d8d8 !important;\n object-fit: cover !important;\n display: block !important;\n}\n#sbz92 .product_attachment__price {\n padding-left: 10px !important;\n}\n#sbz92 .product_attachment__btns {\n margin-top: 5px !important;\n}\n#sbz92 .product_attachment__btn {\n border-top: 1px solid #d8d8d8 !important;\n display: flex !important;\n padding: 8px 10px !important;\n align-items: center !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n justify-content: center !important;\n cursor: pointer !important;\n text-transform: capitalize !important;\n}\n#sbz92 .product_attachment__btn:last-child {\n margin-right: 0 !important;\n}\n#sbz92 .product_attachment__btn:hover {\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n}\n#sbz92 a.product_attachment__title {\n display: block !important;\n padding: 8px 10px 0 10px !important;\n font-weight: 500 !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n word-break: break-word !important;\n margin-bottom: 5px !important;\n}\n#sbz92 .product_attachment__subtitle {\n white-space: pre-wrap !important;\n display: -webkit-box !important;\n -webkit-line-clamp: 3 !important;\n -webkit-box-orient: vertical !important;\n overflow: hidden !important;\n padding: 5px 10px !important;\n color: #aaa !important;\n -webkit-text-fill-color: #aaa !important;\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n margin-bottom: 5px !important;\n}\n#sbz92 .product_attachment__btn_external_link {\n width: 16px !important;\n height: 16px !important;\n margin-left: 5px !important;\n margin-top: -2px !important;\n}\n#sbz92 .agent-convo-event-wrapper {\n max-width: 85% !important;\n margin-top: 5px !important;\n}\n#sbz92 .agent-convo-event-wrapper.full {\n max-width: 100% !important;\n}\n#sbz92 .agent-convo-event-inner {\n position: relative !important;\n display: inline-block !important;\n max-width: 100% !important;\n}\n#sbz92 .message-event-actions {\n position: absolute !important;\n bottom: -10px !important;\n opacity: 0.7 !important;\n left: calc(100% - 25px) !important;\n display: none !important;\n border: 1px solid #dee2e6 !important;\n background-color: white !important;\n border-radius: 4px !important;\n z-index: 10 !important;\n}\n#sbz92 .message-event-actions.ended {\n bottom: -10px !important;\n}\n#sbz92 .message-event-actions:hover {\n opacity: 1 !important;\n}\n#sbz92 .agent-convo-event-inner:hover .message-event-actions {\n display: flex !important;\n}\n#sbz92 .message-event-actions-static {\n display: none !important;\n margin-top: 2px !important;\n border: none !important;\n padding: 0 !important;\n gap: 4px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-actions {\n display: none !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-actions-static {\n display: flex !important;\n position: absolute !important;\n bottom: -30px !important;\n left: 0 !important;\n z-index: 2 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn {\n padding: 0 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn .message-event-action-btn-svg {\n width: 24px !important;\n height: 24px !important;\n background-position: 2px 2px !important;\n background-size: 20px 20px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n padding-right: 10px !important;\n border-radius: 5px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev .message-event-action-btn-svg {\n width: 24px !important;\n height: 24px !important;\n background-position: 2px 2px !important;\n background-size: 20px 20px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev:hover {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev.message-event-action-btn_like.active {\n color: #34c759 !important;\n -webkit-text-fill-color: #34c759 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev.message-event-action-btn_like.active {\n color: #34c759 !important;\n -webkit-text-fill-color: #34c759 !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev:hover {\n background-color: unset !important;\n}\n#sbz92 .message-event-action-btn {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n cursor: pointer !important;\n padding: 2px !important;\n}\n#sbz92 .message-event-action-btn:hover {\n background-color: #ececec !important;\n}\n#sbz92 .message-event-action-btn.active:hover {\n background-color: #dbfde3 !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev {\n padding: 0px !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev:hover {\n background-color: unset !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev.active:hover {\n background-color: unset !important;\n}\n#sbz92 .message-event-action-btn .message-event-action-btn-svg {\n width: 20px !important;\n height: 20px !important;\n border-radius: 4px !important;\n background-position: 2px 2px !important;\n background-size: 16px 16px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n}\n#sbz92 .message-event-action-btn-svg.like {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IiM2Yzc1N2QiICBzdHJva2Utd2lkdGg9IjIiICBzdHJva2UtbGluZWNhcD0icm91bmQiICBzdHJva2UtbGluZWpvaW49InJvdW5kIiAgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGh1bWItdXAiPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDExdjhhMSAxIDAgMCAxIC0xIDFoLTJhMSAxIDAgMCAxIC0xIC0xdi03YTEgMSAwIDAgMSAxIC0xaDNhNCA0IDAgMCAwIDQgLTR2LTFhMiAyIDAgMCAxIDQgMHY1aDNhMiAyIDAgMCAxIDIgMmwtMSA1YTIgMyAwIDAgMSAtMiAyaC03YTMgMyAwIDAgMSAtMyAtMyIgLz48L3N2Zz4K') !important;\n}\n#sbz92 .message-event-action-btn-svg.dislike {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IiM2Yzc1N2QiICBzdHJva2Utd2lkdGg9IjIiICBzdHJva2UtbGluZWNhcD0icm91bmQiICBzdHJva2UtbGluZWpvaW49InJvdW5kIiAgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGh1bWItZG93biI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTcgMTN2LThhMSAxIDAgMCAwIC0xIC0xaC0yYTEgMSAwIDAgMCAtMSAxdjdhMSAxIDAgMCAwIDEgMWgzYTQgNCAwIDAgMSA0IDR2MWEyIDIgMCAwIDAgNCAwdi01aDNhMiAyIDAgMCAwIDIgLTJsLTEgLTVhMiAzIDAgMCAwIC0yIC0yaC03YTMgMyAwIDAgMCAtMyAzIiAvPjwvc3ZnPgo=') !important;\n}\n#sbz92 .message-event-action-btn-svg.info {\n background-image: url('data:image/svg+xml;base64,PHN2ZwogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICB3aWR0aD0iMjQiCiAgaGVpZ2h0PSIyNCIKICB2aWV3Qm94PSIwIDAgMjQgMjQiCiAgZmlsbD0ibm9uZSIKICBzdHJva2U9IiM2Yzc1N2QiCiAgc3Ryb2tlLXdpZHRoPSIyIgogIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICBzdHJva2UtbGluZWpvaW49InJvdW5kIgo+CiAgPHBhdGggZD0iTTMgMTJhOSA5IDAgMSAwIDE4IDBhOSA5IDAgMCAwIC0xOCAwIiAvPgogIDxwYXRoIGQ9Ik0xMiA5aC4wMSIgLz4KICA8cGF0aCBkPSJNMTEgMTJoMXY0aDEiIC8+Cjwvc3ZnPgo=') !important;\n}\n#sbz92 .message-event-action-btn:hover .message-event-action-btn-svg.like {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9ImJsYWNrIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgIGNsYXNzPSJpY29uIGljb24tdGFibGVyIGljb25zLXRhYmxlci1vdXRsaW5lIGljb24tdGFibGVyLXRodW1iLXVwIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNyAxMXY4YTEgMSAwIDAgMSAtMSAxaC0yYTEgMSAwIDAgMSAtMSAtMXYtN2ExIDEgMCAwIDEgMSAtMWgzYTQgNCAwIDAgMCA0IC00di0xYTIgMiAwIDAgMSA0IDB2NWgzYTIgMiAwIDAgMSAyIDJsLTEgNWEyIDMgMCAwIDEgLTIgMmgtN2EzIDMgMCAwIDEgLTMgLTMiIC8+PC9zdmc+Cg==') !important;\n}\n#sbz92 .message-event-action-btn:hover .message-event-action-btn-svg.dislike {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9ImJsYWNrIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgIGNsYXNzPSJpY29uIGljb24tdGFibGVyIGljb25zLXRhYmxlci1vdXRsaW5lIGljb24tdGFibGVyLXRodW1iLWRvd24iPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDEzdi04YTEgMSAwIDAgMCAtMSAtMWgtMmExIDEgMCAwIDAgLTEgMXY3YTEgMSAwIDAgMCAxIDFoM2E0IDQgMCAwIDEgNCA0djFhMiAyIDAgMCAwIDQgMHYtNWgzYTIgMiAwIDAgMCAyIC0ybC0xIC01YTIgMyAwIDAgMCAtMiAtMmgtN2EzIDMgMCAwIDAgLTMgMyIgLz48L3N2Zz4K') !important;\n}\n#sbz92 .message-event-action-btn:hover .message-event-action-btn-svg.info {\n background-image: url('data:image/svg+xml;base64,PHN2ZwogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICB3aWR0aD0iMjQiCiAgaGVpZ2h0PSIyNCIKICB2aWV3Qm94PSIwIDAgMjQgMjQiCiAgZmlsbD0ibm9uZSIKICBzdHJva2U9IiMwMDAiCiAgc3Ryb2tlLXdpZHRoPSIyIgogIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICBzdHJva2UtbGluZWpvaW49InJvdW5kIgo+CiAgPHBhdGggZD0iTTMgMTJhOSA5IDAgMSAwIDE4IDBhOSA5IDAgMCAwIC0xOCAwIiAvPgogIDxwYXRoIGQ9Ik0xMiA5aC4wMSIgLz4KICA8cGF0aCBkPSJNMTEgMTJoMXY0aDEiIC8+Cjwvc3ZnPgo=') !important;\n}\n#sbz92 .message-event-action-btn.active .message-event-action-btn-svg.like {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9IiMzNEM3NTkiICBjbGFzcz0iaWNvbiBpY29uLXRhYmxlciBpY29ucy10YWJsZXItZmlsbGVkIGljb24tdGFibGVyLXRodW1iLXVwIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTMgM2EzIDMgMCAwIDEgMi45OTUgMi44MjRsLjAwNSAuMTc2djRoMmEzIDMgMCAwIDEgMi45OCAyLjY1bC4wMTUgLjE3NGwuMDA1IC4xNzZsLS4wMiAuMTk2bC0xLjAwNiA1LjAzMmMtLjM4MSAxLjYyNiAtMS41MDIgMi43OTYgLTIuODEgMi43OGwtLjE2NCAtLjAwOGgtOGExIDEgMCAwIDEgLS45OTMgLS44ODNsLS4wMDcgLS4xMTdsLjAwMSAtOS41MzZhMSAxIDAgMCAxIC41IC0uODY1YTIuOTk4IDIuOTk4IDAgMCAwIDEuNDkyIC0yLjM5N2wuMDA3IC0uMjAydi0xYTMgMyAwIDAgMSAzIC0zeiIgLz48cGF0aCBkPSJNNSAxMGExIDEgMCAwIDEgLjk5MyAuODgzbC4wMDcgLjExN3Y5YTEgMSAwIDAgMSAtLjg4MyAuOTkzbC0uMTE3IC4wMDdoLTFhMiAyIDAgMCAxIC0xLjk5NSAtMS44NWwtLjAwNSAtLjE1di03YTIgMiAwIDAgMSAxLjg1IC0xLjk5NWwuMTUgLS4wMDVoMXoiIC8+PC9zdmc+Cg==') !important;\n}\n#sbz92 .message-event-action-btn.active .message-event-action-btn-svg.dislike {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzI0ODBfOTUpIj4KPHBhdGggZD0iTTEzIDIxLjAwNzlDMTMuNzY1IDIxLjAwOCAxNC41MDEyIDIwLjcxNTcgMTUuMDU3OSAyMC4xOTFDMTUuNjE0NyAxOS42NjYyIDE1Ljk0OTkgMTguOTQ4NiAxNS45OTUgMTguMTg0OUwxNiAxOC4wMDc5VjE0LjAwNzlIMThDMTguNzM1MSAxNC4wMDggMTkuNDQ0NyAxMy43MzgyIDE5Ljk5NCAxMy4yNDk3QzIwLjU0MzQgMTIuNzYxMiAyMC44OTQyIDEyLjA4OCAyMC45OCAxMS4zNTc5TDIwLjk5NSAxMS4xODQ5TDIxIDExLjAwNzlMMjAuOTggMTAuODExOUwxOS45NzQgNS43Nzk5MkMxOS41OTMgNC4xNTQ5MiAxOC40NzIgMi45ODM5MiAxNy4xNjQgMi45OTk5MkwxNyAzLjAwNzkySDlDOC43NTQ5MSAzLjAwNzk4IDguNTE4MzggMy4wOTgwNCA4LjMzNTMzIDMuMjYxMDFDOC4xNTIyNyAzLjQyMzk3IDguMDM1NDMgMy42NDg0OSA4LjAwNyAzLjg5MTkyTDggNC4wMDc5Mkw4LjAwMSAxMy41NDM5QzguMDAxIDEzLjcxOTUgOC4wNDcyMSAxMy44OTE5IDguMTM0OTggMTQuMDQzOUM4LjIyMjc1IDE0LjE5NTkgOC4zNDg5OCAxNC4zMjIyIDguNTAxIDE0LjQwOTlDOC45MjcyOSAxNC42NTYxIDkuMjg2NCAxNS4wMDM1IDkuNTQ2NjEgMTUuNDIxM0M5LjgwNjgyIDE1LjgzOTIgOS45NjAxMyAxNi4zMTQ3IDkuOTkzIDE2LjgwNTlMMTAgMTcuMDA3OVYxOC4wMDc5QzEwIDE4LjgwMzYgMTAuMzE2MSAxOS41NjY2IDEwLjg3ODcgMjAuMTI5MkMxMS40NDEzIDIwLjY5MTggMTIuMjA0NCAyMS4wMDc5IDEzIDIxLjAwNzlaIiBmaWxsPSIjMzMzMzMzIi8+CjxwYXRoIGQ9Ik01IDE0LjAwODFDNS4yNDQ5MyAxNC4wMDggNS40ODEzNCAxMy45MTgxIDUuNjY0MzcgMTMuNzU1M0M1Ljg0NzQxIDEzLjU5MjYgNS45NjQzNCAxMy4zNjgzIDUuOTkzIDEzLjEyNTFMNiAxMy4wMDgxVjQuMDA4MDZDNS45OTk5NyAzLjc2MzEyIDUuOTEwMDQgMy41MjY3MiA1Ljc0NzI4IDMuMzQzNjhDNS41ODQ1MyAzLjE2MDY1IDUuMzYwMjUgMy4wNDM3MSA1LjExNyAzLjAxNTA2TDUgMy4wMDgwNkg0QzMuNDk1MSAzLjAwNzkzIDMuMDA4ODQgMy4xOTg3OCAyLjYzODgxIDMuNTQyMjlDMi4yNjg3OCAzLjg4NTc5IDIuMDQyMzYgNC4zNTY1NCAyLjAwNSA0Ljg2MDA2TDIgNS4wMTAwNlYxMi4wMTAxQzIuMDAwMDkgMTIuNTE0NSAyLjE5MDc3IDEzLjAwMDIgMi41MzM4NCAxMy4zN0MyLjg3NjkgMTMuNzM5NyAzLjM0NzAyIDEzLjk2NjIgMy44NSAxNC4wMDQxTDQgMTQuMDA5MUw1IDE0LjAwODFaIiBmaWxsPSIjMzMzMzMzIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMjQ4MF85NSI+CjxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K') !important;\n}\n#sbz92 .inline-time {\n font-size: 13px !important;\n margin-top: 6px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n font-weight: 500 !important;\n opacity: 0.4 !important;\n}\n#sbz92 .message-text-inline-image-wrapper {\n display: block !important;\n margin-top: 8px !important;\n margin-bottom: 8px !important;\n max-width: 100% !important;\n}\n#sbz92 .message-text-inline-image {\n width: 100% !important;\n}\n#sbz92 .text-message-ul {\n display: block !important;\n list-style-type: disc !important;\n margin-block-start: 8px !important;\n margin-block-end: 8px !important;\n padding-inline-start: 20px !important;\n}\n#sbz92 .text-message-ol {\n display: block !important;\n list-style-type: decimal !important;\n margin-block-start: 8px !important;\n margin-block-end: 8px !important;\n padding-inline-start: 20px !important;\n}\n#sbz92 .text-message-li {\n display: list-item !important;\n}\n#sbz92 .agent-message .text-message-link {\n color: #0d6efd !important;\n -webkit-text-fill-color: #0d6efd !important;\n font-weight: 400 !important;\n}\n#sbz92 .agent-message .text-message-link:hover {\n color: #024dbc !important;\n -webkit-text-fill-color: #024dbc !important;\n}\n#sbz92 .user-message .text-message-link {\n text-decoration: underline !important;\n text-decoration-color: rgba(255, 255, 255, 0.6) !important;\n text-underline-offset: 4px !important;\n}\n#sbz92 .user-message .text-message-link:hover {\n text-decoration-color: #fff !important;\n background-color: rgba(255, 255, 255, 0.08) !important;\n}\n#sbz92 .message-quote {\n padding: 6px 10px !important;\n border-left: 3px solid '@primary_color' !important;\n background-color: #dfdfdf !important;\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n margin-bottom: 8px !important;\n max-width: 100% !important;\n}\n#sbz92 .message-quote-title {\n font-weight: 600 !important;\n font-size: 14px !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .message-quote-content {\n opacity: 0.7 !important;\n color: '@secondary_color' !important;\n -webkit-text-fill-color: '@secondary_color' !important;\n font-size: 14px !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .message-quote-inner-img {\n width: 36px !important;\n height: 36px !important;\n object-fit: cover !important;\n}\n#sbz92 .message-quote-inner {\n margin-left: 15px !important;\n flex: 1 !important;\n overflow: hidden !important;\n}\n#sbz92 .image-attachment.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .file-attachment.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .widget_body_empty_img {\n max-width: 150px !important;\n max-height: 150px !important;\n}\n#sbz92 .emoji {\n position: relative !important;\n width: 20px !important;\n height: 20px !important;\n background-size: 100% !important;\n background-repeat: no-repeat !important;\n border: none !important;\n display: inline-block !important;\n vertical-align: text-bottom !important;\n}\n#sbz92 .emoji--angry {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_1___ + ") !important;\n}\n#sbz92 .emoji--confused {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_2___ + ") !important;\n}\n#sbz92 .emoji--crying,\n#sbz92 .emoji--cry {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_3___ + ") !important;\n}\n#sbz92 .emoji--grinning {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_4___ + ") !important;\n}\n#sbz92 .emoji--heart_eyes,\n#sbz92 .emoji--heart-eyes {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_5___ + ") !important;\n}\n#sbz92 .emoji--neutral_face,\n#sbz92 .emoji--neutral {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_6___ + ") !important;\n}\n#sbz92 .emoji--disappointed,\n#sbz92 .emoji--sad {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_7___ + ") !important;\n}\n#sbz92 .emoji--sleepy {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_8___ + ") !important;\n}\n#sbz92 .emoji--smile,\n#sbz92 .emoji--smiling {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_9___ + ") !important;\n}\n#sbz92 .emoji--open_mouth,\n#sbz92 .emoji--surprised {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_10___ + ") !important;\n}\n#sbz92 .emoji--tired_face,\n#sbz92 .emoji--tired {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_11___ + ") !important;\n}\n#sbz92 .emoji--stuck_out_tongue,\n#sbz92 .emoji--tongue-out {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_12___ + ") !important;\n}\n#sbz92 .emoji--wink {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_13___ + ") !important;\n}\n#sbz92 .emoji--moyai {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_14___ + ") !important;\n}\n#sbz92 .emoji--dislike,\n#sbz92 .emoji--unlike,\n#sbz92 .emoji--thumbsdown {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_15___ + ") !important;\n}\n#sbz92 .emoji--like,\n#sbz92 .emoji--thumbsup {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_16___ + ") !important;\n}\n#sbz92 .emoji--ok_hand {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_17___ + ") !important;\n}\n#sbz92 .emoji--octopus {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_18___ + ") !important;\n}\n#sbz92 .emoji--pig2 {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_19___ + ") !important;\n}\n#sbz92 .emoji--wave {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_20___ + ") !important;\n}\n#sbz92 .emoji--mouse {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_21___ + ") !important;\n}\n#sbz92 .emoji--mouse2 {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_22___ + ") !important;\n}\n#sbz92 .emoji--rat {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_23___ + ") !important;\n}\n#sbz92 .emoji-picker {\n display: flex !important;\n flex-direction: row !important;\n z-index: 20 !important;\n position: absolute !important;\n max-width: 240px !important;\n background: #fff !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n border-radius: 10px !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n right: 15px !important;\n bottom: 55px !important;\n flex-wrap: wrap !important;\n padding: 10px !important;\n justify-content: space-between !important;\n align-items: center !important;\n}\n#sbz92 .emoji-picker--item {\n background-size: 100% !important;\n width: 30px !important;\n height: 30px !important;\n position: relative !important;\n background-repeat: no-repeat !important;\n display: inline-block !important;\n vertical-align: text-bottom !important;\n margin: 5px !important;\n cursor: pointer !important;\n transition: background-color 0.2s !important;\n}\n#sbz92 .emoji-picker-background-item {\n background-size: 50% !important;\n width: 40px !important;\n height: 40px !important;\n border-radius: 100% !important;\n}\n#sbz92 .emoji-picker-background-item:hover {\n background-color: #dee2e6 !important;\n}\n#sbz92 .convo-list {\n display: flex !important;\n flex-direction: column !important;\n flex: 1 !important;\n width: 100% !important;\n justify-content: space-between !important;\n overflow: auto !important;\n margin-top: -60px !important;\n padding-left: 22.5px !important;\n padding-right: 22.5px !important;\n}\n#sbz92 .convo-list--list {\n background: #fff !important;\n overflow-y: auto !important;\n overflow-x: hidden !important;\n}\n#sbz92 .convo-list--title {\n font-weight: 500 !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n background: #fff !important;\n border-bottom: 1px solid #f0f0f0 !important;\n padding: 15px !important;\n}\n#sbz92 .convo-list--container {\n border-radius: 10px !important;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1) !important;\n overflow: auto !important;\n display: flex !important;\n flex-direction: column !important;\n user-select: none !important;\n}\n#sbz92 .convo-list--footer {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n margin-top: 22.5px !important;\n}\n#sbz92 .convo-list--convo-last-info {\n overflow: hidden !important;\n white-space: nowrap !important;\n justify-content: center !important;\n display: flex !important;\n flex-direction: column !important;\n flex: 1 !important;\n margin-left: 15px !important;\n}\n#sbz92 .convo-list--convo-last-message {\n font-weight: normal !important;\n flex: 1 !important;\n cursor: pointer !important;\n display: flex !important;\n width: 100% !important;\n overflow: hidden !important;\n align-items: center !important;\n}\n#sbz92 .convo-list--convo-last-mes {\n text-overflow: ellipsis !important;\n opacity: 0.6 !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: normal !important;\n}\n#sbz92 .convo-list--convo-title {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n}\n#sbz92 .convo-list--convo-completed {\n width: 14px !important;\n}\n#sbz92 .convo-list--convo-name {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n flex: 1 !important;\n margin-right: 16px !important;\n cursor: pointer !important;\n}\n#sbz92 .convo-list--item {\n cursor: pointer !important;\n border-bottom: 1px solid '@primary_color_faded' !important;\n padding: 15px !important;\n display: flex !important;\n flex-direction: row !important;\n transition: background 0.15s ease !important;\n}\n#sbz92 .convo-list--item:hover {\n background: '@primary_color_faded' !important;\n}\n#sbz92 .convo-list--convo-time span {\n font-size: 14px !important;\n line-height: 20px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n opacity: 0.6 !important;\n min-width: 70px !important;\n cursor: pointer !important;\n}\n#sbz92 .convo-list--item-unread {\n width: 8px !important;\n height: 8px !important;\n background: #dc3545 !important;\n border-radius: 50% !important;\n margin-left: 15px !important;\n align-self: center !important;\n}\n#sbz92 .convo-list--item-avatar {\n width: 32px !important;\n height: 32px !important;\n}\n#sbz92 .widget-body--empty {\n display: flex !important;\n flex: 1 !important;\n justify-content: center !important;\n align-items: center !important;\n flex-direction: column !important;\n}\n#sbz92 .widget-body--empty-text {\n color: #343a40 !important;\n -webkit-text-fill-color: #343a40 !important;\n margin-top: 30px !important;\n text-align: center !important;\n}\n#sbz92 .mobile .widget-container {\n border-radius: 0px !important;\n max-height: 100% !important;\n margin-bottom: 0 !important;\n top: auto !important;\n left: 0 !important;\n right: 0 !important;\n width: 100% !important;\n height: '@mobile_height' !important;\n opacity: 1 !important;\n transition: opacity 0.15s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .mobile .widget-container.widget-container--left {\n left: 0 !important;\n right: 0 !important;\n}\n#sbz92 .mobile .widget-container.widget-container--right {\n right: 0 !important;\n left: 0 !important;\n}\n#sbz92 .mobile .widget-container.widget-container--hide {\n top: -100vh !important;\n opacity: 0 !important;\n transition: opacity 0.15s cubic-bezier(1, 0.5, 0.8, 1), bottom 0.15s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .widget-container.widget-container--left {\n left: '@desktop_button.margin_x' !important;\n right: unset !important;\n}\n#sbz92 .widget-container.widget-container--right {\n right: '@desktop_button.margin_x' !important;\n left: unset !important;\n}\n#sbz92 .widget-container {\n max-height: 100% !important;\n max-height: '@desktop_widget_max_height' !important;\n max-width: 100% !important;\n background: #fff !important;\n z-index: '@z_index_3' !important;\n border-radius: 15px !important;\n box-shadow: 0 5px 25px 0 rgba(0, 0, 0, 0.13) !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n position: '@widget_position' !important;\n margin-bottom: '@desktop_button.margin_y' !important;\n width: '@width' !important;\n height: '@height' !important;\n bottom: 0 !important;\n opacity: 1 !important;\n transform: translateY(0) !important;\n transition: transform 0.15s cubic-bezier(1, 0.5, 0.8, 1), opacity 0.2s cubic-bezier(1, 0.5, 0.8, 1), scale 0.15s ease !important;\n visibility: visible !important;\n overflow: hidden !important;\n}\n#sbz92 .widget-container.widget-container--full {\n max-height: 100% !important;\n height: 100% !important;\n margin-bottom: 0 !important;\n}\n#sbz92 .widget-container.widget-container--hide {\n opacity: 0 !important;\n transform: translateY(20px) !important;\n visibility: hidden !important;\n transition: transform 0.15s cubic-bezier(1, 0.5, 0.8, 1), opacity 0.1s cubic-bezier(1, 0.5, 0.8, 1), visibility 0.1s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .btn--start-convo {\n border-radius: 7px !important;\n flex-shrink: 0 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n padding-left: 32px !important;\n padding-right: 32px !important;\n height: 42px !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n font-size: 16px !important;\n font-weight: 500 !important;\n line-height: 20px !important;\n text-align: center !important;\n background: '@primary_color' !important;\n width: 100% !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n transition: filter 250ms ease !important;\n}\n#sbz92 .btn--start-convo::after {\n display: none !important;\n}\n#sbz92 .btn--start-convo:hover {\n filter: brightness(1.1) !important;\n}\n#sbz92 .btn--start-convo:disabled {\n opacity: 0.5 !important;\n cursor: default !important;\n pointer-events: none !important;\n}\n#sbz92 .widget-body.widget-body--none {\n display: none !important;\n}\n#sbz92 .widget-body {\n flex: 1 !important;\n flex-grow: 1 !important;\n z-index: -1 !important;\n width: 100% !important;\n overflow-y: auto !important;\n flex-direction: column !important;\n display: flex !important;\n position: relative !important;\n}\n#sbz92 .embed-chat .widget-body--events {\n width: 600px !important;\n margin: 0 auto !important;\n max-width: 100% !important;\n}\n#sbz92 .embed-chat .message-input {\n max-width: 600px !important;\n margin: 20px auto !important;\n}\n#sbz92 .embed-chat .widget-header--inner {\n max-width: 100% !important;\n width: 600px !important;\n}\n#sbz92 .embed-chat .widget-body--content {\n width: 600px !important;\n margin: 0 auto !important;\n max-width: 100% !important;\n}\n#sbz92 .embed-chat .convo-list {\n width: 600px !important;\n margin: 0 auto !important;\n max-width: 100% !important;\n}\n#sbz92 .widget-body--content {\n overflow-y: auto !important;\n overflow-x: hidden !important;\n flex: 1 !important;\n display: flex !important;\n flex-direction: column !important;\n position: relative !important;\n min-height: 0 !important;\n}\n#sbz92 .poweredby {\n margin-bottom: 15px !important;\n text-align: center !important;\n}\n#sbz92 .poweredby .poweredby--text {\n text-decoration: none !important;\n font-size: 13px !important;\n color: #7c7c7c !important;\n -webkit-text-fill-color: #7c7c7c !important;\n vertical-align: baseline !important;\n}\n#sbz92 .poweredby .poweredby--text .poweredby--subiz-logo {\n opacity: 0.7 !important;\n margin-top: -1px !important;\n height: 12px !important;\n}\n#sbz92 .poweredby .poweredby--text:hover {\n color: #333 !important;\n -webkit-text-fill-color: #333 !important;\n}\n#sbz92 .poweredby .poweredby--text:hover .poweredby--subiz-logo {\n opacity: 1 !important;\n}\n#sbz92 .empty-container {\n display: flex !important;\n justify-content: center !important;\n flex-direction: column !important;\n margin-top: 30px !important;\n margin-bottom: 30px !important;\n}\n#sbz92 .empty-desc {\n text-align: center !important;\n margin: 30px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .chat-button--white-bg {\n display: none !important;\n z-index: -1 !important;\n}\n#sbz92 .chat-button--white-bg--mask-only {\n background: white !important;\n width: 66px !important;\n height: 66px !important;\n top: 2px !important;\n left: 2px !important;\n position: absolute !important;\n border-radius: 50% !important;\n display: block !important;\n}\n#sbz92 .mobile .chat-button--default {\n width: '@mobile_button.width' !important;\n height: '@mobile_button.height' !important;\n background: '@background' !important;\n border-radius: '@mobile_button.border_radius' !important;\n}\n#sbz92 .mobile .widget-layout {\n bottom: '@mobile_button.margin_y' !important;\n}\n#sbz92 .mobile .widget-layout.widget-layout--left {\n left: '@mobile_button.margin_x' !important;\n right: unset !important;\n}\n#sbz92 .mobile .widget-layout.widget-layout--right {\n right: '@mobile_button.margin_x' !important;\n left: unset !important;\n}\n#sbz92 .mobile .chat-button--img {\n min-width: '@mobile_button.width' !important;\n}\n#sbz92 .chat-button {\n cursor: pointer !important;\n position: relative !important;\n transform: scale(1) !important;\n transition: opacity 200ms ease-in, transform 250ms cubic-bezier(0.34, 1.5, 0.64, 1) !important;\n}\n#sbz92 .chat-button.hidden {\n visibility: hidden !important;\n opacity: 0 !important;\n transform: scale(0.2) !important;\n pointer-events: none !important;\n}\n@media (prefers-reduced-motion: reduce) {\n #sbz92 .chat-button {\n transition: none !important;\n }\n}\n#sbz92 .chat-button:not(.hidden):hover {\n filter: brightness(1.1) !important;\n transform: scale(1.05) !important;\n}\n#sbz92 .chat-button--img {\n opacity: 0 !important;\n min-width: '@desktop_button.width' !important;\n display: block !important;\n}\n#sbz92 .chat-button.chat-button--left {\n float: left !important;\n}\n#sbz92 .chat-button.chat-button--right {\n float: right !important;\n}\n#sbz92 .widget-layout {\n z-index: '@z_index_2' !important;\n position: '@widget_position' !important;\n bottom: '@desktop_button.margin_y' !important;\n transition: opacity 150ms !important;\n opacity: 1 !important;\n}\n#sbz92 .widget-layout.widget-layout--hidden {\n opacity: 0 !important;\n pointer-events: none !important;\n}\n#sbz92 .widget-layout.widget-layout--left {\n left: '@desktop_button.margin_x' !important;\n right: unset !important;\n}\n#sbz92 .widget-layout.widget-layout--right {\n right: '@desktop_button.margin_x' !important;\n left: unset !important;\n}\n#sbz92 .chat-button--unread {\n position: absolute !important;\n right: 0px !important;\n top: -5px !important;\n background: #dc3545 !important;\n padding-left: 5px !important;\n padding-right: 5px !important;\n padding-top: 2px !important;\n padding-bottom: 2px !important;\n border-radius: 5px !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n}\n#sbz92 .widget-preview {\n z-index: '@z_index_3' !important;\n background: #fff !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n border-radius: 15px !important;\n max-width: 100% !important;\n width: 340px !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .widget-preview.widget-preview--hidden {\n display: none !important;\n}\n#sbz92 .widget-preview--btn-close {\n cursor: pointer !important;\n opacity: 0.5 !important;\n align-self: flex-start !important;\n background-color: #e5e5e5 !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzMzMiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXIteCI+PGxpbmUgeDE9IjE4IiB5MT0iNiIgeDI9IjYiIHkyPSIxOCI+PC9saW5lPjxsaW5lIHgxPSI2IiB5MT0iNiIgeDI9IjE4IiB5Mj0iMTgiPjwvbGluZT48L3N2Zz4K') !important;\n background-size: 16px 16px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n border-radius: 100% !important;\n transition: background-color 0.2s !important;\n}\n#sbz92 .widget-preview--btn-close:hover {\n opacity: 1 !important;\n}\n#sbz92 .widget-preview--avatar {\n width: 45px !important;\n height: 45px !important;\n border: 1px solid rgba(31, 54, 90, 0.1) !important;\n border-radius: 100% !important;\n margin-right: 15px !important;\n}\n#sbz92 .widget-preview--body {\n display: flex !important;\n padding: 15px !important;\n}\n#sbz92 .widget-preview--title {\n display: block !important;\n font-size: 15px !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n margin-bottom: 5px !important;\n opacity: 0.7 !important;\n}\n#sbz92 .widget-preview--content {\n cursor: pointer !important;\n flex: 1 !important;\n overflow: hidden !important;\n}\n#sbz92 .widget-preview--message {\n white-space: pre-wrap !important;\n word-wrap: break-word !important;\n font-weight: 500 !important;\n font-size: 16px !important;\n display: block !important;\n margin: 0 !important;\n margin-bottom: 0px !important;\n max-height: 78px !important;\n overflow: hidden !important;\n}\n#sbz92 .widget-preview--action {\n border-top: 1px solid #f0f0f0 !important;\n cursor: pointer !important;\n padding: 13px !important;\n}\n#sbz92 .widget-preview--action-text {\n display: block !important;\n text-align: center !important;\n font-weight: 500 !important;\n font-size: 16px !important;\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n margin: 0 !important;\n}\n#sbz92 .widget-internet-status {\n position: absolute !important;\n bottom: 0 !important;\n left: 0 !important;\n width: 100% !important;\n font-size: 14px !important;\n z-index: 10 !important;\n text-align: center !important;\n padding: 6px 5px !important;\n}\n#sbz92 .widget-internet-status.negative {\n background-color: #212325 !important;\n color: #fff !important;\n}\n#sbz92 .widget-internet-status.positive {\n background-color: #19b600 !important;\n color: #fff !important;\n}\n#sbz92 .widget-preview-text-message--header {\n display: flex !important;\n overflow: hidden !important;\n align-items: center !important;\n width: 100% !important;\n}\n#sbz92 .widget-preview-text-message--header .widget-preview--avatar {\n width: 24px !important;\n height: 24px !important;\n flex-shrink: 0 !important;\n margin-right: 10px !important;\n}\n#sbz92 .widget-preview-text-message--author {\n flex: 1 !important;\n overflow: hidden !important;\n display: flex !important;\n align-items: center !important;\n}\n#sbz92 .widget-preview-text-message--author .badge {\n margin-left: 10px !important;\n}\n#sbz92 .widget-preview-text-message--author-text {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n line-height: 1.5 !important;\n color: '@secondary_color' !important;\n -webkit-text-fill-color: '@secondary_color' !important;\n}\n#sbz92 .widget-preview-text-message--content {\n margin-top: 10px !important;\n white-space: pre-wrap !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper {\n z-index: '@z_index_3' !important;\n width: 100% !important;\n margin-bottom: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: flex-start !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.right {\n align-items: flex-end !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal {\n flex-direction: row !important;\n flex-wrap: wrap !important;\n align-items: center !important;\n gap: 10px !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal.right {\n justify-content: flex-end !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal.left {\n justify-content: flex-start !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal .widget-preview-quick-reply-item {\n margin: 0 !important;\n max-width: 200px !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n padding: 6px 15px !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal .widget-preview-quick-reply-item:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .widget-preview-quick-reply-item {\n border-radius: 20px !important;\n padding: 8px 20px !important;\n background: #fff !important;\n border: 1.5px solid !important;\n border-color: '@primary_color' !important;\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n margin-bottom: 15px !important;\n cursor: pointer !important;\n transition: 0.3s ease !important;\n position: relative !important;\n}\n#sbz92 .widget-preview-quick-reply-item:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .widget-preview-quick-reply-item:hover {\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n background-color: '@primary_color' !important;\n}\n#sbz92 .widget-preview-image-wrapper {\n z-index: '@z_index_3' !important;\n width: 100% !important;\n margin-bottom: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: flex-start !important;\n}\n#sbz92 .widget-preview-image-wrapper.right {\n align-items: flex-end !important;\n}\n#sbz92 .widget-preview-image-item {\n max-width: 300px !important;\n border-radius: 15px !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n border: 1px solid #dee2e6 !important;\n overflow: hidden !important;\n cursor: pointer !important;\n}\n#sbz92 .widget-preview-image-item img {\n width: 100% !important;\n max-height: 300px !important;\n object-fit: cover !important;\n}\n#sbz92 .widget-preview-text-message {\n z-index: '@z_index_3' !important;\n background: #fff !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n border-radius: 15px !important;\n max-width: 100% !important;\n min-width: 210px !important;\n margin-bottom: 15px !important;\n padding: 15px 20px !important;\n position: relative !important;\n cursor: pointer !important;\n}\n#sbz92 .widget-preview-text-message.right {\n border-bottom-right-radius: 8px !important;\n}\n#sbz92 .widget-preview-text-message.left {\n border-bottom-left-radius: 8px !important;\n}\n#sbz92 .widget-preview-new-wrapper {\n max-width: '@preview_max_width' !important;\n position: relative !important;\n opacity: 1 !important;\n transition: opacity 0.15s ease-in, transform 0.15s ease-in !important;\n transform: translateY(0) !important;\n}\n#sbz92 .widget-preview-new-wrapper.hidden {\n transform: translateY(20px) !important;\n transition: opacity 0.15s ease-out, transform 0.15s ease-out !important;\n opacity: 0 !important;\n}\n#sbz92 .widget-preview-new-wrapper:hover .widget-preview-x-wrapper {\n display: flex !important;\n}\n#sbz92 .widget-preview-x-wrapper {\n display: none !important;\n justify-content: flex-start !important;\n width: calc(100% + 40px) !important;\n position: absolute !important;\n padding: 15px 20px !important;\n left: -20px !important;\n bottom: 100% !important;\n}\n#sbz92 .widget-preview-x-wrapper.mobile {\n display: flex !important;\n}\n#sbz92 .widget-preview-x-wrapper.right {\n justify-content: flex-end !important;\n left: unset !important;\n right: -20px !important;\n}\n#sbz92 .widget-preview-x-wrapper .widget-preview--btn-close {\n opacity: 1 !important;\n width: 32px !important;\n height: 32px !important;\n border: 1px solid #ececec !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n background-color: #00000040 !important;\n background-size: 16px 16px !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiNlY2VjZWMiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXIteCI+PGxpbmUgeDE9IjE4IiB5MT0iNiIgeDI9IjYiIHkyPSIxOCI+PC9saW5lPjxsaW5lIHgxPSI2IiB5MT0iNiIgeDI9IjE4IiB5Mj0iMTgiPjwvbGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .widget-preview-x-wrapper .widget-preview--btn-close:hover {\n border-color: #fff !important;\n background-color: #00000066 !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXIteCI+PGxpbmUgeDE9IjE4IiB5MT0iNiIgeDI9IjYiIHkyPSIxOCI+PC9saW5lPjxsaW5lIHgxPSI2IiB5MT0iNiIgeDI9IjE4IiB5Mj0iMTgiPjwvbGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .rating--overlay {\n position: absolute !important;\n height: 100% !important;\n width: 100% !important;\n background: black !important;\n opacity: 0.3 !important;\n top: 0 !important;\n left: 0 !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n z-index: 9 !important;\n}\n#sbz92 .rating {\n border-top-left-radius: 10px !important;\n border-top-right-radius: 10px !important;\n overflow: hidden !important;\n position: absolute !important;\n height: 400px !important;\n max-height: 80% !important;\n width: 100% !important;\n bottom: 0 !important;\n /* centering */\n left: 0 !important;\n background: white !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n z-index: 10 !important;\n}\n#sbz92 .rating .rating--comment {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n resize: none !important;\n margin-left: 20px !important;\n margin-right: 20px !important;\n border: 2px solid lightgray !important;\n border-radius: 5px !important;\n padding: 10px !important;\n height: 60px !important;\n min-height: 60px !important;\n}\n#sbz92 .rating .rating--close-btn {\n right: 20px !important;\n top: -2px !important;\n width: 22px !important;\n height: 22px !important;\n position: absolute !important;\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23acacac%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22feather%20feather-x%22%3E%3Cline%20x1%3D%2218%22%20y1%3D%226%22%20x2%3D%226%22%20y2%3D%2218%22%3E%3C/line%3E%3Cline%20x1%3D%226%22%20y1%3D%226%22%20x2%3D%2218%22%20y2%3D%2218%22%3E%3C/line%3E%3C/svg%3E') !important;\n cursor: pointer !important;\n}\n#sbz92 .rating .rating--close-btn:hover {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22feather%20feather-x%22%3E%3Cline%20x1%3D%2218%22%20y1%3D%226%22%20x2%3D%226%22%20y2%3D%2218%22%3E%3C/line%3E%3Cline%20x1%3D%226%22%20y1%3D%226%22%20x2%3D%2218%22%20y2%3D%2218%22%3E%3C/line%3E%3C/svg%3E') !important;\n}\n#sbz92 .rating .rating--handle:hover .rating--thumb {\n background: #e0e0e0 !important;\n}\n#sbz92 .rating .rating--thumb {\n width: 70px !important;\n height: 6px !important;\n background: #eaeaea !important;\n border-radius: 5px !important;\n margin: 0 auto !important;\n cursor: grabbing !important;\n margin-top: 8px !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .rating .rating--content {\n display: flex !important;\n flex: 1 !important;\n flex-grow: 1 !important;\n height: calc(100% - 40px) !important;\n flex-direction: column !important;\n justify-content: space-between !important;\n}\n#sbz92 .rating .rating--heading {\n margin: 0 !important;\n font-weight: 500 !important;\n font-size: 20px !important;\n line-height: 20px !important;\n text-align: center !important;\n flex-grow: 1 !important;\n position: relative !important;\n}\n#sbz92 .rating .rating--description {\n text-align: center !important;\n flex-grow: 1 !important;\n font-size: 15px !important;\n padding-left: 20px !important;\n padding-right: 20px !important;\n display: flex !important;\n align-items: center !important;\n margin-top: 10px !important;\n margin-bottom: 15px !important;\n}\n#sbz92 .rating .rating-faces-container {\n flex: 5 !important;\n display: flex !important;\n justify-content: space-around !important;\n align-items: center !important;\n margin: 10px 10px !important;\n}\n#sbz92 .rating .rating-face-container {\n padding: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n cursor: pointer !important;\n border-radius: 10px !important;\n user-select: none !important;\n -webkit-transition: all 0.1s !important;\n transition: all 0.1s !important;\n}\n#sbz92 .rating .rating-face-container:hover {\n box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1) !important;\n}\n#sbz92 .rating .rating-face--text {\n margin-top: 10px !important;\n margin-bottom: 0px !important;\n font-size: 13px !important;\n color: #4d4d4d !important;\n -webkit-text-fill-color: #4d4d4d !important;\n}\n#sbz92 .rating .rating-no-thanks {\n flex: 10 !important;\n text-align: center !important;\n cursor: pointer !important;\n display: flex !important;\n justify-content: center !important;\n align-items: flex-end !important;\n color: #acacac !important;\n -webkit-text-fill-color: #acacac !important;\n}\n#sbz92 .rating .rating-no-thanks:hover {\n color: black !important;\n -webkit-text-fill-color: black !important;\n}\n#sbz92 .text__danger {\n color: #dc3545 !important;\n}\n#sbz92 .extension--close-btn {\n background: #00000088 !important;\n border-radius: 8px !important;\n color: #ffffffaa !important;\n -webkit-text-fill-color: #ffffffaa !important;\n right: 10px !important;\n top: -35px !important;\n font-size: 14px !important;\n position: absolute !important;\n padding: 5px 15px !important;\n cursor: pointer !important;\n}\n#sbz92 .extension--close-btn:hover {\n background: #000000 !important;\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n}\n#sbz92 .extension--handle {\n margin-bottom: 10px !important;\n}\n#sbz92 .extension--handle:hover .extension--thumb {\n background: #e0e0e0 !important;\n}\n#sbz92 .extension--thumb {\n width: 70px !important;\n cursor: grabbing !important;\n margin: 0 auto !important;\n height: 6px !important;\n background: #eaeaea !important;\n border-radius: 5px !important;\n flex: 1 !important;\n margin-top: 5px !important;\n}\n#sbz92 .extension {\n border-top-left-radius: 10px !important;\n position: absolute !important;\n border-top-right-radius: 10px !important;\n width: 100% !important;\n bottom: 0 !important;\n /* centering */\n left: 0 !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n background: white !important;\n z-index: 10 !important;\n}\n#sbz92 .extension--overlay {\n position: absolute !important;\n height: 100% !important;\n width: 100% !important;\n background: black !important;\n opacity: 0.3 !important;\n top: 0 !important;\n left: 0 !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n z-index: 9 !important;\n}\n#sbz92 .order__footer {\n margin-top: 40px !important;\n color: #888 !important;\n -webkit-text-fill-color: #888 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .order__footer_delimiter {\n width: 1px !important;\n height: 15px !important;\n border-right: 1px solid #bbb !important;\n}\n#sbz92 .order__footer_link {\n padding: 0 10px !important;\n font-size: 14px !important;\n cursor: pointer !important;\n}\n#sbz92 .order__footer_link:hover {\n text-decoration: none !important;\n color: #555 !important;\n -webkit-text-fill-color: #555 !important;\n}\n#sbz92 .desktop.order {\n border-radius: 0 !important;\n width: 780px !important;\n margin: 0 auto !important;\n height: 100% !important;\n}\n#sbz92 .desktop.order .order_section__line {\n display: none !important;\n}\n#sbz92 .desktop.order .desktop_order__heading {\n line-height: 20px !important;\n}\n#sbz92 .desktop.order .order_attachment__product_img {\n width: 50px !important;\n height: 50px !important;\n}\n#sbz92 .desktop.order .order_label {\n font-weight: 500 !important;\n margin-top: 30px !important;\n margin-bottom: 10px !important;\n font-size: 16px !important;\n}\n#sbz92 .desktop.order .order_label:first-child {\n margin-top: 0 !important;\n}\n#sbz92 .desktop.order .order_recap {\n margin-top: 0px !important;\n background: #f4f4f4 !important;\n margin-top: 20px !important;\n width: 270px !important;\n box-shadow: 0 0 0 1px hsla(0, 0%, 69%, 0.2), 0 15px 35px 0 rgba(49, 49, 93, 0.08), 0 5px 15px 0 rgba(0, 0, 0, 0.06) !important;\n border-radius: 6px !important;\n background-color: #fff !important;\n padding: 32px 32px 20px !important;\n}\n#sbz92 .desktop.order .order_acc_header {\n display: flex !important;\n align-items: center !important;\n margin-top: 20px !important;\n}\n#sbz92 .desktop.order .order_acc_logo {\n height: 50px !important;\n}\n#sbz92 .desktop.order .order_acc_name {\n font-size: 16px !important;\n margin-left: 10px !important;\n border-left: 1px solid #aaa !important;\n padding-left: 10px !important;\n}\n#sbz92 .desktop.order .order_summary_line {\n align-items: center !important;\n overflow: hidden !important;\n padding: 5px 0 !important;\n display: flex !important;\n justify-content: space-between !important;\n}\n#sbz92 .desktop_order__content {\n display: flex !important;\n}\n#sbz92 .order {\n width: 100% !important;\n display: flex !important;\n flex-direction: column !important;\n background: white !important;\n z-index: 10 !important;\n}\n#sbz92 .order .ship_card {\n display: flex !important;\n align-items: center !important;\n overflow: hidden !important;\n width: 190px !important;\n cursor: pointer !important;\n padding: 10px 15px !important;\n box-shadow: none !important;\n border: 2px solid #eee !important;\n color: #777 !important;\n -webkit-text-fill-color: #777 !important;\n margin-top: 5px !important;\n border-radius: 8px !important;\n background: white !important;\n transition: all 150ms ease-out !important;\n}\n#sbz92 .order .ship_card:hover {\n color: #555 !important;\n -webkit-text-fill-color: #555 !important;\n border: 2px solid #aaa !important;\n}\n#sbz92 .order .ship_card.ship_card__active {\n color: #333 !important;\n -webkit-text-fill-color: #333 !important;\n border: 2px solid #777 !important;\n background: #fafafa !important;\n}\n#sbz92 .order .order_ship_icon {\n margin-top: -3px !important;\n width: 15px !important;\n height: 15px !important;\n opacity: 0.6 !important;\n}\n#sbz92 .order .card_section {\n margin-top: 20px !important;\n max-width: 500px !important;\n box-shadow: 0 0 0 1px hsla(0, 0%, 69%, 0.2), 0 15px 35px 0 rgba(49, 49, 93, 0.08), 0 5px 15px 0 rgba(0, 0, 0, 0.06) !important;\n border-radius: 6px !important;\n background-color: #fff !important;\n padding: 32px !important;\n}\n#sbz92 .order input[type='text'].form-control,\n#sbz92 .order input[type='number'].form-control,\n#sbz92 .order input[type='date'].form-control,\n#sbz92 .order textarea.form-control,\n#sbz92 .order select.form-control {\n background: #f4f4f4 !important;\n border: 1px solid transparent !important;\n padding: 7px 10px !important;\n}\n#sbz92 .order input[type='text'].form-control:hover,\n#sbz92 .order input[type='number'].form-control:hover,\n#sbz92 .order input[type='date'].form-control:hover,\n#sbz92 .order textarea.form-control:hover,\n#sbz92 .order select.form-control:hover {\n background: #f0f0f0 !important;\n}\n#sbz92 .order input[type='text'].form-control:focus,\n#sbz92 .order input[type='number'].form-control:focus,\n#sbz92 .order input[type='date'].form-control:focus,\n#sbz92 .order textarea.form-control:focus,\n#sbz92 .order select.form-control:focus,\n#sbz92 .order input[type='text'].form-control:active,\n#sbz92 .order input[type='number'].form-control:active,\n#sbz92 .order input[type='date'].form-control:active,\n#sbz92 .order textarea.form-control:active,\n#sbz92 .order select.form-control:active {\n background: #eee !important;\n}\n#sbz92 .order input[type='text'].form-control.err,\n#sbz92 .order input[type='number'].form-control.err,\n#sbz92 .order input[type='date'].form-control.err,\n#sbz92 .order textarea.form-control.err,\n#sbz92 .order select.form-control.err {\n background: #ffe6e6 !important;\n border: 1px solid #ff8a8a !important;\n}\n#sbz92 .order .form {\n box-shadow: none !important;\n border: none !important;\n padding: 0 !important;\n}\n#sbz92 .order .form .radio {\n height: unset !important;\n}\n#sbz92 .order .order--content {\n display: flex !important;\n flex: 1 !important;\n flex-direction: column !important;\n}\n#sbz92 .order .order--content-content {\n flex: 1 !important;\n overflow: auto !important;\n}\n#sbz92 .order .order--heading {\n margin: 0 !important;\n margin-top: 20px !important;\n padding-left: 20px !important;\n padding-right: 20px !important;\n padding-bottom: 8px !important;\n line-height: 20px !important;\n position: relative !important;\n}\n#sbz92 .order .order--header-desc {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n font-size: 13px !important;\n}\n#sbz92 .order .order__product_line {\n display: flex !important;\n overflow: hidden !important;\n}\n#sbz92 .order .order--footer {\n text-align: k center !important;\n cursor: pointer !important;\n display: flex !important;\n justify-content: center !important;\n align-items: flex-end !important;\n color: #acacac !important;\n -webkit-text-fill-color: #acacac !important;\n}\n#sbz92 .order .order--footer:hover {\n color: black !important;\n -webkit-text-fill-color: black !important;\n}\n#sbz92 .order .order_section_label {\n color: #444 !important;\n -webkit-text-fill-color: #444 !important;\n margin-bottom: 5px !important;\n text-transform: uppercase !important;\n font-size: 13px !important;\n font-weight: 500 !important;\n}\n#sbz92 .order .order_label {\n color: #444 !important;\n -webkit-text-fill-color: #444 !important;\n margin-bottom: 5px !important;\n text-transform: uppercase !important;\n font-size: 13px !important;\n font-weight: 500 !important;\n}\n#sbz92 .order .order_section {\n padding-left: 20px !important;\n padding-right: 20px !important;\n padding-bottom: 15px !important;\n padding-top: 15px !important;\n}\n#sbz92 .order .order_section__line {\n border-top: 4px solid #eee !important;\n width: 100% !important;\n}\n#sbz92 .order .order_summary_line {\n overflow: hidden !important;\n padding: 3px 0 !important;\n display: flex !important;\n justify-content: space-between !important;\n}\n#sbz92 .order .order_btn {\n width: 100% !important;\n}\n#sbz92 .order .order_tracking_link {\n text-decoration: underline !important;\n cursor: pointer !important;\n}\n#sbz92 .order .order_tracking_link:hover {\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n}\n#sbz92 .order .order_tracking_link_icon {\n margin-top: -3px !important;\n width: 15px !important;\n height: 15px !important;\n}\n#sbz92 .order .order_shipping_provider_logo {\n width: 32px !important;\n height: 32px !important;\n margin-right: 10px !important;\n}\n#sbz92 .order .order_btn.order__btn__light {\n background: #f0f0f0 !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n border-radius: 6px !important;\n text-align: center !important;\n padding: 8px !important;\n cursor: pointer !important;\n}\n#sbz92 .order .order_btn.order__btn__light:hover {\n color: black !important;\n -webkit-text-fill-color: black !important;\n background: #ddd !important;\n}\n#sbz92 div.order__card {\n display: flex !important;\n padding: 15px !important;\n box-shadow: none !important;\n border: 2px solid #eee !important;\n margin-top: 10px !important;\n border-radius: 8px !important;\n background: #fafafa !important;\n}\n#sbz92 div.order__card.order__card__active {\n border: 2px solid #777 !important;\n background: white !important;\n}\n#sbz92 .order_form_label {\n margin-top: 10px !important;\n margin-bottom: 4px !important;\n}\n#sbz92 .btn-confirm-order {\n width: 100% !important;\n background: '@primary_color' !important;\n display: flex !important;\n align-items: center !important;\n border-radius: 5px !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n padding: 15px 10px !important;\n cursor: pointer !important;\n justify-content: center !important;\n font-weight: 500 !important;\n margin-top: 10px !important;\n}\n#sbz92 .btn-confirm-order:hover {\n background: #0053d4 !important;\n}\n#sbz92 .order__total {\n font-weight: 500 !important;\n font-size: 20px !important;\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n}\n#sbz92 .btn-cancel-order {\n color: #666 !important;\n -webkit-text-fill-color: #666 !important;\n text-decoration: underline !important;\n display: inline-block !important;\n margin-top: 10px !important;\n cursor: pointer !important;\n}\n#sbz92 .btn-cancel-order:hover {\n color: #333 !important;\n -webkit-text-fill-color: #333 !important;\n}\n#sbz92 .order_status {\n text-transform: uppercase !important;\n background: black !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n display: inline-block !important;\n border-radius: 4px !important;\n padding: 6px 6px 4px 6px !important;\n line-height: 1 !important;\n font-weight: 500 !important;\n font-size: 12px !important;\n}\n#sbz92 .order_status.order_status__canceled {\n background: whitesmoke !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .order_status.order_status__cancel {\n background: whitesmoke !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .order_status.order_status__confirmed {\n background: '@primary_color' !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__shipping {\n background: #000 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__fullfilled {\n background: #28a745 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__hold {\n background: #dc3545 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__draft {\n background: #ffc107 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__open {\n background: #ffc107 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_error {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n justify-content: center !important;\n height: 100% !important;\n width: 100% !important;\n}\n#sbz92 .order_attachment__note {\n font-size: 14px !important;\n white-space: pre-wrap !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n display: -webkit-box !important;\n -webkit-line-clamp: 3 !important;\n -webkit-box-orient: vertical !important;\n}\n#sbz92 .dropdown_select {\n position: absolute !important;\n background: white !important;\n -webkit-box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n border-radius: 5px !important;\n width: 150px !important;\n z-index: 20 !important;\n overflow: hidden !important;\n}\n#sbz92 .dropdown_select__overlay {\n top: 0 !important;\n overflow: hidden !important;\n position: absolute !important;\n background: #000000aa !important;\n z-index: 19 !important;\n left: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n}\n#sbz92 .dropdown_select__item {\n padding: 7px 10px !important;\n cursor: pointer !important;\n}\n#sbz92 .dropdown_select__item:hover {\n background: '@primary_color' !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n}\n#sbz92 .dropdown_select_filter {\n padding: 8px 10px !important;\n border-bottom: 1px solid #eee !important;\n position: relative !important;\n}\n#sbz92 .dropdown_select_filter:hover .dropdown_select_filter__icon {\n opacity: 1 !important;\n}\n#sbz92 .dropdown_select_filter_input {\n border-radius: 5px !important;\n width: 100% !important;\n display: block !important;\n background: #f4f4f4 !important;\n border: none !important;\n padding: 7px 10px !important;\n padding-left: 35px !important;\n}\n#sbz92 .dropdown_select_filter_input:hover {\n background: #f0f0f0 !important;\n}\n#sbz92 .dropdown_select_filter_input:focus,\n#sbz92 .dropdown_select_filter_input:active {\n background: #eee !important;\n}\n#sbz92 .dropdown_select_input {\n border-radius: 5px !important;\n overflow: hidden !important;\n cursor: pointer !important;\n flex-wrap: nowrap !important;\n display: flex !important;\n background: #f4f4f4 !important;\n border: 1px solid trasparent !important;\n padding: 7px 10px !important;\n height: 32px !important;\n min-width: 120px !important;\n width: 100% !important;\n}\n#sbz92 .dropdown_select_input:hover {\n background: #f0f0f0 !important;\n}\n#sbz92 .dropdown_select_input:focus,\n#sbz92 .dropdown_select_input:active {\n background: #eee !important;\n}\n#sbz92 .dropdown_select_input.err {\n background: #ffe6e6 !important;\n border: 1px solid #ff8a8a !important;\n}\n#sbz92 .dropdown_select__items {\n max-height: 300px !important;\n min-height: 100px !important;\n overflow-x: hidden !important;\n overflow-y: auto !important;\n}\n#sbz92 .dropdown_select_filter__icon {\n width: 22px !important;\n height: 15px !important;\n position: absolute !important;\n z-index: 2 !important;\n top: 15px !important;\n left: 18px !important;\n border-right: 1px solid #aaa !important;\n padding-right: 7px !important;\n opacity: 0.5 !important;\n}\n#sbz92 .dropdown_select_filter__empty {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n flex-direction: column !important;\n}\n#sbz92 .dropdown_select_filter__empty_img {\n height: 50px !important;\n margin-top: 10px !important;\n margin-bottom: 10px !important;\n}\n#sbz92 .dropdown_select__caret {\n width: 14px !important;\n margin-top: 3px !important;\n opacity: 0.6 !important;\n height: 15px !important;\n}\ndiv#sbz92 {\n all: initial;\n}\nbody div#sbz92 {\n all: initial !important;\n}\n", ""]);
3703
3762
  // Exports
3704
3763
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
3705
3764
 
@@ -3866,6 +3925,13 @@ module.exports = __webpack_require__.p + "assets/img/done_gray.d7e8203.svg";
3866
3925
 
3867
3926
  /***/ },
3868
3927
 
3928
+ /***/ 4218
3929
+ (module, __unused_webpack_exports, __webpack_require__) {
3930
+
3931
+ module.exports = __webpack_require__.p + "assets/img/dot_chat.335fd8a.svg";
3932
+
3933
+ /***/ },
3934
+
3869
3935
  /***/ 6120
3870
3936
  (module, __unused_webpack_exports, __webpack_require__) {
3871
3937
 
@@ -4414,6 +4480,11 @@ var done_gray_namespaceFn = () => {
4414
4480
  return __webpack_require__(9150);
4415
4481
  };
4416
4482
 
4483
+ // EXTERNAL MODULE: ./assets/img/dot_chat.svg
4484
+ var dot_chat_namespaceFn = () => {
4485
+ return __webpack_require__(4218);
4486
+ };
4487
+
4417
4488
  // EXTERNAL MODULE: ./assets/img/empty.svg
4418
4489
  var empty_namespaceFn = () => {
4419
4490
  return __webpack_require__(9419);
@@ -4497,7 +4568,6 @@ let trackResponseFn = (param, done) => {
4497
4568
  };
4498
4569
  /* harmony default export */ const api = { default: (class {
4499
4570
  constructor(ApiURL, FileURL) {
4500
- _defineProperty(this, "sendBugReport", str => this.bugReq.post('/bugs', str));
4501
4571
  _defineProperty(this, "listConversations", _ => this.apireq.addQuery('user_id', this.uid).addQuery('integration_id', `${this.accid}.subizv4.subikon`).get(`/accounts/${this.accid}/conversations`));
4502
4572
  _defineProperty(this, "listMessages", (cid, limit, start_id) => this.apireq.addQuery('limit', limit).addQuery('start_id', start_id).get(`/accounts/${this.accid}/conversations/${cid}/messages`));
4503
4573
  _defineProperty(this, "ajax", api_ajax);
@@ -4667,7 +4737,6 @@ let trackResponseFn = (param, done) => {
4667
4737
  this.refreshLock = new util/* default */.A.Mutex();
4668
4738
  this.FileURL = FileURL;
4669
4739
  this.ApiURL = ApiURL;
4670
- this.bugReq = api_ajax.setBaseUrl('https://api5.subiz.com.vn/4.1').setContentType('text/plain');
4671
4740
  this.api41 = api_ajax.setBaseUrl('https://api.sbz.vn/4.1').withCredentials(true).setContentType('text/plain').beforeHook(jsonifyTextPlain).afterHook(trackResponseFn).beforeHook(trackRequestFn).setParser('json');
4672
4741
  this.apireq = api_ajax.setBaseUrl(ApiURL).withCredentials(true).addQuery('v', '6').setContentType('text/plain').beforeHook(jsonifyTextPlain).afterHook(trackResponseFn).setParser('json').beforeHook(trackRequestFn).beforeHook((param, done) => {
4673
4742
  if (this.token_generator) {
@@ -4908,7 +4977,7 @@ const LIMIT = 80;
4908
4977
  }) }.default;
4909
4978
  function lsdb_toString(obj) {
4910
4979
  if (obj === undefined) return 'null';
4911
- return JSON.stringify(obj);
4980
+ return util/* default */.A.stringify(obj);
4912
4981
  }
4913
4982
  ;// ./src/store/chain.js
4914
4983
  const ChainMaxSize = 50;
@@ -5011,6 +5080,20 @@ class Chain {
5011
5080
  this.cache[chain] = inmemItemM;
5012
5081
  return {};
5013
5082
  }
5083
+ merge(chain, items) {
5084
+ if (this.dead) return;
5085
+ const cached = this.cache[chain] || {};
5086
+ for (const item of items) {
5087
+ const node = {
5088
+ ...item,
5089
+ chain,
5090
+ full_id: chain + ':' + item.id
5091
+ };
5092
+ cached[item.id] = node;
5093
+ this.db.put('items', node.full_id, node);
5094
+ }
5095
+ this.cache[chain] = cached;
5096
+ }
5014
5097
  del(chain, id) {
5015
5098
  if (this.dead) return;
5016
5099
  let inmemItemM = this.cache[chain] || {};
@@ -5023,7 +5106,7 @@ class Chain {
5023
5106
  }
5024
5107
  async reload(chain, api) {
5025
5108
  if (this.dead) return;
5026
- let top = maxIndex(this.listM(chain)) || {};
5109
+ let top = maxIndex(this.cache[chain] || {}) || {};
5027
5110
  let topindex = top.index;
5028
5111
  if (!topindex) topindex = Date.now();
5029
5112
  var lastanchor = '';
@@ -5040,7 +5123,12 @@ class Chain {
5040
5123
  });
5041
5124
  });
5042
5125
  if (newItems.length === 0 || newanchor === lastanchor) break;
5043
- if (fetchedItems.length >= 200) {
5126
+ let minindexitem = minIndex(fetchedItems) || {};
5127
+ if (minindexitem.index <= topindex) {
5128
+ lastanchor = this.anchorCache[chain] || newanchor;
5129
+ break;
5130
+ }
5131
+ if (size(fetchedItems) >= 200) {
5044
5132
  let inmemItemM = this.cache[chain] || {};
5045
5133
  let removeids = [];
5046
5134
  map(inmemItemM, item => {
@@ -5049,17 +5137,12 @@ class Chain {
5049
5137
  });
5050
5138
  this.db.removes('items', removeids);
5051
5139
  this.cache[chain] = {};
5052
- break;
5053
- }
5054
- let minindexitem = minIndex(fetchedItems) || {};
5055
- if (minindexitem.index <= topindex) {
5056
- lastanchor = this.anchorCache[chain] || newanchor;
5140
+ lastanchor = newanchor;
5057
5141
  break;
5058
5142
  }
5059
5143
  lastanchor = newanchor;
5060
5144
  }
5061
- for (var i = 0; i < Object.keys(fetchedItems).length; i++) {
5062
- let item = fetchedItems[Object.keys(fetchedItems)[i]];
5145
+ for (const item of Object.values(fetchedItems)) {
5063
5146
  this.db.put('items', item.full_id, item);
5064
5147
  this.cache[item.chain] = this.cache[item.chain] || {};
5065
5148
  this.cache[item.chain][item.id] = item;
@@ -5095,7 +5178,7 @@ function maxIndex(obj) {
5095
5178
  maxKey = keys[i];
5096
5179
  }
5097
5180
  }
5098
- return obj[keys[maxKey]];
5181
+ return obj[maxKey];
5099
5182
  }
5100
5183
  function map(collection, predicate) {
5101
5184
  if (!collection) return [];
@@ -5161,21 +5244,16 @@ let KvMaxSize = 500;
5161
5244
  inmemItemM[item.key] = item.value;
5162
5245
  });
5163
5246
  this.cache = inmemItemM;
5164
- let allkeys = Object.keys(this.cache);
5165
- if (allkeys.length > KvMaxSize) {
5166
- let liveChance = KvMaxSize / 2 / allkeys.lenth;
5167
- let removekeys = [];
5168
- for (var i = 0; i < KvMaxSize; i++) {
5169
- let live = Math.random() <= liveChance;
5170
- if (live) continue;
5171
- let key = allkeys[i];
5172
- delete this.cache[key];
5173
- removekeys.push(key);
5174
- }
5175
- this.db.removes('items', [removekeys]);
5176
- }
5247
+ this.trimCache();
5177
5248
  this.initialized = true;
5178
5249
  }
5250
+ trimCache() {
5251
+ const keys = Object.keys(this.cache);
5252
+ if (keys.length <= KvMaxSize) return;
5253
+ const removed = keys.slice(0, keys.length - Math.floor(KvMaxSize / 2));
5254
+ for (const key of removed) delete this.cache[key];
5255
+ this.db.removes('items', removed);
5256
+ }
5179
5257
  all() {
5180
5258
  if (this.dead) return [];
5181
5259
  if (!this.initialized) return [];
@@ -5195,6 +5273,7 @@ let KvMaxSize = 500;
5195
5273
  key,
5196
5274
  value
5197
5275
  });
5276
+ this.trimCache();
5198
5277
  }
5199
5278
  del(key) {
5200
5279
  if (this.dead) return;
@@ -5448,6 +5527,7 @@ function makeFakeMessages(accid, convoid, userid, agentid) {
5448
5527
  }
5449
5528
  }, {
5450
5529
  id: 'evqyiyjmzatvtgpdmmpzwnwgn',
5530
+ source_event_id: 'wrueysyjbhqrkiwhsejpqrwqrdkkyaibajdw',
5451
5531
  account_id: accid,
5452
5532
  created: 1616213202685,
5453
5533
  type: 'message_sent',
@@ -5461,7 +5541,6 @@ function makeFakeMessages(accid, convoid, userid, agentid) {
5461
5541
  conversation_id: convoid,
5462
5542
  text: 'Xin chào',
5463
5543
  format: 'plaintext',
5464
- idempotency_key: 'wrueysyjbhqrkiwhsejpqrwqrdkkyaibajdw',
5465
5544
  integration_id: inteid,
5466
5545
  pongs: [{
5467
5546
  member_id: userid,
@@ -5598,6 +5677,29 @@ function makeFakeMessages(accid, convoid, userid, agentid) {
5598
5677
  }
5599
5678
  reconnect() {}
5600
5679
  }) }.default;
5680
+ ;// ./src/store/attachments.js
5681
+ async function uploadAttachments(attachments, upload) {
5682
+ let error, errorMessage;
5683
+ for (const attachment of attachments) {
5684
+ try {
5685
+ const result = await upload(attachment._file);
5686
+ if (result.body && result.body.code === 'invalid_field_size') {
5687
+ errorMessage = 'cannot_send_too_big_file';
5688
+ }
5689
+ if (result.error || !result.url) {
5690
+ error = error || result.error || 'upload_failed';
5691
+ continue;
5692
+ }
5693
+ attachment.url = result.url;
5694
+ } catch (err) {
5695
+ error = error || err;
5696
+ }
5697
+ }
5698
+ return {
5699
+ error,
5700
+ errorMessage
5701
+ };
5702
+ }
5601
5703
  ;// ./src/store/store.js
5602
5704
  function store_defineProperty(e, r, t) { return (r = store_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
5603
5705
  function store_toPropertyKey(t) { var i = store_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
@@ -5610,6 +5712,7 @@ var store_flow = (flow_namespaceFn());
5610
5712
 
5611
5713
 
5612
5714
 
5715
+
5613
5716
  var Realtime = (realtime_namespaceFn());
5614
5717
  var cookie = (cookie_umd_namespaceFn());
5615
5718
  cookie.defaults.path = '/';
@@ -5618,7 +5721,6 @@ cookie.defaults.expires = 3650;
5618
5721
  let store_memlocalStorage = (inmem_localstorage_namespaceFn());
5619
5722
  const MAX_CONVO = 20;
5620
5723
  const page_loaded = util/* default */.A.Date.now();
5621
- const DEBUG_ACCOUNT_IDS = ['acqsulrowbxiugvginhw', 'acryguzgwxmamhzmqlyx'];
5622
5724
  class Store {
5623
5725
  constructor(ApiURL, FileURL, RealtimeURL, inmem, fakeapi) {
5624
5726
  store_defineProperty(this, "inmem", false);
@@ -5689,14 +5791,23 @@ class Store {
5689
5791
  if (this._die) return dieErr;
5690
5792
  await this.readyGate.entry();
5691
5793
  await this.reconnectGate.entry(undefined, true);
5692
- if (this.isInsync(cid)) return this.reconnectGate.open();
5693
- this.markSync(cid);
5694
- let {
5695
- body: convo,
5696
- error
5697
- } = await this.api.getConversation(cid);
5698
- if (convo && !error) this._setConvo(convo);
5699
- return this.reconnectGate.open();
5794
+ try {
5795
+ if (this._die || this.isInsync(cid)) return;
5796
+ this.convoFetchAfter = this.convoFetchAfter || {};
5797
+ if (util/* default */.A.Date.now() < (this.convoFetchAfter[cid] || 0)) return;
5798
+ this.convoFetchAfter[cid] = util/* default */.A.Date.now() + 15_000;
5799
+ let {
5800
+ body: convo,
5801
+ error
5802
+ } = await this.api.getConversation(cid);
5803
+ if (convo && !error) this._setConvo(convo);
5804
+ } catch (error) {
5805
+ return {
5806
+ error
5807
+ };
5808
+ } finally {
5809
+ this.reconnectGate.open();
5810
+ }
5700
5811
  });
5701
5812
  store_defineProperty(this, "list_provinces", () => this.api.list_provinces());
5702
5813
  store_defineProperty(this, "list_districts", p => this.api.list_districts(p));
@@ -5707,25 +5818,48 @@ class Store {
5707
5818
  if (id.startsWith('cslight')) return util/* default */.A.get(this.lightConvos, [id, 'events'], []);
5708
5819
  return this.chain.listM(id);
5709
5820
  });
5710
- store_defineProperty(this, "fetchMoreEvents", async convoid => {
5711
- if (!convoid) return;
5712
- if (convoid.startsWith('cslight')) return [[], ''];
5713
- if (!this.isInsync('events' + convoid)) {
5714
- await this.readyGate.entry();
5715
- await this.reconnectGate.entry(undefined, true);
5716
- if (this.isInsync('events' + convoid)) {
5717
- this.reconnectGate.open();
5718
- return {};
5821
+ store_defineProperty(this, "fetchMoreEvents", (cid, limit = 150) => {
5822
+ this.historyRequests = this.historyRequests || new Map();
5823
+ if (this.historyRequests.has(cid)) return this.historyRequests.get(cid);
5824
+ this.historyFailures = this.historyFailures || {};
5825
+ const failure = this.historyFailures[cid];
5826
+ if (failure && util/* default */.A.Date.now() < failure.retryAt) return Promise.resolve({
5827
+ error: failure.error
5828
+ });
5829
+ const request = this._fetchMoreEvents(cid, limit).then(result => {
5830
+ if (result.error) this.historyFailures[cid] = {
5831
+ error: result.error,
5832
+ retryAt: util/* default */.A.Date.now() + 15_000
5833
+ };else delete this.historyFailures[cid];
5834
+ return result;
5835
+ }).finally(() => {
5836
+ if (this.historyRequests.get(cid) === request) this.historyRequests.delete(cid);
5837
+ });
5838
+ this.historyRequests.set(cid, request);
5839
+ return request;
5840
+ });
5841
+ store_defineProperty(this, "syncConvoEvents", cid => {
5842
+ if (this._die || !cid || cid.startsWith('cslight')) return Promise.resolve({});
5843
+ this.messageSyncRequests = this.messageSyncRequests || new Map();
5844
+ if (this.messageSyncRequests.has(cid)) return this.messageSyncRequests.get(cid);
5845
+ this.messageSyncNextAt = this.messageSyncNextAt || {};
5846
+ if (util/* default */.A.Date.now() < (this.messageSyncNextAt[cid] || 0)) return Promise.resolve({
5847
+ skipped: true
5848
+ });
5849
+ const chain = this.chain;
5850
+ const request = this._syncConvoEvents(cid, chain).then(result => {
5851
+ if (chain === this.chain && !this._die) {
5852
+ this.messageSyncFailures = this.messageSyncFailures || {};
5853
+ const failures = result.error ? Math.min((this.messageSyncFailures[cid] || 0) + 1, 4) : 0;
5854
+ this.messageSyncFailures[cid] = failures;
5855
+ this.messageSyncNextAt[cid] = util/* default */.A.Date.now() + (failures ? 15_000 * 2 ** (failures - 1) : 15_000);
5719
5856
  }
5720
- this.markSync('events' + convoid);
5721
- await this.chain.reload(convoid, () => {
5722
- return [[], ''];
5723
- });
5724
- let out = await this._doFetchMsg(convoid);
5725
- this.reconnectGate.open();
5726
- return out;
5727
- }
5728
- return this._doFetchMsg(convoid);
5857
+ return result;
5858
+ }).finally(() => {
5859
+ if (this.messageSyncRequests.get(cid) === request) this.messageSyncRequests.delete(cid);
5860
+ });
5861
+ this.messageSyncRequests.set(cid, request);
5862
+ return request;
5729
5863
  });
5730
5864
  store_defineProperty(this, "reloadConvoEvents", async convoid => {
5731
5865
  await this.chain.reload(convoid, () => {
@@ -5742,10 +5876,10 @@ class Store {
5742
5876
  error
5743
5877
  };
5744
5878
  });
5745
- store_defineProperty(this, "_doFetchMsg", async convoid => {
5879
+ store_defineProperty(this, "_doFetchMsg", async (convoid, limit = 150) => {
5746
5880
  let {
5747
5881
  error
5748
- } = await this.chain.fetchMore(convoid, 150, async (type, anchor, limit) => {
5882
+ } = await this.chain.fetchMore(convoid, limit, async (type, anchor, limit) => {
5749
5883
  if (this.outofmsgM[convoid]) return [[], ''];
5750
5884
  let [events, newanchor, error, outofmsg] = await this.listmessageapi(type, anchor, limit);
5751
5885
  if (outofmsg) this.outofmsgM[convoid] = true;
@@ -5784,17 +5918,6 @@ class Store {
5784
5918
  store_defineProperty(this, "now", () => util/* default */.A.Date.now() + this.timeDiff);
5785
5919
  store_defineProperty(this, "seenQueue", []);
5786
5920
  store_defineProperty(this, "matchTrafficSource", () => this.kv.match('traffic_source'));
5787
- store_defineProperty(this, "sendBugReport", str => this.api.sendBugReport(str));
5788
- store_defineProperty(this, "matchDebugAccountIds", () => DEBUG_ACCOUNT_IDS);
5789
- store_defineProperty(this, "sbzListConversations", () => {
5790
- return this.api.listConversations();
5791
- });
5792
- store_defineProperty(this, "sbzListMessages", cid => {
5793
- return this.api.listMessages(cid, 100, '');
5794
- });
5795
- store_defineProperty(this, "listAgentRealtimeMessageSent", () => {
5796
- return this.agent_rt_message_sent_dict;
5797
- });
5798
5921
  store_defineProperty(this, "_alreadyReceived", {});
5799
5922
  store_defineProperty(this, "_typing", util/* default */.A.throttle(convoid => this.api.sendTyping(convoid), 3000, {
5800
5923
  trailing: false
@@ -5830,7 +5953,6 @@ class Store {
5830
5953
  this.CONNECTION_CHECK_INTERVAL = 3000;
5831
5954
  this.reconnectTimestamp = 0;
5832
5955
  this.g_sync = {};
5833
- this.agent_rt_message_sent_dict = {};
5834
5956
  this._die = false;
5835
5957
  this.forceDevice = null;
5836
5958
  this.forcePlugins = {};
@@ -5862,15 +5984,22 @@ class Store {
5862
5984
  this.getLocaleContent = this.api.getLocaleContent;
5863
5985
  this.g_haveSentSeenM = {};
5864
5986
  this.last_focused = this.now();
5865
- window.addEventListener('blur', () => {
5987
+ this._onBlur = () => {
5988
+ if (this._die) return;
5866
5989
  this.last_focused = this.now();
5867
5990
  this.sendPresence();
5868
- });
5869
- window.addEventListener('focus', () => {
5991
+ };
5992
+ this._onFocus = () => {
5993
+ if (this._die) return;
5870
5994
  this.last_focused = 0;
5871
5995
  this.sendPresence();
5872
- });
5873
- window.addEventListener('beforeunload', () => this.api.sendLostFocus());
5996
+ };
5997
+ this._onBeforeUnload = () => {
5998
+ if (!this._die) this.api.sendLostFocus();
5999
+ };
6000
+ window.addEventListener('blur', this._onBlur);
6001
+ window.addEventListener('focus', this._onFocus);
6002
+ window.addEventListener('beforeunload', this._onBeforeUnload);
5874
6003
  this._lastPresenceURL = window.location.href;
5875
6004
  this._urlCheckInterval = util/* default */.A.setInterval(() => {
5876
6005
  if (this._die) return util/* default */.A.clearInterval(this._urlCheckInterval);
@@ -5897,19 +6026,20 @@ class Store {
5897
6026
  }
5898
6027
  this.sendPresence();
5899
6028
  }, 60000);
5900
- onVisibilityChange(val => {
6029
+ this._visibilityCleanup = onVisibilityChange(val => {
5901
6030
  if (this._die) return;
5902
6031
  this.browserVisibility = val;
5903
6032
  this.sendPresence();
5904
6033
  });
5905
6034
  this.loopTime();
5906
6035
  this.device = this.getDeviceInfo();
5907
- const _gaInterval = util/* default */.A.setInterval(() => {
6036
+ this._gaInterval = util/* default */.A.setInterval(() => {
6037
+ if (this._die) return;
5908
6038
  let user = this.cache.match('user') || {};
5909
6039
  if (!user.id) return;
5910
6040
  var dev = this.getDeviceInfo();
5911
6041
  if (!dev.ga_tracking_ids || !dev.ga_client_id) return;
5912
- util/* default */.A.clearInterval(_gaInterval);
6042
+ util/* default */.A.clearInterval(this._gaInterval);
5913
6043
  this.device = dev;
5914
6044
  let ga_client_id = dev.ga_client_id;
5915
6045
  if (ga_client_id !== util/* default */.A.getUserAttr(user, 'ga_client_id', 'text')) {
@@ -5937,8 +6067,28 @@ class Store {
5937
6067
  console.log('publish connectionStatus', this.connectionStatus);
5938
6068
  this.pubsub.publish('connection');
5939
6069
  }
6070
+ if (this.connectionStatus === 'active' && (this._needsMessageSync || currentStatus !== 'active')) {
6071
+ this._needsMessageSync = false;
6072
+ this.syncKnownConvoEvents();
6073
+ }
5940
6074
  }
5941
6075
  }
6076
+ syncKnownConvoEvents() {
6077
+ if (this._die) return Promise.resolve();
6078
+ if (this.knownConvoSyncRequest) return this.knownConvoSyncRequest;
6079
+ const chain = this.chain;
6080
+ const request = (async () => {
6081
+ const convos = util/* default */.A.filter(this.cache.all(), (value, key) => key.startsWith('convo_'));
6082
+ for (const convo of convos) {
6083
+ if (this._die || chain !== this.chain) break;
6084
+ await this.syncConvoEvents(convo.id);
6085
+ }
6086
+ })().finally(() => {
6087
+ if (this.knownConvoSyncRequest === request) this.knownConvoSyncRequest = null;
6088
+ });
6089
+ this.knownConvoSyncRequest = request;
6090
+ return request;
6091
+ }
5942
6092
  linkProduct(p) {
5943
6093
  if (!p) {
5944
6094
  this._currentViewingProduct = {};
@@ -6082,7 +6232,90 @@ class Store {
6082
6232
  async _touchAcc() {
6083
6233
  if (this.isInsync('account')) return;
6084
6234
  await this.readyGate.entry();
6085
- if (!this.isInsync('account')) this.reconnect();
6235
+ if (!this.isInsync('account')) this.refreshAccount();
6236
+ }
6237
+ refreshAccount() {
6238
+ if (this._die || util/* default */.A.Date.now() < (this.accountRefreshAfter || 0)) return;
6239
+ this.accountRefreshAfter = util/* default */.A.Date.now() + 30_000;
6240
+ return this.reconnect();
6241
+ }
6242
+ async _fetchMoreEvents(convoid, limit = 150) {
6243
+ if (!convoid || convoid.startsWith('cslight')) return {};
6244
+ await this.readyGate.entry();
6245
+ await this.reconnectGate.entry(undefined, true);
6246
+ try {
6247
+ if (this._die) return dieErr;
6248
+ const refresh = !this.isInsync('events' + convoid);
6249
+ if (refresh) {
6250
+ this.chain.anchorCache[convoid] = '';
6251
+ delete this.outofmsgM[convoid];
6252
+ }
6253
+ const out = await this._doFetchMsg(convoid, limit);
6254
+ if (!out.error) this.markSync('events' + convoid);
6255
+ return out;
6256
+ } catch (error) {
6257
+ return {
6258
+ error
6259
+ };
6260
+ } finally {
6261
+ this.reconnectGate.open();
6262
+ }
6263
+ }
6264
+ async _syncConvoEvents(cid, chain) {
6265
+ await this.readyGate.entry();
6266
+ await this.reconnectGate.entry(undefined, true);
6267
+ try {
6268
+ if (this._die || chain !== this.chain) return dieErr;
6269
+ this.messageSyncTimes = this.messageSyncTimes || {};
6270
+ this.messageSyncProgress = this.messageSyncProgress || {};
6271
+ let progress = this.messageSyncProgress[cid];
6272
+ if (!progress) {
6273
+ const cached = Object.values(chain.listM(cid));
6274
+ const boundary = this.messageSyncTimes[cid] || cached.reduce((min, ev) => Math.min(min, util/* default */.A.getMs(ev.created)), Infinity);
6275
+ progress = this.messageSyncProgress[cid] = {
6276
+ boundary,
6277
+ anchor: '',
6278
+ newest: 0,
6279
+ visited: new Set()
6280
+ };
6281
+ }
6282
+ for (let page = 0; page < 5; page++) {
6283
+ const wait = (this.nextMessageSyncRequestAt || 0) - util/* default */.A.Date.now();
6284
+ if (wait > 0) await util/* default */.A.sleep(wait);
6285
+ if (this._die || chain !== this.chain) return dieErr;
6286
+ this.nextMessageSyncRequestAt = util/* default */.A.Date.now() + 250;
6287
+ const [items, next, error, end] = await this.listmessageapi(cid, progress.anchor, 150);
6288
+ if (this._die || chain !== this.chain) return dieErr;
6289
+ if (error) return {
6290
+ error
6291
+ };
6292
+ chain.merge(cid, items);
6293
+ for (const item of items) progress.newest = Math.max(progress.newest, item.index);
6294
+ this.pubsub.publish('account');
6295
+ if (end || !items.length || items.some(item => item.index < progress.boundary)) {
6296
+ if (progress.newest) this.messageSyncTimes[cid] = progress.newest;
6297
+ delete this.messageSyncProgress[cid];
6298
+ return {};
6299
+ }
6300
+ progress.visited.add(progress.anchor);
6301
+ if (!next || progress.visited.has(next)) {
6302
+ delete this.messageSyncProgress[cid];
6303
+ return {
6304
+ error: 'message_cursor_stalled'
6305
+ };
6306
+ }
6307
+ progress.anchor = next;
6308
+ }
6309
+ return {
6310
+ pending: true
6311
+ };
6312
+ } catch (error) {
6313
+ return {
6314
+ error
6315
+ };
6316
+ } finally {
6317
+ this.reconnectGate.open();
6318
+ }
6086
6319
  }
6087
6320
  async init(accid, mask, userRef, options) {
6088
6321
  this.g_sync = {};
@@ -6163,7 +6396,6 @@ class Store {
6163
6396
  }
6164
6397
  async _initResource(accid, auth, realtimep) {
6165
6398
  this.g_sync = {};
6166
- this._current_acc_id = accid;
6167
6399
  let user = await this.api.setAuth(auth);
6168
6400
  if (typeof sbz_info != 'undefined') sbz_info.store_7 = true;
6169
6401
  if (user.error) {
@@ -6175,6 +6407,7 @@ class Store {
6175
6407
  let lightConvos = this.kv.match('light_convos') || {};
6176
6408
  this.lightConvos = {};
6177
6409
  util/* default */.A.map(lightConvos, convo => {
6410
+ if (convo.light_type === 'widget' && (convo.account_id !== accid || convo.initial_by !== user.id)) return;
6178
6411
  let in7Day = convo.created > util/* default */.A.Date.now() - 7 * 24 * 3_600_000;
6179
6412
  let events = util/* default */.A.filter(convo.events, ev => ev.type === 'message_sent');
6180
6413
  let messages = util/* default */.A.map(events, ev => util/* default */.A.get(ev, 'data.message') || {});
@@ -6188,8 +6421,10 @@ class Store {
6188
6421
  if (this.fake) this.realtime = new realtime_fake();else this.realtime = new Realtime(this.RealtimeURL, realtimep, xhrsend, accid);
6189
6422
  this.realtime.onEvent(this.onWs.bind(this));
6190
6423
  this.realtime.onInterrupted(async () => {
6424
+ if (this._die) return;
6425
+ this._needsMessageSync = true;
6191
6426
  await this.reconnectWs(accid, user.id);
6192
- this.reconnect();
6427
+ await this.refreshAccount();
6193
6428
  });
6194
6429
  if (typeof sbz_info != 'undefined') sbz_info.store_8 = true;
6195
6430
  this.seenLoop();
@@ -6237,7 +6472,7 @@ class Store {
6237
6472
  var lastmsgsent = events[util/* default */.A.size(events) - 1];
6238
6473
  if (!lastmsgsent) return;
6239
6474
  if (this.g_haveSentSeenM[lastmsgsent.id]) return;
6240
- if (lastmsgsent.id === lastmsgsent.data.message.idempotency_key) return;
6475
+ if (lastmsgsent.id === lastmsgsent.source_event_id) return;
6241
6476
  this.pubsub.publish('events', {
6242
6477
  created: this.now(),
6243
6478
  type: 'message_pong',
@@ -6279,34 +6514,52 @@ class Store {
6279
6514
  await this.realtime.subscribe([`conversation_state_updated.account.${accid}.user.${userid}`, `conversation_joined.account.${accid}.user.${userid}`, `conversation_typing.account.${accid}.user.${userid}`, `message_sent.account.${accid}.user.${userid}`, `message_pong.account.${accid}.user.${userid}`, `conversation_rating_requested.account.${accid}.user.${userid}`, `conversation_rated.account.${accid}.user.${userid}`, `conversation_events.account.${accid}.user.${userid}`]);
6280
6515
  await this.readyGate.entry();
6281
6516
  }
6282
- async reconnect(p) {
6517
+ reconnect(p) {
6518
+ if (this.reconnectRequest) return this.reconnectRequest;
6519
+ const request = this._reconnect(p).finally(() => {
6520
+ if (this.reconnectRequest === request) this.reconnectRequest = null;
6521
+ });
6522
+ this.reconnectRequest = request;
6523
+ return request;
6524
+ }
6525
+ async _reconnect(p) {
6283
6526
  if (this._die) return;
6284
6527
  await this.reconnectGate.entry(undefined, true);
6285
- this.markSync('account');
6286
- let fetchuser = p && p.user ? Promise.resolve({
6287
- body: p.user
6288
- }) : this.api.getUser();
6289
- let outs = await Promise.all([fetchuser, this.api.getAccountSetting({
6290
- bot_id: this.forceBotId
6291
- })]);
6292
- let error = util/* default */.A.find(outs, out => out.error);
6293
- if (error) return console.error(error);
6294
- let set = outs[1].body;
6295
- set.user = outs[0].body;
6296
- await this._setSetting(set);
6297
- let convob = await this.api.listConversations();
6298
- error = convob.error;
6299
- let body = convob.body;
6300
- if (!error) {
6301
- let convos = util/* default */.A.get(body, 'conversations', []);
6302
- util/* default */.A.map(this.cache.all(), (value, k) => {
6303
- if (k.startsWith('convo_')) {
6304
- if (this.now() - util/* default */.A.getMs(util/* default */.A.get(value, 'actived')) > 1209600000) this.cache.del(k);
6305
- }
6306
- });
6307
- util/* default */.A.map(convos, convo => this._setConvo(convo));
6528
+ try {
6529
+ let fetchuser = p && p.user ? Promise.resolve({
6530
+ body: p.user
6531
+ }) : this.api.getUser();
6532
+ let outs = await Promise.all([fetchuser, this.api.getAccountSetting({
6533
+ bot_id: this.forceBotId
6534
+ })]);
6535
+ let error = util/* default */.A.find(outs, out => out.error);
6536
+ if (error) return error;
6537
+ let set = outs[1].body;
6538
+ set.user = outs[0].body;
6539
+ await this._setSetting(set);
6540
+ let convob = await this.api.listConversations();
6541
+ error = convob.error;
6542
+ let body = convob.body;
6543
+ if (!error) {
6544
+ let convos = util/* default */.A.get(body, 'conversations', []);
6545
+ util/* default */.A.map(this.cache.all(), (value, k) => {
6546
+ if (k.startsWith('convo_')) {
6547
+ if (this.now() - util/* default */.A.getMs(util/* default */.A.get(value, 'actived')) > 1209600000) this.cache.del(k);
6548
+ }
6549
+ });
6550
+ util/* default */.A.map(convos, convo => this._setConvo(convo));
6551
+ }
6552
+ if (error) return {
6553
+ error
6554
+ };
6555
+ this.markSync('account');
6556
+ } catch (error) {
6557
+ return {
6558
+ error
6559
+ };
6560
+ } finally {
6561
+ this.reconnectGate.open();
6308
6562
  }
6309
- return this.reconnectGate.open();
6310
6563
  }
6311
6564
  async submitForm(formid, data, user) {
6312
6565
  await this.readyGate.entry();
@@ -6420,20 +6673,19 @@ class Store {
6420
6673
  return this.api.sendEvent(e);
6421
6674
  }
6422
6675
  async onWs(ev) {
6423
- await this.wsGate.entry();
6424
- this.wsGate.close();
6425
- await this._onWs(ev);
6426
- this.wsGate.open();
6427
- }
6428
- handleLogCompare(ev) {
6429
- if (!DEBUG_ACCOUNT_IDS.includes(this._current_acc_id)) return;
6430
- if (ev.type !== 'message_sent') return;
6431
- let byType = util/* default */.A.get(ev, 'by.type');
6432
- if (byType === 'user') return;
6433
- this.agent_rt_message_sent_dict[ev.id] = ev;
6676
+ await this.wsGate.entry(undefined, true);
6677
+ try {
6678
+ await this._onWs(ev);
6679
+ } catch (error) {
6680
+ console.error(error);
6681
+ return {
6682
+ error
6683
+ };
6684
+ } finally {
6685
+ this.wsGate.open();
6686
+ }
6434
6687
  }
6435
6688
  async _onWs(ev) {
6436
- this.handleLogCompare(ev);
6437
6689
  if (this._die) return;
6438
6690
  if (!ev || !ev.type) return;
6439
6691
  ev.created = util/* default */.A.getMs(ev.created);
@@ -6507,7 +6759,7 @@ class Store {
6507
6759
  }
6508
6760
  }
6509
6761
  if (util/* default */.A.startsWith(ev.type, 'message_') || util/* default */.A.startsWith(ev.type, 'conversation_')) {
6510
- this.restConvoEvent(ev);
6762
+ await this.restConvoEvent(ev);
6511
6763
  if (ev.type === 'message_sent' && util/* default */.A.get(ev, 'by.id') !== user.id) {
6512
6764
  sendEventToThirdParty('SUBIZ Chat', 'Received', 'User');
6513
6765
  }
@@ -6556,8 +6808,8 @@ class Store {
6556
6808
  }
6557
6809
  if (ev.type !== 'message_pong' && ev.type !== 'conversation_typing') {
6558
6810
  if (ev.type === 'message_sent') {
6559
- let idemkey = util/* default */.A.get(ev, 'data.message.idempotency_key');
6560
- let found = util/* default */.A.find(this.listEvents(cid), oldev => oldev.id === idemkey);
6811
+ let sourceEventId = util/* default */.A.get(ev, 'source_event_id');
6812
+ let found = util/* default */.A.find(this.listEvents(cid), oldev => oldev.id === sourceEventId);
6561
6813
  if (found) {
6562
6814
  this.chain.del(cid, found.id);
6563
6815
  ev.created = found.created;
@@ -6583,6 +6835,58 @@ class Store {
6583
6835
  delete this.lightConvos[id];
6584
6836
  this.kv.put('light_convos', this.lightConvos);
6585
6837
  }
6838
+ startWidgetConvo(greeting, locale) {
6839
+ const user = this.matchUser();
6840
+ const existing = util/* default */.A.find(this.lightConvos, convo => convo.light_type === 'widget' && convo.account_id === user.account_id && convo.initial_by === user.id);
6841
+ if (existing) return {
6842
+ convo: existing
6843
+ };
6844
+ const id = 'cslightwidget_' + util/* default */.A.randomString(24);
6845
+ const ev = util/* default */.A.cloneDeep(greeting);
6846
+ ev.data.message.conversation_id = id;
6847
+ const convo = {
6848
+ id,
6849
+ account_id: user.account_id,
6850
+ initial_by: user.id,
6851
+ locale,
6852
+ light_type: 'widget',
6853
+ state: 'pending',
6854
+ created: ev.created,
6855
+ members: [{
6856
+ id: user.id,
6857
+ type: 'user',
6858
+ seen_at: ev.created + 1
6859
+ }],
6860
+ events: [ev],
6861
+ last_message_sent: ev,
6862
+ touchpoint: {
6863
+ id,
6864
+ channel: 'subiz',
6865
+ source: 'web'
6866
+ }
6867
+ };
6868
+ this.lightConvos[id] = convo;
6869
+ this.kv.put('light_convos', this.lightConvos);
6870
+ this.pubsub.publish('account');
6871
+ return {
6872
+ convo
6873
+ };
6874
+ }
6875
+ promoteWidgetConvo(localId, cid) {
6876
+ this.widgetConvoOrigins = this.widgetConvoOrigins || {};
6877
+ this.widgetConvoOrigins[cid] = localId;
6878
+ const greeting = util/* default */.A.cloneDeep(util/* default */.A.get(this.lightConvos, [localId, 'events', 0]));
6879
+ if (greeting) {
6880
+ greeting.source_event_id = greeting.id;
6881
+ greeting.data.message.conversation_id = cid;
6882
+ this.chain.merge(cid, [{
6883
+ id: greeting.id,
6884
+ index: greeting.created,
6885
+ value: greeting
6886
+ }]);
6887
+ }
6888
+ this.deleteLightConvo(localId);
6889
+ }
6586
6890
  startLightConvo(botid, messages, locale, is_testing, botversion) {
6587
6891
  let convoid = 'cslight' + botid + '_' + this.now();
6588
6892
  let user = this.cache.match('user') || {};
@@ -6676,10 +6980,10 @@ class Store {
6676
6980
  }
6677
6981
  async sendConvoEvent(cid, type, data) {
6678
6982
  await this.readyGate.entry();
6679
- var idempotency = util/* default */.A.randomString(36);
6983
+ var sourceEventId = util/* default */.A.randomString(36);
6680
6984
  let user = this.cache.match('user') || {};
6681
6985
  var event = {
6682
- id: idempotency,
6986
+ id: sourceEventId,
6683
6987
  by: {
6684
6988
  id: user.id,
6685
6989
  type: 'user',
@@ -6692,7 +6996,7 @@ class Store {
6692
6996
  util/* default */.A.convoToEv(cid, event);
6693
6997
  let files = [];
6694
6998
  if (type === 'message_sent') {
6695
- event.data.message.idempotency_key = idempotency;
6999
+ event.source_event_id = sourceEventId;
6696
7000
  event.data.message.conversation_id = cid;
6697
7001
  await store_flow.map(event.data.message.attachments, 2, async (att, i) => {
6698
7002
  if (att.type !== 'file') return;
@@ -6712,18 +7016,9 @@ class Store {
6712
7016
  }
6713
7017
  this.onWs(event);
6714
7018
  await this.convoGate.entry();
6715
- await store_flow.map(files, 1, async att => {
6716
- const {
6717
- body,
6718
- url,
6719
- error
6720
- } = await this.api.uploadToS3(att._file);
6721
- if (util/* default */.A.get(body, 'code') == 'invalid_field_size') {
6722
- event._error_message = 'cannot_send_too_big_file';
6723
- }
6724
- event._error = error;
6725
- att.url = url;
6726
- });
7019
+ const uploaded = await uploadAttachments(files, file => this.api.uploadToS3(file));
7020
+ event._error = uploaded.error;
7021
+ if (uploaded.errorMessage) event._error_message = uploaded.errorMessage;
6727
7022
  if (event._error) return this.onWs(event);
6728
7023
  if (cid && cid.startsWith('cslight')) return;
6729
7024
  let {
@@ -6832,13 +7127,20 @@ class Store {
6832
7127
  }
6833
7128
  async listmessageapi(type, anchor, limit) {
6834
7129
  let convoid = type;
6835
- if (convoid && convoid.startsWith('cslight')) return [fakeevents, '', undefined, true];
7130
+ if (convoid && convoid.startsWith('cslight')) {
7131
+ let events = util/* default */.A.map(this.listEvents(convoid), ev => ({
7132
+ id: ev.id,
7133
+ index: ev.created,
7134
+ value: ev
7135
+ }));
7136
+ return [events, '', undefined, true];
7137
+ }
6836
7138
  let {
6837
7139
  body: events,
6838
7140
  code,
6839
7141
  error
6840
7142
  } = await this.api.listMessages(convoid, -limit, anchor);
6841
- if (error || code !== 200) return [[], anchor, error];
7143
+ if (error || code !== 200) return [[], anchor, error || 'message_fetch_failed'];
6842
7144
  anchor = util/* default */.A.get(util/* default */.A.last(events), 'id');
6843
7145
  events = util/* default */.A.map(events, event => {
6844
7146
  event.created = util/* default */.A.getMs(event.created);
@@ -6867,17 +7169,18 @@ class Store {
6867
7169
  async loopTime() {
6868
7170
  if (this._die) return;
6869
7171
  let startms = this.now();
6870
- if (!this.cache || !util/* default */.A.get(this.cache.match('user'), 'id')) return util/* default */.A.setTimeout(() => this.loopTime(), 240000);
7172
+ if (!this.cache || !util/* default */.A.get(this.cache.match('user'), 'id')) return this._timeTimeout = util/* default */.A.setTimeout(() => this.loopTime(), 240000);
6871
7173
  let {
6872
7174
  body: t,
6873
7175
  error
6874
7176
  } = await this.api.time();
6875
- if (error) return util/* default */.A.setTimeout(() => this.loopTime(), 30000);
7177
+ if (this._die) return;
7178
+ if (error) return this._timeTimeout = util/* default */.A.setTimeout(() => this.loopTime(), 30000);
6876
7179
  var latences = Math.abs(this.now() - startms) / 2;
6877
7180
  var serverMs = new util/* default */.A.Date(t).getTime() + latences;
6878
7181
  var localMs = this.now();
6879
7182
  this.timeDiff = Math.floor(serverMs - localMs);
6880
- util/* default */.A.setTimeout(() => this.loopTime(), 240000);
7183
+ this._timeTimeout = util/* default */.A.setTimeout(() => this.loopTime(), 240000);
6881
7184
  }
6882
7185
  replaceFileUrl(src) {
6883
7186
  if (!src) return '';
@@ -6910,6 +7213,14 @@ class Store {
6910
7213
  this.kv = new kv(new lsdb('sbz2023', this.inmem), 'kv');
6911
7214
  if (this.chain) this.chain.destroy();
6912
7215
  this.chain = new Chain(new lsdb('cbz2023', true), 'ch');
7216
+ this.outofmsgM = {};
7217
+ this.messageSyncTimes = {};
7218
+ this.messageSyncNextAt = {};
7219
+ this.messageSyncFailures = {};
7220
+ this.messageSyncProgress = {};
7221
+ this.accountRefreshAfter = 0;
7222
+ this.historyFailures = {};
7223
+ this.convoFetchAfter = {};
6913
7224
  if (this.realtime) this.realtime.stop();
6914
7225
  if (this.cache) this.cache.destroy();
6915
7226
  this.pubsub.publish('destroy');
@@ -6918,14 +7229,22 @@ class Store {
6918
7229
  return this._die;
6919
7230
  }
6920
7231
  destroy() {
7232
+ if (this._die) return;
6921
7233
  this._die = true;
6922
7234
  this.clearBrowserData();
6923
7235
  util/* default */.A.clearInterval(this._seenInterval);
6924
7236
  util/* default */.A.clearInterval(this._urlCheckInterval);
7237
+ util/* default */.A.clearInterval(this._presenceInterval1);
7238
+ util/* default */.A.clearInterval(this._presenceInterval2);
7239
+ util/* default */.A.clearInterval(this._gaInterval);
7240
+ util/* default */.A.clearTimeout(this._timeTimeout);
6925
7241
  if (this.realtime) this.realtime.stop();
6926
- this.readyGate.close();
6927
- window.removeEventListener('blur', this.sendPresence);
6928
- window.removeEventListener('focus', this.sendPresence);
7242
+ if (this.readyGate) this.readyGate.close();
7243
+ window.removeEventListener('blur', this._onBlur);
7244
+ window.removeEventListener('focus', this._onFocus);
7245
+ window.removeEventListener('beforeunload', this._onBeforeUnload);
7246
+ if (this._visibilityCleanup) this._visibilityCleanup();
7247
+ this.pubsub.clear();
6929
7248
  }
6930
7249
  }
6931
7250
  function loadImage(file) {
@@ -6949,7 +7268,23 @@ function loadImage(file) {
6949
7268
  const ImageTypes = ['image/gif', 'image/jpeg', 'image/png', 'image/svg+xml'];
6950
7269
  function onVisibilityChange(cb) {
6951
7270
  var hidden = 'hidden';
6952
- if (hidden in document) document.addEventListener('visibilitychange', onchange);else if ((hidden = 'mozHidden') in document) document.addEventListener('mozvisibilitychange', onchange);else if ((hidden = 'webkitHidden') in document) document.addEventListener('webkitvisibilitychange', onchange);else if ((hidden = 'msHidden') in document) document.addEventListener('msvisibilitychange', onchange);else if ('onfocusin' in document) document.onfocusin = document.onfocusout = onchange;else window.onpageshow = window.onpagehide = window.onfocus = window.onblur = onchange;
7271
+ let target = document,
7272
+ eventName;
7273
+ let previous = {};
7274
+ if (hidden in document) eventName = 'visibilitychange';else if ((hidden = 'mozHidden') in document) eventName = 'mozvisibilitychange';else if ((hidden = 'webkitHidden') in document) eventName = 'webkitvisibilitychange';else if ((hidden = 'msHidden') in document) eventName = 'msvisibilitychange';else if ('onfocusin' in document) {
7275
+ previous = {
7276
+ onfocusin: document.onfocusin,
7277
+ onfocusout: document.onfocusout
7278
+ };
7279
+ document.onfocusin = document.onfocusout = onchange;
7280
+ } else {
7281
+ target = window;
7282
+ for (const key of ['onpageshow', 'onpagehide', 'onfocus', 'onblur']) {
7283
+ previous[key] = window[key];
7284
+ window[key] = onchange;
7285
+ }
7286
+ }
7287
+ if (eventName) target.addEventListener(eventName, onchange);
6953
7288
  function onchange(evt) {
6954
7289
  var v = 'visible';
6955
7290
  var h = 'hidden';
@@ -6967,6 +7302,12 @@ function onVisibilityChange(cb) {
6967
7302
  if (document[hidden] !== undefined) onchange({
6968
7303
  type: document[hidden] ? 'blur' : 'focus'
6969
7304
  });
7305
+ return () => {
7306
+ if (eventName) target.removeEventListener(eventName, onchange);
7307
+ for (const key of Object.keys(previous)) {
7308
+ if (target[key] === onchange) target[key] = previous[key];
7309
+ }
7310
+ };
6970
7311
  }
6971
7312
  const inmemCookie = {
6972
7313
  data: {},
@@ -7114,6 +7455,7 @@ var chatbox_block = __webpack_require__(7072);
7114
7455
 
7115
7456
 
7116
7457
  var defaultBubble = (bubble_default_namespaceFn());
7458
+ const dotChatIcon = (dot_chat_namespaceFn());
7117
7459
  let defaultAvatar = (default_avatar_namespaceFn());
7118
7460
 
7119
7461
 
@@ -7451,22 +7793,7 @@ class ChatButton extends common/* Com */.Mw {
7451
7793
  }, reply.title);
7452
7794
  })));
7453
7795
  }
7454
- async prepareButtonImage() {
7455
- let accountSetting = this.props.plugin.chatbox;
7456
- accountSetting = this.fixMissingSetting(accountSetting);
7457
- let imgsrc = util/* default */.A.get(accountSetting, 'desktop_button.background_image_url') || util/* default */.A.get(accountSetting, 'desktop_button.background_mask_url') || defaultBubble;
7458
- if (this.props.store.isMobile()) {
7459
- imgsrc = util/* default */.A.get(accountSetting, 'mobile_button.background_image_url') || util/* default */.A.get(accountSetting, 'mobile_button.background_mask_url') || imgsrc;
7460
- }
7461
- imgsrc = this.props.store.replaceFileUrl(imgsrc);
7462
- await util/* default */.A.preloadImg(imgsrc);
7463
- this.setState({
7464
- ready: true
7465
- });
7466
- this.readyGate.open();
7467
- }
7468
- renderButton() {
7469
- if (typeof sbz_info != 'undefined') sbz_info.render_chatbox_button = util/* default */.A.Date.now();
7796
+ getButtonAppearance() {
7470
7797
  let accountSetting = this.props.plugin.chatbox;
7471
7798
  accountSetting = this.fixMissingSetting(accountSetting);
7472
7799
  let imgsrc = util/* default */.A.get(accountSetting, 'desktop_button.background_image_url') || util/* default */.A.get(accountSetting, 'desktop_button.background_mask_url') || defaultBubble;
@@ -7488,22 +7815,93 @@ class ChatButton extends common/* Com */.Mw {
7488
7815
  maskurl = mobilemaskurl;
7489
7816
  }
7490
7817
  }
7818
+ const imageUrl = url => {
7819
+ const asset = normalizeButtonImageUrl(this.props.store.replaceFileUrl(url));
7820
+ return asset === dotChatIcon ? asset : addVersionParam(asset);
7821
+ };
7822
+ imgsrc = imageUrl(imgsrc);
7823
+ imgurl = imageUrl(imgurl);
7824
+ maskurl = imageUrl(maskurl);
7825
+ const defaultMask = !imgurl && !maskurl ? DEF_BG_URL : '';
7826
+ const urls = [...new Set([imgsrc, imgurl && encodeURI(imgurl), maskurl && encodeURI(maskurl), defaultMask].filter(Boolean))];
7827
+ return {
7828
+ imgsrc,
7829
+ imgurl,
7830
+ maskurl,
7831
+ background,
7832
+ position,
7833
+ imgwidth,
7834
+ imgheight,
7835
+ urls,
7836
+ maskAsset: maskurl ? encodeURI(maskurl) : defaultMask,
7837
+ key: JSON.stringify([urls, maskurl, defaultMask])
7838
+ };
7839
+ }
7840
+ componentDidUpdate() {
7841
+ if (this.getButtonAppearance().key !== this._buttonImageKey) this.prepareButtonImage();
7842
+ }
7843
+ async prepareButtonImage() {
7844
+ const appearance = this.getButtonAppearance();
7845
+ const version = this._buttonImageVersion = (this._buttonImageVersion || 0) + 1;
7846
+ this._buttonImageKey = appearance.key;
7847
+ this.readyGate.close();
7848
+ const [loaded, mask] = await Promise.all([Promise.all(appearance.urls.filter(url => url !== appearance.maskAsset).map(url => preloadButtonImage(url))), appearance.maskAsset ? prepareButtonMask(appearance.maskAsset) : Promise.resolve(null)]);
7849
+ const stale = () => !this._isMounted || this._buttonImageVersion !== version;
7850
+ if (stale()) {
7851
+ if (mask) URL.revokeObjectURL(mask);
7852
+ return;
7853
+ }
7854
+ const fallback = loaded.some(success => !success) || !!appearance.maskAsset && !mask;
7855
+ const ready = !fallback || (await preloadButtonImage(defaultBubble));
7856
+ if (stale()) {
7857
+ if (mask) URL.revokeObjectURL(mask);
7858
+ return;
7859
+ }
7860
+ if (this._buttonMaskUrl) URL.revokeObjectURL(this._buttonMaskUrl);
7861
+ this._buttonMaskUrl = mask;
7862
+ if (this._buttonElement) window.getComputedStyle(this._buttonElement).transform;
7863
+ this.setState({
7864
+ ready,
7865
+ readyImageKey: appearance.key,
7866
+ fallbackButtonImage: fallback,
7867
+ buttonMaskUrl: mask
7868
+ });
7869
+ this.readyGate.open();
7870
+ }
7871
+ componentWillUnmount() {
7872
+ if (this._buttonMaskUrl) URL.revokeObjectURL(this._buttonMaskUrl);
7873
+ if (this._animateTimeout) clearTimeout(this._animateTimeout);
7874
+ }
7875
+ renderButton() {
7876
+ if (typeof sbz_info != 'undefined') sbz_info.render_chatbox_button = util/* default */.A.Date.now();
7877
+ const appearance = this.getButtonAppearance();
7878
+ let {
7879
+ imgsrc,
7880
+ imgurl,
7881
+ maskurl,
7882
+ background,
7883
+ position,
7884
+ imgwidth,
7885
+ imgheight
7886
+ } = appearance;
7887
+ if (appearance.maskAsset) {
7888
+ maskurl = this.state.readyImageKey === appearance.key ? this.state.buttonMaskUrl : '';
7889
+ if (imgsrc === appearance.maskAsset) imgsrc = maskurl || '';
7890
+ }
7891
+ if (this.state.readyImageKey === appearance.key && this.state.fallbackButtonImage) {
7892
+ imgsrc = imgurl = defaultBubble;
7893
+ maskurl = '';
7894
+ }
7491
7895
  let whitebgcls = 'chat-button--white-bg';
7492
7896
  if (!imgurl && maskurl) whitebgcls += ' chat-button--white-bg--mask-only';
7493
7897
  let imgcontainerstyle = '';
7494
- imgurl = this.props.store.replaceFileUrl(imgurl);
7495
- imgsrc = this.props.store.replaceFileUrl(imgsrc);
7496
- maskurl = this.props.store.replaceFileUrl(maskurl);
7497
- imgurl = addVersionParam(imgurl);
7498
- imgsrc = addVersionParam(imgsrc);
7499
- maskurl = addVersionParam(maskurl);
7500
7898
  if (!imgurl && !maskurl) {
7501
7899
  whitebgcls += ' chat-button--white-bg--mask-only';
7502
7900
  imgcontainerstyle = `
7503
- -webkit-mask-image: url("${encodeURI(DEF_BG_URL)}") !important;
7504
- -o-mask-image: url("${encodeURI(DEF_BG_URL)}") !important;
7505
- -moz-mask-image: url("${encodeURI(DEF_BG_URL)}") !important;
7506
- mask-image: url("${encodeURI(DEF_BG_URL)}") !important;
7901
+ -webkit-mask-image: none !important;
7902
+ -o-mask-image: none !important;
7903
+ -moz-mask-image: none !important;
7904
+ mask-image: none !important;
7507
7905
  height: ${imgheight}px !important;
7508
7906
  width: ${imgwidth}px !important;
7509
7907
  background: ${background} !important;
@@ -7556,9 +7954,15 @@ class ChatButton extends common/* Com */.Mw {
7556
7954
  height: ${imgheight - 4}px !important;
7557
7955
 
7558
7956
  `;
7559
- if (!this.state.ready) cls += ' hidden';
7560
- return (0,preact_module.h)("div", {
7957
+ if (!this.state.ready || this.state.readyImageKey !== appearance.key) cls += ' hidden';
7958
+ return (0,preact_module.h)("button", {
7959
+ ref: element => {
7960
+ this._buttonElement = element;
7961
+ },
7962
+ type: "button",
7561
7963
  class: cls,
7964
+ "aria-label": this.props.t('chat'),
7965
+ "aria-expanded": !this.props.isShow,
7562
7966
  onClick: e => this.onClick(e)
7563
7967
  }, (0,preact_module.h)("div", {
7564
7968
  class: whitebgcls,
@@ -7598,7 +8002,9 @@ class ChatButton extends common/* Com */.Mw {
7598
8002
  return defmsg;
7599
8003
  }
7600
8004
  return (0,preact_module.h)(chatbox_block/* default */.A, {
7601
- block: block
8005
+ block: block,
8006
+ store: this.props.store,
8007
+ t: this.props.t
7602
8008
  });
7603
8009
  }
7604
8010
  let message = util/* default */.A.get(ev, 'data.message.text', defmsg);
@@ -7626,6 +8032,10 @@ function randomAgent(agentM) {
7626
8032
  return agents[Math.floor(Math.random() * util/* default */.A.size(agents))] || {};
7627
8033
  }
7628
8034
  const Ms30Mins = 30 * 60 * 1000;
8035
+ function normalizeButtonImageUrl(url) {
8036
+ if (/^https:\/\/(?:storage\.googleapis\.com\/public-gcs\.subiz-cdn\.com|public-gcs\.subiz-cdn\.com|vcdn\.subiz-cdn\.com)\/dashboard-v4\/public\/img\/bubble\/dot_chat\.svg(?=$|[?#])/.test(url)) return dotChatIcon;
8037
+ return url;
8038
+ }
7629
8039
  const DEF_BG_URL = 'https://vcdn.subiz-cdn.com/file/bubble_11.svg?v=5';
7630
8040
  const DEF_BG = 'linear-gradient(280.16deg, #0053d3 22.03%, #0265ff 78.2%)';
7631
8041
  function addVersionParam(url, version = 8) {
@@ -7641,10 +8051,39 @@ function addVersionParam(url, version = 8) {
7641
8051
  return hash ? newUrl + '#' + hash : newUrl;
7642
8052
  }
7643
8053
  }
7644
- ;// ./src/chatbox/PoweredBy.js
7645
- var logo = (subiz_mono_namespaceFn());
7646
-
7647
- function PoweredBy(props) {
8054
+ function preloadButtonImage(src, {
8055
+ crossOrigin = false
8056
+ } = {}) {
8057
+ return new Promise(resolve => {
8058
+ const image = new Image();
8059
+ if (crossOrigin) image.crossOrigin = 'anonymous';
8060
+ image.onerror = () => resolve(false);
8061
+ image.onload = async () => {
8062
+ try {
8063
+ if (image.decode) await image.decode();
8064
+ resolve(true);
8065
+ } catch (_) {
8066
+ resolve(false);
8067
+ }
8068
+ };
8069
+ image.src = src;
8070
+ });
8071
+ }
8072
+ async function prepareButtonMask(src) {
8073
+ let url;
8074
+ try {
8075
+ const response = await fetch(src);
8076
+ if (!response.ok) return null;
8077
+ url = URL.createObjectURL(await response.blob());
8078
+ if (await preloadButtonImage(url)) return url;
8079
+ } catch (_) {}
8080
+ if (url) URL.revokeObjectURL(url);
8081
+ return null;
8082
+ }
8083
+ ;// ./src/chatbox/PoweredBy.js
8084
+ var logo = (subiz_mono_namespaceFn());
8085
+
8086
+ function PoweredBy(props) {
7648
8087
  if (props.store.isMobile()) return null;
7649
8088
  if (props.store.isAIDevMode()) return null;
7650
8089
  let user = props.store.matchUser() || {};
@@ -7975,6 +8414,7 @@ Vui lòng hỏi chúng tôi bất cứ điều gì hoặc chia sẻ phản hồi
7975
8414
  getTitle() {
7976
8415
  let accSetting = this.props.plugin.chatbox || {};
7977
8416
  let acc = this.props.store.matchAccount() || {};
8417
+ if (accSetting.hide_agent_profile) return acc.name || this.props.t('widget_title');
7978
8418
  let agentsJoined = this.getAgentJoined(this.props.cid);
7979
8419
  let caption = util/* default */.A.get(this.props.plugin, 'chatbox.caption', {});
7980
8420
  let title = this.props.t.i18n(caption) || accSetting.title;
@@ -7996,7 +8436,9 @@ Vui lòng hỏi chúng tôi bất cứ điều gì hoặc chia sẻ phản hồi
7996
8436
  class: "widget-header--total-unread-convo"
7997
8437
  }, unreadcount);
7998
8438
  }
7999
- return (0,preact_module.h)("div", {
8439
+ return (0,preact_module.h)("button", {
8440
+ type: "button",
8441
+ "aria-label": this.props.t('menu_back'),
8000
8442
  class: `widget-header--wrap-button-back ${unreadcount ? 'widget-header--has-convo-unred' : ''}`,
8001
8443
  onClick: e => this.onBackClick(e)
8002
8444
  }, (0,preact_module.h)("div", {
@@ -8008,7 +8450,9 @@ Vui lòng hỏi chúng tôi bất cứ điều gì hoặc chia sẻ phản hồi
8008
8450
  let accSetting = this.props.plugin.chatbox || {};
8009
8451
  if (accSetting.hide_close_button) return null;
8010
8452
  if (this.props.store.isEmbededChatMode()) return;
8011
- return (0,preact_module.h)("div", {
8453
+ return (0,preact_module.h)("button", {
8454
+ type: "button",
8455
+ "aria-label": this.props.t('close'),
8012
8456
  class: "widget-header--button-close",
8013
8457
  "data-tooltip": this.props.t('close'),
8014
8458
  "data-tooltip-position": "bottom",
@@ -8081,10 +8525,14 @@ class MessageInput extends common/* Com */.Mw {
8081
8525
  $input.blur();
8082
8526
  }
8083
8527
  render() {
8528
+ const disabled = this.hasUnfinishRequiredFormOrLock() || this.props.disabled || this.props.is_loading;
8084
8529
  var $buttons = (0,preact_module.h)("div", {
8085
8530
  class: "d-flex flex-row align-self-end"
8086
- }, this.renderEmoji(), (0,preact_module.h)("div", {
8087
- "data-tooltip-poasition": "top-left",
8531
+ }, this.renderEmoji(), (0,preact_module.h)("button", {
8532
+ type: "button",
8533
+ disabled: disabled,
8534
+ "aria-label": this.props.t('attachment'),
8535
+ "data-tooltip-position": "top-left",
8088
8536
  class: "message-input--button message-input--attachment-button",
8089
8537
  onClick: e => this.selectFile(e)
8090
8538
  }));
@@ -8092,7 +8540,10 @@ class MessageInput extends common/* Com */.Mw {
8092
8540
  if (msg.length > 0) {
8093
8541
  $buttons = (0,preact_module.h)("div", {
8094
8542
  class: "d-flex flex-row align-self-end"
8095
- }, this.renderEmoji(), (0,preact_module.h)("div", {
8543
+ }, this.renderEmoji(), (0,preact_module.h)("button", {
8544
+ type: "button",
8545
+ disabled: disabled,
8546
+ "aria-label": this.props.t('send'),
8096
8547
  "data-tooltip-position": "top-left",
8097
8548
  class: "message-input--button message-input--send-button",
8098
8549
  onClick: () => this.submitMessage()
@@ -8106,7 +8557,6 @@ class MessageInput extends common/* Com */.Mw {
8106
8557
  }));
8107
8558
  }
8108
8559
  var containercls = '';
8109
- var disabled = this.hasUnfinishRequiredFormOrLock() || this.props.disabled;
8110
8560
  if (disabled || this.props.is_loading) containercls = 'message-input--disabled';
8111
8561
  return (0,preact_module.h)("div", {
8112
8562
  class: `message-input ${containercls}`,
@@ -8121,6 +8571,7 @@ class MessageInput extends common/* Com */.Mw {
8121
8571
  multiple: true
8122
8572
  }), (0,preact_module.h)("textarea", {
8123
8573
  disabled: disabled,
8574
+ "aria-label": this.props.t('message_input_help'),
8124
8575
  class: "message-input--input",
8125
8576
  maxlength: "1024",
8126
8577
  placeholder: this.props.t('message_input_help').substr(0, 25),
@@ -8283,7 +8734,11 @@ class MessageInput extends common/* Com */.Mw {
8283
8734
  }, 100);
8284
8735
  }
8285
8736
  renderEmoji() {
8286
- return (0,preact_module.h)("div", null, this.renderEmojiPopup(), (0,preact_module.h)("div", {
8737
+ return (0,preact_module.h)("div", null, this.renderEmojiPopup(), (0,preact_module.h)("button", {
8738
+ type: "button",
8739
+ "aria-label": "Emoji",
8740
+ "aria-expanded": !!this.state.openEmoji,
8741
+ disabled: this.props.disabled || this.props.is_loading,
8287
8742
  class: "message-input--button message-input--emoji-button",
8288
8743
  onClick: e => this.toggleEmoji(e)
8289
8744
  }));
@@ -8313,13 +8768,15 @@ class MessageInput extends common/* Com */.Mw {
8313
8768
  return e.preventDefault();
8314
8769
  }
8315
8770
  this._forceUpdate();
8316
- this.sendTyping();
8317
8771
  }
8318
8772
  onChange(e) {
8773
+ const value = e.target.value;
8774
+ const changed = value !== (this.state.msgValue || '');
8319
8775
  this.setState({
8320
- msgValue: e.target.value
8776
+ msgValue: value
8321
8777
  });
8322
8778
  this.resizeInput();
8779
+ if (changed && util/* default */.A.trim(value)) this.sendTyping();
8323
8780
  }
8324
8781
  selectFile() {
8325
8782
  if (this.props.disabled) return;
@@ -8351,10 +8808,10 @@ class MessageInput extends common/* Com */.Mw {
8351
8808
  if (!msg) return;
8352
8809
  if (this.props.disabled) return;
8353
8810
  if (this.props.onSend) {
8354
- await this.props.onSend({
8811
+ if ((await this.props.onSend({
8355
8812
  text: msg,
8356
8813
  format: 'plaintext'
8357
- });
8814
+ })) === false) return;
8358
8815
  }
8359
8816
  this.setState({
8360
8817
  openEmoji: false,
@@ -8363,7 +8820,9 @@ class MessageInput extends common/* Com */.Mw {
8363
8820
  this.resizeInput();
8364
8821
  }
8365
8822
  sendTyping() {
8823
+ if (this.props.disabled || this.props.is_loading) return;
8366
8824
  if (!this.props.cid) return;
8825
+ if (util/* default */.A.get(this.props.store.matchConvo(this.props.cid), 'state') === 'ended') return;
8367
8826
  return this.props.store.typing(this.props.cid);
8368
8827
  }
8369
8828
  pasteImage(event) {
@@ -8393,6 +8852,121 @@ function isSummited(form) {
8393
8852
  let fields = util/* default */.A.get(form, 'fields') || [];
8394
8853
  return util/* default */.A.find(fields, field => !!field.answered);
8395
8854
  }
8855
+ ;// ./src/chatbox/event-layout.js
8856
+
8857
+ function processEvents(convo, events) {
8858
+ events = events.filter(event => visibleEvent(event.ev));
8859
+ if (events.length < 1) return;
8860
+ var lastAgentEvent;
8861
+ for (var i = 1; i < events.length; i++) {
8862
+ let curEvent = events[i];
8863
+ let lastEvent = events[i - 1];
8864
+ if (util/* default */.A.get(curEvent, 'ev.by.type') != 'user' && !curEvent.is_typing) {
8865
+ lastAgentEvent = curEvent;
8866
+ }
8867
+ if (visibleEvent(curEvent.ev)) {
8868
+ let elapsedSec = util/* default */.A.unixSec(curEvent.ev.created) - util/* default */.A.unixSec(lastEvent.ev.created);
8869
+ if (elapsedSec > 300) curEvent.show_time = true;
8870
+ }
8871
+ }
8872
+ if (lastAgentEvent) lastAgentEvent.show_time = true;
8873
+ for (var i = 0; i < events.length; i++) {
8874
+ let curEvent = events[i];
8875
+ if (util/* default */.A.get(curEvent, 'ev.type') === 'message_sent') {
8876
+ curEvent.show_time = true;
8877
+ break;
8878
+ }
8879
+ }
8880
+ let lastMsgSentIdx = -1;
8881
+ for (var i = 0; i < events.length; i++) {
8882
+ let curEvent = events[i];
8883
+ let prevEvent = events[i - 1];
8884
+ let nextEvent = events[i + 1];
8885
+ if (curEvent.ev.type === 'message_sent') {
8886
+ lastMsgSentIdx = i;
8887
+ curEvent.mode = 'lead';
8888
+ if (util/* default */.A.get(prevEvent, 'ev.type') === 'message_sent' && util/* default */.A.get(prevEvent, 'ev.by.id') === util/* default */.A.get(curEvent, 'ev.by.id')) {
8889
+ curEvent.mode = 'follow';
8890
+ }
8891
+ if (util/* default */.A.get(nextEvent, 'ev.type') !== 'message_sent' || util/* default */.A.get(nextEvent, 'ev.by.id') !== util/* default */.A.get(curEvent, 'ev.by.id')) {
8892
+ curEvent.is_end = true;
8893
+ }
8894
+ continue;
8895
+ }
8896
+ }
8897
+ if (lastMsgSentIdx > -1) {
8898
+ events[lastMsgSentIdx].is_last_message_send = true;
8899
+ }
8900
+ }
8901
+ function visibleEvent(ev) {
8902
+ let type = util/* default */.A.get(ev, 'type');
8903
+ if (type === 'message_sent') return true;
8904
+ if (type === 'conversation_state_updated') {
8905
+ return util/* default */.A.get(ev, 'data.conversation.state') == 'ended';
8906
+ }
8907
+ }
8908
+ ;// ./src/chatbox/conversation-history.js
8909
+
8910
+ function conversationHistory(store, cid) {
8911
+ if (!cid) return [];
8912
+ const current = store.matchConvo(cid);
8913
+ if (!current || !current.created) return [current || {
8914
+ id: cid
8915
+ }];
8916
+ const conversations = util/* default */.A.map(store.matchConvo('*'));
8917
+ const unique = new Map();
8918
+ for (const convo of conversations) {
8919
+ if (!convo || !convo.id || convo.id === cid || convo.id.startsWith('cslight')) continue;
8920
+ if (current.account_id && convo.account_id !== current.account_id) continue;
8921
+ if (convo.created && util/* default */.A.getMs(convo.created) < util/* default */.A.getMs(current.created)) unique.set(convo.id, convo);
8922
+ }
8923
+ return [...unique.values()].sort((a, b) => util/* default */.A.getMs(a.created) - util/* default */.A.getMs(b.created) || a.id.localeCompare(b.id)).concat(current);
8924
+ }
8925
+ function conversationEvents(store, convo) {
8926
+ const events = util/* default */.A.orderBy(util/* default */.A.map(store.listEvents(convo.id)), 'created', 'asc');
8927
+ const unique = new Map();
8928
+ for (const ev of events) {
8929
+ const key = conversationEventKey(ev);
8930
+ const previous = unique.get(key);
8931
+ if (!previous) unique.set(key, ev);else if (previous.id === previous.source_event_id && ev.id !== ev.source_event_id) unique.set(key, {
8932
+ ...ev,
8933
+ created: previous.created
8934
+ });
8935
+ }
8936
+ return [...unique.values()].map(ev => ({
8937
+ ev
8938
+ }));
8939
+ }
8940
+ function conversationEventKey(ev) {
8941
+ const id = ev.type === 'message_sent' ? ev.source_event_id || ev.id : ev.id;
8942
+ return ev.type + ':' + id;
8943
+ }
8944
+ ;// ./src/chatbox/greeting.js
8945
+
8946
+ function widgetGreeting(chatbox, t, created = util/* default */.A.Date.now()) {
8947
+ const greeting = util/* default */.A.get(chatbox, 'greeting', {});
8948
+ const localized = t.i18n ? t.i18n(greeting.greeting || {}) : '';
8949
+ const text = util/* default */.A.trim(localized) || util/* default */.A.trim(greeting.message) || util/* default */.A.trim(t('team_intro')) || t('empty_convo_text');
8950
+ return {
8951
+ id: 'widget-greeting-' + util/* default */.A.randomString(24),
8952
+ type: 'message_sent',
8953
+ created,
8954
+ by: {
8955
+ type: 'system',
8956
+ id: 'system',
8957
+ ...(greeting.agent_id ? {
8958
+ display_type: 'agent',
8959
+ display_id: greeting.agent_id
8960
+ } : {})
8961
+ },
8962
+ data: {
8963
+ message: {
8964
+ text,
8965
+ format: 'plaintext'
8966
+ }
8967
+ }
8968
+ };
8969
+ }
8396
8970
  ;// ./src/chatbox/ImageAttachments.js
8397
8971
  function ImageAttachments_defineProperty(e, r, t) { return (r = ImageAttachments_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
8398
8972
  function ImageAttachments_toPropertyKey(t) { var i = ImageAttachments_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
@@ -8656,16 +9230,19 @@ class FileAttachments extends common/* Com */.Mw {
8656
9230
  }, 3000);
8657
9231
  }
8658
9232
  }
9233
+ // EXTERNAL MODULE: ./src/util/url.js
9234
+ var util_url = __webpack_require__(4339);
8659
9235
  ;// ./src/chatbox/Buttons.js
8660
9236
 
8661
9237
 
9238
+
8662
9239
  function Buttons(props) {
8663
9240
  if (util/* default */.A.size(props.buttons) === 0) return null;
8664
9241
  var $buttons = util/* default */.A.map(props.buttons, (button, index) => {
8665
9242
  if (button.type === 'call_button') {
8666
9243
  return (0,preact_module.h)("a", {
8667
9244
  class: "url-button-attachment",
8668
- href: 'tel:' + button.phone_number,
9245
+ href: (0,util_url/* safeUrl */.P)('tel:' + button.phone_number),
8669
9246
  key: index,
8670
9247
  title: button.title
8671
9248
  }, props.t.i18n(button.i18n_title) || props.t.i18n(button.old_i18n_title) || button.title || `${props.t('call')} ${button.phone_number}`);
@@ -8673,16 +9250,18 @@ function Buttons(props) {
8673
9250
  if (button.type === 'url_button') {
8674
9251
  return (0,preact_module.h)("a", {
8675
9252
  class: "url-button-attachment",
8676
- href: button.url,
9253
+ href: (0,util_url/* safeUrl */.P)(button.url) || undefined,
8677
9254
  target: "_blank",
9255
+ rel: "noopener noreferrer",
8678
9256
  key: index,
8679
9257
  title: button.title
8680
9258
  }, props.t.i18n(button.i18n_title) || props.t.i18n(button.old_i18n_title) || button.title || button.url);
8681
9259
  }
8682
9260
  if (button.type === 'postback_button') {
8683
- return (0,preact_module.h)("a", {
9261
+ return (0,preact_module.h)("button", {
9262
+ type: "button",
8684
9263
  class: "url-button-attachment",
8685
- href: "javascript:;",
9264
+ key: index,
8686
9265
  onClick: _ => props.onSelect(button)
8687
9266
  }, props.t.i18n(button.i18n_title) || button.title);
8688
9267
  }
@@ -9611,8 +10190,6 @@ class VideoAttachments extends common/* Com */.Mw {
9611
10190
  }, $videos);
9612
10191
  }
9613
10192
  }
9614
- // EXTERNAL MODULE: ./src/chatbox/time.js
9615
- var chatbox_time = __webpack_require__(1620);
9616
10193
  ;// ./src/chatbox/QuoteMessage.js
9617
10194
  function QuoteMessage_defineProperty(e, r, t) { return (r = QuoteMessage_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
9618
10195
  function QuoteMessage_toPropertyKey(t) { var i = QuoteMessage_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
@@ -9653,7 +10230,7 @@ class QuoteMessage extends common/* Com */.Mw {
9653
10230
  if (util/* default */.A.get(this.props, 'chatbox.hide_agent_profile')) sendername = acc.name;
9654
10231
  }
9655
10232
  let att = util/* default */.A.get(this.props.ev, 'data.message.attachments.0');
9656
- if (att) {
10233
+ if (att && !util/* default */.A.get(this.props.ev, 'data.message.deleted')) {
9657
10234
  let isImg = util/* default */.A.includes(att.mimetype, 'image');
9658
10235
  if (isImg) {
9659
10236
  let uri = att.url;
@@ -9687,7 +10264,8 @@ class QuoteMessage extends common/* Com */.Mw {
9687
10264
  let format = util/* default */.A.get(this.props.ev, 'data.message.format', 'plaintext');
9688
10265
  let block = util/* default */.A.get(this.props.ev, 'data.message.block');
9689
10266
  let text = util/* default */.A.get(this.props.ev, 'data.message.text');
9690
- if (block) text = util/* default */.A.blockToText(block);
10267
+ if (block) text = util/* default */.A.blockToText(block) || text;
10268
+ if (util/* default */.A.get(this.props.ev, 'data.message.deleted')) text = this.props.t('recalled_message');
9691
10269
  return (0,preact_module.h)("div", {
9692
10270
  class: "message-quote",
9693
10271
  onClick: () => this.scrollToSourceEvent(this.props.ev)
@@ -9722,10 +10300,9 @@ class TextMessage extends common/* Com */.Mw {
9722
10300
  }
9723
10301
  renderTime() {
9724
10302
  return null;
9725
- // removed by dead control flow
9726
-
9727
- // removed by dead control flow
9728
-
10303
+ }
10304
+ componentWillUnmount() {
10305
+ util/* default */.A.clearTimeout(this.focusTimeout);
9729
10306
  }
9730
10307
  focusSourceEventFromQuote(ev) {
9731
10308
  if (ev.id !== this.props.ev.id) return;
@@ -9733,7 +10310,7 @@ class TextMessage extends common/* Com */.Mw {
9733
10310
  let attachmentIndexField = util/* default */.A.find(fields, f => f.key === 'attachment_index');
9734
10311
  let attachmentIndex = util/* default */.A.get(attachmentIndexField, 'value');
9735
10312
  try {
9736
- attachmentIndex = JSON.parse(attachmentIndex);
10313
+ attachmentIndex = util/* default */.A.parseJSON(attachmentIndex);
9737
10314
  } catch (err) {
9738
10315
  attachmentIndex = undefined;
9739
10316
  }
@@ -9741,17 +10318,22 @@ class TextMessage extends common/* Com */.Mw {
9741
10318
  this.setState({
9742
10319
  focused: true
9743
10320
  });
9744
- if (this.focusTimeout) clearTimeout(this.focusTimeout);
9745
- this.focusTimeout = setTimeout(() => {
10321
+ if (this.focusTimeout) util/* default */.A.clearTimeout(this.focusTimeout);
10322
+ this.focusTimeout = util/* default */.A.setTimeout(() => {
9746
10323
  this.setState({
9747
10324
  focused: false
9748
10325
  });
9749
10326
  }, 3000);
9750
10327
  }
9751
10328
  render() {
9752
- var format = util/* default */.A.get(this.props.ev, 'data.message.format', 'plaintext');
10329
+ if (util/* default */.A.get(this.props.ev, 'data.message.deleted')) {
10330
+ let byType = util/* default */.A.get(this.props.ev, 'by.type') === 'user' ? 'user' : 'agent';
10331
+ return (0,preact_module.h)("div", {
10332
+ class: 'message-' + byType + ' message-text--' + byType + ' message-text--deleted'
10333
+ }, this.props.t('recalled_message'));
10334
+ }
9753
10335
  let block = util/* default */.A.get(this.props.ev, 'data.message.block');
9754
- if (block) return this.renderBlock(block);
10336
+ if (block && !util/* default */.A.isEmptyBlock(block)) return this.renderBlock(block);
9755
10337
  return this.renderPlainText();
9756
10338
  }
9757
10339
  renderPlainText() {
@@ -9771,11 +10353,14 @@ class TextMessage extends common/* Com */.Mw {
9771
10353
  if (!url.startsWith('//') && !url.startsWith('https://') && !url.startsWith('http://') && !url.startsWith('data:')) {
9772
10354
  url = '//' + url;
9773
10355
  }
10356
+ url = (0,util_url/* safeUrl */.P)(url);
10357
+ if (!url) return tag.text;
9774
10358
  return (0,preact_module.h)("a", {
9775
10359
  class: "text-message-link",
9776
10360
  href: url,
9777
10361
  target: "_blank",
9778
- onClick: e => this.props.onLink(e, url)
10362
+ rel: "noopener noreferrer",
10363
+ onClick: e => this.props.onLink && this.props.onLink(e, url)
9779
10364
  }, tag.text);
9780
10365
  }
9781
10366
  if (tag.type === 'phone') return (0,preact_module.h)("a", {
@@ -9789,15 +10374,10 @@ class TextMessage extends common/* Com */.Mw {
9789
10374
  return tag.text;
9790
10375
  });
9791
10376
  if (util/* default */.A.size(tags) === 0) return null;
9792
- let isDeleted = util/* default */.A.get(this.props.ev, 'data.message.deleted');
9793
10377
  let attachments = util/* default */.A.get(this.props.ev, 'data.message.attachments', []);
9794
10378
  let quote = util/* default */.A.find(attachments, att => att.type === 'quote');
9795
10379
  if (byType === 'agent') {
9796
10380
  let cls = 'message-agent message-text--agent';
9797
- if (isDeleted) {
9798
- tags = this.props.t('recalled_message');
9799
- cls += ' message-text--deleted';
9800
- }
9801
10381
  if (this.state.focused) cls += ' just-focused';
9802
10382
  return (0,preact_module.h)("div", {
9803
10383
  class: cls,
@@ -9829,6 +10409,8 @@ class TextMessage extends common/* Com */.Mw {
9829
10409
  }, (0,preact_module.h)(chatbox_block/* default */.A, {
9830
10410
  block: block,
9831
10411
  onLink: this.props.onLink,
10412
+ store: this.props.store,
10413
+ t: this.props.t,
9832
10414
  textMessage: true
9833
10415
  }), this.renderTime());
9834
10416
  }
@@ -9840,6 +10422,8 @@ class TextMessage extends common/* Com */.Mw {
9840
10422
  }, (0,preact_module.h)(chatbox_block/* default */.A, {
9841
10423
  block: block,
9842
10424
  onLink: this.props.onLink,
10425
+ store: this.props.store,
10426
+ t: this.props.t,
9843
10427
  textMessage: true
9844
10428
  }));
9845
10429
  }
@@ -9873,12 +10457,14 @@ class InfoMessage extends common/* Com */.Mw {
9873
10457
  return (0,preact_module.h)("div", {
9874
10458
  class: "convo-event"
9875
10459
  }, (0,preact_module.h)("div", {
9876
- class: "info-message"
10460
+ class: "info-message info-message--ended"
9877
10461
  }, this.props.t('conversation_ended')));
9878
10462
  }
9879
10463
  return null;
9880
10464
  }
9881
10465
  }
10466
+ // EXTERNAL MODULE: ./src/chatbox/time.js
10467
+ var chatbox_time = __webpack_require__(1620);
9882
10468
  ;// ./src/chatbox/Event.js
9883
10469
  function Event_defineProperty(e, r, t) { return (r = Event_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
9884
10470
  function Event_toPropertyKey(t) { var i = Event_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
@@ -9930,10 +10516,26 @@ class Event extends common/* Com */.Mw {
9930
10516
  this.state = {
9931
10517
  pongs: util/* default */.A.get(this.props.event, 'ev.data.message.pongs') || []
9932
10518
  };
10519
+ const _ev = this.props.event.ev;
10520
+ const age = (this.props.store.now ? this.props.store.now() : util/* default */.A.Date.now()) - _ev.created;
10521
+ this.animateSend = !props.isHistory && _ev.type === 'message_sent' && util/* default */.A.get(_ev, 'by.type') === 'user' && _ev.id === util/* default */.A.get(_ev, 'source_event_id') && age >= 0 && age < 2000;
9933
10522
  this.textMessageRef = (0,preact_module/* createRef */._3)();
9934
10523
  this.fileAttachmentRef = (0,preact_module/* createRef */._3)();
9935
10524
  this.imageAttachmentRef = (0,preact_module/* createRef */._3)();
9936
10525
  }
10526
+ componentDidMount() {
10527
+ if (!this.animateSend) return;
10528
+ this.sendAnimationFrame = window.requestAnimationFrame(() => {
10529
+ this.sendAnimationFrame = window.requestAnimationFrame(() => {
10530
+ if (this._isMounted) this.setState({
10531
+ sendEntered: true
10532
+ });
10533
+ });
10534
+ });
10535
+ }
10536
+ componentWillUnmount() {
10537
+ if (this.sendAnimationFrame) window.cancelAnimationFrame(this.sendAnimationFrame);
10538
+ }
9937
10539
  render() {
9938
10540
  var ev = util/* default */.A.get(this.props.event, 'ev', {});
9939
10541
  switch (ev.type) {
@@ -9978,6 +10580,7 @@ class Event extends common/* Com */.Mw {
9978
10580
  return !!util/* default */.A.find(pongs, pong => pong.type === 'dislike');
9979
10581
  }
9980
10582
  chooseQuickReply(reply) {
10583
+ if (this.props.isHistory) return;
9981
10584
  let ev = util/* default */.A.get(this.props.event, 'ev', {});
9982
10585
  let message = {
9983
10586
  text: reply.title,
@@ -9995,6 +10598,7 @@ class Event extends common/* Com */.Mw {
9995
10598
  this.props.onSend(message);
9996
10599
  }
9997
10600
  choosePostbackBtn(button) {
10601
+ if (this.props.isHistory) return;
9998
10602
  let ev = util/* default */.A.get(this.props.event, 'ev', {});
9999
10603
  let message = {
10000
10604
  text: button.title,
@@ -10135,6 +10739,17 @@ class Event extends common/* Com */.Mw {
10135
10739
  }
10136
10740
  renderMessageSent() {
10137
10741
  let ev = this.props.event.ev;
10742
+ if (util/* default */.A.get(ev, 'data.message.deleted')) {
10743
+ let byType = util/* default */.A.get(ev, 'by.type') === 'user' ? 'user' : 'agent';
10744
+ return (0,preact_module.h)("div", {
10745
+ class: 'convo-event ' + byType + '-message',
10746
+ "data-ev-id": ev.id
10747
+ }, (0,preact_module.h)(TextMessage, {
10748
+ ev: ev,
10749
+ t: this.props.t,
10750
+ store: this.props.store
10751
+ }));
10752
+ }
10138
10753
  let attachments = util/* default */.A.get(ev, 'data.message.attachments');
10139
10754
  let hasForm = util/* default */.A.find(attachments, att => att.type === 'form');
10140
10755
  if (util/* default */.A.isEmptyMessage(util/* default */.A.get(ev, 'data.message'))) return null;
@@ -10205,13 +10820,13 @@ class Event extends common/* Com */.Mw {
10205
10820
  t: this.props.t,
10206
10821
  store: this.props.store,
10207
10822
  ev: ev
10208
- }), (0,preact_module.h)(QuickReplies, {
10823
+ }), !this.props.isHistory && (0,preact_module.h)(QuickReplies, {
10209
10824
  store: this.props.store,
10210
10825
  ev: ev,
10211
10826
  onSelect: e => this.chooseQuickReply(e)
10212
10827
  }), this.renderReactions(), this.renderAIDevNote())));
10213
10828
  }
10214
- if (util/* default */.A.get(ev, 'data.message.idempotency_key') === ev.id && this.props.store.now() - ev.created < 900) {
10829
+ if (util/* default */.A.get(ev, 'source_event_id') === ev.id && this.props.store.now() - ev.created < 900) {
10215
10830
  util/* default */.A.setTimeout(() => this.setState({
10216
10831
  refresh: this.state.refresh
10217
10832
  }), 1000);
@@ -10219,7 +10834,7 @@ class Event extends common/* Com */.Mw {
10219
10834
  let $dot = (0,preact_module.h)("div", {
10220
10835
  class: "sending_dot"
10221
10836
  });
10222
- if (this.props.store.now() - ev.created < 900 || util/* default */.A.get(ev, 'data.message.idempotency_key') !== ev.id) {
10837
+ if (this.props.store.now() - ev.created < 900 || util/* default */.A.get(ev, 'source_event_id') !== ev.id) {
10223
10838
  $dot = (0,preact_module.h)("div", {
10224
10839
  class: "sending_dot sending_dot__hide"
10225
10840
  });
@@ -10247,10 +10862,11 @@ class Event extends common/* Com */.Mw {
10247
10862
  class: "convo-event user-message",
10248
10863
  "data-ev-id": ev.id
10249
10864
  }, $sender, (0,preact_module.h)("div", {
10250
- class: "message-user__container"
10865
+ class: 'message-user__container' + (this.animateSend && !this.props.isHistory ? ' message-user__container--send' + (this.state.sendEntered ? '' : ' message-user__container--enter') : '')
10251
10866
  }, $dot, (0,preact_module.h)(TextMessage, {
10252
10867
  ref: this.textMessageRef,
10253
10868
  store: this.props.store,
10869
+ t: this.props.t,
10254
10870
  ev: ev,
10255
10871
  refresh: this.state.refresh,
10256
10872
  onLink: this.props.onLink
@@ -10286,6 +10902,7 @@ class Event extends common/* Com */.Mw {
10286
10902
  })), $error);
10287
10903
  }
10288
10904
  async onSendReaction(action) {
10905
+ if (this.props.isHistory) return;
10289
10906
  if (this._reacting) return;
10290
10907
  let ev = this.props.event.ev;
10291
10908
  let cid = util/* default */.A.get(ev, 'data.message.conversation_id');
@@ -10337,6 +10954,7 @@ class Event extends common/* Com */.Mw {
10337
10954
  this._reacting = false;
10338
10955
  }
10339
10956
  renderReactions() {
10957
+ if (this.props.isHistory) return null;
10340
10958
  if (this.props.store.isAIDevMode()) return null;
10341
10959
  let cid = util/* default */.A.get(this.props.event.ev, 'data.message.conversation_id', '');
10342
10960
  if (cid.startsWith('cslight')) return null;
@@ -10424,7 +11042,7 @@ class Event extends common/* Com */.Mw {
10424
11042
  let byid = util/* default */.A.get(ev, 'by.display_id', util/* default */.A.get(ev, 'by.id')) || '';
10425
11043
  if (bytype === 'user') return util/* default */.A.getUserDisplayName(this.props.store.matchUser());
10426
11044
  let acc = this.props.store.matchAccount();
10427
- if (bytype === 'agent') return util/* default */.A.getAgentDisplayName(acc, this.props.store.matchAgent(byid));
11045
+ if (bytype === 'agent' || util/* default */.A.get(ev, 'by.display_type') === 'agent') return util/* default */.A.getAgentDisplayName(acc, this.props.store.matchAgent(byid));
10428
11046
  if (byid.startsWith('at')) return util/* default */.A.getAgentDisplayName(acc, this.props.store.matchAgent(byid));
10429
11047
  if (bytype === 'bot') {
10430
11048
  let bot = this.props.store.matchBot()[byid];
@@ -10441,6 +11059,9 @@ function Events_toPropertyKey(t) { var i = Events_toPrimitive(t, "string"); retu
10441
11059
  function Events_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
10442
11060
  ;
10443
11061
 
11062
+
11063
+
11064
+
10444
11065
  const convoemptyimg = (convos_empty_namespaceFn());
10445
11066
 
10446
11067
 
@@ -10468,6 +11089,11 @@ class Events extends common/* Com */.Mw {
10468
11089
  this.checkAndSeen();
10469
11090
  }
10470
11091
  componentDidMount() {
11092
+ this.syncTimer = util/* default */.A.setInterval(() => this.syncMessages(), 120_000);
11093
+ this.resumeSync = () => this.syncMessages();
11094
+ window.addEventListener('focus', this.resumeSync);
11095
+ document.addEventListener('visibilitychange', this.resumeSync);
11096
+ this.syncMessages();
10471
11097
  this.setState({
10472
11098
  isShowTyping: false,
10473
11099
  typing_event: {}
@@ -10502,13 +11128,123 @@ class Events extends common/* Com */.Mw {
10502
11128
  }, 5000);
10503
11129
  });
10504
11130
  this.props.store.onMessageUpdated(this, async ev => {
10505
- if (util/* default */.A.convoOfEv(ev) !== this.props.cid) return;
10506
- await this.props.store.reloadConvoEvents(this.props.cid);
11131
+ const cid = util/* default */.A.convoOfEv(ev);
11132
+ if (!this.visibleCounts || !this.visibleCounts[cid]) return;
11133
+ await this.props.store.reloadConvoEvents(cid);
10507
11134
  this.forceUpdate();
10508
11135
  });
11136
+ this.restoreInitialBottom();
11137
+ this.observeHistoryStart();
10509
11138
  }
10510
11139
  componentDidUpdate(prevProps) {
10511
- if (prevProps.cid !== this.props.cid) this.loadConvo();
11140
+ if (prevProps.cid !== this.props.cid && !this.isDraftPromotion(prevProps, this.props)) this.loadConvo();
11141
+ if (prevProps.cid !== this.props.cid || !prevProps.isShow && this.props.isShow) this.syncMessages();
11142
+ this.restoreInitialBottom();
11143
+ this.observeHistoryStart();
11144
+ }
11145
+ componentWillReceiveProps(nextProps) {
11146
+ if (nextProps.cid === this.props.cid) return;
11147
+ if (this.isDraftPromotion(this.props, nextProps)) {
11148
+ this.visibleCounts[nextProps.cid] = this.visibleCounts[this.props.cid] || 30;
11149
+ delete this.visibleCounts[this.props.cid];
11150
+ return;
11151
+ }
11152
+ this.loadVersion = (this.loadVersion || 0) + 1;
11153
+ this.visibleCounts = this.initialVisibleCounts(nextProps);
11154
+ this.evRefs = {};
11155
+ this.historyBusy = true;
11156
+ this.setState({
11157
+ error: false,
11158
+ historyError: false,
11159
+ historyLoading: false,
11160
+ isShowTyping: false,
11161
+ loading: nextProps.cid ? util/* default */.A.Date.now() : false
11162
+ });
11163
+ }
11164
+ isDraftPromotion(previous, next) {
11165
+ return !!previous.cid && util/* default */.A.get(next.store.widgetConvoOrigins, next.cid) === previous.cid;
11166
+ }
11167
+ initialVisibleCounts(props) {
11168
+ const counts = props.cid ? {
11169
+ [props.cid]: 30
11170
+ } : {};
11171
+ if (!props.store.matchConvo || util/* default */.A.get(props.store.matchConvo(props.cid), 'light_type') !== 'widget') return counts;
11172
+ const history = conversationHistory(props.store, props.cid).slice(0, -1).reverse();
11173
+ let remaining = 30;
11174
+ for (const convo of history) {
11175
+ const cached = util/* default */.A.size(props.store.listEvents(convo.id));
11176
+ if (!cached || !remaining) break;
11177
+ counts[convo.id] = Math.min(cached, remaining);
11178
+ remaining -= counts[convo.id];
11179
+ if (!util/* default */.A.get(props.store.outofmsgM, convo.id)) break;
11180
+ }
11181
+ return counts;
11182
+ }
11183
+ syncMessages() {
11184
+ if (!this._isMounted || !this.props.isShow || document.visibilityState === 'hidden') return;
11185
+ const ids = Object.keys(this.visibleCounts || {}).filter(cid => this.visibleCounts[cid]);
11186
+ return Promise.all(ids.map(cid => this.props.store.syncConvoEvents(cid)));
11187
+ }
11188
+ componentWillUnmount() {
11189
+ util/* default */.A.clearInterval(this.syncTimer);
11190
+ window.removeEventListener('focus', this.resumeSync);
11191
+ document.removeEventListener('visibilitychange', this.resumeSync);
11192
+ this.loadVersion = (this.loadVersion || 0) + 1;
11193
+ if (this.timer) util/* default */.A.clearTimeout(this.timer);
11194
+ if (this.historyCheckTimer) util/* default */.A.clearTimeout(this.historyCheckTimer);
11195
+ if (this.historyObserver) this.historyObserver.disconnect();
11196
+ if (this.scrollTimer) util/* default */.A.clearTimeout(this.scrollTimer);
11197
+ if (this.initialSizeObserver) this.initialSizeObserver.disconnect();
11198
+ }
11199
+ stopInitialBottom() {
11200
+ this.initialBottom = false;
11201
+ }
11202
+ restoreInitialBottom() {
11203
+ if (!this.initialBottom || this.props.isShow === false || !this.refBody) return;
11204
+ if (window.ResizeObserver && (this.initialObservedBody !== this.refBody || this.initialObservedContent !== this.refContent)) {
11205
+ if (this.initialSizeObserver) this.initialSizeObserver.disconnect();
11206
+ this.initialObservedBody = this.refBody;
11207
+ this.initialObservedContent = this.refContent;
11208
+ this.initialSizeObserver = new window.ResizeObserver(() => {
11209
+ if (this._isMounted) this.restoreInitialBottom();
11210
+ });
11211
+ this.initialSizeObserver.observe(this.refBody);
11212
+ if (this.refContent) this.initialSizeObserver.observe(this.refContent);
11213
+ }
11214
+ this.refBody.scrollTop = this.refBody.scrollHeight;
11215
+ if (this.checkAndSeen) this.checkAndSeen();
11216
+ }
11217
+ observeHistoryStart() {
11218
+ if (this.observedHistoryStart !== this.historyStart || this.observedHistoryRoot !== this.refBody) {
11219
+ if (this.historyObserver) this.historyObserver.disconnect();
11220
+ this.observedHistoryStart = this.historyStart;
11221
+ this.observedHistoryRoot = this.refBody;
11222
+ if (this.historyStart && this.refBody && window.IntersectionObserver) {
11223
+ this.historyObserver = new window.IntersectionObserver(entries => {
11224
+ if (entries.some(entry => entry.isIntersecting)) this.queueHistoryCheck();
11225
+ }, {
11226
+ root: this.refBody
11227
+ });
11228
+ this.historyObserver.observe(this.historyStart);
11229
+ }
11230
+ }
11231
+ this.queueHistoryCheck();
11232
+ }
11233
+ queueHistoryCheck() {
11234
+ if (this.historyCheckTimer || !this._isMounted) return;
11235
+ this.historyCheckTimer = util/* default */.A.setTimeout(() => {
11236
+ this.historyCheckTimer = null;
11237
+ this.loadVisibleHistory();
11238
+ }, 0);
11239
+ }
11240
+ loadVisibleHistory() {
11241
+ if (!this._isMounted || this.props.isShow === false || this.historyBusy || this.state.historyError || !this.hasMore()) return;
11242
+ if (!this.refBody || !this.historyStart) return;
11243
+ const root = this.refBody.getBoundingClientRect();
11244
+ const marker = this.historyStart.getBoundingClientRect();
11245
+ if (root.width <= 0 || root.height <= 0 || marker.height <= 0) return;
11246
+ if (marker.right <= Math.max(root.left, 0) || marker.left >= Math.min(root.right, window.innerWidth)) return;
11247
+ if (marker.bottom > Math.max(root.top, 0) && marker.top < Math.min(root.bottom, window.innerHeight)) return this.loadMore();
10512
11248
  }
10513
11249
  setEventChildRef(ele, id) {
10514
11250
  this.evRefs[id] = ele;
@@ -10535,26 +11271,28 @@ class Events extends common/* Com */.Mw {
10535
11271
  }
10536
11272
  render() {
10537
11273
  if (this.state.error) return this.renderError();
10538
- let events = util/* default */.A.map(this.props.store.listEvents(this.props.cid));
10539
- if (!this.state.loading && util/* default */.A.size(events) === 0 && !this.props.cid) {
10540
- return (0,preact_module.h)("div", {
10541
- ref: ref => this.refBody = ref,
10542
- class: "widget-body--events-container"
10543
- }, (0,preact_module.h)("div", {
10544
- class: "widget-body--empty"
10545
- }, (0,preact_module.h)("div", {
10546
- class: "widget-body--empty-icon"
10547
- }), (0,preact_module.h)("div", {
10548
- class: "widget-body--empty-text"
10549
- }, this.props.t('empty_convo_text'))), (0,preact_module.h)(PoweredBy, {
10550
- store: this.props.store
11274
+ const conversations = conversationHistory(this.props.store, this.props.cid).filter(convo => this.visibleCounts && this.visibleCounts[convo.id]);
11275
+ let events = conversations.flatMap(convo => {
11276
+ const entries = conversationEvents(this.props.store, convo).slice(-this.visibleCounts[convo.id]).filter(entry => convo.id === this.props.cid || entry.ev.type !== 'conversation_state_updated');
11277
+ processEvents(convo, entries);
11278
+ return entries.map(entry => ({
11279
+ ...entry,
11280
+ convo
10551
11281
  }));
11282
+ });
11283
+ if (!this.state.loading && !this.props.creating && events.length === 0 && !this.props.cid) {
11284
+ if (!this.greetingCreated) this.greetingCreated = util/* default */.A.Date.now();
11285
+ events.push({
11286
+ mode: 'lead',
11287
+ is_last_message_send: true,
11288
+ ev: {
11289
+ ...widgetGreeting(this.props.chatbox, this.props.t, this.greetingCreated),
11290
+ id: 'widget-virtual-greeting'
11291
+ }
11292
+ });
10552
11293
  }
10553
- events = util/* default */.A.orderBy(events, 'created', 'asc');
11294
+ this.renderedIds = new Set(events.map(entry => entry.ev.id));
10554
11295
  let convo = this.props.store.matchConvo(this.props.cid);
10555
- events = util/* default */.A.map(events, ev => ({
10556
- ev: ev
10557
- }));
10558
11296
  let ev = this.state.typing_event || {
10559
11297
  id: 'evzz' + util/* default */.A.Date.now(),
10560
11298
  created: util/* default */.A.Date.now(),
@@ -10579,11 +11317,21 @@ class Events extends common/* Com */.Mw {
10579
11317
  }
10580
11318
  }
10581
11319
  };
10582
- processEvents(convo, events);
11320
+ const hasMessages = events.some(entry => entry.ev.type === 'message_sent');
10583
11321
  events.push(fakeev);
10584
11322
  let $events = util/* default */.A.map(events, ev => {
10585
- let isLast = ev.is_last_message_send && util/* default */.A.get(convo, 'state') !== 'ended';
10586
- return (0,preact_module.h)(Event, {
11323
+ const sourceConvo = ev.convo || convo;
11324
+ const isHistory = sourceConvo && sourceConvo.id !== this.props.cid;
11325
+ let isLast = !isHistory && ev.is_last_message_send && util/* default */.A.get(sourceConvo, 'state') !== 'ended';
11326
+ const sourceId = sourceConvo ? sourceConvo.id : '';
11327
+ const key = (util/* default */.A.get(this.props.store.widgetConvoOrigins, sourceId) || sourceId) + ':' + conversationEventKey(ev.ev);
11328
+ return (0,preact_module.h)("fieldset", {
11329
+ class: isHistory ? 'conversation-event conversation-event--history' : 'conversation-event',
11330
+ disabled: isHistory,
11331
+ "data-conversation-id": sourceConvo && sourceConvo.id,
11332
+ key: key
11333
+ }, (0,preact_module.h)(Event, {
11334
+ isHistory: isHistory,
10587
11335
  isLast: isLast,
10588
11336
  chatbox: this.props.chatbox,
10589
11337
  onLink: this.props.onLink,
@@ -10593,45 +11341,78 @@ class Events extends common/* Com */.Mw {
10593
11341
  onPostback: this.props.onPostback,
10594
11342
  onFocusSourceEventFromQuote: this.onFocusSourceEventFromQuote,
10595
11343
  ref: ele => this.setEventChildRef(ele, ev.ev.id),
10596
- isConvoEnded: util/* default */.A.get(convo, 'state') === 'ended',
11344
+ isConvoEnded: util/* default */.A.get(sourceConvo, 'state') === 'ended',
10597
11345
  event: ev,
10598
11346
  t: this.props.t,
10599
- key: ev.ev.id
10600
- });
11347
+ key: key
11348
+ }));
10601
11349
  });
10602
11350
  let $loading = null;
10603
- let style = 'opacity: 1 !important';
10604
- if (this.props.creating) {
11351
+ if (!hasMessages && (this.props.creating || this.state.loading)) {
10605
11352
  $loading = (0,preact_module.h)(spinner/* default */.A, {
10606
11353
  static: true,
10607
11354
  mode: util/* default */.A.get(this.props.chatbox, 'primary_color', 'dark'),
10608
11355
  size: "120",
10609
11356
  center: true
10610
11357
  });
10611
- style = 'opacity: 0 !important';
10612
- }
10613
- if (this.state.loading) {
10614
- if (util/* default */.A.Date.now() - this.state.loading > 500) {
10615
- $loading = (0,preact_module.h)(spinner/* default */.A, {
10616
- static: true,
10617
- mode: util/* default */.A.get(this.props.chatbox, 'primary_color', 'dark'),
10618
- size: "120",
10619
- center: true
10620
- });
10621
- style = 'opacity: 0 !important';
10622
- }
10623
11358
  }
10624
11359
  return (0,preact_module.h)(preact_module/* Fragment */.FK, null, $loading, (0,preact_module.h)("div", {
10625
- style: style,
10626
11360
  ref: ref => this.refBody = ref,
10627
11361
  class: "widget-body--events-container",
10628
- onMouseOver: this.checkAndSeen
10629
- }, (0,preact_module.h)("div", {
10630
- class: "widget-body--events"
11362
+ onMouseOver: this.checkAndSeen,
11363
+ onScroll: () => this.queueHistoryCheck(),
11364
+ onWheel: () => this.stopInitialBottom(),
11365
+ onTouchStart: () => this.stopInitialBottom(),
11366
+ onPointerDown: () => this.stopInitialBottom(),
11367
+ onKeyDown: () => this.stopInitialBottom()
11368
+ }, this.hasMore() && (0,preact_module.h)("div", {
11369
+ ref: ref => {
11370
+ this.historyStart = ref;
11371
+ },
11372
+ class: "conversation-history-start",
11373
+ "aria-hidden": "true"
11374
+ }), this.state.historyLoading && !this.state.historyError && (0,preact_module.h)(spinner/* default */.A, {
11375
+ size: "16",
11376
+ mode: "blue"
11377
+ }), this.state.historyError && this.renderHistoryError(), (0,preact_module.h)("div", {
11378
+ class: "widget-body--events",
11379
+ ref: ref => {
11380
+ this.refContent = ref;
11381
+ }
10631
11382
  }, $events), (0,preact_module.h)(PoweredBy, {
10632
11383
  store: this.props.store
10633
11384
  })));
10634
11385
  }
11386
+ renderHistoryError() {
11387
+ const t = this.props.t;
11388
+ const translated = t('load_history_error');
11389
+ const locale = t.locale ? t.locale().toLowerCase() : 'en';
11390
+ const fallback = locale.startsWith('vi') ? 'Chưa tải được tin nhắn cũ' : 'Couldn’t load earlier messages';
11391
+ const text = translated && translated !== 'load_history_error' ? translated : fallback;
11392
+ return (0,preact_module.h)("div", {
11393
+ class: "conversation-history-error",
11394
+ role: "status"
11395
+ }, (0,preact_module.h)("span", {
11396
+ class: "conversation-history-error__text"
11397
+ }, text), (0,preact_module.h)("button", {
11398
+ class: "conversation-history-error__retry",
11399
+ type: "button",
11400
+ disabled: this.state.historyLoading,
11401
+ "aria-label": t('try_again'),
11402
+ "aria-busy": !!this.state.historyLoading,
11403
+ onClick: () => this.loadMore()
11404
+ }, (0,preact_module.h)("span", {
11405
+ class: "conversation-history-error__retry-label",
11406
+ style: {
11407
+ visibility: this.state.historyLoading ? 'hidden' : 'visible'
11408
+ }
11409
+ }, t('try_again')), this.state.historyLoading && (0,preact_module.h)("span", {
11410
+ class: "conversation-history-error__spinner",
11411
+ "aria-hidden": "true"
11412
+ }, (0,preact_module.h)(spinner/* default */.A, {
11413
+ size: "14"
11414
+ }))));
11415
+ }
10635
11416
  renderError() {
10636
11417
  let $tryAgainBtn = (0,preact_module.h)("a", {
10637
11418
  href: "#",
@@ -10679,61 +11460,168 @@ class Events extends common/* Com */.Mw {
10679
11460
  });
10680
11461
  }
10681
11462
  onEvent(newev) {
10682
- if (util/* default */.A.convoOfEv(newev) !== this.props.cid) return;
11463
+ const cid = util/* default */.A.convoOfEv(newev);
11464
+ if (!this.visibleCounts || !this.visibleCounts[cid]) return;
11465
+ if (newev.type === 'message_sent') {
11466
+ const sourceEventId = util/* default */.A.get(newev, 'source_event_id');
11467
+ const key = cid + ':' + (sourceEventId || newev.id);
11468
+ this.receivedMessageKeys = this.receivedMessageKeys || new Set();
11469
+ const known = this.receivedMessageKeys.has(key) || this.renderedIds && (this.renderedIds.has(newev.id) || this.renderedIds.has(sourceEventId));
11470
+ this.receivedMessageKeys.add(key);
11471
+ if (known) return;
11472
+ if (this.renderedIds) this.visibleCounts[cid]++;
11473
+ }
11474
+ if (cid !== this.props.cid) {
11475
+ const container = this.refBody;
11476
+ const height = container ? container.scrollHeight : 0;
11477
+ const top = container ? container.scrollTop : 0;
11478
+ this.forceUpdate();
11479
+ util/* default */.A.setTimeout(() => {
11480
+ if (container && container === this.refBody) container.scrollTop = top + container.scrollHeight - height;
11481
+ });
11482
+ return;
11483
+ }
10683
11484
  let isBottom = this.isBottom();
11485
+ if (newev.type === 'message_sent') this.stopInitialBottom();
10684
11486
  var byme = false;
10685
- if (util/* default */.A.get(newev, 'type') === 'message_sent' && newev.id === util/* default */.A.get(newev, 'data.message.idempotency_key')) byme = true;
10686
- if (byme || isBottom) this.scrollToBottom();
11487
+ if (util/* default */.A.get(newev, 'type') === 'message_sent' && newev.id === util/* default */.A.get(newev, 'source_event_id')) byme = true;
11488
+ if (byme || isBottom) this.scrollToBottom('smooth');
11489
+ }
11490
+ historyTarget() {
11491
+ const conversations = conversationHistory(this.props.store, this.props.cid);
11492
+ const first = conversations.findIndex(convo => this.visibleCounts && this.visibleCounts[convo.id]);
11493
+ if (first < 0) return;
11494
+ const convo = conversations[first];
11495
+ const count = util/* default */.A.size(this.props.store.listEvents(convo.id));
11496
+ if (this.visibleCounts[convo.id] < count || !convo.id.startsWith('cslight') && !util/* default */.A.get(this.props.store.outofmsgM, convo.id)) return convo;
11497
+ return conversations[first - 1];
11498
+ }
11499
+ hasMore() {
11500
+ return !!this.historyTarget();
11501
+ }
11502
+ async fetchPage(cid) {
11503
+ if (cid.startsWith('cslight') || util/* default */.A.get(this.props.store.outofmsgM, cid)) return {};
11504
+ this.eventRequests = this.eventRequests || new Map();
11505
+ let request = this.eventRequests.get(cid);
11506
+ if (!request) {
11507
+ request = this.props.store.fetchMoreEvents(cid, 30);
11508
+ this.eventRequests.set(cid, request);
11509
+ }
11510
+ try {
11511
+ return await request;
11512
+ } finally {
11513
+ if (this.eventRequests.get(cid) === request) this.eventRequests.delete(cid);
11514
+ }
10687
11515
  }
10688
11516
  async loadConvo() {
10689
- if (!this.props.cid) return;
10690
- this.lastContentOffsetY = 0;
11517
+ const cid = this.props.cid;
11518
+ this.receivedMessageKeys = new Set();
11519
+ this.initialBottom = true;
11520
+ const version = this.loadVersion = (this.loadVersion || 0) + 1;
11521
+ this.visibleCounts = this.initialVisibleCounts(this.props);
11522
+ this.historyBusy = true;
11523
+ this.evRefs = {};
10691
11524
  this.setState({
10692
- loading: false
11525
+ error: false,
11526
+ historyError: false,
11527
+ historyLoading: false,
11528
+ isShowTyping: false,
11529
+ loading: cid && !util/* default */.A.size(this.props.store.listEvents(cid)) ? util/* default */.A.Date.now() : false
10693
11530
  });
10694
- let events = this.props.store.listEvents(this.props.cid);
10695
- if (util/* default */.A.size(events) === 0) {
10696
- this.setState({
10697
- loading: util/* default */.A.Date.now()
10698
- });
10699
- util/* default */.A.setTimeout(() => {
10700
- this.forceUpdate();
10701
- }, 800);
10702
- let cid = this.props.cid;
10703
- let {
10704
- error
10705
- } = await this.props.store.fetchMoreEvents(cid);
10706
- this.setState({
10707
- loading: false
11531
+ try {
11532
+ if (cid && !util/* default */.A.size(this.props.store.listEvents(cid))) {
11533
+ const result = await this.fetchPage(cid);
11534
+ if (version !== this.loadVersion || !this._isMounted) return;
11535
+ if (result && result.error) this.setState({
11536
+ error: !util/* default */.A.size(this.props.store.listEvents(cid)),
11537
+ historyError: true
11538
+ });
11539
+ }
11540
+ } catch (_) {
11541
+ if (version === this.loadVersion) this.setState({
11542
+ error: !util/* default */.A.size(this.props.store.listEvents(cid)),
11543
+ historyError: true
10708
11544
  });
10709
- if (cid !== this.props.cid) return;
10710
- if (error) {
11545
+ } finally {
11546
+ if (version === this.loadVersion && this._isMounted) {
11547
+ this.historyBusy = false;
10711
11548
  this.setState({
10712
- error: true
11549
+ loading: false
10713
11550
  });
10714
- return;
11551
+ if (!this.initialBottom && this.receivedMessageKeys.size && this.isBottom()) this.scrollToBottom('smooth');
11552
+ this.queueHistoryCheck();
11553
+ if (cid && cid.startsWith('cslightwidget_') && Object.keys(this.visibleCounts).length === 1 && this.hasMore()) this.loadMore();
10715
11554
  }
10716
11555
  }
10717
- this.props.store.fetchMoreEvents(this.props.cid);
11556
+ }
11557
+ async loadMore() {
11558
+ if (this.historyBusy || !this._isMounted) return;
11559
+ const target = this.historyTarget();
11560
+ if (!target) return;
11561
+ const version = this.loadVersion;
11562
+ this.historyBusy = true;
11563
+ const container = this.refBody;
11564
+ const visible = this.visibleCounts[target.id] || 0;
10718
11565
  this.setState({
10719
- error: false
11566
+ historyLoading: true
10720
11567
  });
10721
- this.scrollToBottom();
11568
+ try {
11569
+ if (visible >= util/* default */.A.size(this.props.store.listEvents(target.id))) {
11570
+ const result = await this.fetchPage(target.id);
11571
+ if (result && result.error) throw result.error;
11572
+ }
11573
+ if (version !== this.loadVersion || !this._isMounted) return;
11574
+ this.visibleCounts[target.id] = visible + 30;
11575
+ this.setState({
11576
+ historyError: false
11577
+ });
11578
+ } catch (_) {
11579
+ if (version === this.loadVersion) this.setState({
11580
+ historyError: true
11581
+ });
11582
+ } finally {
11583
+ if (version === this.loadVersion && this._isMounted) {
11584
+ const height = container ? container.scrollHeight : 0;
11585
+ const top = container ? container.scrollTop : 0;
11586
+ this.setState({
11587
+ historyLoading: false
11588
+ });
11589
+ this.forceUpdate();
11590
+ await new Promise(resolve => util/* default */.A.setTimeout(resolve, 0));
11591
+ if (version === this.loadVersion && this._isMounted) {
11592
+ if (this.initialBottom) this.restoreInitialBottom();else if (container && container === this.refBody) {
11593
+ container.scrollTop = top + container.scrollHeight - height;
11594
+ this.lastScrollTop = container.scrollTop;
11595
+ }
11596
+ this.historyBusy = false;
11597
+ this.queueHistoryCheck();
11598
+ }
11599
+ }
11600
+ }
10722
11601
  }
10723
11602
  isBottom() {
10724
11603
  let $container = this.refBody;
10725
11604
  if (!$container) return false;
10726
11605
  return $container.scrollHeight < $container.scrollTop + $container.offsetHeight + 50;
10727
11606
  }
10728
- scrollToBottom() {
10729
- util/* default */.A.setTimeout(() => {
11607
+ scrollToBottom(behavior = 'auto') {
11608
+ if (this.scrollTimer) util/* default */.A.clearTimeout(this.scrollTimer);
11609
+ const cid = this.props.cid;
11610
+ this.scrollTimer = util/* default */.A.setTimeout(() => {
11611
+ this.scrollTimer = null;
11612
+ if (!this._isMounted || this.props.cid !== cid) return;
10730
11613
  const $div = this.refBody;
10731
- if ($div) $div.scrollTop = $div.scrollHeight;
11614
+ if (!$div) return;
11615
+ const reducedMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
11616
+ if (behavior === 'smooth' && !reducedMotion && $div.scrollTo) {
11617
+ $div.scrollTo({
11618
+ top: $div.scrollHeight,
11619
+ behavior: 'smooth'
11620
+ });
11621
+ } else {
11622
+ $div.scrollTop = $div.scrollHeight;
11623
+ }
10732
11624
  });
10733
- util/* default */.A.setTimeout(() => {
10734
- const $div = this.refBody;
10735
- if ($div) $div.scrollTop = $div.scrollHeight;
10736
- }, 100);
10737
11625
  if (this.props.isShow) {
10738
11626
  if (this.props.store.browserVisibility === 'visible' && document.hasFocus()) {
10739
11627
  this.props.store.seenConvo(this.props.cid);
@@ -10741,57 +11629,6 @@ class Events extends common/* Com */.Mw {
10741
11629
  }
10742
11630
  }
10743
11631
  }
10744
- function processEvents(convo, events) {
10745
- events = events.filter(event => visibleEvent(event.ev));
10746
- if (events.length < 1) return;
10747
- var lastAgentEvent;
10748
- for (var i = 1; i < events.length; i++) {
10749
- let curEvent = events[i];
10750
- let lastEvent = events[i - 1];
10751
- if (util/* default */.A.get(curEvent, 'ev.by.type') != 'user' && !curEvent.is_typing) {
10752
- lastAgentEvent = curEvent;
10753
- }
10754
- if (visibleEvent(curEvent.ev)) {
10755
- let elapsedSec = util/* default */.A.unixSec(curEvent.ev.created) - util/* default */.A.unixSec(lastEvent.ev.created);
10756
- if (elapsedSec > 300) curEvent.show_time = true;
10757
- }
10758
- }
10759
- if (lastAgentEvent) lastAgentEvent.show_time = true;
10760
- for (var i = 0; i < events.length; i++) {
10761
- let curEvent = events[i];
10762
- if (util/* default */.A.get(curEvent, 'ev.type') === 'message_sent') {
10763
- curEvent.show_time = true;
10764
- break;
10765
- }
10766
- }
10767
- let lastMsgSentIdx = -1;
10768
- for (var i = 0; i < events.length; i++) {
10769
- let curEvent = events[i];
10770
- let prevEvent = events[i - 1];
10771
- let nextEvent = events[i + 1];
10772
- if (curEvent.ev.type === 'message_sent') {
10773
- lastMsgSentIdx = i;
10774
- curEvent.mode = 'lead';
10775
- if (util/* default */.A.get(prevEvent, 'ev.type') === 'message_sent' && util/* default */.A.get(prevEvent, 'ev.by.id') === util/* default */.A.get(curEvent, 'ev.by.id')) {
10776
- curEvent.mode = 'follow';
10777
- }
10778
- if (util/* default */.A.get(nextEvent, 'ev.type') !== 'message_sent' || util/* default */.A.get(nextEvent, 'ev.by.id') !== util/* default */.A.get(curEvent, 'ev.by.id')) {
10779
- curEvent.is_end = true;
10780
- }
10781
- continue;
10782
- }
10783
- }
10784
- if (lastMsgSentIdx > -1) {
10785
- events[lastMsgSentIdx].is_last_message_send = true;
10786
- }
10787
- }
10788
- function visibleEvent(ev) {
10789
- let type = util/* default */.A.get(ev, 'type');
10790
- if (type === 'message_sent') return true;
10791
- if (type === 'conversation_state_updated') {
10792
- return util/* default */.A.get(ev, 'data.conversation.state') == 'ended';
10793
- }
10794
- }
10795
11632
  function Events_isSummited(form) {
10796
11633
  let fields = util/* default */.A.get(form, 'fields') || [];
10797
11634
  return util/* default */.A.find(fields, field => !!field.answered);
@@ -11245,6 +12082,7 @@ var Widget_empty = (empty_namespaceFn());
11245
12082
 
11246
12083
 
11247
12084
 
12085
+
11248
12086
  let Order = false;
11249
12087
  const LoadOrder = () => __webpack_require__.e(/* import() */ 185).then(() => (__webpack_require__(4185)));
11250
12088
 
@@ -11256,51 +12094,12 @@ class Widget extends common/* Com */.Mw {
11256
12094
  constructor(props) {
11257
12095
  super(props);
11258
12096
  Widget_defineProperty(this, "msgInput", (0,preact_module/* createRef */._3)());
11259
- Widget_defineProperty(this, "findMissingRTMessage", async started => {
11260
- let messageSentDict = this.props.store.listAgentRealtimeMessageSent();
11261
- let res1 = await this.props.store.sbzListConversations();
11262
- let conversions = util/* default */.A.get(res1, 'body.conversations') || [];
11263
- let cids = util/* default */.A.map(conversions, convo => convo.id);
11264
- let promises = util/* default */.A.map(cids, cid => this.props.store.sbzListMessages(cid));
11265
- let msgReses = await Promise.all(promises);
11266
- util/* default */.A.map(msgReses, msgRes => {
11267
- let messages = util/* default */.A.get(msgRes, 'body') || [];
11268
- util/* default */.A.map(messages, ev => {
11269
- if (ev.created < started) return;
11270
- if (ev.type !== 'message_sent') return;
11271
- if (util/* default */.A.get(ev, 'by.type') === 'user') return;
11272
- console.log('check ev pass condition', ev);
11273
- if (!messageSentDict[ev.id] && !this.debugAgentSentEvIds[ev.id]) {
11274
- let accid = util/* default */.A.get(this.props.store.matchAccount(), 'id');
11275
- this.props.store.sendBugReport(`[WIDGET ${accid}] Missing agent message sent evid ${ev.id}, cid ${util/* default */.A.convoOfEv(ev)}, ev_created ${ev.created}, FE timestamp ${Date.now()}, Init Debug timestamp ${started}`);
11276
- this.debugAgentSentEvIds[ev.id] = true;
11277
- }
11278
- });
11279
- });
11280
- });
11281
- Widget_defineProperty(this, "debugRTAgentMessageSent", async () => {
11282
- try {
11283
- let debugAccountIds = this.props.store.matchDebugAccountIds();
11284
- let accid = util/* default */.A.get(this.props.store.matchAccount(), 'id');
11285
- if (!debugAccountIds.includes(accid)) return;
11286
- console.log('START check RT agent message with BE source');
11287
- let started = Date.now();
11288
- this.findMissingRTMessage(started);
11289
- for (let i = 0; i < 100_000; i++) {
11290
- await util/* default */.A.sleep(120_000);
11291
- console.log('LOOP check RT agent message with BE source', i);
11292
- this.findMissingRTMessage(started);
11293
- }
11294
- } catch (err) {
11295
- this.props.store.sendBugReport(`debugRTAgentMessageSent ERROR ${err.stack}`);
11296
- }
11297
- });
11298
12097
  Widget_defineProperty(this, "formMounted", form => {
11299
12098
  let formData = this.fillForm(form);
11300
12099
  if (form.question_required || this.state.quickReplyMessage.text) {
11301
12100
  formData['question'] = {
11302
12101
  key: 'question',
11303
- is_required: true,
12102
+ is_required: false,
11304
12103
  label: this.props.t.i18n(util/* default */.A.get(form, `i18n_question_label`, {})) || form.question_label,
11305
12104
  type: 'text',
11306
12105
  value: this.state.quickReplyMessage.text
@@ -11311,14 +12110,118 @@ class Widget extends common/* Com */.Mw {
11311
12110
  });
11312
12111
  if (!this.props.store.isMobile() && !form._updated) this.focusInput();
11313
12112
  });
11314
- Widget_defineProperty(this, "sendMessage", async message => {
11315
- let hasPostback = util/* default */.A.find(message.attachments, att => att.type === 'postback');
11316
- if (this.isFormRequired() && hasPostback) {
11317
- this.onStartConvoClick();
11318
- this.fillQuickReplyToQuestion(message);
12113
+ Widget_defineProperty(this, "sendMessage", async (message, {
12114
+ formSubmitted = false,
12115
+ groupId
12116
+ } = {}) => {
12117
+ if (this._sendingNewConversation) return false;
12118
+ if (util/* default */.A.get(this.props.store.matchConvo(this.props.cid), 'state') === 'ended') {
12119
+ const form = this.startingConversationForm();
12120
+ if (form && (util/* default */.A.size(form.groups) || form.group_required || this.isFormRequired(''))) {
12121
+ this.setState({
12122
+ restartForm: true,
12123
+ quickReplyMessage: message
12124
+ });
12125
+ return;
12126
+ }
12127
+ this._sendingNewConversation = true;
12128
+ this.setState({
12129
+ creating: true,
12130
+ creatingError: null
12131
+ });
12132
+ try {
12133
+ const {
12134
+ convo,
12135
+ error
12136
+ } = await this.props.store.startConvo({
12137
+ locale: this.props.t.locale(),
12138
+ message: message.text,
12139
+ initial_by: this.props.store.matchUser().id
12140
+ });
12141
+ if (error) {
12142
+ this.setState({
12143
+ creatingError: error
12144
+ });
12145
+ return false;
12146
+ }
12147
+ await this.props.store.sendConvoEvent(convo.id, 'message_sent', {
12148
+ message
12149
+ });
12150
+ this.props.onGo({
12151
+ view: 'chat',
12152
+ cid: convo.id
12153
+ });
12154
+ } finally {
12155
+ this._sendingNewConversation = false;
12156
+ this.setState({
12157
+ creating: false
12158
+ });
12159
+ }
12160
+ return;
12161
+ }
12162
+ const form = this.startingConversationForm();
12163
+ const needsGroup = form && !this.hasSentMessage(this.props.cid) && (util/* default */.A.size(form.groups) || form.group_required);
12164
+ if (!formSubmitted && (this.isFormRequired() || needsGroup)) {
12165
+ this.setState({
12166
+ clickedJoin: true,
12167
+ quickReplyMessage: message
12168
+ });
11319
12169
  return;
11320
12170
  }
11321
12171
  let text = message.text;
12172
+ const localConvo = this.props.store.matchConvo(this.props.cid);
12173
+ if (localConvo && localConvo.light_type === 'widget') {
12174
+ this._sendingNewConversation = true;
12175
+ this.setState({
12176
+ creating: true,
12177
+ creatingError: null
12178
+ });
12179
+ try {
12180
+ const {
12181
+ convo,
12182
+ error
12183
+ } = await this.props.store.startConvo({
12184
+ locale: localConvo.locale,
12185
+ message: text,
12186
+ group_id: groupId,
12187
+ initial_by: this.props.store.matchUser().id,
12188
+ greeting_message: localConvo.events[0]
12189
+ });
12190
+ if (error || !convo) {
12191
+ this.setState({
12192
+ creatingError: error || 'start_failed'
12193
+ });
12194
+ return false;
12195
+ }
12196
+ this.props.store.promoteWidgetConvo(localConvo.id, convo.id);
12197
+ const sending = this.props.store.sendConvoEvent(convo.id, 'message_sent', {
12198
+ message
12199
+ });
12200
+ this.props.onGo({
12201
+ view: 'chat',
12202
+ cid: convo.id
12203
+ });
12204
+ await sending;
12205
+ this.userSent[convo.id] = true;
12206
+ if (formSubmitted && form && form.end_conversation_after_submit) await this.props.store.endConvo(convo.id);
12207
+ this.setState({
12208
+ clickedJoin: false,
12209
+ restartForm: false,
12210
+ quickReplyMessage: {}
12211
+ });
12212
+ } catch (error) {
12213
+ this.setState({
12214
+ creatingError: error
12215
+ });
12216
+ return false;
12217
+ } finally {
12218
+ this._sendingNewConversation = false;
12219
+ this.setState({
12220
+ creating: false
12221
+ });
12222
+ }
12223
+ return;
12224
+ }
11322
12225
  if (this.props.cid && this.props.cid.startsWith('cslight')) {
11323
12226
  let cid = this.props.cid;
11324
12227
  this._creating = (this._creating || 0) + 1;
@@ -11389,14 +12292,15 @@ class Widget extends common/* Com */.Mw {
11389
12292
  });
11390
12293
  return;
11391
12294
  }
11392
- await this.props.store.sendConvoEvent(convo.id, 'message_sent', {
12295
+ const sending = this.props.store.sendConvoEvent(convo.id, 'message_sent', {
11393
12296
  message
11394
12297
  });
11395
- if (_creating != this._creating) return;
11396
12298
  this.props.onGo({
11397
12299
  view: 'chat',
11398
12300
  cid: convo.id
11399
12301
  });
12302
+ await sending;
12303
+ if (_creating != this._creating) return;
11400
12304
  this.setState({
11401
12305
  creating: false
11402
12306
  });
@@ -11436,7 +12340,6 @@ class Widget extends common/* Com */.Mw {
11436
12340
  this.focusInput();
11437
12341
  });
11438
12342
  this.userSent = {};
11439
- this.debugAgentSentEvIds = {};
11440
12343
  this.wasFormInputed = false;
11441
12344
  this.setState({
11442
12345
  creating: false,
@@ -11452,7 +12355,6 @@ class Widget extends common/* Com */.Mw {
11452
12355
  componentDidMount() {
11453
12356
  if (!this.props.store.isMobile()) this.focusInput();
11454
12357
  this.updateFormDataFields();
11455
- this.debugRTAgentMessageSent();
11456
12358
  }
11457
12359
  applyMessage(text) {
11458
12360
  this.focusInput(text);
@@ -11467,6 +12369,7 @@ class Widget extends common/* Com */.Mw {
11467
12369
  this.closeOrder();
11468
12370
  this.setState({
11469
12371
  clickedJoin: false,
12372
+ restartForm: false,
11470
12373
  quickReplyMessage: {}
11471
12374
  });
11472
12375
  util/* default */.A.setTimeout(() => {
@@ -11476,19 +12379,14 @@ class Widget extends common/* Com */.Mw {
11476
12379
  this.updateFormDataFields();
11477
12380
  }
11478
12381
  }
12382
+ componentWillUnmount() {
12383
+ this.cancelContainerFocus();
12384
+ }
11479
12385
  ShowTyping() {
11480
12386
  this.$events && this.$events.ShowTyping();
11481
12387
  }
11482
12388
  shouldShowForm() {
11483
- let form;
11484
- let accountSetting = this.props.plugin.chatbox || {};
11485
- let acc = this.props.store.matchAccount() || {};
11486
- if (util/* default */.A.get(accountSetting, 'prechat_form.enabled')) form = accountSetting.prechat_form;
11487
- let offlineEnabled = util/* default */.A.get(accountSetting, 'offline_form.enabled');
11488
- if (this.isOffline(acc, accountSetting) && offlineEnabled) form = accountSetting.offline_form;
11489
- if (!this.hasSentMessage(this.props.cid) && form && (util/* default */.A.size(form.groups) || form.group_required)) return true;
11490
- let formRequired = this.isFormRequired();
11491
- return formRequired && !this.props.cid || formRequired && this.props.cid && this.state.clickedJoin;
12389
+ return !!(this.state.restartForm || this.state.clickedJoin);
11492
12390
  }
11493
12391
  render() {
11494
12392
  let showform = this.shouldShowForm();
@@ -11552,42 +12450,22 @@ class Widget extends common/* Com */.Mw {
11552
12450
  util/* default */.A.map(formData, (field, key) => {
11553
12451
  field = Object.assign({}, field);
11554
12452
  field.is_empty_error = false;
11555
- if (field.is_required && (field.value === undefined || field.value === '' || util/* default */.A.size(field.value) === 0 && Array.isArray(field.value))) {
12453
+ if (field.is_required && (field.value == null || typeof field.value === 'string' && !field.value.trim() || util/* default */.A.size(field.value) === 0 && Array.isArray(field.value))) {
11556
12454
  field.is_empty_error = true;
11557
12455
  field.error = this.props.t('error_empty');
11558
12456
  } else field.error = '';
11559
- if (key.substr(5) === 'emails') {
11560
- if (field.is_required) {
11561
- if (!util/* default */.A.isEmail(field.value)) {
11562
- field.error = this.props.t('error_email_invalid');
11563
- }
11564
- } else {
11565
- let value = field.value || '';
11566
- if (typeof value !== 'string') value = value + '';
11567
- if (value.trim() && !util/* default */.A.isEmail(field.value)) {
11568
- field.error = this.props.t('error_email_invalid');
11569
- }
11570
- }
12457
+ if (key === 'attr:emails' && !field.error && String(field.value ?? '').trim() && !util/* default */.A.isEmail(field.value)) {
12458
+ field.error = this.props.t('error_email_invalid');
11571
12459
  }
11572
- if (key.substr(5) === 'phones') {
11573
- if (field.is_required) {
11574
- if (!util/* default */.A.isPhone(field.value)) {
11575
- field.error = this.props.t('error_phone_invalid');
11576
- }
11577
- } else {
11578
- let value = field.value || '';
11579
- if (typeof value !== 'string') value = value + '';
11580
- if (value.trim() && !util/* default */.A.isPhone(field.value)) {
11581
- field.error = this.props.t('error_phone_invalid');
11582
- }
11583
- }
12460
+ if (key === 'attr:phones' && !field.error && String(field.value ?? '').trim() && !util/* default */.A.isPhone(field.value)) {
12461
+ field.error = this.props.t('error_phone_invalid');
11584
12462
  }
11585
12463
  newformdata[key] = field;
11586
12464
  });
11587
12465
  return newformdata;
11588
12466
  }
11589
12467
  async submitPrechatForm(form, formName) {
11590
- if (this.state.submiting) return;
12468
+ if (this.state.submiting || this.state.creating) return;
11591
12469
  let newData = this.validateForm(this.state.formData);
11592
12470
  let hasError = util/* default */.A.find(newData, field => !!field.error);
11593
12471
  if (hasError) {
@@ -11602,6 +12480,8 @@ class Widget extends common/* Com */.Mw {
11602
12480
  let is_lead = false;
11603
12481
  util/* default */.A.map(data, (field, key) => {
11604
12482
  if (!key.startsWith('attr:')) return;
12483
+ if (key === 'attr:phones') field.value = String(field.value ?? '').trim().replace(/[(). \-]/g, '');
12484
+ if (key === 'attr:emails') field.value = String(field.value ?? '').trim();
11605
12485
  var attr = {
11606
12486
  key: key.substr(5)
11607
12487
  };
@@ -11616,7 +12496,8 @@ class Widget extends common/* Com */.Mw {
11616
12496
  key: 'lead_source',
11617
12497
  text: 'widget'
11618
12498
  });
11619
- let firstmsg = util/* default */.A.get(data, 'question.value', this.props.t('get_started'));
12499
+ const question = String(util/* default */.A.get(data, 'question.value', '') ?? '').trim();
12500
+ const firstmsg = question || (/^vi(?:[-_]|$)/i.test(navigator.language || '') ? 'Xin chào' : 'Hello');
11620
12501
  let groupid = util/* default */.A.get(data, 'group.value', '');
11621
12502
  this._creating = (this._creating || 0) + 1;
11622
12503
  let _creating = this._creating;
@@ -11634,7 +12515,7 @@ class Widget extends common/* Com */.Mw {
11634
12515
  await util/* default */.A.sleep(500);
11635
12516
  if (_creating != this._creating) return;
11636
12517
  if (this.props.cid && this.props.cid.startsWith('cslight')) {
11637
- this.sendMessage({
12518
+ await this.sendMessage({
11638
12519
  text: firstmsg,
11639
12520
  format: 'plaintext',
11640
12521
  fields: [{
@@ -11642,10 +12523,13 @@ class Widget extends common/* Com */.Mw {
11642
12523
  value: util/* default */.A.stringify(groupid)
11643
12524
  }],
11644
12525
  attachments: this.state.quickReplyMessage.attachments
12526
+ }, {
12527
+ formSubmitted: true,
12528
+ groupId: groupid
11645
12529
  });
11646
12530
  return;
11647
12531
  }
11648
- if (this.props.cid) {
12532
+ if (this.props.cid && util/* default */.A.get(this.props.store.matchConvo(this.props.cid), 'state') !== 'ended') {
11649
12533
  this.setState({
11650
12534
  clickedJoin: false
11651
12535
  });
@@ -11671,7 +12555,8 @@ class Widget extends common/* Com */.Mw {
11671
12555
  }
11672
12556
  let message = {
11673
12557
  text: firstmsg,
11674
- format: 'plaintext'
12558
+ format: 'plaintext',
12559
+ attachments: this.state.quickReplyMessage.attachments
11675
12560
  };
11676
12561
  let req = {
11677
12562
  group_id: groupid,
@@ -11700,9 +12585,12 @@ class Widget extends common/* Com */.Mw {
11700
12585
  message
11701
12586
  });
11702
12587
  if (_creating != this._creating) return;
12588
+ if (form.end_conversation_after_submit) await this.props.store.endConvo(newconvoid);
12589
+ if (_creating != this._creating) return;
11703
12590
  this.setState({
11704
12591
  creating: false,
11705
12592
  clickedJoin: false,
12593
+ restartForm: false,
11706
12594
  quickReplyMessage: {}
11707
12595
  });
11708
12596
  this.props.onGo({
@@ -11733,6 +12621,7 @@ class Widget extends common/* Com */.Mw {
11733
12621
  if (!field) return;
11734
12622
  field.value = val;
11735
12623
  field.error = undefined;
12624
+ field.is_empty_error = false;
11736
12625
  this.setState({
11737
12626
  formData
11738
12627
  });
@@ -11853,7 +12742,7 @@ class Widget extends common/* Com */.Mw {
11853
12742
  renderFields(form, formName) {
11854
12743
  if (util/* default */.A.size(this.state.formData) === 0) return null;
11855
12744
  let $fields = util/* default */.A.map(this.state.formData, (field, key) => {
11856
- if (this.state.quickReplyMessage.text && key === 'question') return null;
12745
+ if (key === 'question' && util/* default */.A.find(this.state.quickReplyMessage.attachments, att => att.type === 'postback')) return null;
11857
12746
  let $field = null;
11858
12747
  var errclass = field.error ? 'input--error' : '';
11859
12748
  if (field.type === 'text') {
@@ -11886,7 +12775,11 @@ class Widget extends common/* Com */.Mw {
11886
12775
  this['form_' + encode(key)] = ref;
11887
12776
  },
11888
12777
  class: `form-control ${errclass}`,
11889
- type: "text"
12778
+ type: key === 'attr:phones' ? 'tel' : key === 'attr:emails' ? 'email' : 'text',
12779
+ inputMode: key === 'attr:phones' ? 'tel' : key === 'attr:emails' ? 'email' : undefined,
12780
+ autoComplete: key === 'attr:phones' ? 'tel' : key === 'attr:emails' ? 'email' : undefined,
12781
+ "aria-invalid": field.error ? 'true' : undefined,
12782
+ "aria-describedby": field.error ? 'form-error_' + encode(key) : undefined
11890
12783
  });
11891
12784
  }
11892
12785
  } else if (field.type === 'number') {
@@ -11970,6 +12863,8 @@ class Widget extends common/* Com */.Mw {
11970
12863
  }, label, field.is_required ? (0,preact_module.h)("span", {
11971
12864
  class: "red"
11972
12865
  }, "*") : ''), $field, field.error ? (0,preact_module.h)("div", {
12866
+ id: 'form-error_' + encode(key),
12867
+ role: "alert",
11973
12868
  class: "form-control--valid-input--error"
11974
12869
  }, field.error) : '');
11975
12870
  });
@@ -11982,9 +12877,10 @@ class Widget extends common/* Com */.Mw {
11982
12877
  if (!title) title = util/* default */.A.get(form, 'title', this.props.t('capture_lead_title'));
11983
12878
  title = title.replace('↵', '');
11984
12879
  let btncls = 'btn--start-convo ';
11985
- let hasError = util/* default */.A.find(this.state.formData, field => !!field.error);
11986
12880
  let newData = this.validateForm(this.state.formData);
11987
12881
  let hasEmptyError = util/* default */.A.find(newData, field => !!field.is_empty_error);
12882
+ const phone = String(util/* default */.A.get(this.state.formData, 'attr:phones.value', '') ?? '').trim();
12883
+ const phoneTooShort = phone.length > 0 && phone.length < 5;
11988
12884
  let bodycls = 'widget-body';
11989
12885
  if (this.props.store.isEmbededChatMode()) bodycls += ' embed-chat';
11990
12886
  return (0,preact_module.h)("div", {
@@ -12004,12 +12900,28 @@ class Widget extends common/* Com */.Mw {
12004
12900
  }), (0,preact_module.h)("button", {
12005
12901
  class: btncls,
12006
12902
  onClick: _ => this.submitPrechatForm(form, formName),
12007
- disabled: !!hasEmptyError || !!hasError || this.state.creating
12903
+ disabled: !!hasEmptyError || phoneTooShort || this.state.creating
12008
12904
  }, submitLabel)));
12009
12905
  }
12010
12906
  goToConvo(cid) {
12907
+ let view = 'chat';
12908
+ if (!cid) {
12909
+ const greeting = widgetGreeting(this.props.plugin.chatbox, this.props.t);
12910
+ cid = this.props.store.startWidgetConvo(greeting, this.props.t.locale()).convo.id;
12911
+ const form = this.startingConversationForm();
12912
+ const setting = this.props.plugin.chatbox || {};
12913
+ const offline = util/* default */.A.get(setting, 'offline_form.enabled') && this.isOffline(this.props.store.matchAccount() || {}, setting);
12914
+ if (form && (offline || this.isFormRequired(cid) || util/* default */.A.size(form.groups) || form.group_required)) {
12915
+ view = offline ? 'offline_form' : 'prechat_form';
12916
+ this.setState({
12917
+ clickedJoin: false,
12918
+ restartForm: false,
12919
+ quickReplyMessage: {}
12920
+ });
12921
+ }
12922
+ }
12011
12923
  this.props.onGo({
12012
- view: 'chat',
12924
+ view,
12013
12925
  cid
12014
12926
  });
12015
12927
  }
@@ -12083,7 +12995,7 @@ class Widget extends common/* Com */.Mw {
12083
12995
  util/* default */.A.setTimeout(() => $input && $input.blur());
12084
12996
  util/* default */.A.setTimeout(() => $input && $input.blur(), 300);
12085
12997
  }
12086
- focusInput(text) {
12998
+ focusInput(text, repeat = true) {
12087
12999
  if (this.props.store.isPreview) return;
12088
13000
  if (this.shouldShowForm()) {
12089
13001
  let focusfieldkey = '';
@@ -12108,6 +13020,7 @@ class Widget extends common/* Com */.Mw {
12108
13020
  if (text != undefined && typeof text === 'string') {
12109
13021
  $input.applyMessage(text);
12110
13022
  }
13023
+ if (!repeat) return $input.focus();
12111
13024
  util/* default */.A.setTimeout(() => $input.focus());
12112
13025
  util/* default */.A.setTimeout(() => $input.focus(), 300);
12113
13026
  }
@@ -12144,21 +13057,13 @@ class Widget extends common/* Com */.Mw {
12144
13057
  onSend: this.sendMessage,
12145
13058
  t: this.props.t
12146
13059
  });
12147
- let convo = this.props.store.matchConvo(this.props.cid) || {};
12148
- if (this.isFormRequired() || convo.state === 'ended') {
12149
- $input = (0,preact_module.h)("div", {
12150
- class: "message-input message-input--preform"
12151
- }, (0,preact_module.h)("button", {
12152
- class: "btn--start-convo",
12153
- onClick: e => this.onStartConvoClick(e)
12154
- }, this.props.t('offline_preform_btn')));
12155
- }
12156
13060
  let bodycls = 'widget-body';
12157
13061
  if (this.props.store.isEmbededChatMode()) bodycls += ' embed-chat';
12158
13062
  return (0,preact_module.h)("div", {
12159
13063
  class: bodycls
12160
13064
  }, (0,preact_module.h)("div", {
12161
13065
  class: "widget-body--content",
13066
+ onPointerDown: () => this.cancelContainerFocus(),
12162
13067
  onClick: e => this.onContainerClick(e)
12163
13068
  }, (0,preact_module.h)(Events, {
12164
13069
  isShow: this.props.isShow,
@@ -12168,7 +13073,7 @@ class Widget extends common/* Com */.Mw {
12168
13073
  onFormSubmit: e => this.onEventFormSubmit(e),
12169
13074
  ref: ref => this.$events = ref,
12170
13075
  cid: this.props.cid,
12171
- creating: this.creating,
13076
+ creating: this.state.creating,
12172
13077
  onSend: e => this.sendMessage(e),
12173
13078
  onPostback: e => this.createPostback(e),
12174
13079
  t: this.props.t,
@@ -12195,42 +13100,45 @@ class Widget extends common/* Com */.Mw {
12195
13100
  t: this.props.t
12196
13101
  }), $input);
12197
13102
  }
12198
- async onStartConvoClick() {
12199
- var convo = this.props.store.matchConvo(this.props.cid) || {};
12200
- if (convo.state === 'ended') return this.props.onGo({
12201
- view: 'chat',
12202
- cid: ''
12203
- });
12204
- this.setState({
12205
- clickedJoin: true,
12206
- quickReplyMessage: {}
12207
- });
12208
- }
12209
13103
  onEventFormSubmit() {
12210
13104
  this.focusInput();
12211
13105
  }
12212
- onContainerClick() {
12213
- var selection = window.getSelection();
12214
- if (selection.toString().length > 0) return;
12215
- if (!this.props.store.isMobile()) this.focusInput();
12216
- }
12217
- isFormRequired() {
12218
- let form;
12219
- let accountSetting = this.props.plugin.chatbox || {};
12220
- let acc = this.props.store.matchAccount() || {};
12221
- if (util/* default */.A.get(accountSetting, 'prechat_form.enabled')) form = accountSetting.prechat_form;
12222
- let offlineEnabled = util/* default */.A.get(accountSetting, 'offline_form.enabled');
12223
- if (this.isOffline(acc, accountSetting) && offlineEnabled) form = accountSetting.offline_form;
13106
+ cancelContainerFocus() {
13107
+ if (this.containerFocusTimer) util/* default */.A.clearTimeout(this.containerFocusTimer);
13108
+ this.containerFocusTimer = null;
13109
+ }
13110
+ onContainerClick(event) {
13111
+ this.cancelContainerFocus();
13112
+ const target = event && event.target;
13113
+ const element = target && (target.nodeType === 1 ? target : target.parentElement);
13114
+ if (element && element.closest('a, button, input, textarea, select, [contenteditable]')) return;
13115
+ if (event && event.detail > 1) return;
13116
+ if (this.props.store.isMobile() || window.getSelection()?.toString()) return;
13117
+ const cid = this.props.cid;
13118
+ this.containerFocusTimer = util/* default */.A.setTimeout(() => {
13119
+ this.containerFocusTimer = null;
13120
+ if (!this._isMounted || this.props.cid !== cid || this.props.isShow === false || window.getSelection()?.toString()) return;
13121
+ this.focusInput(undefined, false);
13122
+ }, 300);
13123
+ }
13124
+ startingConversationForm() {
13125
+ const setting = this.props.plugin.chatbox || {};
13126
+ const account = this.props.store.matchAccount() || {};
13127
+ if (this.isOffline(account, setting) && util/* default */.A.get(setting, 'offline_form.enabled')) return setting.offline_form;
13128
+ if (util/* default */.A.get(setting, 'prechat_form.enabled')) return setting.prechat_form;
13129
+ }
13130
+ isFormRequired(cid = this.props.cid) {
13131
+ let form = this.startingConversationForm();
12224
13132
  if (!form) return false;
12225
13133
  let formData = this.fillForm(form);
12226
- let convo = this.props.store.matchConvo(this.props.cid) || {};
13134
+ let convo = this.props.store.matchConvo(cid) || {};
12227
13135
  if (convo.state === 'ended') return true;
12228
13136
  if (convo.state && convo.state !== 'pending') delete formData.group;
12229
13137
  let isAllFiledEmpty = true;
12230
13138
  util/* default */.A.each(formData, field => {
12231
13139
  if (field.value) isAllFiledEmpty = false;
12232
13140
  });
12233
- if (isAllFiledEmpty && !this.userHasSent(this.props.cid)) return true;
13141
+ if (isAllFiledEmpty && !this.userHasSent(cid)) return true;
12234
13142
  return !!util/* default */.A.find(formData, field => field.is_required && (field.value == null || field.value === ''));
12235
13143
  }
12236
13144
  renderConvoSummary(convo) {
@@ -12375,7 +13283,7 @@ class Widget extends common/* Com */.Mw {
12375
13283
  if (form.question_required) {
12376
13284
  data['question'] = {
12377
13285
  key: 'question',
12378
- is_required: true,
13286
+ is_required: false,
12379
13287
  label: this.props.t.i18n(util/* default */.A.get(form, `i18n_question_label`, {})) || form.question_label,
12380
13288
  type: 'text'
12381
13289
  };
@@ -12651,6 +13559,9 @@ class Main extends common/* Com */.Mw {
12651
13559
  cid
12652
13560
  };
12653
13561
  }
13562
+ if (newView.view === 'chat' && !newView.opts.cid && this.refWidget.current) {
13563
+ return this.refWidget.current.goToConvo('');
13564
+ }
12654
13565
  if (this.props.store.isMobile()) modifyViewport(this.shouldLockPageScroll());
12655
13566
  this.props.store.updateLastview(newView);
12656
13567
  this.forceUpdate();
@@ -12724,7 +13635,6 @@ function modifyViewport(lockPageScroll) {
12724
13635
 
12725
13636
 
12726
13637
 
12727
- const LoadContact = () => __webpack_require__.e(/* import() */ 74).then(() => (__webpack_require__(9074)));
12728
13638
  const LoadPopup = () => __webpack_require__.e(/* import() */ 132).then(() => (__webpack_require__(132)));
12729
13639
  const LoadNotif = () => __webpack_require__.e(/* import() */ 490).then(() => (__webpack_require__(1490)));
12730
13640
  function Plugin(plugin, store, $container, lib) {
@@ -12766,7 +13676,6 @@ function Plugin(plugin, store, $container, lib) {
12766
13676
  };
12767
13677
  var _ref = (0,preact_module/* createRef */._3)();
12768
13678
  let Popup = null;
12769
- let Contact = null;
12770
13679
  let Notif = null;
12771
13680
  var showCurrentChatbox = p => lib.showWidget(p);
12772
13681
  var nextPage = () => {
@@ -12813,16 +13722,6 @@ function Plugin(plugin, store, $container, lib) {
12813
13722
  ref: _ref
12814
13723
  }), $div);
12815
13724
  }
12816
- if (plugin.type === 'contact') {
12817
- if (!Contact) Contact = (await LoadContact()).default;
12818
- (0,preact_module/* render */.XX)((0,preact_module.h)(Contact, {
12819
- destroy: _destroy,
12820
- t: this.t,
12821
- plugin: plugin,
12822
- store: store,
12823
- ref: _ref
12824
- }), $div);
12825
- }
12826
13725
  domGate.open();
12827
13726
  };
12828
13727
  this.call = (method, param) => domGate.entry().then(() => {
@@ -12831,9 +13730,10 @@ function Plugin(plugin, store, $container, lib) {
12831
13730
  });
12832
13731
  var _destroy = false;
12833
13732
  this.destroy = () => {
13733
+ if (_destroy) return;
12834
13734
  _destroy = true;
12835
13735
  (0,preact_module/* render */.XX)(null, $div);
12836
- $div.parentNode.removeChild($div);
13736
+ if ($div.parentNode) $div.parentNode.removeChild($div);
12837
13737
  };
12838
13738
  this.highlight = comref => {
12839
13739
  highlight = comref;
@@ -12914,14 +13814,15 @@ class PluginMgr {
12914
13814
  this.$div = $div;
12915
13815
  this.pluginM = {};
12916
13816
  this._destroy = false;
12917
- lib.store.onHighlight({
13817
+ this._subscriptions = [];
13818
+ this._subscriptions.push(lib.store.onHighlight({
12918
13819
  _isMounted: true
12919
13820
  }, (id, comref) => {
12920
13821
  let plugin = this.pluginM[id];
12921
13822
  if (!plugin) return;
12922
13823
  plugin.highlight(comref);
12923
- });
12924
- lib.store.onUpdate({
13824
+ }));
13825
+ this._subscriptions.push(lib.store.onUpdate({
12925
13826
  _isMounted: true
12926
13827
  }, () => {
12927
13828
  if (this._destroy) return;
@@ -12943,7 +13844,7 @@ class PluginMgr {
12943
13844
  this.pluginM[id].destroy();
12944
13845
  delete this.pluginM[id];
12945
13846
  });
12946
- });
13847
+ }));
12947
13848
  let pluginM = this.lib.store.matchPlugin();
12948
13849
  if (typeof sbz_info != 'undefined') sbz_info['plugins'] = pluginM;
12949
13850
  let foundchatbox = false;
@@ -13017,13 +13918,26 @@ class PluginMgr {
13017
13918
  if (chatbox) return chatbox.setLocale(locale);
13018
13919
  }
13019
13920
  destroy() {
13921
+ if (this._destroy) return;
13922
+ this._destroy = true;
13923
+ for (const unsubscribe of this._subscriptions) unsubscribe();
13924
+ this._subscriptions = [];
13020
13925
  util/* default */.A.map(this.pluginM, (conf, id) => {
13021
13926
  conf.destroy();
13022
13927
  delete this.pluginM[id];
13023
13928
  });
13024
- this._destroy = true;
13025
13929
  }
13026
13930
  }
13931
+ ;// ./src/util/event.js
13932
+ function normalizeCdpEvent(type, payload, options) {
13933
+ if (type && typeof type === 'object') return type;
13934
+ let data = {
13935
+ type
13936
+ };
13937
+ if (payload !== undefined) data.payload = payload;
13938
+ if (options && typeof options === 'object') data = Object.assign({}, options, data);
13939
+ return data;
13940
+ }
13027
13941
  ;// ./src/lib.js
13028
13942
  function lib_defineProperty(e, r, t) { return (r = lib_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
13029
13943
  function lib_toPropertyKey(t) { var i = lib_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
@@ -13031,6 +13945,7 @@ function lib_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e
13031
13945
  ;
13032
13946
 
13033
13947
 
13948
+
13034
13949
  class lib_Widget {
13035
13950
  constructor(ApiURL, FileURL, RealtimeURL, inmem, fake) {
13036
13951
  lib_defineProperty(this, "version", () => '4.5');
@@ -13047,6 +13962,7 @@ class lib_Widget {
13047
13962
  });
13048
13963
  lib_defineProperty(this, "pageview", v => this.store.sendPageview(v));
13049
13964
  this.impressionTokens = {};
13965
+ this._containerTimers = new Set();
13050
13966
  this.domGate = new util/* default */.A.Gate();
13051
13967
  this.store = new Store(ApiURL, FileURL, RealtimeURL, inmem, fake);
13052
13968
  window.sbz_store = this.store;
@@ -13066,6 +13982,16 @@ class lib_Widget {
13066
13982
  await this.store.readyGate.entry();
13067
13983
  cb();
13068
13984
  }
13985
+ watchContainer(container) {
13986
+ const manager = this.pluginMgr;
13987
+ const timer = util/* default */.A.setInterval(() => {
13988
+ if (!this.store.isDead() && container && container.isConnected) return;
13989
+ manager.destroy();
13990
+ util/* default */.A.clearInterval(timer);
13991
+ this._containerTimers.delete(timer);
13992
+ }, 1000);
13993
+ this._containerTimers.add(timer);
13994
+ }
13069
13995
  setAIDevMode(mode) {
13070
13996
  this.store.setAIDevMode(mode);
13071
13997
  }
@@ -13083,11 +14009,7 @@ class lib_Widget {
13083
14009
  let user = await this.store.login(accid, user_id, tokenGenerator);
13084
14010
  if (!$container) $container = document.body;
13085
14011
  this.pluginMgr = new PluginMgr(this, $container);
13086
- let clean = util/* default */.A.setInterval(() => {
13087
- if ($container && $container.isConnected) return;
13088
- this.pluginMgr.destroy();
13089
- util/* default */.A.clearInterval(clean);
13090
- }, 1000);
14012
+ this.watchContainer($container);
13091
14013
  this.domGate.open();
13092
14014
  return user;
13093
14015
  }
@@ -13109,11 +14031,7 @@ class lib_Widget {
13109
14031
  }, '*'), 0);
13110
14032
  if (!$container) $container = document.body || document;
13111
14033
  this.pluginMgr = new PluginMgr(this, $container);
13112
- let clean = util/* default */.A.setInterval(() => {
13113
- if ($container && $container.isConnected) return;
13114
- this.pluginMgr.destroy();
13115
- util/* default */.A.clearInterval(clean);
13116
- }, 1000);
14034
+ this.watchContainer($container);
13117
14035
  this.domGate.open();
13118
14036
  return user;
13119
14037
  }
@@ -13127,11 +14045,7 @@ class lib_Widget {
13127
14045
  }, '*'), 0);
13128
14046
  if (!$container) $container = document.body || document;
13129
14047
  this.pluginMgr = new PluginMgr(this, $container);
13130
- let clean = util/* default */.A.setInterval(() => {
13131
- if ($container && $container.isConnected) return;
13132
- this.pluginMgr.destroy();
13133
- util/* default */.A.clearInterval(clean);
13134
- }, 1000);
14048
+ this.watchContainer($container);
13135
14049
  this.domGate.open();
13136
14050
  cb && cb(outmask);
13137
14051
  return outmask;
@@ -13155,11 +14069,7 @@ class lib_Widget {
13155
14069
  }, '*'), 0);
13156
14070
  if (!$container) $container = document.body || document;
13157
14071
  this.pluginMgr = new PluginMgr(this, $container);
13158
- let clean = util/* default */.A.setInterval(() => {
13159
- if ($container && $container.isConnected) return;
13160
- this.pluginMgr.destroy();
13161
- util/* default */.A.clearInterval(clean);
13162
- }, 1000);
14072
+ this.watchContainer($container);
13163
14073
  this.domGate.open();
13164
14074
  if (typeof sbz_info != 'undefined') sbz_info.set_account_done = util/* default */.A.Date.now();
13165
14075
  cb && cb(outmask);
@@ -13186,7 +14096,7 @@ class lib_Widget {
13186
14096
  }
13187
14097
  async createTicket(ticket) {
13188
14098
  await this.domGate.entry();
13189
- return this.createTicket(ticket);
14099
+ return this.store.createTicket(ticket);
13190
14100
  }
13191
14101
  expandWidget(view, convo) {
13192
14102
  return this.showWidget(view, convo);
@@ -13292,7 +14202,7 @@ class lib_Widget {
13292
14202
  if (req.bot_id) {
13293
14203
  let botid = req.bot_id;
13294
14204
  delete req.bot_id;
13295
- if (!util/* default */.A.find(members, m => b.id == botid)) {
14205
+ if (!util/* default */.A.find(members, m => m.id == botid)) {
13296
14206
  members.push({
13297
14207
  type: 'bot',
13298
14208
  id: botid,
@@ -13343,6 +14253,9 @@ class lib_Widget {
13343
14253
  this.store.overrideDeviceType(type);
13344
14254
  }
13345
14255
  unload() {
14256
+ for (const timer of this._containerTimers) util/* default */.A.clearInterval(timer);
14257
+ this._containerTimers.clear();
14258
+ this.subs = [];
13346
14259
  if (this.pluginMgr) this.pluginMgr.destroy();
13347
14260
  this.store.destroy();
13348
14261
  }
@@ -13389,15 +14302,6 @@ class lib_Widget {
13389
14302
  this.store.doNotStartBot();
13390
14303
  }
13391
14304
  }
13392
- function normalizeCdpEvent(type, payload, options) {
13393
- if (type && typeof type === 'object') return type;
13394
- let data = {
13395
- type: type
13396
- };
13397
- if (payload !== undefined) data.payload = payload;
13398
- if (options && typeof options === 'object') data = Object.assign({}, options, data);
13399
- return data;
13400
- }
13401
14305
  window.__sbz_WIDGET = lib_Widget;
13402
14306
  /* harmony default export */ const lib = (lib_Widget);
13403
14307
  ;// ./screenshoot.js